# Funkcijos

# Apie funkcijas

Labai paprastai tariant funkcija (arba metodas) yra tam tikrų veiksmų rinkinys, skirtas konkrečios užduoties atlikimui.

Keletas pagrindinių minčių:

  • Funkcija apjungia tam tikros užduoties kodą į vieną vietą. Tai padeda turėti tvarkingesnį kodą.
  • Funkcija turėtų atlikti vieną užduotį. Tai gali būti sumos skaičiavimas, duomenų nuskaitymas iš failo, duomenų išvedimas į konsolę iš masyvo, vidurkio skaičiavimas, duomenų filtravimui ir pan.
  • Funkciją galima kviesti daug kartų. Todėl vieną kartą užrašius algoritmą ir funkcijai duodant skirtingus duomenis, ji atliks tą pačią užduotį, bet kiekvieną kartą su reikiamais duomenimis.
  • Funkcija mato tik tuos duomenis (kintamuosius), kurie yra sukurti joje arba kurie yra perduodami jos iškvietimo metu.

# Funkcijų sintaksė

<tipas> <pavadinimas>(<argumentai / parametrai>)
{
    <kodas>
    return <reiksme>; // jei metodo tipas yra ne void
}
  • tipas - kokio (duomenų) tipo atsakymą funkciją grąžins. Jeigu funkcijos užduotis surasti sumą, tai atsakymas pavyzdžiui gali būti int ar double tipo, nes jei suma bus skaičiuojama iš int tipo skaičių, tai ir atsakymas bus int, jei iš double, tai bus double. Jeigu funkcija ieškos vidurkio, tuomet atsakymas greičiausiai bus double tipo. Jeigu funkcija turės sugeneruoti kažkokią tekstinę eilutę, tai atsakymas tikriausiai bus string. Ir t. t. Jeigu funkcija neturi grąžinti jokių duomenų kaip atsakymo, t. y. jeigu funkcija neturi grąžinti jokio atsakymo, o tik atlikti darbą, tuomet jos tipa bus void, kuris reiškia, kad funkcija tik atlieka darbą ir negrąžina jokio atsakymo. O jeigu funkcija yra void, tuomet return eilutė nebesirašo.
  • pavadinimas - funkcijos pavadinimas. Taikomos tokios pačios taisyklės kaip ir kintamųjų pavadinimams. Šis pavadinimas naudojamas norint iškviesti funkciją. Pavadinime turėtų atsispindėti kokią užduotį sprendžia funkcija. Pavyzdžiui: įvedimas, išvedimas, suma, vidurkis, filtravimas, ...
  • argumentai / parametrai - papildomi duomenys, kurie reikalingi funkcijos darbui bei kuriuos gauna funkcija.
  • kodas - kodas (ar veiksmų rinkinys), kurį atlieka funkcija užduoties įgyvendinimui.
  • return ir reiksme - glaudžiai susijusi su <tipas> dalimi, šioje vietoje yra grąžinamas atsakymas, tokio tipo, koks nurodytas <tipas> dalyje. Pavyzdžiui, jeigu <tipas> dalyje buvo nurodyta, kad ši funkcija turi grąžinti int tipo atsakymą, tuomet return dalyje turi būti grąžinta reikšmė arba kintamasis, kuris yra int tipo. Kai <tipas> yra void, tuomet ši return dalis išvis nesirašo.

# Funkcijos aprašymas ir iškvietimas

Funkcijas aprašyti ir iškviesti galima taip:

#include <iostream>
using namespace std;

void funkcija(); // programa informuojama apie funkcijos egzistavimą

int main()
{
	funkcija(); // funkcija iškviečiama
}

void funkcija() // aprašoma funkcija
{
	// funkcijos kodas
}

Arba galima ir taip:

#include <iostream>
using namespace std;

void funkcija() // aprašoma funkcija
{
	// funkcijos kodas
}

int main()
{
	funkcija(); // funkcija iškviečiama
}

# Paprasčiausios funkcijos

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti();

int main()
{
	pasisveikinti();
}

void pasisveikinti()
{
	cout << "Labas" << endl;
}

Rezultatai:

Labas

# Pavyzdys 2

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti();

int main()
{
	pasisveikinti();
	pasisveikinti();
	pasisveikinti();
	pasisveikinti();
	pasisveikinti();
}

void pasisveikinti()
{
	cout << "Labas ir tau" << endl;
}

Rezultatai:

Labas ir tau
Labas ir tau
Labas ir tau
Labas ir tau
Labas ir tau

# Pavyzdys 3

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti();

int main()
{
	for (int i = 0; i < 5; i++)
	{
		pasisveikinti();
	}
}

void pasisveikinti()
{
	cout << "Labas" << endl;
}

Rezultatai:

Labas
Labas
Labas
Labas
Labas

# Pavyzdys 4

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti();

int main()
{
	cout << "ar vykdyti? t/n" << endl;
	char vykdyti;
	cin >> vykdyti;

	if (vykdyti == 't')
	{
		pasisveikinti();
	}
}

void pasisveikinti()
{
	cout << "Labas" << endl;
}

Rezultatas 1:

ar vykdyti? t/n
t
Labas

Rezultatas 2:

ar vykdyti? t/n
n

# Pavyzdys 5

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti();
void atsisveikinti();

int main()
{
	pasisveikinti();
	atsisveikinti();
}

void pasisveikinti()
{
	cout << "Labas" << endl;
}

void atsisveikinti()
{
	cout << "viso" << endl;
}

Rezultatai:

Labas
viso

# Pavyzdys 6

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti();
void atsisveikinti();

int main()
{
	pasisveikinti();
	atsisveikinti();
	atsisveikinti();
	pasisveikinti();
}

void pasisveikinti()
{
	cout << "Labas" << endl;
}

void atsisveikinti()
{
	cout << "viso" << endl;
}

Rezultatai:

Labas
viso
viso
Labas

# Pavyzdys 7

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti();

int main()
{

}

void pasisveikinti()
{
	cout << "Labas" << endl;
}

Rezultatai:


# Pavyzdys 8

Kodas:

#include <iostream>
using namespace std;

void atsakymas();

int main()
{
	atsakymas();
}

void atsakymas()
{
	cout << 5 + 3 << endl;
}

Rezultatai:

8

# Pavyzdys 9

Kodas:

#include <iostream>
using namespace std;

void sudeti();

int main()
{
	int pirmas = 8, antras = 3;
	sudeti();
}

void sudeti()
{
    // kintamieji pirmas ir antras nėra pasiekiami šioje vietoje,
    // todėl programa šioje vietoje nepasileis
	cout << pirmas + antras << endl;
}

# Pavyzdys 10

Kodas:

#include <iostream>
using namespace std;

void funkcijaVirsuje()
{
	cout << "funkcija virs main" << endl;
}

int main()
{
	funkcijaVirsuje();
}

Rezultatai:

funkcija virs main

# Pavyzdys 11

Kodas:

#include <iostream>
using namespace std;

void lentele();

int main()
{
	lentele();
}

void lentele()
{
	for (int i = 1; i <= 5; i++)
	{
		for (int j = 1; j <= 5; j++)
		{
			cout << i * j << " ";
		}
		cout << endl;
	}
	cout << endl;
}

Rezultatai:

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25

# Pavyzdys 12

Kodas:

#include <iostream>
using namespace std;

void informacija();

int main()
{
	informacija();
}

void informacija()
{
	string vardas = "Gabriele";
	int amzius = 25;
	cout << vardas << " " << amzius << endl;
}

Rezultatai:

Gabriele 25

# Pavyzdys 13

Kodas:

#include <iostream>
using namespace std;

void informacija();
void klaidinga();

int main()
{
	informacija();
	klaidinga();
}

void informacija()
{
	string vardas = "Gabriele";
	int amzius = 25;
	cout << vardas << " " << amzius << endl;
}

