Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Podobne dokumenty
Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Funkcja (podprogram) void

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Wskaźniki. Programowanie Proceduralne 1

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Wstęp do Programowania, laboratorium 02

Zmienne, stałe i operatory

Funkcje matematyczne w C. Programowanie w C Marek Pudełko

Wyrażenia arytmetyczne

Wstęp do programowania

Instrukcje sterujące. Programowanie Proceduralne 1

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Tablice, funkcje - wprowadzenie

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

Podstawy programowania C. dr. Krystyna Łapin

2 Przygotował: mgr inż. Maciej Lasota

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Język C zajęcia nr 11. Funkcje

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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

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

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

5 Przygotował: mgr inż. Maciej Lasota

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

Wstęp do programowania

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

Wprowadzenie do programowania w języku C

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

1 Podstawy c++ w pigułce.

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

Co nie powinno być umieszczane w plikach nagłówkowych:

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

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Język ANSI C. Pierwsze starcie. Programowanie Proceduralne 1

Język C, tablice i funkcje (laboratorium)

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Języki i metodyka programowania. Wprowadzenie do języka C

Podział programu na moduły

Wykład 1

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

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

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

Język C, tablice i funkcje (laboratorium, EE1-DI)

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

3 Przygotował: mgr inż. Maciej Lasota

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

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Programowanie strukturalne i obiektowe. Funkcje

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Podstawy Programowania. Składnia wyrażeń i instrukcji, złożoności obliczeniowej, operacje wejścia i wyjścia, definicja

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

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

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Proste algorytmy w języku C

Języki programowania wysokiego poziomu. PHP cz.2.

Programowanie Proceduralne

Wskaźniki w C. Anna Gogolińska

Programowanie - wykład 4

PROGRAMOWANIE w C prolog

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Część 4 życie programu

Język ANSI C. Pierwsze starcie. Programowanie Proceduralne 1

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

// Funkcja glowna int main() { // zmienne int kont='t'; double x1, y1, x2, y2, x3, y3, a, b, c, p1, p2, p3, pole, ha, hb, hc;

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Stałe. Funkcje standardowe. Niektóre stałe i funkcje z pliku nagłówkowego math.h. M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2

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

ZMIENNE P R O G R A M O W A N I E C + +

IX. Wskaźniki.(3 godz.)

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Tablice, funkcje, wskaźniki - wprowadzenie

Jerzy Nawrocki, Wprowadzenie do informatyki

Podstawy Programowania.

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 2

wykład I uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Wstęp do języka C wykład I dr Jarosław Mederski Spis Ogólne informacje

1 Podstawy c++ w pigułce.

Laboratorium Programowanie Obrabiarek CNC. Nr H7

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

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

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Język ludzki kod maszynowy

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

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

KURS C/C++ WYKŁAD 1. Pierwszy program

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Proste algorytmy w języku C

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Transkrypt:

Funkcje czyli jak programować proceduralne. Programowanie Proceduralne 1

Struktura programu w C # include <s t d i o. h> # define PI 3. 1415 float g =. 5 ; float kwadrat ( float x ) { return x x ; } int main ( ) { float x, y ; x = PI g ; y = kwadrat ( x ) ; Dyrektywy preprocesora Zmienne globalne Definicja funkcji Funkcja główna Zmienne lokalne Instrukcje programu } return 0 ; Programowanie Proceduralne

Funkcje = podprogramy Podprogram wydzielony fragment programu (kodu) zawierający instrukcje do wielokrotnego użytku Dekompozycja złożonego problemu na prostsze Przejrzystość Unikanie powtórzeń kodu Uniwersalność - jak najmniejszy związek z konkretnym kodem Biblioteki funkcji Nic za darmo - wywołanie funkcji to dodatkowy koszt czasu i pamięci Rekurencja(Rekurencja(Rekurencja(Rekurencja(...)))) Programowanie Proceduralne 3

Deklaracja funkcji (prototyp) Anatomia funkcji Zapowiedź użycia funkcji - określenie nazwy funkcji, typów argumetów i typu wartości zwracanej typ identyfikator(typ arg1, typ arg,... ); Definicja funkcji Deklaracja parametrów i instrukcje podprogramu (ciało funkcji). typ identyfikator(typ arg1, typ arg,... ) { deklaracje zmiennych lokalnych instrukcje return wartość; } Programowanie Proceduralne 4

