Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 4: Wyrażenia i operatory. Podstawowe instrukcje języka © Jan Kaczmarek
Wyrażenia i operatory Wyrażenie to zapis prostego algorytmu pozwalającego obliczyć pewną wartość. Wyrażenie występuje zawsze po prawej stronie symbolu := w instrukcji podstawiania. Wyrażenia zbudowane są z operatorów określających, jakie działania mamy wykonać i operandów (argumentów), na których te działania przebiegają. Najprostsze operatory to: - operatory arytmetyczne - operatory relacyjne (porównania) - operatory logiczne - operator konkatenacji
Operatory arytmetyczne Operatory Typy argumentówTyp wyniku , – (jednoargumentowy) całkowitycałkowity rzeczywistyrzeczywisty +, –, * całkowitycałkowity rzeczywistyrzeczywisty / całkowityzawsze rzeczywistyrzeczywisty div, mod całkowitycałkowity div wylicza iloraz z dzielenia dwóch liczb całkowitych, np. 13 div 3 = 4 mod wylicza resztę z dzielenia dwóch liczb całkowitych, np. 13 mod 3 = 1
Operatory relacyjne (porównania) = (równe) <> (różne) (większe) >=(większe lub równe) Wszystkie operatory relacyjne są dwuargumentowe, argumenty mogą być różnych typów (liczbowych, znakowego lub łańcuchowego), tak dobranych, aby można było dokonać porównania. Wynik porównania jest zawsze typu Boolean. Przykłady: a 0{wynik true, gdy x 0} abc < bc{wynik true}
Operatory logiczne Operator Typy argumentówTyp wyniku not (negacja, operator jednoargumentowy) or (alternatywa),całkowitycałkowity and (koniunkcja)BooleanBoolean xor (różnica symetryczna) Tabela operacji logicznych na argumentach typu całkowitego (operacje przebiegają dla odpowiadających sobie bitów obu argumentów) x y not x x and y x or y x xor y
Operator konkatenacji + Odpowiada operacji sklejania łańcuchów. Wynikiem operacji jest łańcuch.
Priorytety operatorów Działania wykonywane są od lewej do prawej strony z uwzględnieniem priorytetów operatorów. Kolejność działań mogą zmieniać nawiasy ( i ). Operator Priorytet , –, not4 (najwyższy, jednoargumentowe) *, /, div, mod, and3 (operatory multiplikatywne) +, –, or, xor2 (operatory addytywne) =, <>,, >=1 (najniższy, operatory relacyjne) Przykłady: a+b*c a+(b*c) kolejność działań dla operatorów o różnych priorytetach a-b+c (a-b)+c reguła lewej strony (a<b) or (c<d) muszą być nawiasy, bo or ma wyższy priorytet od < Uwaga: umieszczanie nawiasów czyni kod programu bardziej czytelnym.
Funkcje standardowe W wyrażeniach mogą wystąpić także predefiniowane funkcje nazywane funkcjami standardowymi. Ich obliczanie ma najwyższy priorytet. abs(x) – wartość bezwzględna argumentu x chr(x) – znak o kodzie ASCII równym x (argument x jest typu byte) cos(x) – cosinus argumentu x exp(x) – wartość e x (e podstawa logarytmów naturalnych) length(łańcuch) – długość łańcucha będącego argumentem ln(x) – wartość logarytmu naturalnego argumentu x ord(z) – kod ASCII argumentu z (argument z jest typu char) round(x) – wartość argumentu x zaokrąglona do najbliższej liczby całkowitej sin(x) – sinus argumentu x sqr(x) – kwadrat argumentu x sqrt(x) – pierwiastek kwadratowy argumentu x trunc(x) – wartość argumentu x z obciętą częścią ułamkową Przykład: x1 := (-b-sqrt(delta))/(2*a) x2 := (-b+sqrt(delta))/(2*a)
Instrukcje Instrukcje opisują działania (czynności) wykonywane w programie. Instrukcje dzielimy na proste (np. instrukcja podstawiania) i strukturalne (np. instrukcja złożona, instrukcje warunkowe, instrukcje iteracyjne). Osobną grupę instrukcji stanowią instrukcje wejścia-wyjścia. Należy pamiętać, że każdą instrukcję winien kończyć średnik (;).
Instrukcja podstawiania Instrukcja podstawiania (przypisania) ma następującą postać zmienna := wyrażenie; Wykonanie tej instrukcji powoduje, że dotychczasowa wartość zmiennej podanej po lewej stronie symbolu := zostaje zastąpiona wartością otrzymaną w wyniku obliczenia (wartościowania) wyrażenia stojącego po prawej stronie. Przykłady: a := 11; b := a+22; c := tekst; d := false; e := a=b; f := 2*a+b/5;
Instrukcja złożona Instrukcja złożona ma następującą postać, która pozwala traktować kolejno wykonywane po sobie instrukcje, jak jedną (złożoną): begin instrukcja-1; instrukcja-2; …………… instrukcja-n; end; Wykonanie instrukcji złożonej polega na sekwencyjnym (w porządku zgodnym z zapisem) wykonaniu instrukcji wchodzących w jej skład. Przykład: begin a := 2; b := 3; end;
Instrukcje warunkowe (selekcje) Instrukcje warunkowe pozwalają zapisać fakt rozgałęziania obliczeń i mają jedną z dwu postaci: if wyrażenie then instrukcja; if wyrażenie then instrukcja-1 else instrukcja-2; Wartością wyrażenia musi być jedna z dwóch wartości logicznych TRUE lub FALSE. Jeśli wartością wyrażenia jest TRUE, wykonywana jest instrukcja występująca po then, w przeciwnym przypadku (gdy wartością wyrażenia jest FALSE), wykonywana jest instrukcja występująca po else (jeśli występuje). Instrukcja, instrukcja-1 lub instrukcja-2 mogą być kolejnymi instrukcjami warunkowymi (mogą być zagnieżdżone). Przykłady: if a<>0 then x:= x/a; if a<>0 then x:= x/a else x:= x+a; if a -10 then x:= x-a else x:= x+a;
wyrażenie TRUE FALSE wyrażenie TRUE FALSE instrukcja Instrukcja-1 instrukcja-2 if wyrażenie then instrukcja; if wyrażenie then instrukcja-1 else instrukcja-2;
Instrukcje iteracyjne (pętle) Instrukcje iteracyjne powodują wielokrotne wykonywanie jednej lub grupy instrukcji, przy czym liczba powtórzeń może być z góry znana lub jest nieznana i ma prowadzić do załamania (fałszu) względnie osiągnięcia (prawdy) pewnego warunku. Instrukcja dla (for...) for z:=w1 to w2 do instrukcja; for z:=w1 downto w2 do instrukcja; z to zmienna typu porządkowego (tzw. zmienna sterująca); w1, w2 to wyrażenia typu porządkowego, wyliczane na początku wykonania instrukcji jeden raz; instrukcja to dowolna instrukcja prosta lub strukturalna (nie może zmieniać wartości zmiennej sterującej) Minimalna liczba wykonań instrukcji powtarzanej w pętli wynosi 0 razy. Maksymalna liczba wykonań instrukcji w pętli ustalona jest w momencie rozpoczęcia pętli.
z:= w1 z := z+1z <= w2 instrukcja TAK NIE z:= w1 z := z-1z >= w2 instrukcja TAK NIE for z:=w1 to w2 do instrukcja; for z:=w1 downto w2 do instrukcja;
Instrukcja dopóki (while...) while wyrażenie do instrukcja; Wartością wyrażenia musi być TRUE lub FALSE. Instrukcji dopóki używamy wtedy, gdy w wyniku iteracji chcemy doprowadzić do tego, aby warunek był fałszywy. Minimalna liczba wykonań instrukcji w pętli wynosi 0 razy. Wykonanie instrukcji dopóki ilustruje następujący fragment schematu blokowego: wyrażenie instrukcja TRUE FALSE
Przykład: program suma1; {$APPTYPE CONSOLE} uses SysUtils; var x, i : integer; begin x := 0; i := 1; while i<=5 do begin x := x+i; readln (i); {nieznana liczba wykonań zależna od wartości i} end; writeln ('x= ',x); readln; end.
Instrukcja powtarzaj (repeat...) repeat ciąg-instrukcji until wyrażenie; Wartością wyrażenia musi być TRUE lub FALSE. Instrukcji powtarzaj używamy wtedy, gdy w wyniku iteracji chcemy doprowadzić do tego, aby warunek był prawdziwy. Minimalna liczba wykonań ciągu-instrukcji w pętli to 1 raz. Wykonanie instrukcji powtarzaj ilustruje następujący fragment schematu blokowego: ciąg-instrukcji TRUE FALSE wyrażenie
Przykład: program suma2; {$APPTYPE CONSOLE} uses SysUtils; var x, i : integer; begin x := 0; i := 1; repeat x := x+i; readln (i); {nieznana liczba wykonań zalezna od wartosci i} until i>5; writeln ('x= ',x); readln; end.
Instrukcje wejścia-wyjścia Instrukcje wejścia-wyjścia są odpowiedzialne za wprowadzanie danych do obliczeń i wyprowadzanie wyników tych obliczeń, Najprostsze z nich to: readln (zmienna); – umożliwia wprowadzenie z klawiatury danej takiego typu, jak podana zmienna i zapamiętanie tej danej jako wartości tej zmiennej. Wpisywanie danej musi zostać zakończone naciśnięciem klawisza ENTER. writeln (lista-wyrażeń); – umożliwia obliczenie wartości podanych wyrażeń (oddzielonych przecinkami) i wyprowadzenie ich na ekran monitora po czym przejście na ekranie do nowego wiersza. Postać każdego wyniku może zostać sformatowana w następujący sposób: wyrażenie : liczba-znaków-wyniku : liczba-miejsc-po-kropce Przykłady: readln (n); writeln (x1, x2); writeln (wynik : 10 : 3);
program wieksza; {program znajdowania większej z dwóch podanych liczb} {$APPTYPE CONSOLE} uses SysUtils; var a, b, max : integer; begin write (podaj a: ); readln (a); write (podaj b: ); readln (b); if a>b then max := a else max := b; write (wieksza z liczb to:, max); readln; end. Jakie instrukcje występują w tym programie?
program iloczyn; {program znajdowania iloczynu il = 1*2*3*…*n dla danego n} {$APPTYPE CONSOLE} uses SysUtils; var n, i, il : integer; begin write (podaj n: ); readln (n); il := 1; for i:=1 to n do il := il*i; write (iloczyn =, il); readln; end. Jakie instrukcje występują w tym programie?