wykład_3
Transkrypt
wykład_3
Programowanie w języku Pascal Dr inż. Grażyna KRUPIŃSKA [email protected] D-10 pokój 227 Od algorytmu do programu wykonywalnego ETAPY PROGRAMOWANIA PROBLEM 0. WYBÓR-ZNALEZIENIEOPRACOWANIE ALGORYTMU ALGORYTM PROGRAM ŹRÓDŁOWY PROGRAM WYKONYWALNY 1. IMPLEMENTACJA to zapis algorytmu w języku programowania 2. TRANSLACJA to tłumaczenie programu źródłowego na kod maszynowy 3. URUCHOMIENIE programu KOMPUTER 12/1/2011 4. TESTOWANIE programu Język Pascal - Grafika 2 Struktura programu w Pascalu nazwa jest jednym wyrazem (bez spacji) nazwa nie zawiera polskich liter program polekola; nagłówek programu uses crt; program nazwa; uses lista modułów; const część pi=3.14; deklaracyjna var p,r:real; begin const definicje stałych nazwa=wartość; var lista zmiennych:typ; begin writeln(‘pole koła’); writeln('podaj promień'); readln(r); część wykonawcza p:=pi*r*r*; deklaracje modułów moduły to zbiory funkcji i procedur, które możemy wykorzystywać w naszych programach deklaracje zmiennych wszystkie zmienne występujące w programie muszą być wcześniej zadeklarowane instrukcje programu writeln(pole koła wynosi ‘,p:4:2) end. 2011-12-01 end. Programowanie w języku Pascal Kolejność zapisywania instrukcji odpowiada kolejności wykonywania Instrukcje oddzielamy średnikiem 3 Dokładność obliczeniowa program dokladnosc; var x,y,z : Real; begin x := 7.244; y := sqrt(x); z := x - y*y; write ('Dokladnosc maszynowa wyniosla '); writeln(z); writeln ('... nacisnij klawisz ENTER'); readln; end. 12/1/2011 Język Pascal - Grafika 4 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) 12/1/2011 Język Pascal - Grafika 5 Program TakieCosTam; uses crt; type Tablica=array[1..10] of integer; Procedura procedure nazwa (lista parametrów); var lista zmiennych; begin zestaw instrukcji; procedure WypiszTablice(var t:tablica); var i:integer; begin writeln ('Zawartosc tablicy:'); for i:=1 to 10 do writeln('t[',i:2,']=', t[i]); end; end; var a,b :tablica; i:integer; Zdefiniowaną procedurę wywołujemy w programie podając jej nazwę z listą parametrów 12/1/2011 Begin for i:=1 to 10 do begin a[i]:=i*2; b[i]:= i; end; WypiszTablice(a); WypiszTablice(b); Język Pascal - Grafika end. 6 Program funkcja; uses crt; type Tablica=array[1..10] of integer; Funkcja function nazwa (lista param.):typ ; var lista zmiennych; begin zestaw instrukcji; nazwa := wartość end; function srednia (var t:tablica): real; var i, suma :integer; Begin suma := 0; for i:=1 to 10 do suma := suma + t[i]; srednia := suma/10; end; var a,b :tablica; i:integer; 12/1/2011 Begin for i:=1 to 10 do begin a[i]:=i*2; b[i]:= i; end; writeln('srednia tablicy a =',srednia(a)); writeln('srednia tablicy b = ',srednia(b)); 7 Język Pascal - Grafika end. Zmienne globalne i lokalne 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) 12/1/2011 Język Pascal - Grafika 8 Program zmienne; uses crt; var zmienna_1 : integer; //zmienna globalna procedure pierwsza ( ); var zmienna_2 :integer; //zmienna lokalna w procedurze Zmienne globalne i lokalne begin zmienna_2 :=2; writeln('w procedurze zmienna_1 = ', zmienna_1:2); writeln('w procedurze zmienna_2 = ', zmienna_2:2); writeln('w procedurze zmienna_3 = ', zmienna_3:2); end; var zmienna_3 : integer; ; //zmienna lokalna w procedurze głównej begin zmienna_3:=3; zmienna_1 :=1; writeln('zmienna_1 = ', zmienna_1:2); writeln('zmienna_2 = ', zmienna_2:2); writeln('zmienna_3 = ', zmienna_3:2); pierwsza(); end. 12/1/2011 Język Pascal - Grafika 9 Przekazywanie parametrów procedure p_1(a_1:integer); begin a_1:=21; end; procedure p_2(var a_2:integer); begin a_2:=45; end; var b:integer; Begin b :=10; p_1( b); writeln ('po pocedurze p_1 b = ',b:3); b:=10; p_2( b); writeln ('po pocedurze p_2 b = ',b:3); end. 12/1/2011 Język Pascal - Grafika 10 Moduły Wszystkie polecenia języka Turbo Pascal zostały uporządkowane w postaci grup zwanych modułami (ang. units). Istnieje kilka standardowych modułów, które zostały dołączone do programu Pascal (System, Dos, Crt, Printer, Graph, itp.) Moduł standardowy System jest dostępny automatycznie. Pozostałe wymagają świadomego dołączenia przez programistę. Możliwe jest również tworzenie własnych modułów . 12/1/2011 Język Pascal - Grafika 11 Moduły Wśród modułów standardowych wyróżniamy: System – zawiera procedury standardowe języka; Crt – zawiera procedury obsługi ekranu, klawiatury i sterowania dźwiękami emitowanymi przez głośnik komputera; Dos – zawiera procedury współpracujące z systemem operacyjnym; Graph – zawiera procedury potrzebne do tworzenia grafiki; 12/1/2011 Język Pascal - Grafika 12 Moduły Aby móc korzystać z procedur któregoś z modułów należy zadeklarować jego użycie (nie dotyczy to modułu System, który jest automatycznie deklarowany przez program Pascal). program polekola; uses crt, graph; const pi=3.14; var p,r:real; begin instrukcje end. Moduł deklaruje się poprzez użycie słowa uses, a dalej podje się nazwę modułu lub modułów oddzielając je przecinkami. 12/1/2011 Język Pascal - Grafika 13 Moduł Crt ClrScr - czyści ekran i ustawia kursor w lewym górnym rogu (pozycja 0:0) Delay(MS : word) - zatrzymuje program na określoną ilość milisekund. GotoXY(X, Y : byte) - przesuwa kursor do punktu x:y KeyPressed { : Boolean } - sprawdza aktywność klawiatury ReadKey { : Char } - wczytuje znak z klawiatury TextBackground(color : byte) - zmienia kolor tła TextColor(color : byte) - zmienia kolor tekstu 12/1/2011 Język Pascal - Grafika 14 Moduł Crt program pierwszy; uses crt; //deklaracja użycia modułu Crt begin TextBackground(7); //zmienia kolor tła na szary ClrScr; //czyścimy ekran GotoXY(30,13); //umieszczamy kursor w pozycji 30:13 TextColor(4); //zmieniamy kolor czcionki na czerwony write(‘To jest pierwszy tekst’); //i piszemy end. 12/1/2011 Język Pascal - Grafika 15 Moduł Crt program drugi; uses crt; //deklaracja użycia modułu Crt begin TextBackground(3); //zmienia kolor tła na niebieski ClrScr; //czyścimy ekran GotoXY(0,0); TextColor(4); //umieszczamy kursor w pozycji 0:0 //zmieniamy kolor czcionki na różowy write(‘To jest pierwszy program’); GotoXY(10,10); TextColor(4); //i piszemy //umieszczamy kursor w pozycji 10:10 //zmieniamy kolor czcionki na zielony write(‘To jest pierwszy program’); //i piszemy end. 12/1/2011 Język Pascal - Grafika 16 Moduł Crt program trzeci; uses crt; var i:byte; begin ClrScr; textcolor(1); for i:=0 to 10 do begin textcolor(i); writeln; writeln(' To jest kolor nr - ',i:2); end; readln; end. 12/1/2011 Język Pascal - Grafika 17 Moduł Graph Moduł Graph obsługuje operacje ekranowej grafiki punktowej (pikselowej). Zawiera procedury i funkcje, które umożliwiają rysowanie na ekranie monitora krzywych różnych kształtów i kolorów, wypełnianie obszarów określonym wzorem i kolorem, wykreślanie tekstów o zdefiniowanej przez użytkownika wielkości wybraną czcionką w poziomie lub pionie. Umiejętne wykorzystanie zasobów modułu pozwala również na tworzenie rysunków animowanych 12/1/2011 Język Pascal - Grafika 18 Inicjalizacja trybu graficznego Tryb graficzny jest ściśle związany z kartą graficzną, w jaką jest wyposażony komputer. Podczas inicjowania trybu graficznego należy określić właściwy dla danego sprzętu sterownik i tryb pracy ekranu. Do tego służy procedura DetectGraph. DetectGraph (sterownik, tryb); sterownik – identyfikator karty sterownika graficznego; tryb – tryb graficzny (rozdzielczość, ilość kolorów); 12/1/2011 Język Pascal - Grafika 19 Inicjalizacja trybu graficznego Z przeważającej większości procedur i funkcji modułu graficznego można korzystać dopiero po zainicjowaniu graficznego trybu pracy monitora, czyli wywołaniu procedury InitGraph: InitGraph (sterownik: Integer, tryb: Integer, ścieżka: String); sterownik – identyfikator karty sterownika graficznego; tryb – tryb graficzny (rozdzielczość, ilość kolorów); ścieżka – katalog, w którym znajduje się sterownik *.bgi Przejście do trybu graficznego powoduje przydzielenie części pamięci operacyjnej dla potrzeb realizacji operacji graficznych. Po zakończeniu ich wykonywania należy zwolnić tę część pamięci i przywrócić poprzedni tryb tekstowy za pomocą procedury CloseGraph 12/1/2011 Język Pascal - Grafika 20 Inicjalizacja trybu graficznego Dla prawidłowej pracy monitora w trybie graficznym potrzebne są programy obsługujące zainstalowaną w komputerze kartę graficzną. Programy takie nazwano sterownikami (ang. Drivers). W systemie TurboPascal zdefiniowano sterowniki dla 8 najpopularniejszych kart graficznych komputerów klasy IBM: CGA, MCGA, EGA, VGA, Hercules, ATT400, IBM8514, IBM3270PC. Sterownikom tym nadano rozszerzenie BGI (Borland Graphics Interface) 12/1/2011 Język Pascal - Grafika 21 Okno graficzne Wszystkie operacje graficzne wykonywane są w obrębie okna graficznego. W momencie inicjacji trybu graficznego okno zajmuje cały ekran. Lewy, górny róg ekranu ma współrzędne (0,0) i jest początkiem układu, którego oś pionowa jest skierowana w dół, a oś pozioma - w prawo. Współrzędne prawego dolnego rogu są określone przez funkcje GetMaxX, GetMaxY i zależą od rozdzielczości ekranu i jego trybu pracy. 12/1/2011 Język Pascal - Grafika 22 Prosty program graficzny program linia; uses Graph, Crt; var sterownik, tryb, karta : SmallInt; begin DetectGraph(sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'C:\Program Files\Dev-Pas'); SetColor (4); //ustawiamy kolor Line (30,30,610,450); //rysujemy linie od punktu (30,30) do punktu (610,450) Repeat Until Keypressed; CloseGraph; //zamykanie trybu graficznego repeat until keypressed; end. 12/1/2011 Język Pascal - Grafika 23 Prosty program graficzny program kwadraty; uses Graph, Crt; var sterownik, tryb : SmallInt; begin DetectGraph (sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'C:\Program Files\Dev-Pas'); SetColor ( Green); Rectangle (30,30,120,120); //rysowanie kwadratów Rectangle (10,10,100,100); repeat until keypressed; CloseGraph; //zamykanie trybu graficznego repeat until keypressed; end. 12/1/2011 Język Pascal - Grafika 24 Prosty program graficzny program kwadraty; uses Graph, Crt; var sterownik, tryb : SmallInt; begin DetectGraph (sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'C:\Program Files\Dev-Pas'); SetColor ( Green); Rectangle (30,30,120,120); //rysujemy kwadrat Circle (150, 150, 100); //rysujemy okrąg SetFillStyle(1, red); //ustawianie sposobu wypełniania FloodFill(50, 50, Green); //funkcja wypełniająca repeat until keypressed; CloseGraph; //zamykanie trybu graficznego repeat until keypressed; end. 12/1/2011 Język Pascal - Grafika 25 Funkcja FloodFill Procedura FloodFill FloodFill(X, Y : Integer; kolorgranicy : Word); wypełnia kolorem i wzorem podanym w procedurze SetFillStyle obszar ekranu. Jeżeli przy wypełnianiu napotka linię, wykonaną kolorem „kolorgranicy” przerywa wypełnianie tak jakby to był dla niej mur nie do przejścia Punkt X, Y jest miejscem od którego procedura zaczyna wypełnianie. 12/1/2011 Język Pascal - Grafika 26 Kolejne procedury Bar(X1, Y1, X2, Y2) : rysuje wypełniony prostokąt. X1,Y1 to współrzędne lewego górnego rogu, X2,Y2 to współrzędne prawego dolnego rogu. Kolor ramki jest określany przez procedurę SetColor, a kolor wypełnienia przez procedurę SetFillStyle. Bar3D(X1, Y1, X2, Y2; B; TOP) : rysuje trójwymiarowy prostokąt wypełniony. X1,Y1 to współrzędne lewego górnego rogu przedniej ścianki, X2,Y2 to współrzędne lewego dolnego rogu przedniej ścianki, zmienna B jest to głębokość prostopadłościanu, zmienna TOP określa czy górna powierzchnia jest widoczna czy nie. PutPixel (X, Y; Kolor) : wyświetla jeden punkt o współrzędnych (X, Y) i podanym kolorze. OutTextXY(X, Y, S) : wyświetla na ekranie tekst określony przez zmienną S rozpoczynając od współrzędnych X, Y. Kolor tekstu podawany jest przez procedurę SetColor. ClearDevice : procedura ta czyści ekran graficzny, analogicznie do procedury ClrScr w trybie graficznym 12/1/2011 Język Pascal - Grafika 27 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-12-01 Programowanie w języku Pascal 28 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-12-01 Programowanie w języku Pascal 29 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-12-01 Read(zm_plik,lista zmiennych); Write(zm_plik,lista zmiennych); Close(zm_plik); Programowanie w języku Pascal plik otwarty musi zostać zamknięty 30 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-12-01 Programowanie w języku Pascal 31