|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
7.12.2008, 22:45 | #1 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
C++ za apsolutne početnike
Jedan nesretni početnik traži pomoć.
Evo šta me muči, slijedi kod: #include <iostream> #include <math.h> using namespace std; class Tacka { public: Tacka(); void ucitaj(); void stampaj(); int getX(); int getY(); private: int x, y; }; class Duz { public: Duz(); double duzina(); void ucitaj(); private: Tacka a, b; }; //Tacka - funkcije Tacka::Tacka() {} void Tacka::ucitaj() { cout << "x: "; cin >> x; cout << endl <<"y: "; cin >> y; } void Tacka::stampaj() { cout << "x = " << x << ", " << "y = " << y<< endl; } int Tacka::getX() { return x;} int Tacka::getY() { return y;} //Duz - funkcije Duz:uz() {} void Duz::ucitaj() { cout<< "Tacka A:"<<endl; //tacka A a.ucitaj(); cout<< "Tacka B:"<<endl; //tacka B b.ucitaj(); } double Duz::duzina() { double d; d=sqrt(pow(a.getX - b.getX, 2) + pow(a.getY - b.getY, 2)); return d; } main() { Duz prva; prva.ucitaj(); cout << "Duzina: " << prva.duzina()<<endl; getchar();getchar(); } Problematična je boldovana linija. Kad pokušam compile, ispisuje mi ovo: 63 D:\Dev-Cpp\Programski jezici 1\Klase\duz.cpp invalid use of member (did you forget the `&' ?) Može li neko da mi kaže u čemu griješim? Ako još budete imali strpljenja da napišete i ispravan kod (tj. ispravan dio koji sam zeznuo) tim bolje. Hvala unaprijed! |
7.12.2008, 22:58 | #2 |
Kekule Mekule
|
Re: C++ za apsolutne početnike
Treba da stoji:
Kod:
d=sqrt(pow(a.getX() - b.getX(), 2) + pow(a.getY() - b.getY(), 2)); |
7.12.2008, 23:05 | #3 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
Re: C++ za apsolutne početnike
Eeeeeee, tako je! Vjeruj mi nisam ni pogledao ovo "treba da stoji" već sam samo pročitao rečenicu "ne možeš...", vratio se u editor i shvatio da je stvar u zagradama! To mi je i profesor skoro ispravio na nekom drugom zadatku... Lapsus. Mora se više kuckati.
Veliko HVALA!!! |
7.12.2008, 23:41 | #4 |
Veteran
|
Re: C++ za apsolutne početnike
Jedan mali savet :
getX() i getY() vracaju int, pow (i sqrt) primaju floating point tipove (float, double, long double). Nemam pojma zasto je to uspesno kompajlirano.... Stvar je u tome sto su cmath funkcije overloadovane (ista imena, ali se razlikuju po tipu argumenata), i primaju samo float, double i long double argumente. Ti si im prosledio int. Sta je kompajler odabrao? Bog ce znati... Ja se pitam zasto je uopste i kompajlirao... EDIT : Upravo videh da si koristio math.h umesto cmath. Pouka je ista, izbegavaj da zongliras sa podacima razlicitog tipa. Cast-uj ti sam, da bi izbegao najcesci tip greski u C-u i C++-u. Iskoristi C++-ove mogucnosti cast-ovanja. Poslednja ispravka: fingerprint (7.12.2008 u 23:50) |
8.12.2008, 0:11 | #5 |
Veteran
Član od: 16.4.2007.
Lokacija: Novi Sad,Veternik
Poruke: 874
Zahvalnice: 628
Zahvaljeno 452 puta na 231 poruka
|
Re: C++ za apsolutne početnike
Moze i C da cast-uje
|
8.12.2008, 0:26 | #6 |
Veteran
|
Re: C++ za apsolutne početnike
|
Sledeći korisnik se zahvaljuje korisniku fingerprint na korisnoj poruci: | ||
Notorious B.I.G (8.12.2008) |
8.12.2008, 1:25 | #7 |
Veteran
Član od: 17.1.2008.
Lokacija: Београд
Poruke: 636
Zahvalnice: 481
Zahvaljeno 128 puta na 85 poruka
|
Re: C++ za apsolutne početnike
I koristi [code] tagove za kod.
|
12.12.2008, 0:01 | #8 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
Re: C++ za apsolutne početnike
Pozdrav, evo mene opet, sa novim problemima!
Prvo, hvala svima na odgovorima. Evo i problem: Kod:
VBroj operator- (VBroj &a, VBroj &b)//---oduzimanje dva velika broja--- { VBroj c, x, y; int i=0, pren=0; if (a>b) {x=a; y=b;} else {x=b; y=a;}; for(i=0; i<x.brojac; i++) { if(x.cifra[i]>=(y.cifra[i]+pren)) //ako nema prenosa { c.cifra[i]=x.cifra[i]-(y.cifra[i]+pren); pren=0; c.brojac+=1; } else { c.cifra[i]=(x.cifra[i]+10)-(y.cifra[0]+pren); //ako ima prenosa pren=1; c.brojac+=1; } } } Funkcija main: Kod:
main() { VBroj a, b, c, d; cout<<"Broj A: "<<endl; cin>>a; cout<<"broj a: "<<a<<endl; cout<<"Broj B: "<<endl; cin>>b; cout<<"broj b: "<<b<<endl; if (a>b) cout << "A > B"<<endl; else cout<<"A <=B "<<endl; c=a+b; cout<<"A + B = "<<c<<endl; d=a-b; cout<<"A - B = "<<d<<endl; getchar();getchar(); } Kad uklonim objekat c, tj. zbir, onda mi pri pokretanju programa izbaci grešku, tj. prozorčić sa "Press OK to quit" i "Press Cancel to debug", i navede neke adrese, blabla adresa ovo nešto adresa ono. Može li neko da pronađe grešku, tj. ustanovi o čemu se radi? Hvala unaprijed! |
13.12.2008, 12:25 | #9 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
Re: C++ za apsolutne početnike
Da vas počastim cijelim kodom:
Kod:
#include<iostream> using namespace std; class VBroj { friend VBroj operator+ (VBroj &, VBroj &); friend VBroj operator- (VBroj &, VBroj &); friend VBroj operator/ (VBroj &, VBroj &); friend VBroj operator* (VBroj &, VBroj &); friend int operator> (VBroj &, VBroj &); friend int operator< (VBroj &, VBroj &); friend ostream &operator<< (ostream &, VBroj &); friend istream &operator>> (istream &, VBroj &); public: VBroj(); void cifraSet(int); private: int cifra[100]; int brojac; }; VBroj::VBroj() { for (int i=0;i<100;i++) cifra[i]=0; brojac=0;} VBroj operator+ (VBroj &a, VBroj &b)//---sabiranje dva velika broja--- { VBroj c; int i=0, br, pren=0;//pren je prenos, br je min broj cifara zbira, br+1 max if(a.brojac==b.brojac) br=a.brojac;//br je broj clanova veceg niza else br= (a.brojac>b.brojac?a.brojac:b.brojac);//koristi se u sabiranju for(i=0;i<=br;i++)//<= je zbog najteze cifre c { c.cifra[i]=((a.cifra[i] + b.cifra[i])%10 + pren); pren = (a.cifra[i] + b.cifra[i])/10; } if ((a.cifra[br-1]+b.cifra[br-1])/10) c.brojac=br+1; else c.brojac=br; return c; } int operator> (VBroj &a, VBroj &b)// --- preklapanje operatora > --- { int i=1; if (a.brojac>b.brojac) return 1; else if (a.brojac<b.brojac) return 0; else { while(a.cifra[a.brojac-i]==b.cifra[b.brojac-i]) i++; //broji do prve razlike u ciframa if ( a.cifra[a.brojac-(i+1)] > b.cifra[b.brojac-(i+1)] ) return 1; else if ( a.cifra[a.brojac-(i+1)] < b.cifra[b.brojac-(i+1)] ) return 0; else return 0; } } VBroj operator- (VBroj &a, VBroj &b)//---oduzimanje dva velika broja--- { VBroj c, x, y; int i=0, pren=0; if (a>b) {x=a; y=b;} else {x=b; y=a;}; for(i=0; i<x.brojac; i++) { if(x.cifra[i]>=(y.cifra[i]+pren)) //ako nema prenosa { c.cifra[i]=x.cifra[i]-(y.cifra[i]+pren); pren=0; c.brojac+=1; } else { c.cifra[i]=(x.cifra[i]+10)-(y.cifra[0]+pren); //ako ima prenosa pren=1; c.brojac+=1; } } } istream &operator>>( istream &ulaz, VBroj &b )// ---unos broja--- { int s=0, pbr=0; cout <<"Unesi broj cifara broja : "; cin >>b.brojac; for ( int i=0; i<b.brojac; i++ ) { cout << b.brojac-i<<". cifra: "; ulaz >> b.cifra[b.brojac-1-i]; } if (b.cifra[b.brojac-1]==0) //eliminise pocetne nule while(s==0) { pbr+=1; s+=b.cifra[b.brojac-pbr-1]; } b.brojac=b.brojac-pbr;//takodje zbog pocetnih nula return ulaz; } ostream &operator<<( ostream &izlaz, VBroj &b ) //---ispis broja--- { for ( int i=0; i<b.brojac; i++ ) izlaz << b.cifra[b.brojac-1-i]; return izlaz; } main() { VBroj a, b, c, d; cout<<"Broj A: "<<endl; cin>>a; cout<<"broj a: "<<a<<endl; cout<<"Broj B: "<<endl; cin>>b; cout<<"broj b: "<<b<<endl; if (a>b) cout << "A > B"<<endl; else cout<<"A <=B "<<endl; c=a+b; cout<<"A + B = "<<c<<endl; d=a-b; cout<<"A - B = "<<d<<endl; getchar();getchar(); } Kad se pokrene: Eto, a ja se nadam nekom odgovoru. Hvala unaprijed! |
Sledeći korisnik se zahvaljuje korisniku dalabu na korisnoj poruci: | ||
allokin (14.12.2008) |
14.12.2008, 1:41 | #10 |
Veteran
Član od: 17.1.2008.
Lokacija: Београд
Poruke: 636
Zahvalnice: 481
Zahvaljeno 128 puta na 85 poruka
|
Re: C++ za apsolutne početnike
Uff.. Preko moba je nemoguce naci problem, izvini. Valjda ce ti neko pomoci, u skorije vreme.
Btw, nisam znao da u C++ mogu da se manipulisu standardne i/o operacije u klasama. Sve vise uvidjam koliko je C++ koristan mada cu se ipak drzati takozvanog C+. |
14.12.2008, 20:32 | #11 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Re: C++ za apsolutne početnike
Pogrešan rezultat je verovatno rezultat nevraćanja vrednosti u operatoru "-". Zaboravio si "return c;". interesantno je, međutim, da te kompajler o tome nije obavestio. Većina kompajlera (gcc, vc) generišu grešku za ovako nešto.
U implementaciji operatora "<<" imaš potecijalnu beskonačnu petlju. Na primer, kada se objekat inicijalizuje brojač je jednak nuli. U tom slučaju uslov "i<b.brojac" nije zadovoljen i petlja nastravlja da "radi". To bi objasnilo zašto štampanje "c" ukoliko mu nije dodeljena vrednost obara program. Mislim da slično može da se desi i u implementaciji operatora "-". |
Sledeći korisnik se zahvaljuje korisniku rile na korisnoj poruci: | ||
dalabu (14.12.2008) |
14.12.2008, 22:43 | #12 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
Re: C++ za apsolutne početnike
Ahhh, opet glupa greška! Stvarno sam zaboravio "return c"!
Beskrajno zahvalan! |
15.12.2008, 4:25 | #13 |
Novi član
Član od: 24.10.2008.
Lokacija: Sarajevo
Poruke: 26
Zahvalnice: 5
Zahvaljeno 3 puta na 3 poruka
|
Re: C++ za apsolutne početnike
|
29.12.2008, 19:58 | #14 |
Član
|
Re: C++ za apsolutne početnike
ja sam bas,bas pocetnik nemam pojma ni o osnovama programiranja....da li neko moze da mi kaze gde mogu da "downloadujem" c++ i e-knjigu pa da polako pocnem da ucim...?
|
30.12.2008, 0:41 | #16 |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
|
Re: C++ za apsolutne početnike
Sinko nebi ti savetovao da se hvatas C++ ,osim ako nisi supernatural-no nadaren za programiranje . Ako nemas barem osnove iz programiranja (Pascal ili glupog BASIC) tj. nerazumes osnovne porgramske strukture i kontrole toka onda .. lati se Pascala ili C (obicnog strukturnog) ,ali pazi C je strasno zbunujuci na pocetku i ume coveka da natera da batali sve.
|
Sledeći korisnik se zahvaljuje korisniku zokocx na korisnoj poruci: | ||
radule94 (30.12.2008) |
30.12.2008, 11:29 | #17 |
Veteran
Član od: 17.1.2008.
Lokacija: Београд
Poruke: 636
Zahvalnice: 481
Zahvaljeno 128 puta na 85 poruka
|
Re: C++ za apsolutne početnike
Nije bas tako, C++ jeste tezi od pojedinih jezika ali "supenatural-no" je malo preterivanje.
|
30.12.2008, 13:11 | #18 | |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
|
Re: C++ za apsolutne početnike
Citat:
Ma najbolje je C pa C++ malo Jave i uzmes C# i na konju si. |
|
30.12.2008, 13:55 | #19 | |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: C++ za apsolutne početnike
Citat:
Kod C++-a problemi su potpuno drugačije prirode. Metodologija rada ne podrazumeva toliko zalaženja u detalje same aplikacije koliko u pozvanaje i primenu design patterna. Dakle, onoliko koliko u C-u mogu da nastanu problemi vezani za pokazivače i ostale ne baš toliko lako svarljive stvari kada se situacija zakomplikuje toliko kod OOP jezika (C++) može da nastane problem oko shvatanja osnovnih principa kao što je apstrakcija klasa, korišćenje pravog dizajn patterna (singleton, factory) kada je on primeren i sl. Da rezimiram. Ne može se konkretno baš reći da je neki jezik teže naučiti od drugog jer jednostavno ne leže sve stvari svim ljudima a sa druge strane i ne koriste se svi jezici baš za sve poslove. Pravi osećaj za to koji je jezik odgovarajući nažalost po meni može da se stekne tek probanjem. Priče tipa "uzmi C++" ili "sa Javom nećeš pogrešiti" su po meni potpuno beskorisne osim što na nekom najgeneralnijem nivou mogu da odgovore potencijalnom korisniku za šta se taj jezik najviše koristi Jedino što ja mogu da savetujem svakoga ko bude hteo da uči C++... Naučite prvo C. Ne možete da očekujete da ćete tek tako bez poznavanja C-a, koji je usput grubo rečeno osnova C++-a, početi sa učenjem onoga što čini srž svakog OOP-a a to su design patterni. |
|
Sledeći korisnik se zahvaljuje korisniku holodoc na korisnoj poruci: | ||
zokocx (31.12.2008) |
31.12.2008, 2:25 | #20 |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
|
Re: C++ za apsolutne početnike
^^ Glatko i jasno, svaka cast.
Ja trenutno ucim C, i bezbroj puta sam bio u situaciji da moram da trazim sample code na netu jer to sto mi je ponudzeno nece da radi bas kako treba. Pozljno je znati vise programskih jezika ,ali sve zavisi od probleme koji resavamo tj. kakvu aplikaciju kodiramo. |
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Za početnike overklokere grafičkih | JovanK | Overklok | 368 | 22.7.2020 12:37 |
Dobra simulacija letenja | enter011 | Simulacije vožnje | 167 | 9.7.2009 13:40 |
Kako povezati racunar sa TV-om (za početnike) | PeTkO | Video/TV softver | 7 | 24.6.2008 12:26 |
RivaTuner za početnike | cc13 | Overklok | 7 | 9.3.2008 23:41 |
Knjige za početnike | zukov | Programiranje | 6 | 17.5.2006 19:10 |