void klaidinga()
{
	// programa nepasileis, nes ši funkcija nepasiekia tokio kintamojo
	cout << vardas << endl;
}

# Pavyzdys 14

Kodas:

#include <iostream>
using namespace std;

void skaiciavimai();
void suma();
void skirtumas();
void kazkasKito();

int main()
{
	skaiciavimai();
	kazkasKito();
}

void skaiciavimai()
{
	suma();
	skirtumas();
}

void suma()
{
	int pirmas = 5, antras = 4;
	int suma = pirmas + antras;
	cout << pirmas << " + " << antras << " = " << suma << endl;
}

void skirtumas()
{
	int pirmas = 7, antras = 3;
	int skirtumas = pirmas - antras;
	cout << pirmas << " - " << antras << " = " << skirtumas << endl;
}

void kazkasKito()
{
	cout << "kazkas kito" << endl;
}

Rezultatai:

5 + 4 = 9
7 - 3 = 4
kazkas kito

# Pavyzdys 15

Kodas:

#include <iostream>
using namespace std;

void skaiciuoti();

int main()
{
	string vykdyti;

	do
	{
		skaiciuoti();

		cout << "ar dar norite skaiciuoti? (t/n): ";
		cin >> vykdyti;
	} while (vykdyti == "t");
}

void skaiciuoti()
{
	int pirmas, antras;
	cout << "Iveskite du skaicius: ";
	cin >> pirmas >> antras;
	int suma = pirmas + antras;
	int skirtumas = pirmas - antras;
	cout << "suma = " << suma << endl;
	cout << "skirtumas = " << skirtumas << endl;
}

Rezultatas 1:

Iveskite du skaicius: 4 8
suma = 12
skirtumas = -4
ar dar norite skaiciuoti? (t/n): n

Rezultatas 2:

Iveskite du skaicius: 9 3
suma = 12
skirtumas = 6
ar dar norite skaiciuoti? (t/n): t
Iveskite du skaicius: 2 3
suma = 5
skirtumas = -1
ar dar norite skaiciuoti? (t/n): t
Iveskite du skaicius: 56 14
suma = 70
skirtumas = 42
ar dar norite skaiciuoti? (t/n): n

# Užduotys

# Užduotis 1

Sukurkite ir iškvieskite funkciją, kuri į ekraną išvestų trumpą eilėraštį.

# Užduotis 2

Sukurkite ir iškvieskite funkciją, kurioje kintamuosiuose būtų saugoma informacija apie policininką (vardas, pavardė, amžius, alga, etatas, specializacija). Išveskite šią informaciją suformatuotai (pavyzdžiui: įterpkite į sakinį, ar išveskite atskirose eilutėse ar pan.).

# Užduotis 3

Sukurkite ir iškvieskite funkciją, kuri išvestų norimus žodžius atskirose eilutėse, prieš kiekvieną žodį parašant brūkšnį. Pavyzdžiui:

- pirmas
- antras
- ...

# Užduotis 4

Sukurkite iš iškvieskite funkciją, kuri paprašytų vartotojo įvesti savo vardą. Po įvedimo, metodas turi pasisveikinti su vartotoju.

# Užduotis 5

Sukurkite ir iškvieskite funkciją, kuri sugeneruotų lentelę. Pirmame ir antrame stulpeliuose turi būti atsitiktinai sugeneruoti skaičiai, o trečiame - tos eilutės skaičių suma. Pavyzdžiui:

4 5 9
1 7 8
9 2 11
3 6 9

# Užduotis 6

Sukurkite ir iškvieskite funkciją, kurioje turėtumėte skaičių masyvą su duomenimis. Šio masyvo skaičius išveskite į ekraną atskiriant tarpu. Pavyzdžiui:

7 8 9 5 4 3 5

# Užduotis 7

Sukurkite funkciją, kuri išvestų 10 atsitiktinių skaičių vienoje eilutėje, skaičius atskiriant tarpu.

# Užduotis 8

Sukurkite funkciją, kuri išvestų 1 atsitiktinį skaičių, bei po jo padėtų vieno simbolio tarpą. Šį metodą kvieskite (main funkcijoje) cikle, kuris būtų vykdomas 100 kartų. Taip turėtumėte matyti išvestų 100-ą atsitiktinių skaičių. Pavyzdžiui:

7 8 3 4 5 1 2 5 7 9 6 4 3 2 1 2 ...

# Užduotis 9

Sukurkite funkciją, kuri iš jame sukurto žodžių masyvo paimtų kurį nors žodį atsitiktinai ir jį išvestų. Sukurkite antrą metodą, kuris sugeneruotų atsitiktinį skaičių ir jį išvestų. Sukurkite ir iškvieskite trečią metodą, kuri iškviestų kitus du metodus.

# Funkcijos su argumentais

# Apie funkcijas su argumentais

Funkcijos yra labiau panaudojamos, kai jos tą patį algoritmą gali pritaikyti prie skirtingų duomenų. Jei funkcijos darbui reikalingi duomenys - juos galima duoti funkcijai per argumentų sąrašą.

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti(string vardas);

int main()
{
	pasisveikinti("Ieva");
	pasisveikinti("Gytis");
	pasisveikinti("Gabriele");
	pasisveikinti("Paulius");
}

void pasisveikinti(string vardas)
{
	cout << "Labas, " << vardas << endl;
}

Rezultatai:

Labas, Ieva
Labas, Gytis
Labas, Gabriele
Labas, Paulius

# Pavyzdys 2

Kodas:

#include <iostream>
using namespace std;

void pasisveikinti(string vardas);

int main()
{
	pasisveikinti("Ieva");
	pasisveikinti("Gytis");
	pasisveikinti("Gabriele");
	pasisveikinti("Paulius");

	string pirmas = "Tomas",
		antras = "Indre";

	pasisveikinti(pirmas);
	pasisveikinti(antras);
}

void pasisveikinti(string vardas)
{
	cout << "Labas, " << vardas << endl;
}

Rezultatai:

Labas, Ieva
Labas, Gytis
Labas, Gabriele
Labas, Paulius
Labas, Tomas
Labas, Indre

# Pavyzdys 3

Kodas:

#include <iostream>
using namespace std;

void informacija(string vardas, int amzius);

int main()
{
	string zmogus = "Povilas";
	int amzius = 23;

	informacija("Agne", 24);
	informacija(zmogus, amzius);
	informacija("Giedrius", amzius);
	informacija(zmogus, 19);
}

void informacija(string vardas, int amzius)
{
	cout << vardas << " " << amzius << endl;
}

Rezultatai:

Agne 24
Povilas 23
Giedrius 23
Povilas 19

# Pavyzdys 4

Kodas:

#include <iostream>
using namespace std;

void suma(int pirmas, int antras);

int main()
{
	suma(7, 4);
	suma(9, 3);
	suma(9, 1 + 1);

	int skaicius1, skaicius2;
	cout << "Iveskite du skaicius: ";
	cin >> skaicius1 >> skaicius2;

	suma(skaicius1, skaicius2);
	suma(skaicius2, 5);
	suma(10, skaicius1);
}

void suma(int pirmas, int antras)
{
	int atsakymas = pirmas + antras;
	cout << pirmas << " + " << antras << " = " << atsakymas << endl;
}

Rezultatas 1:

7 + 4 = 11
9 + 3 = 12
9 + 2 = 11
Iveskite du skaicius: 9 3
9 + 3 = 12
3 + 5 = 8
10 + 9 = 19

Rezultatas 2:

7 + 4 = 11
9 + 3 = 12
9 + 2 = 11
Iveskite du skaicius: -1 5
-1 + 5 = 4
5 + 5 = 10
10 + -1 = 9

# Pavyzdys 5

Kodas:

#include <iostream>
using namespace std;

void sudetis(int a, int b, int c);

