Funkcje

Wyjaśnienie funkcji

Funkcja to kluczowa konstrukcja programistyczna umożliwiająca grupowanie określonego zestawu instrukcji w jeden blok kodu, który można łatwo wywoływać w różnych miejscach programu. Działanie funkcji opiera się na kilku głównych komponentach:

  1. Definicja funkcji: Funkcja jest definiowana w programie z określoną nazwą i, opcjonalnie, listą parametrów, które mogą być jej przekazywane. Definicja określa, jakie operacje będą wykonywane za każdym razem, gdy funkcja zostanie wywołana.

  2. Parametry wejściowe: Wiele funkcji przyjmuje parametry - wartości, które pozwalają na dostosowanie działania funkcji do różnych danych wejściowych. Parametry te umożliwiają ponowne wykorzystanie tej samej funkcji do różnych celów, zmieniając jedynie wartości wejściowe.

  3. Kod wewnętrzny: Wewnątrz funkcji znajduje się blok kodu wykonujący określone operacje. Może to być np. przetwarzanie danych, wykonywanie obliczeń czy modyfikowanie elementów programu. Kod ten działa w sposób izolowany, co pozwala na niezależne przetwarzanie operacji.

  4. Zwracanie wyników: Funkcje często zwracają wynik, czyli wartość, którą można wykorzystać dalej w programie. Jest to realizowane za pomocą instrukcji zwracającej, która przerywa wykonanie funkcji i przekazuje wynik z powrotem do miejsca, z którego funkcja została wywołana.

Funkcje są szczególnie przydatne, gdy chcemy uporządkować kod, zminimalizować jego powtarzalność i ułatwić wprowadzanie modyfikacji. Umożliwiają tworzenie bardziej zrozumiałych i łatwiejszych do zarządzania programów.

Zastosowanie Funkcji w C++

Funkcja w C++ to blok kodu, który wykonuje określone zadanie. Funkcje mogą przyjmować argumenty, wykonywać operacje na tych argumentach, a następnie zwracać wynik. Używanie funkcji pomaga uniknąć duplikacji kodu i sprawia, że programy są bardziej modularne i łatwiejsze do utrzymania.

Składnia:

typ_zwracany nazwaFunkcji(lista_parametrow) {
    // cialo funkcji
    instrukcje;
    return wartosc; // opcjonalne, jesli typ_zwracany nie jest void
}

Przykład deklaracji funkcji:

int Dodaj(int a, int b) {
    return a + b;
}

W powyższym przykładzie funkcja dodaj przyjmuje dwa argumenty typu int i zwraca ich sumę.

Przykład użycia funkcji:

#include <iostream>
using namespace std;

int Dodaj(int a, int b) {
    return a + b;
}

int main() {
    int wynik = Dodaj(3, 4);
    cout << "Wynik: " << wynik << endl; // Wyswietli: Wynik: 7
    return 0;
}

Działanie funkcji:

  1. Definicja funkcji: Określa, co funkcja robi. Składa się z nagłówka (z nazwą funkcji, typem zwracanym i listą parametrów) oraz ciała (z instrukcjami do wykonania).

  2. Wywołanie funkcji: Funkcja jest uruchamiana poprzez jej nazwę i przekazanie odpowiednich argumentów.

  3. Parametry: Funkcje mogą przyjmować parametry wejściowe, które są zmiennymi przekazywanymi do funkcji podczas jej wywołania.

  4. Zwracanie wartości: Funkcje mogą zwracać wartość do miejsca, z którego zostały wywołane, za pomocą słowa kluczowego return. Jeśli funkcja nie zwraca żadnej wartości, używamy typu void.

Przykład użycia funkcji:

#include <iostream>
using namespace std;

string Powitanie(string imie) {
    return "Czesc, " + imie + "!";
}

int main() {
    string wynik = Powitanie("Jan");
    cout << wynik << endl; // Wyswietli: Czesc, Jan!
    return 0;
}

Podsumowanie:

