PASCAL s Język programowania wysokiego poziomu

Transkrypt

PASCAL s Język programowania wysokiego poziomu
PASCAL
Język programowania wysokiego poziomu
■ Opracowany przez Mikołaja Wirtha na
początku lat 70 XX wieku
■ Prosty, z silną kontrolą poprawności
■ Stosowany prawie wyłącznie na uczelniach
do nauki programowania
■
Etapy pisania programu
Analiza potrzeb i wymagań (treści zadania)
■ Opracowanie algorytmu
■ Kodowanie
■ Kompilacja
■ Testowanie
■ Stosowanie
■
Analiza potrzeb i wymagań
Co należy obliczyć (dane wyjściowe)
■ Jakie mamy dane (dane wejściowe)
■ Według jakiego wzoru dane wyjściowe
obliczamy z danych wejściowych
■ Przygotowanie danych testowych (tzn. dla
jakich przykładowych danych wejściowych
jakie powinny wyjść wyniki)
■
Opracowanie algorytmu
■
Konstrukcja algorytmu w pewnym formalizmie:
– Ustalenie listy zmiennych odpowiadających danym
wejściowym, danym wyjściowym, zmiennych
pomocniczych i ich typów
– Ustalenie kolejnych kroków obliczania wyników
■
Ustalenie warunków, w jakich program działa
poprawnie (do jakich zakresów mogą należeć dane
wejściowe)
Kodowanie
■
Zapisanie algorytmu w konkretnym języku
programowania (np. w PASCALu) na
nośniku elektronicznym w pliku o
właściwym rozszerzeniu (np. .pas)
Kompilacja
Uruchomienie kompilatora języka
programowania dla naszego konkretnego
pliku.
■ Poprawianie błędów, jakie wskazuje
kompilator
■
Testowanie
■
■
■
■
Testy poprawności działania w zwykłych
przypadkach zastosowań
Testy działania w warunkach ekstremalnych
zastosowań
Analiza skutków ubocznych
Analiza katastrof
– Krótko- i długotrwałe efekty skutków ubocznych
– Analiza zachowania w wypadku korzystania w sposób
niedopuszczalny
– Analiza i usuwanie przyczyn niepoprawnego działania
w warunkach zwykłych i ekstremalnych
Stosowanie
■
■
■
Praktyczne wykorzystywanie programu
Dla celów dokumentacyjnych należy treść
zadania, przykłady testowe, program źródłowy
oraz program wykonawczy przechowywać w
archiwum na dyskietce.
Dobrze jest także posiadać wydruk na papierze:
treści zadania, przykładów testowych, programu
źródłowego, a także odręczne notaki opisujące
algorytm
Algorytm powitania
START
Wypisz(‘Dzień
dobry’)
STOP
Program w języku Pascal Cześć
program dzdobry; {nazwa programu}
uses Crt;
{uz|yte biblioteki}
{ Wlasciwy program}
begin
Write('Dzien` dobry') {Wypisanie na ekran}
end.
{ w tych klamrach piszemy komentarz }
Mały słownik angielsko-polski
■
■
■
■
■
■
■
■
■
Program [progrem]
Uses [juzyz]
Begin [bygin]
End {end]
Write [łrajt]
Read [rid]
Variable [warjabl]
Real [ril]
Integer [intidżer]
■
■
■
■
■
■
■
■
■
Program
Używa
Zaczynaj
Kończ
Pisz
Czytaj
Zmienna
Liczba rzeczywista
Liczba całkowita
Omówienie
■
■
■
■
■
■
■
Program zaczyna każdy program, a kropka (.) go
kończy
Begin i end to rama, wewnątrz której kodujemy
algorytm
W klamry { } zamykamy komentarze – dopiski i
adnotacje nie będące treścią programu.
‘ ‘ obramowują napisy, które chcemy wypisać na
ekranie
Dla Pascala duże i małe litery znaczą to samo.
W tekście programu używamy tylko liter
łacińskich
Ważnym znakiem w programie jest średnik (;) –
oddziela on od siebie kolejne instrukcje
Jak tekst programu staje się programem dla
maszyny
Tekst źródłowy - kompilator - plik obiektowy - linker program
Kompilator = translator języka wysokiego poziomu, którego
programy wynikowe mogą być wprowadzone do pamięci i
wykonane dopiero po zakończeniu tłumaczenia (w odróżnieniu
od interpretatora).
Programy wynikowe kompilatora mogą być przechowywane,
łączone z innymi programami i wielokrotnie wykonywane
znacznie szybciej niż programy interpretowane.
Linker - konsoliduje pliki wynikowe kompilatora z bibliotekami
systemowymi I użytkownika, by dać w wyniku program
wykonawczy
Jak tekst programu staje się programem dla
maszyny
• C - code
• h - library header
• EDYTOR
.obj
• KOMPILATOR
.exe
• BIBLIOTEKARZ
.lib
• LINKER
Równanie AX+B=0
program rownanie;
uses Crt;
START
var A,B,X : real;
-Wczytaj(A) begin
-Wczytaj(B)
-X :=-B/A
-Wypisz(X)
read(A);
read(B);
X :=-B/A;
write(X)
end.
STOP
Omówienie
var A,B,X : real; ta instrukcja informuje o tym,
jakie zmienne wystąpią w programie (A,B,X) oraz
co mogą przechowywać (liczby rzeczywiste)
■ := to znak przypisania, tzn. zmiany zawartości
zmiennej po lewej stronie wynikiem operacji po
prawej stronie :=
■ UWAGA: Możemy typ każdej zmiennej podać
oddzielnie:
var A: real; B : real; X : real;
■
Styl pisania programów
program rownanie; uses Crt; var A,B,X : real; begin
read(A); read(B); X :=-B/A; write(X) end.
Program można
pisać tak lub tak
program rownanie;
uses Crt;
var A,B,X : real;
begin
read(A);
read(B);
X :=-B/A;
write(X)
end.
Styl pisania programów
Dobrze jest informować
użytkownika, co od niego chcemy i
co oznacza pokazywany wynik
program rownanie;
uses Crt;
var A,B,X : real;
begin
write(‘Proszę podać parametr A:’); read(A);
write(‘Proszę podać parametr B:’); read(B);
X :=-B/A;
write(‘Rozwiązanie wynosi:’); write(X)
end.
Styl pisania programów
Dobrze jest informować
użytkownika, co program robi
program rownanie;
uses Crt;
var A,B,X : real;
Begin
writeln(‘Rozwiązywanie równania A*X+B=0’);
write(‘Proszę podać parametr A:’); read(A);
write(‘Proszę podać parametr B:’); read(B);
X :=-B/A;
write(‘Rozwiązanie wynosi:’); write(X)
end.
Kalkulator na dodawanie liczb rzeczywistych
START
-Wczytaj(X)
-Wczytaj(Y)
-WYN :=X+Y
-Wypisz(WYN)
STOP
program dodawanie;
uses Crt;
var X,Y,WYN : real;
begin
read(X);
read(Y);
WYN :=X+Y;
write(WYN)
end.
Zadanie
■
Opracować kalkulator dzielenia liczb całkowitych
ANALIZA
■
■
■
Liczby całkowite dzieli się z resztą, np.. 45:7=6
reszty 3, 42:7=6 reszty 0, itd..
W PASCALu jest specjalny operator do dzielenia
liczb całkowitych: div oraz do obliczania reszty z
dzielenia mod.
Zmienne zawierające liczby całkowite muszą mieć
typ integer.
Kalkulator na dodawanie liczb rzeczywistych
START
-Wczytaj(X)
-Wczytaj(Y)
program dziel_z_reszta;
uses Crt;
var X,Y: integer;
RESZTA,WYN : integer;
begin
read(X);
read(Y);
-RESZTA:=X mod Y WYN :=X div Y;
RESZTA:=X mod Y;
-Wypisz(WYN)
writeln(WYN);
-Wypisz(RESZTA) writeln(RESZTA)
end.
STOP
-WYN :=X div Y
Sekwencyjność
Algorytm (program) jest sekwencyjny,
jeżeli instrukcje są wykonywane kolejno po
sobie bez przeskoków i bez nawrotów
sterowania
■ W języku PASCAL kolejno po sobie
następujące instrukcje oddzielamy od siebie
średnikami (;)
■
Krok algorytmu sekwencyjnego
Krok algorytmu sekwencyjnego jest
■ Albo operacją przypisania (x:=7+y)
■ Albo wywołaniem procedury (read(x))
Operacja przypisania ma postać
<zmienna> := <wyrażenie>
powoduje zmianę zawartości <zmiennej> na
wartość <wyrażenia>
:= nazywamy operatorem przypisania
Wyrażenie
Wyrażeniem jest:
■ Stała np.. 7
■ Zmienna np.. X
■ Wyrażenie poprzedzone operatorem
jednoargumentowym, np.. –7, -x
■ Dwa wyrażenia połączone operatorem, np.. 7+x,
y-z, x*2, 8/z, z div 5, z mod 4
■ Wyrażenie ujęte w nawiasy okrągłe, np.. (x+8)
■ Wywołanie funkcji, np.. sin(x), cos(y), sqrt(x)
Bardziej złożony przykład wyrażenia
■ ((x+2)*(x-7)+y)+sin(x+(-y+z)/((a+4)*(a-4)))
Procedura
Procedura to gotowy kawałek programu,
zwykle przygotowany przez kogoś innego,
spełniający określone zadanie.
■ Znamy procedury:
■
– Read – do czytania z klawiatury
– Write – do pisania na ekran
■
Poznamy wiele innych
Zadanie
■
Napisać program szukający rozwiązania układu
dwóch równań liniowych.
Analiza
■
■
■
■
■
■
■
■
■
Układ równań liniowych ma postać
a1 x + b1 y = c1
a2 x + b2 y = c2
Rozwiązanie jest następujące:
Obliczamy wyznacznik główny
Obliczamy wyznacznik x
Obliczamy wyznacznik y
x =wyznacznik x / wyznacznik główny
y =wyznacznik y / wyznacznik główny
Analiza c.d.
■
■
■
■
wyznacznik główny (WYZG)
a1 b1
a2 b2
wyznacznik x (WYZX)
c1 b1
c2 b2
wyznacznik y (WYZY)
a1 c1
a2 c2
Wyznacznik liczy się wg wzoru:
a1 b1
a2 b2 = a1*b2 – a2*b1
Układ równań liniowych
program uklad_rownan
uses Crt;
var X,Y: real;
START
a1,b1,c1, a2,b2,c2:real;
-Wczytaj(a1,b1,c1)
WYZG,WYZX,WYZY:real;
-Wczytaj(a2,b2,c2)
begin
-WYZG:=a1*b2-a2*b1 read(a1,b1,c1);
-WYZX:=c1*b2-c2*b1 read(a2,b2,c2);
WYZG:=a1*b2-a2*b1;
-WYZY:=a1*c2-a2*c1 WYZX:=c1*b2-c2*b1;
-X=WYZX/WYZG
WYZY:=a1*c2-a2*c1;
-Y=WYZY/WYZG
X=WYZX/WYZG;
Y=WYZY/WYZG;
-Wypisz(X,Y)
writeln(X,Y)
STOP
end.
Zadanie
■
Napisać program szukający pierwiastków
równania kwadratowego
ANALIZA (sqrt - pierwiastek)
■
Równanie kwadratowe ma postać:
a x2 + b x + c = 0
Rozwiązuje się je następująco:
Delta = b2 – 4 a c
■
X1 = (-b – √
■
■
■
(Delta)) /(2a)
 (Delta) )/(2a)