int main()
{
	sudetis(4, 7, 8);
	sudetis(9, 2, 3);
	sudetis(1, 7, 5);
}

void sudetis(int a, int b, int c)
{
	int suma = a + b + c;
	cout << a << " + " << b << " + "
		<< c << " = " << suma << endl;
}

Rezultatai:

4 + 7 + 8 = 19
9 + 2 + 3 = 14
1 + 7 + 5 = 13

# Pavyzdys 6

Kodas:

#include <iostream>
using namespace std;

void sudetis(int a, int b, int c);
void atimtis(int a, int b);

int main()
{
	sudetis(4, 7, 8);
	sudetis(9, 2, 3);
	atimtis(7, 4);
	sudetis(1, 7, 5);
	atimtis(9, 4);
}

void sudetis(int a, int b, int c)
{
	int suma = a + b + c;
	cout << a << " + " << b << " + "
		<< c << " = " << suma << endl;
}

void atimtis(int a, int b)
{
	int skirtumas = a - b;
	cout << a << " - " << b << " = " << skirtumas << endl;
}

Rezultatai:

4 + 7 + 8 = 19
9 + 2 + 3 = 14
7 - 4 = 3
1 + 7 + 5 = 13
9 - 4 = 5

# Pavyzdys 7

Kodas:

#include <iostream>
#include <time.h>
using namespace std;

void sudetis(int a, int b);
void atimtis(int a, int b);

int main()
{
	srand(time(NULL));
	int pirmas, antras;

	for (int i = 0; i < 10; i++)
	{
		pirmas = rand() % 100 + 1;
		antras = rand() % 100 + 1;
		sudetis(pirmas, antras);
		atimtis(pirmas, antras);
		cout << endl;
	}
}

void sudetis(int a, int b)
{
	int suma = a + b;
	cout << a << " + " << b << " = " << suma << endl;
}

void atimtis(int a, int b)
{
	int skirtumas = a - b;
	cout << a << " - " << b << " = " << skirtumas << endl;
}

Rezultatas 1:

63 + 90 = 153
63 - 90 = -27

69 + 49 = 118
69 - 49 = 20

34 + 94 = 128
34 - 94 = -60

94 + 16 = 110
94 - 16 = 78

70 + 85 = 155
70 - 85 = -15

26 + 54 = 80
26 - 54 = -28

37 + 13 = 50
37 - 13 = 24

63 + 100 = 163
63 - 100 = -37

58 + 91 = 149
58 - 91 = -33

82 + 46 = 128
82 - 46 = 36

Rezultatas 2:

12 + 76 = 88
12 - 76 = -64

88 + 51 = 139
88 - 51 = 37

80 + 59 = 139
80 - 59 = 21

13 + 43 = 56
13 - 43 = -30

68 + 100 = 168
68 - 100 = -32

8 + 15 = 23
8 - 15 = -7

40 + 32 = 72
40 - 32 = 8

66 + 28 = 94
66 - 28 = 38

12 + 25 = 37
12 - 25 = -13

74 + 36 = 110
74 - 36 = 38

# Pavyzdys 8

Kodas:

#include <iostream>
#include <time.h>
using namespace std;

void sudetis(int a, int b);

int main()
{
	srand(time(NULL));

	for (int i = 0; i < 10; i++)
	{
		sudetis(rand() % 100 + 1, rand() % 100 + 1);
	}
}

void sudetis(int a, int b)
{
	int suma = a + b;
	cout << a << " + " << b << " = " << suma << endl;
}

Rezultatas 1:

21 + 42 = 63
45 + 29 = 74
42 + 76 = 118
100 + 90 = 190
37 + 71 = 108
63 + 37 = 100
43 + 43 = 86
3 + 50 = 53
97 + 85 = 182
64 + 37 = 101

Rezultatas 2:

79 + 55 = 134
62 + 50 = 112
81 + 67 = 148
91 + 40 = 131
13 + 81 = 94
40 + 46 = 86
92 + 94 = 186
19 + 15 = 34
62 + 53 = 115
58 + 92 = 150

# Pavyzdys 9

Kodas:

#include <iostream>
using namespace std;

void skaiciavimai(int a, int b);
void sudetis(int a, int b);
void atimtis(int a, int b);

int main()
{
	skaiciavimai(74, 32);
	skaiciavimai(89, 23);
}

void skaiciavimai(int a, int b)
{
	sudetis(a, b);
	atimtis(a, b);
}

void sudetis(int a, int b)
{
	cout << a << " + " << b << " = " << a + b << endl;
}

void atimtis(int a, int b)
{
	cout << a << " - " << b << " = " << a - b << endl;
}

Rezultatai:

74 + 32 = 106
74 - 32 = 42
89 + 23 = 112
89 - 23 = 66

# Pavyzdys 10

Kodas:

#include <iostream>
using namespace std;

void skaiciavimai(int skaicius1, int skaicius2);
void sudetis(int a, int b);
void atimtis(int a, int b);

int main()
{
	int pirmas = 78, antras = 34;
	skaiciavimai(pirmas, antras);
}

void skaiciavimai(int skaicius1, int skaicius2)
{
	sudetis(skaicius1, skaicius2);
	atimtis(skaicius1, skaicius2);
}

void sudetis(int a, int b)
{
	int suma = a + b ;
	cout << a << " + " << b << " = " << suma << endl;
}

void atimtis(int a, int b)
{
	int skirtumas = a - b;
	cout << a << " - " << b << " = " << skirtumas << endl;
}

Rezultatai:

78 + 34 = 112
78 - 34 = 44

# Pavyzdys 11

Kodas:

#include <iostream>
using namespace std;

void skaiciavimai(int skaicius1, int skaicius2, int skaicius3);
void sudetis(int a, int b);
void sudetis(int a, int b, int c);

int main()
{
	int pirmas = 78, antras = 34, trecias = 45;
	skaiciavimai(pirmas, antras, trecias);
}

void skaiciavimai(int skaicius1, int skaicius2, int skaicius3)
{
	sudetis(skaicius1, skaicius2);
	sudetis(skaicius1, skaicius2, skaicius3);
}

void sudetis(int a, int b)
{
	int suma = a + b ;
	cout << a << " + " << b << " = " << suma << endl;
}

void sudetis(int a, int b, int c)
{
	cout << a << " + " << b << " + "
		<< c << " = " << a + b + c << endl;
}

Rezultatai:

78 + 34 = 112
78 + 34 + 45 = 157

# Pavyzdys 12

Kodas:

#include <iostream>
using namespace std;

void skaiciavimai(int skaicius1, int skaicius2);
void sudetis(int a, int b);
void sudetis(int a, int b, int c);

int main()
{
	int pirmas = 78, antras = 34;
	skaiciavimai(pirmas, antras);
}

void skaiciavimai(int skaicius1, int skaicius2)
{
	sudetis(skaicius1, skaicius2);
	sudetis(skaicius1, skaicius2, 14);
	int skaicius = 45;
	sudetis(skaicius1, skaicius2, skaicius);
}

void sudetis(int a, int b)
{
	int suma = a + b ;
	cout << a << " + " << b << " = " << suma << endl;
}

void sudetis(int a, int b, int c)
{
	cout << a << " + " << b << " + "
		<< c << " = " << a + b + c << endl;
}

Rezultatai:

78 + 34 = 112
78 + 34 + 14 = 126
78 + 34 + 45 = 157

# Pavyzdys 13

Kodas:

#include <iostream>
using namespace std;

void lentele(int eilutes, int stulpeliai);

int main()
{
	lentele(3, 3);
	lentele(2, 5);
	lentele(4, 5);

	cout << "Iveskite norima lenteles dydi: ";
	int eil, stulp;
	cin >> eil >> stulp;
	lentele(eil, stulp);
}

