Podstawy programowania

Podobne dokumenty
Podstawy programowania

Podstawy programowania

Podstawy programowania

Podstawy programowania

Język programowania PASCAL

Programowanie w Turbo Pascal

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wprowadzenie do programowania w języku C

Podstawy programowania w języku C++

Informatyka 1. Przetwarzanie tekstów

Lekcja 6: Pascal. Procedura i funkcja

Podstawy programowania

Podstawy programowania w języku C++

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

Języki programowania obiektowego Nieobiektowe elementy języka C++

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

Podstawy programowania

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

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

Podstawy programowania

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

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania w języku C i C++

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

Podstawy programowania w języku C++

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

Wprowadzenie do programowania w języku C

Podstawy programowania w języku C++

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}

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Delphi Laboratorium 3

Podstawy programowania w języku C++

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

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

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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

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

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

Podstawy programowania w języku C++

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

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

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Ćwiczenia podstawowe, zestaw 5, część 1

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

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

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

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

Wstęp do programowania

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

Podstawy programowania w języku C++

Języki programowania obiektowego Nieobiektowe elementy języka C++

Pascal - wprowadzenie

Systemy ekspertowe. Wnioskowanie w systemach regułowych. Część piąta. Autor Roman Simiński.

Programowanie Delphi obliczenia, schematy blokowe

Przykład programu Rozwiązanie równania postaci:

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

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

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

Wykład 2 Składnia języka C# (cz. 1)

Programowanie w języku C++

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne

Programowanie w języku C++

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

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

lekcja 8a Gry komputerowe MasterMind

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

Podstawy Programowania

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

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Programowanie w języku C++ Grażyna Koba

Programowanie w języku Python. Grażyna Koba

Podstawy programowania

Zasady Programowania Strukturalnego

Jerzy Nawrocki, Wprowadzenie do informatyki

1 Wielokrotne powtarzanie tych samych operacji

Język ludzki kod maszynowy

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

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

Pliki. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików:

Wstęp do informatyki- wykład 11 Funkcje

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

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Jerzy Nawrocki, Wprowadzenie do informatyki

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

Wstęp do informatyki- wykład 9 Funkcje

Języki programowania zasady ich tworzenia

Instrukcja standardowa Writeln

Podstawy programowania w języku JavaScript

Wstęp do programowania

#7 P r o g r a m... Rys Struktura zmiennej typu string

Algorytmy i struktury danych

Podstawy Programowania C++

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Wprowadzenie do języka Pascal

1 Podstawy c++ w pigułce.

Transkrypt:

Podstawy programowania Część dziewiąta Procedury i funkcje Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

Fachowiec musi mieć odpowiednie narzędzia Copyright Roman Simiński Strona : 2

A jakich narzędzi potrzebuje programista? Sprzęt Edytory Kompilatory Debugery Środowiska RAD Copyright Roman Simiński Strona : 3

A jakich narzędzi potrzebuje programista? cd... Sprzęt Kawa Edytory Herbata Kompilatory Kola Debugery... Środowiska RAD... Copyright Roman Simiński Strona : 4

A patrząc z pozycji samego procesu programowania? If For Case While Integer Real Char Boolean Suma Dochody Dystans Paliwo Sin Cos Abs Succ WriteLn Write Read ReadLn Array Set File Record Copyright Roman Simiński Strona : 5

A patrząc z pozycji samego procesu programowania? If For Case While Integer Real Char Boolean Instrukcje Typy proste Suma Dochody Dystans Paliwo Sin Cos Abs Succ Zmienne? WriteLn Write Read? ReadLn Array Set File Record Typy złożone Copyright Roman Simiński Strona : 6

A patrząc z pozycji samego procesu programowania? Cos Succ Sin Abs Funkcje Write ReadLn WriteLn Read Procedury Copyright Roman Simiński Strona : 7

Co to takiego procedury, co to takiego funkcje? Przypomnijmy sobie jeden z pierwszych programów, z czego się on składa? Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 8

Co to takiego procedury, co to takiego funkcje? Część słów kluczowych służy do określania i porządkowania struktury programu. Słowa kluczowe określające strukturę programu Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 9

Co to takiego procedury, co to takiego funkcje? Zmienne deklarowane w sekcji Var stanowią pamięć programu dla danych. Deklaracja zmiennych: nazwy oraz ich typy. Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 10

Co to takiego procedury, co to takiego funkcje? Wyprowadzanie informacji do strumienia wyjściowego programu.... Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Co to jest? Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 11

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Wywołanie procedury o nazwie WriteLn Wywołanie powoduje wykonanie przypisanych procedurze akcji Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 12

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Wywołanie procedury o nazwie Write Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 13

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Wywołanie procedury o nazwie ReadLn Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 14

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Instrukcja przypisania wartości zmiennej Fahrenheit Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 15

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Wywołanie funkcji o nazwie Round Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 16

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Wywołanie procedury o nazwie WriteLn Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 17

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Wywołanie procedury o nazwie WriteLn Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 18