X2 = (-b + √
Równanie kwadratowe
START
-Wczytaj(a,b,c)
-Delta = b * b – 4* a* c
-X1:= (-b–sqrt(Delta))/(2*a)
-X2:= (-b+sqrt(Delta))/(2*a)
-Wypisz(X1)
-Wypisz(X2)
STOP
program rownanie_kw;
uses Crt;
var X1,Y2: real;
a,b,c,delta:real;
begin
read(a,b,c);
Delta = b * b – 4*a*c;
X1:= (-b – sqrt(Delta))/(2*a);
X2:= (-b + sqrt(Delta))/(2*a);
writeln(X1);
writeln(X2)
end.
Zadanie
■
Zamień odległość w metrach na odległość w mm,
cm, dm, i km
ANALIZA
■
■
■
■
1 m = 1000 mm
1 m = 100 cm
1 m = 10 dm
1 m = 0.001 km
Jednostki
START
-Wczytaj(odl)
-Wypisz(odl*1000,’mm’)
-Wypisz(odl*100,’cm’)
-Wypisz(odl*10,’dm’)
-Wypisz(odl*0.001,’km’)
STOP
program uklad_rownan
uses Crt;
var odl: real;
begin
write(‘Podaj odległość w metrach:’);
read(odl);
writeln (odl*1000,’mm’)
writeln(odl*100,’cm’)
writeln(odl*10,’dm’)
writeln(odl*0.001,’km’)
end.

Podobne dokumenty