Algorytmy i struktury danych

Podobne dokumenty
FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

Programowanie w Turbo Pascal

Wstęp do Informatyki Programowanie komputerów PC c.d.

Podprogramy. Procedury

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Wstęp do Informatyki Programowanie komputerów PC c.d. PASCAL - struktura blokowa programu. Zasięg zmiennych. Przesłanianie zmiennych

Wykład VI PASCAL procedury i funkcje przekazywanie parametrów,

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

ALGORYTMY I STRUKTURY DANYCH

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Procedury i funkcje. Przykład programu z procedurą. Definicja. Cechy procedury

Lekcja 6: Pascal. Procedura i funkcja

Rekurencja. Przygotowała: Agnieszka Reiter

Algorytmy i struktury danych

Język programowania PASCAL

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wstęp do programowania

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Programowanie komputerowe. Zajęcia 3

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

//warunki początkowe m=500; T=30; c=0.4; t=linspace(0,t,m); y0=[-2.5;2.5];

5 Przygotował: mgr inż. Maciej Lasota

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Delphi Laboratorium 3

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Procedury i funkcje. Programowanie komputerowe

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie strukturalne i obiektowe. Funkcje

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Algorytmy i struktury danych

Programowanie dynamiczne

Programowanie komputerowe. Zajęcia 2

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Zasady Programowania Strukturalnego

Wstęp do informatyki

Jerzy Nawrocki, Wprowadzenie do informatyki

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU. Instrukcja pętli For to do

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

PASCAL WPROWADZENIE. 1. Uruchom kompilator. 2. Struktura programu w Pascalu. 3. Komentarze

Wstęp do programowania

Jerzy Nawrocki, Wprowadzenie do informatyki

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Algorytmy i struktury danych

Paradygmaty programowania

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Programowanie deklaratywne

Wstęp do Programowania potok funkcyjny

LibreOffice Calc VBA

11. Blok ten jest blokiem: a. decyzyjnym b. końcowym c. operacyjnym

Algorytmy i struktury danych

Planowanie eksperymentu 2 (k p) w 2 r blokach. Stanisław Jaworski, Wojciech Zieliński

Wprowadzenie komentarzy do programu

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

14. Elementy systemu wykonawczego

Język C++ zajęcia nr 2

Rekurencja (rekursja)

1 Wprowadzenie do algorytmiki

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Materiały do laboratorium MS ACCESS BASIC

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Przydział pamięci. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

KURS PASCAL A. 1.Wprowadzenie

Zapis algorytmów: schematy blokowe i pseudokod 1

Definicje. Algorytm to:

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Informatyka 1. Przetwarzanie tekstów

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Algorytm. a programowanie -

Algorytmy i struktury danych. wykład 2

Transkrypt:

Algorytmy i struktury danych Funkcje i procedury Zasięg zmiennych Rekurencja Witold Marańda maranda@dmcs.p.lodz.pl 1 Modularyzacja programu Algorytmy strukturalne moŝna redukować, zastępując złoŝone fragmenty blokami o wyŝszym stopniu funkcjonalności. Podział na moduły ułatwia testowanie całego programu, gdyŝ moŝna zapewnić oddzielnie poprawność modułów, a następnie całej, zredukowanej sieci. 2 1

Funkcje i procedury Funkcje i procedury umoŝliwiają modułową realizację programu Dekompozycja problemu na prostsze części Większa czytelność Unikanie powtórzeń Funkcja - moduł programowy, który moŝe pobierać wiele argumentów (danych wejściowych), zwracający tylko jedną wartość jako wynik swojego działania - moduł programowy, który moŝe pobierać wiele argumentów (danych wejściowych), ale nie zwraca Ŝadnego wyniku i moŝe być uŝywana jak normalna instrukcja języka. 3 Procedury deklaracje zmiennych procedury Parametry formalne są nazwami zmiennych uŝywanymi w deklaracji procedur Koniec PROCEDURE (parametry); ; część wykonawcza procedury wywołanie procedury (parametry); Parametry aktualne są zmiennymi lub liczbami w chwili uŝycia procedury. Są one podstawiane pod parametry formalne w czasie wykonywania procedury 4 2

Procedury Koniec Przykład: Ramka(); FOR i:=1 to N DO Writeln(x[i]); Ramka(); PROCEDURE Ramka(); writeln('=========='); 5 Przykłady: Procedury PROCEDURE Ramka(); writeln("=========="); PROCEDURE Tablica(tab:array[1..N] of REAL); i:integer; FOR i:=1 TO N DO writeln('[',i,']=',tab[i]) x,y : ARRAY[1..N] of REAL; Ramka(); Tablica(x); Ramka(); Tablica(y) Ramka(); 6 3