void lentele(int eilutes, int stulpeliai)
{
	cout << "Daugybos (" << eilutes << "x" << stulpeliai << ") lentele" << endl;
	for (int i = 1; i <= eilutes; i++)
	{
		for (int j = 1; j <= stulpeliai; j++)
		{
			cout << i * j << " ";
		}
		cout << endl;
	}
	cout << endl;
}

Rezultatai:

Daugybos (3x3) lentele
1 2 3
2 4 6
3 6 9

Daugybos (2x5) lentele
1 2 3 4 5
2 4 6 8 10

Daugybos (4x5) lentele
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

Iveskite norima lenteles dydi: 10 10
Daugybos (10x10) lentele
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

# Pavyzdys 14

Kodas:

#include <iostream>
using namespace std;

void isvedimas(int skaiciai[], int kiekis);
void isvedimas(string komentaras, int masyvas[], int kiekis);

int main()
{
	int skaiciai[] = { 4, 7, 5, 6, 9, 2 };
	isvedimas(skaiciai, 6);

	int pazymiai[] = { 9, 8, 7, 10, 7, 6, 9 };
	isvedimas(pazymiai, 7);
	isvedimas("Moksleivio pazymiai", pazymiai, 7);
}

void isvedimas(int skaiciai[], int kiekis)
{
	cout << "masyvo skaiciai:" << endl;
	for (int i = 0; i < kiekis; i++)
	{
		cout << skaiciai[i] << " ";
	}
	cout << endl;
}

void isvedimas(string komentaras, int masyvas[], int kiekis)
{
	cout << komentaras << endl;
	for (int i = 0; i < kiekis; i++)
	{
		cout << masyvas[i] << " ";
	}
	cout << endl;
}

Rezultatai:

masyvo skaiciai:
4 7 5 6 9 2
masyvo skaiciai:
9 8 7 10 7 6 9
Moksleivio pazymiai
9 8 7 10 7 6 9

# Pavyzdys 15

Kodas:

#include <iostream>
using namespace std;

void isvedimas(int skaiciai[], int kiekis);
void suma(int skaiciai[], int kiekis);
void vidurkis(int skaiciai[], int kiekis);

int main()
{
	int pazymiai[] = { 9, 8, 7, 10, 7, 6, 9 };
	int kiekis = 7;

	cout << "Duomenys su kuriais dirbame:" << endl;
	isvedimas(pazymiai, kiekis);

	cout << "Skaiciavimai is siu duomenu:" << endl;
	suma(pazymiai, kiekis);
	vidurkis(pazymiai, kiekis);
}

void isvedimas(int skaiciai[], int kiekis)
{
	cout << "masyvo skaiciai:" << endl;
	for (int i = 0; i < kiekis; i++)
	{
		cout << skaiciai[i] << " ";
	}
	cout << endl;
}

void suma(int skaiciai[], int kiekis)
{
	int suma = 0;
	for (int i = 0; i < kiekis; i++)
	{
		suma += skaiciai[i];
	}
	cout << "suma = " << suma << endl;
}

void vidurkis(int skaiciai[], int kiekis)
{
	int suma = 0;
	for (int i = 0; i < kiekis; i++)
	{
		suma += skaiciai[i];
	}
	cout << "vidurkis = " << (double)suma / kiekis << endl;
}

Rezultatai:

Duomenys su kuriais dirbame:
masyvo skaiciai:
9 8 7 10 7 6 9
Skaiciavimai is siu duomenu:
suma = 56
vidurkis = 8

# Pavyzdys 16

Kodas:

#include <iostream>
using namespace std;

void veiksmaiSuMoksleiviu(int pazymiai[], int kiekis);
void isvedimas(int skaiciai[], int kiekis);
void vidurkis(int skaiciai[], int kiekis);

int main()
{
	int pazymiai1[] = { 9, 8, 7, 10, 7, 6, 9 };
	int kiekis1 = 7;
	veiksmaiSuMoksleiviu(pazymiai1, kiekis1);

	int pazymiai2[] = { 8, 7, 9, 2, 5, 7 };
	int kiekis2 = 6;
	veiksmaiSuMoksleiviu(pazymiai2, kiekis2);
}

void veiksmaiSuMoksleiviu(int pazymiai[], int kiekis)
{
	cout << "Duomenys su kuriais dirbame:" << endl;
	isvedimas(pazymiai, kiekis);

	cout << "Skaiciavimai is siu duomenu:" << endl;
	vidurkis(pazymiai, kiekis);

	cout << endl;
}

void isvedimas(int skaiciai[], int kiekis)
{
	cout << "moksleivio pazymiai:" << endl;
	for (int i = 0; i < kiekis; i++)
	{
		cout << skaiciai[i] << " ";
	}
	cout << endl;
}

void vidurkis(int skaiciai[], int kiekis)
{
	int suma = 0;
	for (int i = 0; i < kiekis; i++)
	{
		suma += skaiciai[i];
	}
	cout << "vidurkis = " << (double)suma / kiekis << endl;
}

Rezultatai:

Duomenys su kuriais dirbame:
moksleivio pazymiai:
9 8 7 10 7 6 9
Skaiciavimai is siu duomenu:
vidurkis = 8

Duomenys su kuriais dirbame:
moksleivio pazymiai:
8 7 9 2 5 7
Skaiciavimai is siu duomenu:
vidurkis = 6.33333

# Pavyzdys 17

Kodas:

#include <iostream>
using namespace std;

void isvedimas(int skaiciai[], int kiekis);
void suma(int skaiciai[], int kiekis);

int main()
{
	int skaiciai1[] = { 4, 7, 8, 6, 3 };
	int kiekis1 = 5;
	int skaiciai2[] = { 8, 9, 8, 7, 9, 4 };
	int kiekis2 = 6;
	suma(skaiciai1, kiekis1);
	suma(skaiciai2, kiekis2);
}

void isvedimas(int skaiciai[], int kiekis)
{
	for (int i = 0; i < kiekis; i++)
	{
		cout << skaiciai[i] << " ";
	}
	cout << endl;
}

void suma(int skaiciai[], int kiekis)
{
	cout << "skaiciai masyve:" << endl;
	isvedimas(skaiciai, kiekis);

	int suma = 0;

	for (int i = 0; i < kiekis; i++)
	{
		suma += skaiciai[i];
	}

	cout << "suma = " << suma << "\n\n";
}

Rezultatai:

skaiciai masyve:
4 7 8 6 3
suma = 28

skaiciai masyve:
8 9 8 7 9 4
suma = 45

# Pavyzdys 18

Kodas:

#include <iostream>
using namespace std;

void isvedimas(string komentaras, string sarasas[], int kiekis);

int main()
{
	string pirkiniai[] = { "sasiuvinys", "tusinukas", "piestukai", "trintukas", "kuprine" };
	int pirkKiekis = 5;

	string programavimoKalb[] = { "C++", "Python", "JavaScript" };
	int progKKiekis = 3;

	isvedimas("Pirkiniu sarasas", pirkiniai, pirkKiekis);
	isvedimas("Programavimo kalbos", programavimoKalb, progKKiekis);
}

void isvedimas(string komentaras, string sarasas[], int kiekis)
{
	cout << komentaras << ":" << endl;
	for (int i = 0; i < kiekis; i++)
	{
		cout << " - " << sarasas[i] << endl;
	}
	cout << endl;
}

Rezultatai:

Pirkiniu sarasas:
 - sasiuvinys
 - tusinukas
 - piestukai
 - trintukas
 - kuprine

Programavimo kalbos:
 - C++
 - Python
 - JavaScript

# Užduotys

# Užduotis 1

Parašykite ir iškvieskite funkciją, kuri per argumentų sąrašą priimtų norimą žodį. Funkcija gautą žodį turi išvesti jį apskliaudžiant dviem brūkšniukais iš kiekvieno šono (pavyzdžiui: -- pomidoras --). Šią funkciją kvieskite 5 kartus, kiekvieną kartą funkcijai duodant vis kitokį žodį.

