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!