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

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

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Zmienne, stałe i operatory

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

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

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

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

Wstęp do programowania

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

Wstęp do programowania

Tablice, funkcje - wprowadzenie

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

Język C, tablice i funkcje (laboratorium)

Wstęp do informatyki- wykład 9 Funkcje

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Wstęp do informatyki- wykład 11 Funkcje

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

Programowanie strukturalne i obiektowe. Funkcje

Rekurencja (rekursja)

5 Przygotował: mgr inż. Maciej Lasota

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, laboratorium 02

Języki programowania zasady ich tworzenia

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

Wstęp do programowania. Wykład 1

Lab 9 Podstawy Programowania

Szablony funkcji i klas (templates)

Programowanie - wykład 4

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

1 Podstawy c++ w pigułce.

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

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?

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

Podstawy Programowania

Programowanie komputerowe. Zajęcia 3

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Język C zajęcia nr 11. Funkcje

Funkcja (podprogram) void

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

Algorytm. a programowanie -

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

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

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

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

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

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

#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

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

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

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

Wykład 3 Składnia języka C# (cz. 2)

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

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

Język C++ zajęcia nr 2

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

Programowanie komputerowe. Zajęcia 2

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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!

Wprowadzenie do programowania w języku C

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

Język ludzki kod maszynowy

Programowanie, część I

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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ć

IX. Wskaźniki.(3 godz.)

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

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

Lekcja 6: Pascal. Procedura i funkcja

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

Szablony. Szablony funkcji

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

KONSTRUKCJA KOMPILATORÓW

2 Przygotował: mgr inż. Maciej Lasota

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

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Proste algorytmy w języku C

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Definicje. Algorytm to:

1 Podstawy c++ w pigułce.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Transkrypt:

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

Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja procedury względna niezależność dane wejściowe i dane wyjściowe, warunki początkowe i warunki końcowe kontrakt procedury problem efektów ubocznych Zalety użycia procedur redukcja rozmiaru kodu (likwidacja powtarzania się sekwencji rozkazów) umożliwienie ponownego użycia kodu biblioteki polepszenie czytelności kodu (hierarchiczna struktura kodu) ułatwienie zarządzania kodem (rozbicie jednej złożonej sekwencji instrukcji na szereg mniejszych o względnej autonomii) Wniosek: uwaga na efekty uboczne powinny być zapisane w specyfikacji funkcji Przykład_1: funkcja wypisz_komunikat_rodo Krzysztof Banaś Podstawy programowania 2

Programowanie proceduralne W C nie używa się pojęcia procedury pojęcie procedury jako wyodrębnionego fragmentu kodu (podprogramu) o własnej nazwie jest bardziej podstawowe niż pojęcie funkcji w innych językach funkcjami nazywane bywają tylko procedury zwracające wynik w pierwotnej wersji C zakładano, że każda funkcja zwraca wartość domyślnie typu int w nowszych standardach można definiować funkcje, które nie zwracają wyniku (typ void w definicji) zwracany wynik funkcji można pominąć w programie może się tak zdarzyć np. wtedy, gdy funkcja zwraca komunikat o poprawnym lub błędnym wykonaniu... a programista jest przekonany (?), że wykonanie musi być poprawne Wniosek: korzystając z funkcji uwzględniać zwracane wartości Krzysztof Banaś Podstawy programowania 3

