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} {uz yte biblioteki} { Wlasciwy program} Write('Dzien` dobry') {Wypisanie na ekran} { 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 START -Wczytaj(A) -Wczytaj(B) -X :=-B/A -Wypisz(X) STOP program rownanie; var A,B,X : real; read(a); read(b); X :=-B/A; write(x) 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; var A,B,X : real; read(a); read(b); X :=-B/A; write(x) Program można pisać tak lub tak program rownanie; var A,B,X : real; read(a); read(b); X :=-B/A; write(x) Styl pisania programów Dobrze jest informować użytkownika, co od niego chcemy i co oznacza pokazywany wynik program rownanie; var A,B,X : real; write( Proszę podać parametr A: ); read(a); write( Proszę podać parametr B: ); read(b); X :=-B/A; write( Rozwiązanie wynosi: ); write(x)
Styl pisania programów Dobrze jest informować użytkownika, co program robi program rownanie; 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) Kalkulator na dodawanie liczb rzeczywistych START -Wczytaj(X) -Wczytaj(Y) -WYN :=X+Y -Wypisz(WYN) STOP program dodawanie; var X,Y,WYN : real; read(x); read(y); WYN :=X+Y; write(wyn)
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) -WYN :=X div Y -RESZTA:=X mod Y -Wypisz(WYN) -Wypisz(RESZTA) STOP program dziel_z_reszta; var X,Y: integer; RESZTA,WYN : integer; read(x); read(y); WYN :=X div Y; RESZTA:=X mod Y; writeln(wyn); writeln(reszta)
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żeniem jest: Stała np.. 7 Zmienna np.. X Wyrażenie 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 START -Wczytaj(a1,b1,c1) -Wczytaj(a2,b2,c2) -WYZG:=a1*b2-a2*b1 -WYZX:=c1*b2-c2*b1 -WYZY:=a1*c2-a2*c1 -X=WYZX/WYZG -Y=WYZY/WYZG -Wypisz(X,Y) STOP program uklad_rownan var X,Y: real; a1,b1,c1, a2,b2,c2:real; WYZG,WYZX,WYZY:real; read(a1,b1,c1); read(a2,b2,c2); WYZG:=a1*b2-a2*b1; WYZX:=c1*b2-c2*b1; WYZY:=a1*c2-a2*c1; X=WYZX/WYZG; Y=WYZY/WYZG; writeln(x,y) Zadanie Napisać program szukający pierwiastków równania kwadratowego ANALIZA (sqrt - pierwiastek) Równanie kwadratowe ma postać: a x 2 + b x + c = 0 Rozwiązuje się je następująco: Delta = b 2 4 a c X1 = (-b (Delta)) /(2a) X2 = (-b + (Delta) )/(2a)
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; var X1,Y2: real; a,b,c,delta:real; 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) 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 ) program uklad_rownan var odl: real; 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 ) STOP