Przykłady deklaracji Deklaracje float sin ( float x ) ; float pierwiastek ( float x ) ; void wypiszmenu ( void ) ; int random ( void ) ; int nwd ( int a, int b ) ; char getchar ( void ) ; int fff ( int z, char z, float a ) ; Wywołanie y = sin ( x ) ; y = pierwiastek ( 5. 0 ) ; wypiszmenu ( ) ; i = random ( ) ; i = nwd (144, a + 1) ; z = getchar ( ) ; i = fff ( 3, A, 3. 1 4 ) ; Programowanie Proceduralne 5

1 # include <s t d i o. h> 3 int nwd ( int a, int b ) 4 { 5 int c ; 6 while ( b!= 0) 7 { 8 c = a % b ; 9 a = b ; 10 b = c ; 11 } 1 return a ; 13 } 14 15 int main ( ) 16 { 17 int a, b ; 18 19 printf ( " Podaj dwie liczby calkowite : " ) ; 0 scanf ( "%d %d", &a, &b ) ; 1 printf ( "NWD (%d,%d) = %d\n", a, b, nwd ( a, b ) ) ; 3 return 0 ; 4 } euclid3.c Programowanie Proceduralne 6

Parametry formalne i aktualne funkcji Parametry formalne int nwd ( int a, int b ) { int c ;... } Parametry aktualne float x, y ; int a=1, b=, c ; x = sin ( 1 ) ; c = nwd (144, b ) ; y = sin ( x nwd(1+a, nwd (100, b ) ) ) ; W języku C argumenty są przekazywane wyłącznie przez wartość. Programowanie Proceduralne 7

Funkcja bez wartości zwracanej - procedura void wypisz ( int n ) { while ( n>0 ) { printf ( " Programowaie proceduralne \n" ) ; n = n 1 ; } } Funkcje a procedury Funkcja z wartością zwracaną int silnia ( int n ) { int i=; x=1; while ( i <= n ) { x = x i ; i = i + 1 ; } return x ; } Programowanie Proceduralne 8

Instrukcja return return przerywa działanie funkcji i zwraca wartość z funkcji Może pojawić się w dowolnym miejscu wewnątrz funkcji int jest_pierwsza ( int n ) { int i=; while ( i<n ) { if ( n % i == 0 ) return 0 ; i = i + 1 ; } return 1 ; } Wartość zwracana jest podstawiona w miejsce wywołania if ( jest_pierwsza ( a ) ) printf ( "%d jest pierwsza \n", a ) ; Programowanie Proceduralne 9

Deklaracja i definicja funkcji c.d 1 # include <s t d i o. h> 3 / D e k l a r a c j a f u n k c j i / 4 int jest_pierwsza ( int n ) ; 5 6 int main ( ) 7 { 8 int n, i=1; 9 printf ( "n = " ) ; 10 scanf ( "%d", &n ) ; 11 while ( i<=n ) 1 { 13 if ( jest_pierwsza ( i ) == 1) printf ( "%d\n", i ) ; 14 i++; 15 } 16 return 0 ; 17 } 18 19 / D e f i n i c j a f u n k c j i / 0 int jest_pierwsza ( int n ) 1 { int i =; 3 while ( i<=n/i ) 4 { 5 if ( n % i == 0 ) return 0 ; 6 i = i + 1 ; 7 } 8 return 1 ; 9 } W momencie kompilacji musi być znana przynajmniej deklaracja funkcji (jej nazwa i typy argumentów). pierwsza.c Programowanie Proceduralne 10

