Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.718.690
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

Ali nekontam zašto bih učio OOP, imate li neke razloge?
Teoretski znam problem podjeli na više manjih i onda se riješava jedan po jedan, ali šta je to ustvari.

Ako ti "bez OOP-a nema kruha" nije dovoljno... :D

 

Evo zamisli ovako. Jednostavni ne-OOP program moze biti popis statementa ili naredbi. I to je odlicno. E sad, program postaje kompleksniji. E vise nam popis naredbi ili statementa nije dovoljan, jer je za kompleksnije programe to mazohizam. Tu se programi grupiraju u funkcije i podrutine. Program sad postaje JOS kompleksniji, pricamo o tisucama linija koda! Tu zakazuju i funkcije i podrutine zato sto kod takvog dizajna ceste su 'globalne' varijable, a kako programi postaju kompleksniji sanse za bugove rastu eksponencijalno, a takvi bugovi mogu imati siroke posljedice.

 

OOP je tu da takve stvari rijesi.

The Unix philosophy basically involves giving you just enough rope to hang yourself. And then a couple of feet more, just to be sure.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

Ali nekontam zašto bih učio OOP, imate li neke razloge?
Teoretski znam problem podjeli na više manjih i onda se riješava jedan po jedan, ali šta je to ustvari.

Pogledaj malo što je enkapsulacija, skrivanje podataka, nasljeđivanje i polimorfizam. To nije nešto što se može realizirati nekom podjelom u manje cjeline.

17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

Ali nekontam zašto bih učio OOP, imate li neke razloge?
Teoretski znam problem podjeli na više manjih i onda se riješava jedan po jedan, ali šta je to ustvari.

OOP je genijalna ideja - simulacija stvarnog života. Sve su objekti. Znaš karakteristike objekata, znaš akcije koje mogu napraviti (ne znaš nužno kako će ih napraviti niti te to briga - objekti su prema van "crne kutije") i isprogramiraš svoj objekt kako će obavljati interakciju s drugim objektima. Znači, isprogramiraš njegove akcije i reakcije i pustiš ga nek "interaktira" s drugim objektima. OOP najbolje shvatiš i naučiš kad ideš graditi svoj OOP GUI ispočetka - ja sam tako pokušao u Pascalu simulirati Delphijev objekti model i tu su mi stvari posjedale na svoje mjesto.

 

U praktičnoj primjeni, ako za ništa drugo, koriste se neki od koncepata OOP-a čisto zato što su stvari tako daleko organiziranije i praktičnije. Gledajući iz perspektive OOP-a, proceduralno programiranje je - glupo. Govorim o "čistom" proceduralnom programiranju, jer ćeš u praksi često nailaziti na neku kombinaciju (kod loših ili lijenih programera) - program će biti razvijan u OOP jeziku (ako ništa drugo, u JavaScriptu - recimo upravo je JavaScript jezik gdje treba odvagnuti koliko ćeš svog OOP-a uvesti; pa zapravo i C++ je isti, s obzirom da dopušta proceduralo programiranje) i koristit će objekte koje mu nudi jezik i framework, ali sam program neće biti napisan u OOP stilu.

 

U proceduralnom programiranju imaš globalne funkcije kojima predaješ podatkovne strukture da bi se onda nešto obavilo. Zašto ne bi imao klasu (objekta), instancirao je (napravio instancu klase, odnosno objekt) i jednostavno pozivao funkcije upravo tog objekta? Zašto bi kod svakog poziva funkcije morao predavati strukturu koju će funkcija koristiti? Zašto ne bi logika za korištenje tih podatkovnih struktura bila utkana u same klase/objekte, umjesto da je rascijepana na desetke ili stotine globalnih funkcija?

 

Plus druge dobrobiti koje je Tracer naveao.

 

 

Par videića:

15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...
royalhero kaže...

Ali nekontam zašto bih učio OOP, imate li neke razloge?
Teoretski znam problem podjeli na više manjih i onda se riješava jedan po jedan, ali šta je to ustvari.

Pogledaj malo što je enkapsulacija, skrivanje podataka, nasljeđivanje i polimorfizam. To nije nešto što se može realizirati nekom podjelom u manje cjeline.

Ako autor hoće objašnjenje neka pogleda ovaj dokument:

http://element.hr/artikli/file/1365 -str 3

 