Co to takiego procedury, co to takiego funkcje? Procedury to programowe narzędzia realizujące potencjalnie złożone czynności. Wywołanie procedury o nazwie ReadLn Program CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; WriteLn; WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); WriteLn( 'Temperatura w st. F: ', Fahrenheit ); WriteLn( 'Nacisnij Enter by zakonczyc program...' ); End. Copyright Roman Simiński Strona : 19

Procedura Procedura to programowe narzędzie realizujące określone czynności. Każda procedura ma swoją nazwę. Wpisanie nazwy procedury w kodzie programu oznacza jej wywołanie. Instrukcja programu w której wywołuje się procedurę nazywa się instrukcją wywołania procedury. Wywołanie procedury polega na: zawieszeniu wykonania aktualnie realizowanego ciągu instrukcji, wykonaniu instrukcji przypisanych do procedury o danej nazwie, wznowieniu wykonania realizowanego ciągu instrukcji od instrukcji następnej po wywołaniu procedury. Instrukcja wywołania procedury WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Copyright Roman Simiński Strona : 20

Funkcja Funkcja to programowe narzędzie realizujące określone czynności, po wykonaniu których, funkcja udostępnia w miejscu wywołania pewien rezultat. Żargonowo mówi się, że funkcja oddaje wartość w miejscu wywołania. Funkcja różni się od procedury tym, że ta ostatnia tylko wykonuje czynności i nie udostępnia rezultatu w miejscu wywołania. Poza tą różnicą procedury i funkcje są podobne wspólnie nazywa się je podprogramami. Instrukcja wywołania procedury WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); Instrukcja wywołania funkcji Copyright Roman Simiński Strona : 21

Procedura a funkcja różnica w wywołaniu Wywołanie procedury jest osobną instrukcją. Wywołanie funkcji powinno wystąpić w wyrażeniu, wykorzystującym jej rezultat. Instrukcja wywołania procedury WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); Przyprostokatna := Przeciwprostokatna * Sin( Alfa ); X := R * Cos( Alfa ); Y := R * Sin( Alfa ); Instrukcja wywołania funkcji Copyright Roman Simiński Strona : 22

Procedury i funkcje rola parametrów Instrukcje wykonywane wewnątrz procedur i funkcji są zwykle odseparowane od reszty programu. Można powiedzieć, że te instrukcje są uwięzione wewnątrz celi jaką jest procedura lub funkcja. Aby instrukcje wewnętrzne podprogramu wiedziały o naszych chciejstwach, musimy im przekazać informacje oficjalnym kanałem wymiany informacji. Copyright Roman Simiński Strona : 23

Procedury i funkcje rola parametrów Oficjalny kanał wymiany informacji z instrukcjami wewnętrznymi podprogramów to parametry (zwane też argumentami). Copyright Roman Simiński Strona : 24

Procedury i funkcje rola parametrów Parametry mogą być kierowane do wnętrza podprogramu, mają wtedy charakter wejściowy. Copyright Roman Simiński Strona : 25

Procedury i funkcje rola parametrów Parametry mogą być kierowane z wnętrza podprogramu, mają wtedy charakter wyjściowy. Copyright Roman Simiński Strona : 26

Procedury i funkcje rola parametrów W szczególnym przypadku pojedynczy parametr może być zarówno wejściowy jak i wyjściowy. Copyright Roman Simiński Strona : 27

Procedury i funkcje parametry aktualne wywołania W trakcie wywołania procedur i funkcji można im przekazać parametry. Parametry bywają również zwane argumentami. Prawidłowa, pełna nazwa: parametry (argumenty) aktualne wywołania. WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); Write( 'Temperatura w st. C: ' ); ReadLn( Celsjusz ); Parametry aktualne wywołania procedury Fahrenheit := Round( 1.8 * Celsjusz + 32.0 ); Przyprostokatna := Przeciwprostokatna * Sin( Alfa ); X := R * Cos( Alfa ); Y := R * Sin( Alfa ); Parametry aktualne wywołania funkcji Copyright Roman Simiński Strona : 28

Procedury i funkcje parametry aktualne wywołania Parametry służą do: przekazywania informacji do wnętrza podprogramów, uzyskiwania informacji zwrotnej z wnętrza podprogramu. WriteLn( 'Stopnie Celsjusza na Fahrenheita' ); X := R * Cos( Alfa ) Parametry aktualne wywołania przekazują dane wejściowe do wnętrza podprogramu ReadLn( Celsjusz ); GetTime( Godz, Min, Sek, SetneSek ); Parametry aktualne wywołania przekazują dane wyjściowe z wnętrza podprogramu Copyright Roman Simiński Strona : 29

Procedury i funkcje czasem może nie być parametrów WriteLn; ClrScr; Klawisz := ReadKey; Copyright Roman Simiński Strona : 30

