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