# Užduotis 2

Parašykite ir iškvieskite funkciją, kuri per argumentų sąrašą priimtų vardą, pavardę, amžių ir profesiją. Ši funkcija, turi išvesti sakinį panaudojant gautus žodžius. Funkciją kvieskite du kartus, jai duodant skirtingus duomenis.

# Užduotis 3

Sukurkite 4 skirtingas funkcijas sumos, skirtumo, sandaugos bei dalmens radimui. Kiekviena iš jų turi priimti po du sveikuosius skaičius, turi išvesti kokį veiksmą ir su kokiais skaičiais atliko, bei atsakymą (pvz.: 5 + 7 = 12). Iškvieskite šias funkcijas bent po vieną kartą, duodant skirtingus arba tuos pačius skaičius.

# Užduotis 4

Parašykite funkciją, kuri priimtų du skaičius. Joje išveskite tą skaičių, kuris yra didesnis. O jei skaičiai lygūs - išvestų tekstą "skaičiai lygūs".

# Užduotis 5

Sukurkite šias funkcijas:

  • Kuri priimtų vardą, pavardę, akademinės grupės kodą. Funkcija turi išvesti gautą informaciją.
  • Kuri priimtų tris skaičius (pažymius). Funkcija turi suskaičiuoti ir išvesti pažymių vidurkį.
  • Apjungiančią funkciją, kuri per argumentų sąrašą priimtų vardą, pavardę, akademinės grupės kodą bei tris skaičius (pažymius). Joje iškvieskite kitus du, prieš tai sukurtus metodus. Šią pagrindinę funkciją kvieskite bent 2 kartus su skirtingais duomenimis.

# Užduotis 6

Parašykite ir iškvieskite funkciją, kuri per argumentų sąrašą priimtų skaičių, kuris nurodo kiek atsitiktinių skaičių yra norima sugeneruoti. Funkcija turi sugeneruoti ir išvesti nurodytą kiekį atsitiktinių skaičių, kiekvieną jų atskiriant tarpu.

# Užduotis 7

Parašykite ir iškvieskite funkciją, kuri priimtų šiuos skaičius: kiek – kiek atsitiktinių skaičių norima sugeneruoti; minimumas – mažiausia galima atsitiktinio skaičiaus reikšmė; maksimumas – didžiausia galima atsitiktinio skaičiaus reikšmė. Funkcija turi sugeneruoti nurodytą kiekį atsitiktinių skaičių, atsižvelgdama į generuojamų skaičių min ir max reikšmes. Kiekvieną šių skaičių turi išvesti atskiriant kableliu.

# Užduotis 8

Parašykite ir iškvieskite funkciją, kuri per argumentus priimtų skaičių masyvą. Funkcija turi rasti ir išvesti mažiausią rastą skaičių.

# Užduotis 9

Parašykite ir iškvieskite funkciją, kuri per argumentus primtų žodžių masyvą. Funkcija turi rasti ir išvesti ilgiausią rastą žodį.

# Užduotis 10

Parašykite funkciją, kuri iš gauto žodžių masyvo rastų kuris žodis yra trumpiausias. Išvestų žodžius atskirose eilutėse, kaip nors išskiriant rastą trumpiausią žodį. Funkciją kvieskite kelis kartus su skirtingais žodžių masyvais.

# Funkcijos su grąžinimo tipu

# Apie funkcijas su grąžinimo tipu

  • Po atliktų skaičiavimų funkcijos gali grąžinti kokį nors atsakymą, kuris gali būti bet kokio kintamojo ar objekto tipo.
  • Kuriant funkciją, kuri turėtų grąžinti kokį nors atsakymą (skaičių, žodį, sąrašą, objektą ar dar ką), būtina nurodyti grąžinimo tipą prieš pat funkcijos pavadinimą, o gale funkcijos būtina aprašyti return su grąžinamu atsakymu. Return type prieš funkcijos pavadinimą ir return gale funkcijos yra tiesiogiai susiję vienas su kitu - funkcija privalo grąžinti būtent tokio tipo atsakymą koks ir buvo nurodytas funkcijos aprašyme.

# Funkcijų su grąžinimo tipu sintaksė

<tipas> <pavadinimas>(<argumentai / parametrai>)
{
    // funkcijos kodas...
    return <reiksme>;
}
  • tipas - kokio tipo (string, int, ...) funkcija grąžins.
  • reiksme - grąžinamas atsakymas, kurio tipas sutampa su nurodytu prieš funkcijos pavadinimą.

# Funkcijos iškvietimas ir atsakymų gavimas / panaudojimas

Jeigu tik kviečiam (problema ta, kad nematysim jokio rezultato):

// toks iškvietimas:
suma();

// bus tas pats kas:
5; // užrašom reikšmę, bet jos niekaip nepanaudojam

Jei išsaugom atsakymą į kintamąjį:

int kintamasis = suma();

Jeigu iškart išvedam atsakymą:

cout << suma();

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
using namespace std;

int skaicius();

int main()
{
    cout << skaicius() << endl;
    return 0;
}

int skaicius()
{
    return 5 + 3;
}

Rezultatai:

8

# Pavyzdys 2

Kodas:

#include <iostream>
using namespace std;

int skaicius()
{
    int a = 9;
    int b = 10;
    return a + b;
}

int main()
{
    int skaicius_is_funkcijos = skaicius();
    cout << skaicius_is_funkcijos;

    return 0;
}

Rezultatai:

19

# Pavyzdys 3

Kodas:

#include <iostream>
#include <ctime>
using namespace std;

int skaicius()
{
    int atsitiktinis = rand() % 100 + 1;
    return atsitiktinis;
}

int skaicius_reziuose(int nuo, int iki)
{
    int max = iki - nuo;
    return rand() % max + nuo;
}

int main()
{
    srand(time(NULL));

    cout << skaicius() << endl;
    cout << skaicius() << endl;
    cout << skaicius() << endl;

    cout << "nuo 1 iki 10: " << skaicius_reziuose(1, 10) << endl;
    cout << "nuo 5 iki 10: " << skaicius_reziuose(5, 10) << endl;
    cout << "nuo 100 iki 1000: " << skaicius_reziuose(100, 1000) << endl;

    return 0;
}

Rezultatas 1:

83
69
31
nuo 1 iki 10: 8
nuo 5 iki 10: 9
nuo 100 iki 1000: 756

Rezultatas 2:

5
4
8
nuo 1 iki 10: 4
nuo 5 iki 10: 7
nuo 100 iki 1000: 875

# Pavyzdys 4

Kodas:

#include <iostream>
using namespace std;

int suma(int pirmas, int antras)
{
    return pirmas + antras;
}

int skirtumas(int sk1, int sk2)
{
    return sk1 - sk2;
}

int main()
{
    int skaicius1, skaicius2;

    cout << "Iveskite du skaicius: ";
    cin >> skaicius1 >> skaicius2;

    cout << skaicius1 << " + " << skaicius2 << " = "
        << suma(skaicius1, skaicius2) << endl;

    cout << skaicius1 << " - " << skaicius2 << " = "
        << skirtumas(skaicius1, skaicius2) << endl;

    return 0;
}

Rezultatas 1:

Iveskite du skaicius: 8 7
8 + 7 = 15
8 - 7 = 1

Rezultatas 2:

Iveskite du skaicius: 14 9
14 + 9 = 23
14 - 9 = 5

# Pavyzdys 5

Kodas:

#include <iostream>
using namespace std;

int suma(int pirmas, int antras)
{
    return pirmas + antras;
}

int skirtumas(int sk1, int sk2)
{
    return sk1 - sk2;
}

void isvedimas(int pirmas, int antras)
{
    cout << pirmas << " + " << antras << " = "
        << suma(pirmas, antras) << endl;

    cout << pirmas << " - " << antras << " = "
        << skirtumas(pirmas, antras) << endl;
}

