Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałAron Młodzik Został zmieniony 11 lat temu
1
Język PASCAL – podstawy Turbo Pascal: procedury, funkcje
Język PASCAL – podstawy Turbo Pascal: procedury, funkcje. Przykłady programów geodezyjnych Cele nauczania: Podstawowe zasady programowania. Zastosowanie procedur i funkcji. Oprogramowanie prostych zadań z geodezji Osiągnięcia: Praktyczna znajomość elementów programowania w języku Pascal
2
Procedury i funkcje Wiele problemów algorytmicznych (programistycznych) łatwiej się rozwiązuje po podzieleniu ich na podproblemy (podprogramy). Takimi podprogramami w języku Pascal są procedury i funkcje. Dzięki procedurom i funkcjom program staje się czytelniejszy i krótszy - często występujące czynności są opatrzone nazwą i wywoływane w zależności od potrzeb. Języki programowania umożliwiające tworzenie programów z podprogramów, noszą nazwę języków strukturalnych.
3
Procedury Składnia definicji procedury: procedure nazwa (parametry); deklaracje; begin {treść procedury} end; Procedurę wywołujemy podając jej nazwę i ewentualnie parametry wywołania (w przypadku procedur z parametrami).
4
Przykłady – program bez procedury i z procedurą
program procedury1; uses crt; var x,y,z : integer; {Procedura – bez parametrów} procedure podaj_dane; {Nagłówek procedury} begin writeln ('Podaj trzy liczby'); read (x); {treść procedury} read (y); read (z) end; {end ze średnikiem!!!} {Program główny} Begin clrscr; podaj_dane; {Procedura bez parametrów} writeln ('x=',x,' y=',y, ' z=',z); writeln ('Suma liczb ',x+y+z); podaj_dane; writeln ('Roznica liczb z-y-x=: ', z-y-x); readln; End. program bezprocedury; var x,y,z : integer; Begin writeln ('Podaj trzy liczby całkowite'); read (x); read (y); read (z); writeln ('Suma liczb: ',x+y+z); writeln ('Podaj trzy liczby'); writeln ('Roznica liczb: ', z-y-x); End. Powtarzanie tego samego schematu nie jest właściwym wyborem. Można temu zaradzić pisząc własną procedurę, która nie tylko ułatwi nam pracę, ale też skróci cały zapis. Procedurę umieszczamy ją przed programem głównym (przed Begin).
5
Przykład. Program z procedurą
program Szlaczki; var i : integer; { licznik wierszy } procedure Szlaczek(Znak : char; Ile : integer); begin for i := 1 to Ile do { wypisz szlaczek } write(Znak); { złożony z iluś znaków } writeln end; for i := 1 to 20 do { wypisz 20 szlaczków } Szlaczek('*', i); end.
6
Begin {Wlasciwy program} start('Pierwiastki rownania kwadratowego');
program Rownkwadratowe; {program rozwiazuje rownanie kwadratowe} uses Crt; var a,b,c: real; procedure start(tytul:string); begin ClrScr; Writeln('Autor: Jan Anonim'); Writeln(tytul); Writeln end; procedure liczPierwiastki(a,b,c: real); var delta: real; Write('Rownanie '); delta:=b*b-4*a*c; if delta<0 then Writeln('nie ma pierwiastkow.') else if delta=0 then Writeln('ma jeden pierwiastek x1=',-b/(2*a):8:2) else {if delta >0} Writeln('ma dwa pierwiastki:'); Writeln('x1=',(-b-Sqrt(delta))/(2*a):8:2); Writeln('x2=',(-b+Sqrt(delta))/(2*a):8:2) end {delta>0} procedure czytajDane(var a,b,c: real); Write('Podaj wspolczynnik a: '); Readln(a); Write('Podaj wspolczynnik b: '); Readln(b); Write('Podaj wspolczynnik c: '); Readln(c) procedure czekaj; Writeln; Write('Nacisnij klawisz Enter.'); Readln procedure blad(komunikat: string); Writeln; Write(komunikat); czekaj; Halt Begin {Wlasciwy program} start('Pierwiastki rownania kwadratowego'); czytajDane(a,b,c); if a=0 then blad('Zle dane.'); liczPierwiastki(a,b,c); czekaj End.
7
Korzystanie z procedur
Przy dużych programach korzystanie z procedur jest nieuniknione. Procedura, wygląda bardzo podobnie do programu. Procedura rozpoczyna się słowem procedure i kończy słowem end; (ze średnikiem). End. (z kropką) występuje tylko raz - na samym końcu programu głównego.
8
Funkcja Funkcja to procedura, która może zwracać jakąś wartość. Przy wywołaniu funkcji należy użyć specjalnej instrukcji przypisania: Zmienna:=nazwa_funkcji(parametry_aktualne); np. zmienna:=Moja_funkcja; lub np. wypisać na ekranie wartość jaką zwraca funkcja (czyli jaką oblicza): write (Moja_funkcja);
9
Ogólna postać funkcji w jezyku Pascal, wywołanie funkcji
function nazwa (lista parametrów formalnych): typ_wyniku; {deklaracje-i-definicje-obiektów lokalnych: stałych, zmiennych i typów} begin {instrukcje-realizujące-treść funkcji} nazwa:=wynik end; Wywołanie funkcji: zmienna:=nazwa(lista parametrów aktualnych);
10
Przykład programu z funkcją – Wartosc_bezwzgl
program Wartosc_Bezwzgl; var x: real; function bezw(a: real): real; begin if a>=0 then bezw:=a else bezw:=-a end; Begin write('Podaj liczbe: '); readln(x); writeln('Wartosc bezwgledna liczby ', x:0:2, ' wynosi: ', bezw(x):0:2); readln End.
11
program Bisekcja; { Program rozwiązuje równania nieliniowe metodą bisekcji } var a, b, c : real; { granice przedziału i punkt podziału eps : real; { dokładność } function f(x:real):real; { badana funkcja } begin f := 1 - exp(sin(x)*cos(x)); { treść funkcji } end; Begin writeln('Program znajduje miejsce zerowe funkcji'); writeln('w przedziale [a; b]'); write('Podaj wartosc a: '); { wprowadź granice przedzialu } readln(a); write('Podaj wartosc b: '); readln(b); write('Podaj dokladnosc: '); readln(eps); repeat c := (a + b)/2; { podziel przedział na pół } if (f(a)*f(c)) < 0 then b := c { funkcja ma przeciwne znaki w a i c } else a := c; { funkcja ma przeciwne znaki w b i c } writeln(c); until abs(f(c)) < eps; { badamy wartość bezwzględną! } writeln('Miejsce zerowe: c = ',c:12:8); readln; End.
12
PROCEDURE obliczenia; var r3: real;
PROGRAM KULA0; { naglowek programu} { poczatek BLOKU DEKLARACJI} uses crt; VAR r : real; {promien - typu rzeczywistego} v : real; {objetosc - typu rzeczywistego} i: integer; {pomocnicza zmienna typu calkowitego} Procedure wstep; begin clrscr; writeln('Program Kula0.pas'); writeln('Program oblicza pole kuli o podanym promieniu r'); writeln('Wzor: V=4/3*Pi*r^3'); writeln('Nacisnij Enter'); readln; end; PROCEDURE dane; write('Promien kuli='); readln(r); end; {dane} PROCEDURE obliczenia; var r3: real; Begin {pocz bloku operacji procedury obliczenia} r3:=r*r*r; v:=4.0/3.0*pi*r3; End; PROCEDURE wyniki; Begin writeln; writeln('OBJETOSC KULI o promieniu ',r:7:3,' wynosi ',v:10:3); writeln('...Nacisnij ENTER...'); readln; End; {wyniki} { Koniec bloku deklaracji} { Blok operacji - zacznie sie} BEGIN { Kula - program glowny} wstep; dane; obliczenia; wyniki; END. { Kula} {Koniec bloku operacji}
13
BEGIN { Kula} wstep; dane; obliczenia; wyniki; zapiswyn; END. { Kula}
PROGRAM KulaPlik; {zapis wynikow do pliku} uses crt; const wydruk='Wynik1.txt'; {plik wyników} VAR r : real; {promien} v : real; {objetosc} i: integer; {pomocnicza zmienna typu calkowitego} f: text; Procedure wstep; begin clrscr; writeln('Program Kula0.pas'); writeln('Program oblicza pole kuli o podanym promieniu r'); writeln('Wzor: V=4/3*Pi*r^3'); writeln('Program zapisuje wyniki do pliku: Wynik1.txt'); writeln('Nacisnij Enter'); readln; end; PROCEDURE dane; Begin clrscr; write('Promien kuli='); readln(r); end; {dane} PROCEDURE obliczenia; var r3: real; Begin {pocz bloku operacji procedury obliczenia} r3:=r*r*r; v:=4.0/3.0*pi*r3; End; PROCEDURE wyniki; writeln; writeln('OBJETOSC KULI o promieniu ',r:7:3,' wynosi ',v:10:3); writeln('...Nacisnij ENTER...'); readln; End; {wyniki} Procedure zapiswyn; begin assign(f,wydruk); rewrite(f); writeln(f,' Obliczenie objetosci kuli: V=4/3*Pi*r^3'); writeln(f,'Pi=',Pi:3:10, ' r=',r:5:3); writeln(f,'Objetosc kuli o prmieniu ', r:6:3,' = ',v:10:3); close(f); end; BEGIN { Kula} wstep; dane; obliczenia; wyniki; zapiswyn; END. { Kula}
14
PROCEDURE wyniki(promien,objetosc: real); Begin writeln;
PROGRAM KULA; { naglowek programu} CONST PI= ; { gdyby Pi nie było w programie} VAR r : real; {promien - typu rzeczywistego} v : real; {objetosc - typu rzeczywistego} i: integer; PROCEDURE dane (VAR x: real); begin write('Promien='); readln(x); end; {dane} PROCEDURE obliczenia ( x: real; VAR y: real); { x,y - zmienne lokalne x-promien - przekazywany przea wartosc z programu glownego y-objetosc - przekazywany przez zmienna- na zewnatrz procedury do programu glown } var x3: real; { r*r*r - promien do potegi 3 - zmienna lokalna} Begin {pocz bloku operacji procedury obliczenia} x3:=x*x*x; y:=4.0/3.0*pi*x3; End; PROCEDURE wyniki(promien,objetosc: real); Begin writeln; writeln('OBJETOSC KULI o promieniu ',promien:7:3,' wynosi ',objetosc:10:3); writeln('...Nacisnij ENTER...'); readln; End; {wyniki} { Koniec bloku deklaracji} { Blok operacji - zacznie sie} BEGIN { Kula – program główny} dane(r); obliczenia(r,v); { r wchodzi do procedury, a wychodzi z niej v} wyniki(r,v); END. { Kula}
15
OBLICZENIA POLA PROSTYCH FIGUR GEOMETRYCZNYCH: TRÓJKĄTA, PROSTOKATA, TRAPEZU
procedure ptrapezu; {Pole trapezu} var a, b,h, P: real; begin clrscr; writeln('Obliczenie pola prostokąta o bokach a i b i wysokosci h'); write('Podaj a, b, h (oddzielone spacja): '); readln(a, b, h); P:=0.5*a*b*h; writeln('Pole trapezu o bokach a = ', a:5:2, ' i b = ', b:5:3); writeln(' i wysokosci h = ', h:5:3, ' wynosi: ') ; writeln(' P = ', P:10:2); writeln; writeln('Nacisnij Enter'); readln; end; {Program glowny} Begin {Poczatek programu głównego} w:=0; koniec:=0; repeat clrscr; {poczatek repeat} writeln('Program Pola1.pas'); writeln(' '); writeln('Obliczenie pol trójkąta, prostokąta, trapezu '); writeln; writeln('Opcje: '); writeln(' 1 - pole trójkąta na podstawie a i h'); writeln(' 2 - pole prostokąta na podstawie a i b'); writeln(' 3 - pole trapezu na podstawie a, b i h'); writeln(' 0 - koniec programu'); writeln; write('Wybierz opcje: lub 0 - wyjscie z programu: '); readln(w); case w of 0: koniec:=1; 1: ptrojkata; 2: pprostokata; 3: ptrapezu; end; {end case} until koniec=1; {koniec repeat} End. {Koniec programu głównego} Program pola1; {Naglowek Program i nazwa programu} uses crt; {deklaracja biblioteki - m.in. do uruchomienia clrscr} {Zmienne} var w, koniec: integer; {zmienne calkowite} {Procedury} Procedure ptrojkata; {Pole trójkąta} var a, h, P: real; {zmienne} begin {poczatek procedury} clrscr; writeln('Obliczenie pola trojkata o podstawie a, wysokosci h'); write('a = '); readln(a); write('h = '); readln(h); P:=a*h/2; writeln('Pole trojkata o podstawie a = ', a:5:2, ' i wysokości h = ', h:5:3, ' = ', P:10:2); writeln; writeln('Nacisnij Enter'); readln; {czeka na naciśniecie Enter} end; {Koniec procedury} Procedure pprostokata; {Pole prostokąta} var a, b, P: real; begin writeln('Obliczenie pola prostokąta o bokach a i b'); write('Podaj boki: a i b (oddzielone spacja): '); readln(a, b); P:=a*b; writeln('Pole prostokąta o bokach a = ', a:5:2, ' i b = ', b:5:3, readln; end;
16
OBLICZENIE AZYMUTU I DŁUGOŚCI ZE WSPÓŁRZĘDNYCH
Program azdlug; {Obliczenie azymutu i dlugosci ze wspolrzednych} uses CRT, dos; {deklaracja modułu CRT i DOS przy pomocy USES} var {deklaracja zmiennych} koniec, iw: integer; {zmienne typu integer - calkowite} rok,mc,dz,dzt: word; {rok,m_c,dzien,dzien_tyg} { Procedury i funkcje } procedure czekaj; {Czeka na nacisniecie Enter i czysci ekran} var i: integer; {Deklaracja zmiennej i typu integer} begin {Poczatek procedury} writeln; write('Nacisnij <Enter> '); {Pisze na ekranie } readln; {Czeka na nacisniecie klawisza} clrscr; {Czysci ekran} end; {Koniec procedury} {Funkcja } FUNCTION dlug (dx: real; dy:real): real; {Funkcja o 2 parametrach: dx, dy typu real i zwraca wynik real} var d: real; {Zmienna dodatkowa w funkcji typu real} Begin d := dx * dx + dy * dy; {Kwadrat dlugosci} d := SQRT(d) {Pierwiastek z kwadratu dlugosci czyli dlugosc} dlug := d; { W funkcji musi byc podstawienie pod nazwe funkcji} end; Procedure DlFun; {Dlugosc z funkcji} var x1,y1, x2, y2, dx, dy, d1: real; Begin clrscr; writeln; writeln( 'Obliczenie dlugosci ze wspolrzednych (z funkcji)'); write('x1 = '); readln(x1); {Czytanie wspolrzednej x1 punktu pierwszego} write('y1 = '); {Czytanie wspolrzednej y1 punktu pierwszego} readln(y1); write('x2 = '); {Czytanie wspolrzednej x2 punktu drugiego} readln(x2); write('y2 = '); {Czytanie wspolrzednej y2 punktu drugiego} readln(y2); dx := x2 - x1; {Obliczenie dx} dy := y2 - y1; {Obliczenie dy} writeln('dx = ',dx:10:3,' dy = ',dy:10:3); d1 := dlug(dx, dy); {Dlugosc z funkcji dlug(dx,dy)} writeln('D = ', d1:10:3); {Wydruk dlug z dokl 10 przed kropka (ew spacje z przodu) i 3 miejsca po kropce} czekaj; {Wywolanie procedury czekaj} end; Str. 1
17
Str. 2 Procedure Dlugosci; var x1,y1, x2, y2, dx, dy, d1: real;
i: integer; Begin clrscr; for i:=1 to 3 do writeln; {3 puste linie} writeln( 'Obliczenie dlugosci ze wspolrzednych '); write ('x1: '); readln(x1); write('y1: '); readln(y1); write('x2: '); readln(x2); write('y2: '); readln(y2); dx := x2 - x1; dy := y2 - y1; d1 := SQRT(dx * dx + dy * dy); writeln; writeln( 'D = ', d1:10:3); czekaj; end; procedure azymut; Var rg, rs, x1, y1, x2, y2, dx, dy, d, a, azg, azs, pi1: real; i: integer; Begin pi1 := 4.0 * arctan(1.0); {Pi obliczone, Pi jest w systemi} rg := / pi; {Ro gradowe} rs := / pi; {Ro stopniowe} clrscr; {Kasowanie ekranu} for i:=1 to 3 do writeln; {3 razy pusta linia na ekranie} writeln('Program oblicza dlugosc i azymut '); writeln; {pusta linia} writeln('Pi = ', pi, ' Pi_obl = ', pi1); writeln; writeln('Podaj x1 y1 x2 y2 (oddzielone spacja): '); readln(x1, y1, x2, y2); {Czytanie wspołrzednych 2 punktów} dx := x2-x1; { dx } dy := y2-y1; { dy} d :=dlug(dx, dy); {dlugosc} writeln('Wyniki: '); writeln('dx= ', dx:10:3, ' dy= ', dy:10:3, ' d=',d:10:3); if dx = 0 then {Badanie czy dx =0} begin if (dy>0) then {Jesli dx=0 i dy>0 to } a := pi / 2 else {Jesli dx=0 i dy<=0 to } a := 1.5 * pi; end else {Jesli dx <> 0} a := arctan(dy / dx); { obliczenie azymutu w radianach} if (dx < 0) then { Jesli dx<0 } a := a + pi else { Jesli dx >0} if (dy < 0) then {Jesli dx>0 i dy<0} a := a + 2 * pi; end; azg := a * rg; { obliczenie azymutu w gradach} azs := a * rs; { obliczenie azymutu w stopniach} writeln('dx = ', dx:10:3); writeln( 'dy = ', dy:10:3); writeln('azg [grad] =', azg:10:5); {Wydruk azymutu w grad z dokl: 10 poz. na czesc calk. i 5 po kropce dzies} writeln('azs [stopn]=', azs:10:5); writeln('Odleg z funkcji =', dlug(dx, dy):10:4); {Odleglosc obliczona z funckcji dlug(dx,dy)} czekaj; end; {Koniec procedury} Str. 2
18
writeln('Data: ',dz,' ',mc,' ',rok); {Wydruk daty} writeln;
Begin {Obliczenie azymutu i długości ze współrzędnych - program główny} koniec := 0; clrscr; GetDate(rok,mc,dz,dzt); {Ściągniecie daty z systemu - rok, miesiąc, dzien., dzien. tygodnia} writeln('Data: ',dz,' ',mc,' ',rok); {Wydruk daty} writeln; writeln( ' Program DlugAz.pas'); while koniec <> 1 do {Dopóki zmienna koniec rożna od 1} begin {Początek while } repeat {Powtarzaj} writeln(' Obliczenie dlugosci lub azymutu ze wspolrzednych'); writeln(' Koniec obliczen '); writeln(' Dlugosci ze wspolrzednych'); writeln(' Dlugosc z funkcji'); writeln(' Azymut ze wspolrzednych'); write('Wybierz wariant: 0..2 ==> '); readln(iw); until (iw >= 0) and (iw <= 3); {Koniec powtarzaj aż wprowadzone iw >=0 i <= 3} CASE iw of {Przypadek iw – początek CASE} 0: koniec := 1; {przypadek 0 - koniec =1 czyli wyjście z programu} 1: Dlugosci; {Wywołanie procedury Dlugosci} 2: Dlfun; {Wywołanie procedury Dlfun} 3: Azymut; {Wywołanie procedury Azymut} END {case} end; {Koniec while - jeśli koniec =1 to przejście do następnej linii poniżej, wyczyszczenie ekranu i wyjście} End. {Koniec programu głównego} Str. 3
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.