Twitter- @capttawish Linux/GNU live forever.
Poruka je uređivana zadnji put ned 30.10.2011 18:20 (captain_soap_McTawish).
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hvala svima, ovo ćemi olakšati rad, pogotovo u C++ -u za GUI.
@captain_soap_McTawis, pogledat ću je cijelu.
Još jedno pitanje:
-Postoji li sličnost sa strukturama, osim u sintaksi?
Npr.
struct artkli{

int količina;

float cijena;
};
int main(){
artikli cipela;
artikli tena;
return 0;
}


class artikli{
public:
int količina;
float cijena;
};
int main(){

artikli cipela;
artikli tena;
return 0;
}

Life is Computers, Tobacos, Women, Trucks, you live better?
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

Još jedno pitanje:
-Postoji li sličnost sa strukturama, osim u sintaksi?

Prvo - kad copy&pasteaš kod prvo stil prebaci u kod pa onda pasteaj da ne bude kod tako rascijepan.

Drugo - gdje su ti razmaci s lijeve strane? To ti je editor pojeo ili ih uopće ne stavljaš? Znači, treba ići ovako:

 

struct artkli{
    int kolicina;
    float cijena;
};

 

Što se tiče struktura - razlika u C++-u je samo u tome što su članovi strukture po defaultu javni (public), a kod klase privatni. Dakle, C++-u i strukture mogu imati funkcije (metode), dok u C-u ne mogu. Za većinu stvari ćeš inače koristiti klase, jer je to jedna od poanti OOP-a - "sakrij" (tj. nemoj prikazati) drugim objektima ono što im ne treba, odnosno omogući im pristup samo onim članovima (varijablama, funkcijama) koji su nužni.

15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

Hvala svima, ovo ćemi olakšati rad, pogotovo u C++ -u za GUI.
@captain_soap_McTawis, pogledat ću je cijelu.
Još jedno pitanje:
-Postoji li sličnost sa strukturama, osim u sintaksi?
Npr 

Postoji jedna vrlo blaga sličnost. No mislim da je praktički nemoguće uspoređivati strukture i klase. Klase su puno moćnije i bolje od struktura, praktički neusporedive. Prije svega u klasama postoji zaštita podataka, čega u strukturama uopće nema. Zatim klase mogu imati i funkcijske članove dok strukture nemogu(osim uz neke trikove no to nije to). Zatim klase imaju konstruktore i destruktore, čega kod struktura nema. Onda kod klase postoji naslijeđivanje i hijerarhija dok kod struktura toga nema. Ovo su samo neke tehničke razlike dok su u primjeni razlike nemjerljive.

 

Strukture služe samo čuvanju podataka, dok objekti mogu puno više od toga.

 

EDIT: Moja greška.

Twitter- @capttawish Linux/GNU live forever.
Poruka je uređivana zadnji put ned 30.10.2011 19:22 (captain_soap_McTawish).
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hvala, stavljao sam razmake ali mi je sve poravnao uz lijevu stranu.
Dakle OOP vrijedi truda, e sad mi ide teži dio posla, da li je teško za shvatiti?, dosad mi nije išlo loše, ne ni predobro, ali dosta stvari znam iz proceduralnog programiranja.

Life is Computers, Tobacos, Women, Trucks, you live better?
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...
Postoji jedna vrlo blaga sličnost. No mislim da je praktički nemoguće uspoređivati strukture i klase. Klase su puno moćnije i bolje od struktura, praktički neusporedive. Prije svega u klasama postoji zaštita podataka, čega u strukturama uopće nema. Zatim klase mogu imati i funkcijske članove dok strukture nemogu(osim uz neke trikove no to nije to). Zatim klase imaju konstruktore i destruktore, čega kod struktura nema. Onda kod klase postoji naslijeđivanje i hijerarhija dok kod struktura toga nema. Ovo su samo neke tehničke razlike dok su u primjeni razlike nemjerljive.

 

Strukture služe samo čuvanju podataka, dok objekti mogu puno više od toga.

Helou! Odakle ti to?

In C++, a structure is a class defined with the struct keyword.[1] Its members and base classes are public by default. A class defined with the class keyword has private members and base classes by default. This is the only difference between structs and classes in C++.

15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...

Helou! Odakle ti to?

In C++, a structure is a class defined with the struct keyword.[1] Its members and base classes are public by default. A class defined with the class keyword has private members and base classes by default. This is the only difference between structs and classes in C++.