int main()
{
    int skaicius1 = 14, skaicius2 = 3;
    isvedimas(skaicius1, skaicius2);

    return 0;
}

Rezultatai:

14 + 3 = 17
14 - 3 = 11

# Pavyzdys 6

Kodas:

#include <iostream>
using namespace std;

// FUNKCIJŲ PROTOTIPAI -------------------------------

int suma(int pirmas, int antras);
int skirtumas(int sk1, int sk2);
void isvedimas(int pirmas, int antras);

// PAGRINDINĖ FUNKCIJA -------------------------------

int main()
{
    int skaicius1 = 14, skaicius2 = 3;

    isvedimas(skaicius1, skaicius2);
    isvedimas(16, skaicius2);
    isvedimas(skaicius1, 53);
    isvedimas(98, 12);

    return 0;
}

// KITOS FUNKCIJOS -----------------------------------

int suma(int pirmas, int antras)
{
    return pirmas + antras;
}

int skirtumas(int sk1, int sk2)
{
    return sk1 - sk2;
}

void isvedimas(int pirmas, int antras)
{
    cout << pirmas << " + " << antras << " = "
        << suma(pirmas, antras) << endl;

    cout << pirmas << " - " << antras << " = "
        << skirtumas(pirmas, antras) << endl;

    cout << endl;
}

Rezultatai:

14 + 3 = 17
14 - 3 = 11

16 + 3 = 19
16 - 3 = 13

14 + 53 = 67
14 - 53 = -39

98 + 12 = 110
98 - 12 = 86


# Pavyzdys 7

Kodas:

#include <iostream>
#include <string>
using namespace std;

int skaiciu_suma(int skaiciai[], int kiekis)
{
    int suma = 0;

    for (int i = 0; i < kiekis; i++)
    {
        suma += skaiciai[i];
    }

    return suma;
}

void isvedimas(string komentaras, int masyvas[], int kiekis)
{
    cout << komentaras << endl;
    
    for (int i = 0; i < kiekis; i++)
    {
        cout << masyvas[i] << " ";
    }

    cout << endl;
}

int main()
{
    int skaiciai1[] = { 4, 7, 4, 2, 3, 6, 5, 4, 8 };
    int skaiciai1_kiekis = 9;

    int skaiciai2[] = { 8, 5, 2, 3, 5, 4, 7 };
    int skaiciai2_kiekis = 7;

    isvedimas("Pirmas skaiciu masyvas", skaiciai1, skaiciai1_kiekis);
    cout << "Skaiciu suma: " << skaiciu_suma(skaiciai1, skaiciai1_kiekis) << endl;
    cout << endl;

    isvedimas("Antras skaiciu masyvas", skaiciai2, skaiciai2_kiekis);
    cout << "Skaiciu suma: " << skaiciu_suma(skaiciai2, skaiciai2_kiekis);

    return 0;
}

Rezultatai:

Pirmas skaiciu masyvas
4 7 4 2 3 6 5 4 8
Skaiciu suma: 43

Antras skaiciu masyvas
8 5 2 3 5 4 7
Skaiciu suma: 34

# Pavyzdys 8

Kodas:

#include <iostream>
#include <string>
using namespace std;

int skaiciu_suma(int skaiciai[], int kiekis)
{
    int suma = 0;

    for (int i = 0; i < kiekis; i++)
    {
        suma += skaiciai[i];
    }

    return suma;
}

double skaiciu_vidurkis(int suma, int kiekis)
{
    return (double)suma / kiekis;
}

void isvedimas(string komentaras, int masyvas[], int kiekis)
{
    cout << "-----------------------------\n";
    cout << komentaras << endl;
    
    for (int i = 0; i < kiekis; i++)
    {
        cout << masyvas[i] << " ";
    }

    int suma = skaiciu_suma(masyvas, kiekis);
    cout << "\n\nSkaiciu suma\n" << suma << "\n\n";
    cout << "Skaiciu vidurkis\n" << skaiciu_vidurkis(suma, kiekis) << "\n";
    cout << "-----------------------------\n\n";
}

int main()
{
    int skaiciai1[] = { 4, 7, 4, 2, 3, 6, 5, 4, 8 };
    int skaiciai1_kiekis = 9;

    int skaiciai2[] = { 8, 5, 2, 3, 5, 4, 7 };
    int skaiciai2_kiekis = 7;

    isvedimas("Pirmas skaiciu masyvas", skaiciai1, skaiciai1_kiekis);
    isvedimas("Antras skaiciu masyvas", skaiciai2, skaiciai2_kiekis);

    return 0;
}

Rezultatai:

-----------------------------
Pirmas skaiciu masyvas
4 7 4 2 3 6 5 4 8

Skaiciu suma
43

Skaiciu vidurkis
4.77778
-----------------------------

-----------------------------
Antras skaiciu masyvas
8 5 2 3 5 4 7

Skaiciu suma
34

Skaiciu vidurkis
4.85714
-----------------------------

# Pavyzdys 9

Kodas:

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

// FUNKCIJŲ PROTOTIPAI -------------------------------

void duomenu_isvedimas(string vardai[], int amziai[], int kiekis);
string ilgiausias_vardas(string vardai[], int kiekis);
int didziausias_amzius(int amziai[], int kiekis);

// PAGRINDINĖ PROGRAMOS FUNKCIJA ---------------------

int main()
{
    string vardai[10];
    int amziai[10];
    int kiekis = 0;

    cout << "Kiek duomenu norite suvesti? ";
    cin >> kiekis;
    cout << endl;

    for (int i = 0; i < kiekis; i++)
    {
        cout << i + 1 << "-asis zmogus\n";
        cout << "Vardas: ";
        cin >> vardai[i];
        cout << "Amzius: ";
        cin >> amziai[i];
        cout << endl;
    }

    duomenu_isvedimas(vardai, amziai, kiekis);

    return 0;
}

// VISOS KITOS FUNKCIJOS -----------------------------

void duomenu_isvedimas(string vardai[], int amziai[], int kiekis)
{
    cout << "+--------------------+--------+\n";
    cout << "| Vardas             | Amzius |\n";
    cout << "+--------------------+--------+\n";
    
    for (int i = 0; i < kiekis; i++)
    {
        cout << "| " << setw(18) << left << vardai[i]
            << " | " << setw(6) << amziai[i] << " |\n";
    }

    cout << "+--------------------+--------+\n\n";
    cout << "Ilgiausias vardas: " << ilgiausias_vardas(vardai, kiekis) << endl;
    cout << "Didziausias amzius: " << didziausias_amzius(amziai, kiekis) << endl;
    cout << "\n\n";
}

string ilgiausias_vardas(string vardai[], int kiekis)
{
    string ilgiausias = "";

    for (int i = 0; i < kiekis; i++)
    {
        if (vardai[i].length() > ilgiausias.length())
        {
            ilgiausias = vardai[i];
        }
    }

    return ilgiausias;
}

int didziausias_amzius(int amziai[], int kiekis)
{
    int didz_amzius = 0;

    for (int i = 0; i < kiekis; i++)
    {
        if (amziai[i] > didz_amzius)
        {
            didz_amzius = amziai[i];
        }
    }

    return didz_amzius;
}

Rezultatai:

Kiek duomenu norite suvesti? 3

1-asis zmogus
Vardas: Tomas
Amzius: 23

2-asis zmogus
Vardas: Inga
Amzius: 19

3-asis zmogus
Vardas: Gintare
Amzius: 20

+--------------------+--------+
| Vardas             | Amzius |
+--------------------+--------+
| Tomas              | 23     |
| Inga               | 19     |
| Gintare            | 20     |
+--------------------+--------+

Ilgiausias vardas: Gintare
Didziausias amzius: 23

# Pavyzdys 10

Kodas:

#include <iostream>
using namespace std;

