Zajęcia 2 2) Instrukcje warunkowe 3) Instrukcja wielokrotnego
Transkrypt
Zajęcia 2 2) Instrukcje warunkowe 3) Instrukcja wielokrotnego
Zajęcia 2 1) Grupowanie, instrukcja złożona (wszystkie intrukcje pomiędzy begin i end [ze srednikiem] tworzą grupę, która będzie traktowana jako “całość”) begin instr1; instr2; ......... end; 2) Instrukcje warunkowe if L then I1 [else I2] ; L- wyrazenie logiczne, jesli prawdziwe – wykonywana instrukcja I1, jeśli fałszywe – instrukcja I2 Instrukcje I1 i I2 moga byc proste lub złożone, w szczególności moga to być instrukcje logiczne PRZED ELSE NIE STAWIAMY ŚREDNIKA!! Część w nawiasach kwadratowych moze byc pominięta. 3) Instrukcja wielokrotnego wyboru case z of w1: I1; w2: I2 ......... [else In ]; end; z – zmienna prosta, typu przeliczalnego (np. integer, ale juz nie real); I1,I2, ...,In – instrukcje (proste lub złożone) Jesli z ma wartość w1 – wynokywana I1, z ma wartość w2 – I2, jesli z ma wartośc rózna od dowolnej W1,W2,... wykonywana instrukcja In. PRZED ELSE NIE STAWIAMY ŚREDNIKA!! Część w nawiasach kwadratowych moze byc pominięta. 4) Instrukcja iteracyjna typu “for” for licznik:=poczatek to koniec do Instrukcja lub for licznik:=poczatek downto koniec do Instrukcja w pierwszym przypadku poczatel<koniec, w drugim poczatek > koniec (“odliczanie w góre lub w dół”). Licznik – typ przeliczalny, Instrukcja moze byc prosta lub złozona, w szczególności moze byc kolejna instrukcja iteracyjną. 5) Pewne procedury i funkcje modułu Crt Textcolor(kolor[+blink]), TextBackground(kolor); kolor (typ byte, ale mozna nazwy: black,blue,brown,cyan,lightblue,lightcyan, http://www.freepascal.org/docs-html/rtl/crt/index-2.html Delay(czas); czas – typu word, czas w milisekundach, np. delay(1000); – 1 sekunda gotoXY(pozioma,pionowa); - ustawia kursor na pozycji (pozioma,pionowa) ekranu, np gotoXY(50,10) znak:=readkey; funkcja wczytująca do zmiennej znak (typ char) znak z klawiatury logiczna:=keypressed; logiczna (typ boolean) ma wartośc prawda (true), jesli naciśnięto jakikolwiek klawisz i fałsz (false), jesli nie. 6) Instrukcja iteracyjna repeat ...... unitl (warunek) Instrukcja ta jest jednocześnie grupowaniem (nie musimy wpisywac begin i end;) “Powtarzaj dopóki nie zajdzie warunek” Przykłady: P1. Program oblicza pierwiastki równania kwadratowego Ax2+Bx+C =0. Dane: A,B,C, typu real. Wyniki X1,X2 typu real program rownanie; uses Crt; var a,b,c,x1,x2,delta:real; {program oblicza pierwiastki rownania kwadratowego} begin writeln(' podaj wspolczynniki a,b,c rownania kwadratowego a*x*x+b*x+c=0'); readln(a,b,c); clrscr; delta:=b*b-4*a*c; if (delta<0) then writeln(' nie ma pierwistkow, delta= ', delta) else begin if(delta=0) then writeln(' jeden pierwiastek podwojny =',-b/(2*a)) else begin x1:=(-b-sqrt(delta))/(2*a); x2:=(-b+sqrt(delta))/(2*a); writeln(' x1= ',x1,' x2= ',x2); end; end; end. WŁASNE MODYFIKACJE PROGRAMU: Dopisac sprawdzanie, czy na pewno a*x1*x1+b*x1+c jest równe zero! (tak samo dla x2) P2. Wczytujemy dwie liczby rzeczywiste a,b oraz znak: +,-,*,/. Program zwraza wyniki działania a znak b. Jesli znak jest niewłasciwy, program pisze: podales zly znak program prosty_kalkulator; uses crt; var a,b: real; znak: char; begin writeln(' podaj liczby a,b oraz znak działania'); readln(a,b); {UWAGA: PRZY CZYTANIU NIE MIESZAC W JEDNEJ INST. TYPoW!!} readln(znak); clrscr; case znak of '+': writeln('suma; ',a,' + ',b,' = ',a+b); '-': writeln('roznica; ',a,' - ',b,' = ',a-b); '*': writeln('iloczyn; ',a,' * ',b,' = ',a*b); '/': begin if(b<>0) then writeln('iloraz; ',a,' / ',b,' = ',a/b) else writeln('nie dziel przez 0!') end else writeln(' podales zly znak! '); end; end. WŁASNE MODYFIKACJE PROGRAMU: suma ma byc na zielono, róznica – na niebiesko, iloczyn na “magenta”, iloraz na czarno, a “podales zly znak” - na czerwono. Należy pamietac aby na koncu powrócic do “normalnego” koloru (textcolor(black);) P3. Sumujemy określona ilośc liczb całkowitych: wszystkie liczby, oddzielnie parzyste, oddzielnie nieparzyste. Musimy wczytac ILE_LICZB i kolejne liczby LICZBA program sumowanie_liczb; uses Crt; var ile_liczb,liczba,suma,suma_parz,suma_niep,i : longint; begin {program sumuje ile_liczb calkowitych:wszystkie,parzyste,nieparzyste} writeln(' ile liczb chcesz sumowac?'); readln(ile_liczb); suma:=0; suma_parz:=0; suma_niep:=0; clrscr; for i:=1 to ile_liczb do begin writeln(' podaj kolejna liczbe '); readln(liczba); suma:=suma+liczba; if (liczba mod 2 =0) then suma_parz:=suma_parz+liczba else suma_niep:=suma_niep+liczba; end; clrscr; writeln('suma wszystkich = ',suma); writeln('suma parzystych = ',suma_parz); writeln('suma nieparzystych = ',suma_niep); end. P4 Ilustracja działania readkey oraz instrukcji iteracyjnej repeat...until naciskami klawisze: strzałka w lewo, strzałka w prawo, program pisze jaki klawisz został nacisnięty. Działanie programu kończy nacisnięcie ESC. UZUPEŁNIENIE: Kody ASCII: dziesiętnie, binarnie, szestnastkowo Program strzalki; uses Crt; { Jak dziala ReadKey } var ch : char; begin writeln('nacisnij strzalka w lewo/strzalka w prawo, Esc=wyjscie'); repeat ch:=ReadKey; case ch of #0 : begin {#0 - kod 16-kowy 'NULL'} ch:=ReadKey; case ch of #75 : WriteLn('lewy'); {#75 kod 16-kowy strzalka w lewo} #77 : WriteLn('prawy');{#kod 16-kowy strzalka w prawo} end; end; #27 : WriteLn('ESC'); end; until ch=#27 end.