wykład_2

Transkrypt

wykład_2
Programowanie
w języku Pascal
Dr inż. Grażyna KRUPIŃSKA
[email protected]
D-10 pokój 227
Tablice - wstęp
• Służą do przechowywania ustalonej liczby elementów (liczb
całkowitych, rzeczywistych lub znaków) tego samego typu.
tablica posiada nazwę
każde pole tablicy posiada numer (indeks)
nazwa
liczby
1
nr pola
1
1
2
2
3
3
4
5
5
8
13
21
34
55
6
7
8
9
10
Dostęp do każdego elementu tablicy uzyskujemy poprzez nazwę (tablicy) i numer
Przykład odwołanie się do elementu tablicy:
liczby[2]=1
liczby[6]=8
2011-10-22
Programowanie w języku Pascal
2
Tablice - deklaracje
• deklaracja „klasyczna” – definicja 10 elementowej tablicy liczb
całkowitych o nazwie liczby
var
liczby:array[1..10] of integer;
nazwa
rozmiar typ elementów
Rozmiar tablicy musi być stałą liczbą całkowitą
2011-10-22
Programowanie w języku Pascal
3
Tablice- deklaracje
• Można również zdefiniować tablicę o określonym rozmiarze
jako nowy typ danych, a następnie zadeklarować zmienną tego typu
program przykład;
type
definicja typu danych „tablica”
tablica=array[1..10] of integer;
var
liczby:tablica;
deklaracja zmiennej typu „tablica”
.......
2011-10-22
Programowanie w języku Pascal
4
Tablice - odwołania do elementów
Nadawanie wartości:
poprzez wczytanie z klawiatury:
read (liczby[i]);
poprzez instrukcję przypisania :
liczby[i]:=wyrażenie;
Przypisywanie wartości całej tablicy wykonujemy
nadając wartość każdemu elementowi z osobna
For i:=1 to 10 do
liczby[i]:=wyrażenie;
Lub
2011-10-22
For i:=1 to 10 do
readln (liczby[i]);
5
Tablice - odwołania do elementów
Wyprowadzanie wartości elementów tablicy –
również każdy element osobno
For i:=1 to 10 do
write (liczby[i]);
2011-10-22
Programowanie w języku Pascal
6
Łańcuchy
Służą do przechowywania ciągu znaków (w tym
spacji). Łańcuchy mogą mieć do 255 znaków.
deklaracja zmiennej łańcuchowej:
var
nazwa:string[liczba znaków]; - gdy brak liczby znaków
Pascal przyjmie 255
Przykład – deklaracja 30 znakowego łańcucha o nazwie wyraz
var
wyraz:string[30];
2011-10-22
Programowanie w języku Pascal
7
Łańcuchy
Łańcuchy możemy traktować jak tablice znaków - jeżeli
wyraz=‘parowóz’
to
wyraz[1]=‘p’
wyraz[4]=‘o’
Wprowadzanie „zawartości” łańcucha
Przez wczytanie z klawiatury readln(wyraz);
Instrukcja przypisania
wyraz:=‘parowóz’
– tekst musi być ujęty w pojedyncze apostrofy
2011-10-22
Programowanie w języku Pascal
8
Łańcuchy - funkcje i procedury
length(łańcuch) – określenie długości łańcucha (liczba
znaków)
Length(‘parowóz’)=7
pos(podłańcuch, łańcuch) – określenie pozycji od
której zaczyna się podłańcuch
pos(‘men’,’dokumentacja’)=5
concat(łańcuch1,łańcuch2,...) – połączenie kilku
łańcuchów w jeden
copy(łańcuch,indeks,licznik) – skopiowanie z łańcucha
licznik znaków począwszy od indeks
copy(‘dyrygent’,5,3) oznacza ‘gen’
2011-10-22
Programowanie w języku Pascal
9
Łańcuchy - funkcje i procedury
delete(łańcuch,indeks,licznik) usunięcie z łańcucha licznik
znaków począwszy od indeks np. delete(‘telefon’,1,4)
da w wyniku ‘fon’
insert(podłańcuch,łańcuch,indeks) wstawienie podłańcucha
do łańcucha na określonym przez indeks miejscu
insert(‘promujemy’,’gra’,4) da w wyniku ‘programujemy’
Zamiana liczba - łańcuch
Val(łańcuch,liczba,kod)- zamiana łańcucha na liczbę (kod<>0
oznacza błąd)
Str(liczba,łańcuch) – zamiana liczby na łańcuch
2011-10-22
Programowanie w języku Pascal
10
Tablice dwuwymiarowe
Służą do przechowywania ustalonej liczby elementów
(liczb całkowitych, rzeczywistych lub znaków) tego
samego typu.
1
7
2
13
5
8
3
21
89
55
10
1
6
31
7
0
32
51
34
28
88
0
14
3
111
5
714
29
38
51
44
15
7
22
58
87
13
33
59
8
wiersze
kolumny
każde pole posiada dwa indeksy – odwołanie do elementu tablicy wygląda tak:
nazwa[wiersz, kolumna]
2011-10-22
tablica[1,3]=2
tablica[2,1]=10
tablica[4,10]=8
Programowanie
w języku Pascal
11
Tablice dwuwymiarowe
deklaracja „klasyczna” –
tablica liczb całkowitych złożona z
4 wierszy i 10 kolumn o nazwie tabliczka
var
tabliczka:array[1..4, 1..10] of integer;
nazwa
2011-10-22
l.wierszy, l.kolumn typ elementów
Programowanie w języku Pascal
12
Tablice dwuwymiarowe
Przypisywanie wartości całej tablicy w podwójnej pętli
for i:=1 to 4 do
for j:=1 to 10 do
tabliczka[i,j]:=wyrażenie;
Lub
for i:=1 to 4 do
for j:=1 to 10 do
readln(tabliczka[i,j]);
Wyprowadzanie wartości elementów tablicy
for i:=1 to 4 do
for j:=1 to 10 do
write(tabliczka[i,j]);
2011-10-22
Programowanie w języku Pascal
13
Podprogramy
Pewne obliczenia (zestawy instrukcji) mogą być
wykonywane w programie wielokrotnie dla takich samych
lub innych danych. Korzystne jest wydzielenie takich
fragmentów w postaci podprogramów.
Podprogram służy do wyodrębnienie pewnego fragmentu
programu, stanowiącego pewną całość logiczną w całość
fizyczną identyfikowaną za pomocą nazwy. Taki
podprogram może być wywołany w wielu miejscach
programu.
2011-10-22
Programowanie w języku Pascal
14
Podprogramy
Pascal posiada dwa rodzaje podprogramów
Procedury – używane do wykonania przez program
jakiejś złożonej czynności np. wczytanie lub
wydrukowanie zawartości tablicy, wyczyszczenie
ekranu itp.
Funkcje – wykonują zespół instrukcji, którego
efektem jest obliczenie jakiejś wartości ( być
może poprzez wykonanie wielu rachunków
elementarnych)
2011-10-22
Programowanie w języku Pascal
15
Program TakieCosTam;
uses crt;
type
Tablica=array[1..10] of real;
Procedury
Definicja procedury:
procedure nazwa(lista parametrów);
var
lista zmiennych;
begin
zestaw instrukcji;
end;
procedure CzytajTablice(var t:tablica);
var
i:integer;
begin
for i:=1 to 10 do
begin
write(‘t[‘,i:2,’]=‘);
readln(t[i]);
end;
end;
var
a,b,c:tablica;
Zdefiniowaną procedurę wywołujemy
Begin
w programie podając jej nazwę z listą
ClrScr;
parametrów
CzytajTablice(a);
CzytajTablice(b);
.......
2011-10-22
Programowanie w języku Pascal
end.
16
Definicja funkcji:
function nazwa(lista parametrów):typ funkcji;
var
lista zmiennych;
begin
zestaw instrukcji;
nazwa:=wyrażenie;
end;
Funkcje
Typ funkcji to typ wartości
obliczanej przez funkcję
W zestawie instrukcji musi pojawić się
instrukcja przypisania wartości obliczanej
przez funkcję
Funkcję wywołujemy w programie
używając jej (z listą parametrów)
w instrukcji
przypisania Programowanie w języku Pascal
2011-10-22
Program TakieCosTam;
uses crt;
function maks(x,y:real):real;
begin
if x>y then
maks:=x
else
maks:=y;
end;
var
a,b,c:real;
begin
ClrScr;
readln(a);
readln(b);
c:=maks(a,b);
.......
end.
17
Zmienne globalne i lokalne
Pascal wymaga zadeklarowania każdej zmiennej poprzez podanie
jej nazwy i typu – jest to związane przydzieleniem dla niej
miejsca w pamięci operacyjnej
W programie głównym deklarujemy zmienne globalne to znaczy
takie które są „widoczne” w całym programie (zmienne globalne
mają przydzieloną pamięć przez cały czas pracy programu)
W procedurach i funkcjach deklarujemy zmienne lokalne –
widziane tylko przez podprogram – w programie głównym nie są
one widoczne (zmienne lokalne mają pamięć przydzieloną tylko na
czas wykonywania podprogramu – po jego wykonaniu pamięć jest
zwalniana a wartość zmiennej ulega zagubieniu)
2011-10-22
Programowanie w języku Pascal
18
Przekazywanie parametrów
Pascal pozwala przekazywać parametry do procedur
i funkcji na dwa sposoby
przez wartość
przez zmienną
procedure pisz(t:tablica);
var
i:integer;
begin
for i:=1 to 10 do
writeln(t[i]);
end;
procedure czytaj(var t:tablica);
var
i:integer;
begin
for i:=1 to 10 do
readln(t[i]);
end;
wartości parametrów są „kopiowane”
do zmiennych lokalnych – po
zakończeniu procedury zmiany ulegają
„zapomnieniu” (pozostaje wartość
pierwotna parametru)
2011-10-22
procedura otrzymuje dostęp do
zmiennej globalnej (adres w pamięci
operacyjnej) – wprowadzone zmiany
pozostają po wykonaniu procedury
Programowanie w języku Pascal
19
Typy danych
typ
Rodzaj danych
Zakres wartości
rozmiar
char
znaki
Znaki alfabetu ASCII
1 bajt
boolean
wartości logiczne
TRUE/FALSE
1 bajt
byte
Liczby naturalne
[0;255]
1 bajt
shortint
Liczby całkowite
[-128;127]
1 bajt
word
Liczby naturalne
[0;65 535]
2 bajty
integer
Liczby całkowite
[-32 768;32 767]
2 bajty
long
Liczby całkowite
[-2147483648;2147483647]
4 bajty
real
Liczby rzeczywiste
(-1,738;1,738)
11-12 cyfr znaczących
6 bajtów
single
Liczby rzeczywiste
(-3,438;3,438)
7-8 cyfr znaczących
4 bajtów
double
Liczby rzeczywiste
(-1,7308;1,7308)
15-16 cyfr znaczących
8 bajtów
extended
Liczby rzeczywiste
(-1,14932;1,14392) 19-20 cyfr znaczących
10bajtów
2011-10-22
Programowanie w języku Pascal
20
Deklaracja własnych typów danych
Oprócz standardowych typów danych użytkownik może
definiować własne
Definicję rozpoczynamy kluczowym słowem TYPE
Po którym następuje definicja: nazwa_typu=opis_typu;
Przykład: definiujemy typ napisowy o długości 20 znaków:
tekst20=string[20];
definiujemy 10 elementową tablicę liczb całkowitych
tab10int=array[1..10] of integer;
Po zdefiniowaniu typu
deklarujemy zmienną,
która będzie ten typ
wykorzystywała
2011-10-22
type
tekst=string[30];
var
komunikat:tekst;
begin
komunikat:=‘ wszystko gra’;
Programowanie w języku Pascal
.......
21
Typ wyliczeniowych
Używany jest gdy pewne wartości stałe używane w
programie mają odpowiedniki tekstowe [identyfikatory]:
type
nazwa_typu =(lista identyfikatorów);
1)Wykaz identyfikatorów <=255 pozycji
2)Nie mogą być słowami zastrzeżonymi
3)Są ponumerowane od 0 do n-1
Przykładem mogą być oceny....
type
oceny=(niedostateczny,dopuszczajacy,dostateczny,dobry,bardzo_dobry,celujacy);
var
odp,kl,pk:oceny;
2011-10-22
Programowanie w języku Pascal
22
Typ wyliczeniowych
Używany jest gdy pewne wartości stałe używane w
programie mają odpowiedniki tekstowe [identyfikatory]:
Dostępne funkcje:
ORD(identyfikator)
– zwraca numer identyfikatora
ORD(‘dobry’)=3
PRED(identyfikator) – zwraca poprzedni identyfikator
PRED(‘dobry’)=‘dostateczny’
SUCC(identyfikator) - zwraca następny identyfikator
SUCC(‘dobry’)=‘bardzo _dobry
2011-10-22
Programowanie w języku Pascal
23
Typ okrojony
Dotyczy konkretnego typu bazowego. Zbiór wartości typu
okrojonego jest podzbiorem zbioru wartości typu
bazowego.
Definiujemy jak każdy inny typ
użytkownika (potem deklarujemy
zmienną nowozdefiniowanego typu)
Możemy zdefiniować typ podczas
deklarowania zmiennych
type
miesiac=1..12;
var
mc_ur:miesiac;
var
mc_ur:1..12;
dz_ur:1..31;
Próba nadania zmiennej typu okrojonego wartości spoza zakresu
kończy się błędem wykonania
2011-10-22
Programowanie w języku Pascal
24
Rekordy – dostęp do pól
Rekord jest zmienną złożoną [strukturą] służącą do
przechowywania danych różnego typu.
Każde pole ma nazwę
Każde pole ma określony typ danych ,które przechowuje
rekord
type
osoba=record
imie:string[30];
nazwisko:string[50];
wiek:integer;
end;
2011-10-22
data
rekord osoba
nazwisko
łańcuch
imię
łańcuch
dzień
l.całkowita
miesiąc
l.całkowita
rok
l.całkowita
wiek
l.całkowita
Deklaracja zmiennych rekordowych:
var
uczen,nauczyciel,dyrektor:osoba;
Programowanie w języku Pascal
25
Rekordy
Dostęp do pól rekordu (wprowadzanie lub wyprowadzanie
danych) uzyskujemy:
var
Podając nazwę zmiennej
(rekordu) i nazwę pola
oddzieloną kropką
uczen,nauczyciel:osoba;
begin
readln(uczen.nazwisko);
readln(uczen.imie);
readln(uczen.wiek);
.....
Korzystając z instrukcji with
podajemy nazwę zmiennej a
następnie używamy tylko nazwy
pola
2011-10-22
var
uczen,nauczyciel:osoba;
.....
with uczen do
begin
readln(nazwisko);
readln(imie);
readln(wiek);
end;.........
Programowanie w języku Pascal
26
Pliki
Pliki zawierają dane przechowywane w pamięci dyskowej – są
zachowywane po zakończeniu pracy z programem
Pliki reprezentowane są w programie przez zmienną plikową
Zmienna plikowa musi zostać związana ze znajdującym się na
dysku plikiem „fizycznym” [Plik fizyczny stanowi obszar pamięci
dyskowej identyfikowalny poprzez nazwę]
Podczas pracy programu dane z pliku są sprowadzane do
pamięci operacyjnej – tam są przetwarzane
Dane w plikach są zapisywane po kolei (sekwencyjnie) –
można je odczytywać po kolei lub zażądać odczytania
elementu o określonym numerze.
Liczba elementów w pliku jest dowolna (ograniczona wolnym
miejscem na dysku)
Po przetworzeniu dane mogą być zapisane do tego samego
lub innego pliku
2011-10-22
Programowanie w języku Pascal
27
Pliki - rodzaje
Pliki tekstowe – składają się ze znaków kodów ASCII pogrupowanych
we wiersze o różnej długości
Wiersz kończy się parą znaków CR LF (#10 #13)
Plik kończy się znakiem końca pliku EOF (#26)
Pliki binarne – dane zapisane są binarnie (liczby dwójkowe) nie
nadają się do bezpośredniego oglądania – wymagają
interpretacji przez program
Pliki zdefiniowane – składają się z elementów o określonej
strukturze (np. ze zdefiniowanych w programie rekordów)
Pliki niezdefiniowane – poszczególne porcje danych mogą
mieć różny rozmiar i różne znaczenie – program odczytujący
„musi wiedzieć co tam jest”
2011-10-22
Programowanie w języku Pascal
28
Pliki - przetwarzanie
Deklaracja zmiennej plikowej
zm_plik:rodzaj pliku;
text
– plik tekstowy
file of element - plik elementów
File –
plik niezdefiniowany
Skojarzenie zmiennej z plikiem fizycznym Assign(zm_plik,nazwa pliku);
nazwa pliku ze ścieżką dostępu
Otwarcie pliku
ReWrite(zm_plik);
nowy pliku do zapisu danych
Reset(zm_plik);
plik do odczytu danych
Append(zm_plik);
plik tekstowy do dopisania danych na
końcu
Wykonanie operacji na pliku
Zamknięcie pliku
2011-10-22
Read(zm_plik,lista zmiennych);
Write(zm_plik,lista zmiennych);
Close(zm_plik);
Programowanie w języku Pascal
plik otwarty musi zostać zamknięty
29
Pliki - przydatne funkcje
EOF(zm_plik) – zwraca TRUE gdy osiągnięto koniec pliku
EOLN(zm_plik) – zwraca TRUE gdy osiągnięto koniec linii w pliku
tekstowym
Seek(zm_plik,n) – ustawia wskaźnik pliku na elemencie o numerze n
FilePos(zm_plik) – zwraca aktualną pozycję wskaźnika pliku
FileSize(zm_plik) – zwraca liczbę elementów pliku
IOResult – zwraca 0 gdy ostatnią operację na pliku wykonano
pomyślnie – w przeciwnym wypadku zwraca kod błędu
2011-10-22
Programowanie w języku Pascal
30