Podprogramy jak to działa? Wywołanie podprogramu polega na: zawieszeniu wykonania aktualnie realizowanego bloku instrukcji, przygotowaniu parametrów dla podprogramu, skoku do podprogramu o określonej nazwie, wykonaniu instrukcji tego podprogramu, powrocie do miejsca wywołania, wznowieniu wykonania zawieszonego bloku instrukcji. Copyright Roman Simiński Strona : 31

Podprogramy jak to działa? Program główny Podprogram o nazwie WyswietlPowitanie Instrukcje podprogramu: Początek... Koniec Instrukcje programu głównego: Początek... WyswietlPowitanie... Koniec Copyright Roman Simiński Strona : 32

Podprogramy jak to działa? Przykład w języku Pascal Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Deklaracja procedury WyswietlPowitanie Program główny Dwie żelazne zasady korzystania z podprogramów: Każdy podprogram należy zadeklarować, zanim się go użyje. Aby zadeklarowany podprogram zadziałał, należy go wywołać. Copyright Roman Simiński Strona : 33

Kolejne etapy wykonania programu rozpoczęcie programu głównego Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Rozpoczęcie wykonania programu głównego Copyright Roman Simiński Strona : 34

Kolejne etapy wykonania programu wywołanie procedury Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Wywołanie procedury WyswietlPowitanie Copyright Roman Simiński Strona : 35

Kolejne etapy wykonania programu skok do podprogramu Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); Skok do podprogramu WyswietlPowitanie WyswietlPowitanie; End. Copyright Roman Simiński Strona : 36

Kolejne etapy wykonania programu wykonanie procedury Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); Rozpoczęcie wykonania podprogramu WyswietlPowitanie; End. Copyright Roman Simiński Strona : 37

Kolejne etapy wykonania programu wykonanie procedury Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Copyright Roman Simiński Strona : 38

Kolejne etapy wykonania programu wykonanie procedury Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Copyright Roman Simiński Strona : 39

Kolejne etapy wykonania programu wykonanie procedury Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Copyright Roman Simiński Strona : 40

Kolejne etapy wykonania programu zakończenie procedury Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); Zakończenie wykonania podprogramu WyswietlPowitanie; End. Copyright Roman Simiński Strona : 41

Kolejne etapy wykonania programu powrót z procedury Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Powrót z podprogramu Copyright Roman Simiński Strona : 42

Kolejne etapy wykonania programu dalszy ciąg programu Program PierwszaProcedura; Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); WyswietlPowitanie; End. Wykonanie dalszego ciągu programu..., czyli koniec ;) Copyright Roman Simiński Strona : 43

Anatomia procedury Podprogramy naśladują swoją strukturą program główny. Nagłówek programu i jego nazwa a nagłówek procedury i jej nazwa Program Przywitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); End. Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); Copyright Roman Simiński Strona : 44

Anatomia procedury, cd... Podprogramy naśladują swoją strukturą program główny. Instrukcje programu głównego a instrukcje procedury, tzw. ciało procedury. Program Przywitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); End. Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); Copyright Roman Simiński Strona : 45

Anatomia procedury, cd... Podprogram kończy średnik oddziela deklarację procedury od reszty programu. Program kończy znak kropki. a podprogram oddziela znak ; od reszty programu Program Przywitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); End. Procedure WyswietlPowitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); End ; Copyright Roman Simiński Strona : 46

Anatomia procedury, cd... W podprogramie można deklarować stałe, typy, zmienne. W każdym podprogramie można deklarować własne zmienne, stałe, typy. Program Przywitanie; Var JakasZmienna1, JakasZmienna2 : Real; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); End. Procedure WyswietlPowitanie; Var JakasZmienna1, JakasZmienna2 : Real; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); Copyright Roman Simiński Strona : 47

W podprogramach można deklarować kolejne podprogramy... Program Przywitanie; Procedure WyswietlPowitanie; Procedure PiszWitaj; WriteLn( 'Witaj w programie! ' ); Procedure CzekajNaEnter; WriteLn( 'Nacisnij Enter by kontynuowac' ); PiszWitaj; CzekajNaEnter; WyswietlPowitanie; End. Copyright Roman Simiński Strona : 48

No dobra, ale po co to wszystko... If For Case While Integer Real Char Boolean Instrukcje Typy proste Suma Dochody Dystans Paliwo Sin Cos Abs Succ Zmienne Funkcje WriteLn Write Read Procedury ReadLn Array Set File Record Typy złożone Copyright Roman Simiński Strona : 49

