Konspekt z przedmiotu Programowanie strukturalne
Temat: Operatory w Pascalu.
Prowadzący: inż. Marek Pudełko
Klasa I SP, specjalność technik Informatyk
Lekcja odbyła się 07.10.2004
Czas zajęć: 2 x 45 minut.
Cele dydaktyczne:
Nauczenie się rodzajów operatorów Pascala i ich zastosowania w programach.
Cele operacyjne:
Po zajęciach słuchacze powinni:
Umieć wymienić typy operatorów i przykłady zastosowań.
Umieć samodzielnie napisać program wykorzystujący te operatory.
Środki dydaktyczne: komputer, tablica, karteczki z przykładowym programem.
Metody: pogadanka, praca z komputerem, praca samodzielna, dyskusja.
Formy: praca z zespołem klasowym, praca indywidualna słuchacza
Przebieg lekcji:
1) Część wstępna:
powitanie
sprawdzenie listy obecności
2) Lekcja właściwa:
Przypomnienie wiadomości. Co to są operatory?
Operator to wyrażenie wiążące zmienne rzeczywiste w formułach.
Przypomnienie wiadomości. Jakie znamy operatory arytmetyczne, logiczne, relacyjne i operacyjne?
Informacja. Operatory.
Operatory arytmetyczne
Operatory arytmetyczne służą do wykonywania podstawowych działań arytmetycznych. Cechą charakterystyczną każdego operatora jest jego arność, czyli ilość argumentów, oraz tzw. priorytet operatora, wskazujący na kolejność wykonywania działań.
Symbol operatora |
Nazwa operatora |
Przykład |
- |
Zmiana znaku |
-5 |
+ |
Dodawanie |
A + B |
- |
Odejmowanie |
A - B |
* |
Mnożenie |
A * B |
/ |
Dzielenie |
A / B |
DIV |
Dzielenie całkowite |
7 DIV 4 = 1 |
MOD |
Reszta z dzielenia |
7 MOD 4 = 3 |
W języku Pascal nie występuje operator potęgowania - wykonywanie tego działania należy zaprogramować samodzielnie.
Pierwszy operator jest operatorem jednoargumentowym (unarnym), pozostałe dwuargumentowe (binarne). Kolejne dwa operatory nazywa się addytywnymi, pozostałe multiplikatywnymi.
Operatory multiplikatywne mają wyższy priorytet od addytywnych, tzn. zapis A + B * C jest interpretowany jako A + (B * C), czyli zgodnie z zasadą kolejności wykonywania działań.
Dzielenie całkowite, Reszta z dzielenia
Mnożenie, Dzielenie,
Dodawanie, Odejmowanie
W przypadku występowania operatorów o takich samych priorytetach działania wykonuje się od lewej do prawej, podobnie jak w matematyce.
Operatory relacyjne języka
Do porównywania wartości typów standardowych służą operatory relacyjne.
Symbol operatora |
Nazwa operatora |
Przykład |
< |
Mniejsze |
A < B |
> |
Większe |
A > B |
= |
Równe |
A = B |
>= |
większe-równe |
A => B |
<= |
mniejsze-równe |
A <= B |
<> |
Nierówne (Różne od) |
A <> B |
Wszystkie wyrażenia relacyjne mają wartość typu logicznego: wartością wyrażenia X <= 0 jest wartość True lub False, w zależności od wartości zmiennej X.
Za pomocą operatorów relacyjnych można oprócz liczb porównywać ze sobą znaki oraz napisy.
Operatory logiczne języka Pascal
Operatory logiczne służą do wykonywania operacji logicznych na wartościach typu logicznego oraz wartościach całkowitych.
Symbol operatora |
Nazwa operatora |
Przykład |
NOT |
Negacja - "nie" |
Not A |
OR |
Alternatywa - "lub" |
A OR B |
AND |
Koniunkcja - "i" |
A AND B |
XOR |
Różnica symetryczna - "różne" |
A XOR B |
SHL |
Przesunięcie w lewo |
|
SHR |
Przesunięcie w prawo |
|
Dwa ostatnie operatory wymagają argumentów całkowitych, pozostałych można używać do wyrażeń całkowitych i logicznych.
Jeżeli argumenty operatorów Not, Or, And i Xor są typu logicznego, to wartość obliczanego wyrażenia jest również typu logicznego, np. Not True jest równe False, True And False jest równe False itd., zgodnie z zasadami logiki matematycznej. W przypadku argumentów całkowitych otrzymywany wynik jest typu całkowitego.
Operatory nawiasowe języka Pascal
Operatory logiczne służą do wykonywania operacji logicznych na wartościach typu logicznego oraz wartościach całkowitych.
Symbol operatora |
Nazwa operatora |
Przykład |
( ) |
Nawias okrągły |
(A + B) * C |
[ ] |
Nawias kwadratowy |
Tablica[a] |
{ } |
Nawias klamrowy |
{komentarz} |
Nawias okrągły służy do wymuszania kolejności działań matematycznych.
Nawias kwadratowy służ do określania komórek w tablicy.
Nawias klamrowy służy do zapisywania komentarzy.
Operatory podstawienia języka Pascal
Operatory podstawienia służą przypisania zmiennym określonych wartości.
:= |
Podstawienie |
A := 3 |
Dyskusja. Analizowanie przykładów operatorów na przykładzie prostych zadań matematycznych.
Prezentacja. Przedstawienie schematu programu operatory.
program operatory;
var a,b,c:integer;
d:real;
begin
a:=10;
b:=3;
c:=a+b;
write('10+3 =');
writeln (c);
c:=a-b;
write('10-3 =');
writeln (c);
c:=a*b;
write('10*3 =');
writeln (c);
d:=a/b;
write('10/3 =');
writeln (c);
c:=a div b;
write('10 div 3 =');
writeln (c);
c:=a mod b;
write('10 mod 3 =');
writeln (c);
c:=a+b+2*3;
write('10+3+2*3=');
writeln (c);
c:=a+b+(2*3);
write('10+3+(2*3)=');
writeln (c);
c:=a+(b+2)*3;
write('10+(3+2)*3=');
writeln (c);
readln;
end
Ćwiczenie. Pisanie programu przez uczniów.
Praca z nauczycielem. Poprawa błędów powstałych przy kompilacji. Zaznaczenie pewnych fragmentów kodu przy pomocy klamer komentujących {,}.
Praca z tablicą. Wypisanie podstawowych kroków i fragmentów kodu tworzonych przez uczniów.
Ćwiczenie. Uczniowie oddają czwartą zmienną d typu real i wstawiają ją w kod, tam gdzie następuje błędne wstawienie typu.
Praca z tablicą. Poznanie problemów z niewłaściwymi typami danych i operatorów.
Informacja. Priorytety operatorów.
Priorytety operatorów.
W matematyce ważna jest kolejność wykonywania działań. Chcąc obliczyć prawidłowo równanie należy pamiętać o właściwym priorytecie działań.
Najwyższym priorytet mają operatory logiczne i arytmetyczne (a w nich jest kolejność następująca - operatory zmiany znaku, multiplikatywne i addytywne), potem relacyjne i przypisania.
W wypadku występowania operatorów o tym samym priorytecie decyduje kolejność występowania od strony lewej do prawej.
Tę hierarchię można zmienić za pomocą nawiasów. One mają najwyższy priorytet i pozwalają ułożyć praktycznie każde równanie.
Operatory |
Priorytet |
|
- (zmiana znaku) |
NOT |
1 (najwyższy) |
DIV MOD |
AND SHR SHL |
2 (wysoki) |
* / |
|
|
+ - |
OR XOR |
3 (średni) |
= <> <= >= = > < |
4 (niski) |
|
:= |
5 (najniższy) |
Ćwiczenie. Uczniowie wprowadzają dodatkowe równanie do programu. Następnie modyfikują je za pomocą nawiasów. Następnie analizują jak się zmienia wynik.
Dyskusja. Gdzie najczęściej powstają błędy? Analiza problemów powstałych w trakcie pisania programu.
Zadanie domowe. Własna modyfikacja programu.
3) Zajęcia końcowe:
powtórzenie materiału z lekcji:
Podstawowe problemy napotkane przy pisaniu programu.
Odpowiednie typy danych i odpowiednie operatory.
Interesujące rozwiązania.
ocena pracy słuchaczy.
OPERATORY |
||
Symbol operatora |
Nazwa operatora |
Przykład |
- |
Zmiana znaku |
-5 |
+ |
Dodawanie |
A + B |
- |
Odejmowanie |
A - B |
* |
Mnożenie |
A * B |
/ |
Dzielenie |
A / B |
< |
Mniejsze |
A < B |
> |
Większe |
A > B |
= |
Równe |
A = B |
=> |
większe-równe |
A => B |
<= |
mniejsze-równe |
A <= B |
< > |
Nierówne (Różne od) |
A <> B |
:= |
Podstawienie |
A := 3 |
( ) |
Nawias okrągły |
(A + B) * C |
[ ] |
Nawias kwadratowy |
Tablica[a] |
{ } |
Nawias klamrowy |
{komentarz} |
DIV |
Dzielenie całkowite |
7 DIV 4 = 1 |
MOD |
Reszta z dzielenia |
7 MOD 4 = 3 |
Not |
Negacja - „nie” |
Not A |
Or |
Alternatywa - „lub” |
A OR B |
And |
Koniunkcja - „i” |
A AND B |
Xor |
Różnica symetryczna - „różne” |
A XOR B |
Shl |
Przesunięcie w lewo |
7 SHL 2 = 28 |
Shr |
Przesunięcie w prawo |
63 SHR 3 = 7 |
program operatory;
var a,b,c:integer; {zmienne}
begin
a:=10;
b:=3;
c:=a+b;
write('10+3 =');
writeln (c);
c:=a-b;
write('10-3 =');
writeln (c);
c:=a*b;
write('10*3 =');
writeln (c);
c:=a/b;
write('10/3 =');
writeln (c);
c:=a div b;
write('10 div 3 =');
writeln (c);
c:=a mod b;
write('10 mod 3 =');
writeln (c);
c:=a+b+2*3;
write('10+3+2*3=');
writeln (c);
c:=a+b+(2*3);
write('10+3+(2*3)=');
writeln (c);
c:=a+(b+2)*3;
write('10+(3+2)*3=');
writeln (c);
readln;
end.
program operatory;
var a,b,c:integer; {zmienne}
begin
a:=10;
b:=3;
c:=a+b;
write('10+3 =');
writeln (c);
c:=a-b;
write('10-3 =');
writeln (c);
c:=a*b;
write('10*3 =');
writeln (c);
c:=a/b;
write('10/3 =');
writeln (c);
c:=a div b;
write('10 div 3 =');
writeln (c);
c:=a mod b;
write('10 mod 3 =');
writeln (c);
c:=a+b+2*3;
write('10+3+2*3=');
writeln (c);
c:=a+b+(2*3);
write('10+3+(2*3)=');
writeln (c);
c:=a+(b+2)*3;
write('10+(3+2)*3=');
writeln (c);
readln;
end.
3