Funkcje w C++ pozwalają na organizowanie kodu w modularny i czytelny sposób. Ułatwiają zarządzanie złożonymi programami poprzez podział na mniejsze, niezależne fragmenty kodu, które można łatwo testować i ponownie wykorzystywać. Dzięki funkcjom, programy stają się bardziej efektywne i łatwiejsze w utrzymaniu.

Przykład 1 - Definicja i wywołanie funkcji w C++

W poniższym przykładzie tworzona jest prosta funkcja w języku C++, która dodaje dwie liczby całkowite. Program najpierw definiuje funkcję, a następnie wywołuje ją, aby obliczyć sumę dwóch liczb podanych przez użytkownika.

#include <iostream>
using namespace std;

// Definicja funkcji dodaj
int Dodaj(int a, int b) {
    return a + b;
}

int main() {
    int liczba1, liczba2, suma;
    
    // Pobieranie wartosci od uzytkownika
    cout << "Podaj pierwsza liczbe calkowita: ";
    cin >> liczba1;
    cout << "Podaj druga liczbe calkowita: ";
    cin >> liczba2;
    
    // Wywolanie funkcji dodaj i przypisanie wyniku do zmiennej suma
    suma = Dodaj(liczba1, liczba2);
    
    // Wyswietlanie wyniku
    cout << "Suma: " << suma << endl;

    return 0;
}

Działanie:

  1. Definicja funkcji: Na początku kodu definiowana jest funkcja Dodaj, która przyjmuje dwa argumenty typu int i zwraca ich sumę.

  2. Deklaracje zmiennych: W funkcji main deklarowane są trzy zmienne całkowite: liczba1, liczba2 i suma.

  3. Pobieranie wartości: Program prosi użytkownika o podanie dwóch liczb całkowitych. Wartości te są wprowadzane do zmiennych liczba1 i liczba2.

  4. Wywołanie funkcji: Funkcja dodaj jest wywoływana z argumentami liczba1 i liczba2. Wynik sumowania jest przypisywany do zmiennej suma.

  5. Wyświetlanie wyniku: Program wyświetla sumę dwóch liczb.

Wynik działania programu:

Podaj pierwsza liczbe calkowita: 10
Podaj druga liczbe calkowita: 15
Suma: 25

Podsumowanie:

W tym przykładzie zdefiniowano prostą funkcję Dodaj, która oblicza sumę dwóch liczb całkowitych. Program demonstruje, jak definiować funkcje, przekazywać argumenty do funkcji oraz odbierać zwracaną wartość, aby wykorzystać ją w dalszych obliczeniach. Dzięki temu kod staje się bardziej modularny i czytelny.

Przykład 2 - Funkcja obliczająca pole prostokąta

W poniższym przykładzie tworzona jest funkcja, która oblicza pole prostokąta na podstawie podanych przez użytkownika długości boków. Program najpierw definiuje funkcję, a następnie wywołuje ją, aby obliczyć pole prostokąta.

#include <iostream>
using namespace std;

// Definicja funkcji obliczajacej pole prostokata
int ObliczPole(int dlugosc, int szerokosc) {
    int pole = dlugosc * szerokosc; // Wykonanie obliczen
    return pole; // Zwrot wyniku
}

int main() {
    int dlugosc, szerokosc, pole;
    
    // Pobieranie wartosci od uzytkownika
    cout << "Podaj dlugosc prostokata: ";
    cin >> dlugosc;
    cout << "Podaj szerokosc prostokata: ";
    cin >> szerokosc;
    
    // Wywolanie funkcji ObliczPole i przypisanie wyniku do zmiennej pole
    pole = ObliczPole(dlugosc, szerokosc);
    
    // Wyswietlanie wyniku
    cout << "Pole prostokata: " << pole << endl;

    return 0;
}

Działanie:

  1. Definicja funkcji: Na początku kodu definiowana jest funkcja ObliczPole, która przyjmuje dwa argumenty typu int. Funkcja oblicza pole prostokąta i przypisuje wynik do zmiennej pole.

  2. Obliczenia w funkcji: Obliczenia są wykonywane w ciele funkcji, a wynik jest przypisywany do zmiennej pole.

  3. Zwracanie wyniku: Funkcja zwraca wartość zmiennej pole.

  4. Deklaracje zmiennych: W funkcji main deklarowane są trzy zmienne całkowite: dlugosc, szerokosc i pole.

  5. Pobieranie wartości: Program prosi użytkownika o podanie długości i szerokości prostokąta, które następnie wprowadza do zmiennych dlugosc i szerokosc.

  6. Wywołanie funkcji: Funkcja ObliczPole jest wywoływana z argumentami dlugosc i szerokosc. Wynik obliczeń jest przypisywany do zmiennej pole.

  7. Wyświetlanie wyniku: Program wyświetla pole prostokąta.