Dzięki procedurom można eliminować powtarzające się fragmenty kodu Program P1; { Jakies instrukcje... } Write( 'Nacisnij Enter' ); WriteLn(' by kontynuowac...' ); { Jakies instrukcje... } Write( 'Nacisnij Enter' ); WriteLn(' by kontynuowac...' ); { Jakies instrukcje... } Write( 'Nacisnij Enter' ); WriteLn(' by kontynuowac...' ); { Jakies instrukcje... } Write( 'Nacisnij Enter' ); WriteLn(' by kontynuowac...' ); { Jakies instrukcje... } Write( 'Nacisnij Enter' ); WriteLn(' by kontynuowac...' ); End. Program P2; Procedure CzekajNaEnter; Write( 'Nacisnij Enter' ); WriteLn(' by kontynuowac...' ); { Jakies instrukcje... } CzekajNaEnter; { Jakies instrukcje... } CzekajNaEnter; { Jakies instrukcje... } CzekajNaEnter; { Jakies instrukcje... } CzekajNaEnter; { Jakies instrukcje... } CzekajNaEnter; End. Copyright Roman Simiński Strona : 50

Pierwsza rola podprogramów Historycznie i technicznie pierwotna przyczyna wyodrębnienia podprogramów to eliminowanie powtarzających się fragmentów kodu. Dzięki podprogramom: Zwykle skraca się program zarówno kod źródłowy jak i wynikowy. Program staje się czytelniejszy. Modyfikacje programu stają się łatwiejsze. Łatwiejsze jest lokalizowanie i eliminowanie błędów. Program staje się podatniejszy na modularyzację. Łatwiej wyodrębnić zbiory spójnych podprogramów, stanowiące zalążek potencjalnych bibliotek. Wywołanie podprogramu, opracowanie i przekazanie parametrów oraz powrót z podprogramu to dodatkowe instrukcje maszynowe zatem instrukcje wpakowane do podprogramu wykonują się odrobinę wolniej. Jednak we większości typowych przypadków opóźnienie to jest nieznaczące. Copyright Roman Simiński Strona : 51

Wykorzystanie parametrów jako danych wejściowych Korzystanie z podprogramów to nie tylko cięcie kodu na fragmenty i zastępowanie jednakowych ciągów instrukcji wywołaniem odpowiedniego podprogramu. Podprogramy mogą być sparametryzowane. Dzięki parametrom można pisać uniwersalniejsze podprogramy, możliwe do zastosowania w różnych sytuacjach. Program P3; { Jakies instrukcje... } WriteLn( 'Nacisnij Enter by rozpoczac...' ); { Jakies instrukcje... } WriteLn( 'Nacisnij Enter by kontynuowac...' ); Trzy podobne lecz niejednakowe bloki instrukcji { Jakies instrukcje... } WriteLn( 'Enter konczy program...' ); End. Copyright Roman Simiński Strona : 52

Wykorzystanie parametrów jako danych wejściowych Program P4; Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by rozpoczac...' ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by kontynuowac...' ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Enter konczy program...' ); End. Copyright Roman Simiński Strona : 53

Wykorzystanie parametrów jako danych wejściowych Program P4; Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by rozpoczac...' ); ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by kontynuowac...' ); Wywołanie procedury PiszICzekajNaEnter { Jakies instrukcje... } PiszICzekajNaEnter( 'Enter konczy program...' ); End. Copyright Roman Simiński Strona : 54

Wykorzystanie parametrów jako danych wejściowych Program P4; Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); Parametr aktualny wywołania { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by rozpoczac...' ); ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by kontynuowac...' ); Wywołanie procedury PiszICzekajNaEnter { Jakies instrukcje... } PiszICzekajNaEnter( 'Enter konczy program...' ); End. Copyright Roman Simiński Strona : 55

Wykorzystanie parametrów jako danych wejściowych Program P4; Parametr formalny procedury Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); Parametr aktualny wywołania { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by rozpoczac...' ); ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by kontynuowac...' ); Wywołanie procedury PiszICzekajNaEnter { Jakies instrukcje... } PiszICzekajNaEnter( 'Enter konczy program...' ); End. Copyright Roman Simiński Strona : 56

Wykorzystanie parametrów jako danych wejściowych Program P4; Parametr formalny procedury Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); Parametr aktualny wywołania { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by rozpoczac...' ); ); { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by kontynuowac...' ); Wywołanie procedury PiszICzekajNaEnter { Jakies instrukcje... } PiszICzekajNaEnter( 'Enter konczy program...' ); End. Przekazanie parametru aktualnego wywołania do parametru formalnego Copyright Roman Simiński Strona : 57

Przekazywanie parametrów przez wartość Ten rodzaj przekazywania parametrów nazywa się przekazywaniem parametrów przez wartość. Przekazywanie parametrów przez wartość polega na skopiowaniu wartości parametru aktualnego wywołania do parametru formalnego procedury. Program P4; Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); Komunikat: Nacisnij Enter by rozpoczac... { Jakies instrukcje... } PiszICzekajNaEnter( 'Nacisnij Enter by rozpoczac...' ); ); { Jakies instrukcje... } End. Copyright Roman Simiński Strona : 58

