pomoc c++ pocetniku

1

pomoc c++ pocetniku

offline
  • gramma 
  • Novi MyCity građanin
  • Pridružio: 27 Jul 2015
  • Poruke: 10

pozdrav mycity, bio sam clan ovog foruma pre nekih 5-6 godina. u medjuvremenu sam zaboravio nick, a email adresu koju sam koristio za forum sam verovatno u medjuvremenu prestao da koristim. elem, poceo sam da ucim c++ pre nekih nedelju dana, pre toga sam imao nesto iskustva sa pascalom i delphijem. uglavnom trazim nekog ko bi mogao sa vremena na vreme da mi odgovori na pitanja i da mi objasni neke c++ koncepte gde zapnem. gledacu da sto manje dosadjujem i sto redje pitam pitanja.
ukoliko ima neko voljan da mi pomogne to bi bilo odlicno. Smile

HVALA Ziveli



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Slobodno pitaj - tu smo da pomognemo ukoliko zapne Ziveli

I nemoj da se ustručavaš!



offline
  • gramma 
  • Novi MyCity građanin
  • Pridružio: 27 Jul 2015
  • Poruke: 10

E.L.I.T.E. ::Slobodno pitaj - tu smo da pomognemo ukoliko zapne Ziveli

I nemoj da se ustručavaš!

kul Smile pre nego sto pocnem sa pitanjima. koliko je pametno da postavljam ovde sva pitanja? posto cu imati dosta manjih pitanja pa da ne pravim temu za svako posebno. pitanja:
prvo, cuo sam da je koriscenje using namespace std; losa navika pa sam odlucio da prestanem to da radim. ocigledno using namespace std; nam omogucava da ne moramo da kucamo std:: ispred dosta stvari. ispred kojih 'stvari' tacno? :/

drugo pitanje, kada koristimo switch izjavu da li je moguce da uporedimo promenljivu koju testiramo sa necim? tipa da li je veca ili manje od nekog broja? sa if-om to radimo ovako: if(x > 10){URADI NESTO}
primer nekog switch koda:
switch(x){ case '1': std::cout << "X je 1" << std::endl; break; case '2': std::cout << "X je 2" << std::endl; break default: std::cout << "Ne znam koliko je X" << std::endl; }
ispisao sam ovaj switch na brzinu cisto da dam primer, ovde smo napravili opcije samo za tacnu vrednost x-a, u prvom slucaju ako je x broj 1. ali sta ako zelimo da za X koji je manji od 10 ispisujemo "x je manji od 10".. ne bismo sigurno pravili 10 case-ova od 0 do 9 Very Happy

Hvala mnogo unapred!

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Odgovor na to zašto nije dobro koristiti std imenski prostor:

http://stackoverflow.com/questions/1452721/why-is-.....d-practice

Da ti pojasnim:

