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

Podobne dokumenty
Wprowadzenie do programowania w VBA

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.

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

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

Algorytmika i Programowanie VBA 1 - podstawy

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

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

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Instrukcje cykliczne (pętle) WHILE...END WHILE

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Instrukcje sterujące. Programowanie komputerowe

Wykład 5: Klasy cz. 3

VISUAL BASIC. deklaracja nazwa As typ_zmiennej. deklaracja Dim, Private zasięg lokalny. - Public zasięg globalny Liczby całkowite: BYTE [0..

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

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

LibreOffice Calc VBA

Algorytmy i struktury danych

Pętle instrukcje powtórzeo

Rekurencja (rekursja)

Programowanie w języku Python. Grażyna Koba

Ten odcinek Akademii PC Kuriera poświęcony zostanie tworzeniu i wykorzystaniu funkcji i procedur w języku Visual Basic.NET.

Materiały do laboratorium MS ACCESS BASIC

Tablice. Jones Stygar na tropie zmiennych

Programowanie w Turbo Pascal

Wykład 8: klasy cz. 4

Programowanie Delphi obliczenia, schematy blokowe

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

INSTRUKCJA SKOKU GOTO

Wprowadzenie do Pakietu R dla kierunku Zootechnika. Dr Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

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

Technologia informacyjna programowanie Janusz Uriasz

ZASADY PROGRAMOWANIA KOMPUTERÓW

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Instalacja Pakietu R

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

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK.

Język C++ zajęcia nr 2

Programowanie w VB Proste algorytmy sortowania

Podprogramy. Procedury

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Właściwości i metody obiektu Comment Właściwości

Pascal - wprowadzenie

Ściągawka z funkcji i właściwości systemowych VBA. Opis działania i parametrów. Nazwa funkcji. Składnia zwracanej wartości

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Automatyzacja pracy w AutoCAD

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Cw.12 JAVAScript w dokumentach HTML

Zmienne, stałe i operatory

Laboratorium Programowania Kart Elektronicznych

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

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

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

Visual Basic for Application (VBA)

Rozdział 4 KLASY, OBIEKTY, METODY

Języki programowania zasady ich tworzenia

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

Funkcje i Procedury. Wyrazenien

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

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Laboratorium Programowania Kart Elektronicznych

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Visual Basic for Applications. Wstęp

3 Przygotował: mgr inż. Maciej Lasota

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Lekcja 6: Pascal. Procedura i funkcja

1 Podstawy c++ w pigułce.

Obliczenia iteracyjne

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

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

Visual Basic for Application (VBA)

1. Wypisywanie danych

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

4.1. Analiza AWN jest dokonywana na poziomie VBA

1 Algorytmy. Algorytmy i VBA. 1. Zapoznaj się z symboliką schematów blokowych.

Procedury i funkcje składowane

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

Programowanie strukturalne i obiektowe. Funkcje

Paradygmaty programowania

Visual Basic dla AutoCAD

Klasa bazowa i klasy potomne - doskonalenie umiejtnoci projektowania i wykorzystania klas (45 min)

Visual Basic for Application (VBA)

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

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

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ć

PROGRAMOWANIE MAKR W PROGRAMIE EXCEL W JĘZYKU VISUAL BASIC

PARADYGMATY PROGRAMOWANIA Wykład 4

Wstęp do programowania

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

Aplikacje w środowisku VBA. Visual Basic for Aplications

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

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Transkrypt:

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

Procedury i funkcje Wprowadzenie Budowa procedur i funkcji Przekazywanie parametrów Funkcje wbudowane Rekurencja 2

Wprowadzenie W czasie tworzenia programu zwykle wielokrotnie korzysta się z takich samych ciągów instrukcji. W języku VBA taki ciąg można zdefiniować osobno. Mając te definicje, programista - zamiast powtarzać takie same ciągi instrukcji - powołuje się na odpowiednią definicję. Definicje te nazywamy procedurami, a powołania się na nie w programie - wywołaniami procedur. 3

Wprowadzenie W języku VBA można opisywać procedury w dwóch postaciach: 1. umożliwiającej podobne użycie procedury jak funkcji matematycznej; mówimy wtedy, że jest to procedura funkcyjna (funkcja); 2. umożliwiającej wywołanie procedury jako osobnej instrukcji. Procedurą (funkcją) nazywamy wyodrębnioną część programu, stanowiącą pewną całość, mającą jednoznaczną nazwę i ustalony sposób wymiany danych z pozostałymi częściami programu. 4

Budowa procedury i funkcji Różnica między procedurą a funkcją polega na sposobie przekazywania wartości. Zadaniem procedury jest wykonanie pewnej sekwencji instrukcji w celu obliczenia jednej lub kilku wartości, natomiast funkcja służy do obliczenia jednej wartości. Zaletą funkcji jest możliwość bezpośredniego korzystania z niej w formułach tak samo jak ze zmiennych. W przeciwieństwie do procedury funkcyjnej, która zwraca wartość, procedura Sub nie może być używana w wyrażeniach. 5

Budowa procedury i funkcji Procedura zaczyna się od instrukcji deklaracji procedury Sub i kończy instrukcją End Sub. [Private Public] Sub nazwa_procedury ([argumenty]) [instrukcje] [Exit Sub] [instrukcje] End Sub 6

Budowa procedury i funkcji Funkcja zaczyna się od instrukcji deklaracji funkcji Function i kończy instrukcją End Function. [Private Public] Function nazwa_funkcji ([argumenty]) [as typ] [instrukcje] [nazwa_funkcji =Wartość] [Exit Function] [instrukcje] [nazwa_funkcji =Wartość] End Function 7

Budowa procedury i funkcji Instrukcja deklaracji procedury nadaje nazwę procedurze, wskazuje jej początek i koniec oraz wymienia wszystkie argumenty, jakie mogą być przekazywane pomiędzy procedurą a wołającym ją programem. Instrukcja End Sub wskazuje koniec procedury. Wszystko co się znajduje między tymi dwiema instrukcjami stanowi treść procedury, odpowiedzialną za wykonanie zadania przypisanego tej procedurze. Lista argumentów stanowi połączenie między procedurą wołającą a procedurą wołaną. 8

Budowa procedury i funkcji Procedura Private Sub jest dostępna tylko w module, w którym została zadeklarowana. Procedura Public Sub jest dostępna we wszystkich procedurach i we wszystkich modułach w aplikacji. Cały wykonywalny kod musi być umieszczony wewnątrz procedur. Nie można stworzyć procedury Sub wewnątrz innej procedury Sub. Słowo kluczowe Exit Sub jest używane do bezwarunkowego zakończenia wykonywania procedury Sub. Wykonywanie programu jest kontynuowane od rozkazu następnego za wywołaniem procedury Sub. Dowolna liczba rozkazów Exit Sub może znajdować się w dowolnych miejscach wewnątrz procedury. 9

Budowa procedury i funkcji Parametry (argumenty) umieszczone w nagłówku procedury (funkcji) nazywamy parametrami formalnymi, a parametry użyte w miejscu wywołania - parametrami aktualnymi. Liczba parametrów aktualnych musi być równa liczbie parametrów formalnych. Z reguły typ parametrów aktualnych musi być zgodny z typem odpowiednich parametrów formalnych (za wyjątkiem, gdy parametry przekazywane są przez wartość). Nazwy zmiennych w liście argumentów powinny być oddzielone od siebie przecinkami. 10

Budowa procedury i funkcji lista argumentów [Optional] [ByVal ByRef] nazwa_arg [As typ] [=domyślna_wartość] Optional (opjconalny); słowo kluczowe, określające, że argument nie jest wymagany. Jeżeli zostanie użyty, wszystkie argumenty listy muszą być również opcjonalne i zadeklarowane przy użyciu słowa Optional. ByVal (opcjonalne); określa, że wartość zostanie przekazana przez wartość. ByRef (opcjonalne, domyślne); określa, że wartość zostanie przekazana przez referencję. domyślna_wartość (opcjonalne); wartość domyślna argumentu. Może to być stała lub wyrażenie stałe, dotyczy tylko argumentów Optional. 11

Budowa procedury i funkcji Sub Przyklad(k As Integer) 'początek procedury If k=0 Then 'sprawdzenie czy k=0 Exit Sub 'jeżeli tak to opuść procedurę Else k=k*5 'jeżeli nie to wykonaj obliczenie End If End Sub 'koniec procedury Function Przyklad(k As Integer, Optional b As Byte = 3) If k=0 Then Przyklad = b Exit Function opuść procedurę Else k = k * 7 Przykład = k 'wykonaj obliczenie i zwróć wartość End If End Function 'koniec procedury 12

Budowa procedury i funkcji Zmienne używane wewnątrz procedur Sub dzielą się na dwie kategorie: lokalne - zadeklarowane wewnątrz procedury i zewnętrzne - zadeklarowana poza procedurą. Zmienne, które są zadeklarowane wewnątrz procedury są zawsze lokalne dla procedury. Zmienne, które są używane w procedurze, a nie są w niej zadeklarowane są również lokalne, z wyjątkiem tych, które zostały zadeklarowane poza procedurą (na wyższym poziomie). Może wtedy powstać konflikt nazw, jeżeli procedura odnosi się do niezadeklarowanej zmiennej, która ma taką samą nazwę jak inna procedura, zmienna lub stała. Zostanie przyjęte, że procedura odwołuje się do nazwy na poziomie modułu. Aby uniknąć takich konfliktów należy deklarować zmienne. 13

Budowa procedury i funkcji Aby wywołać procedurę wystarczy umieścić jej nazwę wewnątrz innej procedury w miejscu, w którym ma nastąpić jej wykonanie. Jeśli wołana procedura wymaga podania argumentów, należy umieścić je po nazwie procedury. Opcjonalnie można użyć Call nazwa_proc. W podanym poniżej przykładzie procedura PROC1 woła procedurę PROC2. Sub Proc1() Proc2 jakieś instrukcje Call Proc2 End Sub Sub Proc2() treść procedury End Sub 14

Przekazywanie parametrów Wywołanie procedury (funkcji) powoduje następujący ciąg akcji: obliczane są wartości parametrów przekazywanych przez wartość; parametry przekazywane przez zmienną są zawsze identyfikatorami zmiennych, kolejnym parametrom formalnym z nagłówka procedury (funkcji) przypisywane są wartości lub nazwy kolejnych parametrów aktualnych, dla tak określonych parametrów są wykonywane obliczenia zawarte w instrukcjach procedury (funkcji). 15

Przekazywanie parametrów W zależności od sposobu przekazywania wartości do procedury (funkcji) tzn. sposobu zastępowania parametrów formalnych argumentami, wyróżniamy dwa rodzaje parametrów: 1. parametry przekazywane przez wartość, 2. parametry przekazywane przez zmienną określonego typu. Deklaracje tych parametrów mają postać: ByVal NazwaArg [As typ] ByRef NazwaArg [As typ] 16

Przekazywanie parametrów Parametry przekazywane przez wartość Jeżeli parametr przekazywany jest przez wartość, to w wywołaniu procedury (funkcji) odpowiadający mu argument musi być wyrażeniem. W chwili wywołania procedury (funkcji) parametrom formalnym przypisywane są, obliczone właśnie w tym momencie, wartości odpowiednich parametrów aktualnych. Jeśli parametrem jest zmienna i w treści procedury zmienimy jej wartość, to po wyjściu z procedury wartość tej zmiennej nie ulegnie zmianie tj. będzie taka sama jak przed wywołaniem procedury. 17

Przekazywanie parametrów Parametry przekazywane przez wartość Jako że parametrem aktualnym musi być wyrażenie, w tym przypadku wywołanie procedury zmiana(y) mogłoby mieć postać: zmiana(3+x*2); zmiana(3); W pierwszym przypadku, w momencie wywołania procedury y ma wartość 3+x*2, w drugim 3. 18

Przekazywanie parametrów Parametry przekazywane przez zmienną Argumenty odpowiadające parametrom przekazywanym przez zmienną muszą być zmiennymi, przy czym typ argumentu musi być identyczny z typem parametru formalnego. Po wyjściu z procedury (funkcji) parametr aktualny będzie miał wartość taką jak odpowiadający mu parametr formalny w chwili zakończenia działania procedury. Jeśli więc chcemy przekazać na zewnątrz procedury wartość parametru, który zmienia się w trakcie działania procedury, to może się to odbyć tylko wtedy, gdy parametr przekazywany jest przez zmienną. 19

Przekazywanie parametrów Procedury bez parametrów Gdy w programie pewien ciąg instrukcji powtarza się często lub chcemy zwiększyć czytelność programu, można ten ciąg zastąpić procedurą bez parametrów. Procedurę taką wywołujemy przez podanie nazwy. W procedurach bez parametrów można wykonywać działania na zmiennych (stałych) globalnych oraz na zmiennych i stałych lokalnych w danej procedurze. Po wykonaniu procedury bez parametrów zmienne globalne mają wartości takie, jakie zostały im nadane w tej procedurze, natomiast zmienne lokalne nie są dostępne poza tą procedurą. 20

Przekazywanie parametrów Przy definiowaniu i wywoływaniu procedur (funkcji) należy przestrzegać poniższych zasad: Zmienne mające w danej procedurze charakter lokalny, należy deklarować jako obiekty lokalne. W definicji procedury wskazane jest umieszczanie (najlepiej bezpośrednio po nagłówku) komentarzy objaśniających cel procedury, jej parametry oraz zmienne lokalne i nielokalne. 21

Przekazywanie parametrów Wybór rodzaju parametrów (tj. sposobu ich przekazywania) powinien być dokonany wg następujących reguł: Jeśli parametr służy do przekazywania otoczeniu procedury efektów jej działania, to parametr ten musi być przekazany przez zmienną, a co za tym idzie, odpowiadający mu argument musi być zmienną, W pozostałych przypadkach stosujemy przekazywanie parametru przez wartość. Jest ono zalecane jako bezpieczniejsze, gdyż chroni zmienne nielokalne przed niepożądaną zmianą wewnątrz procedury. Unikamy przenoszenia przez wartość dużych struktur danych, gdyż przy każdym wywołaniu procedury rezerwowana jest pamięć, w której przechowywana jest wartość argumentu. 22

Przekazywanie parametrów Function Przyklad(ByVal k As Integer, Optional b As Byte = 3) If k = 0 Then Przyklad = b Exit Function 'opuść procedurę Else k = k * 7 Przyklad = k 'wykonaj obliczenie i zwróć wartość End If End Function 'koniec procedury Sub przekazywanie_argumentow() Dim x As Integer Dim y As Single x = InputBox("Podaj x") y = Przyklad(x) + 10 MsgBox "x= " & Str(x) & " y= " & Str(y) y = Przyklad(x,10) + 10 MsgBox "x= " & Str(x) & " y= " & Str(y) End Sub 23

Funkcje wbudowane Funkcje matematyczne Funkcje daty i czasu Funkcje tekstowe Funkcje formatujące Funkcje wejścia-wyjścia Funkcje konwersji danych Funkcje testujące dane Inne funkcje 24

Funkcje wbudowane - matematyczne Rnd liczba losowa <0, 1) Abs(X) wartość bezwzględna Sgn(X) znak liczby Fix(X) część całkowita (po usunięciu części ułamkowej) Int(X) część całkowita (po zaokrągleniu w dół) Log(X) logarytm naturalny LogN(X) = Log(X)/Log(N) logarytm o podstawie N Exp(X) e do potęgi Sqr(X) pierwiastek kwadratowy Sin(X) sinus Cos(X) cosinus Tan(X) tangens 25

