Thema: Delphi Polynom von 2tem Grad

Einzelnen Beitrag anzeigen

diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#1

Polynom von 2tem Grad

  Alt 17. Jun 2012, 16:43
Hallo zusammen.

Meine Aufgabe lautete es, mit einem Programm die Anzahl der Lösungen für f(x)=ax^2+bx+c=0 und deren Zeichen zu rechnen, ohne die Lösungen zu rechnen.

Das Programm läuft, aber die Lösungen sind nicht richtig, ich habe es gerade mit a=2,b=4 und c=1 versucht, es hat mir angezeigt 1 Lösung wäre positiv, die andere negativ, obwohol beide negativ sein müssten.

Was ist bloß schief gelaufen?

Delphi-Quellcode:
program exercice2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
a,b,c,delta:integer;

procedure error();
begin
writeln('This aint 2nd degre');
end;

procedure howmany(x:integer);
begin
writeln('There are ',x,' solutions for f(x)=0');
end;

procedure signforone(x,y:integer);
begin
if (((-y)/(2*x)) >= 0) then writeln('the solution is positive')
else writeln('the solution is negative');
end;

procedure signfortwoadd(x,y,z:integer); {Z=DELTA, NOT C!!!}
var aux:boolean;
begin
if x>0 then begin
                if y<0 then aux:=true
                else begin
                        if (abs(y) > sqrt(z)) then aux:=true
                        else aux:=false;
                        end;
                end;
if x<0 then begin
                if y<0 then aux:=false
                else begin
                        if (abs(y) > sqrt(z)) then aux:=false
                        else aux:=true;
                        end;
                end;
if aux=true then writeln('The first one is positive');
if aux=false then writeln('The first one is negative');
end;

procedure signfortwosubs(x,y,z:integer);
var aux:boolean;
begin
if x>0 then begin
                if y>0 then aux:=false
                else begin
                        if (abs(y) > sqrt(z)) then aux:=true
                        else aux:=false;
                        end;
                end;
if x<0 then begin
                if y<0 then aux:=true
                else begin
                        if (abs(y) > sqrt(z)) then aux:=true
                        else aux:=false;
                        end;
                end;
if aux=true then writeln('The second one is positive');
if aux=false then writeln('The second one is negative');
end;



  { TODO -oUser -cConsole Main : Insert code here }
begin
readln(a,b,c);
if a=0 then error()
else begin
        delta:=(b*b)-4*a*c;
        if delta<0 then howmany(0);
        if delta=0 then begin
                        howmany(1);
                        signforone(a,b);
                        end;
        if delta>0 then begin
                        howmany(2);
                        signfortwoadd(a,b,delta);
                        signfortwosubs(a,b,delta);
                        end;
        end;
readln;
end.
Danke im Voraus!
  Mit Zitat antworten Zitat