Wynik działania programu:

Podaj dlugosc prostokata: 5
Podaj szerokosc prostokata: 10
Pole prostokata: 50

Podsumowanie:

W tym zmodyfikowanym przykładzie funkcja ObliczPole oblicza pole prostokąta, najpierw wykonując obliczenia i przypisując wynik do zmiennej pole, a następnie zwracając tę zmienną. Dzięki temu kod staje się bardziej przejrzysty i strukturalny, pokazując krok po kroku, jak wykonywane są obliczenia.

Przykład 3 - Przekazywanie zmiennej tablicowej do funkcji w C++

W tym przykładzie pokazano, jak przekazać tablicę liczb całkowitych do funkcji oraz jak funkcja może wypisać wszystkie elementy tablicy. Program definiuje funkcję WyswietlTablice, która przyjmuje tablicę oraz jej rozmiar, a następnie wywołuje tę funkcję, przekazując do niej przykładową tablicę.

#include <iostream>
using namespace std;

// Definicja funkcji WyswietlTablice
void WyswietlTablice(int tablica[], int rozmiar) {
    cout << "Zawartosc tablicy: ";
    for (int i = 0; i < rozmiar; i++) {
        cout << tablica[i] << " ";
    }
    cout << endl;
}

int main() {
    int liczby[] = {1, 2, 3, 4, 5};

   // Obliczenie liczby elementów w tablicy liczby
    int rozmiar = sizeof(liczby) / sizeof(liczby[0]); // sizeof(liczby) zwraca rozmiar całej tablicy w bajtach,
                                                      // a sizeof(liczby[0]) zwraca rozmiar jednego elementu.
                                                      // Dzielenie tych wartości daje liczbę elementów w tablicy.

    // Wywolanie funkcji WyswietlTablice z argumentami liczby i rozmiar
    WyswietlTablice(liczby, rozmiar);

    return 0;
}

Działanie:

  1. Definicja funkcji: Funkcja WyswietlTablice przyjmuje dwa argumenty - tablicę tablica oraz jej rozmiar rozmiar. Funkcja iteruje przez każdy element tablicy i wyświetla go na ekranie.

  2. Deklaracja tablicy: W funkcji main zadeklarowana jest tablica liczby, zawierająca pięć liczb całkowitych.

  3. Obliczenie rozmiaru tablicy: Zmienna rozmiar określa liczbę elementów w tablicy, co jest potrzebne do poprawnej iteracji.

  4. Wywołanie funkcji: Funkcja WyswietlTablice jest wywoływana z dwoma argumentami - tablicą liczby oraz jej rozmiarem rozmiar.

  5. Wyświetlanie wyniku: Funkcja WyswietlTablice wyświetla zawartość tablicy.

Wynik działania programu:

Zawartosc tablicy: 1 2 3 4 5

Ten przykład ilustruje, jak przekazywać tablicę do funkcji i korzystać z niej wewnątrz funkcji, uzyskując dostęp do poszczególnych elementów na podstawie indeksów.

Zadania - funkcje w C++

Zadanie 1 - Sprawdzenie, czy liczba jest parzysta lub nieparzysta

Napisz program, który sprawdzi, czy podana przez użytkownika liczba jest parzysta, czy nieparzysta. Program powinien wykorzystać funkcję, która przyjmie liczbę jako argument i zwróci informację, czy liczba jest parzysta. Następnie program wyświetli odpowiedni komunikat.

Kroki do wykonania:

  • Program wczytuje liczbę całkowitą od użytkownika.

  • Funkcja sprawdza, czy liczba jest parzysta, czy nieparzysta.

  • Funkcja zwraca wartość logiczną (true dla liczby parzystej, false dla liczby nieparzystej).

  • Program wyświetla odpowiedni komunikat na podstawie wyniku funkcji.