Pomiješao sam sa c-om. Ispričavam se na krivim informacijama.

Twitter- @capttawish Linux/GNU live forever.
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Napravio sam rebuild solutiona sa dva projekta.

E sad, u instalacijskom folderu sam izbrisao neku .rtf datoteku sa tim rebuildom koja mi je služila za opis instalacijske procedure, dva dana pisanja ode u vodu

nemam uključen previous version na toj particiji

čini mi se da sam pred zidom, jel zna netko kako bi napravio recovery 

File recover ne pomaže (pretpostavljam da mi nije bio uspješan jer sam staru datoteku zamjenio novom, a ne obrisao).

Visual Studio 2010 i Install Shield 2010.

Jel netko imao ovaj problem, pa uspio učiniti recovery?

Poruka je uređivana zadnji put ned 30.10.2011 20:03 (Floki).
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

...

Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put pet 17.5.2024 14:08 (royalhero).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Napisati funkciju jeProst koja prima prirodan broj, te vraca vrijednost 1, ako je broj prost, ili 0 ako broj nije prost. (Funkcija ništa ne ucitava, niti ispisuje). U glavnom programu ucitati niz od maksimalno 30 cijelih brojeva, a onda, korištenjem funkcije jeProst formirati novi niz koji sadrži samo proste brojeve iz ucitanog niza.

 

 

 

Mozel iko pomoci sa ovim zadatkom,uopste ne znam kako da napravim funkciju. e.e

Album StVaRnOsT uskoro tu :D
Poruka je uređivana zadnji put pon 31.10.2011 14:12 (Aliser).
Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Aliser kaže...
Mozel iko pomoci sa ovim zadatkom,uopste ne znam kako da napravim funkciju. e.e

Pa nauči! Kako misliš riješiti ikoji zadatak bez da to naučiš?

 

17 godina
offline
Programiranje u C++-u - pitanja i odgovori

pošto ti traže da funkcija vraća int vijednost 1 ili 0, napraviš je ovako:

 

int JeProst(int broj)
{
    for(int i = 2; i <= broj/2; i++)
    {
       if (broj % i == 0)
       {
          return 0;
       }
    }
    return 1;
}

 

U mainu deklariraš dva niza, prvi kroz petlju popuniš, izvršiš provjeru sa gornjom funkcijom i popunjavaš drugi, možeš sve u toj jednoj petlji

pokušaj napisati main pa ćemo dalje vidjeti.

Poruka je uređivana zadnji put pon 31.10.2011 15:24 (Floki).
 
1 0 hvala 0
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

pošto ti traže da funkcija vraća int vijednost 1 ili 0, napraviš je ovako:

 

int JeProst(int broj)