Parametr formalny to zmienna komunikacyjna Parametr formalny to specjalna zmienna komunikacyjna, zadeklarowana wewnątrz podprogramu. Jej wartość ustalana jest na etapie wywołania podprogramu na podstawie parametru aktualnego wywołania. Patrząc z punktu widzenia wnętrza podprogramu: Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); Co mi tu znowu dzisiaj dali.... Wartość, która jest kopią parametru aktualnego wywołania Parametr formalny podprogramu Copyright Roman Simiński Strona : 59

Przekazywanie parametrów przez wartość Na etapie wywołania podprogramu wyznaczana jest wartość parametru aktualnego wywołania. Wyznaczona wartość jest kopiowana do parametru formalnego podprogramu. Operacje na parametrach formalnych wykonywane wewnątrz podprogramu nie przenoszą się na parametry aktualne. Parametry aktualne mogą być literałami, stałymi i zmiennymi. Copyright Roman Simiński Strona : 60

Ilustracja procesu przekazywania parametrów przez wartość Program Parametry1; Var I : Integer; Procedure Inc( A : Integer ); A := A + 1; I := 5; Inc( I ); Writeln( 'I = ', I ); End. I =? Copyright Roman Simiński Strona : 61

Ilustracja procesu przekazywania parametrów przez wartość Program Parametry1; Var I : Integer; Procedure Inc( A : Integer ); A := A + 1; I := 5; Inc( I ); Writeln( 'I = ', I ); End. I = 5 A to parametr formalny procedury Inc I to parametr aktualny wywołania procedury Inc Wywołanie Inc I 5 A Stan pamięci operacyjnej 5 Kopiowanie wartości parametru aktualnego IA do parametru formalnego Wykonanie Inc Stan pamięci operacyjnej I 5 A 6 5 A := A + 1 Inkrementacja parametru formalnego A Po wykonaniu Inc Stan pamięci operacyjnej I 5 A 6 Parametr A przestaje żyć Copyright Roman Simiński Strona : 62

Przekazywanie parametrów przez zmienną Na etapie wywołania podprogramu, parametr aktualny wywołania lokowany jest w tym samym miejscu pamięci operacyjnej co parametr formalny podprogramu. Operacje na parametrach formalnych wykonywane wewnątrz podprogramu przenoszą się na parametry aktualne. Parametry aktualne mogą być zmiennymi. Copyright Roman Simiński Strona : 63

Ilustracja procesu przekazywania parametrów przez zmienną Program Parametry1; Var I : Integer; Słowo kluczowe Var oznacza przekazywanie parametrów przez zmienną Procedure Inc( Var A : Integer ); A := A + 1; I := 5; Inc( I ); Writeln( 'I = ', I ); End. Wywołanie Inc Stan pamięci operacyjnej A to parametr formalny procedury Inc I to parametr aktualny wywołania procedury Inc Wykonanie Inc Stan pamięci operacyjnej Po wykonaniu Inc Stan pamięci operacyjnej I = 6 I 5 A 6 5 A 6 A := A + 1 Nałożenie parametru formalnego A na parametr aktualny I Inkrementacja parametru formalnego A Parametr A przestaje żyć Copyright Roman Simiński Strona : 64

Procedura bezparametrowa przykłady Procedure Przywitanie; WriteLn( 'Witaj w programie! ' ); WriteLn( 'Nacisnij Enter by kontynuowac' ); Procedure CelsjuszDoFahrenheit; Var Celsjusz, Fahrenheit: Real; Write( 'Podaj temperature w st. C: ' ); ReadLn( Celsjusz ); Fahrenheit := 1.8 * Celsjusz + 32.0; WriteLn( 'Temperatura w st. F: ', Round( Fahrenheit ) ); Copyright Roman Simiński Strona : 65

Procedura z parametrami wejściowymi przykłady Procedure PiszICzekajNaEnter( Komunikat : String ); WriteLn( Komunikat ); Procedure ObliczIWypiszSpalanie( Paliwo, Dystans : Real ); If Dystans = 0 Then WriteLn( Nie dokonam obliczen dla zerowego dystansu ) Else Write( Spalanie,( Paliwo * 100 ) / Dystans : 0 : 2 ); WriteLn( l/100 km ); Copyright Roman Simiński Strona : 66

Wykorzystanie parametrów jako danych wyjściowych podprogramu Problem napisać procedurę ReadInt, pozwalającą na wprowadzenie ze strumienia wyjściowego liczby typu Integer. Procedura ma niedopuścić do wpisania niepoprawnej liczby w przypadku błędnych danych ma być wyświetlony komunikat Błędna liczba, wprowadź jeszcze raz. Wczytywanie ma być powtarzane tak długo, aż zostanie wpisana prawidłowa liczb całkowita. Prawidłowa wartość ma zostać zapisana w zmiennej przekazanej jako parametr procedury. Procedura ma być uniwersalnym narzędziem do kontrolowanego wczytywania liczb typu Integer. Copyright Roman Simiński Strona : 67

