Wstęp do informatyki- wykład 11 Funkcje

Podobne dokumenty
Wstęp do informatyki- wykład 9 Funkcje

Wstęp do informatyki- wykład 9 Pętla while, do while,for -pętla w pętli- przykłady Funkcje

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wstęp do informatyki- wykład 10 Funkcje (przekazywanie parametrów przez wartość i zmienną)

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

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Wstęp do informatyki- wykład 7

Wstęp do programowania

4. Funkcje. Przykłady

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Wstęp do informatyki- wykład 6

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

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

Programowanie - wykład 4

C-struktury wykład. Dorota Pylak

Struktury Struktura polami struct struct struct struct

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

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

1 Podstawy c++ w pigułce.

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

Wstęp do informatyki- wykład 7

Wstęp do programowania. Wykład 1

Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe

Język C, tablice i funkcje (laboratorium)

C-struktury wykład. Dorota Pylak

Wstęp do programowania

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

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

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

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

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

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

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

1 Podstawy c++ w pigułce.

7. Pętle for. Przykłady

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

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

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Podstawy Programowania

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

Wstęp do Programowania, laboratorium 02

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy programowania w C++

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

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

Programowanie komputerowe. Zajęcia 2

Wstęp do informatyki- wykład 8 Pętla while, do while,for -pętla w pętli- przykłady Operator rzutowania Manipulatory

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Wstęp do informatyki- wykład 4 Deklaracja zmiennych Typy

Część 4 życie programu

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

Programowanie proceduralne w języku C++ Funkcje

Programowanie strukturalne i obiektowe. Funkcje

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

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

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

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Wstęp do programowania

Wstęp do programowania

Wykład 5: Klasy cz. 3

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

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

Lab 9 Podstawy Programowania

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

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

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

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Przekazywanie argumentów wskaźniki

Programowanie komputerowe. Zajęcia 1

Programowanie w języku C++

Język C++ zajęcia nr 2

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

do instrukcja while (wyrażenie);

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Ćwiczenia podstawowe, zestaw 5, część 1

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Pytania sprawdzające wiedzę z programowania C++

Projektowanie klas c.d. Projektowanie klas przykład

Wstęp do programowania

Transkrypt:

1 Wstęp do informatyki- wykład 11 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum C++11, Helion, 2017 B. Stroustrup, Język C++. Kompendium wiedzy. Wydanie IV, Helion, 2014 S. B. Lippman, J. Lajoie, Podstawy języka C++, WNT, Warszawa 2003.

Funkcje - wstęp Funkcje (podprogramy) - są definicjami instrukcji, które na podstawie danych wejściowych (argumentów) dostarczają w miejscu ich użycia (wywołania) wartości określonego typu. Funkcje są więc sposobem na realizację tego samego czy podobnego zadania wielokrotnie, bez potrzeby wielokrotnego powtarzania w naszym kodzie tych samych sekwencji instrukcji. Jeśli np. napiszemy funkcję obliczającą pole koła na podstawie zadanego promienia to tak, jakbyśmy język programowania wyposażyli w nową instrukcję umiejącą właśnie to obliczać. Od tej pory ile razy w programie potrzebujemy obliczyć pole koła wywołujemy naszą funkcję. 2

Funkcje - wstęp Funkcję wywołuje się przez podanie jej nazwy i umieszczonych w nawiasie argumentów. Wywołanie - użycie funkcji w tekście programu musi być leksykalnie poprzedzone jej definicją lub przynajmniej deklaracją, tj. definicja lub deklaracja funkcji musi wystąpić w tekście programu wcześniej niż jej jakiekolwiek użycie. 3

Funkcje deklaracja, definicja i wywołanie Prosty przykładowy program zawierający funkcję: #include < iostream> using namespace std; int suma (int x, int y); //deklaracja funkcji int main() int a = 10, b = 20; int c = suma (a, b); //wywołanie funkcji cout << c; int suma (int x, int y) //definicja funkcji return x + y; //funkcja zwraca sumę argumentów 4

