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

Podobne dokumenty
Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

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

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

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

Pascal - wprowadzenie

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

Wstęp do programowania. Różne różności

Zasady Programowania Strukturalnego

Język programowania PASCAL

Wstęp do programowania

Algorytmy i struktury danych

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

14. Elementy systemu wykonawczego

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

Programowanie w Turbo Pascal

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

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Informatyka 1. Przetwarzanie tekstów

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

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

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

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

Wykład 14. Środowisko przetwarzania

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

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};

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

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

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

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

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

Delphi Laboratorium 3

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

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

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Materiały do laboratorium MS ACCESS BASIC

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

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

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

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Ada-95. Dariusz Wawrzyniak

Wstęp do Programowania potok funkcyjny

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra 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}

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Wstęp do programowania

Algorytmy i struktury danych. wykład 5

Programowanie obiektowe

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

Programowanie RAD Delphi

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

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

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Informatyka I. Wyk lad II Algorytm, podstawowe notacje, typy danych i wyrażenia

Podprogramy. Procedury

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

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

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wstęp do programowania 2

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

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

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

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

Podstawy Programowania

ForPascal Interpreter języka Pascal

Algorytm. a programowanie -

Wprowadzenie do programowania w języku C

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Podstawy programowania

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

1 Wskaźniki i listy jednokierunkowe

Podstawy programowania

Pakiety podprogramów Dynamiczny SQL

Język C++ zajęcia nr 2

1 Wprowadzenie do algorytmiki

Podstawy programowania

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

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.

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

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Visual Basic for Application (VBA)

Lekcja 6: Pascal. Procedura i funkcja

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Podstawy programowania skrót z wykładów:

Programowanie obiektowe

Instrukcje iteracyjne (pętle)

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Podstawy programowania komputerów

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Ilość cyfr liczby naturalnej

Transkrypt:

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

Po co procedury i funkcje? Gdyby jakis tyran zabronił korzystać z procedur lub funkcji, to informatyka by upadła! Procedury i funkcje dostarczają nam niezwykle wygodnego mechanizmu abstrakcji, czyli uwalniania się od nieistotnych szczegółów. Są opakowaniem, które ujmuje fragmenty kodu w jedną całość. Przy takim opakowaniu określamy sposób komunikacji tego fragmentu kodu z otoczeniem poprzez parametry. 2

Algorytm Gaussa obliczania dnia Wielkanocy Podziel przez iloraz reszta rok R 19 a rok R 100 b c b 4 d e b+8 25 f b-f+1 3 g 19a+b-d-g+15 30 h c 4 j k 32+2e+2j-h-k 7 s a+11h+22s 451 u h+s-7u+114 31 X Y Wielkanoc przypada dnia Y+1 miesiąca X 3

Procedura Wielkanoc procedure Wielkanoc(R:Integer; var dzien,miesiac:integer); {Dla zadanego roku R wyznacza miesiąc i dzień Wielkanocy} var a,b,c,d,e,f,g,h,j,k,s,u :Integer; begin a := R mod 19; b := R div 100; c := R mod 100; d := b div 4; e := b mod 4; f := (b+8) div 25; g := (b+f-1) div 3; h := (19*a+b-d-g+15) mod 30; j := c div 4; k := c mod 4; s := (32+2*e+2*j-h-k) mod 7; u := (a+11*h+22*s) div 451; miesiac := (h+s-7*u+114) div 31; dzien := (h+s-7*u+114) mod 31+1; end; 4

Wywołanie procedury <instrukcja> ::= <wywołanie procedury> <wywołanie procedury> ::= <identyfikator procedury><parametry>; <identyfikator procedury>::=<identyfikator> <parametry>::=ε (<lista parametrów>) <lista parametrów> ::= ε <parametr>{,<parametr>} <parametr>::= <wyrażenie> <zmienna> 5

Dodatkowe ustalenia Przy wywołaniu procedury musimy pamiętać o tym, że parametrów powinno być tyle samo ile przy deklarowaniu procedury typy parametrów przy deklaracji (formalnych) i przy wywołaniu (aktualnych) muszą się zgadzać Parametry mogą być wywoływane przez wartość lub przez zmienną. W tym drugim przypadku jedyną dopuszczalną formą wyrażenia przy wywołaniu procedury jest <zmienna>. 6