Przykład wykorzystania procedury ReadInt Czego chcemy od procedury ReadInt: Program PrzykladUzyciaReadInt; Var StawkaZaDzien : Real; LiczbaDni : Integer; (* Miejsce na zdefiniowanie procedury ReadInt *) WriteLn; Write( 'Podaj liczbe dni roboczych: ' ); ReadInt( LiczbaDni ); StawkaZaDzien := 120; WriteLn( 'Wynagrodzenie: ', LiczbaDni * StawkaZaDzien : 0 : 2 ); WriteLn( 'Nacisnij Enter by zakonczyc...' ); End. Copyright Roman Simiński Strona : 68

Program prezentujący algorytm wczytywania liczby to już było Program WczytajLiczbeRealZKontrolaPoprawnosci; Var I : Integer; (* Zmienna robocza iteracji For *) Napis : String; (* Przechowuje wczytany napis *) Dlug : Integer; (* Przechowuje dlugosc napisu *) Blad : Integer; (* Numer blednego znaku w napisie *) Liczba : Integer; (* Zmienna numeryczna *) Repeat Write( 'Podaj liczbe calkowita: ' ); ReadLn( Napis ); Val( Napis, Liczba, Blad ); If Blad <> 0 Then WriteLn( 'wprowadzona liczba jest nieprawidlowa' ); Until Blad = 0; WriteLn( 'Wprowadzono liczbe: ', Liczba : 0 : 2 ); WriteLn( 'Nacisnij Enter by zakonczyc...' ); End. Copyright Roman Simiński Strona : 69

Przykładowa realizacja procedury ReadInt Procedure ReadInt( Var I : Integer ); Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Repeat ReadLn( Napis ); Procedura Val wstawia wyznaczoną liczbę do parametru I Val( Napis, I, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ); Until Blad = 0; Copyright Roman Simiński Strona : 70

Podprogramy powinny być skomentowane (*-------------------------------------------------------------------------- Procedura ReadInt Procedura wczytuje liczbe typu Integer, w przypadku wprowadzenia znakow niedozwolonych dla liczby calkowitej, procedura wyprowadza komunikat o bledzie i proponuje ponowne wprowadzenie liczby. Proces jest powtarzany az zostanie wpisana poprawna liczba calkowita. Wprowadzona wartosc jest wstawiana do parametru formalnego I przekazywanego przez zmienna. Parametry: Var I : do tego parametru zostanie wpisana wartosc wczytanej liczby. --------------------------------------------------------------------------*) Procedure ReadInt( Var I : Integer ); Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Repeat ReadLn( Napis ); Val( Napis, I, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ); Until Blad = 0; Copyright Roman Simiński Strona : 71

Funkcja, co to takiego? Program PrzykladUzyciaFunkcji; Var CenaNetto : Real; Deklaracja funkcji ObliczBrutto Function ObliczBrutto( Netto : Real ) : Real ; ObliczBrutto := Netto * 1.22; WriteLn; Write( 'Podaj cene netto: ' ); ReadLn( CenaNetto ); Wywołanie funkcji ObliczBrutto WriteLn( 'Do zaplaty z podatkiem VAT: ', ObliczBrutto( CenaNetto ) :0:2 ); WriteLn( 'Nacisnij enter by zakonczyc program...' ); End.` Copyright Roman Simiński Strona : 72

Deklaracja funkcja vs. procedura Program PrzykladUzyciaFunkcji; Var CenaNetto : Real; Function ObliczBrutto( Netto : Real ) : Real ; ObliczBrutto := Netto * 1.22; Funkcja ma inny nagłówek Nagłówek funkcji zawiera typ jej rezultatu WriteLn; Write( 'Podaj cene netto: ' ); ReadLn( CenaNetto ); WriteLn( 'Do zaplaty z podatkiem VAT: ', ObliczBrutto( CenaNetto ) :0:2 ); WriteLn( 'Nacisnij enter by zakonczyc program...' ); End.` Copyright Roman Simiński Strona : 73

Funkcja, przekazywanie parametrów Program PrzykladUzyciaFunkcji; Var CenaNetto : Real; Function ObliczBrutto( Netto : Real ) : Real ; ObliczBrutto := Netto * 1.22; Netto: 100.0 WriteLn; Write( 'Podaj cene netto: ' ); ReadLn( CenaNetto ); Przekazanie parametru WriteLn( 'Do zaplaty z podatkiem VAT: ', ObliczBrutto( CenaNetto ) :0:2 ); WriteLn( 'Nacisnij enter by zakonczyc program...' ); End.` Copyright Roman Simiński Strona : 74

Funkcja, wyznaczanie rezultatu Program PrzykladUzyciaFunkcji; Var CenaNetto : Real; Function ObliczBrutto( Netto : Real ) : Real ; ObliczBrutto := Netto * 1.22 ; 122.0 WriteLn; Write( 'Podaj cene netto: ' ); ReadLn( CenaNetto ); Wyznaczenie wartości rezultatu funkcji WriteLn( 'Do zaplaty z podatkiem VAT: ', ObliczBrutto( CenaNetto ) :0:2 ); WriteLn( 'Nacisnij enter by zakonczyc program...' ); End.` Copyright Roman Simiński Strona : 75