Funkcje deklaracja, definicja i wywołanie Funkcja ma swoją nazwę suma, która ją identyfikuje. Podobnie jak dla innych nazw występujących w programie przed pierwszym odwołaniem się do nazwy wymagana jest jej deklaracja. Deklaracja taka mówi kompilatorowi: suma jest funkcją wywoływaną z dwoma argumentami typu int, a zwracającą jako rezultat wartość typu int. Przed odwołaniem się do nazwy wymagana jest deklaracja, ale niekoniecznie od razu definicja. Sama funkcja może być zdefiniowana później, nawet w zupełnie innym pliku. Definicja zawiera treść funkcji ujętą w tj. wszystkie instrukcje wykonywane w ramach tej funkcji ( tzw. ciało funkcji) Wywołanie funkcji to po prostu napisanie jej nazwy łącznie z nawiasem, gdzie znajdują się argumenty przesyłane do funkcji. 5

6 Funkcje definiowanie funkcji Funkcje można podzielić na dwie grupy: niezwracające wartości(bezrezultatowe) i zwracające wartość(rezultatowe). Funkcje, które nie zwracają wartości są typu pustego void (pusty, próżny) i zapisujemy je następująco: void nazwafunkcji(listaparametrów) //nagłówek f-cji instrukcje //treść f-cji return; //opcjonalnie listaparametrów określa liczbę i typy parametrów przekazywanych funkcji Opcjonalna instrukcja return; oznacza koniec funkcji, jeśli jej brak funkcja kończy się tam, gdzie zamykający ją nawias klamrowy.

7 Funkcje definiowanie funkcji funkcje typu void Funkcji typu void używa się m.in. w przypadku, gdy zadaniem funkcji jest wyświetlenie - prezentacja jakichś informacji, np. funkcja pokazująca napis "Czesc! " n razy: void powitanie(int n)//brak zwracanej wartości for(int i = 0; i < n; i++) cout << "Czesc! "; cout << endl; return; //opcjonalnie Funkcja spodziewa się jednej wartości typu int. Dla parametru n >0 wyświetli n razy napis "Czesc! ", dla n<=0 nie wyświetla nic.

Funkcje wywołanie funkcji funkcje typu void Wywołanie funkcji typu void: Funkcje typu void wywołujemy w osobnej linii używając jej nazwy i podając parametry, a całość kończąc średnikiem. #include<iostream> using namespace std; void powitanie(int n); //deklaracja funkcji int main() powitanie(5); //instrukcja wywołania funkcji //na konsoli:czesc! Czesc! Czesc! Czesc! Czesc! void powitanie(int n)//definicja funkcji for(int i = 0; i < n; i++) cout << "Czesc! "; cout << endl; 8

Definiowanie funkcji funkcje zwracające wartość Jeśli typem zwracanym nie jest void, to funkcję nazywamy funkcją rezultatową, funkcje takie generują wartość zwracaną do funkcji ją wywołującej, np. funkcja sqrt(9.0) zwraca 3,0. Ogólna postać definicji takiej funkcji: nazwatypu nazwafunkcji(listaparametrów) instrukcje; return wartość; //wartość jest rzutowana //na typ nazwatypu Funkcje zwracające wartość muszą mieć instrukcję return z wartością, która ma być zwrócona do funkcji wywołującej. Sama zwracana wartość może być stałą, zmienną lub wyrażeniem. Typ tej wartości musi dać się rzutować (konwertować) na typ nazwatypu, np. int na double. Następnie funkcja zwraca tak skonwertowaną wartość. 9

