Lekcja 14 – Procedury i funkcje

Lekcja 14 – Procedury i funkcje
4.2 - 5 ocen

Dużym przełomem w dziedzinie programowania jest wprowadzenie procedur i funkcji do programu. Zarówno jedno jak i drugie można rozumieć jako wydzieloną część programu, która uruchomi się gdy ją o to “poprosimy”. Dzięki temu taki sam kod, który ma się wykonywać w kilku miejscach, może zostać zawarty w jednym bloku i nie trzeba go kopiować wiele razy.

Między procedurą a funkcją jest jedna, bardzo użyteczna różnica. Gdy ma się wykonać tylko ciąg instrukcji (np writeln) należy użyć procedury, natomiast jeśli nasz kod ma na końcu jakiś wynik to warto zastosować wtedy funkcję. Dlaczego tak? Gdyż funkcja poprzez samą siebie potrafi zwrócić nam ten wynik.

Procedury i funkcje można także rozumieć jako podprogramy. Dzięki takiej “właściwości” mogą one posiadać własne zmienne (var), stałe (const) i typy (type).

W każdej procedurze i funkcji można dodać dowolną ilość argumentów wielu typów. Różne argumenty tego samego typu oddzielamy przecinkami, argumenty o różnych typach rozdzielamy średnikami.

 

Koniec suchej teorii, czas przejść do najprostszych przykładów. Zróbmy kompletnie bezsensowną procedurę, która napisze wprowadzonego do niej stringa.

W pierwszej linijce została zadeklarowana procedura o nazwie napisz, która przyjmuje tylko jeden argument s o typie string. Następnie możemy wprowadzić zmienne, które będą działały tylko w obrębie procedury/funkcji, lecz nasz program tego nie wymaga. W klamrze begin-end została umieszczona jedna instrukcja, która korzysta ze zmiennej, w której przekażemy tekst do wyświetlenia. Po tym wszystkim następuje część głównego programu. Jak widać znowu mamy klamrę begin-end, tym razem z kropką na końcu. W środku jest odwołanie do procedury poprzez jej nazwę, a w nawiasie podany string, który zostanie przekazany w zmiennej s w procedurze.

2
Funkcja równie bezsensowna co poprzednia procedura, lecz jest w niej wiele “pułapek”:
Linijka 1. Deklarujemy 2 zmienne, które będą działać w obrębie całego programu, zarówno w części głównej jak i w funkcji,
Linijka 3. Deklaracja funkcji o nazwie dodaj przyjmująca 2 zmienne o typie integer. Deklaracja każdej funkcji musi kończyć się określeniem jakiego typu ma być wynik funkcji,
Linijka 4. Deklaracja zmiennej wynik, która będzie działać tylko w obrębie funkcji,
Linijka 7. Przypisanie do nazwy funkcji wyniku, który ma zostać zwrócony po odwołaniu się do funkcji,
Linijka 15. Wyświetlenie wprowadzonych liczb oraz wyniku funkcji.

Na co należy zwrócić uwagę?

  • W powyższym przykładzie zamiast przekazywać nowych zmiennych (a, b) do funkcji mogliśmy operować na zmiennych liczba1 i liczba2
  • W głównej części programu nie ma możliwości odwołania się do zmiennej wynik, gdyż należy ona do funkcji i działa tylko w jej obrębie
 

Zarówno procedury jak i funkcje mają możliwość modyfikowania wprowadzanych do nich argumentów. Aby wyraźnie to zobrazować warto stworzyć prosty przykład.

3
Do procedury przekazaliśmy zmienną liczba. W procedurze ta zmienna nazywa się a i do tej zmiennej wczytujemy dane. Jednak po wczytaniu cyfry do zmiennej a nie została ona przekazana do zmiennej liczba. Dzieje się tak dlatego, że działamy na tymczasowej zmiennej a, która została stworzona na czas istnienia procedury. Aby zniwelować ten problem należy dokonać drobnej korekty:

Dodając var przed nazwę zmiennej sprawiamy, że będziemy wtedy operować na zmiennej obowiązującej w całym programie (w tym wypadku zmienna ta to liczba). Wynik zarówno w procedurze jak i w głównym programie będzie tak sam.

”Następna