Wynik działania programu:

Podaj liczbe calkowita: 4
Liczba 4 jest parzysta.

Zadanie 2 - Kalkulator funkcji matematycznych z opcją wielokrotnego wyboru

Napisz program, który działa jako prosty kalkulator umożliwiający użytkownikowi wielokrotne wykonywanie obliczeń na podstawie wybranych funkcji matematycznych. Program powinien pytać użytkownika o wybór funkcji, a następnie prosić o podanie dwóch liczb do obliczeń. Program działa w pętli, dopóki użytkownik nie wybierze opcji 0, która kończy działanie programu.

Kroki do wykonania:

  • Program wyświetla listę dostępnych funkcji matematycznych: suma, różnica, iloczyn, iloraz, a także opcję zakończenia programu (0).

  • Użytkownik wybiera funkcję, podając odpowiadającą jej liczbę. Jeśli użytkownik wybierze 0, program kończy swoje działanie.

  • Po dokonaniu wyboru innej funkcji program prosi o podanie dwóch liczb, na których ma wykonać obliczenia.

  • Na podstawie wybranej funkcji, program wykonuje odpowiednie obliczenie (np. sumuje lub mnoży liczby).

  • Wynik działania funkcji zostaje wyświetlony na ekranie.

  • Program powtarza kroki od początku, dopóki użytkownik nie wybierze opcji 0.

Wynik działania programu:

Wybierz funkcje:
1. Suma
2. Roznica
3. Iloczyn
4. Iloraz
0. Wyjscie
Wybrana funkcja: 4
Podaj pierwsza liczbe: 9
Podaj druga liczbe: 6
Wynik: 1.5

Wybierz funkcje:
1. Suma
2. Roznica
3. Iloczyn
4. Iloraz
0. Wyjscie
Wybrana funkcja: 0
Koniec programu.

Zadanie 3 - Odwracanie ciągu znaków

Napisz program, który pobiera od użytkownika ciąg znaków, a następnie odwraca go i wyświetla wynik. Program powinien być podzielony na funkcje, aby każdy krok był wykonywany przez osobną funkcję.

Wymagania:

  1. Funkcja GetTextFromUser - powinna wczytać ciąg znaków od użytkownika i zwrócić go do głównego programu.
    Wskazówka: Aby umożliwić wczytanie pełnego ciągu tekstu (włącznie ze spacjami), użyj funkcji getline(cin, text);. Nie zapomnij zaimportować biblioteki string, aby funkcja działała poprawnie.

  2. Funkcja ReverseString - przyjmuje ciąg znaków jako argument, odwraca go i zwraca odwrócony tekst.

  3. Funkcja DisplayResult - przyjmuje odwrócony tekst jako argument i wyświetla go na ekranie.

Kroki do wykonania:

  • Program wczytuje od użytkownika ciąg znaków, który może zawierać spacje i znaki specjalne.

  • Następnie odwraca ciąg - zamienia pierwszy znak z ostatnim, drugi z przedostatnim itd.

  • Program wyświetla odwrócony ciąg znaków na ekranie.

Wynik działania programu:

Podaj ciag znakow: Hello world
Odwrocony ciag: dlrow olleH

Zadanie 4 - Znajdowanie maksymalnej wartości w tablicy

Napisz program, który pobiera od użytkownika pięć liczb całkowitych, zapisuje je w tablicy, a następnie wyszukuje największą wartość w tej tablicy. Program powinien być podzielony na funkcje, gdzie każda funkcja odpowiada za osobne zadanie.

Wymagania:

  1. Funkcja GetArrayFromUser - powinna wczytać pięć liczb całkowitych od użytkownika i zapisać je do tablicy.
    Wskazówka: Zadbaj, aby użytkownik mógł wpisać wartości po kolei. Możesz zapytać o każdą liczbę osobno, aby uprościć proces.

  2. Funkcja FindMaxValue - przyjmuje tablicę liczb oraz wielkość tablicy jako argument, przechodzi przez wszystkie jej elementy, znajduje największą wartość i zwraca ją.

  3. Funkcja DisplayResult - przyjmuje znalezioną maksymalną wartość jako argument i wyświetla ją na ekranie.