Pamięć programu Sterta pamięć dostępna do alokacji Stos zmienne lokalne funkcji wkładane na stos przy wywołaniu funkcji adresy pamięci Dane Kod program stałe oraz zmienne globalne i statyczne inicjowane przy uruchomieniu tekst programu tylko do odczytu Programowanie Proceduralne 11

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } Sterta Stos Dane Kod Programowanie Proceduralne 1

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } main() a Sterta Stos b c Dane return Kod Programowanie Proceduralne 13

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } main() a 33 Sterta Stos b 144 c Dane return Kod Programowanie Proceduralne 14

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } a 33 main() a 33 Sterta Stos nwd(33,144) b 144 b 144 c c Dane return return Kod Programowanie Proceduralne 15

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } a 1 main() a 33 Sterta Stos nwd(33,144) b 0 b 144 c 0 c Dane return 1 return Kod Programowanie Proceduralne 16

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } main() a 33 Sterta Stos b 144 c Dane 1 return Kod Programowanie Proceduralne 17

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } main() a 33 Sterta Stos b 144 c Dane 1 return Kod Programowanie Proceduralne 18 0

Zmienne na stosie 1 int nwd ( int a, int b ) { 3 int c ; 4 while ( b!= 0) 5 { 6 c = a % b ; 7 a = b ; 8 b = c ; 9 } 10 return a ; 11 } 1 13 int main ( ) 14 { 15 int a, b, c ; 16 a = 3 3 ; 17 b = 1 4 4 ; 18 c = nwd ( a, b ) ; 19 return 0 ; 0 } Sterta Stos Dane Kod Programowanie Proceduralne 19

Zasięg zmiennych: globalne i lokalne Zmienna globalna dostępna dla wszystkich funkcji programu. Zmienna istnieje przez cały czas działania programu. Deklaracja zmiennej nie znajduje się wewnątrz żadnej funkcji. int a ; void funkcja ( ) { a = a + 1 ; } Zmienna lokalna (automatyczna) wewnętrzna zmienna funkcji. Czas życia ograniczony czasem działania funkcji. void funkcja ( int a ) { a = a + 1 ; } Programowanie Proceduralne 0

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 printf ( "%d\t %d\t f\n", globalna, lokalna ) ; 11 } 1 13 int main ( ) 14 { 15 int lokalna = 1 3 ; 16 17 printf ( " globalna lokalna funkcja \n" ) ; 18 printf ( "%d\t %d\t main\n", globalna, lokalna ) ; 19 f ( ) ; 0 printf ( "%d\t %d\t main\n", globalna, lokalna ) ; 1 f ( ) ; printf ( "%d\t %d\t main\n", globalna, lokalna ) ; 3 return 0 ; 4 } globalne.c Programowanie Proceduralne 1

Wynik działania: 1 #include<s t d i o. h> 3 int globalna = 0 ; globalna lokalna funkcja 4 0 13 main 5 void f ( void ) 1 1 f 6 { 1 13 main 7 int lokalna = 0 ; 1 f 8 globalna = globalna + 1 ; 13 main 9 lokalna = lokalna + 1 ; 10 printf ( "%d\t %d\t f\n", globalna, lokalna ) ; 11 } 1 13 int main ( ) 14 { 15 int lokalna = 1 3 ; 16 17 printf ( " globalna lokalna funkcja \n" ) ; 18 printf ( "%d\t %d\t main\n", globalna, lokalna ) ; 19 f ( ) ; 0 printf ( "%d\t %d\t main\n", globalna, lokalna ) ; 1 f ( ) ; printf ( "%d\t %d\t main\n", globalna, lokalna ) ; 3 return 0 ; 4 } globalne.c Programowanie Proceduralne

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 return 0 ; 19 } 0 Sterta Stos Dane globalna Kod Programowanie Proceduralne 3

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 return 0 ; 19 } lokalna Sterta Stos main() Dane globalna 0 Kod return Programowanie Proceduralne 4

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 return 0 ; 19 } lokalna 13 Sterta Stos main() Dane globalna 1 Kod return Programowanie Proceduralne 5

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 return 0 ; 19 } f() lokalna 0 main() lokalna 13 Sterta Stos Dane globalna 1 Kod return Programowanie Proceduralne 6

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 return 0 ; 19 } f() lokalna 1 main() lokalna 13 Sterta Stos Dane globalna Kod return Programowanie Proceduralne 7

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 return 0 ; 19 } lokalna 13 Sterta Stos main() Dane globalna Kod return Programowanie Proceduralne 8