namespace std {    void cout(text) {        // funkcija za ispis teksta    } }

Ti sa direktivom using navodiš program da učita taj imenski prostor kako bi program znao šta radi ta tvoja funkcija. Zbog toga moraš da pišeš std::cout kada ne navedeš taj imenski prostor na početku programa (kasnije ćeš videti da i ti možeš da definišeš te imenske prostore).

Ovde imaš spisak biblioteki i funkcija koje C++ koristi, mada ćeš i kroz samo učenje videti koje funkcije su deo std (u pitanju je zapravo standardna biblioteka)
http://www.cplusplus.com/reference

A za switch nema potrebe da radiš upoređivanje (a i ona ne služi zapravo tome), već za te potrebe možeš da koristiš if petlju. Funkcija switch prima samo jednu promenljivu, a if je naprednija i možeš da pišeš čak i ovako nešto:

if ( a < b || ( b > a && b < c)) {       // uradi nesto }

offline
  • gramma 
  • Novi MyCity građanin
  • Pridružio: 27 Jul 2015
  • Poruke: 10

E.L.I.T.E. ::....

Necu citirati ceo tvoj odgovor da ne bi to islo u nedogled. Hvala na objasnjenju, u pocetku mi nije bilo sve potpuno jasno iskren da budem.. Ali gledao sam neke youtube tutorijale, pitao nesto druga i na kraju kad sam procitao tvoj odgovor ponovo sve mi se sleglo i sad mi je sve jasno.

Nastavio sam da ucim i dosao sam do funkcija. Ne razumem bas koja je poenta parametara u njima? Zasto jednostavno ne bi definisali promeljive unutar te funkcije pomocu cin-a? I koja je poenta return-a? Po onome sto sam shvatio on vraca vrednost u funkciju.. da dam primer
int blaa(int x = 5, y = 10){ return(x+y) }
Return ce dobiti rezultat 15 i vratice taj rezultat u funkciju int blaa.. zatim ce ona postati umesto funkcije samo vrednost. Ili ne? Koja je svrha svega toga? Zasto ne bi samo napisali funkciju tipa
int blaa(){ int x; int y; std::cout << "Upisi broj x: " << std::flush; std::cin >> x; std::cout << "Upisi broj y: " << std::flush; std::cin >> y; rezultat = x + y; std::cout << "Rezultat je: " << x << std::endl; }
Verovatno vam sad deluje kao da pitam gluposti, ali hocu da udjem u sustinu toga sto radim i da u potpunosti razumem zasto nesto stavljam. Crying or Very sad

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Ma okej je Razz Zašto se koriste parametri u funkcijama? Pa zar nije lakše jednostavno napisati:

void dodajKorisnika(string ime, int godina) {      std::cout << "Ime korisnika je: " << ime << std::endl;      std::cout << "Korisnik ima " << godina << " godina."; }

dodajKorisnika("Pera", 34);

Gde prvi parametar predstavlja ime, a drugi broj godina, nego da to radiš ovako:

void dodajKorisnika() {      string ime;      int godina;      std::cout << "Upisite ime: " << std::endl;      std::cin >> ime;      std::cout << "Upisite broj godina: " << std::endl;      std::cin >> godina; }

Ova prva funkcija i ova druga su potpuno različite u smislu što u prvoj ti definišeš podatke, dok u drugoj korisnik definiše podatke (i ti te podatke dalje možeš da koristiš ukoliko su ti potrebni). Znači parametri su bitni jer bliže određuju funkciju Smile

A što se tiče vraćanja vrednosti, to zavisi od tipa funkcije. Recimo, ako si prošao kroz tipove podataka, video si da imaš int (celobrojnu vrednost), bool (Bulovu vrednost), string (niz karaktera), char (karakter) itd. Čist primer ti je glavna funkcija unutar programa:

int main() {      // program      return 0; }

Vidiš da na kraju vraćaš nulu (celobrojnu vrednost)? Da si definisao da tip funkcije bude void umesto int, ne bi morao da vraćaš tu nulu (ovo možeš i sam da isprobaš, ali ne praktikuj jer, između ostalog, nije po C++ standardu). To vraćanje ima C, C++, PHP i mnogi drugi jezici i može biti veoma korisno, a konkretno u main funkciji ima zadatak da obavesti OS da je izvršavanje završeno uspešno ukoliko nema grešaka Smile

offline
  • gramma 
  • Novi MyCity građanin
  • Pridružio: 27 Jul 2015
  • Poruke: 10

Testiram sad kod koji si postavio pa se javljam. Ali odmah da pitam, otkud to da std:: mora ispred string, a ne mora ispred int? :O
Edit: Ono sto sam hteo da testiram je da li moze funkcija koja ima definisane parametre, ali ne i njihove vrednosti da prihvati neku vrednost koju je uneo korisnik pomoc std::cin >> promenljiva.. Cini mi se da ne? Da li to znaci onda da definisemo parametre unutar funkcije, tj. zagrade(primer: void imefunkcije(paramter1, parametar2)) samo i iskljucivo ukoliko mi kao 'programeri' znamo koji ce ti parametri biti? Po tome ispada da su parametri u stvari konstante, a ne promeljive? Gresim?
Sto se tice return-a napisacu nesto kasnije kod koji me je zbunjivao Smile
Edit2: Jos jedno pitanje. Dosao sam do lokalnih i globalnih varijabli. Kada je bolja opcija koristiti lokalne umesto globalnih varijabli? Zasto ne bismo jednostavno stavljali sve varijable kao globalne?

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Izvini što ti kasno odgovaram!

Zato što je string deo standardne biblioteke Razz

Kada napišeš funkciju i pozoveš je moraš da uneseš i parametre, inače ćeš dobiti grešku. Zato ti je bolje da napišeš upit za korisnika pa da odgovore koje on unese ubaciš u parametre, ali da napraviš i dobru proveru (da ne unese karakter ili string umesto celobrojne vrednosti recimo) da ne bi došlo do greške.

Što se tiče lokalnih i globalnih promenljivi... sada ti i neće predstavljati neki problem da stavljaš sve promenljive kao globalne, ali kada dođeš do nekih projekata videćeš da će ti to samo odmoći, jer, globalnim promenljivama može da se pristupi i van klase i kada dođe do neke greške biće ti teže da odrediš odakle potiče Smile

offline
  • Pridružio: 11 Apr 2012
  • Poruke: 98

gramma ::otkud to da std:: mora ispred string, a ne mora ispred int? :O
Zato sto string nije osnovni tip podataka u c++ (char jeste ali ne i sting), string ima i svoju biblioteku koju moras da ukljucis ako zelis da je koristis (a ona pripada standardnoj biblioteci). Kada koristis string imas i funkcije .empty() ili .length() sto nemas kod drugih tipova podataka, zato je sting klasa.

gramma ::Kada je bolja opcija koristiti lokalne umesto globalnih varijabli? Zasto ne bismo jednostavno stavljali sve varijable kao globalne?
Lokalne promenjive su ogranicene na odredjen deo koda (klasu,funkciju...) tako da njoj ne mozes pristupiti izvan tog dela. Time izbegavas da dodje do greske ako nazoves dve promenjive istim imenom, a to se cesto desava kada radis neki veci program i/ili kada vise osoba radi na istom kodu, kada pozoves ime koje vazi za vise promenjivih prvo se uzima lokalna (ukoliko ih ima), pa tak ako nema onda globalna
npr.
#include <iostream> int i = 50; //definisemo globalno int i = 50 int f (); //deklaracija f f-je int main () {     int i = 100; // definisemo lokalno int i koje vazi DO KRAJA MAIN F-je         for (int i = 200; i <= 202; i++) //definisemo int i = 200 koje je lokalno i postoji dok traje OVA FOR PETLJA         std::cout << i << std::endl;     //tj. vazi samo dovde         std::cout << i << std::endl; //posto je sada izbrisano i iz for petlje (int i = 200) ovo "i" je int i = 100         std::cout << f() << std::endl; //f-ja f vraca i, ali posto se to "i" poziva iz f funkcije,                         //a tamo nema lokalnih promenjivih onda se uzima globalna promenjiva         return 0; //return zavrsava main f-ju i vraca vrednost 0 (sto znaci da je sve proslo bez problema, inace bi se vratilo npr. -1) } int f () {return i;} //nema lokalnog i, zato se uzima globalno i

offline
  • gramma 
  • Novi MyCity građanin
  • Pridružio: 27 Jul 2015
  • Poruke: 10

Imam ogroman problem, zapeo sam na rekurzitivnoj funkciji. Ne mogu nikako da je shvatim, odgledao sam mnogo tutorijala, citao sve I svasta o njoj I I dalje ne kapiram. Jedino sto mi je ostalo u glavi da je to funkcija koja poziva samu sebe I da vecina ima base case. Base case je tacka u kojoj funkcija prestaje da ne bi dobili infinite loop. Ali ne kapiram razliku izmedju normalne I rekurzitivne funkcije I sta to znaci da funkcija poziva samu sebe Razz

hvala!

Ko je trenutno na forumu
 

Ukupno su 687 korisnika na forumu :: 22 registrovanih, 2 sakrivenih i 663 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, 9k38, Areal84, babaroga, Bane san, bigfoot, bozomotika, croato, Dimitrije Paunovic, janbo, ljuba, loon123, nedeljkovici, opt1, pavlo, pein, Pohovani_00, RecA, trajkoni018, vandrej, VP6919, zlaya011