Przeciążanie funkcji. Przykład 1: #include <iostream> using namespace std; double srednia(double n1, double n2) { return ((n1 + n2)/2.

Podobne dokumenty
Programowanie obiektowe 2005/2006. Laboratorium 1. Przeciążanie funkcji

Część 4 życie programu

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

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

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

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

Zadanie 1. Napisz, skompiluj i uruchom program, który wyświetla komunikat: "Mam na imie...".

Proste programy w C++ zadania

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

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

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

DYNAMICZNE PRZYDZIELANIE PAMIECI

Programowanie w języku C++

tablica: dane_liczbowe

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

Wstęp do programowania

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

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

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

Programowanie komputerowe. Zajęcia 5

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

Programowanie strukturalne i obiektowe. Funkcje

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Wstęp do programowania

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

Programowanie komputerowe. Zajęcia 3

C++ wprowadzanie zmiennych

Programowanie proceduralne w języku C++ Funkcje

Wstęp do Informatyki

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Wstęp do programowania

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

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

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

I - Microsoft Visual Studio C++

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Zadania z podstaw programowania obiektowego

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 C++

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Argumenty wywołania programu, operacje na plikach

TEMAT : KLASY DZIEDZICZENIE

Programowanie komputerowe. Zajęcia 4

Język ludzki kod maszynowy

Wstęp do programowania

Szablony funkcji i szablony klas

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

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

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

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

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

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Techniki Programowania wskaźniki 2

Szablony. Szablony funkcji

Szablony klas, zastosowanie szablonów w programach

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Tablicę 2-wymiarową można przedstawić jako pewien zestaw tablic 1-wymiarowych np.:

Język C zajęcia nr 11. Funkcje

Zajęcia 4 procedury i funkcje

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

Przeciążenie (przeładowanie nazw) funkcji

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

Wartości domyślne, przeciażenia funkcji

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

Tablice jednowymiarowe

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

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

Zmienne i struktury dynamiczne

Metody Metody, parametry, zwracanie wartości

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

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

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

PARADYGMATY PROGRAMOWANIA Wykład 3

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

4. Funkcje. Przykłady

Język C++ zajęcia nr 2

Język C, tablice i funkcje (laboratorium)

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

Programowanie komputerowe. Zajęcia 1

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Podstawy Programowania Obiektowego

do instrukcja while (wyrażenie);

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

Podstawy programowania C. dr. Krystyna Łapin

Podstawy programowania w języku C i C++

Egzamin z Podstaw informatyki i programowania 2007/2008

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

Programowanie - wykład 4

Kontrola przebiegu programu

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

Rzutowanie i konwersje

Wartości domyślne, przeciażenia funkcji

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

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

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

#include <iostream.h> #include <conio.h>

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

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

Transkrypt:

Przeciążanie funkcji W języku C++ można stosować tę samą nazwę dla funkcji o różnej treści, pod warunkiem, że funkcje te mają różne parametry (różny jest typ lub liczba parametrów). Jest to przeciążanie nazwy funkcji. Kompilator analizuje listę typów argumentów aktualnych i dobiera (o ile nie ma niejednoznaczności) odpowiednią wersję funkcji. Dzięki takiemu rozwiązaniu, użytkownik musi pamiętać tylko jedną nazwę i nią się posługiwać w programie. Wybór właściwej funkcji należy do kompilatora. Przykład 1: Przykład 2: double srednia(double n1, double n2) return ((n1 + n2)/2.0); double srednia(double n1, double n2, double n3) return ((n1 + n2 + n3)/3.0); cout << "Srednia liczb 2.5 i 4.5 wynosi: ", srednia(2.5,4.5); cout << "Srednia liczb 2.5, 4.5 i 6.5 wynosi: ", srednia(2.5,4.5,6.5); cin.get(); double srednia(int t[],int ile) int suma = 0; for (int i = 0; i < ile; i++) suma += t[i]; return (suma / ile)*1.0; double srednia(double t[], int ile) double suma = 0; for (int i = 0; i < ile; i++) suma += t[i]; return suma/ile; int t1[] = 1,2,3; // tablica liczb całkowitych double t2[] = 4.,5.,6.; // tablica liczb rzeczywistych cout << "calkowite: "<< srednia(t1,3) << endl; cout << "rzeczywiste: "<< srednia(t2,3) << endl; O czym należy pamiętać podczas przeciążania funkcji?

