Programowanie w języku Pascal · 2011. 12. 1. · Wszystkie polecenia języka Turbo Pascal...
Transcript of Programowanie w języku Pascal · 2011. 12. 1. · Wszystkie polecenia języka Turbo Pascal...
Od algorytmu do programu wykonywalnego
12/1/2011 Język Pascal - Grafika 2
PROBLEM
ALGORYTM
PROGRAM ŹRÓDŁOWY
KOMPUTER
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
4. TESTOWANIE programu
ETAPY PROGRAMOWANIA
0. WYBÓR-ZNALEZIENIE-OPRACOWANIE ALGORYTMU
Struktura programu w Pascalu
2011-12-01 Programowanie w języku Pascal 3
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*;
writeln (pole koła wynosi ‘,p:4:2)
end.
program nazwa;
nazwa jest jednym wyrazem (bez spacji)
nazwa nie zawiera polskich liter
uses lista modułów;
deklaracje modułów
moduły to zbiory funkcji i procedur, które
możemy wykorzystywać w naszych
programach
definicje stałych
deklaracje zmiennych
wszystkie zmienne występujące w
programie muszą być wcześniej
zadeklarowane
część wykonawcza
nagłówek programu
const
nazwa=wartość;
varlista zmiennych:typ;
begin
instrukcje
programu
end.Kolejność zapisywania instrukcji
odpowiada kolejności wykonywania
Instrukcje oddzielamy średnikiem
część
deklaracyjna
Dokładność obliczeniowa
12/1/2011 Język Pascal - Grafika 4
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.
Podprogramy
12/1/2011 Język Pascal - Grafika 5
� 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)
Procedura
12/1/2011 Język Pascal - Grafika 6
procedure nazwa (lista parametrów);
var
lista zmiennych;
begin
zestaw instrukcji;
end;
Program TakieCosTam;uses crt;type
Tablica=array[1..10] of integer;
procedure WypiszTablice(var t:tablica);var
i:integer;beginwriteln ('Zawartosc tablicy:');for i:=1 to 10 do
writeln('t[',i:2,']=', t[i]);end;
vara,b :tablica;i:integer;
Begin for i:=1 to 10 do
begina[i]:=i*2;b[i]:= i;
end;WypiszTablice(a);WypiszTablice(b);
end.
Zdefiniowaną procedurę wywołujemy w programie podając jej nazwę z listą parametrów
Funkcja
12/1/2011 Język Pascal - Grafika 7
function nazwa (lista param.):typ ;var
lista zmiennych;begin
zestaw instrukcji;nazwa := wartość
end;
Program funkcja;uses crt;type
Tablica=array[1..10] of integer;
function srednia (var t:tablica): real;var
i, suma :integer;Beginsuma := 0;for i:=1 to 10 do
suma := suma + t[i];srednia := suma/10;end;
vara,b :tablica;i:integer;
Begin for i:=1 to 10 do
begina[i]:=i*2;b[i]:= i;
end;writeln('srednia tablicy a =',srednia(a));writeln('srednia tablicy b = ',srednia(b));
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
Zmienne globalne i lokalne
12/1/2011 Język Pascal - Grafika 9
Program zmienne;uses crt;var
zmienna_1 : integer; //zmienna globalna
procedure pierwsza ( );var
zmienna_2 :integer; //zmienna lokalna w procedurze
beginzmienna_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;
varzmienna_3 : integer; ; //zmienna lokalna w procedurze głównej
beginzmienna_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.
Przekazywanie parametrów
12/1/2011 Język Pascal - Grafika 10
procedure p_1(a_1:integer);begina_1:=21;
end;
procedure p_2(var a_2:integer);begin
a_2:=45;end;
varb: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.
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).
�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
program polekola;uses crt, graph;const
pi=3.14;var
p,r:real;begininstrukcjeend.
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
12/1/2011 Język Pascal - Grafika 15
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.
Moduł Crt
12/1/2011 Język Pascal - Grafika 16
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); //umieszczamy kursor w pozycji 0:0
TextColor(4); //zmieniamy kolor czcionki na różowy
write(‘To jest pierwszy program’); //i piszemy
GotoXY(10,10); //umieszczamy kursor w pozycji 10:10
TextColor(4); //zmieniamy kolor czcionki na zielony
write(‘To jest pierwszy program’); //i piszemy
end.
Moduł Crt
12/1/2011 Język Pascal - Grafika 17
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.
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.
� sterownik – identyfikator karty sterownika graficznego;
� tryb – tryb graficzny (rozdzielczość, ilość kolorów);
12/1/2011 Język Pascal - Grafika 19
DetectGraph (sterownik, tryb);
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:
� 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
InitGraph (sterownik: Integer, tryb: Integer, ścieżka: String);
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
12/1/2011 Język Pascal - Grafika 23
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.
Prosty program graficzny
12/1/2011 Język Pascal - Grafika 24
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.
Prosty program graficzny
12/1/2011 Język Pascal - Grafika 25
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.
Funkcja FloodFill
�Procedura FloodFill
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
FloodFill(X, Y : Integer; kolorgranicy : Word);
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 graficznym12/1/2011 Język Pascal - Grafika 27
Pliki
2011-12-01 Programowanie w języku Pascal 28
� Pliki zawierają dane przechowywane w pamięci dyskowej – są zachowywane po zakończeniu pracy z programem
� Podczas pracy programu dane z pliku są sprowadzane do pamięci operacyjnej – tam są przetwarzane
� 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ę]
� Po przetworzeniu dane mogą być zapisane do tego samego lub innego pliku
� 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)
Pliki - rodzaje
2011-12-01 Programowanie w języku Pascal 29
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”
Pliki - przetwarzanie
2011-12-01 Programowanie w języku Pascal 30
Deklaracja zmiennej plikowej
Skojarzenie zmiennej z plikiem fizycznym
Otwarcie pliku
Wykonanie operacji na pliku
Zamknięcie pliku
zm_plik:rodzaj pliku;
Assign(zm_plik,nazwa pliku);
ReWrite(zm_plik);
Reset(zm_plik);
Append(zm_plik);
Read(zm_plik,lista zmiennych);
Write(zm_plik,lista zmiennych);
Close(zm_plik);
text – plik tekstowyfile of element - plik elementówFile – plik niezdefiniowany
nowy pliku do zapisu danych
plik do odczytu danych
plik tekstowy do dopisania danych na końcu
plik otwarty musi zostać zamknięty
nazwa pliku ze ścieżką dostępu
Pliki - przydatne funkcje
2011-12-01 Programowanie w języku Pascal 31
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