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

Podobne dokumenty