Definiowanie funkcji funkcje zwracające wartość Nagłówek funkcji: nazwatypu nazwafunkcji(listaparametrów) Typ wartości zwracanej (nazwatypu): W C++ funkcja nie może zwracać tablicy. Wszystko inne jest dopuszczalne - liczby całkowite, liczby zmiennoprzecinkowe (czyli typy wbudowane jak int, char, double...), wskaźniki (w szczególności wskaźnik może wskazywać na tablicę), a nawet struktury i klasy (typ zdefiniowany przez użytkownika). Typ wartości zwracanej zwany jest zwykle typem funkcji. Nazwa (nazwafunkcji): Nazwa może być dowolna, byle nie kolidowała z którymś ze słów kluczowych, składała się tylko z liter, cyfr i znaków podkreślenia. Nie może jednak zaczynać się od cyfry. 10

11 Definiowanie funkcji funkcje zwracające wartość Lista parametrów formalnych(listaparametrów). Lista ta jest ujętą w okrągłe nawiasy listą oddzielonych przecinkami deklaracji pojedynczych parametrów funkcji w postaci (typ1 nazwa1, typ2 nazwa2). Nie wolno stosować deklaracji zbiorczych: (typ nazwa1, nazwa2). Nazwy wszystkich parametrów muszą być różne. Lista parametrów może być pusta; obejmujących ją nawiasów pominąć jednak nie można. Jeśli lista parametrów jest pusta, to można zaznaczyć to przez wpisanie wewnątrz nawiasów słowa kluczowego void. Nie jest to jednak konieczne.

12 Definiowanie funkcji funkcje zwracające wartość Przykład: funkcja obliczająca sześcian wartości double: double cube(double x) return x*x*x; //wartość typu double W instrukcji return użyto wyrażenia. Funkcja przy jej wywołaniu oblicza wartość tego wyrażenia i zwraca ją. Funkcje zwracają wartość w miejsce wywołania, a wartość ta może być potem przypisana zmiennej, wyświetlona, itp. Zatem wyrażenie będące wywołaniem tej funkcji samo w sobie ma wartość.

Definiowanie funkcji funkcje zwracające wartość #include<iostream> using namespace std; double cube(double x); //prototyp- deklaracja funkcji int main() double q = cube(1.2); //wywołanie funkcji double side; cout << " podaj bok :"; cin >> side; cout << "Kostka o boku "<< side<< " ma pojemnosc " << cube(side) <<" cm3" <<endl;//2 wywołanie double cube(double x) //definicja funkcji return x*x*x; 13

Definiowanie funkcji funkcje zwracające wartość Funkcja kończy swoje działanie po wykonaniu instrukcji return. Jeśli funkcja ma więcej takich instrukcji np. w alternatywnych ścieżkach if else to kończy swoje działanie po wykonaniu pierwszej z nich. Np. poniższe else jest zbędne, ale ułatwia zrozumienie treści funkcji: int bigger(int a, int b) if(a>b) return a; else return b; /* krótsza wersja: if(a>b) return a; return b; */ 14

Deklaracja funkcji (prototyp) Kompilatorowi nie jest potrzebna definicja funkcji, to znaczy nie musi wiedzieć, co funkcja robi: musi tylko wiedzieć, ile i jakie ma parametry i jaki jest jej typ zwracany. Do tego wystarczy prototyp funkcji podany w deklaracji. Deklaracja ma formę nagłówka funkcji, po którym następuje średnik zamiast ciała (treści) funkcji. Najprostszym sposobem uzyskania prototypu jest skopiowanie nagłówka funkcji z jej definicji i dodanie średnika: double cube(double x); //prototyp f-cji cube Jednak prototyp funkcji nie musi mieć nazw zmiennych wystarczy lista typów: int bigger(int, int ); //prototyp f-cji bigger W prototypach nazwy zmiennych można podawać lub nie, ponadto nazwy użyte w definicji nie muszą być takie same. 15

Parametry funkcji i przekazywanie przez wartość Zajmijmy się teraz sposobem przesyłania argumentów do funkcji. Najpierw jednak sprawa nazewnictwa. //definicja double cube(double x) return x*x*x; //wartość typu double nazwy które widzimy w pierwszej linijce definicji funkcji są to tzw. argumenty formalne funkcji. Czasem zwane parametrami formalnymi. 16

