Programowanie w języku Pascal Dr inż. Grażyna KRUPIŃSKA grazyna@novell.ftj.agh.edu.pl D-10 pokój 227
Algorytmy Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhamed ibn Musy al-chorezmi (z Chorezmu), który ok. 820 roku n.e. opisał pozycyjny system kodowania dziesiętnego liczb i sztukę liczenia w tym systemie. W XII w. Europie przetłumaczono jego książkę i rozpoczęto wykonywanie obliczeń metodą "pisemną". 2011-10-22 Programowanie w języku Pascal 2
Algorytmy Algorytmem nazywamy skończony ciąg instrukcji prowadzących do rozwiązania danego problemu lub zadania. Jest to przepis postępowania prowadzący do osiągnięcia jakiegoś celu. Implementacja to zapis algorytmu w języku programowania. 2011-10-22 Programowanie w języku Pascal 3
Algorytmy Rozwiązując jakikolwiek problem (zadanie) stosujemy zazwyczaj określoną metodę (przepis), która ma pozwolić na uzyskanie wyniku (rozwiązania). Warunkiem przystąpienia do rozwiązywania jakiegokolwiek problemu jest posiadanie niezbędnych wiadomości i doświadczenia 2011-10-22 Programowanie w języku Pascal 4
Algorytmy Algorytmika -podstawowy dział informatyki poświęcony poszukiwaniom, konstruowaniu i badaniom algorytmów, zwłaszcza w kontekście ich przydatności do rozwiązywania problemów za pomocą komputerów. Program komputerowy -to logicznie uporządkowany ciąg instrukcji języka programowania realizujący algorytm. 2011-10-22 Programowanie w języku Pascal 5
Algorytmizacja zadania Sformułowanie zadania Określenie danych wejściowych Określenie celu, czyli oczekiwanego wyniku Poszukanie metody rozwiązania, czyli algorytmu Przedstawienie algorytmu w postaci opisu słownego listy kroków schematu blokowego języka programowania Analiza poprawności rozwiązania Testowanie rozwiązania dla różnych danych ocena efektywności przyjętej metody 2011-10-22 Programowanie w języku Pascal 6
Cechy algorytmu Skończoność(realizowany ciąg operacji powinien mieć swój koniec). Określoność(zarówno operacje, jak i porządek ich wykonywania powinny być ściśle określone, nie zostawiając miejsca na dowolną interpretację użytkownika). Ogólność(algorytm nie ogranicza się do jednego, pojedynczego, szczegółowego przypadku, ale odnosi się do pewnej klasy zadań). Efektywność(algorytm powinien prowadzi do rozwiązania możliwie najprostszą drogą). 2011-10-22 Programowanie w języku Pascal 7
Algorytmy Przykład: Uporządkuj rosnąco (A-Z) zbiór nazwisk i imion uczniów klasy drugiej. Dane: nieuporządkowany zbiór nazwisk i imion uczniów klasy Wynik: uporządkowany alfabetycznie zbiór nazwisk i imion uczniów klasy 2011-10-22 Programowanie w języku Pascal 8
Sposoby przedstawiania algorytmów Opis słowny Lista kroków Schemat blokowy Zapis z wykorzystaniem jednego z języków programowania 2011-10-22 Programowanie w języku Pascal 9
Opis słowny algorytmu Algorytm w postaci listy kroków 1. Podejdź do telefonu 2. Podnieś słuchawkę 3. Sprawdź, czy jest sygnał... 4.... Jest to początek algorytmu wykonania telefonu podany w postaci listy kroków Pamiętaj by w jednym punkcie (kroku) opisać t y l k o j e d n ą o p e r a c j ę 2011-10-22 Programowanie w języku Pascal 10
Schemat blokowy Algorytm w postaci schematu blokowego jest graficzną reprezentacją słownego zapisu algorytmu 2011-10-22 Programowanie w języku Pascal 11
Schemat blokowy START STOP Skrzynki graniczne START i STOP mają kształt owalu - wskazują początek i koniec wykonywania schematu blokowego. 2011-10-22 Programowanie w języku Pascal 12
Schemat blokowy S a + b Skrzynka operacyjna (instrukcji) ma kształt prostokąta, w którym umieszcza się instrukcje. 2011-10-22 Programowanie w języku Pascal 13
Schemat blokowy Skrzynka warunku S > 10 Nie Tak jest rombem, w którym umieszcza się warunek decydujący o dalszej kolejności wykonywania operacji. Ze skrzynki wychodzą dwa połączenia: jedno oznaczone Tak, drugie oznaczone Nie. 2011-10-22 Programowanie w języku Pascal 14
Schemat blokowy Wprowadź Wyprowadź Skrzynki wejścia/wyjścia Jest równoległobokiem, w którym umieszcza się dane lub wyniki. 2011-10-22 Programowanie w języku Pascal 15
Schemat blokowy Obliczanie sumy dwóch liczb START Podaj (a) Podaj (b) S=: a + b Pisz sumę 2011-10-22 Programowanie w języku Pascal 16 STOP
Iteracja, czyli działanie w pętli Czasem trzeba wykonać te same operacje na wielu liczbach. W takich przypadkach nie jest konieczne wielokrotne opisywanie takich samych działań. Stosujemy wówczas iterację. Działania te wykonywane są w pętli. Liczba powtórzeń tych samych działań może być z góry określona lub zależeć od spełnienia warunku. Tak S := S+ L (3) (2) L := L 1 (0) (1) Start Czytaj N S := 0 L := N Czy L > 0? Pisz S Koniec Nie 2011-10-22 Programowanie w języku Pascal 17
Schemat blokowy Obliczanie największego wspólnego podzielnika dwóch liczb algorytm Euklidesa 1. Dane są dwie niezerowe liczby naturalne a i b. 2. Dopóki liczby nie są równe powtarzaj krok 3, w przeciwnym razie przejdź do kroku 4. 3. Od większej liczby odejmij mniejszą i tę większą zastąp otrzymaną różnicą. 4. Wyprowadź wynik: NWD (największy wspólny dzielnik) jest równy pierwszej liczbie. 2011-10-22 Programowanie w języku Pascal 18
Schemat blokowy 2011-10-22 Programowanie w języku Pascal 19
Prezentacja algorytmu w języku programowania Aby przedstawić algorytm w postaci programu, trzeba go napisać jako ciąg instrukcji języka programowania. Każda instrukcja podobnie jak skrzynka w schemacie blokowym odpowiada określonej operacji, dlatego też kolejność występowania instrukcji w programie określa kolejność wykonywania operacji. Nauka programowania nie polega jednak na nauczeniu się na pamięć instrukcji danego języka, ale na zrozumieniu zasad ich działania oraz na umiejętnym ich zastosowaniu. 2011-10-22 Programowanie w języku Pascal 20
Programowanie algorytm rozwiązuje problem program realizuje algorytm komputer wykonuje program 2011-10-22 Programowanie w języku Pascal 21
Programowanie ETAPY PROGRAMOWANIA PROBLEM ALGORYTM PROGRAM ŹRÓDŁOWY PROGRAM WYKONYWALNY KOMPUTER 0. WYBÓR-ZNALEZIENIE- OPRACOWANIE ALGORYTMU 1. IMPLEMENTACJA to zapis algorytmu w języku programowania 2.TRANSLACJA to tłumaczenie programu źródłowego na kod maszynowy 3. URUCHOMIENIE programu 4. TESTOWANIE programu 2011-10-22 Programowanie w języku Pascal 22
Program źródłowy i wynikowy PROGRAM (KOD) ŹRÓDŁOWY to algorytm zapisany w języku programowania (języku wysokiego poziomu) Przejrzysta struktura (reguły języka) zrozumiały dla człowieka Niezależność od sprzętu PROGRAM (KOD) WYNIKOWY to program zapisany w języku wewnętrznym (maszynowym) procesora Instrukcje odpowiadają instrukcjom konkretnego procesora 2011-10-22 Programowanie w języku Pascal 23
Program źródłowy i wynikowy TRANSLACJA to tłumaczenie programu źródłowego na kod maszynowy. Używamy do tego programów zwanych translatorami. Dzielimy je na: INTERPRETERY każde polecenie języka wysokiego poziomu jest na bieżąco zamieniane na kod maszynowy i wykonywane (do wykonania programu potrzebne jest uruchomienie interpretera) KOMPILATORY cały program źródłowy jest tłumaczony na kod maszynowy i zapisywany w pliku wykonywalnym (*.exe). Raz skompilowany program jest gotowy do użycia. 2011-10-22 Programowanie w języku Pascal 24
Struktura programu w Pascalu nazwa jest jednym wyrazem (bez spacji) nazwa nie zawiera polskich liter program polekola; uses crt; const pi=3.14; var p,r:real; begin writeln( pole koła ); writeln('podaj promień'); readln(r); p:=pi*r*r*; nagłówek programu część deklaracyjna część wykonawcza writeln(pole koła wynosi,p:4:2) end. program nazwa; uses lista modułów; const deklaracje modułów moduły to zbiory funkcji i procedur, które możemy wykorzystywać w naszych programach nazwa=wartość; definicje stałych var lista zmiennych:typ; deklaracje zmiennych begin wszystkie zmienne występujące w programie muszą być wcześniej zadeklarowane instrukcje programu end. Kolejność zapisywania instrukcji odpowiada kolejności wykonywania Instrukcje oddzielamy średnikiem 2011-10-22 Programowanie w języku Pascal 25
Zmienne KAŻDA ZMIENNA UŻYWANA W PROGRAMIE MUSI BYĆ ZADEKLAROWANA dla każdej zadeklarowanej zmiennej rezerwowany jest fragment pamięci o określonym adresie i wielkości zmiennym nadajemy wartości wczytując je z klawiatury lub pliku używając instrukcji przypisania przypisując nową wartość zmiennej automatycznie kasujemy starą 2011-10-22 Programowanie w języku Pascal 26
Podstawowe typy danych PREDEFINIOWALNE TYPY DANYCH liczby całkowite INTEGER liczby rzeczywiste REAL wartości logiczne BOOLEAN = {TRUE, FALSE} wartości znakowe CHAR łańcuchy STRING STRING[n] łańcuch ograniczony do n znaków 2011-10-22 Programowanie w języku Pascal 27
Instrukcje wejścia służą do wprowadzania danych do programu Read(lista zmiennych); Readln(lista zmiennych); wczytanie ( z klawiatury) zmiennych wymienionych w nawiasie wczytanie ( z klawiatury) zmiennych wymienionych w nawiasie, a następnie przeniesienie kursora do następnej linii 2011-10-22 Programowanie w języku Pascal 28
Instrukcje wejścia służą do wprowadzania danych do programu Przykład dla zmiennych x, y, z, t wprowadzamy odpowiednio wartości 4 12 6 8 instrukcja Sposób wprowadzenia (ekran) read(x,y); read(z); read(t); readln(x,y); readln(z); read(t); 4 12 6 8 <ENTER> 4 12 <ENTER> 5 <ENTER> 8 <ENTER> 2011-10-22 Programowanie w języku Pascal 29
Instrukcje wyjścia służą do wyprowadzania wyników lub komunikatów Write(lista zmiennych); Writeln(lista zmiennych); wypisanie wartości zmiennych wymienionych w nawiasie wypisanie wartości zmiennych wymienionych w nawiasie, a następnie przeniesienie kursora do następnej linii Writeln( tekst komunikatu ); Tekst ujęty w apostrofach zostanie wypisany na ekranie 2011-10-22 Programowanie w języku Pascal 30
Instrukcje wyjścia Przykład dla zmiennych i, j, k o wartościach 12, 4 i 78 instrukcja Sposób wyprowadzenia (ekran) write( oto liczby: ); write(i); write(j); write(k); writeln( oto liczby: ); write(i); writeln(j); write(k); oto liczby: 12 4 78 oto liczby: 12 4 78 2011-10-22 Programowanie w języku Pascal 31
Formatowanie wydruku liczby całkowite: writeln(zmienna:l_cyfr) l_cyfr - długość liczby (w znakach), Przykład dla zmiennych n = 153, k = 76 instrukcja ekran Write(n,k); 15376 Write(n:3,k:3); 153 76 Write(n:5,k:5); 153 76 2011-10-22 Programowanie w języku Pascal 32
Formatowanie wydruku liczby rzeczywiste: writeln(zmienna:l_cyfr:c_dzies) l_cyfr - długość liczby (w znakach)łącznie z przecinkiem c_dzies liczba cyfr po przecinku Przykład dla zmiennej x=9,75 instrukcja ekran Write(X); 9.7500000E+00 Write(x:4:2) 9.75 Write(x:3:1) 9.8 Write(x:5:1) 9.8 Write(x:8:4) 9.7500 2011-10-22 Programowanie w języku Pascal 33
Instrukcja przypisania służy do nadawania wartości zmiennym przez program zmienna := wyrażenie; wyrażenie (wzór) to zapis obliczeń składający się ze zmiennych, operatorów działań i funkcji wartość obliczona na podstawie wyrażenia zostanie przypisana zmiennej typ zmiennej musi być zgodny z typem wyrażenia 2011-10-22 Programowanie w języku Pascal 34
Instrukcja przypisania służy do nadawania wartości zmiennym przez program Operacje arytmetyczne + dodawanie - odejmowanie * mnożenie / dzielenie rzeczywiste przykład: 7/2=3,5 div dzielenie całkowite przykład: 7 div 3 = 2 mod reszta z dzielenia całkowitego przykład: 7 mod 3 = 1 2011-10-22 Programowanie w języku Pascal 35
Budowa wyrażeń Zasady zapisu: wszystkie działania muszą być jawne np. y:=2*a a nie y:=2a do grupowania działań służy nawias zwykły np y:=1/((1/x)+1) Kolejność działań: wartości funkcji wyrażenia w nawiasach mnożenie i dzielenie dodawanie i odejmowanie 2011-10-22 Programowanie w języku Pascal 36
a + 2 b h Budowa wyrażeń (a+b)/2*h a + b cd (a+b)/c*d (a+b)/(c*d) 1 x 2 + 1 1/sqrt(x*x+1) α + β α β 2sin cos 2*sin((a+b)/2)*cos((a-b)/2) 2 2 2011-10-22 Programowanie w języku Pascal 37
Funkcje standardowe abs(x) - wartość bezwzględna sqr(x) -kwadrat sqrt(x) - pierwiastek kwadratowy ln(x) - logarytm naturalny z x exp(x) -e x sin(x) - sinus (x w radianach) cos(x) - cosinus (x w radianach) arctan(x)- arcus tangens x (wynik w mierze łukowej) round(x) -zaokrąglenie do najbliższej liczby całkowitej round(7.67)=8 trunc(x) - obcięcie części ułamkowej trunc(7.67)=7 2011-10-22 Programowanie w języku Pascal 38
Instrukcja warunkowa Pozwala na podjęcie decyzji, którą instrukcję ma wykonać w zależności od postawionego warunku IF warunek THEN instrukcje_gdy_tak ELSE instrukcje_gdy_nie; - wykonywana jest gdy warunek jest spełniony - wykonywana jest gdy warunek nie jest spełniony 2011-10-22 Programowanie w języku Pascal 39
Instrukcja warunkowa Pozwala na podjęcie decyzji, którą instrukcję ma wykonać w zależności od postawionego warunku Przykład 1: if (x<>1) then y:=0.5*x*x-4 else y:=1/(x-1); Przykład 2: Readln(x); if (x<0) then x:=x*(-1); Writeln( wartość bezwzględna=,x); 2011-10-22 Programowanie w języku Pascal 40
Warunek, operacja, operator IF warunek THEN... warunek = wyrażenie logiczne wyrażenie logiczne (warunek) to zapis warunku przy użyciu operatorów relacji lub operacji logicznych wyrażenie logiczne przyjmuje wartość TRUE lub FALSE (może być fałszywe lub prawdziwe) 2011-10-22 Programowanie w języku Pascal 41
Warunek, operacja, operator operatory relacji = -równe <> -różne < -mniejsze > -większe <= -mniejsze lub równe >= -większe lub równe operacje logiczne not - negacja and - iloczyn logiczny or -suma logiczna przykłady wyrażeń logicznych a > b ( a > b ) or ( a > c ) ( a <> 0 ) and ( ( a> b ) or ( a > c ) ) 2011-10-22 Programowanie w języku Pascal 42
Instrukcja złożona Służy do grupowania kilku instrukcji w celu łącznego wykonania (lub nie wykonania) begin... instrukcje programu;... end; 2011-10-22 Programowanie w języku Pascal 43
Instrukcja złożona Instrukcja warunkowa IF...THEN sama z siebie domyślnie warunkiem (na tak lub nie) obejmuje tylko jedną instrukcję programu if x=0 then writeln( y nie istnieje ) else y:=1/x; writeln( y=,y:5:2); if x<>0 then writeln( y nie istnieje ); else begin y:=1/x; writeln( y=,y:5:2) end; elementem instrukcji warunkowej jest tylko y:=1/x; writeln( y=,y:5:2); wykona się niezależnie od wartości x Obie instrukcjezostanąwykonane (lub nie) -zależnie od wartości x 2011-10-22 Programowanie w języku Pascal 44
Instrukcja wyboru Pozwala na wybór jednej spośród kilku instrukcji w zależności od wartości wyrażenia sterującego (selektora) CASE (wyrażenie) OF w 1 :instrukcja 1; w 2 :instrukcja 2; w 3 :instrukcja 3;... END; obliczana jest wartość wyrażenia w nawiasie wyrażenie musi być typu całkowitego lub znakowego wykonywana jest instrukcja odpowiadająca obliczonej wartości jeżeli obliczonej wartości wyrażenia nie ma na liście nie zostanie wykonana żadna z instrukcji gdy dla jednej wartości wyrażenia należy wykonać kilka instrukcji stosujemy instrukcję złożoną (begin... end) 2011-10-22 Programowanie w języku Pascal 45
Instrukcja wyboru Pozwala na wybór jednej spośród kilku instrukcji w zależności od wartości wyrażenia sterującego (selektora) Case (kont div 90+1) of 1:writeln( pierwsza ćwiartka ); 2:writeln( druga ćwiartka ); 3:writeln( trzecia ćwiartka ); 4:writeln( czwarta ćwiartka ); end; Obliczane jest wyrażenie (kont div 90)+1 Wykonywana jest instrukcja informująca do której ćwiartki należy wartość kont 2011-10-22 Programowanie w języku Pascal 46
Instrukcja iteracyjna FOR Pozwala powtarzanie instrukcji określoną ilość razy FOR zmienna:=wart.początkowa TO wart. końcowa DO instrukcja; FOR zmienna:=wart.początkowa DOWNTO wart. końcowa DO instrukcja; zmienna musi być typu całkowitego Po każdym wykonaniu instrukcji zmienna jest automatycznie modyfikowana o 1 w górę dla TO w dół dla DOWNTO Instrukcja wykonywana jest tyle razy aby zmienna startując od wartości początkowej osiągnęła wartość końcową 2011-10-22 Programowanie w języku Pascal 47
Instrukcja iteracyjna FOR Pozwala powtarzanie instrukcji określoną ilość razy for i:=1 to 10 do suma:=suma+i; for i:=1 to 10 do begin write( liczba= ); readln(liczba); suma:=suma+liczba; end; gdy pętlą jest objętych kilka instrukcji (linijek) trzeba stosować instrukcję złożoną 2011-10-22 Programowanie w języku Pascal 48
Instrukcja cykliczna repeat...until Pozwala na powtarzanie instrukcji nieokreśloną ilość razy aż do spełnienia zadanego warunku REPEAT instrukcja; UNTIL warunek; instrukcja (instrukcje) umieszczone wewnątrz pętli będą wykonywane dopóki warunek nie zostanie spełniony; po spełnieniu warunku program opuści pętlę repeat write( liczba= ); readln(liczba); suma:=suma+liczba; until suma<=100; najpierw wykonywana jest instrukcja, a później sprawdzany jest warunek między słowami kluczowymi repeat...until możemy umieścić kilka instrukcji - powtarzane są wszystkie 2011-10-22 Programowanie w języku Pascal 49
Instrukcja cykliczna while...do Pozwala na powtarzanie instrukcji nieokreśloną ilość razy tak długo jak długo warunek jest spełniony WHILE warunek DO instrukcja; instrukcja jest powtarzana tak długo jak długo jest spełniony warunek gdy warunek nie będzie spełniony program opuści pętlę najpierw sprawdzany jest warunek, a później wykonywana jest instrukcja 2011-10-22 Programowanie w języku Pascal 50
Instrukcja cykliczna while...do Pozwala na powtarzanie instrukcji nieokreśloną ilość razy tak długo jak długo warunek jest spełniony While (a*b)<>0 do if a>b then a:=a mod b else b:=b mod a; while suma<100 do begin write( liczba= ); readln(liczba); suma:=suma+liczba; end; gdy warunkiem jest objętych kilka instrukcji (linijek) trzeba stosować instrukcję złożoną 2011-10-22 Programowanie w języku Pascal 51