Witam, napisałem następujący program Napisz program, który oblicza pierwiastkirównania kwadratowego, tak aby były one liczone w funkcji, która zwracała by ich wartość przez parametry. Jako wynik swojego działania funkcja powinna zwracać kod błędu. Uwaga, funkcja nie może bezpośrednio odwoływać się do zmiennych globalnych.
program funkcjakwadratowa;
uses crt;
var
a,b,c,x0,x1,x2,delta,pierw:real;
kod:integer;
nap:string;
odp:char;
label poczatek;
function pierw1(b,delta,a:real):real;
var
wynik:real;
begin
wynik:=-b+sqrt(delta)/2*a;
pierw1:=wynik;
end;
function pierw2(b,delta,a:real):real;
var
wynik:real;
begin
wynik:=-b-sqrt(delta)/2*a;
pierw2:=wynik;
end;
function pierw0(b,delta,a:real):real;
var
wynik:real;
begin
wynik:=-b/2*a;
pierw0:=wynik;
end;
begin
poczatek:
clrscr;
writeln('Program liczacy pierwiastki funkcji kwadratowej');
writeln;
writeln('Podaj wspolczynnik przy najwyzszej potedze');
repeat
readln(nap);
val(nap,a,kod);
if kod<>0 then writeln('Podaj liczbe!');
until kod=0;
writeln('Podaj wspolczynnik przy x');
repeat
readln(nap);
val(nap,b,kod);
if kod<>0 then writeln('Podaj liczbe!');
until kod=0;
writeln('Podaj wyraz wolny');
repeat
readln(nap);
val(nap,c,kod);
if kod<>0 then writeln('Podaj liczbe!');
until kod=0;
if a=0 then
begin
writeln('To nie jest funkcja kwadratowa, program zakonczy swoje dzialanie za 5 sekund');
delay(5000);
end
else
begin
writeln;
delta:=sqr(b)-4ac;
writeln('Delta wynosi ',delta2);
writeln;
if delta<0 then writeln('Funkcja nie posiada rozwiazan');
if delta = 0 then
begin
writeln('Funkcja posiada jeden pierwiatek rowny ',pierw0(b,delta,a)2);
end;
if delta>0 then
begin
writeln('Pierwszy pierwiastek jest rowny ',pierw1(b,delta,a)2);
writeln;
writeln('Drugi pierwiastek jest rowny ',pierw2(b,delta,a)2);
end;
end;
writeln;
writeln('Czy chcesz policzyc pierwiastki dla innych wartosci? T-TAK N-Nie');
odp:=readkey;
if ((odp='T') or (odp='t')) then goto poczatek;
if ((odp='N') or (odp='n')) then
begin
writeln;
writeln('Wybrales nie. Program zakonczy swoje dzialanie za 5 sekund');
delay(5000);
halt;
end;
end.
Program ogólnie działa ok, ale nie jestem pewien czy w dobry sposób użyłem funkcji i czy nie dało by się tego zapisać w jednej funkcji zamiast trzech. Tak samo z procedurą val, nie wiem czy nie dałoby się jej zapisać za pomocą jednej funkcji. Niezbyt też dobrze rozumiem o co chodzi z tym zwracaniem kodu błędu. Jeżeli ktoś byłby w stanie udzielić mi odpowiedzi na moje pytania, byłbym wdzięczny za pomoc.