Funkcje Funkcja deklaracje zmiennych funkcji Parametry formalne są nazwami zmiennych uŝywanymi w deklaracji funkcji a:=funkcja(..) a:=funkcja(..) Funkcja:=wartość Koniec FUNCTION Funkcja(parametry):typ; ; Funkcja:=wartość; część wykonawcza funkcji musi przypisać wartość do nazwy funkcji deklaracja typu zwracanego przez funkcję wywołanie funkcji x:=funkcja(parametry); Parametry aktualne są zmiennymi lub liczbami w chwili uŝycia funkcji. Są one podstawiane pod parametry formalne w czasie wykonywania funkcji. Wartość zwracana przez funkcję zostać przypisana do zmiennej lub uŝyta w wyraŝeniu 7 Funkcje Funkcja a:=funkcja(..) Funkcja:=wartość a:=funkcja(..) Koniec Przykład: FOR k:=1 TO 10 DO s:=silnia(k); writeln(s); FUNCTION Silnia(n:BYTE):INTEGER; i:byte; Silnia:=1; FOR i:=2 TO n DO silnia:=silnia*i; 8 4

Procedury, funkcje - przykład PROGRAM Tablice; CONST N=3; TYPE Tablica=ARRAY[1..N] OF REAL; PROCEDURE Wypelnij(var tab:tablica;x:real); k:integer; FOR k:=1 TO N DO tab[k]:=x; PROCEDURE Wprowadz(var tab:tablica); k:integer; FOR k:=1 TO N DO Read(tab[k]); PROCEDURE Wydrukuj(tab:Tablica); k:integer; FOR k:=1 TO N DO Writeln('[',k,']=',tab[k]); FUNCTION Srednia(tab:Tablica):REAL; k:integer; Srednia:=0; FOR k:=1 TO N DO Srednia:=Srednia+tab[k]; Srednia:=Srednia/k FUNCTION Najwiekszy(tab:Tablica):REAL; k:integer; max:real; Max:=tab[1]; FOR k:=2 TO N DO IF tab[k]>max THEN Max:=tab[k]; Najwiekszy:=Max; a,b:tablica; Wypelnij(b,1); Wprowadz(a); Wydrukuj(a); Wydrukuj(b); Writeln(Srednia(a)); Writeln(Najwiekszy(a)); END. 9 Przekazywanie parametrów Przekazywanie parametrów moŝliwe jest na dwa sposoby: Przez wartość - procedura (funkcja) otrzymuje kopię zmiennych i nie moŝe zmienić wartości oryginalnej zmiennej Przykłady: x:real; PROCEDURE F(x:REAL) x:=1; END x:=0; F(x); writeln(x); wydrukowanie wartości 0 Przez zmienną (wskaźnik) - procedura (funkcja) otrzymuje oryginalną zmienną (wskazanie na zmienną) i moŝe zmienić wartość oryginalnej zmiennej (co oznacza się słowem kluczowym przed parametrem formalnym) x:real; PROCEDURE F( x:real) x:=1; END x:=0; F(x); writeln(x); wydrukowanie wartości 1 10 5

PASCAL - struktura blokowa programu Język PASCAL ma strukturę blokową, tzn. dopuszcza zagnieŝdŝanie funkcji i procedur Program główny Funkcja I poziomu Funkcja II poziomu I poziomu III poziomu II poziomu Funkcja II poziomu 11 Zasięg zmiennych Język PASCAL ma klarowne reguły zasięgu zmiennych, związaną z jego strukturą blokową X : real; Y : real; X zmienna OK (globalna) Y zmienna OK (lokalna) X zmienna OK (globalna) Y??? X zmienna OK (globalna) Y??? Zasięg zmiennej (identyfikatora) oznacza fragment programu, w którym moŝna uŝywać tę zmienną i oznacza ona tę samą zmienną Zasięg zmiennej w PASCALU obejmuje blok, w którym tę zmienną zadeklarowano oraz wszystkie bloki w nim zagnieŝdŝone. Zmienne globalne to zmienne zadeklarowane w bloku głównym programu, gdyŝ są widoczne we wszystkich blokach. X zmienna OK (globalna/lokalna) Y??? Zmienne lokalne to zmienne zadeklarowane w danym bloku, ale nie widoczne na zewnątrz tego bloku. 12 6