Funkcje w C Funkcja jako wyodrębniony fragment kodu o własnej nazwie funkcja (definicja funkcji) zaczyna się od nazwy kod funkcji zawarty jest między nawiasami klamrowymi {... wywołanie w dowolnym miejscu kodu funkcji (za pomocą jej nazwy) powoduje wykonanie kodu funkcji interakcja funkcji z wywołującym kodem polega na: przyjęciu argumentów (jednego, wielu lub żadnego) zwróceniu wyniku (jednego lub żadnego) nazwa funkcji, typy przyjmowanych argumentów i typ zwracanego wyniku stanowią najważniejsze elementy pozwalające poprawnie definiować i wywoływać funkcje (poprawność składniowa kodu) zwyczajowo elementy te tworzą nagłówek funkcji Nagłówek funkcji nie mówi nic o tym co robi kod funkcji informacja ta musi znajdować się w dokumentacji funkcji przydatne jest także stosowanie znaczących nazw funkcji Krzysztof Banaś Podstawy programowania 4

Programowanie proceduralne Przykłady specyfikacji (dokumentacji, opisu) funkcji do umieszczenia w kodzie źródłowym: // oblicz_pierwiastek funkcja oblicza pierwiastek liczby double oblicz_pierwiastek( // funkcja zwraca obliczoną wartość pierwiastka // dla liczb nieujemnych, dla liczb ujemnych // funkcja zwraca kod błędu -1 double liczba // in: zadana liczba ); // wielomian funkcja oblicza wartość wielomianu stopnia <= 10 // brak obsługi błędów funkcja przerywa działanie // dla błędnych danych, takich jak:... double wielomian( // funkcja zwraca wartość obliczonego wielomianu double wsp[], // in: tablica współczynników wielomianu double stopien // in: rzeczywisty stopień wielomianu (<= 10 maksymalny) ); Krzysztof Banaś Podstawy programowania 5

Programowanie proceduralne Przykłady specyfikacji funkcji (dokumentacji, opisu) do umieszczenia w kodzie źródłowym: // wczytaj_linie funkcja wczytuje znaki ze standardowego wejścia, aż do // napotkania EOF lub \n, wynik zapisuje w przesłanej tablicy // dodając \0 po wczytanych znakach int wczytaj_linie( // funkcja zwraca: kod sukcesu 0 w przypadku powodzenia // lub kod -1 w przypadku, gdy zadana tablica jest zbyt krótka // (liczba wczytanych znaków do EOF lub /n jest większa niż // (rozmiar tablicy-1) tablica zawiera wtedy rozmiar-1 znaków) char linia[], // tablica do wpisania wczytanych znaków (+ \0) int rozmiar // rozmiar tablicy maksymalna liczba wczytanych znaków +1! ); Rozmaite konwencje specyfikacji np. przyjęta w podręczniku (man) w Unixie/Linuxie Krzysztof Banaś Podstawy programowania 6

Funkcje W momencie kompilacji kodu wywołującego funkcję kompilator musi być w stanie ocenić poprawność wywołania poprawność wywołania funkcji oznacza właściwe: liczbę i typy argumentów typ zwracanego wyniku do oceny poprawności wystarcza znajomość nagłówka formalnie, odpowiednio sformatowany nagłówek stanowi prototyp funkcji prototyp funkcji jest jej deklaracją definicja funkcji także zawiera nagłówek definicja jest jednocześnie deklaracją funkcji w kodzie źródłowym deklaracja funkcji musi poprzedzać wywołanie jako zasadę będziemy przyjmować używanie prototypu funkcji, umieszczonego na początku pliku źródłowego, jako deklaracji dotyczy to także pliku zawierającego definicję funkcji Krzysztof Banaś Podstawy programowania 7

Funkcje double oblicz_pierwiastek ( double arg ); // deklaracja, prototyp funkcji // zwyczajowo, mniej ściśle, także: nagłówek funkcji void main( void ) { double liczba = 4.0; // wywołanie funkcji przesłanie argumentu, zwrócenie wyniku double pierwiastek = oblicz_pierwiastek( liczba ); printf("liczba %lf, jej pierwiastek %lf\n", liczba, pierwiastek); // definicja funkcji double oblicz_pierwiastek ( // funkcja oblicza i zwraca pierwiastek liczby double arg // in: liczba do obliczenia pierwiastka ) { double pierwiastek; // obliczenia pierwiastka, np. za pomocą odpowiedniego ciągu lub szeregu return( pierwiastek ); Krzysztof Banaś Podstawy programowania 8

Programy = algorytmy + struktury danych Program w C składa się z funkcji i zmiennych Nazwy funkcji mają zasięg globalny (cały program) nie ma definicji funkcji wewnątrz innych funkcji wszystkie nazwy funkcji są widzialne (=widoczne) w całym programie nie mogą się powtarzać Zmienne można definiować poza funkcjami ich nazwy mają zasięg globalny lub ograniczony do pliku, w którym są zdefiniowane są widoczne we wszystkich funkcjach programu lub pliku lokalnie wewnątrz funkcji są widoczne tylko w tej funkcji w wewnętrznym bloku w funkcji są widoczne tylko w tym bloku Widzialność zmiennych jest odpowiednikiem zasięgu nazw Krzysztof Banaś Podstawy programowania 9

Widzialność zmiennych W bloku instrukcji wewnątrz funkcji widoczne są: zmienne zdefiniowane w tym bloku zmienne zdefiniowane w funkcji... chyba że jakaś zmienna zdefiniowana w bloku zasłoniła zmienną zdefiniowaną w funkcji, poprzez zastosowanie tej samej nazwy zmienne zdefiniowane globalnie... chyba że jakaś zmienna zdefiniowana w bloku lub w funkcji zasłoniła zmienną zdefiniowaną globalnie, poprzez zastosowanie tej samej nazwy Wniosek: jeśli nie chcemy, żeby zmienne się zasłaniały stosujmy znaczące nazwy konwencje, np. nazwy zmiennych lokalnych od małej, a globalnych od dużej litery Krzysztof Banaś Podstawy programowania 10

Argumenty funkcji Argumenty przesłane do funkcji są traktowane jak zmienne lokalne zmienne odpowiadające argumentom są inicjowane wartościami przesłanymi w wywołaniu funkcji w C przesyłanie argumentów do funkcji ZAWSZE odbywa się przez wartość, czyli przez kopiowanie wartości argumentu (aktualnego) w miejscu wywołania...... do zmiennych (argumentów formalnych) w wywoływanej funkcji Wygodną ilustracją mechanizmu przesyłania argumentów do funkcji jest stos (systemowy) stos jest stosowany w praktyce przez kompilatory do realizacji wywołania funkcji szczegóły działania mogą różnić się od uproszczonego schematu w rzeczywistości stosuje się różne warianty organizacji stosu, specjalne rejestry itp. Krzysztof Banaś Podstawy programowania 11

Czas życia zmiennych Z widzialnością zmiennych powiązany jest czas ich życia zmienna może być widoczna tylko i wyłącznie jeśli istnieje argumenty (formalne) i zmienne lokalne funkcji istnieją tylko w czasie wykonania funkcji zasady funkcjonowania stosu systemowego tłumaczą ich czas życia i widzialność stos systemowy jest elementem pamięci dynamicznej dynamiczny obszar pamięci zmienia swój rozmiar w trakcie wykonania programu zmienne globalne istnieją i są widzialne przez cały czas wykonania programu obszar przechowywania zmiennych istniejących przez cały czas wykonania programu nazywany jest pamięcią statyczną statyczny obszar pamięci jest stały w trakcie wykonania programu Krzysztof Banaś Podstawy programowania 12

Widzialność zmiennych Zmienne zdefiniowane wewnątrz bloku instrukcji są widoczne tylko w tym bloku { int i;... printf("%d\n",i); // - błąd for(int i=0; i<n; i++){... printf("%d\n",i); // - błąd int i; {... printf("%d\n",i); // - OK int i; for(i=0; i<n; i++){... printf("%d\n",i); // - OK Krzysztof Banaś Podstawy programowania 13

Widzialność zmiennych Język C, definiując zasady zasięgu nazw, dopuszcza zasłanianie jednych zmiennych przez inne o tej samej nazwie int i=3; // wydruk -> i==3 { // wydruk -> i==3 int i = 5; // wydruk -> i==5 // wydruk -> i==3 Zasłanianie nazw może utrudniać rozumienie kodu szczególnie używanie tych samych nazw w różnych blokach tej samej funkcji staranne użycie nazw oznacza wykorzystanie znaczących, niepowtarzających się nazw "niestaranne" użycie nazw może nie powodować problemów jeśli dotyczy zmiennych służących tylko jako pomocnicze zmienne wykorzystywane lokalnie Krzysztof Banaś Podstawy programowania 14

Przykład wykorzystania stosu rekurencja Funkcja, która wywołuje samą siebie jest nazywana funkcją rekurencyjną W funkcji rekurencyjnej zawsze musi być warunek powrotu bez wywołania samej siebie inaczej obliczenia trwają w nieskończoność Funkcje rekurencyjne stosuje się do implementacji algorytmów rekurencyjnych Mechanizm stosu służy do sprawnej realizacji wywołania funkcji rekurencyjnych Prosta funkcja rekurencyjna, obliczanie silni: int silnia (int N){ if ( N==1 ) return(1); else return( N*silnia(N-1) ); Krzysztof Banaś Podstawy programowania 15