Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
tomitza Forumaš(ica)
Pridružen/a: 28. 11. 2008. (19:50:48) Postovi: (58)16
|
|
[Vrh] |
|
Tindariel Forumaš(ica)
Pridružen/a: 03. 12. 2008. (00:49:03) Postovi: (71)16
Spol:
Lokacija: Zagreb
|
|
[Vrh] |
|
tomitza Forumaš(ica)
Pridružen/a: 28. 11. 2008. (19:50:48) Postovi: (58)16
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
Postano: 17:41 sri, 9. 6. 2010 Naslov: |
|
|
evo drugi bi nekak ovak išo:
[code:1]
struct racun {
vector< pair< string, int > > pica;
racun( string ime_pica, int cijena=1 ){
pair< string, int > a;
a.first = ime_pica;
a.second = cijena;
pica.push_back( a );
}
racun& operator+( const racun& X ){
for( int i = 0; i < X.pica.size(); i++ ){
int j;
for( j = 0; j < pica.size(); j++ )
if( X.pica[i].first == pica[j].first ){
pica[j].second+=X.pica[i].second; break;
}
if( j == pica.size() ){
pair< string, int > a;
a.first = X.pica[i].first;
a.second = X.pica[i].second;
pica.push_back( a );
}
}
return *this;
}
racun& operator-( const racun& X ){
vector< pair< string, int> > pi_2;
for( int i = 0; i < X.pica.size(); i++ )
for( int j = 0; j < pica.size(); j++ )
if( X.pica[i].first == pica[j].first ){
pica[j].second-=X.pica[i].second; break;
}
for( int i = 0; i < pica.size(); i++ )
if( pica[i].second > 0 ) pi_2.push_back( pica[i] );
pica.clear();
for( int i = 0; i < pi_2.size(); i++ )
pica.push_back( pi_2[i] );
return *this;
}
friend ostream& operator<<( ostream& s, const racun& X){
set< pair< string, int > > skup;
for( int i = 0;i < X.pica.size(); i++ )
skup.insert( X.pica[i] );
for( set< pair< string, int > >::iterator it = skup.begin(); it != skup.end(); it++ )
cout << it -> first << " " << it -> second << endl;
return s;
}
};
[/code:1]
nisam isprobavo, možda ima nekih grešaka, ali to ti je u principu to!
evo drugi bi nekak ovak išo:
Kod: |
struct racun {
vector< pair< string, int > > pica;
racun( string ime_pica, int cijena=1 ){
pair< string, int > a;
a.first = ime_pica;
a.second = cijena;
pica.push_back( a );
}
racun& operator+( const racun& X ){
for( int i = 0; i < X.pica.size(); i++ ){
int j;
for( j = 0; j < pica.size(); j++ )
if( X.pica[i].first == pica[j].first ){
pica[j].second+=X.pica[i].second; break;
}
if( j == pica.size() ){
pair< string, int > a;
a.first = X.pica[i].first;
a.second = X.pica[i].second;
pica.push_back( a );
}
}
return *this;
}
racun& operator-( const racun& X ){
vector< pair< string, int> > pi_2;
for( int i = 0; i < X.pica.size(); i++ )
for( int j = 0; j < pica.size(); j++ )
if( X.pica[i].first == pica[j].first ){
pica[j].second-=X.pica[i].second; break;
}
for( int i = 0; i < pica.size(); i++ )
if( pica[i].second > 0 ) pi_2.push_back( pica[i] );
pica.clear();
for( int i = 0; i < pi_2.size(); i++ )
pica.push_back( pi_2[i] );
return *this;
}
friend ostream& operator<<( ostream& s, const racun& X){
set< pair< string, int > > skup;
for( int i = 0;i < X.pica.size(); i++ )
skup.insert( X.pica[i] );
for( set< pair< string, int > >::iterator it = skup.begin(); it != skup.end(); it++ )
cout << it -> first << " " << it -> second << endl;
return s;
}
};
|
nisam isprobavo, možda ima nekih grešaka, ali to ti je u principu to!
Zadnja promjena: Cobs; 18:39 sri, 9. 6. 2010; ukupno mijenjano 5 put/a.
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
Postano: 17:45 sri, 9. 6. 2010 Naslov: |
|
|
fala...ja sam pokušao malo drukčijim pristupom....
#include <iostream>
#include <set>
#include <list>
using namespace std;
class pice {
public:
string ime;
int broj;
pice(string IME, int BROJ=1) {ime=IME; broj=BROJ; }
friend bool operator< (const pice& a, const pice& b);
};
bool operator< (const pice& a, const pice& b)
{if (a.ime<b.ime) return true; else return false; }
class racun
{public:
list<pice*> niz;
racun(string IME, int BROJ=1)
{ pice P(IME,BROJ); //zašto je srao prije
niz.push_back(&P);}
friend racun& operator+ (racun& a, const pice &b);
friend racun& operator- (racun&a, const pice &b);
friend ostream& operator<< (ostream &f, racun& a);
};
racun& operator+ (racun& a, pice& b)
{ list<pice*>:: iterator si; int istina=1;
for(si=a.niz.begin(); si!=a.niz.end(); si++)
if( (*(*si)).ime ==b.ime) (*si)->broj+=b.broj;
if (istina==1) a.niz.push_back(&b);
return a;
};
racun& operator- (racun& a, pice& b)
{ list<pice*>:: iterator si; int istina=1;
for(si=a.niz.begin(); si!=a.niz.end(); si++)
if( (*(*si)).ime ==b.ime)
{ if ((*si)->broj>=b.broj) (*si)->broj-=b.broj;
if ((*si)->broj<b.broj) a.niz.erase(si);
}
for(si=a.niz.begin(); si!=a.niz.end(); si++)
if( (*(*si)).broj ==0) a.niz.erase(si);
}
ostream& operator<< (ostream &f, racun& a)
{ list<pice *>:: iterator si; int istina=1;
for(si=a.niz.begin(); si!=a.niz.end(); si++)
f<<*(*si)->ime<<" "<<(*si)->broj<<endl;
return f;
}
int main (void)
{ racun tangenta("kava s mlijekom",2);
racun birc("kava",2);
list<pice *>:: iterator si;
cout<<tangenta<<birc;
system("pause");
return 0;
}
i počne mi nebuloze ispisivat.... pa ako se nekom da pogledat kod, bio bih zahvalan...
[size=9][color=#999999]Added after 40 seconds:[/color][/size]
problem se stvara kod ispisa mislim
fala...ja sam pokušao malo drukčijim pristupom....
#include <iostream>
#include <set>
#include <list>
using namespace std;
class pice {
public:
string ime;
int broj;
pice(string IME, int BROJ=1) {ime=IME; broj=BROJ; }
friend bool operator< (const pice& a, const pice& b);
};
bool operator< (const pice& a, const pice& b)
{if (a.ime<b.ime) return true; else return false; }
class racun
{public:
list<pice*> niz;
racun(string IME, int BROJ=1)
{ pice P(IME,BROJ); //zašto je srao prije
niz.push_back(&P);}
friend racun& operator+ (racun& a, const pice &b);
friend racun& operator- (racun&a, const pice &b);
friend ostream& operator<< (ostream &f, racun& a);
};
racun& operator+ (racun& a, pice& b)
{ list<pice*>:: iterator si; int istina=1;
for(si=a.niz.begin(); si!=a.niz.end(); si++)
if( (*(*si)).ime ==b.ime) (*si)→broj+=b.broj;
if (istina==1) a.niz.push_back(&b);
return a;
};
racun& operator- (racun& a, pice& b)
{ list<pice*>:: iterator si; int istina=1;
for(si=a.niz.begin(); si!=a.niz.end(); si++)
if( (*(*si)).ime ==b.ime)
{ if ((*si)→broj>=b.broj) (*si)→broj-=b.broj;
if ((*si)→broj<b.broj) a.niz.erase(si);
}
for(si=a.niz.begin(); si!=a.niz.end(); si++)
if( (*(*si)).broj ==0) a.niz.erase(si);
}
ostream& operator<< (ostream &f, racun& a)
{ list<pice *>:: iterator si; int istina=1;
for(si=a.niz.begin(); si!=a.niz.end(); si++)
f<<*(*si)→ime<<" "<<(*si)→broj<<endl;
return f;
}
int main (void)
{ racun tangenta("kava s mlijekom",2);
racun birc("kava",2);
list<pice *>:: iterator si;
cout<<tangenta<<birc;
system("pause");
return 0;
}
i počne mi nebuloze ispisivat.... pa ako se nekom da pogledat kod, bio bih zahvalan...
Added after 40 seconds:
problem se stvara kod ispisa mislim
_________________ NJIIIIHAAA
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
|
[Vrh] |
|
Thor Forumaš(ica)
Pridružen/a: 24. 04. 2009. (10:57:50) Postovi: (15)16
|
Postano: 18:05 sri, 9. 6. 2010 Naslov: |
|
|
evo konjino i ja sam ti rijesio
#include<iostream>
#include<map>
#include<string>
#include<set>
using namespace std;
class racun{
public:
map<string,int> mapa;
racun(string ime,int n=1){
map<string,int> M;
M[ime]=n;
mapa=M;
}
friend racun operator+(racun A,racun B);
friend racun operator-(racun A,racun B);
friend ostream& operator<<(ostream& f,racun A);
};
racun operator+(racun A,racun B){
int fnd=1;
map<string,int>::iterator mi,ni;
for(mi=B.mapa.begin();mi!=B.mapa.end();++mi){
for(ni=A.mapa.begin();ni!=A.mapa.end();++ni)
if((*mi).first==(*ni).first){ A.mapa[(*mi).first]=(*mi).second+(*ni).second; fnd=0; }
if(fnd) A.mapa[(*mi).first]=(*mi).second;
}
return A;
}
racun operator-(racun A,racun B){
map<string,int>::iterator mi,ni;
for(mi=B.mapa.begin();mi!=B.mapa.end();++mi)
for(ni=A.mapa.begin();ni!=A.mapa.end();++ni)
if((*mi).first==(*ni).first) A.mapa[(*mi).first]=(*ni).second-(*mi).second;
mi = A.mapa.begin();
while( mi != A.mapa.end() ) {
if( (*mi).second <= 0 ) {
ni = mi; ni++;
A.mapa.erase( mi );
mi = ni;
}
else mi++;
}
return A;
}
ostream& operator<<(ostream& f,racun A){
set<string> HAHA;
map<string,int>::iterator ni;
set<string>::iterator hi;
for(ni=A.mapa.begin();ni!=A.mapa.end();++ni)
HAHA.insert((*ni).first);
for(hi=HAHA.begin();hi!=HAHA.end();++hi)
cout<<(*hi)<<" "<<A.mapa[*hi]<<endl;
}
int main(){
racun A("Votka",100);
racun B("Jack Daniels",200);
racun C("Jack Daniels", 300);
racun D("Breezer",150);
racun E("Campari",100);
D=D+E+A;
A=A+B;
A=A-C;
cout<<A;
cout<<endl;
cout<<D;
cout<<endl;
cout<<A+D;
system("pause");
return 0;
}
evo konjino i ja sam ti rijesio
#include<iostream>
#include<map>
#include<string>
#include<set>
using namespace std;
class racun{
public:
map<string,int> mapa;
racun(string ime,int n=1){
map<string,int> M;
M[ime]=n;
mapa=M;
}
friend racun operator+(racun A,racun B);
friend racun operator-(racun A,racun B);
friend ostream& operator<<(ostream& f,racun A);
};
racun operator+(racun A,racun B){
int fnd=1;
map<string,int>::iterator mi,ni;
for(mi=B.mapa.begin();mi!=B.mapa.end();++mi){
for(ni=A.mapa.begin();ni!=A.mapa.end();++ni)
if((*mi).first==(*ni).first){ A.mapa[(*mi).first]=(*mi).second+(*ni).second; fnd=0; }
if(fnd) A.mapa[(*mi).first]=(*mi).second;
}
return A;
}
racun operator-(racun A,racun B){
map<string,int>::iterator mi,ni;
for(mi=B.mapa.begin();mi!=B.mapa.end();++mi)
for(ni=A.mapa.begin();ni!=A.mapa.end();++ni)
if((*mi).first==(*ni).first) A.mapa[(*mi).first]=(*ni).second-(*mi).second;
mi = A.mapa.begin();
while( mi != A.mapa.end() ) {
if( (*mi).second ⇐ 0 ) {
ni = mi; ni++;
A.mapa.erase( mi );
mi = ni;
}
else mi++;
}
return A;
}
ostream& operator<<(ostream& f,racun A){
set<string> HAHA;
map<string,int>::iterator ni;
set<string>::iterator hi;
for(ni=A.mapa.begin();ni!=A.mapa.end();++ni)
HAHA.insert((*ni).first);
for(hi=HAHA.begin();hi!=HAHA.end();++hi)
cout<<(*hi)<<" "<<A.mapa[*hi]<<endl;
}
int main(){
racun A("Votka",100);
racun B("Jack Daniels",200);
racun C("Jack Daniels", 300);
racun D("Breezer",150);
racun E("Campari",100);
D=D+E+A;
A=A+B;
A=A-C;
cout<<A;
cout<<endl;
cout<<D;
cout<<endl;
cout<<A+D;
system("pause");
return 0;
}
_________________ Devil's playground
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
Postano: 18:35 sri, 9. 6. 2010 Naslov: |
|
|
kad radiš sa pointerima u klasi ( dinamički alociranom memorijom ), trebaš također napravit kopy-konstruktor i operator=
Ne da mi se to baš sad objašnjavat, o tome imaš dosta na netu.
Nisam baš dobro pogledao, ali sve tvoje funkcije primaju referencu, pa kopy konstruktor čak i nije potreban, ali operator= ti treba jer ti inače niš ne bu radilo...
zašto: recimo da ti funkcije rade kako treba ( npr. operator+ )
i stavimo ovaj slučaj:
[code:1] tangenta = birc + tangenta;[/code:1]
po tvojem operatoru+ bit će vraćena referenca na birc ( jer vraća referencu na prvi element ). A tu si recimo izjednačio tangentu sa vraćenom referencom na birc.
Što će sada u sebi imati tangenta? listu pokazivača na piće. Ali koje pokazivače? Ti nisi napisao svoj operator= i kompajler će ti ga sam napravit... kako? tak da jednostavno prekopira sve elemente iz jedne strukture u drugu, u ovom slučaju konkretno će svi elementi iz racuna:
birc+tangenta
biti prekopirani u tangentu, jedan po jedan. A što se u biti kopira? Pointeri, tj. adrese jer su adrese vrijednosti pointera, pa ćeč imati klasu
tangenta sa listom pokazivača s vrjednostima istim kao i vrijednostima liste pokazivača klase birc. S obzirom da su te vrijednosti adrese tebi će i tangenta i birc pokazivati na iste stvari, tj. na ista pića i ako recimo želiš promijeniti u kasnijem kodu račun tangenta, mjenjat ćeš ga i kod birca
kad radiš sa pointerima u klasi ( dinamički alociranom memorijom ), trebaš također napravit kopy-konstruktor i operator=
Ne da mi se to baš sad objašnjavat, o tome imaš dosta na netu.
Nisam baš dobro pogledao, ali sve tvoje funkcije primaju referencu, pa kopy konstruktor čak i nije potreban, ali operator= ti treba jer ti inače niš ne bu radilo...
zašto: recimo da ti funkcije rade kako treba ( npr. operator+ )
i stavimo ovaj slučaj:
Kod: | tangenta = birc + tangenta; |
po tvojem operatoru+ bit će vraćena referenca na birc ( jer vraća referencu na prvi element ). A tu si recimo izjednačio tangentu sa vraćenom referencom na birc.
Što će sada u sebi imati tangenta? listu pokazivača na piće. Ali koje pokazivače? Ti nisi napisao svoj operator= i kompajler će ti ga sam napravit... kako? tak da jednostavno prekopira sve elemente iz jedne strukture u drugu, u ovom slučaju konkretno će svi elementi iz racuna:
birc+tangenta
biti prekopirani u tangentu, jedan po jedan. A što se u biti kopira? Pointeri, tj. adrese jer su adrese vrijednosti pointera, pa ćeč imati klasu
tangenta sa listom pokazivača s vrjednostima istim kao i vrijednostima liste pokazivača klase birc. S obzirom da su te vrijednosti adrese tebi će i tangenta i birc pokazivati na iste stvari, tj. na ista pića i ako recimo želiš promijeniti u kasnijem kodu račun tangenta, mjenjat ćeš ga i kod birca
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
Postano: 18:51 sri, 9. 6. 2010 Naslov: |
|
|
uf uf , fala ti....mislim da ću svakako pokušati izbjeći pointere u klasi
[quote="Cobs"]kad radiš sa pointerima u klasi ( dinamički alociranom memorijom ), trebaš također napravit kopy-konstruktor i operator=
Ne da mi se to baš sad objašnjavat, o tome imaš dosta na netu.
Nisam baš dobro pogledao, ali sve tvoje funkcije primaju referencu, pa kopy konstruktor čak i nije potreban, ali operator= ti treba jer ti inače niš ne bu radilo...
zašto: recimo da ti funkcije rade kako treba ( npr. operator+ )
i stavimo ovaj slučaj:
[code:1] tangenta = birc + tangenta;[/code:1]
po tvojem operatoru+ bit će vraćena referenca na birc ( jer vraća referencu na prvi element ). A tu si recimo izjednačio tangentu sa vraćenom referencom na birc.
Što će sada u sebi imati tangenta? listu pokazivača na piće. Ali koje pokazivače? Ti nisi napisao svoj operator= i kompajler će ti ga sam napravit... kako? tak da jednostavno prekopira sve elemente iz jedne strukture u drugu, u ovom slučaju konkretno će svi elementi iz racuna:
birc+tangenta
biti prekopirani u tangentu, jedan po jedan. A što se u biti kopira? Pointeri, tj. adrese jer su adrese vrijednosti pointera, pa ćeč imati klasu
tangenta sa listom pokazivača s vrjednostima istim kao i vrijednostima liste pokazivača klase birc. S obzirom da su te vrijednosti adrese tebi će i tangenta i birc pokazivati na iste stvari, tj. na ista pića i ako recimo želiš promijeniti u kasnijem kodu račun tangenta, mjenjat ćeš ga i kod birca[/quote]
uf uf , fala ti....mislim da ću svakako pokušati izbjeći pointere u klasi
Cobs (napisa): | kad radiš sa pointerima u klasi ( dinamički alociranom memorijom ), trebaš također napravit kopy-konstruktor i operator=
Ne da mi se to baš sad objašnjavat, o tome imaš dosta na netu.
Nisam baš dobro pogledao, ali sve tvoje funkcije primaju referencu, pa kopy konstruktor čak i nije potreban, ali operator= ti treba jer ti inače niš ne bu radilo...
zašto: recimo da ti funkcije rade kako treba ( npr. operator+ )
i stavimo ovaj slučaj:
Kod: | tangenta = birc + tangenta; |
po tvojem operatoru+ bit će vraćena referenca na birc ( jer vraća referencu na prvi element ). A tu si recimo izjednačio tangentu sa vraćenom referencom na birc.
Što će sada u sebi imati tangenta? listu pokazivača na piće. Ali koje pokazivače? Ti nisi napisao svoj operator= i kompajler će ti ga sam napravit... kako? tak da jednostavno prekopira sve elemente iz jedne strukture u drugu, u ovom slučaju konkretno će svi elementi iz racuna:
birc+tangenta
biti prekopirani u tangentu, jedan po jedan. A što se u biti kopira? Pointeri, tj. adrese jer su adrese vrijednosti pointera, pa ćeč imati klasu
tangenta sa listom pokazivača s vrjednostima istim kao i vrijednostima liste pokazivača klase birc. S obzirom da su te vrijednosti adrese tebi će i tangenta i birc pokazivati na iste stvari, tj. na ista pića i ako recimo želiš promijeniti u kasnijem kodu račun tangenta, mjenjat ćeš ga i kod birca |
_________________ NJIIIIHAAA
|
|
[Vrh] |
|
ddduuu Forumaš(ica)
Pridružen/a: 16. 11. 2008. (12:31:48) Postovi: (109)16
|
Postano: 21:16 sri, 9. 6. 2010 Naslov: |
|
|
Vezano za taj zadatak, jel neko moze pogledat sta mi ne radi...
vraca mi grasku za ovaj dio
for(mi=a.popis.begin();mi!=a.popis.end();++mi)
novi.popis[li->first]=li->second;
evo dio prog do tu
#include<iostream>
#include<map>
#include<vector>
using namespace std;
class racun
{
public: map<string,int> popis;
racun();
racun( string ime, int i=1 )
{
popis[ime]=i;
}
friend racun operator+ ( const racun &a, const racun &b);
friend ostream& operator<< (ostream &f, racun& r);
};
racun operator+ ( const racun &a, const racun &b)
{
map<string,int>::iterator mi,li;
racun novi;
for(mi=a.popis.begin();mi!=a.popis.end();++mi)
novi.popis[li->first]=li->second;
for( li=popis.begin(); li!=popis.end(); ++li)
novi.popis[li->first]=li->second;;
return a;
}
Vezano za taj zadatak, jel neko moze pogledat sta mi ne radi...
vraca mi grasku za ovaj dio
for(mi=a.popis.begin();mi!=a.popis.end();++mi)
novi.popis[li→first]=li→second;
evo dio prog do tu
#include<iostream>
#include<map>
#include<vector>
using namespace std;
class racun
{
public: map<string,int> popis;
racun();
racun( string ime, int i=1 )
{
popis[ime]=i;
}
friend racun operator+ ( const racun &a, const racun &b);
friend ostream& operator<< (ostream &f, racun& r);
};
racun operator+ ( const racun &a, const racun &b)
{
map<string,int>::iterator mi,li;
racun novi;
for(mi=a.popis.begin();mi!=a.popis.end();++mi)
novi.popis[li→first]=li→second;
for( li=popis.begin(); li!=popis.end(); ++li)
novi.popis[li→first]=li→second;;
return a;
}
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
|
[Vrh] |
|
ddduuu Forumaš(ica)
Pridružen/a: 16. 11. 2008. (12:31:48) Postovi: (109)16
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
|