po pierwsze to wcale nie basic rules bo zaraz sam zobaczysz :)
potrzebujemy kilku zmiennych globalnych:
a, b, c, delta, x1, x2 : real; // dane uzywane w programie dla jasnosci globalnie
daneok : boolean; // a przyda sie pamietac czy dane sa dobre czy nie
wynikmsg1, wynikmsg2, wynik : string // do sformuowania odpowiedzi
potrzebujemy kilku procedur:
- inicjalizacja -> init
- pobieranie danych i sprawdzenie poprawnosci -> pobierz
- sprawdzanie miejsc zerowych ->oblicz
- wyswietlanie wyniku -> pokaz
Jezeli to ma bc w delphi to potrzebny formulaz z 5 labelkami:
powitanie, a=,b=,c=, wyniki, do tego 3 edit boxy do pobrania danych a,b,c i jakis button do inicjalizacji obliczen
procedure init;
begin
{ tutaj wszystkie komendy dotyczace powitania usera i wytlumaczenia mu co ma wpisac, w delphi bedzie to np:}
Form1.Label1.Caption:='Dana jest funkcja ...... podaj dane... zalozenia';
{w pascalu zdajesie jakies: writeln}
daneok:=false; // zakladamy na wstepie ze dane sa zle dopoki ktos nie poda dobrych i potem to wykorzystamy
end;
procedure pobierz;
begin
{tutaj pascalowska sekcja pobierania danych write podaj a, read a i takie tam, generalnie trzeba wziac od usera dane a,b i c i wrzucic je do zmiennych, jezeli to w delphi to:}
a:=Strtofloat(Form1.Edit2.Text);
b:=Strtofloat(Form1.Edit2.Text);
c:=Strtofloat(Form1.Edit2.Text);
{bierzemy tekst z editboxa i konwertujemy na zmiennoprzecinkowa, nie zajalem sie wcale przypadkiem gdy ktos nie poda liczby a trzeba to przewidziec raczej}
delta:= b*b-4*a*c; // od razu sobie machniemy delte
if a=o or delta=0 then begin
{tutaj co program ma robic gdy bledne dane, jakies alerty itp, w pascalu writeln zle dane i exit, w delphi na przyklad:}
MessageDlg('Dane nie spełniają założeń !', mtError, [mbOK],0);
daneok:=false;
exit;
end else daneok:=true; // no i zatwierdzenie danych jak sa dobre
end;
procedure oblicz;
begin
if not daneok then exit; // od razu ucieka jak zle dane to nam odpadna kombinacje z else ...
if c/a < 0 then wynikmsg1:='różne' else
wynikmsg1:='jednakowe' ;
// liczy pierwszy warunek i zapamietuje wynik wpostaci ktora potem latwo rykorzystac
if c/a > 0 and -b/a >0 then wynikmsg2:='dodatnie' else
wynikmsg2:='ujemne';
// podobnie z drugim warunkiem, dodatkowo if w polaczeniu z and zmniejsza klopoty z zagniezdzaniam ifow
wynik:=Obliczono ze znaki pierwiastkow tego rownania sa:'+wynikmsg1;
//formuuje odpowiedz czesciowa ze wzgledu na nie/jednakowosc znakow
if wynikmsg1='różne' then
wynik:=wynik+#10+'Dodatkowo wiadomo, ze oba są '+wynikmsg2;
// jezeli wczesniej wyszlo mu ze rozne to teraz formuuje dodatkowa odpowiedz, czyli nowa linia i druga czesc odpowiedzi
{tutaj sekcja wyswietlania wynikow, tekst jest juz w zmiennej wynik wiec wystarczy z nia pojechac na ekran, w delphi to bedzie:}
Form1.Label5.Caption:=wynik;
end;
no i masz wszystkio tylko podzielone na procedury zebys podciagnal pascala :P teraz zeby toto bylo programem to po deklaracji procedur trzeba je uruchomic w odpowiedniej kolejnosci.
Jezeli programw pascalu to poczytaj o pobieraniu liczby od usera i zapamietaniu jej do zmiennej, to bylo chyba jakies read , jezeli w delphi to konwersja z tekstu wpisanego w okienka na liczbe zmiennoprzecinkowa, dodatkowo w delphi rozdzielam inicjalizacje polegajaca na wypelnieniu formularza tekstami dla usera od czesci liczacej wiec procedura oblicz i wynik musi byc podpieta do buttona.
Jezeli nie przemawia do ciebie pascal to tylko zwrov uwage na to jak formuuje ify zeby nie sprawdzac tego samego po 3 razy bo wiekszosc twoich warunkow sie wyklucza stad najprosciej:
if delta=0 or a=0 then exit; od razu eliminuje zagniezdzanie bo wychodzi z progamu
gl hf :D
ps tam moze byc troche bykow ale chodzilo mi o schemat zajmowania sie w powazny i pokazowy sposob problemami ktore sie normalnie liczy w kilku(nastu) linijkach