Funkcja, ustalanie rezultatu Program PrzykladUzyciaFunkcji; Var CenaNetto : Real; Function ObliczBrutto( Netto : Real ) : Real ; ObliczBrutto := Netto * 1.22 ; ObliczBrutto: 122.0 WriteLn; Write( 'Podaj cene netto: ' ); ReadLn( CenaNetto ); WriteLn( 'Do zaplaty z podatkiem VAT: ', ObliczBrutto( CenaNetto ) :0:2 ); WriteLn( 'Nacisnij enter by zakonczyc program...' ); End.` Przypisanie rezultatu do nazwy funkcji Copyright Roman Simiński Strona : 76

Funkcja, udostępnianie rezultatu Program PrzykladUzyciaFunkcji; Var CenaNetto : Real; Function ObliczBrutto( Netto : Real ) : Real ; ObliczBrutto := Netto * 1.22 ; Rezultat funkcji zastępuje jej wywołanie WriteLn; Write( 'Podaj cene netto: ' ); ReadLn( CenaNetto ); ObliczBrutto: 122.0 WriteLn( 'Do zaplaty z podatkiem VAT: ', ObliczBrutto( CenaNetto ) :0:2 ); WriteLn( 'Nacisnij enter by zakonczyc program...' ); End.` Copyright Roman Simiński Strona : 77

