Programowanie
Programowanie
strukturalne
strukturalne
w Turbo Pascalu
w Turbo Pascalu
Materiał opracowała:
Meredyk Kamil
2
Programowanie
Programowanie
strukturalne
strukturalne
w Turbo Pascalu
w Turbo Pascalu
- wprowadzenie do Pascala
- wprowadzenie do Pascala
- stałe, zmienne, typy danych
- stałe, zmienne, typy danych
- moduł SYSTEM
- moduł SYSTEM
- Instrukcja warunkowa IF
- Instrukcja warunkowa IF
- instrukcja wyboru CASE
- instrukcja wyboru CASE
-
-
rodzaje pętli
rodzaje pętli
– procedury i funkcje
Pascal – nowy język
Pascal – nowy język
programowania
programowania
Twórcą języka Pascal jest Nikolaus Writh, który
Twórcą języka Pascal jest Nikolaus Writh, który
w 1971 roku opublikował pierwszy raport
w 1971 roku opublikował pierwszy raport
będący szczegółowym, formalnym opisem
będący szczegółowym, formalnym opisem
Pascala. Pascal opisany w raporcie był
Pascala. Pascal opisany w raporcie był
abstrakcyjnym językiem algorytmicznym tj.
abstrakcyjnym językiem algorytmicznym tj.
systemem reguł, słów umożliwiających jasne,
systemem reguł, słów umożliwiających jasne,
jednoznaczne formułowanie algorytmów. Od
jednoznaczne formułowanie algorytmów. Od
tego czasu powstało wiele konkretnych
tego czasu powstało wiele konkretnych
realizacji języka Pascal tzn. systemów
realizacji języka Pascal tzn. systemów
umożliwiających redagowanie programów i
umożliwiających redagowanie programów i
wykonywanie ich przez komputer. Nowości
wykonywanie ich przez komputer. Nowości
polegają nie tylko na ulepszaniu środowiska
polegają nie tylko na ulepszaniu środowiska
redagowania i uruchamiania programów, które
redagowania i uruchamiania programów, które
stają się bardziej przyjazne i coraz bogatsze,
stają się bardziej przyjazne i coraz bogatsze,
wzbogacaniu listy standardowych poleceń i
wzbogacaniu listy standardowych poleceń i
funkcji języka np. o procedury programowania
funkcji języka np. o procedury programowania
grafiki, których nie było we wzorcu Writha, ale
grafiki, których nie było we wzorcu Writha, ale
także na wprowadzaniu do języka nowych idei
także na wprowadzaniu do języka nowych idei
jak np.
jak np.
programowanie obiektowe
programowanie obiektowe
.
.
Ekran Turbo Pascala
Ekran Turbo Pascala
5
Opis menu
Opis menu
File- pozwala na zapisywania programów
źródłowych na dyskietce bądź dysku twardym
(Save) - F2, wczytywanie ich do edytora
(Load) - F3, kończenie pracy z Turbo Pascalem
(Quit) - ALT+X.
Edit - umożliwia pisanie programu źródłowego.
Run - zawiera kilka możliwości. Na etapie
wstępnym interesuje nas przede wszystkim
uruchamianie programu realizowane przy
pomocy polecenia Run (CTRL+F9).Kombinacja
przycisków ALT+F5 pozwala obejrzeć ekran
roboczy programu.
6
Podstawowe informacje
Podstawowe informacje
o Pascalu
o Pascalu
Program źródłowy -
jest tekstem, czyli określonym
zbiorem słów, cyfr i
pojedynczych znaków
zapisanym według reguł jakie
ustalili twórcy języka.
7
Podstawowe informacje
Podstawowe informacje
o Pascalu
o Pascalu
Słowa kluczowe -
zastrzeżone tylko do
wydawania poleceń
składających się na program.
Nie wolno używać ich w innym
celu. W Pascalu znajduje się 51
słów kluczowych.
8
Słowa kluczowe
Słowa kluczowe
AND
IMPLEMENTATION
SET
ASM
INLINE
SHL
ARRAY
INHERITED
SHR
BEGIN
INTERFACE
STRING
CASE
INTERRUPT
THEN
CONST
LABEL
DESTRUCTOR
LIBRARY
TO
DIV
MOD
TYPE
DO
NIL
UNIT
DOWNTO
NOT
UNTIL
ELSE
OBJECT
USES
END
OF
VAR
EXPORTS
OR
WHILE
FILE
PACKED
WITH
FOR
PROCEDURE
XOR
FUNCTION
PROGRAM
GOTO
RECORD
IF
REPEAT
9
Podstawowe informacje
Podstawowe informacje
o Pascalu
o Pascalu
Łańcuch znaków -
wszystkie inne zestawienia
liter (poza słowami
kluczowymi). Łańcuch znaków
musi być zawsze ograniczony
przy pomocy separatorów,
którymi w Pascalu są apostrofy
(`).
10
Podstawowe informacje
Podstawowe informacje
o Pascalu
o Pascalu
Symbole specjalne -
operatory arytmetyczne + - * /
(brak potęgowania)
operatory relacji< , > , = , <= ,
>=
nawiasy okrągłe, kwadratowe i
klamrowe () [] {}
operator przypisania :=
pozostałe symbole . , ; : ` # $ @ ^
11
Podstawowe informacje
Podstawowe informacje
o Pascalu
o Pascalu
Spacje –
mają znaczenie separatorów
(ale nie przy łańcuchach znaków)
i można je używać tam, gdzie dwa
symbole mogłyby się połączyć w
jeden, zmieniając znaczenie tekstu.
Nie mogą natomiast dzielić słów
kluczowych. Tam gdzie może
wystąpić jedna spacja, może być
również ich więcej.
12
Budowa programu
Budowa programu
Każdy algorytm, a zatem i
program operuje danymi,
posługuje się nimi, korzysta z
informacji jakie one niosą,
przetwarza je.
Dane mają określoną budowę,
którą nazywamy strukturą. W
programie musimy podać jakie
rodzaje (typy) danych program
będzie obsługiwał.
13
Budowa programu
Budowa programu
NAGŁÓWEK
PROGRAM moja_nazwa;
CONST
CZĘŚĆ
definicje stałych
VAR
DEKLARACYJNA
deklaracje zmiennych
... deklaracje procedur i funkcji
CZĘŚĆ
BEGIN
GŁÓWNA
..............................
instrukcje;
END.
14
Podstawowy zestaw
Podstawowy zestaw
instrukcji
instrukcji
Wczytanie danych
Read (lista_argumentów);
ReadLn (lista_argumentów);
np:
Read (a,b);
ReadLn (c);
Instrukcję ReadLn bez parametrów
można wykorzystać (chociaż nie zawsze
jest to skuteczne do zatrzymania
programu do chwili naciśnięcia ENTER )
15
Podstawowy zestaw
Podstawowy zestaw
instrukcji
instrukcji
Wyprowadzenie wyników i komunikatów
Write (lista_argumentów);
WriteLn (lista_argumentów);
np:
Write (`Podaj swoje imię`);
16
Podstawowy zestaw
Podstawowy zestaw
instrukcji
instrukcji
Instrukcja skoku
(określenie położenia kursora na ekranie)
GoToXY (liczba_pozycja,l
iczba_wiersz);
np: GoToXY (20,10);
17
Podstawowy zestaw
Podstawowy zestaw
instrukcji
instrukcji
Instrukcja czyszczenia ekranu
(wyczyszczenie ekranu roboczego)
ClrScr;
18
Podstawowy zestaw
Podstawowy zestaw
instrukcji
instrukcji
Instrukcja zwiększenia jaskrawości koloru
wyświetlanych znaków
Highvideo;
Brak zwiększenia jaskrawości koloru
wyświetlanych znaków (biały kolor
znaków na czarnym tle)
Normvideo;
19
Stałe kolorów
Stałe kolorów
Identyfikator
Wartość
Kolor
Black
0
czarny
Blue
1
niebieski
Green
2
zielony
Cyan
3
morski
Red
4
czerwony
Magenta
5
fioletowy
Brown
6
brązowy
LightGray
7
jasnoszary
DrakGray
8
ciemnoszary
LightBlue
9
jasnoniebieski
LightGreen
10
jasnozielony
LightCyan
11
jasnomorski
LightRed
12
jasnoczerwony
LightMagenta
13
jasnofioletowy
Yellow
14
żółty
White
15
biały
20
Podstawowy zestaw
Podstawowy zestaw
instrukcji
instrukcji
Kolor tła
Textbackground (kolor);
Kolor tekstu
Textcolor (kolor);
21
Zasady redagowania
Zasady redagowania
programu
programu
Kolejne instrukcje programu oddzielamy
średnikami.
W jednej linii programu może być umieszczonych
wiele instrukcji, ale muszą być oddzielone
średnikami.
Po nagłówku i instrukcji WRITELN należy użyć
średników, natomiast po BEGIN i END można je
opuścić.
Średnik możemy również opuścić, gdy następnym
słowem jest END (niekoniecznie z kropką).
Kropka po ostatnim END oznacza koniec
programu i należy ją postawić.
Dla czytelności programu stosuje się tzw. wcięcia.
22
Uruchomienie
Uruchomienie
programu
programu
CTRL+F9
- następuje kompilacja i
konsolidacja programu oraz uruchomienie
programu.
ALT+F5 - możliwość obejrzenia ekranu
roboczego programu. Wciśnięcie dowolnego
klawisza spowoduje powrót do Pascala.
Kompilacja - tłumaczenie programu
źródłowego do postaci pośredniej.
Konsolidacja - operacja powodująca
powstanie programu wykonywalnego,
którego nazwa ma rozszerzenie EXE. Turbo
Pascal może wykonywać ją automatycznie bez
twojej wiedzy.
23
Moduły programu
Moduły programu
Moduł CRT
to zbiór zgrupowanych razem
pewnych dodatkowych
(niestandardowych) procedur i
funkcji, ułatwiających komunikację
z użytkownikiem za pomocą
urządzeń wejścia/wyjścia tj.
klawiatury i monitora. Moduł ten
zawiera instrukcje np. GoTo i ClrScr.
24
Początki
Początki
programowania
programowania
Definiowanie stałych
Deklarowanie zmiennych
Rodzaje typów
Wyrażenia
Zajęcia 2
Zajęcia 2
25
Definiowanie stałych
Definiowanie stałych
STAŁA
to konkretna niezmienna
wartość, którą posługujemy się
używając jej symbolicznej
nazwy (np. PI). Wartością stałej
może być każda liczba zarówno
całkowita jak i ułamkowa. Stałą
może być również każdy znak
albo napis pod warunkiem, że
zostanie on ujęty w separatory.
26
Zasady tworzenia
Zasady tworzenia
nazw stałych
nazw stałych
nazwa stałej może się składać z liter i cyfr, ale
na początku musi być litera
nazwa nie może zawierać spacji, niektórych
innych znaków np. kropki
długość nazwy może wynosić najwyżej 32 znaki
nazwa nie może się powtarzać
nazwa powinna określać zawartość
27
Przykłady definicji
Przykłady definicji
stałych
stałych
Chęć skorzystania z wielkości stałej należy
programowi zgłosić. Zgłoszenie programowi,
że zostanie użyta stała nazywa się definicją.
CONSTANS (skrót CONST)
słowo kluczowe informujące, że występujące
obiekty są stałymi
Przykłady definicji stałych
dolny_zakres=100;
komunikat=‘Naciśnij dowolny klawisz’;
Pi=3.14;
28
Deklarowanie
Deklarowanie
zmiennych
zmiennych
ZMIENNA
to twór, którym posługujemy
się korzystając z jej nazwy, zaś
jej wartość jest wielkością,
która może się zmieniać.
Zasady tworzenia nazw
zmiennych są takie same jak
stałych.
29
Deklarowanie
Deklarowanie
zmiennych
zmiennych
Chęć skorzystania z wielkości zmiennej należy programowi
zgłosić. Zgłoszenie programowi, że zostanie użyta zmienna
nazywa się deklaracją zmiennej.
VAR
słowo kluczowe poprzedzające deklarację
zmiennych.
Podczas deklaracji nie nadajemy zmiennej żadnej
wartości. Zmienna musi posiadać wartość w chwili użycia.
Każda utworzona zmienna musi być określonego rodzaju
(typu).
Wartością zmiennej może być liczba, znak, łańcuch
znaków.
30
Rodzaje typów
Rodzaje typów
Typy proste
są podstawowymi typami języka i
za ich pomocą powstają bardziej
złożone struktury danych.
Wszystkie typy proste składają się
ze skończonego i uporządkowanego
zbioru wartości.
31
Podział typów
Podział typów
prostych
Typy proste
Porządkowe
Całkowite
Logiczny
Znakowy
Rzeczywiste
REAL
32
Podział typów
Podział typów
prostych
Typy porządkowe
Całkowite
ShortInt (zawierający liczby całkowite od
-128 do 127)
Byte (zawierający liczby całkowite od 0 do
255)
Integer (zawierający liczby całkowite od
-32768 do 32767)
Word (zawierający liczby całkowite od 0 do
65535)
LongInt (zawierający liczby całkowite od
-2.147.483.648 do
2.147.483.647)
33
Podział typów
Podział typów
prostych
Typy porządkowe
Logiczny
Boolean (składa się z dwóch
predefiniowanych stałych False, True)
34
Podział typów
Podział typów
prostych
Typy porządkowe
Znakowy
Char (składa się z elementów będących
znakami kodu ASCII)
35
Podział typów
Podział typów
prostych
Typy porządkowe
definiowane przez programistę
Wyliczeniowe
Okrojony
36
Rodzaje typów
Rodzaje typów
Typy złożone (strukturalne)
Typ łańcuchowy STRING
Typ tablicowy
Typ znakowy
Typ rekordowy
Typ plikowy
Typy wskaźnikowe
37
Rodzaje typów
Rodzaje typów
TYPY PROSTE
PORZĄDKOW
E
RZECZYWIST
E
REAL
CAŁKOWITE
ShortIn
t
Byte
Integer
Word
LongInt
WYLICZENIOWE
OKROJONE
TYPY
STRUKTURALNE
Łańcuchowy
Tablicowy
Znakowy
Rekordowy
Plikowy
38
Przykłady deklaracji
Przykłady deklaracji
zmiennych
zmiennych
wszystkie zmienne deklarujemy po słowie:
VAR
czynnik1, czynnik2: BYTE;
wynik: REAL;
odp1, odp2: CHAR;
a, b, pole: INTEGER;
Przy deklarowaniu zmiennych tego samego typu
można je wyliczyć w postaci listy, w której są
one oddzielone przecinkami.
Przy deklarowaniu zmiennej podajemy
wymyśloną przez siebie nazwę, dwukropek i
wreszcie jej TYP.
39
Przykładowy program
Przykładowy program
Program przykład;
VAR
Ocena: Byte;
WcisnietyKlawisz: Char;
PoleKola: Real;
Wynagrodzenie: Integer;
LiczbaMieszkancow: LongInt;
CzyKoniec: Boolean;
TytulKsiazki: String;
Imie, Nazwisko: String;
40
Przykłady wyrażeń
Przykłady wyrażeń
Większość programów wymaga różnego rodzaju
obliczeń. Zwykle celem tych obliczeń jest
znalezienie wartości jakiejś zmiennej.
Wyrażenia
– to obliczenia zawierające
zmienne, stałe i łączące je operatory.
Poprawnie zbudowane wyrażenie to takie, w
którym każdy z operatorów działa na
składnikach odpowiedniego typu. Jeśli warunek
ten nie jest spełniony w czasie kompilacji
zostanie wykryty błąd „pomieszania typów”.
Składniki wyrażenia są odpowiedniego typu a
zatem i wyrażenie należy do jakiegoś typu.
Typem wyrażenia
jest typ wartości powstającej
w wyniku obliczenia tego wyrażenia czyli typ
wartości wynikowej.
41
Priorytety operatorów
Priorytety operatorów
działania w nawiasach
(*) mnożenie i dzielenie (/)
DIV
(dzielenie całkowite) i
MOD
(reszta z
dzielenia całkowitego)
(+) dodawanie i (-) odejmowanie
w przypadku braku nawiasów i przy
operatorach o takim samym priorytecie
działania są wykonywane od lewej do
prawej
42
Przykłady wyrażeń
Przykłady wyrażeń
(x+y)/(x-y)
2*sin(x/2)+3*cos(x*y)
43
Instrukcja przypisania
Instrukcja przypisania
Służy do nadania wartości zmiennej.
nazwa_zmiennej:=wyrażenie_albo_warto
ść
Od tego momentu operujemy nazwą zmiennej, ale
program posługuje się jej wartością.
Jeśli zmienna posiadała jakąś wartość wcześniej
zostanie ona niestety całkowicie utracona.
Zmienna zachowuje tylko wartość aktualną.
Jeśli potrzebna jest poprzednia wartość zmiennej
należy ją zapamiętać np. przez utworzenie
zmiennej pomocniczej i przekazanie jej do
wartości.
44
Przykłady instrukcji
Przykłady instrukcji
przypisania
przypisania
liczba:=5.1;
wynik:=dzielna/dzielnik;
znak:=’A’;
tekst:=’Co się gapisz?’;
45
Moduł System
Zajęcia 3
Zajęcia 3
46
Moduł SYSTEM
Moduł SYSTEM
Zawiera procedury i funkcje obsługi zbiorów, operacji konwersji
Zawiera procedury i funkcje obsługi zbiorów, operacji konwersji
liczb, operacji łańcuchowych, porządkowych oraz służące do
liczb, operacji łańcuchowych, porządkowych oraz służące do
dynamicznego przydziału i zwalniania pamięci.
dynamicznego przydziału i zwalniania pamięci.
Jako jedyny jest
Jako jedyny jest
dostępny automatycznie.
dostępny automatycznie.
Funkcje arytmetyczne modułu System
Abs
obliczenie wartości bezwzględnej argumentu
ArcTan
obliczenie wartości arcusa tangensa
Cos
obliczenie wartości cosinusa argumentu
Exp
obliczenie wartości stałej Eulera e
Frac
obliczenie części ułamkowej argumentu
Int
obliczenie części całkowitej liczby
Ln
obliczenie wartości logarytmu naturalnego
Pi
obliczenie wartości stałej pi
Sin
obliczenie wartości sinusa argumentu
Sqr
obliczenie wartości kwadratu argumentu
Sqrt
obliczenie wartości pierwiastka
kwadratowego
47
Moduł SYSTEM
Moduł SYSTEM
Zawiera procedury i funkcje obsługi zbiorów, operacji konwersji
Zawiera procedury i funkcje obsługi zbiorów, operacji konwersji
liczb, operacji łańcuchowych, porządkowych oraz służące do
liczb, operacji łańcuchowych, porządkowych oraz służące do
dynamicznego przydziału i zwalniania pamięci.
dynamicznego przydziału i zwalniania pamięci.
Jako jedyny jest
Jako jedyny jest
dostępny automatycznie.
dostępny automatycznie.
Procedury i funkcje łańcuchowe
Concat
konkatenacja łańcuchów
Copy
Wyznaczanie podłańcucha z łańcucha
Delete
Usunięcie części łańcucha
Insert
wstawianie podłańcucha do łańcucha
Lenght
wyznaczenie długości łańcucha
Pos
wyszukanie podciągu znaków
Str
zamiana wartości numerycznej na łańcuch
Val
zamiana łańcucha znaków na jego numeryczną
reprezentację
48
Moduł SYSTEM
Moduł SYSTEM
COPY
Moduł:
SYSTEM
Wywołanie:
Copy(łańcuch, nr, n)
Argumenty:
łańcuch: String
nr, n: Integer
Typ wyniku:
String
Rezultat:
Funkcja wycina z argumentu
łańcuch ciąg znaków o
długości n
począwszy od znaku
o numerze
nr.
49
Moduł SYSTEM
Moduł SYSTEM
CONCAT
Moduł:
SYSTEM
Wywołanie:
Concat(S1[S2…Sn])
Argumenty:
S1[S2…Sn]: String
Typ wyniku:
String
Rezultat:
Połączenie łańcuchów
będących
argumentami
funkcji w jeden
łańcuch
50
Moduł SYSTEM
Moduł SYSTEM
Zawiera procedury i funkcje obsługi zbiorów, operacji konwersji
Zawiera procedury i funkcje obsługi zbiorów, operacji konwersji
liczb, operacji łańcuchowych, porządkowych oraz służące do
liczb, operacji łańcuchowych, porządkowych oraz służące do
dynamicznego przydziału i zwalniania pamięci.
dynamicznego przydziału i zwalniania pamięci.
Jako jedyny jest
Jako jedyny jest
dostępny automatycznie.
dostępny automatycznie.
Procedury i funkcje porządkowe
Dec
utworzenie wielokrotnego poprzednika
parametru
Inc
wyznaczenie wielokrotnego następnika
parametru
Odd
badanie nieparzystości argumentu
Pred
wyznaczenie poprzednika argumentu
Succ
wyznaczenie następnika argumentu
Pozostałe procedury i funkcje
UpCase(znak) – zamiana litery na dużą
51
Moduł SYSTEM
Moduł SYSTEM
SUCC
Moduł:
SYSTEM
Wywołanie:
Succ(x)
Argumenty:
x: dowolny typ porządkowy
Typ wyniku:
jak typ argumentu
Rezultat: Element występujący
bezpośrednio za argumentem x w
zadeklarowanym typie
porządkowym
52
Moduł SYSTEM
Moduł SYSTEM
UpCase
Moduł:
SYSTEM
Wywołanie:
UpCase(znak)
Argumenty:
znak: CHAR
Typ wyniku:
CHAR
Rezultat:
Duża litera odpowiadająca
argumentowi będącemu
małą
literą
53
Instrukcja warunkowa.
Instrukcja warunkowa.
IF <warunek> THEN instrukcja_1
ELSE instrukcja_2
JEŚLI warunek jest spełniony WYKONAJ instrukcję_1
W INNYM PRZYPADKU wykonaj instrukcję_2
Poszczególne składniki wyrażenia muszą być
wcześniej zdefiniowane (stałe) lub zadeklarowane
(zmienne) i muszą posiadać konkretną wartość.
„Instrukcja_1” oraz „instrukcja_2” to dowolne
instrukcje języka Pascal, które chcemy wykonać w
przypadku spełnienia bądź niespełnienia warunku
.
Zajęcia 4
Zajęcia 4
54
Instrukcja warunkowa.
Instrukcja warunkowa.
IF <warunek> THEN instrukcja_1
ELSE instrukcja_2
Występujący po słowie If warunek może
być wyrażeniem relacyjnym: <, >, <=, >=,
=, <> lub wywołaniem funkcji o
wartościach logicznych, np.
If X>=-1 Then ...
If 4*Dlugosc<>P+1 Then ...
If X=Sqrt(Y) Then ...
If KeyPressed Then Znak:=ReadKey;
Zajęcia 4
Zajęcia 4
55
Operatory logiczne
Operatory logiczne
AND
to tak zwany
„iloczyn logiczny”
określany
spójnikiem „i”. W Pascalu do
utworzenia tego
warunku używamy operatora AND, np. (X>Y) AND
(Y>0). Taki warunek jest spełniony wtedy i tylko
wtedy, gdy spełnione są jego obydwa człony.
OR
to tak zwana
„suma logiczna”
określana
spójnikiem „lub”. W Pascalu do utworzenia tego
warunku używamy operatora OR np. (X>Y) OR
(Y>0). Warunek
jest spełniony, gdy
którakolwiek z jego części będzie prawdziwa.
NOT
to po prostu zaprzeczenie, czyli negacja.
Np. Jeśli X>Y, to warunek jest prawdziwy w sytuacji
gdy X>Y. Jeśli potrzebna jest sytuacja odwrotna,
można zamiast pisać Y>X użyć postaci NOT (X>Y).
56
Instrukcja warunkowa.
Instrukcja warunkowa.
Warunek logiczny może być również wyrażeniem
złożonym utworzonym z prostych wyrażeń
logicznych powiązanych operatorami logicznymi
języka np.:
{Jeśli X należy do przedziału liczbowego <10, 100> }
If (X>=10) And (X<100) Then WriteLn('Dwie cyfry');
{Jeśli A jest nieparzyste i podzielne przez 5 }
If ((A Mod 2)<>0) And ((A Mod 5)=0) Then ...
{Jeśli A nie należy do przedziału liczbowego <0, 1) }
If (A<0) Or (A>=1) Then ...
If Not ((A>=0) And (A<1)) Then ...W tym wypadku
najczęściej konieczne jest ujmowanie wyrażeń
prostych w nawiasy okrągłe.
Zajęcia 4
Zajęcia 4
57
Instrukcja warunkowa.
Instrukcja warunkowa.
Po słowie
Then
może wystąpić tylko jedna
instrukcja. Jeżeli chcemy w danym
przypadku wykonać więcej poleceń, to
należy utworzyć z nich blok - blok
traktowany jest bowiem jak jedna
instrukcja programu, np.
ReadLn(A);
If A<0 Then
Begin
WriteLn('Podano ujemną wartość zmiennej a!');
ReadKey;
Halt;
End;
Zajęcia 4
Zajęcia 4
58
Instrukcja warunkowa.
Instrukcja warunkowa.
Instrukcja If może mieć postać rozbudowaną:
If warunek Then instrukcja1 Else instrukcja2;
Słowo Else oznacza "w przeciwnym wypadku". W tej postaci
wykonanie instrukcji polega na wykonaniu instrukcji
pierwszej lub drugiej, w zależności od wartości logicznej
podanego warunku: jeśli warunek logiczny jest prawdziwy,
wykonana zostanie instrukcja1, jeśli fałszywy, program
wykona instrukcję2
Wykonanie instrukcji
If A>=0 Then X:=Sqrt(A) Else X:=0;
spowoduje przypisanie zmiennej X wartości pierwiastka z
liczby A gdy jego oblicznie jest możliwe lub też liczby zero
gdy A jest liczbą ujemną.
Uwaga:
Po słowie Else może wystąpić tylko jedna instrukcja lub blok.
W przypadku rozbudowanej postaci ze słowem Else po
instrukcji pierwszej nie umieszcza się średnika!
Zajęcia 4
Zajęcia 4
59
Instrukcja wyboru.
Instrukcja wyboru.
CASE -
CASE -
znaczy „przypadek” (w przypadku, w razie
znaczy „przypadek” (w przypadku, w razie
gdyby)
gdyby)
CASE <wyrażenie> OF
stała1: instrukcja_1;
stała2: instrukcja_2;
…
stała_n: instrukcja_n;
ELSE inna_instrukcja
END.
jeżeli <wyrażenie> przyjęło wartość ‘stała_1’,
wykonaj ‘instrukcję_1’;
jeżeli <wyrażenie> przyjęło wartość ‘stała_2’,
wykonaj ‘instrukcję_2’ itd.
W przypadku jeżeli <wyrażenie> przyjęło wartość nie
wyszczególnioną (ELSE) - wykonaj inną instrukcję.
Zajęcia 5
Zajęcia 5
60
Instrukcja wyboru.
Instrukcja wyboru.
<wyrażenie>
to zwykle zmienna zadeklarowana na
początku programu i posiadająca
określoną wartość w chwili wykonania
instrukcji CASE. Można oczywiście
zastosować wyrażenie złożone z wielu
zmiennych, operatorów i funkcji, ale musi
ono być typu porządkowego.
Zajęcia 5
Zajęcia 5
61
Instrukcja wyboru.
Instrukcja wyboru.
<stała>
Stała_1, stała_2, stała_n są elementami listy
wyboru. Każda z tych stałych musi być tego
samego typu. Stała może być: liczbą,
znakiem (występuje wówczas w
apostrofach), listą liczb lub znaków,
zakresem liczb lub znaków.
Przykłady niektórych stałych:
lista liczb:
1,3,5,7:
lista znaków: ‘A’, ‘a’:
zakres liczb: 1..10:
zakres znaków:
‘A’..’Z’:
Zajęcia 5
Zajęcia 5
62
Instrukcje pętli
Zajęcia 6
Zajęcia 6
Pętla FOR
Pętla WHILE.. DO
Pętla REPEAT..UNTIL
63
Pętla For
Pętla For
Pętla -
oznacza, że jakaś grupa poleceń
będzie wykonywana wielokrotnie
(wielokrotnie powtarzana).
FOR –
jest nazywaną „pętlą liczoną”.
Programiści stosują ją w zasadzie
zawsze, gdy są w stanie określić ile
razy trzeba powtórzyć jakąś czynność.
Wobec tego pętla musi posiadać coś w
rodzaju licznika określającego ilość
powtórzeń.
64
Pętla For
Pętla For
FOR
licznik_pętli:=wyrażenie_1
TO
wyrażenie_2
DO
instrukcja;
albo
FOR
licznik_pętli:=wyrażenie_1
DOWNTO
wyrażenie_2
DO
instrukcja
Przetłumaczenie pętli
DLA wartości licznika zmieniającej się od
<wyrażwnia_1> DO <wyrażwnia_2> WYKONUJ
instrukcję
65
Pętla For
Pętla For
Wartość licznika obrotów zmienia się –
może rosnąć, albo maleć. Ważne, że zmienna
ta nazywana zmienną sterującą pętli, ma
określoną wartość początkową <wyrażenie_1>
i końcową <wyrażenie_2>.
Zmiana wartości zmiennej sterującej odbywa
się automatycznie: po każdym wykonaniu pętli
wzrost o jedną pozycję (gdy w instrukcji
występuje słowo TO), lub zmniejszenie o
pozycję (gdy w instrukcji występuję DOWNTO).
Zmienna sterująca może być tylko zmienną
typu porządkowego. Dla każdej wartości tego
typu istnieje bowiem wartość ją poprzedzająca
i następna.
66
Pętla For
Pętla For
Przykłady
For i:=3 To 82 Do Write('*');
For i:=1 To 25 Do WriteLn('Kwadrat liczby ', i, ' = ',
i*i); {Kwadrat liczby 8 = 64}
For licznik:=10000 To 99999 Do If (licznik Mod
793)=0 Then WriteLn(licznik);
67
Pętla WHILE..DO
Pętla WHILE..DO
WHILE
<warunek>
DO
instrukcja
albo
WHILE
<warunek>
DO
Begin
instrukcja_1;
instrukcja_2;
....................
instrukcja_n;
End;
Instrukcję tę rozumiemy następująco:
Jak długo warunek jest spełniony (jest prawdą)
wykonuj instrukcję występującą po słowie DO.
68
Pętla WHILE..DO
Pętla WHILE..DO
Instrukcja wykonywana w pętli może być tylko
jedna. Do wykonania większej liczby instrukcji
należy użyć klamry BEGIN..END.
Pętla instrukcji WHILE może nie zostać
wykonana ani raz, gdyż warunek jest
sprawdzany na początku.
Przykład
WHILE (wybor<>’k’) AND (wybor<>’p’) AND
(wybor<>’o’) DO Readln (wybor)
Przedstawiona pętla będzie realizować instrukcję Readln dotąd,
dopóki zawartość zmiennej wybor nie będzie równa jednej z
wymienionych liter. Jej zastosowanie pozwala wyeliminować
komunikat o błędnym wyborze.
69
Pętla REPEAT..UNTIL
Pętla REPEAT..UNTIL
REPEAT
instrukcja_1;
instrukcja_2;
...
{instrukcje, które mają być wykonywane}
instrukcja_n;
UNTIL
<warunek>
{warunek, którego spełnienie oznacza wyjście z pętli}
Przetłumaczenie:
Powtarzaj grupę instrukcji do momentu aż warunek
zostanie spełniony (stanie się prawdą).
Liczba instrukcji pomiędzy REPEAT a UNTIL nie jest
ograniczona i nie trzeba tu używać instrukcji złożonej,
jak w FOR...TO.
70
Pętla REPEAT..UNTIL
Pętla REPEAT..UNTIL
Instrukcja REPEAT...UNTIL charakteryzuje
się tym, że występujący wewnątrz niej ciąg
instrukcji musi być wykonany przynajmniej
jeden raz, gdyż warunek jest sprawdzany
dopiero po ich wykonaniu.
Przykład
REPEAT Readln (liczba);
UNTIL liczba=0;
Wykonując polecenie podane w powyższym
przykładzie komputer będzie wczytywał kolejne
liczby z klawiatury. Jeśli któraś z nich okaże się
równa 0, to przejdzie do następnej po pętli
instrukcji.
71
Pętla REPEAT..UNTIL
Pętla REPEAT..UNTIL
Instrukcję REPEAT wykorzystujemy do chwilowego
zatrzymania programu w celu oczekiwania na
naciśnięcie:
dowolnego przycisku
Repeat until keypressed
określonej litery
Tak_Nie:CHAR;
REPEAT
Instrukcja_1;
Instrukcja_2;
...........
Instrukcja_n;
Writeln (‘Jeszcze raz? T(ak)’);
Tak_Nie:=UpCase(ReadKey);
UNTIL NOT (Tak_Nie=’T’)
{jeśli naciśnięto T wykonuj petlę - warunek wyjścia z pętli}
72
Pętla REPEAT..UNTIL
Pętla REPEAT..UNTIL
Instrukcję REPEAT wykorzystujemy do chwilowego
zatrzymania programu w celu oczekiwania na
naciśnięcie:
Konkretnego klawisza
odp:CHAR;
REPEAT
Instrukcja_1;
Instrukcja_2;
...........
Instrukcja_n;
Writeln (‘Cz chcesz zakończyć pracę z programem?
T/N’);
UNTIL (odp=’T’) OR (odp=’t’)
{jeśli nie naciśnięto T wykonuj pętlę - warunek wyjścia z pętli}
73
Podprogramy
Podprogramy
Rozwiązując złożony problem w języku strukturalnym
programowania dzielimy go na podproblemy, co ułatwia
rozwiązanie. W ten sposób unikamy powtórzeń. Czynność
powtarzającą się wielokrotnie można opisać tylko raz, a
później wystarczy wskazać, którą sekwencję poleceń
należy wykonać.
Sekwencje poleceń rozwiązujące poszczególne
podproblemy nazywamy podprogramami .
Podprogramy muszą mieć nazwy pozwalające je
zidentyfikować.
Powinno się je stosować zawsze w przypadku powtarzania
się problemów, a nawet w przypadkach pojedynczego ich
występowania, jeśli poprawia to czytelność programów.
Stosując tę zasadę tworzymy prostsze algorytmy dla
podprogramów. W języku Pascal istnieją dwa rodzaje
podprogramów: procedury i funkcje.
74
Podprogramy
Podprogramy
PROCEDURA lub FUNKCJA - to wyróżniona część
programu stanowiąca pewną dającą się
wyodrębnić całość i zaopatrzona w
jednoznaczną nazwę.
FUNKCJA jest tworzona dla obliczenia pewnej
wartości, którą powinna zwrócić (np.
przekazać do zmiennej).
PROCEDURA ma na celu wykonanie określonej
czynności.
W programie Pascalowskim po definicji stałych i
deklaracji zmiennych musi nastąpić deklaracja
procedur i funkcji, a dopiero po tym część główna
programu. O ile deklaracja zmiennych wymagała
słowa kluczowego VAR, o tyle sekcja deklaracji
podprogramów nie potrzebuje żadnego wyróżnienia.
75
Procedury
Procedury
Procedurą nazywamy wyodrębnioną
część programu, która posiada swoją
nazwę, realizuje określone zadania i
w ustalony sposób komunikuje się z
pozostałymi częściami programu.
Procedury stosuje się do
wykonywania czynności wielokrotnie
powtarzanych w programie lub
takich, które mogą być wykorzystane
w innych programach.
76
Definicja procedury
Definicja procedury
Procedure nazwa_procedury[(lista_argumentów)];
[część opisowa procedury]
blok zakończony średnikiem
Lista argumentów ma charakter opcjonalny - procedurę bez
argumentów nazywa się bezparametrową.
Wszystkie argumenty procedury muszą mieć określone typy,
przy czym mogą to być typy standardowe lub zdefiniowane
przez programistę.
Część opisowa procedury może zawierać takie same elementy
jak część opisowa programu z wyjątkiem deklaracji modułów.
Wszystkie zmienne zadeklarowane w części opisowej
procedury mają zasięg lokalny - są dostępne tylko w
definiowanej procedurze.
77
Przykłady procedur
Przykłady procedur
Procedure Stop;
Begin
WriteLn;
WriteLn('Naciśnij klawisz ENTER ...');
ReadLn;
End;
Zdefiniowana procedura jest bezargumentowa i wywołuje
się ją tak jak każdą inną bezargumentową procedurę języka
(np. ClrScr) wpisując jako instrukcję jej nazwę:
np.
If (x Mod 24)=0 Then Stop;
78
Funkcje
Funkcje
Funkcja stanowi rozszerzenie procedury o możliwość
przekazywania jednej wartości ustalonego typu, zgodnego
z typem zadeklarowanym w nagłówku funkcji. Może on
należeć do typów prostych lub wskaźnikowych. Funkcje
podobnie jak procedury definiuje się w części opisowej
programu:
FUNCTION nazwa_funkcji (lista_parametrów):
typ_wyniku;
{deklaracja stałych i zmiennych}
BEGIN
{treść funkcji}
END;
Wewnątrz bloku definiującego funkcję musi wystąpić instrukcja
przypisania nadająca wartość definiowanej funkcji w postaci:
nazwa_funkcji:=wartość
wartość nadawana funkcji musi być zgodna z zadeklarowanym
typem wyniku funkcji.
79
Przykłady funkcji
Przykłady funkcji
Definicja funkcji, wartością której będzie pierwiastek stopnia
czwartego z liczby rzeczywistej mogłaby mieć postać:
Function Sqrt4(x : Real) : Real;
Begin
Sqrt4:=Sqrt(Sqrt(x));
End;
Tak zdefiniowanej funkcji używa się w taki sam sposób w jaki
używamy funkcji standardowych - wywołanie funkcji polega
na podaniu jej nazwy oraz argumentu typu rzeczywistego, np.
WriteLn('Suma pierwiastków stopnia czwartego = ', Sqrt4(x)
+Sqrt4(x+1));
80
Przykłady funkcji
Przykłady funkcji
Funkcja Min, której wartością jest mniejsza z dwóch liczb a i
b
Function Min(a, b : LongInt) : LongInt;
Begin
If a<a Then Min:=a Else Min:=b;
End;
Funkcja Min3, która będzie zwracać najmniejszą z trzech
liczb.
Function Min3(a, b, c : LongInt) : LongInt;
Begin
Min3:=Min(a, Min(b, c));
End;
81
Przykłady funkcji
Przykłady funkcji
Obliczając często potęgi o całkowitych wykładnikach
wygodnie jest zdefiniować sobie funkcję obliczającą taką
potęgę:
Function Pot(podst : Integer; wykl : Byte) : LongInt;
Var
i : Byte;
wynik : LongInt;
Begin
wynik:=1;
For i:=1 To wykl Do wynik:=wynik*podst;
Pot:=wynik;
End;
82
Uwagi do funkcji i
Uwagi do funkcji i
procedur
procedur
Używając w programach funkcji lub procedur należy pamiętać, że:
Zdefiniowaną funkcję lub procedurę można wywoływać wielokrotnie.
Funkcje lub procedury bezparametrowe wywołujemy wpisując wyłącznie ich
nazwy, podobnie jak w przypadku procedury ClrScr lub funkcji ReadKey.
Jeżeli funkcja lub procedura posiada argumenty, to w wywołaniu należy podać
wartości wszystkich argumentów, przy czym muszą to być wartości takich
typów, które będą zgodne z typami zadeklarowanymi w definicji funkcji lub
procedury - jeżeli argumentem funkcji jest liczba typy Real, to w wywołaniu
możemy podać np. zmienną typu Byte, ale nie na odwrót.
Zmienne zadeklarowane w części opisowej funkcji lub procedury mają
charakter lokalny - są "własnością" danej funkcji lub procedury i mogą być
używane wyłącznie w definicji funkcji lub procedury.
Definiowana funkcja lub procedura może korzystać ze wszystkich funkcji i
procedur, które zostały zdefiniowane wcześniej.
Funkcja lub procedura może odwoływać się do zmiennych globalnych
programu pod warunkiem, że zmienne te zostaną zadeklarowane wcześniej
(powyżej). Postępowanie takie jest dopuszczalne, aczkolwiek nie jest
polecane - można w ten sposób popełnić trudne do wykrycia błędy.
83
Przekazywanie argumentów funkcji i
Przekazywanie argumentów funkcji i
procedur
procedur
Sposób przekazania argumentu do funkcji lub procedurze zależy od sposobu w jaki
zdefiniowana została funkcja lub procedura, mówiąc bardziej szczegółowo, od sposobu
deklaracji jej argumentów. Istnieją dwie zasadnicze metody: przekazanie przez wartość
oraz przekazanie przez zmienną.
Procedure P(a : Integer);
Begin a:=a*a+1;
WriteLn(a);
End;
Tak zdefiniowaną procedurę program móże wywołać z argumentem w postaci zmiennej
P(x), P(dlugosc), w postaci stałej P(1), P(1024) oraz w postaci dowolnego wyrażenia
P(Sqr(12)+x-12) - wszystkie chwyty są tu dozwolone - jedyny warunek jaki musi spełnić
argument podany w wywołaniu nazywa się typ, który musi być zgodny z typem
argumentu wskazanym w deklaracji procedury.
Wewnątrz definicji procedury P dostępna jest zmienna a : Integer, występująca na liście
argumentów. Zmienna ta jest zmienną lokalną, dostępną tylko wewnątrz bloku
definiującego procedurę i nie można się do niej odwołać z żadnego innego miejsca
programu, bo w żadnym innym miejscu, czy to w innej procedurze, czy też w bloku
programu, zmiennej tej po prostu nie ma. Jak w znanym przeboju: "pojawia się", gdy
program rozpoczyna wykonywanie procedury, "i znika", gdy sterowanie opuszcza
procedurę.
84
Przekazywanie argumentów funkcji i
Przekazywanie argumentów funkcji i
procedur
procedur
O przekazaniu argumentu procedurze przez zmienną mówimy
wówczas, gdy na liście argumentów identyfikator zmiennej
poprzedzono słowem kluczowym Var:
Procedure Czytaj(Var a : Word);
Begin
Repeat
Write('Podaj dodatnią liczbę naturalną A = ');
ReadLn(a);
Until a>0;
End;
Wywołanie tak zadeklarowanej procedury jest możliwe tylko
wówczas, gdy jako argument podana zostanie zmienna typu Word
(nie może to być zmienna żadnego typu zgodnego). Przy
przekazaniu argumentu przez zmienną na stosie (w pamięci) nie
tworzy się żadnych zmiennych tymczasowych - procedura pracuje
bezpośrednio na przekazanej jej zmienej.
85
Przekazywanie argumentów funkcji i
Przekazywanie argumentów funkcji i
procedur
procedur
Jeśli tak zdefiniowaną procedurę wywołamy w programie ze zmienną
ilosc:
...
Var
ilosc : Word;
Begin
Czytaj(ilosc);
WriteLn('Wczytano liczbę = ', ilosc);
End.
to występująca w definicji zmienna a podczas wykonania
procedury będzie tożsama ze zmienną globalną programu
ilosc.
86
Przekazywanie argumentów funkcji i
Przekazywanie argumentów funkcji i
procedur
procedur
Przez zmienną przekazuje się do funkcji i
procedur takie argumenty, których zmiany
wykonane przez procedurę powinny być
trwałe, jak np. odczyt wartości z
klawiatury.
Również duże struktury danych jak tablice
należy w miarę możliwości przekazywać
przez zmienną, gdyż w przeciwnym
wypadku na stosie tworzone są ich kopie i
znaczne
zagłębienie
wykonywania
procedur
może
doprowadzić
do
wyczerpania miejsca na stosie, a tym
samym do błędu wykonania programu.
87
Definicja typu
Definicja typu
W Pascalu można definiować własne typy.
Określenie typu polega na podaniu jego nazwy i
opisu zbioru dopuszczalnych wartości.
TYPE nazwa=opis_typu;
Mając określony nowy zbiór wartości, możemy dalej
deklarować zmienne tego typu. W wyniku tego
postępowania otrzymamy:
Typ wyliczeniowy
Typ okrojony
88
Typ wyliczeniowy
Typ wyliczeniowy
Typ wyliczeniowy jest to zbiór wartości wyliczonych w definicji. Stosuje się go do
zbioru o niewielkiej liczbie elementów, na których nie wykonuje się operacji
arytmetycznych.
TYPE
Kolory=(trefl, karo, kier, pik);
VAR
Karta: Kolory;
TYPE
Tydzien=(pn, wt, sr, czw, pt, sob, nie);
VAR
Dzien: Tydzien;
TYPE
Figury=(kwadrat, prostokąt, trojkąt, kolo);
VAR
Figura: Figury;
Nie można zdefiniować w programie różnych typów wyliczeniowych
zawierających taką samą stałą.
89
Typ okrojony
Typ okrojony
Typ okrojony jest to zbiór wartości będących podzbiorem
pewnego typu porządkowego. Służy on do ograniczenia zakresu
wartości dla zmiennej tego typu. W tym sensie zdefiniowany typ
BYTE powstaje przez okrojenie typu INTEGER.
TYPE
Totolotek=1..49;
VAR
Liczby: Totolotek;
TYPE
Literki=’a’..’k’;
Wielokaty=kwadrat..trojkąt;
Dzien_roku=1..365;
90
Typ okrojony
Typ okrojony
Okroić można tylko typy
INTEGER, CHAR, BOOLEAN i WYLICZENIOWE.
Typy okrojone wprowadzono dla zwiększenia
możliwości kontroli programisty nad przebiegiem
programu.
Operacje na wartościach typu okrojonego nie mogą
wykraczać poza ten typ.
Funkcje standardowe SUCC, PRED, ORD nie mogą
mieć zastosowania do tych typów.
SUCC - wyznaczenie następnika argumentu
PRED – wyznaczenie poprzednika argumentu
ORD – wyznaczenie numeru porządkowego argumentu
odpowiadającego znakowi z tabeli kodów ASCII
91
Typy strukturalne (złożone)
Typy strukturalne (złożone)
Tablicowy
Rekordowy
Plikowy
Znakowy
Łańcuchowy
92
Typy strukturalne - tablice
Typy strukturalne - tablice
TABLICĄ nazywamy złożoną
strukturę danych, która zawiera
zbiór elementów tego samego typu.
Wyróżniamy:
Tablice jednowymiarowe, które odpowiadają
matematycznemu pojęciu wektora,
np.
[2 3 4 5 6] - tablica jednowymiarowa zawierająca 5
elementów typu całkowitego.
2 3 4 5 6
1
2 3 4 5
Indeks elementu
Elementy tablicy
93
Typy strukturalne - tablice
Typy strukturalne - tablice
Tablice wielowymiarowe, które odpowiadają
matematycznemu pojęciu macierzy (matrycy),
np.
1 2 3
Kolumny
Elementy tablicy
a d
g
z f
k
1
2
Wiersze
W tablicy dwuwymiarowej pierwszy indeks odpowiada numerowi wiersza,
a drugi numerowi kolumny.
np.: B[2, 3] – oznacza w drugim wierszu trzeci element (w tym wypadku k)
94
Deklaracja tablic
Deklaracja tablic
W deklaracji TABLIC używa się słowa kluczowego ARRAY, po
którym w nawiasie kwadratowym określamy rozmiar tablicy
(od..do), a po kolejnym słowie kluczowym typ elementów:
TYPE Nazwa=ARRAY [zakres_indeksów] OF typ_elementu;
W przypadku gdy chcemy bezpośrednio skorzystać z deklaracji
VAR, zapiszemy instrukcję w następujący sposób:
VAR zmienna: ARRAY [zakres_indeksów] OF typ_elementu;
95
Deklaracja tablic - przykłady
Deklaracja tablic - przykłady
TYPE
Wektor=ARRAY [1..5] OF Byte;
Macierz=ARRAY [1..2, 1..3] OF Char;
Pole=(puste, pion, goniec, skoczek, wieża, hetman, król);
Szachownica: ARRAY [1..8, ‘a’..’h’] OF Pole;
VAR
Dzien: ARRAY [1..12, 1..31] OF Byte;
El_wektora: Wektor;
El_macierzy: Macierz;
Ruch: Szachownica;
Z tablicami współpracuje instrukcja FOR. Pozwala ona
wprowadzać dane do tablicy, wybierać elementy tablicy,
wyświetlać je na ekranie.
96
Koniec prezentacji
Koniec prezentacji