double litry(double kilometry, double litry) cout << ''Oblicza ile samochod pali na 100 km''; return (litry/kilometry*100); // int litry(int stan_baku_pocz, int stan_baku_kon) // cout << ''Oblicza zuzycie bezyny''; // return (stan_baku_pocz stan_baku_kon); // // Co będzie jeśli wprowadzimy przeciążoną funkcję litry? cout << "Zuzycie benzyny: ", litry(100.,12.); cout << "Zuzycie benzyny: ", litry(100,8); Argumenty domyślne Argument domyślny to wartość, która jest używana automatycznie wtedy, kiedy pominiemy odpowiedni argument w wywołaniu funkcji. Przykład: a) z parametrami obowiązkowymi: w prototypie (deklaracji) i definicji funkcji podaje się listę argumentów; dla każdego umieszczonego na liście argumentu należy podczas wywołania funkcji dostarczyć wartość zgodną z typem podanym w deklaracji. // Definicja funkcji int suma(int a, int b, int c) return a+b+c; // Tylko jeden sposób wywołania funkcji z=suma(1,3.0,6.0);// wartości przesłane w argumentach b) z parametrami domyślnymi: w prototypie (deklaracji) i w definicji funkcji podaje się listę argumentów z przypisanymi im wartościami domyślnymi argumentów; w wywołaniu takiej funkcji można nie podawać argumentów, przy czym obowiązuje zasada: jeśli w wywołaniu podany zostanie argument, jego wartość zostanie w funkcji wykorzystana jeśli w wywołaniu nie podany zostanie argument, w funkcji zostanie przyjęta wartość domyślna tego argumentu // Definicja funkcji każdemu argumentowi przypisano wartość domyślną int suma(int a=0, int b=0, int c=0) return a+b+c; z=suma(5); z=suma(5,3) z=suma(1,3,6); // b i c wartości domyślne // c wartość domyślna // wszystkie wartości przesłane w argumentach Ograniczenia stosowania parametrów domyślnych: jeśli parametr nie ma wartości domyślnej, to nie może jej posiadać żaden z poprzedzających goparametrów a) poprawne int objetosc(int dlugosc, int szerokosc=1, int wysokosc=1); b) NIEPOPRAWNE!!! int objetosc(int dlugosc=1, int szerokosc=1, int wysokosc);

Zadanie 1 Opracować zestaw przeciążonych funkcji (tablica całkowita, tablica rzeczywista, wskaźnik do tablicy całkowitej, wskaźnik do tablicy rzeczywistej), które pozwalają: 1. wygenerować losowo elementy tablicy jednowymiarowej całkowitej lub rzeczywistej z zadanego przedziału domkniętego <a,b> (funkcje mają nazwę Generuj), 2. wydrukować zawartość odpowiedniej tablicy (funkcje mają nazwę Drukuj); 3. obliczyć sumę wszystkich elementów w tablicy (funkcje mają nazwę Suma); 4. obliczyć średnią arytmetyczną wszystkich elementów w tablicy (funkcje mają nazwę Srednia); 5. odwrócić kolejność elementów w tablicy (funkcje mają nazwę Odwroc); 6. wypisać na ekranie elementy o indeksach parzystych (funkcje mają nazwę Parzyste). Napisać program testujący opracowane funkcje. Zadanie 2 Napisać program pozwalający scalać dwie tablice jednowymiarowe o różnych rozmiarach tak, aby elementy w sacalonej tablicy posortowane były rosnąco. Założenia: Tablice przechowywane są w postaci struktury: struct Tab unsigned int n; // liczba elementów int *t; // elementy tablicy ; W programie wykorzystywane są funkcje: Tab NewTab(unsigned int m, unsigned int n); // tworzenie tablicy m x n, wypełnionej zerami void wypelnij(tab T, int x=0); // wypełnianie tablicy wartoscią x void drukuj(tab T, char* nazwa); // drukowanie tablicy Tab scal(tab T1, Tab T2); // scalanie tablic void UsunTab(Tab T1); // usuwanie tablic int max(int a, int b) return (a > b)? a : b; // funkcja pomocnicza: zwraca max z dwóch liczb Zadanie 3. Niech będą dane następujące deklaracje: int fun(int); int fun(double); void fun(int, double); void fun(double, int); int n, p; cin >> n >> p; double x,y; cin >> x >> y; char c; cin >> c; float z; cin >> z; Które z podanych poniżej wywołań są poprawne, które funkcje zostaną wywołane, jakie będą wykonane konwersje? a) fun(n) b) fun(x) c) fun(n,x) d) fun(x,n) e) fun(c) f) fun(n,p) g) fun(n,c) h) fun(n,z) i) fun(z,z) Zadanie 4. Czy przeciążanie funkcji można stosować do referencji? Czy kompilator rozróżni te funkcje? void fun(int x); void fun(int& x); Zadanie 5. Czy rozróżnione zostaną następujące funkcje? void fun(char* x); void fun(const char* x);

