Compare commits
No commits in common. "f6ec99eb172ea926ff15971816ef359be9b9ad27" and "df9b05563cfd470dba7b49da46d1021b57e4fd1d" have entirely different histories.
f6ec99eb17
...
df9b05563c
@ -1,8 +1,3 @@
|
|||||||
# Uvod u C++ (i takmičarsko programiranje)
|
# uvod-u-cpp
|
||||||
|
|
||||||
> We do these things not because they are easy, but because we thought they were going to be easy.
|
Materijali za dodatnu nastavu iz programiranja za 7. razred osnovne škole.
|
||||||
|
|
||||||
- [Šta su biblioteke u jeziku C++?](/lekcije/sta_su_biblioteke.md) (iostream, iomanip, cmath, ...)
|
|
||||||
- [Matematičke funkcije](/lekcije/matematicke_funkcije.md) (sqrt, pow, min, max i druge)
|
|
||||||
- [Ispis realnih brojeva](/lekcije/ispis_realnih.md) (i lekcija o snalažljivosti!)
|
|
||||||
- [Uvod u nizove](/lekcije/nizovi_uvod.md)
|
|
@ -1,34 +0,0 @@
|
|||||||
[↩ Nazad na sadržaj](../README.md)
|
|
||||||
|
|
||||||
# Ispis realnih brojeva
|
|
||||||
|
|
||||||
Kako postići zaokruživanje na 2 decimale? U jeziku C++ pravilan način da se to postigne je korišćenjem funkcije `setprecision` iz biblioteke `<iomanip>`. Kod ispod ispisuje broj **π** (pi) zaokružen na 2 decimale:
|
|
||||||
```c++
|
|
||||||
#include <iostream>
|
|
||||||
#include <iomanip>
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
double pi = 3.14159265;
|
|
||||||
cout << fixed << setprecision(2) << pi << endl; // ispisuje 3.14!
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Lekcija o snalažljivosti
|
|
||||||
|
|
||||||
Šta činiti ako smo zaboravili na `setprecision`? Najbitnija veština takmičara (ali i dobrog programera) je da ume da se *snađe ✨*.
|
|
||||||
|
|
||||||
Jedan način koji znamo na koji možemo da odbacimo decimale iza zareza je konverzija (pretvaranje) realnog broja u ceo broj, a to mozemo postići čuvanjem realnog broja u celobrojnu promenljivu, na primer ovako:
|
|
||||||
```c++
|
|
||||||
int ceo_deo = pi; // ovo će biti 3
|
|
||||||
```
|
|
||||||
Ali kako da izvučemo bas `3.14`? Množenjem broja `3.14159265` sa `100` dobijamo `314.159265` gde ponovo na istu foru umemo da izbacimo deo iza zareza:
|
|
||||||
```c++
|
|
||||||
int pomocna_prom = pi * 100; // ovo će biti 314
|
|
||||||
```
|
|
||||||
Deljenjem ovog broja sa `100.0` dobijamo to što želimo 🙂
|
|
||||||
```c++
|
|
||||||
double rezultat = pomocna_prom / 100.0; // ... 3.14
|
|
||||||
```
|
|
||||||
Pazite na to da smo ovde morali da delimo baš sa `100.0` a ne sa `100` jer na ovaj način kažemo C++-u da treba deljenje da tretira kao realno, a ne celobrojno.
|
|
@ -1,48 +0,0 @@
|
|||||||
[↩ Nazad na sadržaj](../README.md)
|
|
||||||
|
|
||||||
# Matematičke funkcije
|
|
||||||
|
|
||||||
C++ pruža nekoliko baš lepih i korisnih matematičkih funkcija koje mozete da koristite u vasem kodu ako uključite odgovarajuću biblioteku:
|
|
||||||
```c++
|
|
||||||
#include <cmath>
|
|
||||||
```
|
|
||||||
|
|
||||||
Funkcije koje su nama najbitnije su
|
|
||||||
- `max(a, b)` - računa maksimum dva data broja
|
|
||||||
- `min(a, b)` - računa minimum dva data broja
|
|
||||||
- `abs(a)` - računa apsolutnu vrednost datog broja
|
|
||||||
- `sqrt(n)` - računa kvadratni koren (**SQ**uare **R**oo**T**) broja
|
|
||||||
- `pow(broj, stepen)` - stepenuje dat broj
|
|
||||||
- `floor(b)` - zaokružuje broj nadole (npr 3.4 u 3)
|
|
||||||
- `ceil(b)` - zaokružuje broj nagore (3.4 u 4)
|
|
||||||
---
|
|
||||||
Kako se ove funkcije koriste pogledajte u sledećem programu:
|
|
||||||
|
|
||||||
```c++
|
|
||||||
#include <cmath>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
cout << "min(4, 2) = " << min(4, 2) << endl;
|
|
||||||
cout << "max(3.5, -5.0) = " << max(3.5, -5.0) << endl;
|
|
||||||
cout << "abs(4.66) = " << abs(4.66) << endl;
|
|
||||||
cout << "abs(-1) = " << abs(-1) << endl;
|
|
||||||
cout << "sqrt(4) = " << sqrt(4) << endl;
|
|
||||||
cout << "sqrt(2) = " << sqrt(2) << endl;
|
|
||||||
cout << "pow(5, 2) = " << pow(5, 2) << endl;
|
|
||||||
cout << "pow(2, 3) = " << pow(2, 3) << endl;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
ispisuje
|
|
||||||
```
|
|
||||||
min(4, 2) = 2
|
|
||||||
max(3.5, -5.0) = 3.5
|
|
||||||
abs(4.66) = 4.66
|
|
||||||
abs(-1) = 1
|
|
||||||
sqrt(4) = 2
|
|
||||||
sqrt(2) = 1.41421
|
|
||||||
pow(5, 2) = 25
|
|
||||||
pow(2, 3) = 8
|
|
||||||
```
|
|
@ -1,81 +0,0 @@
|
|||||||
[↩ Nazad na sadržaj](../README.md)
|
|
||||||
|
|
||||||
# Uvod u nizove
|
|
||||||
|
|
||||||
Do sada, ako ste hteli da deklarišete 5 promenljivih, morali biste da uradite nešto poput:
|
|
||||||
```c++
|
|
||||||
int i_1,i_2,i_3,i_4,i_5;
|
|
||||||
```
|
|
||||||
|
|
||||||
Šta da ste hteli da deklarišete 100 promenljivih? To bi potrajalo. I zašto bismo uopšte hteli da ikad imamo 100 promenljivih?
|
|
||||||
|
|
||||||
Zamislite situaciju u kojoj pravimo program koji treba da analizira temperature u prethodnoj godini, i za njegov rad je potrebno sačuvati prosečne dnevne temperature za svaki dan u toj godini.
|
|
||||||
|
|
||||||
Praviti 365 * 2 promeljivih očigledno nije dobro rešenje, i nama u pomoć tu dolaze nizovi (eng. *array*). Uz pomoć nizova možemo sačuvati veliki broj podataka u samo jednoj promeljivoj, to jest da ti podaci imaju zajedničko ime. Na primer:
|
|
||||||
```c++
|
|
||||||
int temperature[365];
|
|
||||||
```
|
|
||||||
|
|
||||||
U ovom slučaju promeljiva `temperature` čuva 365 vrednoti tipa `int`, i njih možemo postavljati ili očitavati korišćenjem kvadratnih zagrada:
|
|
||||||
```c++
|
|
||||||
temperature[0] = -2;
|
|
||||||
temperature[1] = +1;
|
|
||||||
temperature[2] = +4;
|
|
||||||
```
|
|
||||||
|
|
||||||
Svaki podatak u nizu ima svoj redni broj, pri čemu odbrojavanje kreće od nule. U primeru gore vrednost u `temperature[0]` bi zapravo odgvarala prvom januaru, i postavili smo tu vrednost na -2.
|
|
||||||
|
|
||||||
Dakle, prosečna temperature u prva 3 dana u toj godini bi na primer mogla da se izračuna po formuli:
|
|
||||||
```c++
|
|
||||||
double prosek = (temperature[0] + temperature[1] + temperature[2]) / 3.0;
|
|
||||||
```
|
|
||||||
|
|
||||||
## Korišćenje nizova uz pomoć petlji
|
|
||||||
|
|
||||||
Kako niz služi za čuvanje velikog broja podataka, i kako svaki od njih ima svoj redni broj; najčešći način baratanja nizovima je unutar petlji.
|
|
||||||
|
|
||||||
Temperature u mesecu januaru možemo da ispišemo tako što pristupimo 31-om elementu niza, od 0-og do 30-og (još jednom, odbrojavanje kreće od 0!):
|
|
||||||
```c++
|
|
||||||
cout << "Temperature u januaru su:" << endl;
|
|
||||||
for(int dan = 0; dan < 31; dan++) {
|
|
||||||
cout << temperature[dan] << endl;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
---
|
|
||||||
|
|
||||||
Naravno, ovaj primer neće da radi ukoliko ne popunimo niz sa pravim vrednostima, pa u nastavku dajemo primer programa koji niz od 10 elemenata popunjava kvadratima brojeva od 0 do 9, i zatim ispisuje njegove elemente:
|
|
||||||
|
|
||||||
```c++
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
int kvadrati[10];
|
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
kvadrati[i] = i * i;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
cout << i << ". broj u nizu je " << kvadrati[i] << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Kada ga pokrenemo, ovaj program ispisuje:
|
|
||||||
```
|
|
||||||
0. broj u nizu je 0
|
|
||||||
1. broj u nizu je 1
|
|
||||||
2. broj u nizu je 4
|
|
||||||
3. broj u nizu je 9
|
|
||||||
4. broj u nizu je 16
|
|
||||||
5. broj u nizu je 25
|
|
||||||
6. broj u nizu je 36
|
|
||||||
7. broj u nizu je 49
|
|
||||||
8. broj u nizu je 64
|
|
||||||
9. broj u nizu je 81
|
|
||||||
```
|
|
@ -1,28 +0,0 @@
|
|||||||
[↩ Nazad na sadržaj](../README.md)
|
|
||||||
|
|
||||||
# Šta su biblioteke u jeziku C++?
|
|
||||||
|
|
||||||
Standardni C++ je napravljen tako da stvara što manje i brže programe koji mogu da rade na svemu - od najjačih računara do jeftinih veš masina. Nisu potrebe svih uređaja iste, te naprednije funkcionalnosti jezika moraju ručno da se dodaju (*include*-uju) u program.
|
|
||||||
|
|
||||||
Primeri takvih biblioteka su:
|
|
||||||
- `iostream` - služi za unos i ispis podataka, tj. `cin` i `cout`
|
|
||||||
- `iomanip` - za konfiguraciju ispisa, koristimo je kada želimo na primer da postavimo broj decimala pri ispisu (`setprecision(n)`). [O tome više ovde](./ispis_realnih.md).
|
|
||||||
- `cmath` - uključuje matematičke fuknkcije kao sto su `sqrt` i `pow`. [O tome više ovde](./matematicke_funkcije.md).
|
|
||||||
|
|
||||||
Ubuduće ćemo koristiti puno više biblioteka, i da ne bismo morali u svakom programu da ih dodajemo postoji kraći nacin:
|
|
||||||
```c++
|
|
||||||
#include <bits/stdc++.h>
|
|
||||||
```
|
|
||||||
|
|
||||||
Ova linija umesto vas uključi sve standardne biblioteke C++a (otud `stdc++`), a to je i sve što nam je za sada potrebno.
|
|
||||||
|
|
||||||
```c++
|
|
||||||
#include <bits/stdc++.h>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
cout << "Radi!!!" << endl;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
|
Loading…
Reference in New Issue
Block a user