1 / 18

Język PASCAL – podstawy Turbo Pascal: procedury, funkcje. Przykłady programów geodezyjnych

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.

gerodi
Download Presentation

Język PASCAL – podstawy Turbo Pascal: procedury, funkcje. Przykłady programów geodezyjnych

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Język PASCAL – podstawyTurbo 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ówstrukturalnych.

  3. Procedury • Składnia definicji procedury: procedure nazwa(parametry); deklaracje; begin {treść procedury} end; • Procedurę wywołujemypodają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} procedurepodaj_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 ('x=',x,' y=',y, ' z=',z); writeln ('Roznica liczb z-y-x=: ', z-y-x); readln; End. program bezprocedury; varx,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'); read (x); read (y); read (z); 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; begin for i := 1 to 20 do { wypisz 20 szlaczków } Szlaczek('*', i); end.

  6. programRownkwadratowe;{program rozwiazujerownanie kwadratowe} usesCrt; vara,b,c: real; procedure start(tytul:string); begin ClrScr; Writeln('Autor: Jan Anonim'); Writeln(tytul); Writeln end; procedureliczPierwiastki(a,b,c: real); var delta: real; begin Write('Rownanie '); delta:=b*b-4*a*c; if delta<0 thenWriteln('nie ma pierwiastkow.') elseif delta=0 thenWriteln('ma jeden pierwiastek x1=',-b/(2*a):8:2) else{if delta >0} begin 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} end; procedureczytajDane(vara,b,c: real); begin Write('Podaj wspolczynnik a: '); Readln(a); Write('Podaj wspolczynnik b: '); Readln(b); Write('Podaj wspolczynnik c: '); Readln(c) end; procedureczekaj; begin Writeln; Write('Nacisnij klawisz Enter.'); Readln end; procedureblad(komunikat: string); begin Writeln; Write(komunikat); czekaj; Halt end; Begin {Wlasciwy program} start('Pierwiastki rownania kwadratowego'); czytajDane(a,b,c); if a=0 thenblad('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 procedurei kończy słowem end; (ze średnikiem). • End. (z kropką) występuje tylko raz - na samym końcu programu głównego.

  8. Funkcja • Funkcjato procedura, która może zwracać jakąś wartość. Przy wywołaniu funkcji należy użyć specjalnejinstrukcji 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 Ogólna postać funkcji: functionnazwa(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; functionbezw(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. programBisekcja; { Program rozwiązuje równania nieliniowe metodą bisekcji } vara, b, c : real; { granice przedziału i punkt podziału eps : real; { dokładność } functionf(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. PROGRAMKULA0; { naglowek programu} { poczatek BLOKU DEKLARACJI} uses crt; VAR r : real; {promien - typu rzeczywistego} v : real; {objetosc - typu rzeczywistego} i: integer; {pomocnicza zmienna typu calkowitego} Procedurewstep; 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; PROCEDUREdane; begin clrscr; write('Promien kuli='); readln(r); end; {dane} PROCEDUREobliczenia; 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; 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. PROGRAMKulaPlik; {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; Begin writeln; writeln('OBJETOSC KULI o promieniu ',r:7:3,' wynosi ',v:10:3); writeln; 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. PROGRAMKULA;{ naglowek programu} CONST PI= 3.1415926536; { gdyby Pi nie było w programie} VAR r : real; {promien - typu rzeczywistego} v : real; {objetosc - typu rzeczywistego} i: integer; PROCEDUREdane (VAR x: real); begin write('Promien='); readln(x); end; {dane} PROCEDUREobliczenia ( 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; PROCEDUREwyniki(promien,objetosc: real); Begin writeln; writeln('OBJETOSC KULI o promieniu ',promien:7:3,' wynosi ',objetosc:10:3); writeln; 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:1 ... 3 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 clrscr; 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, ' = ', P:10:2); writeln; writeln('Nacisnij Enter'); readln; end;

  16. OBLICZENIE AZYMUTU I DŁUGOŚCI ZE WSPÓŁRZĘDNYCH Programazdlug; {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)'); writeln; 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; 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. 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 := 200.0 / pi; {Ro gradowe} rs := 180.0 / 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; writeln('Wyniki: '); writeln; 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} begin a := arctan(dy / dx); { obliczenie azymutu w radianach} if (dx < 0) then { Jesli dx<0 } a := a + pi else { Jesli dx >0} begin if (dy < 0) then {Jesli dx>0 i dy<0} a := a + 2 * pi; end 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)} writeln; czekaj; end; {Koniec procedury} Str. 2

  18. 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'); writeln; writeln; whilekoniec <> 1 do {Dopóki zmienna koniec rożna od 1} begin{Początek while } repeat {Powtarzaj} writeln(' Obliczenie dlugosci lub azymutu ze wspolrzednych'); writeln; writeln(' 0 Koniec obliczen '); writeln(' 1 Dlugosci ze wspolrzednych'); writeln(' 2 Dlugosc z funkcji'); writeln(' 3 Azymut ze wspolrzednych'); writeln; write('Wybierz wariant: 0..2 ==> '); readln(iw); until (iw >= 0) and (iw <= 3); {Koniec powtarzaj aż wprowadzone iw >=0 i <= 3} CASEiw 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} clrscr; End. {Koniec programu głównego} Str. 3

More Related