bool ar_tiesa()
{
    int skaicius = 8;

    if (skaicius > 5)
    {
        return true;
    }

    return false;
}

int main()
{
    if (ar_tiesa())
    {
        cout << "funkcija grazino true rezultata";
    }

    return 0;
}

Rezultatai:

funkcija grazino true rezultata

# Užduotys

# Užduotis 1

Parašykite šias dvi funkcijas:

  • Funkciją, kuri priimtų du skaičius ir grąžintų tą kuris yra didesnis iš jų, o jei skaičiai lygūs - grąžintų bet kurį iš jų.
  • Funkciją, kuri grąžintų mažiausią skaičių iš trijų. Funkcija per argumentus priima tris skaičius, o grąžina mažiausią iš jų.

# Užduotis 2

Sukurkite funkciją, kurioje vartotojas galėtų suvesti savo vardą. Ši funkcija turėtų grąžinti įvesto vardo ilgį (simbolių kiekį) kaip atsakymą.

# Užduotis 3

Leiskite vartotojui suvesti du skaičius.

Sukurkite šias funkcijas:

  • Sumos skaičiavimo, kuri priimtų du skaičius ir grąžintų gautą sumą kaip atsakymą.
  • Skirtumo skaičiavimo, kuri priimtų du skaičius ir grąžintų gautą skirtumą kaip atsakymą.
  • Sandaugos skaičiavimo, kuri priimtų du skaičius ir grąžintų gautą sandaugą kaip atsakymą.
  • Dalmens skaičiavimo, kuri priimtų du skaičius ir grąžintų gautą dalmenį kaip atsakymą.

Iškvieskite šias funkcijas, perduodant vartotojo suvestus skaičius.

Šių funkcijų rezultatus galite saugoti naujuose kintamuosiuose arba galite iškart išvesti, išvedant atsakymus.

# Užduotis 4

Sukurkite funkciją, kuri leistų vartotojui suvesti savo paskutinį pažymį. Ši funkcija turi grąžinti true jeigu pažymys yra teigiamas (4 ir daugiau) arba false jeigu pažymys yra mažesnis.

Papildomai: padarykite išvedimą suprantamesnį programos naudotojui (jeigu funkcijos rezultatas true tuomet išvesti vienokį tekstą, o jei false - kitokį).

# Užduotis 5

Sukurkite funkciją, kuri patikrintų ar skaičius yra pirminis ar ne, ši funkcija grąžina bool tipo atsakymą, kur true reikšmė reiškia - skaičius pirminis ir false - skaičius ne pirminis.

Leiskite vartotojui suvesti norimą kiekį skaičių. Šią funkciją iškvieskite su kiekvienu skaičiumi.

# Užduotis 6

Susikurkite skaičių masyvą.

Parašykite šias funkcijas:

  • Priimtų skaičių masyvą ir kiekį, grąžintų mažiausią rastą skaičių.
  • Priimtų skaičių masyvą ir kiekį, grąžintų didžiausią rastą skaičių.
  • Priimtų skaičių masyvą ir kiekį, grąžintų sumą.
  • Priimtų sumą ir kiekį, grąžintų vidurkį.
  • Priimtų skaičių masyvą ir kiekį, iškviestų visas ankstesnes funkcijas, išvedant visus papildomus tekstus, kurie apibūdintų atliktus skaičiavimus ir gautus rezultatus.

Iškvieskite paskutinę funkciją (kuri kviečia visas kitas funkcijas), perduodant turimą skaičių masyvą ir elementų kiekį.

# Užduotis 7 (sudėtingesnė)

Sukurkite funkciją, kuri per argumentus priimtų žmogaus vardą, paskaičiuočių kiek balsių yra gautame varde ir grąžintų balsių kiekį kaip atsakymą.

# Reikšmių grąžinimas per funkcijos parametrus

# Sintaksė

Funkcijose parametruose galima rašyti kintamuosius, kuriuos funkcija naudos, pavyzdžiui:

string vardas

Tačiau tokiu atveju, kintamieji funkcijai perduodami darant šių kintamųjų kopijas, kas reiškia, kad funkcijos viduje pasikeitus kintamojo reikšmei, originalaus kintamojo reikšmė nebus pakeista.

Jeigu reikia, kad kintamojo reikšmę būtų galima pakeisti, jį funkcijai galima perduoti kaip nuorodą (angl. reference), tarp kintamojo tipo ir pavadinimo įstačius simbolį &:

string & vardas

To daryti nereikia su masyvais ir kitais panašiais tipais, kurie funkcijoms ir taip yra perduodami kaip nuorodos, kadangi jų kopijavimas atmintyje gali būti brangus.

# Pavyzdžiai

# Pavyzdys 1

Kodas:

#include <iostream>
using namespace std;

void ivedimas(string & vardas, int & amzius)
{
    cout << "Iveskite varda: ";
    cin >> vardas;
    cout << "Iveskite amziu: ";
    cin >> amzius;
}

int main()
{
    string vardas;
    int amzius;

    ivedimas(vardas, amzius);

    cout << "\nIvesti duomenys" << endl;
    cout << "Vardas: " << vardas << endl;
    cout << "Amzius: " << amzius << endl;

    return 0;
}

Rezultatai:

Iveskite varda: Ieva
Iveskite amziu: 90

Ivesti duomenys
Vardas: Ieva
Amzius: 90

# Pavyzdys 2

Kodas:

#include <iostream>
using namespace std;

void skaiciu_ivedimas(int & pirmas, int & antras)
{
    cout << "Iveskite du skaicius: ";
    cin >> pirmas >> antras;
}

int suma(int pirmas, int antras)
{
    return pirmas + antras;
}

int main()
{
    int sk1, sk2;
    skaiciu_ivedimas(sk1, sk2);
    cout << "Ivestu skaiciu suma: " << suma(sk1, sk2) << endl;

    return 0;
}

Rezultatai:

Iveskite du skaicius: 5 3
Ivestu skaiciu suma: 8

# Pavyzdys 3

Kodas:

#include <iostream>
using namespace std;

void ivedimas(int skaiciai[], int & kiekis)
{
    cout << "Kiek skaiciu norite ivesti? ";
    cin >> kiekis;

    for (int i = 0; i < kiekis; i++)
    {
        cout << i + 1 << "-asis skaicius: ";
        cin >> skaiciai[i];
    }
}

void isvedimas(int skaiciai[], int kiekis)
{
    cout << "Ivesti skaiciai:\n";
    
    for (int i = 0; i < kiekis; i++)
    {
        cout << skaiciai[i] << " ";
    }

    cout << endl;
}

int main()
{
    int skaiciai[100];
    int kiek;

    ivedimas(skaiciai, kiek);
    isvedimas(skaiciai, kiek);

    return 0;
}

Rezultatai:

Kiek skaiciu norite ivesti? 5
1-asis skaicius: 8
2-asis skaicius: 9
3-asis skaicius: 5
4-asis skaicius: 4
5-asis skaicius: 2
Ivesti skaiciai:
8 9 5 4 2

# Pavyzdys 4

Kodas:

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

// FUNKCIJŲ PROTOTIPAI -------------------------------

void duomenu_ivedimas(string vardai[], int amziai[], int & kiekis);
void duomenu_isvedimas(string vardai[], int amziai[], int kiekis, int & didz_amzius);
string ilgiausias_vardas(string vardai[], int kiekis);
int didziausias_amzius(int amziai[], int kiekis);

// PAGRINDINĖ PROGRAMOS FUNKCIJA ---------------------

