• Nie Znaleziono Wyników

Programowanie proceduralne

N/A
N/A
Protected

Academic year: 2021

Share "Programowanie proceduralne"

Copied!
35
0
0

Pełen tekst

(1)

Programowanie proceduralne

INP001210WL

rok akademicki 2018/19 semestr letni

Wykład 2

Karol Tarnowski

karol.tarnowski@pwr.edu.pl

A-1 p. 411B

(2)

• Zasięg zmiennych – zmienne lokalne i globalne

• Przekazywanie argumentów do funkcji

• Przekazywanie tablic do funkcji

• Zwracanie wartości przez funkcję

• Rekurencja

Plan prezentacji

(3)

Zmienne lokalne i globalne

(4)

Zmienne lokalne i globalne

(5)

Zmienne lokalne i globalne

• Zmienna lokalna jest zdefiniowana wewnątrz klamry

• Zasięg zmiennej lokalnej jest ograniczony

do tej klamry – najczęściej do funkcji

(6)

Zmienne lokalne i globalne

• Zmienna globalna jest zdefiniowana poza funkcją

• Zasięg zmiennej globalnej rozciąga się do

końca pliku

(7)

Zmienne lokalne i globalne

(8)

Zmienne lokalne i globalne

(9)

Przekazywanie argumentów

Istnieją dwa sposoby przekazywania argumentów do funkcji:

• przez kopię (przez wartość),

• przez wskaźnik (przez adres).

(10)

Przekazywanie argumentów przez kopię

Do wywoływanej funkcji przekazywana jest wartość zmiennej, a nie sama zmienna;

zmienna jest kopiowana.

(11)

Przekazywanie argumentów

przez kopię

(12)

Przekazywanie argumentów

przez kopię

(13)

Przekazywanie argumentów przez wskaźnik

Do wywoływanej funkcji przekazywany jest adres zmiennej. Oznacza to, że zmiany

wartości zmiennej wykonywane są na

oryginalnej zmiennej.

(14)

Przekazywanie argumentów

przez wskaźnik

(15)

Przekazywanie argumentów

przez wskaźnik

(16)

Przekazywanie argumentów przez wskaźnik

Wyjaśnienie tajemnicy funkcji scanf().

Zmienne, do których funkcja scanf() wpisuje dane, przekazywane są przez wskaźnik.

(17)

Przekazywanie tablicy do funkcji

Tablica jest zawsze przekazywana do funkcji

przez adres.

(18)

Przekazywanie tablicy do

funkcji

(19)

Przekazywanie tablicy do

funkcji

(20)

Przekazywanie tablicy do funkcji

Tablica jest stałą wskaźnikową pokazującą na początek obszaru pamięci. Zatem do

funkcji jest przekazywany adres.

(21)

Przekazywanie tablicy do

funkcji

(22)

Zwracanie wyniku przez funkcję

• Do zwracania wartości przez funkcje służy instrukcja return.

• Funkcja może zwracać tylko jedną wartość.

• Funkcja zwraca wartość typu określonego

w deklaracji (domyślnie int).

(23)

Zwracanie wyniku przez

funkcję

(24)

Zwracanie wyniku przez funkcję

Wyjaśnienie tajemnicy polecenia return 0;

• Funkcja główna programu też zwraca wynik.

• Funkcja main() powinna mieć typ int.

• Prawidłowe zakończenie programu oznacza się najczęściej wartością 0.

(25)

Zwracanie wyniku przez

funkcję

(26)

Definicja rekurencyjna funkcji

• Definicja funkcji, która zawiera odwołanie do tej funkcji, nazywana jest definicją

rekurencyjną.

(27)

Przykłady definicji rekurencyjnych

• Wyrażenie na sumę elementów tablicy zapisane bez wykorzystania rekurencji

• oraz w wersji rekurencyjnej:

 

1

0

,

 

n i

i

S t n t

 

1

 

0 dla 1

, .

, 1 w p.p.

 

  

n

  S t n n

t S t n

(28)

Przykłady definicji rekurencyjnych

• ciąg Fibonacciego

     

0 dla 0

1 dla 1

1 2 dla 1

n

fib n n

fib n fib n n

 

  

    

(29)

Przykłady definicji rekurencyjnych

• silnia

 

1 dla 0

! 1 ! dla 0

n n

n n n

 

     

(30)

Przykłady definicji

rekurencyjnych

(31)

Przykłady definicji rekurencyjnych

• największy wspólny dzielnik

   

dla 0 nwd ,

nwd mod , dla 0

 

   

n k

k n n k k k

(32)

Definicja rekurencyjna funkcji

• Zaletą rekurencji jest przejrzystość algorytmu.

• Stosowanie rekurencji może prowadzić do wzrostu złożoności obliczeniowej,

zwiększa złożoność pamięciową, może prowadzić do wielokrotnego

rozwiązywania tego samego podproblemu.

• W definicji rekurencyjnej należy określić

warunek zatrzymania.

(33)

• Zmienne mogą mieć ograniczony zakres widoczności – lokalny i globalny. Rozważ jakiego typu zmiennej używać - prawie zawsze zmienne lokalne będą

bezpieczniejsze.

Absolutne minimum (1)

(34)

• Podstawowym sposobem przekazywania zmiennych do funkcji jest przekazywanie przez wartość – funkcja nie zmieni

oryginalnej zmiennej.

• Można przekazywać zmienne przez adres – jeżeli chcesz, aby funkcja modyfikowała zmienną.

• Tablice są zawsze przekazywane przez adres.

Absolutne minimum (2)

(35)

• Funkcja może zwracać jedną wartość.

Typ funkcji określony jest w deklaracji.

• Funkcja główna to int main().

• Rekurencja – zwiększa przejrzystość algorytmu, musi zawierać warunek zatrzymania.

Absolutne minimum (3)

Cytaty

Powiązane dokumenty

• Operator in (not in) można wykorzystać do sprawdzenia, czy wskazany ciąg zawiera się (nie zawiera się) w innym. ciag_tekstowy1

rok akademicki 2019/20 semestr letni..

• Funkcje wywołuje się pisząc jej nazwę oraz nawiasy klamrowe z argumentami przekazywanymi do funkcji.

Jeśli element wskazywany przez indeks jest większy od maksimum, to przypisz maksimum wartość elementu wskazywanego przez indeks 5.. • Przypisz maksimum_indeks

• Dostęp do struktur wskazywanych przez wskaźnik uzyskuje się operatorem ->.

• Polem struktury może być wskaźnik na taką strukturę – tego typu struktury. nazywamy

• Jeżeli nie można otworzyć pliku funkcja fopen() zwraca wskaźnik zerowy NULL.. • Jeżeli operacja zamknięcia pliku się nie powiedzie funkcja fclose()

• Po uruchamieniu programu w trybie debugowania mamy możliwość włamania się do niego. • Menu Debug >>