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

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

Wstęp do informatyki- wykład 9 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ą)

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

Wstęp do informatyki- wykład 7

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

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

4. Funkcje. Przykłady

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

Wstęp do informatyki- wykład 6

1 Podstawy c++ w pigułce.

Wstęp do programowania

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

Programowanie - wykład 4

7. Pętle for. Przykłady

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

do instrukcja while (wyrażenie);

1 Podstawy c++ w pigułce.

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

Wstęp do programowania. Wykład 1

Wstęp do informatyki- wykład 7

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

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

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

C-struktury wykład. Dorota Pylak

Wstęp do programowania

Podstawy programowania w C++

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

Struktury Struktura polami struct struct struct struct

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

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

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

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

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

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

C-struktury wykład. Dorota Pylak

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

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

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

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

Pytania sprawdzające wiedzę z programowania C++

Część 4 życie programu

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

Język C, tablice i funkcje (laboratorium)

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

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

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

Podstawy Programowania

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

Programowanie proceduralne w języku C++ Funkcje

Programowanie strukturalne i obiektowe. Funkcje

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

Wstęp do Programowania, laboratorium 02

Język C++ zajęcia nr 2

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

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

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

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

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

Programowanie komputerowe. Zajęcia 1

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

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

Podstawy Programowania Podstawowa składnia języka C++

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

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

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wstęp do programowania

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

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

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Wstęp do programowania

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

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

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

Wstęp do Informatyki

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Programowanie komputerowe. Zajęcia 2

Lab 9 Podstawy Programowania

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

Wstęp do informatyki- wykład 3 Pierwszy program w C++ Wyprowadzanie danych Deklaracja zmiennych

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

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

3. Instrukcje warunkowe

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

W dowolnym momencie można zmienić typ wskaźnika.

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

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

Język C++ Różnice między C a C++

Wstęp do programowania

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Program 14. #include <iostream> #include <ctime> using namespace std;

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).

TEMAT : KLASY DZIEDZICZENIE

I - Microsoft Visual Studio C++

Transkrypt:

1 Wstęp do informatyki- wykład 9 Pętla while, do while,for -pętla w pętli- przykłady 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.

Instrukcje iteracyjne - pętla while 2

Pętla do...while... 3

Pętla for 4

Pętle for- przykład- tabliczka mnożenia /*Wyświetlić na ekranie tabliczkę mnożenia wymiaru n x n. Pobrać od użytkownika n, 0< n <15. */ #include <iostream> #include <iomanip> using namespace std; int main () int n; //pobieramy n w pętli zaporowej do cout<<"podaj liczbe "; cin>>n; while(n<=0 n>=15); 5

Pętle for- przykład- tabliczka mnożenia /*tabliczka mnożenia, dla n=3 1 2 3 2 4 6 3 6 9 */ //mamy wiersze od 1 do n for(int i = 1; i<=n; i++) //w każdym wierszu mamy n elementów for(int j=1; j<=n; j++) cout << setw(4) << i*j; //po wydrukowaniu wiersza znak nowej linii cout<<endl; //wstawiamy puste linie przed kolejną częścią cout<<endl<<endl; 6

Pętle for- przykład- trójkąt pętle zagniezdżone /*wyświetlić trójkąt prostokątny o wysokości n postaci: dla n=4: * dla i=1-1 * ** dla i=2-2 * *** dla i=3-3 * **** dla i=4-4 * */ for(int i = 1; i <= n; i++) // mamy n wierszy //jesteśmy w i tym wierszu, drukujemy i gwiazdek for(int j = 1; j <= i; j++) cout << '*'; //po wyświetleniu wiersza znak nowej linii cout << endl; cout << endl << endl;//dodatkowe puste linie 7

Pętle for- przykład- trójkąt manipulator setfill /* 2 wersja: z wykorzystaniem manipulatora setfill * ** *** **** */ for(int i = 1; i <= n; i++) // mamy n wierszy // w i tym wierszu, drukujemy i gwiazdek: cout << setfill('*')//ustawiamy wypełnienie na * << setw(i+1) //szerokosc na i+1 << ' '//na i+1 miejscu wyświetlamy spację //poprzedzoną i gwiazdkami << endl;//znak nowej linii return 0; 8

Pętle for- przykład- trójkąt- choinka /* choinka o wysokości 5 ^ i=1 : 4 spacje 1 ^ ^^^ i=2 : 3 spacje 3 ^ ^^^^^ i=3 : 2 spacje 5 ^ ^^^^^^^ i=4 : 1 spacja 7 ^ ^^^^^^^^^ i=5 : 0 spacji 9 ^ */ for (int i = 1; i <= 5; i++) //dla i-tego wiersza: 5-i spacji for (int j = 1; j <= 5 - i; j++) //spacje cout<<' '; //dla i-tego wiersza: 2*i-1 ^ for (int j = 1; j <= i * 2-1; j++) //^ cout<<'^'; cout << endl; //nowa linia 9

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ę. 10

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. 11

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 12

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. 13

14 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.

15 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 robi 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; 16

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ść. 17

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. 18

19 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.

20 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; 21

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

Deklaracja funkcji (prototyp) Definicja lub deklaracja dostarcza kompilatorowi informacji o funkcji: jaki jest jej typ zwracany, jaka jest liczba parametrów, jaki jest typ parametrów itd. W ten sposób, za każdym razem, gdy w dalszej części tekstu programu pojawia się użycie tej funkcji, kompilator może sprawdzić o którą z funkcji o tej samej nazwie chodzi (może być wiele funkcji o tej samej nazwie); czy wywołanie funkcji jest prawidłowe; czy na przykład ilość i typ argumentów odpowiada ilości i typom parametrów, czy typ wartości zwracanej przez funkcje jest w danym miejscu programu akceptowalny, itd. Jest to konieczne, na przykład, aby zdecydować, czy będą potrzebne konwersje argumentów lub wartości zwracanej. 23

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. 24

Deklaracja funkcji (prototyp) Prototypowanie jest wykorzystywane na etapie kompilacji, stąd mowa o statycznej kontroli typów np. w wywołaniu powitanie(cube(2)); najpierw program przekazuje funkcji cube wartość int, kompilator na podstawie prototypu konwertuje 2 na 2.0 czyli na double, następnie kompilator stwierdza, że powitanie oczekuje na int i konwertuje 8.0 na 8. Niektóre kompilatory ostrzegają o ryzyku utraty danych w przypadku automatycznej konwersji typu większego na mniejszy. Generalnie należy unikać takich sytuacji w programach. Funkcja zadeklarowana musi oczywiście być gdzieś również zdefiniowana (tylko raz). W przeciwnym razie powstanie błąd na etapie linkowania (łączenia, konsolidacji) programu. 25

Deklaracja funkcji (prototyp) Często zamiast deklaracji funkcji przed main, a definicji poniżej main, przed funkcją main wstawiane są całe definicje funkcji. Deklaracji nie można pominąć w przypadku, gdy definiujemy kolejno dwie funkcje, fun1 i fun2, takie że funkcja fun1 wywołuje w swej treści funkcję fun2 i odwrotnie, funkcja fun2 wywołuje w swej treści funkcję fun1: void fun1(int k) //... fun2(k) //... void fun2(int m) //... fun1(m) //... 26

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. 27

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. 28

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. 29

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

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. 31

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); 32

33 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; 34