Kroki do wykonania:

  • Program wczytuje od użytkownika pięć liczb całkowitych i zapisuje je do tablicy.

  • Następnie przechodzi przez wszystkie elementy tablicy, aby znaleźć największą wartość.

  • Program wyświetla wynik - największą wartość z podanych liczb.

Wynik działania programu:

Podaj liczbe nr 1: 5
Podaj liczbe nr 2: 8
Podaj liczbe nr 3: 3
Podaj liczbe nr 4: 12
Podaj liczbe nr 5: 7
Najwieksza liczba: 12

Zadanie 5 - Gra "Za mało, za dużo"

Napisz program, który losuje liczbę z zakresu 1-100 i pozwala użytkownikowi odgadnąć tę liczbę. Po każdym typowaniu użytkownik otrzymuje informację, czy jego liczba jest za mała, za duża, czy poprawna. Gra kończy się w momencie, gdy użytkownik odgadnie wylosowaną liczbę.

Wymagania:

  1. Funkcja DuzaMala(int liczba, int wylosowanaLiczba) - przyjmuje wprowadzaną przez użytkownika liczbę oraz wylosowaną liczbę, i wypisuje odpowiedni komunikat:
    ''Za mało'' - jeśli podana liczba jest mniejsza od wylosowanej liczby.
    ''Za dużo'' - jeśli podana liczba jest większa od wylosowanej liczby.

  2. Funkcja CheckLiczba(int liczba, int wylosowanaLiczba) - przyjmuje liczbę użytkownika i wylosowaną liczbę, zwraca wartość logiczną true lub false, wskazując, czy liczba użytkownika jest równa wylosowanej liczbie:
    true - jeśli liczby są równe (użytkownik odgadł liczbę).
    false - jeśli liczby są różne.

Kroki do wykonania:

  • Program losuje liczbę z zakresu 1-100.

  • W pętli, program pyta użytkownika o podanie liczby i wykorzystuje funkcję DuzaMala, aby poinformować użytkownika, czy podana liczba jest za mała, za duża, czy poprawna.

  • Funkcja CheckLiczba sprawdza, czy liczba jest równa wylosowanej. Jeśli tak, pętla zostaje zakończona, a program informuje o poprawnym odgadnięciu liczby.

  • Gra trwa, dopóki użytkownik nie odgadnie liczby.

Wskazówka: Użyj funkcji rand() do losowania liczby i srand(time(NULL)) do ustawienia ziarna generatora liczb pseudolosowych, aby każda rozgrywka była inna.

Wynik działania programu:

Podaj liczbe: 50
Za mało
Podaj liczbe: 75
Za dużo
Podaj liczbe: 60
Za mało
Podaj liczbe: 65
Gratulacje! Odgadles liczbe.

Zadanie 6 - Obliczanie silni liczby

Napisz program, który pobiera od użytkownika liczbę całkowitą i oblicza jej silnię. Silnia liczby n (oznaczana jako n!) jest iloczynem wszystkich liczb całkowitych od 1 do n. Program powinien wykorzystywać funkcje do realizacji kolejnych kroków.

Wymagania:

  1. Funkcja GetNumberFromUser - wczytuje liczbę całkowitą od użytkownika i zwraca ją do głównego programu.

  2. Funkcja CalculateFactorial - przyjmuje liczbę całkowitą jako argument, oblicza jej silnię i zwraca wynik.

  3. Funkcja DisplayResult - przyjmuje wynik silni jako argument i wyświetla go na ekranie w odpowiednim formacie.

Kroki do wykonania:

  • Program pobiera liczbę całkowitą od użytkownika.

  • Program oblicza silnię tej liczby, przechodząc przez kolejne liczby całkowite od 1 do podanej liczby i obliczając ich iloczyn.

  • Program wyświetla wynik obliczonej silni na ekranie.

Wynik działania programu:

Podaj liczbe: 5
Silnia liczby 5 wynosi: 120