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.