1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.

Slides:



Advertisements
Podobne prezentacje
Funkcje w PHP ABK.
Advertisements

Katarzyna Szafrańska kl. II ti
Sortowanie przez scalanie
Język C/C++ Funkcje.
Prowadzący: mgr inż. Elżbieta Majka
PASCAL (3) dr Anna Kwiatkowska.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
Obiekty i zdarzenia w środowisku Delphi
formatowanie kodu źródłowego
27/09/ Języki programowania 1 Piotr Górczyński Zmienne.
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
Funkcje Modularyzacja : program główny , funkcje Funkcje :
Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Rekurencja Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2003 © Jerzy R. Nawrocki Teoretyczne podstawy.
Programowanie imperatywne i granice obliczalności Copyright, 2004 © Jerzy R. Nawrocki
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Kurs Pascala – spis treści
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Podprogramy 1 W Adzie mamy dwa rodzaje podprogramów (subprograms, subroutines): funkcje (functions) i procedury (procedures) Deklaracja i treść funkcji 
Ogólne jednostki programowe 1
Typy prywatne 1 Typy prywatne W Adzie typy prywatne (private types) służą do bezpiecznego udostępniania danych zdefiniowanych w pakiecie, z którego korzysta.
Wykład 2 struktura programu elementy języka typy zmienne
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
1 Języki i techniki programowania prowadzący dr Grzegorz Filipczyk.
Pliki. Pliki Pliki jako pamięć nieulotna Pliki jako pamięć nieulotna Nazwy, atrybuty i prawa dostępu Nazwy, atrybuty i prawa dostępu atrybuty atrybuty.
Podprogramy.
Typy złożone, case, stałe. Typ zbiorowy type typ_zb = set of typ_podstawowy; Typem podstawowym może być tylko typ porządkowy. Typem podstawowym może być
PROGRAMOWANIE STRUKTURALNE WYKŁAD 2
Programowanie w języku Fortran 95
Podstawy programowania
Podstawy programowania
Podstawy programowania
Obiekty dynamiczne Tworzenie klas 3 MPDI Programowanie obiektowe W4.
Język PASCAL – podstawy Turbo Pascal: procedury, funkcje
Programowanie strukturalne i obiektowe
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Andrzej Jędryczkowski Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
Algorytmy z przykładami w Turbo Pascal 7.0
Struktura programu w Turbo Pascalu.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Wyrażenia w Turbo Pascalu.
Procedury i funkcje.
Programowanie w języku Matlab
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
Wykład 5 – typy – stałe – tablice – elementy grafiki.
1. Język ObjectPascal - typ tablicowy (array)
Programowanie w środowisku DELPHI
Podstawy informatyki 2013/2014
Informatyka MPZI Wykład 4 Podprogramy Pliki Typ zbiorowy Rekurencja.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
Wykład 10 typ zbiorowy rekurencja.
Wykład 3 przykłady operacje na tekstach wyrażenia logiczne
1 Wykład 7 sortowanie BitButton format tekstu rysunki typ rekordowy.
Zagadnienia AI wykład 6.
Programowanie proceduralne Podstawy Programowania dla geoinformatyków Wykład 3 Rafał Witkowski, 2015.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wykład 11 Informatyka MPDI Podprogramy Zmienne typu zbiorowego Rekurencja Typ obiektowy Zmienne dynamiczne.
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Wykład 1 Informatyka II MPZI2 sem.letni. Tablice Tablice deklarujemy array [ lista typów indeksów ] of typ bazowy (składowych) np. var t1,t2:array [1..5,
Dane, zmienne, instrukcje
Haskell Składnia funkcji.
Zapis prezentacji:

1 Wykład 8 Podprogramy

2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z określonym sposobem wymiany informacji z innymi częściami (przekazywanie danych) korzyści: - krótszy zapis źródłowy - efektywniejsze wykorzystanie PaO (mniej) - czytelność - łatwiejsze uruchamianie i testowanie - tworzenie bibliotek i korzystanie

3 Podział różnice - sposób definiowania - funkcja przyjmuje wartość - procedura nie - sposób wywołania procedury nagłówek: procedure nazwa_proc ( sekw._deklaracji_parametrów_formalnych ); function nazwa_fun ( sekw._dekl._param._formal. ): nazwa_typu_wartości; lista_nazw_parametrów_formalnych: nazwa_typu var lista_nazw_parametrów_ formalnych : nazwa_typu elementy listy oddzielane ; mechanizm przekazywania danych funkcje Definiowanie

4 function nazwa (parametry formalne): typ funkcji ; definicje, deklaracje lokalne begin.... nazwa := wyrażenie ; //albo result:=wyrażenie end ; procedure nazwa (parametry formalne) ; definicje, deklaracje begin.... instrukcje.... end ; Definicje funkcji i procedury zawierają nagłówek, blok definicyjny i blok wykonawczy

5 Wywołanie (wykonanie) procedura – osobna instrukcja wykonania: nazwa_procedury( lista_parametrów_aktualnych ); Uwagi: parametry aktualne zgodne z parametrami formalnymi: - co do liczby - co do typu - co do kolejności funkcja – najczęściej w wyrażeniu (jako składniku instrukcji): nazwa_funkcji( lista_parametrów_aktualnych ); ale może być też osobną instrukcją, gdy nie zależy nam na zwracanej wartości parametry oddzielane przecinkami,

6 var a, b, c:real; begin a:=2; Edit1.text:= FloatToStr(srednia (6.7, 2*a)) ; end ; function srednia (x1, x2 : real): real ; begin result := (x1 + x2)/2 ; //albo srednia:= (x1 + x2)/2 ; end ; {koniec definicji funkcji} parametry formalne typ wyniku procedure TForm1.Button1Click(Sender: TObject); Przykład funkcji obliczającej średnią arytmetyczną Definicja lokalna funkcji – funkcja dostępna tylko wewnątrz procedury Button1Click parametry aktualne

7 Przekazywanie danych z/do podprogramu - parametr formalny bez var - jest zmienną lokalną - wartość początkowa w momencie wywołania - argument aktualny - wyrażenie typu zgodnego - przekazywanie danych tylko na wejściu do podprogramu przez zmienną (adres) - określonego typu (referencyjnie) - parametr formalny z var - faktycznie nie dane lecz adres argumentu aktualnego - argument aktualny - zmienna tego samego typu - przekazywanie danych na wyjściu (czyli w większości przypadków zwrot wyniku lub wyników) - ale może być także na wejściu przez wartość

8 implementation //własna procedura procedure alfa(x1,x2:real; var wynik:real); begin wynik:=x1-x2; end; procedure TForm1.Button1Click(Sender: TObject); var w:real; begin alfa(5,2,w); Memo1.Lines.Add(FloatToStr(w)) ; alfa(4,2,w); Memo1.Lines.Add(FloatToStr(w)) ; end; definicja Przykład

9 implementation //własna procedura procedure alfa(var x1,x2:real; var wynik:real); begin wynik:=x1 - x2; //zmienne są deklarowane w nagłówku definicji end; procedure TForm1.Button1Click(Sender: TObject); var a,b,w:real; begin a:=5; b:=4; alfa(a,b,w); Memo1.Lines.Add(FloatToStr(w)) ; alfa(w,w,w); Memo1.Lines.Add(FloatToStr(w)) ;//jaki będzie wynik? end;... ale można też tak....

10 deklaracje globalne – zmienne widoczne w całym programie (chyba że przesłonięte w B, C lub D – nowe definicje) deklaracje lokalne w B (zewnętrzne dla C) deklaracje lokalne w C (zmienne z deklaracji A i B można przesłaniać) tu można wykorzystać procedurę C deklaracje lokalne w D (zmienne z deklaracji A można przesłaniać, procedura C niewidoczna) inna procedura, tu można wywołać procedury B i D, nie można procedury C unit A implementation deklaracje A procedure TForm1.Button1Click(Sender: TObject); begin end ; procedure B deklaracje B begin end procedure C deklaracje C begin end procedure D deklaracje D begin end Zasięg deklaracji i definicji

11 procedure srednia (liczba1, liczba2 : real ; var wynik : real) ; begin wynik := (liczba1 + liczba2)/2 ; end ; {koniec definicji procedury} procedure TForm1.Button1Click(Sender: TObject); var a, b, c:real; begin a:=2; b:=3; srednia (6.7, 2*a, c) ; {trzeci parametr aktualny musi być zmienną} Memo1.Lines.Add (FloatToStr(c)) ; {c jest równe (6.7+2*2)/2=5.35} srednia (a, b, c) ; Memo1.Lines.Add (FloatToStr(c)) ; {c jest równe (2+3)/2=2.5} srednia (a, c, c) ; Memo1.Lines.Add (FloatToStr(c)) ; {c jest równe (2+2.5)/2=2.25} srednia (c, b, a) ; Memo1.Lines.Add (FloatToStr(a)) ; {a jest równe (2.25+3)/2= end; Przykład procedury obliczającej średnią arytmetyczną parametry formalne parametry aktualne

12 Uwagi: parametry formalne opcjonalne (nie wymagane )- jeśli nie ma to pomijamy "( )" definicje dodatkowych zmiennych lokalnych - opcjonalne typ parametru formalnego - dowolny (plik tylko przez zmienną) - nazwa typu (nie opis) - także tylko string (bez rozmiaru) typ wartości funkcji - tylko prosty lub string (bez rozmiaru) - nazwa typu (nie opis) dla definicji funkcji musi być w części akcyjnej nadanie wartości funkcji nazwa_funkcji := W typu_zgodnego ze środka podprogramu (procedury|funkcji) można "wychodzić" przy pomocy wykonania procedury standardowej exit; (wymuszenie zakończenia podprogramu)

13 procedure ff1 (x:real;var y:real); begin if x=0 then begin Showmessage('Argument ujemny'); exit; end else y:=sin(x)/x end; procedure TForm1.Button1Click(Sender: TObject); var v:real; begin ff1(0,v); ff1(-3,v); edit1.Text:= floattostr(v); end; Przykład:

14 procedure TForm1.Button2Click(Sender: TObject); procedure linia_poz; begin Memo1.Lines.Append( ' ' ); end; procedure linia_pion; begin Memo1.Lines.Append( '| |' ); end; begin linia_poz; linia_pion; Memo1.Lines.Append( '| DELPHI |' ); linia_pion; linia_poz; end; Przykład procedury bezargumentowej:

15 var i: integer; function fun( k: integer): real; begin if k <= 10 then fun := 2*k else fun := *(k-1) end; begin Memo1.Font.Name := 'Courier'; for i:= 1 to 20 do Memo1.Lines.Append( format('%3d %10.1f ',[i, fun(i)] )); end; Przykład- tabela funkcji : definicja lokalna

16 Przykład - łączenie dwóch plików uporządkowanych są pliki tekstowe: gr_1.txt oraz gr_2.txt opisują uporządkowany opis ciągu osób: numer, nazwisko i pensję kluczem uporządkowania jest numer osoby plik gr_1.txt: 1 Nowak Kowalski Miodowicz Kowal plik gr_2.txt: 3 Nowacki Kowal Malinowski

17 dwie procedury pomocnicze: czytaj - wczytanie do rekordu jednych danych z plik przepisz - wpisanie danych z rekordu os_A do pliku wynikowego, jeżeli nie ma końca pliku gr_A to wczytanie nowej danej, w przeciwnym razie przepisanie reszty pliku gr_B do pliku wynikowego type osoba= record nr:integer; nazwisko:string[20]; pensja:real; end; var gr_1, gr_2, grupa:TextFile; os_1, os_2:osoba; koniec:boolean; deklaracje globalne

18 procedure czytaj( var gr:textFile; var os:osoba ); // wczytanie danych o jednej osobie z pliku gr do rekordu os begin with os do begin readln( gr, nr); readln( gr, nazwisko ); readln( gr, pensja ); end end; Definicje procedur

19 procedure przepisz( var os_A, os_B:osoba; var gr_A, gr_B:textFile ); begin writeln( grupa, os_A.nr:3, os_A.nazwisko:12, os_A.pensja:9:2 ); if eof( gr_A ) then begin // koniec pliku while not eof( gr_B ) do begin // kopiowanie writeln( grupa, os_B.nr:3, os_B.nazwisko:12, os_B.pensja:9:2 ); czytaj( gr_B, os_B ) end; writeln( grupa, os_B.nr:3, os_B.nazwisko:12, os_B.pensja:9:2 ); koniec := true; // ustawienie - koniec łączenia end else czytaj( gr_A, os_A ); // nie koniec, więc wczytanie nowego end;

20 begin // procedura główna assignFile( gr_1, 'gr_1.txt' ); // przygotowanie plików assignFile( gr_2, 'gr_2.txt' ); assignFile( grupa, 'grupa.txt' ); reset( gr_1 ); reset( gr_2 ); rewrite( grupa ); koniec := eof( gr_1 ) or eof( gr_2 ); if koniec then showMessage( 'Brak danych' ) else begin czytaj( gr_1, os_1 ); czytaj( gr_2, os_2 ); repeat // główna pętla łączenia if os_1.nr < os_2.nr then przepisz( os_1, os_2, gr_1, gr_2 ) // dopisanie os_1 else if os_1.nr > os_2.nr then przepisz( os_2, os_1, gr_2, gr_1 ) // dopisanie os_2 else begin showMessage( 'Dwie takie same osoby nr ' + intToStr( os_1.nr ) ); czytaj( gr_2, os_2 ); end until koniec; end; CloseFile(gr_1); CloseFile(gr_2); CloseFile(grupa); end;