Funkcje wbudowane - matematyczne Fix(X) część całkowita (po usunięciu części ułamkowej) Dim varliczba As Variant varliczba=fix(99.2) 'varliczba=99 varliczba=fix(99.8) 'varliczba=99 varliczba=fix(-99.2) 'varliczba=-99 varliczba=fix(-99.8) 'varliczba=-99 Int(X) część całkowita (po zaokrągleniu w dół) Dim varliczba As Variant varliczba=int(99.2) 'varliczba=99 varliczba=int(99.8) 'varliczba=99 varliczba=int(-99.2) 'varliczba=-100 varliczba=int(-99.8) 'varliczba=-100 26

Funkcje wbudowane - tekstowe Format Len Trim Left Right Space String formatowanie łańcuchów zwraca długość łańcucha usuwa początkowe i końcowe spacje zwraca część łańcucha od lewej strony zwraca część łańcucha od prawej strony zwraca łańcuch wypełniony spacjami zwraca łańcuch wypełniony znakami 27

Funkcje wbudowane - tekstowe Format(Wyrażenie[, Format]) formatowanie łańcuchów varstr = Format(5459.4, "##,##0.00") 'zwraca "5,459.40" varstr = Format(334.9, "###0.00") 'zwraca "334.90" varstr = Format(5, "0.00%") 'zwraca "500.00%" varstr = Format("HELLO", "<") 'zwraca "hello" varstr = Format("To jest TO", ">") 'zwraca "TO JEST TO" Len(Łańcuch) zwraca długość łańcucha strstring= abcdef" vardlugosc=len(strstring) Trim(Łańcuch) usuwa początkowe i końcowe spacje Dim varnapis As Variant varnapis=trim(" - tekst - ") 'varnapis="- tekst -" 28