1 #include<s t d i o. h> 3 int globalna = 0 ; 4 5 void f ( void ) 6 { 7 int lokalna = 0 ; 8 globalna = globalna + 1 ; 9 lokalna = lokalna + 1 ; 10 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 return 0 ; 19 } lokalna 13 Sterta Stos main() Dane globalna Kod return 0 Programowanie Proceduralne 9

W programowaniu proceduralnym nie używamy zmiennych globalnych! #include<s t d i o. h> int x=1, y=1; int main ( ) { f ( ) ; zzz ( ) ; pewna_funkcja ( ) ; Źle #include<s t d i o. h> Dobrze int main ( ) { int x=1, y=1; y = f ( x, 10, x ) ; zzz ( ) ; x = pewna_funkcja ( x ) ; } printf ( "%d %d\n", x, y ) ; } printf ( "%d %d\n", x, y ) ; Programowanie Proceduralne 30

Biblioteki standardowe <assert.h> <ctype.h> <float.h> <limits.h> <signal.h> <stddef.h> <stdio.h> <math.h> <stdlib.h> <string.h> <time.h> Asercje - diagnostyka kodu Klasyfikacja znaków Ograniczenia typów zmiennopozycyjnych Ograniczenia typów całkowitych Obsługa sygnałów Standardowe definicje (makra) Operacje wejścia/wyjścia Funkcje matematyczne Zestaw podstawowych narzędzi, np. rand() Obsługa łańcuchów znakowych Funkcje obsługi czasu WikiBook: spis plików nagłówkowych biblioteki standardowej WikiBook: indeks alfabetyczny funkcji z biblioteki standardowej Programowanie Proceduralne 31

Biblioteka matematyczna sin cos tan asin acos atan funkcje trygonometryczne sinh cosh tanh funkcje hiperboliczne exp f. eksponencjalna e x ceil floor zaokrąglenia: sufit, podłoga sqrt pierwiastek x pow potęga x y log logarytm naturalny ln(x) = log e x log10 logarytm dziesiętny log 10 x fabs wartość bezwzględna x fmod reszta z dzielenia (zmiennoprzecinkowe) HUGE_VAL bardzo duża wartość double Uwaga: korzystając z kompilatora GCC należy dodać opcję -lm gcc -lm euclid.c Programowanie Proceduralne 3

Przykład: wzór Herona Problem: pole trójkąta dla danych długości boków a, b i c. a b c Wzór Herona (60 n.e.) gdzie S = p(p a)(p b)(p c) p = 1 (a + b + c) W jakiej sytuacji wyrażenie pod pierwiastkiem jest mniejsze od 0 Programowanie Proceduralne 33

Przykład: pole trójkąta 1 # include <math. h> 3 / Funkcja wyznacza p o l e t r o j k a t a z wzoru Heroana. 4 Argumenty a, b i c to d l u g o s c i bokow. 5 J e z e l i b o k i a, b, i c n i e tworza t r o j k a t a 6 zwracana j e s t w a r t o s c 1. / 7 float heron ( float a, float b, float c ) 8 { 9 float p = ( a+b+c ) / ; 10 p = p ( p a ) ( p b ) ( p c ) ; 11 if ( p<0) return 1; 1 return sqrt ( p ) ; 13 } heron.c Programowanie Proceduralne 34

1 int main ( ) { 3 float a, b, c, pole ; 4 5 printf ( " Podaj dlugosci bokow trojkata : a, b, c > 0\n" ) ; 6 scanf ( "%f%f%f",&a,&b,&c ) ; 7 8 if ( a <= 0 b <= 0 c<=0 ) 9 { 10 printf ( "Zle dane: wartosci musza byc dodatnie.\n" ) ; 11 return 1 ; 1 } 13 14 pole = heron ( a, b, c ) ; 15 if ( pole < 0 ) 16 { 17 printf ( "Zle dane: to nie sa boki trojkata \n" ) ; 18 return ; 19 } 0 printf ( "Pole wynosi: %f\n", pole ) ; 1 return 0 ; 3 } heron.c Programowanie Proceduralne 35