Parametry funkcji i przekazywanie przez wartość int main() double q = cube(3);//wywołanie funkcji w main cout << q << endl; To natomiast, co pojawia się w nawiasie w momencie wywoływania tej funkcji czyli w naszym przypadku 3 to tak zwane argumenty (parametry) aktualne. Czyli takie argumenty, z którymi aktualnie funkcja ma wykonać pracę. Często mówi się prościej: argumenty wywołania funkcji bo z tymi argumentami funkcję wywołujemy. W standardzie C++ używa się słowa argument dla określenia parametrów aktualnych, a słowa parametr dla param. formalnych. 17

Parametry funkcji i przekazywanie przez wartość double cube(double x); //prototyp C++ normalnie przekazuje parametry do funkcji przez wartość, oznacza to, że jeśli do funkcji przekazywana jest liczba, to tworzona jest nowa zmienna. Argumenty przesłane do funkcji są zatem tylko kopiami. Jakiekolwiek działanie na nich nie dotyczy oryginału. double side = 5; double vol = cube(side); Kiedy funkcja cube jest wywoływana tworzona jest nowa zmienna x typu double inicjalizowana wartością 5, cube() działa na kopii side, a nie na oryginale. 18

Parametry funkcji i przekazywanie przez wartość - przykład void zwieksz(int formalny) formalny += 1000; // zwiekszenie liczby o 1000 cout << "W funkcji modyfikuje arg formalny\n\t" << " i teraz arg formalny = "<< formalny << endl; Jak widać, w tej funkcji zwiększa się wartość parametru formalnego funkcji. Funkcję tę wywołujemy na przykład w takim fragmencie programu: int main() int aktu = 2; cout << "Przed wywolaniem, aktu = " << aktu << endl; zwieksz(aktu); cout << "Po wywolaniu, aktu = " << aktu << endl; 19

Parametry funkcji i przekazywanie przez wartość Jeżeli wykonamy taki fragment programu, to otrzymamy: Przed wywolaniem, aktu = 2 W funkcji modyfikuje arg formalny i teraz arg formalny = 1002 Po wywolaniu, aktu = 2 Do funkcji przesyłamy tylko wartość liczbową zmiennej aktu (czyli argumentu aktualnego). Wartość ta służy do inicjalizacji parametru formalnego, czyli zmiennej lokalnej tworzonej przez funkcję na stosie. Jest to więc jakby zrobienie kopii w obrębie funkcji. Funkcja pracuje na tej kopii. Czyli w naszym przykładzie dodanie 1000 nie nastąpiło do komórki pamięci, gdzie tkwi aktu, ale do tej zmiennej lokalnej na stosie, gdzie mieści się kopia (o nazwie formalny). Po opuszczeniu funkcji ten fragment stosu jest niszczony, znika więc też kopia. 20

Parametry funkcji i przekazywanie przez wartość Ponieważ przy przekazywaniu parametrów przez wartość do funkcji przesyłamy tylko wartość liczbową argumentu aktualnego, to przy wywołaniu funkcji możemy w miejsce argumentów podstawiać: zainicjalizowane wcześniej zmienne albo stałe, lub wyrażenia, np.: double q = cube(1.2); //wywołanie funkcji double side = 4; cout << cube(side); 21

22 Parametry funkcji i przekazywanie przez wartość - przykład //f-cja oblicza ilość cyfr danej liczby całkowitej int ilecyfr(int n) n = abs(n); int ile = 0; //licznik cyfr liczby //do while bo każda liczba ma przynajmniej 1 cyfrę do ile++; //zwiekszamy licznik n /= 10; //pozbywamy się policzonej cyfry while(n! = 0); return ile;

Parametry funkcji i przekazywanie przez wartość - przykład int main() cout<<"liczba 834 ma "<< ilecyfr(834) <<" cyfr "<< endl; int liczba; cout << "podaj liczbe calkowita "; cin >> liczba; cout <<"liczba "<< liczba <<" ma " << ilecyfr(liczba) <<" cyfr "<< endl; 23