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.