Vypočíta korene kvadratickej rovnice a vykreslí graf

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: KMP (Club of young programmers)

Program: Kvadrat4.pas
File exe: Kvadrat4.exe

Tento program zo zadaných koeficientov a, b,c vypočíta korene kvadratickej rovnice, upraví rovnicu na štvorec a vykreslí graf funkcie (pozor si treba dat hlavne na to, že pri vykresľovaní grafu sa môžu zadať len celé čísla a os y smeruje trochu netypicky k dolnému okraju obrazovky).
{ KVADRAT4.PAS                                    Copyright (c) ... }
{                                                                   }
{ Tento program zo zadanych koeficientov a, b,c vypocita korene     }
{ kvadratickej rovnice, upravi rovnicu na stvorec a vykresli graf   }
{ funkcie (pozor si treba dat hlavne na to, ze pri vykreslovani     }
{ grafu sa mozu zadat len cele cisla a os y smeruje trochu          }
{ netypicky k dolnemu okraju obrazovky).                            }
{                                                                   }
{ Author: Neznamy                                                   }
{ Date  : 16.10.2008                           http://www.trsek.com }
 
program kvadratickarovnica;
uses grafika;
var a,b,c,d,x,x1,x2,e,f,g,h,i:real;
z,y,a2,b2,c2,x0,y0,o,xk,yk:integer;
begin
writeln('zadaj a');
read(a);
if a=0 then repeat begin
                   writeln('zadaj inu hodnotu a(pre a=0 straca rovnica svoj kvadraticky charakter)');
                   read(a);
                   end
                   until a<>0;
writeln('zadaj b');
read(b);
writeln('zadaj c');
read(c);
d:=sqr(b)-(4*a*c);
if d>0 then begin
            x1:=(-b+sqrt(d))/2*a;
            x2:=(-b-sqrt(d))/2*a;
            writeln('hodnota korenov kvadratickej rovnice (x1 a x2) je',x1:7:2,'  a  ',x2:7:2);
            end
       else if d=0 then begin
                        x:=-b/2*a;
                        writeln('hodnota dvojnasobneho korena kvadratickej rovnice x je',x:7:2);
                        end
                   else writeln('pre tieto hodnoty a,b,c nema kvadraticka rovnica v obore realnych cisel riesenie');
writeln;
writeln('tvar vasej rovnice je:',' ',a:1:2,'sqr(x)+(',b:1:2,')x+(',c:1:2,')=0');
writeln;
writeln('alebo:',a:1:2,'*(x-(',x1:1:2,'))*(x-(',x2:1:2,'))=0');
writeln;
writeln('po uprave na stvorec:');
e:=(a*sqr(f)+b*f+c)-sqr(f+b/2);
if b>0 then begin
            writeln('(sqr(x+',b/2:1:2,'))+(',e:1:2,')');
            end
       else begin
            writeln('(sqr(x',b/2:1:2,'))+(',e:1:2,')');
            end;
writeln;
writeln('vrchol paraboly ma suradnice: (',-b/2:1:2,',',e:1:2,')');
g:=(sqr(b/2)+e);
writeln('priesecnik s osou y je:(0,',g:1:2,')');
{if e>=0 then begin
             h:=-b/2+sqrt(e);
             i:=-b/2-sqrt(e);
             writeln('priesecniky s osou x su:(',h:1:0,',0) a (',i:1:0,',0)');
             end
        else} writeln('priesecniky s osou x su:(',x1:1:2,',0) a (',x2:1:2,',0)');
writeln('graf kvadratickej rovnice je:');
writeln('ak chces poznat aj graf funkcie tak znova zadaj a,b,c:');
writeln('zadaj a(len celociselne)');
readln(a2);
if a2=0 then repeat begin
                   writeln('zadaj inu hodnotu a(pre a=0 straca rovnica svoj kvadraticky charakter)');
                   read(a2);
                   end
                   until a<>0;
writeln('zadaj b(len celociselne)');
readln(b2);
writeln('zadaj c(len celociselne)');
readln(c2);
writeln('zadaj rozsah grafu(len celociselny)');
readln(o);
x0:=-o-1;
y0:=a2*sqr(-o-1)+b2*(-0-1)+c2;{zaciatocne suradnice paraboly}
xk:=o+1;
yk:=a2*sqr(o+1)+b2*(o+1)+c2;{konecne suradnice paraboly}
for z:=-o to o do begin
                    y:=a2*sqr(z)+b2*z+c2;
                    filledcircle(z+500,y+300,1);
                    line(x0+500,y0+300,z+500,y+300);
                    x0:=z;
                    y0:=y;
                    end;
                    line(xk,yk,z,y);
line(400,300,600,300);{os x}
line(500,200,500,450);{os y}
line(595,305,600,300);
line(595,295,600,300);{sipka x}
line(602,307,608,313);
line(608,307,602,313);{nakreslene x}
line(495,445,500,450);
line(505,445,500,450);{sipka y}
line(511,455,508,452);
line(511,455,514,452);
line(511,455,511,459);{nakreslene y}
 
 
end.