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-

Podobne dokumenty