Przesłanianie zmiennych X : real; X : real; X zmienna OK (lokalna) X zmienna OK (globalna) Jeśli zmienna lokalna ma taką samą nazwę jak zmienna w bloku zewnętrznym, to zmienna zewnętrzna jest przesłonięta przez zmienną lokalną. Na zewnątrz tego bloku nadal widoczna jest zmienna zewnętrzna. X zmienna OK (globalna) X zmienna OK (globalna/lokalna) 13 Zasięg zmiennych a przekazywanie parametrów Procedury i funkcje w mogą komunikować się z programem wywołujących: poprzez parametry gdy trzeba przekazywać róŝne zmienne lub wartości, poprawia to równieŝ czytelność procedur i funkcji, gdyŝ posiadają one jasno zapisany interfejs komunikacji. poprzez zmienne globalne gdy dotyczy to zmiennych szczególnie waŝnych w obrębie całego programu lub gdy dotyczy to duŝych rozmiarowo struktur danych, ale ogólnie zmniejsza czytelność programu. Poprawna organizacja wymiany informacji pomiędzy blokami programu jest kwestią kompromisu i stylu programowania. 14 7

Zasięgi - przykład PROGRAM scope(input,output); a,b,c : INTEGER; PROCEDURE aa( a,b: INTEGER); a:=2; b:=b-1; PROCEDURE bb( c: INTEGER); c:=c+a; a:=1; aa(b,a); aa(c,b); bb(b); writeln(a, b, c); END. Jakie liczby wydrukuje ten program??? 15 Rekurencja Rekurencja (inaczej rekursja - ang. recursion ) oznacza odwoływanie się funkcji lub procedury do samej siebie PROCEDURE (parametry); (parametry); {wywołanie rekurencyjne} Przykład rekurencji: obliczanie silni według wzoru: n!=n*(n-1)! W celu obliczenia n!, naleŝy najpierw obliczyć (n-1)! FUNCTION Silnia(n:BYTE):LONGINT; IF n<2 THEN Silnia:=1 ELSE Silnia:=n*Silnia(n-1) 16 8

Rekurencja przykład Podczas obliczania silni liczby 6, wywołana zostaje funkcja silnia z parametrem 6. n:=6 Silnia=6! Wewnątrz tej funkcji następuje rekurencyjne wywołanie tej samej funkcji (a więc samej siebie), ale z parametrem n-1 czyli 5. W kolejnym kroku znów wywoływana jest silnia dla n-1, aŝ do momentu gdy n<2. Wówczas spełniony zostaje warunek i najbardziej zagnieŝdŝona funkcja silnia zwraca wynik 1. Następnie wszystkie wcześniej wywołane funkcje zwracają sobie po kolei wyniki, a na końcu funkcja silnia zwraca do programu głównego wynik dla n=6. Silnia:=6*Silnia(6-1) Silnia:=5*Silnia(5-1) Silnia:=4*Silnia(4-1) Silnia:=3*Silnia(3-1) Silnia:=2*Silnia(2-1) IF n<2 THEN Silnia:=1 17 Ciąg Fibonacciego Rekurencja - przykład 1, 1, 2, 3, 5, 8, 13,21,34,55, fib(4) fib(n) := fib(n-2) + fib(n-1) =1 =1 18 9

Rekurencja - przykład fib(4) fib(4) fib(5) FUNCTION Fibonacci(n:INTEGER):INTEGER; IF n<2 THEN Fibonacci:=1 ELSE Fibonacci:=Fibonacci(n-2)+Fibonacci(n-1) 19 Ciąg Fibonacciego nienajlepszy przykład wykorzystania rekurencji? Obliczanie liczb ze pomocą powyŝszej funkcji powoduje wywołanie procedury Fibonacci wielokrotnie obliczającej te same liczby Fibonacciego, co jest bardzo nieefektywne. Rekurencja nie jest właściwym rozwiązaniem problemu (nawet jeśli problem jest łatwy do rekurencyjnego zdefiniowania) gdy liczba wywołań jest nierozsądnie duŝa lub dochodzi do powtórzeń obliczeń. fib(4) fib(5) FUNCTION Fibonacci(n:INTEGER):LONGINT; f0,f1:longint; f0:=1; f1:=1; FOR k:=1 TO n DO Fibonacci:=f0+f1; f0:=f1; f1:=fibonacci; END 20 10