{

for(int i=2; i<= broj/2; i++)

{

if(broj / i == 0)

{

return 0;

{

}

return 1;

}

Funkcije se tako ne pišu. Indentacija? Gdje su razmaci s lijeve strane?

17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Nisam je pisao kroz compiler, nego direktno u poruku, a onda mi je ovako glupo izformatiralo.

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

...

Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put pet 17.5.2024 14:09 (royalhero).
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

Nisam je pisao kroz compiler, nego direktno u poruku, a onda mi je ovako glupo izformatiralo.

Čak i ako ti ih je editor "pojeo", tih par razmaka si mogao i sam staviti. Nemoj kriviti editor za svoju lijenost. {#}

17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...
Floki kaže...

Nisam je pisao kroz compiler, nego direktno u poruku, a onda mi je ovako glupo izformatiralo.

Čak i ako ti ih je editor "pojeo", tih par razmaka si mogao i sam staviti. Nemoj kriviti editor za svoju lijenost. {#}

E bome, samo sam do pola "kriv", a ne potpuno, kad sam pisao funkciju pazio sam na indent, ali otvorio sam "krivi" browser, pa mi je javilo da moram poništiti formatiranje,

ja ga poništio, i ispalo kako je bilo

sad sam uzeo Firefox i sve je ok.

(Iz nekog razloga ne da mi u Chrome-u poslati formatirani tekst, javlja mi da ima html koda).

Poruka je uređivana zadnji put pon 31.10.2011 15:22 (Floki).
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

E bome, samo sam do pola "kriv", a ne potpuno, kad sam pisao funkciju pazio sam na indent, ali otvorio sam "krivi" browser, pa mi je javilo da moram poništiti formatiranje,

ja ga poništio, i ispalo kako je bilo

sad sam uzeo Firefox i sve je ok.

BTW svjestan si da ne postoji prirodni broj koji dijeljenjem daje nulu? {#} Hint: treba biti modulo umjesto dijeljenja...

15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Kad imam dosta for petlji u nekom bloku(not nested), da li je bolje odmah na pocektu kreirati varijablu koja sluzi za brojenje:

int x;
for(x=0,...)
....
for(x=0....)

ili je bolje u for petlji kreirati:

for(int x=0;...)
....
for(int x=0;...)

Twitter- @capttawish Linux/GNU live forever.
 
0 0 hvala 0
17 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ja preferiram ovo drugo, stoga sto je preporuka da se varijable inicijaliziraju tamo gdje se i koriste, a ne da inicijaliziras na pocetku programa, a onda upotrijebis u 598. liniji koda. Drugo, ako inicijaliziras u for petlji, tada je ta varijabla inicijalizirana za taj scope, sto je dobro, neces ju moci izvan tog scopea promijeniti slucajno.

The Unix philosophy basically involves giving you just enough rope to hang yourself. And then a couple of feet more, just to be sure.
 
2 0 hvala 1
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...

Ja preferiram ovo drugo, stoga sto je preporuka da se varijable inicijaliziraju tamo gdje se i koriste, a ne da inicijaliziras na pocetku programa, a onda upotrijebis u 598. liniji koda. Drugo, ako inicijaliziras u for petlji, tada je ta varijabla inicijalizirana za taj scope, sto je dobro, neces ju moci izvan tog scopea promijeniti slucajno.

I ja sam dosada koristio drugi nacin iz razloga sto mi je bilo prakticnije. Zanimalo me hoce li biti ustede na procesorskom vremenu ako koristimo prvi nacin jer u njemu varijablu deklariramo samo jednom, dok kod drugoga se varijabla nekoliko puta deklarira?

Twitter- @capttawish Linux/GNU live forever.
Poruka je uređivana zadnji put pon 31.10.2011 17:22 (captain_soap_McTawish).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...

I ja sam dosada koristio prvi nacin iz razloga sto mi je bilo prakticnije. Zanimalo me hoce li biti ustede na procesorskom vremenu ako koristimo prvi nacin jer u njemu varijablu deklariramo samo jednom, dok kod drugoga se varijabla nekoliko puta deklarira?

Joooj, ajde kod takvih stvari se nemoj opterecivati s ikakvom optimizacijom, kao prvo, nismo u 1960-tima da moras paziti na svaki ciklus, drugo svaki danasnji iole bolji kompajler je dovoljno pametan da sam napravi sve potrebne optimizacije bolje nego sto bi ti ovako pokusavao... Nemoj se zamarati time.

The Unix philosophy basically involves giving you just enough rope to hang yourself. And then a couple of feet more, just to be sure.
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...
1domagoj1 kaže...

Ja preferiram ovo drugo, stoga sto je preporuka da se varijable inicijaliziraju tamo gdje se i koriste, a ne da inicijaliziras na pocetku programa, a onda upotrijebis u 598. liniji koda. Drugo, ako inicijaliziras u for petlji, tada je ta varijabla inicijalizirana za taj scope, sto je dobro, neces ju moci izvan tog scopea promijeniti slucajno.

I ja sam dosada koristio prvi nacin iz razloga sto mi je bilo prakticnije.

Misliš - drugi način? Ili? Pošto je on koristio drugi način, a ti si napisao "I ja..."

 

captain_soap_McTawish kaže...

Zanimalo me hoce li biti ustede na procesorskom vremenu ako koristimo prvi nacin jer u njemu varijablu deklariramo samo jednom, dok kod drugoga se varijabla nekoliko puta deklarira?

Napravi neku petlju koja će se vrtiti nekoliko (desetaka? stotina?) minuta i izmjeri vrijeme! Možeš staviti i neka ti izbacuje broj iteracija po sekundi ili minuti. Probaj kompajlirati program pa vidi.

 

Mada, meni inače nema logike da se troši više procesorskog vremena - za svako mjesto gdje se koristi varijabla postupak je isti - učitavanje sadržaja varijable u registar, neka operacija s registrom i vraćanje rezultata u varijablu. Razlika je samo u memorijskoj lokaciji na kojoj se nalazi sadržaj varijable - dakle, broju, mjestu sadržaja u memoriji.

 

Jedino je pitanje hoće li program potrošiti koji bajt memorije više. Međutim, to je jako upitno, jer kad izađeš iz petlje, varijabla koju si deklarirao za tu petlju nestaje, ona u tom trenutku više ne postoji. Tako da se ne bih iznenadio da kompajler koji to optimizira, da zapravo proizvede identični strojni kôd, jer će istu memorijsku lokaciju koristiti za svaku od tih "privremenih" varijabli, koje postoje samo unutar for-petlji.

 

 

 

EDIT - mogu ti odmah reći - testirano u Code::Blocksu, s defaultnim GNU GCC kompajlerom. Napisao sam ultranapredni program:

 

    for (int i = 0; i < 1; i++) cout << "1. adresa od i: " << &i << endl;
    for (int i = 0; i < 1; i++) cout << "2. adresa od i: " << &i << endl;
    for (int i = 0; i < 1; i++) cout << "3. adresa od i: " << &i << endl;

Nakon kompajliranja i pokretanja, dobio sam tri različite brojke - znači, svaka od tih varijabli i je bila smještena na drugu memorijsku lokaciju. I pomislio sam da je to to, ali me nešto kopkalo - jesu li uključene optimizacije? I idem gledati i onda se sjetim da jednostavno možeš odabrati način buildanja - Debug ili Release. I prebacim na Release, kompajliram, pokrenem iiiiiiii? Izbaci tri ista broja! Znači, kompajler je optimizirao program da svaka od tih varijabli koristi istu memorijsku lokaciju. I obje verzije programa izbacuju istu brojku. Probao sam i binarnu usporedbu te dvije .exe datoteke - one se razlikuju u svega tri bajta. Da ne znam bolje, rekao bi h da kompajler ubaci u .exe datoteku neki svoj metapodatak (možda vrijeme kompajliranja) pa da je razlika samo u tome.

 

Eto, misterija riješena! Hipoteza potvrđena u praksi. Reklo bi se - znanstvena teorija. {#}

 

Poruka je uređivana zadnji put pon 31.10.2011 17:51 (mbaksa).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Di da skinem c++?

 

LoL acc THCJoshi
Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Jonja kaže...

Di da skinem c++?

Neopterećujuća (za računalo) razvojna okolina (i više nego dovoljna za kuckanje koda u konzoli): http://www.codeblocks.org/

Microsoftov C++: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express

13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...
Jonja kaže...

Di da skinem c++?

Neopterećujuća (za računalo) razvojna okolina (i više nego dovoljna za kuckanje koda u konzoli): http://www.codeblocks.org/

Microsoftov C++: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express

U Dev C++ -u možeš i GUI aplikacije radit, ali pretpostavljaš slabije nego u Visual okruženju, također je neoptrerećujući, njega koristim za brzo provjeravanje koda.
On ima nešto slično intellisense-u, ali za objekte, klikneš . nakon objekta on ti prikaže sve public fieldove.

@Jonja:
Dev C++:
http://www.bloodshed.net/dev/devcpp.html

Visual Studio(sa DreamSparka, ako si student ili srednjoškolac):
https://www.dreamspark.com/Products/Product.aspx?ProductId=25
Ako želiš samo C++, skini Visual C++ Express version, kao što ti je mbaksa rekao.

Koristi ih paralelno, ako ti nešto treba na brzinu ili neki manji programčić koristi Dev C++, a kad radiš neki bolji program koristi Visual C++.
Naravno to je samo moja preporuka i kako ja radim, a ti kako hoćeš.

Programming is understanding. – Kristen Nygaard
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...
mbaksa kaže...
Jonja kaže...

Di da skinem c++?

Neopterećujuća (za računalo) razvojna okolina (i više nego dovoljna za kuckanje koda u konzoli): http://www.codeblocks.org/

Microsoftov C++: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express

U Dev C++ -u možeš i GUI aplikacije radit

A je li? A koliko si ih dosad napravio? Također, u Code::Blocksu se ne može?

 

royalhero kaže...

On ima nešto slično intellisense-u, ali za objekte, klikneš . nakon objekta on ti prikaže sve public fieldove.

Misliš da Code::Blocks to ne može? DevC++ je zastarjelo smeće od razvojne okoline. Nemoj to preporučivati ljudima - Code::Blocks je prava stvar za one koji ne žele glomaznost Visual C++-a.

E-mail:
Lozinka:
 
vrh stranice