Funkcje wbudowane - tekstowe Left(Łańcuch, Długość) zwraca część łańcucha od lewej strony Dim varnapis As Variant varnapis=left("jasio idzie do kina",7) 'varnapis="jasio i" varnapis=left("jasio idzie do kina",60) 'varnapis="jasio idzie do kina" Right(Łańcuch, Długość) zwraca część łańcucha od prawej strony Space(Długość) zwraca łańcuch wypełniony spacjami varnapis= Witaj" & Space(5) & Jasiu" 'varnapis= Witaj Jasiu" String(Długość, Znak) zwraca łańcuch wypełniony znakami Dim varnapis As Variant varnapis=string(7,42) varnapis=string(4,"jasio") 'varnapis="*****" 'varnapis="jjjj" 29

Funkcje wbudowane konwersji danych Chr(KodZnaku) kod ASCII na znak Dim varznak As String varznak=chr(65) ' varznak="a" varznak=chr(97) ' varznak="a" Str(Wartość) liczba na tekst Dim varstring As String varstring=str(459) 'varstring=" 459" varstring=str(-459.65) 'varstring="-459.65" varstring=str(459.001) 'varstring=" 459.001" 30

Funkcje wbudowane konwersji danych Val(Łańcuch) tekst na liczbę Dim varliczba As Single varliczba=val("459") 'varliczba=459 varliczba=val("45 9. 65") 'varliczba=459.65 varliczba=val("459 i 001") 'varliczba=459 CInt(Wyrażenie) wartość na Integer Argument Wyrażenie jest wymagany. Może to być dowolne poprawne wyrażenie numeryczne w zakresie 32,768 do 32,767; część ułamkowa jest zaokrąglana. Dim vardouble As Variant, varint As Variant vardouble=2125.5678 varint=cint(vardouble) 'varint=2126 31

