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

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

Wskaźniki. Programowanie Proceduralne 1

Wstęp do Programowania, laboratorium 02

Zmienne, stałe i operatory

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

Wyrażenia arytmetyczne

Instrukcje sterujące. Programowanie Proceduralne 1

Wstęp do programowania

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

Język C zajęcia nr 11. Funkcje

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

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

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

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

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 I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

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

5 Przygotował: mgr inż. Maciej Lasota

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

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

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

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

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

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

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

Wprowadzenie do programowania w języku C

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

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

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

3 Przygotował: mgr inż. Maciej Lasota

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

Wykład 1

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

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

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

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

Język C, tablice i funkcje (laboratorium)

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

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!

Programowanie strukturalne i obiektowe. Funkcje

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

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

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

Podział programu na moduły

1 Podstawy c++ w pigułce.

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

PROGRAMOWANIE w C prolog

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

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

Laboratorium Programowanie Obrabiarek CNC. Nr H7

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

Wstęp do programowania

Programowanie Proceduralne

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

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Wskaźniki w C. Anna Gogolińska

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

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

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

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

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

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

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

Tablice, funkcje, wskaźniki - wprowadzenie

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

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

Programowanie - wykład 4

Jerzy Nawrocki, Wprowadzenie do informatyki

Klasy: String, Random, Math. Korzystanie z dokumentacji.

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

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

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

Język ludzki kod maszynowy

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

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 2

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

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

Proste algorytmy w języku C

Część 4 życie programu

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

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

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

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

Podstawy Programowania.

IX. Wskaźniki.(3 godz.)

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

main() { float promien=p,wysokosc=h,objetosc; float objetosc_walca(float promien, float wysokosc);

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. Wprowadzanie danych z klawiatury funkcja scanf

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

Transkrypt:

Funkcje czyli jak programować proceduralne. Programowanie Proceduralne 1

Struktura programu w C # include <s t d i o. h> / Dyrektywy p r e p r o c e s o r a / #define PI 3.1415 float g =. 5 ; / Zmienne g l o b a l n e / float kwadrat ( float x ) / D e f i n i c j e f u n k c j i / { x x ; } int main ( ) / Funkcja glowna / { float x, y ; / Zmienne l o k a l n e / x = PI g ; / I n s t r u k c j e / y = kwadrat ( x ) ; } 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 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 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 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 ; } x ; } Programowanie Proceduralne 8

Instrukcja 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 ) 0 ; i = i + 1 ; } 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 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 ) 0 ; 6 i = i + 1 ; 7 } 8 1 ; 9 } W momencie kompilacji musi być znana przynajmniej deklaracja funkcji (jej nazwa i typy argumentów). pierwsza.c Programowanie Proceduralne 10

Pamięć programu pamięć dostępna do alokacji zmienne lokalne funkcji wkładane na stos przy wywołaniu funkcji adresy pamięci 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 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 0 ; 0 } 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 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 0 ; 0 } main() a b c 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 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 0 ; 0 } main() a 33 b 144 c 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 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 0 ; 0 } a 33 main() a 33 nwd(33,144) b 144 b 144 c c 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 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 0 ; 0 } a 1 main() a 33 nwd(33,144) b 0 b 144 c 0 c 1 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 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 0 ; 0 } main() a 33 b 144 c 1 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 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 0 ; 0 } main() a 33 b 144 c 1 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 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 0 ; 0 } 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 } 11 1 int main ( ) 13 { 14 int lokalna = 1 3 ; 15 globalna = globalna + 1 ; 16 f ( ) ; 17 18 0 ; 19 } 0 globalna Programowanie Proceduralne 1

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 0 ; 19 } lokalna main() globalna 0 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 0 ; 19 } lokalna 13 main() globalna 1 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 0 ; 19 } f() lokalna 0 main() lokalna 13 globalna 1 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 0 ; 19 } f() lokalna 1 main() lokalna 13 globalna 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 0 ; 19 } lokalna 13 main() globalna 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 0 ; 19 } lokalna 13 main() globalna 0 Programowanie Proceduralne 7

Programowanie proceduralne 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 8

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 9

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 30

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 31

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) 1; 1 sqrt ( p ) ; 13 } heron.c Programowanie Proceduralne 3

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 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 ; 19 } 0 printf ( "Pole wynosi: %f\n", pole ) ; 1 0 ; 3 } heron.c Programowanie Proceduralne 33

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 34

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 ) 1 ; 6 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 0 ; 15 } Programowanie Proceduralne 35

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 ) 1 ; 6 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 0 ; 15 } main() n 3 x Programowanie Proceduralne 36

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 ) 1 ; 6 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 0 ; 15 } silnia(3) n 3 main() n 3 x Programowanie Proceduralne 37

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 ) 1 ; 6 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 0 ; 15 } silnia(3) n 3 main() n 3 x 3 silnia() Programowanie Proceduralne 38

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 ) 1 ; 6 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 0 ; 15 } silnia() n silnia(3) n 3 main() n 3 x 3 silnia() Programowanie Proceduralne 39

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 ) 1 ; 6 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 0 ; 15 } silnia() n silnia(3) n 3 main() n 3 x silnia(1) 3 silnia() Programowanie Proceduralne 40

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 ) 1 ; 6 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 0 ; 15 } n 1 n silnia(3) n 3 main() n 3 silnia(1) silnia() 1 x silnia(1) 3 silnia() Programowanie Proceduralne 41

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 ) 1 ; 6 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 0 ; 15 } silnia() n silnia(3) n 3 main() n 3 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 ) 1 ; 6 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 0 ; 15 } silnia(3) n 3 main() n 3 6 x 3 silnia() Programowanie Proceduralne 43

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 ) 1 ; 6 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 0 ; 15 } main() n 3 x 6 Programowanie Proceduralne 44

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 n miesiącach 1, 1,, 3, 5, 8, 13, 1, 34, 55,..., Programowanie Proceduralne 45

Przykład: ciąg Fibinacciego Ciąg Fibinacciego 0 dla n = 0 F n = 1 dla n = 1 F n 1 + F n dla n > 1 Programowanie Proceduralne 46

Rekurencja 1 int fibonacci ( int n ) { 3 if ( n==0 ) 1 ; 4 if ( n==1 ) 1 ; 5 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 f ; 13 } fib.c Programowanie Proceduralne 47

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 Funkcja przed użyciem musi być przynajmniej zadeklarowana zwraca pojedynczą wartość z funkcji Pytanie: jak zwrócić z funkcji więcej wartości Np. funkcja wyznaczająca miejsca zerowe paraboli. Programowanie Proceduralne 48

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 49