![]() |
![]() |
|
Programiranje Programski jezici, tehnike, alatke... |
![]() |
|
Alatke vezane za temu | Vrste prikaza |
|
![]() |
#1 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
![]()
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: ![]() {} 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! ![]() |
![]() |
![]() |
![]() |
#2 |
Kekule Mekule
|
![]()
Treba da stoji:
Kod:
d=sqrt(pow(a.getX() - b.getX(), 2) + pow(a.getY() - b.getY(), 2)); ![]() |
![]() |
![]() |
![]() |
#3 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
![]()
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!!! ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#4 |
Veteran
|
![]()
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) |
![]() |
![]() |
![]() |
#5 |
Veteran
Član od: 16.4.2007.
Lokacija: Novi Sad,Veternik
Poruke: 874
Zahvalnice: 628
Zahvaljeno 452 puta na 231 poruka
|
![]()
Moze i C da cast-uje
|
![]() |
![]() |
![]() |
#6 |
Veteran
|
![]() |
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku fingerprint na korisnoj poruci: | ||
Notorious B.I.G (8.12.2008) |
![]() |
#7 |
Veteran
Član od: 17.1.2008.
Lokacija: Београд
Poruke: 636
Zahvalnice: 481
Zahvaljeno 128 puta na 85 poruka
|
![]()
I koristi [code] tagove za kod.
|
![]() |
![]() |
![]() |
#8 |
Novi član
Član od: 29.12.2008.
Poruke: 8
Zahvalnice: 2
Zahvaljeno 0 puta na 0 poruka
|
![]()
pozzz svima!!!vidim da je ovo tema za pochetnike, shto sam i ja, pa bih zamolila za pomoc oko jednog zadatka koji zahteva rad sa klasama i objektima, shto je meni potpuno strano, jer sam ranije radila samo strukturirano...
program treba da uredjuje po duzhini trajanja pesme u M3U formatu, izbacuje sve koje i imenu izvodjacha imaju string uchitan sa glavnog ulaza i chuva dobijenu listu u ASX formatu... okachila sam info o formatima plejlisti, chisto ako se nadje neko kome treba... ![]() http://www33.zippyshare.com/v/34439170/file.html |
![]() |
![]() |
![]() |
#9 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
![]()
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! ![]() |
![]() |
![]() |
![]() |
#10 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
![]()
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) |
![]() |
#11 |
Veteran
Član od: 17.1.2008.
Lokacija: Београд
Poruke: 636
Zahvalnice: 481
Zahvaljeno 128 puta na 85 poruka
|
![]()
Uff.. Preko moba je nemoguce naci problem, izvini.
![]() 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+. |
![]() |
![]() |
![]() |
#12 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
![]()
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) |
![]() |
#13 |
Novi član
Član od: 7.12.2008.
Poruke: 5
Zahvalnice: 3
Zahvaljeno jedanput na jednoj poruci
|
![]()
Ahhh, opet glupa greška! Stvarno sam zaboravio "return c"!
![]() Beskrajno zahvalan! |
![]() |
![]() |
![]() |
#14 |
Novi član
Član od: 24.10.2008.
Lokacija: Sarajevo
Poruke: 26
Zahvalnice: 5
Zahvaljeno 3 puta na 3 poruka
|
![]() |
![]() |
![]() |
![]() |
#15 |
Član
|
![]()
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...?
|
![]() |
![]() |
![]() |
#17 |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.592
Zahvalnice: 931
Zahvaljeno 586 puta na 365 poruka
|
![]()
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) |
![]() |
#18 |
Veteran
Član od: 17.1.2008.
Lokacija: Београд
Poruke: 636
Zahvalnice: 481
Zahvaljeno 128 puta na 85 poruka
|
![]()
Nije bas tako, C++ jeste tezi od pojedinih jezika ali "supenatural-no" je malo preterivanje.
|
![]() |
![]() |
![]() |
#19 | |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.592
Zahvalnice: 931
Zahvaljeno 586 puta na 365 poruka
|
![]() Citat:
Ma najbolje je C pa C++ malo Jave i uzmes C# i na konju si. |
|
![]() |
![]() |
![]() |
#20 | |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.892 puta na 1.077 poruka
|
![]() 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) |
![]() |
Bookmarks sajtovi |
|
|
![]() |
||||
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 |