Funkcja, wykorzystanie rezultatu Program PrzykladUzyciaFunkcji; Var CenaNetto : Real; Function ObliczBrutto( Netto : Real ) : Real ; ObliczBrutto := Netto * 1.22 ; Rezultat funkcji zastępuje jej wywołanie WriteLn; Write( 'Podaj cene netto: ' ); ReadLn( CenaNetto ); ObliczBrutto: 122.0 WriteLn( 'Do zaplaty z podatkiem VAT: ', 122.0 :0:2 ); WriteLn( 'Nacisnij enter by zakonczyc program...' ); End.` Copyright Roman Simiński Strona : 78

ReadInt raz jeszcze procedura czy funkcja? ReadInt zrealizowane jako procedura:... Write( 'Podaj liczbe dni roboczych: ' ); ReadInt( LiczbaDni ); StawkaZaDzien := 120; WriteLn( 'Wynagrodzenie: ', LiczbaDni * StawkaZaDzien : 0 : 2 );... ReadInt może być zrealizowane jako funkcja:... Write( 'Podaj liczbe dni roboczych: ' ); LiczbaDni := ReadInt; StawkaZaDzien := 120; WriteLn( 'Wynagrodzenie: ', LiczbaDni * StawkaZaDzien : 0 : 2 );... Copyright Roman Simiński Strona : 79

ReadInt jako funkcja (*-------------------------------------------------------------------------- Funkcja ReadInt Funkcja wczytuje liczbe typu Integer, w przypadku wprowadzenia znakow niedozwolonych dla liczby calkowitej, funkcja wyprowadza komunikat o bledzie i proponuje ponowne wprowadzenie liczby. Proces jest powtarzany az zostanie wpisana poprawna liczba calkowita. Wprowadzona wartosc jest rezultatem funkcji. --------------------------------------------------------------------------*) Function ReadInt : Integer ; Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) I : Integer; (* Dodatkowa zmienna robocza *) Repeat ReadLn( Napis ); Typ wartości rezultatu funkcji Val( Napis, I, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ); Until Blad = 0; ReadInt := I ; Ustalenie wartości, która będzie rezultatem funkcji Copyright Roman Simiński Strona : 80

ReadInt jako procedura vs. ReadInt jako funkcja Procedure ReadInt( Var I : Integer ); Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Repeat ReadLn( Napis ); Val( Napis, I, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ); Until Blad = 0; Function ReadInt : Integer; Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) I : Integer; (* Dodatkowa zmienna robocza *) Repeat ReadLn( Napis ); Val( Napis, I, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ); Until Blad = 0; ReadInt := I; Copyright Roman Simiński Strona : 81

Anatomia procedury i funkcji Procedure NazwaProcedury( Parametry ); Ciało procedury; Function NazwaFunkcji( Parametry ) : TypRezultatu; Ciało funkcji zawierające: NazwaFunkcji := Rezultat; Copyright Roman Simiński Strona : 82

ReadInt raz jeszcze kontrola zakresu, procedura Procedure ReadInt( Var I : Integer ); Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Liczba : Real; (* Zmienna robocza o duzym zakresie *) Repeat Liczba := 0; ReadLn( Napis ); Val( Napis, Liczba, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ); If Liczba <> Trunc( Liczba ) Then Write( 'Tylko calowite, wprowadz jeszcze raz: ' ); Blad := 1; If ( Liczba > MaxInt ) Or ( Liczba < -MaxInt ) Then Write( 'Bledny zakres wartoci, wprowadz jeszcze raz: ' ); Blad := 1; If Blad = 0 Then I := Trunc( Liczba ); Until Blad = 0; Copyright Roman Simiński Strona : 83

ReadInt raz jeszcze kontrola zakresu, funkcja Function ReadInt : Integer; Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Liczba : Real; (* Zmienna robocza o duzym zakresie *) Repeat Liczba := 0; ReadLn( Napis ); Val( Napis, Liczba, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ); If Liczba <> Trunc( Liczba ) Then Write( 'Tylko calowite, wprowadz jeszcze raz: ' ); Blad := 1; If ( Liczba > MaxInt ) Or ( Liczba < -MaxInt ) Then Write( 'Bledny zakres wartoci, wprowadz jeszcze raz: ' ); Blad := 1; If Blad = 0 Then ReadInt := Trunc( Liczba ); Until Blad = 0; Copyright Roman Simiński Strona : 84

ReadInt raz jeszcze kontrola zakresu, funkcja, modyfikacja Function ReadInt : Integer; Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Liczba : Real; (* Zmienna robocza o duzym zakresie *) Repeat Liczba := 0; ReadLn( Napis ); Val( Napis, Liczba, Blad ); If Blad <> 0 Then Write( 'Bledna liczba, wprowadz jeszcze raz: ' ) Else If LiczbaOK( Liczba ) Then ReadInt := Trunc( Liczba ) Else Blad := 1; Until Blad = 0; Funkcja testująca poprawność liczby jako wartości całkowitej Copyright Roman Simiński Strona : 85

ReadInt raz jeszcze kontrola zakresu, funkcja, modyfikacja, cd... Function ReadInt : Integer; Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Liczba : Real; (* Zmienna robocza o duzym zakresie *) Function LiczbaOK( L : Real ) : Boolean; LiczbaOK := True; (* Zakladam, ze liczba jest poprawna *) If L <> Trunc( L ) Then Write( 'Tylko calowite, wprowadz jeszcze raz: ' ); LiczbaOK := False; If ( L > MaxInt ) Or ( L < -MaxInt ) Then Write( 'Bledny zakres wartoci, wprowadz jeszcze raz: ' ); LiczbaOK := False;... If LiczbaOK( Liczba ) Then... Najpierw zadeklaruj funkcję, potem jej używaj Copyright Roman Simiński Strona : 86

ReadInt raz jeszcze kontrola zakresu, funkcja, modyfikacja, cd... Function ReadInt : Integer; Var Napis : String; (* Przechowuje wczytany napis *) Blad : Integer; (* Numer blednego znaku w napisie *) Liczba : Real; (* Zmienna robocza o duzym zakresie *) Function LiczbaOK( L : Real ) : Boolean; LiczbaOK := True; (* Zakladam, ze liczba jest poprawna *) If L <> Trunc( L ) Then Write( 'Tylko calowite, wprowadz jeszcze raz: ' ); LiczbaOK := False; If ( L > MaxInt ) Or ( L < -MaxInt ) Then Write( 'Bledny zakres wartoci, wprowadz jeszcze raz: ' ); LiczbaOK := False;... If LiczbaOK( Liczba ) Then... Najpierw zadeklaruj funkcję, potem jej używaj Copyright Roman Simiński Strona : 87

Kilka przykładowych funkcji Function WartoscBrutto( Netto : Real ) : Real; WartoscBrutto := Netto * 1.22; Function IsDigit( C : Char ) : Boolean; IsDigit := ( C In [ 0.. 9 ] ); (* lub := ( C >= 0 ) And ( C <= 9 ) *) Function IsLetter( C : Char ) : Boolean; IsLetter := ( C In [ A.. Z, a.. z ] ); Function ObliczDelte( A, B, C : Real ) : Real; ObliczDelte := B * B 4 * A * C; Copyright Roman Simiński Strona : 88

Kilka przykładowych funkcji, cd... Function ToLower( C : Char ) : Char; If C In [ A.. Z ] Then (* lub ( C >= A ) And ( C <= Z ) *) ToLower := Chr( Ord( C ) + 32 ) (* 32 dla kodu ASCII *) Else ToLower := C; (* Nic nie rób to nie duża litera *) Function ToUpper( C : Char ) : Char; If C In [ a.. z ] Then (* lub ( C >= a ) And ( C <= z ) *) ToLower := Chr( Ord( C ) - 32 ) (* 32 dla kodu ASCII *) Else ToLower := C; (* Nic nie rób to nie duża litera *) Copyright Roman Simiński Strona : 89