Rekurencja Funkcje mogą wywoływć same siebie - funkcje rekurencyjne. #include<s t d i o. h> void funkcja ( ) { / c i a l o f u n k c j i / funkcja ( ) ; } int main ( ) { funkcja ( ) ; } Programowanie Proceduralne 36

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } Dane Kod Programowanie Proceduralne 37

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } main() n 3 Dane Kod x Programowanie Proceduralne 38

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } silnia(3) n 3 main() n 3 Dane Kod return x Programowanie Proceduralne 39

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } silnia(3) n 3 main() n 3 Dane Kod return x 3 silnia() Programowanie Proceduralne 40

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } silnia() n silnia(3) n 3 main() n 3 Dane Kod return return x 3 silnia() Programowanie Proceduralne 41

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } silnia() n silnia(3) n 3 main() n 3 Dane Kod return return x silnia(1) 3 silnia() Programowanie Proceduralne 4

n! = 1 3... n = n (n 1)! 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } n 1 n silnia(3) n 3 main() n 3 Sterta Stos silnia(1) silnia() Dane Kod return 1 return return x silnia(1) 3 silnia() Programowanie Proceduralne 43

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } silnia() n silnia(3) n 3 main() n 3 Dane Kod return return x silnia(1) 3 silnia() Programowanie Proceduralne 44

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } silnia(3) n 3 main() n 3 Dane Kod return 6 x 3 silnia() Programowanie Proceduralne 45

n! = 1 3... n = n (n 1)! Sterta Stos 1 #include<s t d i o. h> 3 int silnia ( int n ) 4 { 5 if ( n<=1 ) return 1 ; 6 return n silnia ( n 1) ; 7 } 8 9 int main ( ) 10 { 11 int x, n=3; 1 x = silnia ( n ) ; 13 printf ( "%d!=%d\n", n, x ) ; 14 return 0 ; 15 } main() n 3 Dane Kod x 6 Programowanie Proceduralne 46

Zadanie o rozmnażaniu królików Problem: zadanie o rozmnażaniu się królików. Populacja królików rozmnaża się wg. poniższych zasad: rozpoczynamy od pojedynczej pary nowonarodzonych królików, króliki stają się płodne po upływie miesiąca życia, każda płodna para wydaje na świat parę królików co miesiąc, króliki nigdy nie umierają. Ile par królików będzie w populacji po roku Programowanie Proceduralne 47

Zadanie o rozmnażaniu królików Ile par królików będzie w populacji po n miesiącach Żródło: Jens Bossaert, Curiosa Mathematica, http: // curiosamathematica. tumblr. com/ Programowanie Proceduralne 48

Przykład: ciąg Fibinacciego Ciąg Fibinacciego 1, 1,, 3, 5, 8, 13, 1, 34, 55,..., 0 dla n = 0 F n = 1 dla n = 1 F n 1 + F n dla n > 1 Programowanie Proceduralne 49

Rekurencja 1 int fibonacci ( int n ) { 3 if ( n==0 ) return 1 ; 4 if ( n==1 ) return 1 ; 5 return fibonacci ( n 1) + fibonacci ( n ); 6 } fib1.c Iteracja 1 int fibonacci ( int n ) { 3 int f=1, fp=1, k ; 4 5 while ( n>1 ) 6 { 7 k = f + fp ; 8 fp = f ; 9 f = k ; 10 n ; 11 } 1 return f ; 13 } fib.c Programowanie Proceduralne 50

Podsumowanie Zmienne globalne mają zasięg całego pliku, zmienne lokalne istnieją tylko wewnątrz funkcji Programowanie proceduralne: funkcje nie powinny kożystać ze zmiennych globalnych Deklaracja funkcji określa nazwę funkcji, typy argumentów i typ wartości zwracanej Definicja funkcji to deklaracja + ciało funkcji (implementacja) Funkcja przed użyciem musi być przynajmniej zadeklarowana return zwraca pojedynczą wartość z funkcji Pytanie: jak zwrócić z funkcji więcej wartości Np. funkcja wyznaczająca miejsca zerowe paraboli. Programowanie Proceduralne 51

Literatura dodatkowa David Griffiths, Dawn Griffiths Rusz głową! C., Helion, Gliwice, 013. Kurs programowania w C, WikiBooks, http://pl.wikibooks.org/wiki/c C Reference, http://en.cppreference.com/w/c Programowanie Proceduralne 5