Funkcje Składnia definicji funkcji Przykład Zmienne globalne i
Transkrypt
Funkcje Składnia definicji funkcji Przykład Zmienne globalne i
Funkcje Funkcja w języku C++ jest jakby podprogramem, który możemy wykorzystać w dowolnym miejscu naszego programu. Funkcje wykorzystuje się w wielu sytuacjach, np. wtedy, gdy wykonuje się często jakiś ciąg instrukcji. Można go wówczas wyodrębnić i umieścić w zdefiniowanej funkcji, co zmniejsza długość programu i ułatwia jego analizę. Zazwyczaj poszczególne etapy programu umieszcza się z wykorzystaniem funkcji. Funkcja może pobierać z zewnątrz pewne wartości jako argumenty lub ich nie pobierać. W przypadku, gdy funkcja nie pobiera żadnych argumentów mówimy, że jest bezparametrowa. Funkcja może też zwracać jedną wartość lub nie zwracać wartości. Każda funkcja, którą tworzymy musi mieć nazwę, określony zestaw argumentów, które pobiera (parametry formalne) i określony typ zwracanej wartości. Składnia definicji funkcji typ_zwracanego_wyniku nazwa_funkcji(zestaw parametrów formalnych) { Ciąg instrukcji; } Przykład Definicja funkcji pobierającej dwa argumenty rzeczywiste i zwracającej jako wynik średnią arytmetyczną tych liczb. float srednia (float a, float b) { return (a+b)/2; } Pojawienie się w funkcji instrukcji powoduje natychmiastowe zakończenie działanie tej funkcji. Zmienne globalne i lokalne Zmienne deklarowane we wnętrzu funkcji, to zmienne lokalne funkcji. Nie są one znane poza wnętrzem funkcji. We wnętrzu funkcji zmienna jest znana od momentu jej deklaracji do klamry zamykającej blok, w którym zmienna jest zadeklarowana!. Zmienne zadeklarowane we wnętrzu funkcji main są również zmiennymi lokalnymi funkcji głównej. Zmienne globalne deklarujemy przed zdefiniowaniem wszystkich funkcji. Są one dostępne dla wszystkich funkcji, przed którymi zostały zadeklarowane. Przykład #include <iostream> using namespace std; int a; //zmienna globalna, znają ją wszystkie funkcje programu void pisz() //funkcja nie zwraca wartości dlatego użyto void { cout <<"Bok ma długość: "<<a; } float kwadrat() { return a*a; } int prostokat(int x, int y) { int s; //zmienna lokalna dostępna tylko dla funkcji prostokat s=x*y; return s; } int main() { int bok_a, bok_b; //zmienne lokalne funkcji main //inne instrukcje } -1- Przesłanianie zmiennych O zmienne lokalnie należy martwić się tylko „lokalnie”. Funkcja jest niezależną częścią programu i możesz ją projektować niezależnie od reszty programu. Nie musisz się przejmować tym, że jakaś zmienna wewnątrz funkcji i na zewnątrz mają takie same nazwy. Otóż w funkcji zmienna lokalna przesłania zmienną globalną. Inaczej mówiąc zmienne globalne i lokalne chociaż mają te same nazwy są różnymi zmiennymi i zajmują dwa różne miejsca w pamięci. Zadania Zadanie 1 Szlaczek Utwórz program z użyciem funkcji, który narysuje szlaczek o zadanej długości złożony z gwiazdek (*). Skorzystaj z deklaracji funkcji: void szlaczek(int i) Wejście Pierwszy i jedyny wiersz wejścia zawiera liczbę całkowitą k z zakresu 2..60. Wyjście W jednym wierszu wyjścia ma pojawić się k gwiazdek . Przykład Dla danej wejściowej: 5 poprawną odpowiedzią jest: ***** Zadanie 2 Odległość Dane są dwa punkty na płaszczyźnie. Oblicz z wykorzystaniem funkcji odległość pomiędzy nimi. Skorzystaj z deklaracji funkcji: float odleglosc(int Ax, int Ay, int Bx, int By) Wejście Pierwszy i jedyny wiersz wejścia zawiera cztery liczby całkowite oddzielone pojedynczą spacją z zakresu: -32768…32767 – współrzędne punktów A i B Wyjście W jedynym wierszu wyjścia należy zapisać jedną liczbę rzeczywistą będąca odległością pomiędzy punktami A iB Przykład Dla pliku wejściowego: 1 1 2 2 poprawną odpowiedzią jest plik wynikowy: 1,414213 Zadanie 3 Silnia Silnia liczby naturalnej n jest definiowana następująco: 1, n = 0 n!= 1 * 2 * 3 * ... * n, n > 0 na przykład 5! = l* 2* 3* 4* 5 = 120. Napisz program w którym użyjesz funkcji, long long silnia(int n) który wyznaczy silnię podanej liczby Wejście W pierwszym i jedynym wierszu wejścia zapisano jedną liczbę naturalną n z przedziału 0..20 Wyjście W pliku wyjściowym należy zapisać obliczoną wartość silni Przykład Dla danej wejściowej: 10 poprawną odpowiedzią jest liczba: 3 628 800 -2- Zadanie 4 MAX Napisz program z użyciem funkcji: double MAX(double a, double b, double c) który wyznaczy największą z trzech podanych liczb Wejście W pierwszym i jedynym wierszu wejścia zapisano trzy liczby rzeczywiste dodatnie z zakresu 0 … 100000 oddzielone pojedynczą spacją: Wyjście Wynikiem jest największa z 3 podanych liczb. Przykład Dla danych wejściowych: 5 7 7 Poprawnym rozwiązaniem jest liczba: 7 Zadanie 5 Trójkąt Napisz program z użyciem funkcji: void trojkat(double a, double b, double c) który dla podanych trzech liczb rzeczywistych będących długościami odcinków bada, czy da się z nich zbudować trójkąt. Jeśli tak, to określa powstały trójkąt jako rozwartokątny, ostrokątny lub prostokątny. Wejście W pierwszym i jedynym wierszu wejścia zapisano trzy liczby rzeczywiste dodatnie z zakresu 0 … 100000 oddzielone pojedynczą spacją: Wyjście Wynikiem jest: • słowo NIE, jeśli trójkąt nie istnieje • jedno ze słów rozwartokątny, ostrokątny, prostokątny Przykład 2 Przykład 1 Dla pliku wejściowego: Dla pliku wejściowego: 3 4 5 poprawną odpowiedzią jest napis: prostokątny 3 4 6 poprawną odpowiedzią jest napis: rozwartokątny Wsk: Zauważ, że istnieje pewna zależność między sumą kwadratów długości dwóch krótszych boków a kwadratem najdłuższego boku. Jeśli znasz to skorzystaj z tw. cosinusów Zadanie 6 Wielkie litery Napisz program z użyciem funkcji: char wielkie(char litera) który zamienia małą literę alfabetu łacińskiego na wielką. Wejście W pierwszym i jedynym wierszu zapisano jeden znak ‘a’, ‘b’, …, ‘z’ Wyjście W pliku wyjściowym należy zapisać dużą literą podanego znaku. Przykład Dla danej wejściowej: c poprawną odpowiedzią jest znak: C -3- Zadanie 7 Pierwsza Napisz program z użyciem funkcji bool pierwsza(int a) który sprawdzi, czy podana liczba jest pierwsza. Wejście W pierwszym i jedynym wierszu zapisano jedną liczbę naturalną n. Wyjście Jeden z napisów: TAK, gdy liczba n jest pierwsza NIE, w przeciwnym przypadku Przykład Dla danej: 1997 poprawną odpowiedzią jest liczba: TAK Zadanie 8 NWD Napisz program z użyciem funkcji int nwd(int a, int b) który wyznaczy największy wspólny dzielnik n liczb naturalnych podanych na wejściu. Wsk: Skorzystaj z następującego algorytmu1: 1. Jeśli a=b, to NWD=a, koniec 2. Powtarzaj krok 3…4 dopóki a<>0 i b<>0 3. Jeśli a>b to za a=a % b 4. Jeśli b>a to za b=b % a 5. Jeśli a=0, to NWD=b, Jeśli b=0, to NWD=a Wejście W pierwszym wierszu zapisano jedną liczbę naturalną n będącą ilością liczb, z których trzeba wyznaczyć NWD. W drugim wierszu podano n liczb całkowitych rozdzielonych spacją Wyjście W pliku wyjściowym należy zapisać liczbę całkowitą – największy wspólny dzielnik wszystkich podanych liczb Przykład Dla danych wejściowej: 3 6 8 10 poprawną odpowiedzią jest liczba: 2 Zadanie 9 Kwadrat Utwórz program z użyciem funkcji, który narysuje figurę o zadanej długości złożony z gwiazdek (*). Funkcję zdefiniuj jako: void kwadrat(int n) Wejście Pierwszy i jedyny wiersz wejścia zawiera liczbę całkowitą k z zakresu 2..30. Wyjście W k wierszu wyjścia ma pojawić się k gwiazdek . Przykład Dla danej wejściowej: 3 poprawną odpowiedzią jest: * * * * * * * * * 1 Jest to algorytm Euklidesa -4-