#1 C++ osnove i ostale tricarije
Posted: 21/07/2018 13:19
Lekcija 0.1
Eto ko bi se ko malo bavio programiranjem a izabere c++ moze da programira u istome bez ikakvog predznanja iz c-a (zapravo se preporucuje da se nema predznanja jer se lakse neke stvari skontaju i tako to). Na temu c-osnove-i-ostale-tricarije-pitanja-i-o ... 50648.html postavljajte pitanja i programske kodove pa cemo prolaziti skupa i uocavati greske i tako to .
C++ je objektno orjentisani jezik, sto znaci da se prave objekti (tip podataka sa par tipova uvezenim u jedan naziv), najjednostavniji primjer je FudbalskiTim (objekat, naziv objekta je FudbalskiTim) a sadrzi par tipova u sebi (koji mogu biti golovi i ostali folovi a i ime tima i tako to). Ovaj dio je previse napredan da bi se koristio u prvom izlaganju pa zato da krenem od nekog pocetka, a cini mi se da je najbolje krenuti od Hello world primjera. Od cega se on sadrzi je lahko objasniti a kako radi zahtjeva malo dublje poznavanje tokova (ali i to je jednostavno i nauci se kroz praksu).
Da bi ovaj program radio mora se ukljuciti biblioteka iostream koja sadrzi izlazni tok std::cout i std::endl. Laicki receno std::cout salje Hello world! na izlazni uredjaj a std::endl prenosi kursor u novi red. Sad da malo zagrebemo u to sta znaci int main() i return 0;. int main() je osnovna funkcija u kojoj se citav program izvrsava i u njoj se navode funkcije i varijable koje cemo koristiti a return 0; znaci da vrati 0 ako se program pravilno zavrsi. U ovom slucaju program ce se pravilno zavrsiti jer smo naveli sve potrebne biblioteke koje su potrebne za pravilno izvrsenje programa.
Malo "komplikovaniji" primjer gdje se sabiraju dva broja i rezultat se ispisuje na izlazni uredjaj se moze napraviti dodavanjem tri linije koda i malom izmjenom std::cout linije.
Sad se prvi put susrecemo sa tipovima podataka i uzeo sam int jer je jedan od jednostavnijih tipova upravo zbog primjera sume i sabiranja brojeva. int predstavlja cjelobrojni tip (ako unosimo brojeve koji nisu cijeli brise se sve iza decimalnog zareza, npr. ako unesemo 9.99 program ce ocitati u varijablu int tipa broj 9 dok ce ostale cifre zanemariti) i naveli smo tri promjenjive a, b i sumu i unosimo ih redom a pa b. std::cin predstavlja ulazni tok i sadrzaj koji kucamo preko tastature unosi u varijablu redom od lijeva na desno (u nasem slucaju prvo ce ocitati a na vrijednost koju unesemo pa onda b) i onda se u sumi dodijeli zbir tih vrijednosti i na kraju ispisujemo na izlazni uredjaj Suma je: x (x predstavlja broj koji je suma unesenih brojeva). Treba naglasiti da se pri unosu podataka u program mora voditi racuna da se svaka pojedinacna varijabla popunjava nizom "znakova" koji su uneseni jedan iza drugog bez razmaka pa kad kursor dodje na poziciju razmaka onda upisuje novi niz znakova u novu varijablu i tako sve dok se sve varijable ne ocitaju. U slucaju da unesemo previse podataka u nasem slucaju nece se desiti nista i program ce nastaviti da radi bez ikakvih problema, ali trebamo voditi racuna o broju informacija koje se unose jer sve informacije (nizovi znakova) koje unesemo ce ostati u ulaznom toku ukoliko nisu dodijeljene nekoj varijabli i kasnije mogu dovesti do neocekivanog ponasanja programa. Vazno je zapamtiti da je deklaracija linija gdje pisemo ime tipa pa promjenjiva.
Sad da kazem nesto o "Hello world!" i "Suma je: " jer ste se sigurno zapitali sta to predstavlja i koja mu je funkcija u samom programu. Niz znakova koji su pod navodnicima se naziva string i program kad naidje na liniju koda std::cout << "neki string"; ispisuje taj string pod navodnicima (bez navodnika) na izlazni tok (prava istina je da se pravi bezimena varijabla ali to je najbolje ostaviti za malo kasnije). Upisivanje i ispis recenice je dosta slican kao upisivanje u cjelobrojne varijable i ispis njihove sume pa su programu potrebne minorne ispravke da bi radio sa stringovima.
U gornjem programu smo deklarisali niz od 20 znakova sa nazivom rijec i unosimo sa tastature neku rijec koja ce se na kraju programa i ispisati. Vazna napomena je da se nizovi deklarisu tako sto navedemo tip (int ili char, a ima jos dosta tipova koje nismo spominjali) pa naziv varijable i onda zagrade [] i u njima broj elemenata. Veoma je vazno voditi racuna o broju elemenata jer pokusaj pristupu elementu koji je van "opsega" moze dovesti do nezeljenih posljedica a i samog kraha programa. U slucaju da zelimo pristupiti nekom elementu rijeci to radimo tako sto navedemo naziv varijable i [x] gdje je x pozicija u nizu. Numeracija u c++ pocinje od nule tako da npr. ako smo unijeli "Pokusaj" a zelimo da pristupimo trecem znaku (k) i ispisemo ga to mozemo uciniti tako sto dodamo novu liniju kod std::cout << rijec[2];. U slucaju da ovaj program pokusate koristiti za unos recenice program nece raditi kako treba jer kao sto sam naveo std::cout >> varijabla; radi tako sto iz ulaznog toka izdvaja niz znakova do prvog razmaka i tako bi vam program pojeo (a i dalje bi ostalo u memoriji) ostatak recenice nakon prve rijeci i ispisao samo prvu rijec.
U slucaju unosa niza cijelih brojeva situacija je malo komplikovanija jer se mora unositi element po element uz pomoc petlje a to radimo na sljedeci nacin, deklarisemo niz od x cijelih brojeva i pristupamo svakom elementu pojedinacno od pocetka do kraja i dodjeljujemo mu neku vrijednost. Jednostavan primjer je (vise necu navoditi #include <iostream> jer je iostream "univerzalna" biblioteka koja se koristi u vecini programa, znaci podrazumijeva se da sam je ukljucio)
Deklarisem niz od 5 cijelih brojeva i saljem ga u for petlju. U () zagradama se nalazi dio koji se uglavnom koristi za deklaraciju brojacke varijable pa neki uslov koji se mora ispuniti pa korak po kojem se mijenja ta varijabla. for petlja radi tako sto se deklarise varijabla i i postavi na nulu (samo pri nailasku na petlju) pa se zatim testira uslov (u slucaju da uslov nije ispunjen izlazi se iz petlje) i na kraju i++ je promjena varijable. U konkretnom slucaju i++ znaci da se varijabla povecava za 1 (i++ je identicki jednako i = i + 1 a samo i = i + 1 znaci da varijabli sa imenom i [koja je sa lijeve strane znaka jednakosti] dodjeljujemo vrijednost koja je zbir vrijednosti koju je imala ta varijabla i na to dodajemo 1 tako da prelaskom u novi red ta varijabla ce biti uvecana za 1). Izraz u {} zagradama se naziva tijelo petlje i ono se izvrsava samo ukoliko je ispunjen uslov (srednji dio for(x;y;z), tj. izraz y). Bitno je naglasiti da se u ovom slucaju mora koristiti znak ; za odvajanje izraza u for petlji jer znak zarez ima drugu funkciju koja je komplikovana da se objasni (uglavnom za razdvajanje dva izraza koristite tackazarez i sve ce biti uredu) jer npr. u liniji std::cin >> a,b; samo ce ocitati vrijednost u a dok ce b ostati zanemareno. Tijelo petlje sa sastoji od ispisa da se unese i - ti element (i + 1, jer numeracija pocinje od nule pa tako prvi element niza u programu ima indeks 0, drugi 1 i peti 4). Sigurno ce biti pitanja a sta znaci i < 5 i sto se ide do cetiri a unosimo 5 elemenata a sama varijabla niz[5] ima peticu sto znaci da ima pet elemenata, naime i < 5 znaci da se i testira sve dok ne dostigne vrijednost 5 jer u slucaju da i ima vrijednost 0,1,2,3,4 to je sve logicki manje od 5 dok 5 nije manje od 5 nego je jednako, indeksacija ide do 4 jer kao sto sam naveo numeracija ide od 0 do 4 (ako izbrojite sve elemente mozete zakljuciti da zaista ima 5 elemenata). Onda bi niz[5] tom logikom trebao da ima 6 elemenata, ali zapitajte se sta znaci kad imate skup od nula jabuka u korpi i koja je razlika ako imate skup od pet jabuka u korpi (koliko imate ukupno elemenata u prvom slucaju i u drugom slucaju)? Ista logika vrijedi za c++, znaci pisemo ukupan broj elemenata prilikom deklaracije dok kod pristupa koristimo numeraciju od nule (koristimo za jedan manji indeks nego u stvarnosti).
Evo jedan zadacic za vas koji ovo citate, deklarisite skup od 10 elemenata gdje korisnik unosi sve elemente a ispisuje se suma svih elemenata. Ako bude kakvih poteskoca javite, mislim da nisam nista fulio u uvodnom predavanju. U slucaju nejasnoca sva pitanja postavljajte na temi c-osnove-i-ostale-tricarije-pitanja-i-o ... 50648.html.
Ako moderatori misle da je tema losa ili pogresna po nekom osnovu, neka brisu halal im plajvaz.
edit: bolje formatiranje koda gdje se vide tab razmaci (zahvaljujem na sugestiji) i ispravio sam par greski.
Eto ko bi se ko malo bavio programiranjem a izabere c++ moze da programira u istome bez ikakvog predznanja iz c-a (zapravo se preporucuje da se nema predznanja jer se lakse neke stvari skontaju i tako to). Na temu c-osnove-i-ostale-tricarije-pitanja-i-o ... 50648.html postavljajte pitanja i programske kodove pa cemo prolaziti skupa i uocavati greske i tako to .
C++ je objektno orjentisani jezik, sto znaci da se prave objekti (tip podataka sa par tipova uvezenim u jedan naziv), najjednostavniji primjer je FudbalskiTim (objekat, naziv objekta je FudbalskiTim) a sadrzi par tipova u sebi (koji mogu biti golovi i ostali folovi a i ime tima i tako to). Ovaj dio je previse napredan da bi se koristio u prvom izlaganju pa zato da krenem od nekog pocetka, a cini mi se da je najbolje krenuti od Hello world primjera. Od cega se on sadrzi je lahko objasniti a kako radi zahtjeva malo dublje poznavanje tokova (ali i to je jednostavno i nauci se kroz praksu).
Code: Select all
#include <iostream>
int main(){
//izlazni tok i salje kursor u novi red
std::cout << "Hello world!" << std::endl;
return 0;
}
Malo "komplikovaniji" primjer gdje se sabiraju dva broja i rezultat se ispisuje na izlazni uredjaj se moze napraviti dodavanjem tri linije koda i malom izmjenom std::cout linije.
Code: Select all
#include <iostream>
int main(){
//deklaracija varijabli
int a, b, suma;
//unos varijabli
std::cin >> a >> b;
//dodjela rezultata a + b varijabli suma
suma = a + b;
//ispis rezultata
std::cout << "Suma je: " << suma;
return 0;
}
Sad da kazem nesto o "Hello world!" i "Suma je: " jer ste se sigurno zapitali sta to predstavlja i koja mu je funkcija u samom programu. Niz znakova koji su pod navodnicima se naziva string i program kad naidje na liniju koda std::cout << "neki string"; ispisuje taj string pod navodnicima (bez navodnika) na izlazni tok (prava istina je da se pravi bezimena varijabla ali to je najbolje ostaviti za malo kasnije). Upisivanje i ispis recenice je dosta slican kao upisivanje u cjelobrojne varijable i ispis njihove sume pa su programu potrebne minorne ispravke da bi radio sa stringovima.
Code: Select all
#include <iostream>
int main(){
//deklaracija niza od 20 znakova
char rijec[20];
std::cout << "Unesite rijec: ";
std::cin >> rijec;
std::cout <<"Unesena rijec je: " << rijec;
return 0;
}
U slucaju unosa niza cijelih brojeva situacija je malo komplikovanija jer se mora unositi element po element uz pomoc petlje a to radimo na sljedeci nacin, deklarisemo niz od x cijelih brojeva i pristupamo svakom elementu pojedinacno od pocetka do kraja i dodjeljujemo mu neku vrijednost. Jednostavan primjer je (vise necu navoditi #include <iostream> jer je iostream "univerzalna" biblioteka koja se koristi u vecini programa, znaci podrazumijeva se da sam je ukljucio)
Code: Select all
int main(){
int niz[5];
//for petlja ide do 5 jer smo deklarisali pet elemenata u nizu, koristimo znak manje jer brojac krece od nule
for(int i = 0; i < 5; i++){
std::cout << "Unesite " << i + 1 << " element: ";
//unosimo po redu elemente niza (od prvog do zadnjeg)
std::cin >> niz[i];
}
for(int i = 0; i < 5; i++){
//ispisujemo redom elemente niza
std::cout << i+1 << ". element ima vrijednost: " << niz[i] << std::endl;
}
return 0;
}
Evo jedan zadacic za vas koji ovo citate, deklarisite skup od 10 elemenata gdje korisnik unosi sve elemente a ispisuje se suma svih elemenata. Ako bude kakvih poteskoca javite, mislim da nisam nista fulio u uvodnom predavanju. U slucaju nejasnoca sva pitanja postavljajte na temi c-osnove-i-ostale-tricarije-pitanja-i-o ... 50648.html.
Ako moderatori misle da je tema losa ili pogresna po nekom osnovu, neka brisu halal im plajvaz.
edit: bolje formatiranje koda gdje se vide tab razmaci (zahvaljujem na sugestiji) i ispravio sam par greski.