Tablice
Tworzenie tablicy const tab1 = ; const tab2 = ; const a = "pies"; const b = 1024; const c = "buda"; const tab3 = ; Metody wykorzystywane w pracy z tablicami push() – dodaje element/y
Funkcja jest to fragment programu, któremu nadano nazwę i który możemy wykonać poprzez podanie tej nazwy oraz ewentualnych argumentów. Funkcja może zwracać wartość lub nie.
Przykład najprostszej funkcji w języku C++, która nie przyjmuje argumentów ani nie zwraca wartości:void funkcja_introwertyczna()
{
// kod Twojej funkcji
}
Słowo kluczowe void
oznacza, że funkcja nie zwracana wartości.
Przykład bardziej złożonej funkcji, która przyjmuje dwa argumenty i zwraca wartość:
int dodawanie(int a, int b)
{
return a + b;
}
Funkcja może przyjmować skończenie wiele argumentów, ale zawsze zwraca tylko jedną wartość. Należy pamiętać o właściwym określaniu typów zarówno dla argumentów jak i dla wartości. Wywołanie funkcji z powyższego przykładu, może odbyć się w następujący sposób:
int wynik = dodawanie(123, 456);
Jeśli w pliku zawierającym kod programu, będziemy zapisywać wiele funkcji, to dobrym rozwiązaniem jest najpierw zadeklarowanie naszych funkcji (przed obowiązkową funkcją main
), a następnie pod funkcją main
zapisanie definicji naszych funkcji. Przykład deklaracji i definicji funkcji:
#include <iostream>
using namespace std;
int max(int num1, int num2); // deklaracja funkcji
int main () {
int a = 100; // deklaracja i inicjalizacja dwóch zmiennych lokalnych
int b = 200;
int ret; // deklaracja zmiennej lokalnej
ret = max(a, b); // wywołanie funkcji max
cout << "Wartosc maksymalna to: " << ret << endl;
return 0;
}
int max(int num1, int num2) { // definicja funkcji
int result; // deklaracja zmiennej lokalnej
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Dzięki takiemu rozmieszczeniu definicji funkcji w programie, można łatwo zorientować się, co robi program, ponieważ najpierw czytamy kod funkcji main
, w nim widzimy jakie funkcje są z niego wywoływane, a na końcu widzimy kod pozostałych funkcji zapisanych w pliku.
Niekiedy zdarza się, że chcemy narzucić, aby funkcja posiadała jeden lub kilka opcjonalnych argumentów na wypadek, gdyby nie zostały one podane w czasie jej wywołania. Na przykład poniższa funkcja:
int sum(int a, int b = 20) {
int result;
result = a + b;
return (result);
}
zwróci wartość 300, jeśli wywołamy ją w standardowy sposób: sum(100, 200). Natomiast, gdy wywołamy ją kodem sum(100), to otrzymamy wynik 120 (a nie 110 jak to było napisane wcześniej).
W zdecydowanej większości przypadków argumenty przekazywane do funkcji nie ulegają zmianie. Tzn. jeśli uruchomimy poniższy program:
#include <iostream>
int multiply(int z, int w)
{
return z * w;
}
int main()
{
int a = 4;
int b = 7;
std::cout << multiply(a, b) << '\n';
std::cout << a << '\n';
std::cout << b << '\n';
return 0;
}
to otrzymamy wynik mnożenia, czyli 28 oraz składniki: 4 i 7. Jest to przykład, kiedy argumenty do funkcji przekazujemy przez wartość. Wartości zmiennych a i b nie zmieniają się w wyniku przekazania ich do funkcji multiply. Czasem jednak chcemy, aby wywołanie funkcji spowodowało zmianę argumentów, które do niej przekazujemy. Popatrzmy na poniższy kod:
void add2(int &x, int &y) {
x += 2;
y += 2;
}
int main() {
int firstNum = 10;
int secondNum = 20;
cout << firstNum << " | " << secondNum << "\n"; // zmienne mają wartość 10 i 20
add2(firstNum, secondNum);
cout << firstNum << " | " << secondNum << "\n"; // teraz zmienne mają wartość 12 i 22
return 0;
}
Tan naprawdę, to wszystko jest już wyjaśnione w komentarzach po wywołaniu funkcji add2. Parametry przekazywane do niej ulegają zmianie. W tym przykładzie są zwiększane o 2, ale nic nie stoi na przeszkodzie, aby były modyfikowane na inne sposoby. To, co informuje nas, że parametry do funkcji będą przekazywane przez referencję, to znak & (ampersand) przed nazwą argumentu funkcji.
Przeciążanie funkcji polega na utworzeniu więcej niż jednej funkcji posiadających taką samą nazwę, ale różniących się liczbą lub typem argumentów. Przeciążona funkcja może również zwracać inny typ danych, ale nie jest to warunek wystarczający. Przykłady funkcji przeciążonych:
void funkcja (int);
int funkcja (int); // kompilator zwróci błąd, ponieważ pierwsza i druga funkcja różnią się tylko typem zwracanym
int funkcja (bool);
void funkcja (std::string);
void funkcja (std::string, std::string);
Kompilator na etapie kompilacji kodu, dodaje do nazwy każdej z przeciążonych funkcji specjalny identyfikator, który jest związany z liczbą i typem argumentów. Tak więc po etapie kompilacji wszystkie funkcje mają unikalne nazwy.
Przykład skryptu zawierającego funkcje przeciążone:
#include <iostream>
using namespace std;
int dodaj(int a, int b)
{
return a + b;
}
double dodaj(double a, double b)
{
return a+b ;
}
int main()
{
int liczba1 = dodaj(3, 5);
double liczba2 = dodaj(2.1, 6.2);
cout << "Dodawanie liczb calkowitych: " << liczba1 << "\n";
cout << "Dodawanie liczb rzeczywistych: " << liczba2;
return 0;
}
Z funkcjami rekurencyjnymi mamy do czynienia wtedy kiedy funkcja wywołuje sama siebie. Przy tworzenia takich programów należy oczywiście pamiętać, aby ciąg wywołań kiedyś się skończył. W tym celu przed wywołaniem samej siebie, funkcja powinna sprawdzać warunek. Przykład kodu zawierającego rekurencyjne wywoływanie funkcji do obliczania kolejnych liczb ciągu Fibonacciego:
#include<iostream>
using namespace std;
int fibonacci(int n);
int main()
{
int num, i;
cout << "Ilu elementow ciagu Fibonacciego potrzebujesz: ";
cin >> num;
cout << "\n Ciag Fibonacciego: ";
for(i = 0; i <= num; i++)
{
cout << " " << fibonacci(i);
}
cout << "\n";
return 0;
}
int fibonacci(int n)
{
if(n == 0)
return 0;
else if (n == 1)
return 1;
else
return(fibonacci(n-1) + fibonacci(n-2));
}
Należy pamiętać, że przy nieumiejętnym stosowaniu funkcji rekurencyjnych można szybko doprowadzić do lawinowej ilości wywołań oraz do znaczącego wydłużenia czasu obliczeń.
Napisz program w języku C++, który będzie zawierał trzy funkcje. Funkcja pierwsza nie zwraca wartości, ani nie przyjmuje parametru. Funkcja druga nie zwraca wartości, ale przyjmuje parametr typu string
. Funkcja trzecia zwraca dowolną wartość typu int
i przyjmuje argument typu string
.
Wszystkie 3 funkcje mają być wywoływane z funkcji main
poprzez wybranie odpowiednich numerów: 1, 2 lub 3. Każda funkcja ma wyświetlać informację o tym, że została wywołana, jaki argument otrzymała i jaką wartość zwraca. Jeśli użytkownik wprowadzi liczbę 0, to program ma zakończyć działanie.
Wybierz 1, aby wykonac funkcje pierwsza, 2 dla drugiej i 3 dla trzeciej Wcisnij 0, aby wyjsc z programu Wybierz opcje 1, 2, 3 lub 0 1 Ta funkcja nie przyjmuje parametrow ani nie zwraca zadnej wartosci Jedyne co robi, to wypisuje tekst na konsoli Wybierz opcje 1, 2, 3 lub 0 2 Podaj argument dla drugiej funkcji, np. liczbe lub wyraz covid Ta funkcja nic nie zwraca, ale za to mozemy jej przekazac argument typu string Argument tej funkcji to: covid Wybierz opcje 1, 2, 3 lub 0 3 Podaj argument dla trzeciej funkcji, np. liczbe lub wyraz 19 Ta funkcja zwraca, wartosc typu int oraz mozemy jej przekazac argument typu string Argument tej funkcji to: 19 Funkcja trzecia zwrocila wartosc 1 Wybierz opcje 1, 2, 3 lub 0 0 Process returned 0 (0x0) execution time : 18.296 s
Napisz program, który będzie skracał ułamek zwykły. Program ma pobierać na wejściu dwie liczby całkowite jako licznik i mianownik oraz zwracać dwie liczby całkowite jako licznik i mianownik skróconego ułamka. Program powinien wykluczać możliwość wprowadzenia zera jako mianownika. Poza główną funkcją main
, program ma zawierać dodatkową funkcję wyznaczającą największy wspólny dzielnik dwóch liczb całkowitych (wywoływać tą funkcję z wewnątrz main
).
Podaj licznik ułamka: 12 Podaj mianownik ułamka: 64 12/64 = 3/16
int
(licznik i mianownik). Następnie licznik i mianownik są skracane z wykorzystaniem największego wspólnego dzielnika dla tych liczb. Funkcja main
powinna wykonywać następujące zadania:
main
, ma zawierać jeszcze dwie funkcje: NWD
i NWW
o wiadomym działaniu. Funkcje NWD
i NWW
mają składać się z deklaracji i definicji. Przekazywanie argumentów: przez wartość.
float
i zwraca wartość typu float
float
i zwraca wartość typu float
double
i zwraca wartość typu double
oblicz
. Funkcje mają wykonywać następujące obliczenia:
int
(liczba boków) i zwraca wartość typu float
int
(liczba boków) i typu float
(długość boku) a zwraca wartość typu double
for
. Przyjmij, że maksymalna wartość argumentu x wynosi 12 i użytkownik nie może podać większej liczby.
2018-11-17 00:10:12 2020-04-14 23:54:06
Tworzenie tablicy const tab1 = ; const tab2 = ; const a = "pies"; const b = 1024; const c = "buda"; const tab3 = ; Metody wykorzystywane w pracy z tablicami push() – dodaje element/y
Instrukcja if if (warunek1) { // kod, który się wykona, gdy warunek1 będzie prawdziwy } else if (warunek2) { // kod, który się wykona, gdy warunek2 będzie prawdziwy } else { // ko
Tablica $_GET zawiera dane z formularza wysłanego metodą get oraz wartości przesłane w adresie URL. Tablica $_POST zawiera dane z formularza wysłanego metodą post Tablica $_SERVER zawiera
Formatowanie daty i czasu date(string $format, ?int $timestamp = null): string Funkcja date zwraca datę lub czas w postaci tekstu. Jej obowiązkowym parametrem jest $format, a opcjonalnym znaczni