Rekurencja a) tradycyjnie (iteracyjnie): Function silnia1 (n As byte) dim i As byte dim s As long if n>33 then silnia1 = 0 else if (n=0) or (n=1) then silnia1 = 1 else s=1 for i=2 to n s = s * i next i silnia1 = s end if end if End Function 32

Rekurencja b) rekurencyjnie: Function silnia2 (n As byte) if n>33 then silnia2=0 else if n=0 then silnia2=1 else silnia2=n*silnia2(n-1) end if end if end function 33

Rekurencja Każdą procedurę (funkcję), która jest zapisana rekurencyjnie można zapisać iteracyjnie. Wybór sposobu zapisu procedury zależy od programisty. Warto się jednak zawsze zastanowić, który sposób jest efektywniejszy. Z reguły zapis iteracyjny jest naturalny i zastąpienie go zapisem rekurencyjnym jest kłopotliwe. Porównując funkcje z dwóch poprzednich przykładów widzimy, że funkcja silnia1 jest w zapisie dużo krótsza niż silnia, ale obliczenia będą dłużej wykonywane, gdyż każdorazowo do obliczenia wartości kolejnej silni są obliczane wartości wszystkich poprzednich silni. Natomiast przy zapisie iteracyjnym do obliczenia wartości silni wykorzystujemy wartości poprzedniej silni zapamiętanej w zmiennej s. 34