int main()
{
    string vardai1[10], vardai2[10];
    int amziai1[10], amziai2[10];
    int kiekis1 = 0, kiekis2 = 0;

    duomenu_ivedimas(vardai1, amziai1, kiekis1);
    duomenu_ivedimas(vardai2, amziai2, kiekis2);

    int pirmo_didz_amzius = 0, antro_didz_amzius = 0;

    duomenu_isvedimas(vardai1, amziai1, kiekis1, pirmo_didz_amzius);
    duomenu_isvedimas(vardai2, amziai2, kiekis2, antro_didz_amzius);

    cout << "Is didziausiu rastu amziu, pats didziausias yra: ";

    if (pirmo_didz_amzius > antro_didz_amzius)
    {
        cout << pirmo_didz_amzius;
    }
    else if (antro_didz_amzius > pirmo_didz_amzius)
    {
        cout << antro_didz_amzius;
    }
    else
    {
        cout << "abu vienodi";
    }

    cout << endl;

    return 0;
}

// VISOS KITOS FUNKCIJOS -----------------------------

void duomenu_ivedimas(string vardai[], int amziai[], int & kiekis)
{
    cout << "Kiek duomenu norite suvesti? ";
    cin >> kiekis;
    cout << endl;

    for (int i = 0; i < kiekis; i++)
    {
        cout << i + 1 << "-asis zmogus\n";
        cout << "Vardas: ";
        cin >> vardai[i];
        cout << "Amzius: ";
        cin >> amziai[i];
        cout << endl;
    }
}

void duomenu_isvedimas(string vardai[], int amziai[], int kiekis, int & didz_amzius)
{
    didz_amzius = didziausias_amzius(amziai, kiekis);

    cout << "+--------------------+--------+\n";
    cout << "| Vardas             | Amzius |\n";
    cout << "+--------------------+--------+\n";
    
    for (int i = 0; i < kiekis; i++)
    {
        cout << "| " << setw(18) << left << vardai[i]
            << " | " << setw(6) << amziai[i] << " |\n";
    }

    cout << "+--------------------+--------+\n\n";
    cout << "Ilgiausias vardas: " << ilgiausias_vardas(vardai, kiekis) << endl;
    cout << "Didziausias amzius: " << didz_amzius << endl;
    cout << "\n\n";
}

string ilgiausias_vardas(string vardai[], int kiekis)
{
    string ilgiausias = "";

    for (int i = 0; i < kiekis; i++)
    {
        if (vardai[i].length() > ilgiausias.length())
        {
            ilgiausias = vardai[i];
        }
    }

    return ilgiausias;
}

int didziausias_amzius(int amziai[], int kiekis)
{
    int didz_amzius = 0;

    for (int i = 0; i < kiekis; i++)
    {
        if (amziai[i] > didz_amzius)
        {
            didz_amzius = amziai[i];
        }
    }

    return didz_amzius;
}

Rezultatai:

Kiek duomenu norite suvesti? 3

1-asis zmogus
Vardas: Tomas
Amzius: 18

2-asis zmogus
Vardas: Gabriele
Amzius: 23

3-asis zmogus
Vardas: Giedrius
Amzius: 20

Kiek duomenu norite suvesti? 5

1-asis zmogus
Vardas: Povilas
Amzius: 19

2-asis zmogus
Vardas: Indre
Amzius: 25

3-asis zmogus
Vardas: Zygimantas
Amzius: 24

4-asis zmogus
Vardas: Paulius
Amzius: 17

5-asis zmogus
Vardas: Greta
Amzius: 21

+--------------------+--------+
| Vardas             | Amzius |
+--------------------+--------+
| Tomas              | 18     |
| Gabriele           | 23     |
| Giedrius           | 20     |
+--------------------+--------+

Ilgiausias vardas: Gabriele
Didziausias amzius: 23


+--------------------+--------+
| Vardas             | Amzius |
+--------------------+--------+
| Povilas            | 19     |
| Indre              | 25     |
| Zygimantas         | 24     |
| Paulius            | 17     |
| Greta              | 21     |
+--------------------+--------+

Ilgiausias vardas: Zygimantas
Didziausias amzius: 25


Is didziausiu rastu amziu, pats didziausias yra: 25

# Pavyzdys 5

Kodas:

#include <iostream>
#include <fstream>
using namespace std;

void ivedimas(int masyvas[], int & kiekis)
{
    ifstream fin("duomenys.txt");

    fin >> kiekis;

    for (int i = 0; i < kiekis; i++)
    {
        fin >> masyvas[i];
    }

    fin.close();
}

void isvedimas(int mas[], int kiekis)
{
    cout << "Nuskaityti skaiciai:\n";
    
    for (int i = 0; i < kiekis; i++)
    {
        cout << mas[i] << " ";
    }

    cout << endl;
}

int main()
{
    int skaiciai[100];
    int kiek;

    ivedimas(skaiciai, kiek);
    isvedimas(skaiciai, kiek);

    return 0;
}
5
6
4
5
2
4

Konsolė:

Nuskaityti skaiciai:
6 4 5 2 4

# Užduotys

# Užduotis 1

Sukurkite funkciją, kuri leistų vartotojui suvesti duomenis apie save (vardas, amžius, ūgis). Šiuos duomenis turite gauti atgal į pagrindinę programos funkciją (main) per įvedimo funkcijos parametrus.

Sukurkite antrąją funkciją, kuri per funkcijos argumentus gautų įvestus duomenis ir išvestų juos į konsolę.

# Užduotis 2

Sukurkite šias funkcijas:

  • Kuri sugeneruotų du atsitiktinius skaičius ir juos grąžintų per funkcijos parametrus.
  • Sumos paskaičiavimo funkciją, kuri gauna du skaičius ir grąžina sumą kaip atsakymą.
  • Išvedimo funkciją, kuri gauna du skaičius ir išveda į konsolę atliktą veiksmą bei gautą atsakymą (pvz.: 5 + 3 = 8). Dėl atsakymo ši funkcija kviečia sumos skaičiavimo funkciją.

Pagrindinėje programos funkcijoje (main) sukurkite ciklą, kurį vykdykite 10 kartų. Šiame cikle, kiekvieną kartą kvieskite skaičių sugeneravimo funkciją, bei išvedimo funkciją.

# Užduotis 3

Faile esantys duomenys:

Tomas Tomauskas 19 1.8

Faile esantys duomenys:

  • Vardas.
  • Pavardė.
  • Amžius.
  • Ūgis.

Parašykite funkciją, kuri nuskaitytų duomenis iš failo ir juos perduotų atgal per funkcijos parametrus.

Iškvieskite šią funkciją.

Nuskaitytus rezultatus išvesti galite per išvedimo funkciją (jeigu ją susikursite) arba iškart main funkcijoje.

# Užduotis 4

Programoje susikurkite duomenis vartotojo vardui ir slaptažodžiui saugoti.

Susikurkite papildomą funkciją, kurioje vartotojui būtų išvedami jo duomenys, bei paklausiama ar vartotojas nori tuos duomenis pakeisti. Jeigu vartotojas pasirinks, kad nori, tai turi būti leista suvesti naujas reikšmes, o šios reikšmės turi būti grąžinamos per funkcijos parametrus.

# Užduotis 5 (sudėtingesnė, laisva forma)

Užduotis laisva forma, todėl patys renkatės kokios funkcijos bus realizuotos, kokie funkcionalumai bus įgyvendinti, bei kaip gausite duomenis ir kur saugosite rezultatus.

Sukurkite nedidelį žaidimą.

Idėjos žaidimui:

  • Žaidime turėtų būti pagrindinis herojus, bei priešai.
  • Pagrindinis herojus turi puolimo ir gynybos taškus, bei kiek gyvybės likę.
  • Priešai gali nuimti tam tikrą kiekį gyvybės nuo herojaus. Jeigu herojaus gynyba yra ženkliai mažesnė nei priešo puolimas, tai gyvybės procentaliai gali sumažėti daugiau, nei jeigu herojaus gynyba būtų aukštesnė.
  • Jeigu herojus miršta, turi būti parodytas atitinkamas pralaimėjimo pranešimas. Jeigu herojus įveikia visus priešus ir lieka gyvas - tuomet laimėjimo pranešimas.