Wywoływanie przez wartość i przez zmienną Różnica między wywołaniem przez wartość i przez zmienną jest taka, że w przypadku wywołania przez wartość przekazujemy wartość wyrażenia procedurze, która korzysta z tej wartości i nie jest w stanie jej zmienić u tego, który wywołuje procedurę w przypadku wywołania przez zmienną przekazujemy adres zmiennej, na której procedura będzie działać w szczególności będzie mogła zmienić wartość zmiennej. Jest to jeden ze sposobów przekazania wyliczonej wartości na zewnątrz. W przypadku procedury Wielkanoc mieliśmy jeden parametr wywoływany przez wartość (R:Integer) i dwa parametry wywoływane przez zmienną (var X,Y:Integer). 7

Wywoływanie przez stałą Jest kłopot, jesli chcemy wywołać przez wartość dużą strukturę danych, na przykład tablicę, w której zamierzamy namierzyć jakąś wartość. Tablicy zmieniać nie będziemy, więc zgodnie z zasadami sztuki powinniśmy wywołac ten parametr przez wartość, ale to jest kosztowwne W tym celu w rozszerzeniach Pascala (nie jest to standard!) stosuje się trzeci sposób: wywołanie przez stałą. Function jest(s:integer; const A:tablica):Boolean Takie wywołanie spowoduje przekazanie adresu tablicy A jako parametru, ale z zakazem zmiany wartości A. Zatem A może występować tylko po prawej stronie instrukcji przypisania. 8

Przykład wywołania R:=2011; Repeat R:=R+1; Wielkanoc(R,x,y); Until (x=3) and (y=22) TEN KOD OBLICZY NAM PIERWSZY ROK LICZĄC OD DZIŚ, W KTÓRYM BĘDZIE NAJWCZEŚNIEJSZA MOŻLIWA WIELKANOC. 9

Implementacja procedur Wywołanie procedury (funkcji) powoduje zawieszenie wykonywania bieżącego kodu, zapamiętanie stanu obliczeń oraz przygotowanie środowiska do uruchomienia procedury i to w taki sposób, aby umożliwić powrót do przerwanych obliczeń Robi się to za pomocą stosu (systemowego) i rekordów aktywacji, które się na tym stosie odkłada Rekord aktywacji zawiera wszystkie informacje konieczne do odtworzenia środowiska wywołania. 10

Rekord aktywacji zawiera Stan procesora w momencie wywołania procedury Adres powrotu Parametry procedury Parametry wołane przez wartość mają komórki przeznaczone na ich wartość Parametry wołane przez zmienną mają komórki przeznaczone na adresy tych zmiennych Zmienne lokalne procedury Dowiązanie dynamiczne - adres poprzedniego rekordu aktywacji na stosie Dowiązanie statyczne - adres rekordu aktywacji procedury, która poprzedza naszą w drzewie deklaracji i jest najwyżej na stosie 11

Stos systemowy Rekordy aktywacji mają z reguły różną długość Nic nie stoi na przeszkodzie, żeby na stosie pojawiły się rekordy aktywacji tej samej procedury (rekursja)! Wielkość stosu w czasie wykonania programu wchodzi w skład kosztu pamięciowego algorytmu Stos ma ograniczoną wielkość, ustalaną na poziomie parametrów środowiska, stąd możliwość błędu spowodowanego brakiem pamięci, gdy rekordów jest tak dużo, że na kolejny już nie ma miejsca 12

Widoczność zmiennych Kiedy w procedurze występuje zmienna, system operacyjny szuka właściwego adresu w pamięci (kontekstu na stosie) - pod tą samą nazwą mogą występować różne obiekty i trzeba znaleźć właściwy. Zaczynamy od bieżącego rekordu aktywacji i przechodząc po dowiązaniach statycznych dochodzimy do piereszego miejsca, gdzie w rekordzie aktywacji znajduje się komórka związana z tą zmienną. Jest to najświeższa wersja tej zmiennej. Rekord aktywacji programu głównego jest na dnie stosu 13

Widoczność zmiennych przykład var x,y:integer; Procedure A(x:Integer); forward C; procedure B (var y:integer); begin Write(x); y:=x; C end; procedure C; begin Write(x); y:=1; if x>0 then x:=0 else b(y) end; begin {A} Write(x); x:=2; if x>y then B(y) else y:=3; C end {A}; begin {program główny} x:=0; y:=0; a(y) end. 14

Funkcje Często efektem działania procedury ma być jakiś wynik :) W przypadku, gdy wynik jest typu prostego (Integer, Real, Boolean, Char, String, typ wskaźnikowy) możemy uzyć funkcji, która jest procedurą z końcowym wynikiem. Przykład: Function Mniejsze (x,y:liczba):boolean; var i:integer; {Liczba=array[0..n]:Integer} begin i:=n; while (i>0) and (x[i]=y[i]) do i:=i-1; Mniejsze:=x[i]<y[i] end; 15