Programowanie strukturalne i obiektowe Funkcje
Transkrypt
Programowanie strukturalne i obiektowe Funkcje
Semestr II Arkusz zadań 6 Programowanie strukturalne i obiektowe Funkcje Procedura lub funkcja to fragment kodu, który jest wpisywany raz, ale może być wykonywany wielokrotnie. Realizuje on najczęściej jakąś pojedynczą czynność przy użyciu ustalonego przez programistę algorytmu. Jak wiemy, działanie wielu algorytmów składa się na pracę całego programu, możemy więc powiedzieć, że procedury i funkcje są podprogramami, których cząstkowa praca przyczynia się do funkcjonowania programu jako całości. Procedura to wydzielony fragment kodu programu, którego zadaniem jest wykonywanie jakiejś czynności. Funkcja zawiera kod, którego celem jest obliczenie i zwrócenie jakiejś wartości. Zadanie 1. Stworzyć plik funkcje1.cpp i wpisać w nim następujący kod: #include <iostream> using namespace std; void pokazTekst() { cout << "Moja pierwsza funkcja\n"; } int main() { pokazTekst(); system("pause"); return 0; } następnie skompilować plik oraz uruchomić program. Powyższy program ukazywał przeznaczenie funkcji (czyli podział kodu na fragmenty), jednakże pomijał dwa bardzo ważne aspekty z nimi związane. Chodzi mianowicie o parametry oraz zwracanie wartości. Rozszerzają one użyteczność i możliwości funkcji tak znacznie, że bez nich w zasadzie trudno wyobrazić sobie skuteczne i efektywne programowanie. Nie tylko w programowaniu trudno wskazać operację, którą można wykonać bez posiadania o niej dodatkowych informacji. Przykładowo, nie można wykonać operacji kopiowania czy przesunięcia pliku do innego katalogu, jeśli nie jest znana nazwa tegoż pliku oraz nazwa docelowego folderu. Gdybyśmy napisali funkcję realizującą taką czynność, to nazwy pliku oraz katalogu finalnego byłyby jej parametrami. Parametry funkcji to dodatkowe dane, przekazywane do funkcji podczas jej wywołania. Parametry pełnią rolę dodatkowych zmiennych wewnątrz funkcji i można ich używać podobnie jak innych zmiennych, zadeklarowanych w niej bezpośrednio. Różnią się one oczywiście tym, że wartości parametrów pochodzą z „zewnątrz” – są im przypisywane podczas wywołania funkcji. Zadanie 2. Stworzyć plik suma.cpp i wpisać w nim następujący kod: #include <iostream> using namespace std; void Suma(int l1, int l2) { int suma = l1 + l2; cout << "Suma liczba wynosi: " << suma << endl; Cosinus 2008 Cezary Obczyński i Rafał Kamocki 1/4 Semestr II Arkusz zadań 6 Programowanie strukturalne i obiektowe } int main() { int liczba1 = 10; int liczba2 = 15; Suma(liczba1, liczba2); int l1; cout << "Podaj pierwsza liczbe: "; cin >> l1; int l2; cout << "Podaj druga liczbe: "; cin >> l2; Suma(l1,l2); system("pause"); return 0; } następnie skompilować plik oraz uruchomić program. Spora część funkcji pisanych przez programistów ma za zadanie obliczenie jakiegoś wyniku (często na podstawie przekazanych im parametrów). Inne z kolei wykonują operacje, które nie zawsze muszą się udać (choćby usunięcie pliku – dany plik może przecież już nie istnieć). W takich przypadkach istnieje więc potrzeba, by funkcja zwróciła jakąś wartość. Niekiedy będzie to rezultat jej intensywnej pracy, a innym razem jedynie informacja, czy zlecona funkcji czynność została wykonana pomyślnie. Zadanie 3. Stworzyć plik pole.cpp i wpisać w nim następujący kod: #include <iostream> using namespace std; int Pole(int a, int b) { int pole = a * b; return pole; } int Obwod(int a, int b) { return 2*a*b; } Cosinus 2008 Cezary Obczyński i Rafał Kamocki 2/4 Semestr II Arkusz zadań 6 Programowanie strukturalne i obiektowe int main() { int boka = 5; int bokb = 5; int obwod; obwod = Obwod(boka, bokb); cout << "Pole prostokata wynosi: " << Pole(boka,bokb) << endl; cout << "Obwod prostokata wynosi: " << obwod << endl; system("pause"); return 0; } następnie skompilować plik oraz uruchomić program. Zadanie 4. Napisać funkcję o nazwie trojmian, która zwraca liczbę pierwiastków równania kwadratowego postaci ax^2+bx+c=0 (założyć, ze a jest różne od zera). Funkcja pobiera współczynniki a, b, c. Następnie wykorzystać ją w przykładowym programie. Zadanie 5. Napisać funkcję o nazwie potega, która oblicza n-tą potęgę liczby 2. Funkcja pobiera wykładnik n i zwraca potęgę liczby 2 o wykładniku n. Przetestować tę funkcję w przykładowym programie. Zadanie 6. Napisać funkcję pole, która pobiera trzy liczby rzeczywiste a, b, c reprezentujące długości boków trójkąta i zwraca jego pole obliczone ze wzoru Herona: sqrt(p*(p-a)*(p-b)*(p-c)), gdzie p jest połową obwodu trójkąta. Za pomocą tej funkcji obliczyć pole przykładowego trójkąta. Zadanie 7. Napisać funkcję o nazwie wybraneLiczby, która pobiera dwie liczby całkowite dodatnie reprezentujące końce przedziału liczbowego i zwraca ilość liczb całkowitych z tego przedziału, które są podzielne przez 3 i 4. Przeciążanie funkcji C++ umożliwia tworzenie wielu funkcji o tej samej nazwie i o tym samym przeznaczeniu. Mechanizm ten nazywa się przeciążaniem lub przeładowaniem funkcji. Listy parametrów funkcji przeciążonych muszą się różnić od siebie albo typami parametrów, albo ich ilością, albo jednocześnie typami i ilością. Na przykład: float Suma(int,int); float Suma(double,double); float Suma(int,int,int); Najczęściej funkcji przeciążonych używa się, gdy chcemy wykonać tę samą czynność na różnych typach danych lub różnej ilości danych. float Suma(int a, int b) { Cosinus 2008 Cezary Obczyński i Rafał Kamocki 3/4 Semestr II Arkusz zadań 6 Programowanie strukturalne i obiektowe return a + b; } float Suma(double a, double b) { return a + b; } float Suma(int a, int b, int c) { return a + b + c; } Cosinus 2008 Cezary Obczyński i Rafał Kamocki 4/4