Zadanie 6. Napisać program pozwalający scalać dwie tablice dwuwymiarowe o różnych rozmiarach tak, aby jako pierwsze do tablicy scalonej trafiły elementy krótszej z tablic, adopiero później drugiej. Założenia: Tablice przechowywane są w postaci struktury: struct Macierz unsigned int n; // liczba kolumn unsigned m; // liczba wierszy int **t; // elementy tablicy ; W programie wykorzystywane są funkcje: Tab NewTab(unsigned int m, unsigned int n); // tworzenie tablicy m x n, wypełnionej 0 void wypelnij(tab T, int x=0); // wypełnianie tablicy wartoscią x void drukuj(tab T, char* nazwa); // drukowanie tablicy Tab scal(tab T1, Tab T2); // scalanie tablic void UsunTab(Tab T1); // usuwanie tablic int max(int a, int b) return (a > b)? a : b; // funkcja pomocnicza: max z dwóch liczb Zadanie 7. Napisać zestaw funkcji działających na datach. Napisać program testujący opracowane funkcje. struct DATA int dzien; int miesiac; int rok; ; bool CzyPoprawna(const DATA & data); int DniPomiedzy(const DATA & data1, const DATA & data2); bool Wczesniejsza(const DATA & data1, const DATA & data2); void DodajDni(const DATA & data1, DATA & data2, int dni); // Stałe const int dniwmiesiacu[12] = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; // Dni od poczatku roku do poczatku miesiaca const int dnidomiesiaca[12] = 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334; static char * nazwymiesiecy[12] = "Styczen", "Luty", "Marzec", "Kwiecien", "Maj", "Czerwiec", "Lipiec", "Sierpien", "Wrzesien", "Pazdziernik", "Listopad", "Grudzien"; bool RokPrzestepny(int rok); // "rok" musi być z zakresu 1900 i 2999. Zwraca prawdę, jeśli "rok" jest przestępny static int DniOd1900(const DATA & data) // "data" zawiera poprawną datę (pomiedzy 1 Stycznia 1990 i 31Grudnia 2100) Zwraca liczbę dni od 1 stycznia 1990

bool CzyPoprawna(const DATA & data); // Zwraca true, jeśli data jest z zakresu 1 Styczen 1990 i 31 Grudzien 2100 int DniPomiedzy(const DATA & data1, const DATA & data2); // "data1" i "data2" zawierają poprawne dane. Zwraca liczbę dni pomiędzy "data1" i "data2" bool Wczesniejsza(const DATA & data1, const DATA & data2); // "data1" i "data2" zawierają poprawne dane. Zwraca true, jeśli "data1" jest wcześniejsza od "data2". W przeciwnym wypadku zwraca false void DodajDni(const DATA & data1, DATA & data2, int dni); // "data1" jest poprawna i "dni" >= 0. Wstawia do data2 nową datę: data1+dni // Przykład funkcji testującej int main() DATA data1, data2; int dni; cout << "Wpisz trzy liczby: dzien, miesiac, rok\n" << " (np. 12 10 2002) ==> "; cin >> data1.dzien >> data1.miesiac >> data1.rok; if (CzyPoprawna(data1)) cout << data1 << endl; else cout << "*** Niepoprawna data ***\n"<< " (Poprawne daty sa z zakresu: "<< " 1 Styczen 1990 i\n" << " 31 Grudzien 2100).\n"; return 1; cout << "O lie dni zwiekszyc date ==> "; cin >> dni; DodajDni(data1, data2, dni); cout << "Nowa data to " << data2 << endl; if (DniPomiedzy(data1, data2) = = dni) cout << "Test ok.\n"; else cout << "Blad w DodajDni lub DniPomiedzy.\n";