Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

kolokvij
WWW:
Idite na Prethodno  1, 2
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Računarski praktikum 1
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
mono
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 16. 09. 2011. (13:04:01)
Postovi: (E)16
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 17:30 sri, 11. 4. 2012    Naslov: Citirajte i odgovorite

Pa možemo napraviti prvo strukturu artikl koja sadrži 4 podatka.To su ime,proizdvođač,stara i nova cijena.Nakon toga napravimoparametriziranu strukturu katalog koja se sastoji od niza artikala[100], početka i kraja(tu idu parametri za datum) i ostalih funkcija.
Pa možemo napraviti prvo strukturu artikl koja sadrži 4 podatka.To su ime,proizdvođač,stara i nova cijena.Nakon toga napravimoparametriziranu strukturu katalog koja se sastoji od niza artikala[100], početka i kraja(tu idu parametri za datum) i ostalih funkcija.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
jabuka
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 11. 2009. (15:53:14)
Postovi: (7C)16
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 13:09 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

1.zadatak 2009.
ne rade mi funkcije najpovoljniji i najsnizeniji pa ako netko vidi di je greska
https://docs.google.com/document/pub?id=1BvI48sn84-QUng2YJV-rACi8f4aw_MNOZ3rtAb45b5M

[code:1]
#include<string>
#include<iostream>

using namespace std;

struct artikl{
int cijena1;
int cijena2;
string proizvodac;
string ime;
};

template<class T> struct Katalog{
artikl artikli[100];
T pocetnidatum;
T zadnjidatum;
int mjesto;

Katalog();
Katalog(T datum1, T datum2);
int vrijedi_na(T d);
void dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena);
string najpovoljniji(string vrsta);
string najsnizeniji(void);
~Katalog(void);
};

template<class T>
Katalog<T>::Katalog(){
mjesto=-1;
}

template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
Katalog.pocetnidatum=datum1;
Katalog.zadnjidatum=datum2;
}

template<class T>
int Katalog<T>::vrijedi_na(T d){
if(Katalog.pocetnidatum<=d && d<=Katalog.zadnjidatum) return 1;
else return 0;
}

template<class T>
void Katalog<T>::dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena){
int i, postoji=0;
for(i=0; i<=mjesto; i++){
if(artikli[i].ime==ime && artikli[i].proizvodac==proizvodac){
artikli[i].cijena1=stara_cijena;
artikli[i].cijena2=nova_cijena;
postoji=1;
}
}
if(postoji==0){
++mjesto;
artikli[mjesto].ime=ime;
artikli[mjesto].proizvodac=proizvodac;
}
}

template<class T>
string Katalog<T>::najpovoljniji(string vrsta){
int i, br=0, najpovoljnije;
for(i=0; i<=mjesto; i++){
string S;
S=artikli[i].ime;
if(S.find(vrsta, 0)!= string::npos){
br++;
if(br==1) najpovoljnije=artikli[i].cijena2;
else if(artikli[i].cijena2<najpovoljnije) najpovoljnije=artikli[i].cijena2;
}
}
for(i=0; i<=mjesto; i++){
if(artikli[i].cijena2==najpovoljnije) return artikli[i].proizvodac;
}
}

template<class T>
string Katalog<T>::najsnizeniji(void){
int i, snizen, najsnizeni=0, br;
for(i=0; i<=mjesto; i++){
br++;
snizen=100-((artikli[i].cijena2/artikli[i].cijena1)*100);
if(br==1) najsnizeni=snizen;
if(snizen<najsnizeni) najsnizeni=snizen;
}
for(i=0; i<=mjesto; i++){
if(100-((artikli[i].cijena2/artikli[i].cijena1)*100)==najsnizeni) return artikli[i].ime;
}
}

template<class T>
Katalog<T>::~Katalog(void){
int i, ukupnausteda=0;
for(i=0; i<=mjesto; i++){
ukupnausteda=ukupnausteda+(artikli[i].cijena1-artikli[i].cijena2);
}
cout<<ukupnausteda<<endl;
}

int main(void){
Katalog<string> getro("2009-04-20","2009-04-28");

if(getro.vrijedi_na("2009-04-22"))cout<<"Vrijedi"<<endl;

getro.dodaj("cajna pasteta","PPK",4.69,4.29);

getro.dodaj("juneca pasteta","Pik Vrbovec",5.19,4.79);

getro.dodaj("cajna pasteta","PPK",4.69,4.11);

getro.dodaj("Kiki bomboni","Kras",10.25,9.99);

getro.dodaj("Vrhnje","Vita Milk",2.19,2.09);

cout<<getro.najpovoljniji("pasteta")<<'\t';

cout<<getro.najsnizeniji()<<endl;
return 0;
}




[/code:1]
1.zadatak 2009.
ne rade mi funkcije najpovoljniji i najsnizeniji pa ako netko vidi di je greska
https://docs.google.com/document/pub?id=1BvI48sn84-QUng2YJV-rACi8f4aw_MNOZ3rtAb45b5M

Kod:

#include<string>
#include<iostream>

using namespace std;

struct artikl{
   int cijena1;
   int cijena2;
   string proizvodac;
   string ime;
};

template<class T> struct Katalog{
   artikl artikli[100];
   T pocetnidatum;
   T zadnjidatum;
   int mjesto;

Katalog();
Katalog(T datum1, T datum2);
int vrijedi_na(T d);
void dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena);
string najpovoljniji(string vrsta);
string najsnizeniji(void);
~Katalog(void);
};

template<class T>
Katalog<T>::Katalog(){
   mjesto=-1;
}

template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
   Katalog.pocetnidatum=datum1;
   Katalog.zadnjidatum=datum2;
}

template<class T>
int Katalog<T>::vrijedi_na(T d){
   if(Katalog.pocetnidatum<=d && d<=Katalog.zadnjidatum) return 1;
   else return 0;
}

template<class T>
void Katalog<T>::dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena){
   int i, postoji=0;
   for(i=0; i<=mjesto; i++){
      if(artikli[i].ime==ime && artikli[i].proizvodac==proizvodac){
         artikli[i].cijena1=stara_cijena;
         artikli[i].cijena2=nova_cijena;
         postoji=1;
      }
   }
   if(postoji==0){
      ++mjesto;
      artikli[mjesto].ime=ime;
      artikli[mjesto].proizvodac=proizvodac;
   }
}

template<class T>
string Katalog<T>::najpovoljniji(string vrsta){
   int i, br=0, najpovoljnije;
   for(i=0; i<=mjesto; i++){
      string S;
      S=artikli[i].ime;
      if(S.find(vrsta, 0)!= string::npos){
         br++;
         if(br==1) najpovoljnije=artikli[i].cijena2;
         else if(artikli[i].cijena2<najpovoljnije) najpovoljnije=artikli[i].cijena2;
      }
   }
   for(i=0; i<=mjesto; i++){
      if(artikli[i].cijena2==najpovoljnije) return artikli[i].proizvodac;
   }            
}

template<class T>
string Katalog<T>::najsnizeniji(void){
   int i, snizen, najsnizeni=0, br;
   for(i=0; i<=mjesto; i++){
      br++;
      snizen=100-((artikli[i].cijena2/artikli[i].cijena1)*100);
      if(br==1) najsnizeni=snizen;
      if(snizen<najsnizeni) najsnizeni=snizen;
   }
   for(i=0; i<=mjesto; i++){
      if(100-((artikli[i].cijena2/artikli[i].cijena1)*100)==najsnizeni) return artikli[i].ime;
   }      
}

template<class T>
Katalog<T>::~Katalog(void){
   int i, ukupnausteda=0;
   for(i=0; i<=mjesto; i++){
      ukupnausteda=ukupnausteda+(artikli[i].cijena1-artikli[i].cijena2);
   }
   cout<<ukupnausteda<<endl;
}

int main(void){
   Katalog<string> getro("2009-04-20","2009-04-28");

    if(getro.vrijedi_na("2009-04-22"))cout<<"Vrijedi"<<endl;

    getro.dodaj("cajna pasteta","PPK",4.69,4.29);

    getro.dodaj("juneca pasteta","Pik Vrbovec",5.19,4.79);

    getro.dodaj("cajna pasteta","PPK",4.69,4.11);

    getro.dodaj("Kiki bomboni","Kras",10.25,9.99);

    getro.dodaj("Vrhnje","Vita Milk",2.19,2.09);

    cout<<getro.najpovoljniji("pasteta")<<'\t';

    cout<<getro.najsnizeniji()<<endl;
return 0;
}
   
   
 



[Vrh]
Korisnički profil Pošaljite privatnu poruku
ceps
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2010. (13:03:07)
Postovi: (13A)16
Sarma = la pohva - posuda
71 = 74 - 3

PostPostano: 13:51 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

[code:1]
template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
Katalog.pocetnidatum=datum1;
Katalog.zadnjidatum=datum2;
}

template<class T>
int Katalog<T>::vrijedi_na(T d){
if(Katalog.pocetnidatum<=d && d<=Katalog.zadnjidatum) return 1;
else return 0;
}
[/code:1]

Prva stvar, ovdje bi trebalo zamijeniti:

Katalog.pocetnidatum = datum1 sa pocetnidatum = datum1
Katalog.zadnjidatum = datum2 sa zadnjidatum = datum 2

i tako dalje...

Barem meni ovo ne želi kompajlirati zbog tih grešaka, ako si već ''unutar'' strukture Katalog, ne trebaš je još jedanput pozivati.

No i kad ispravim te greške i probam pokrenuti tvoj program, javlja mi [b]segmentation fault[/b]...
Jel tebi ovo sve OK radi?

(Koristim g++ na Ubuntuu, sve standardno).

EDIT:

[code:1]
template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
Katalog.pocetnidatum=datum1;
Katalog.zadnjidatum=datum2;
}
[/code:1]

U ovaj konstruktor bi trebala dodati [b]mjesto = -1[/b], kao što si dodala i u ''prazan'' konstruktor.
U mainu, kad stvoriš Katalog getro zajedno sa pripadajućim datumima, ne inicijaliziraš varijablu [b]mjesto[/b] na ništa. I naravno da se onda svašta dogodi kad metoda dodaj proba raditi sa tom varijablom [b]mjesto[/b].

EDIT EDITA:

I sada kad sam dodao taj mjesto = -1, javlja mi Floating point exception.
Uz malu pomoć debuggera uspio sam locirati gdje dolazi do toga, metoda najsnizenije, redak:

[code:1]
snizen=100-((artikli[i].cijena2/artikli[i].cijena1)*100);
[/code:1]

Floating point exception se javlja kada se obavljaju nedopuštene operacije pomoću dijeljenja s nulom, korjenovanja negativnog broja itd. itd.

Ne kužim zašto se to događa tu, a idem uzeti malu pauzu od gedita i Terminala, ali ako kasnije skužim, bit će EDIT EDITOVOG EDITA. :D
Kod:

template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
   Katalog.pocetnidatum=datum1;
   Katalog.zadnjidatum=datum2;
}

template<class T>
int Katalog<T>::vrijedi_na(T d){
   if(Katalog.pocetnidatum<=d && d<=Katalog.zadnjidatum) return 1;
   else return 0;
}


Prva stvar, ovdje bi trebalo zamijeniti:

Katalog.pocetnidatum = datum1 sa pocetnidatum = datum1
Katalog.zadnjidatum = datum2 sa zadnjidatum = datum 2

i tako dalje...

Barem meni ovo ne želi kompajlirati zbog tih grešaka, ako si već ''unutar'' strukture Katalog, ne trebaš je još jedanput pozivati.

No i kad ispravim te greške i probam pokrenuti tvoj program, javlja mi segmentation fault...
Jel tebi ovo sve OK radi?

(Koristim g++ na Ubuntuu, sve standardno).

EDIT:

Kod:

template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
   Katalog.pocetnidatum=datum1;
   Katalog.zadnjidatum=datum2;
}


U ovaj konstruktor bi trebala dodati mjesto = -1, kao što si dodala i u ''prazan'' konstruktor.
U mainu, kad stvoriš Katalog getro zajedno sa pripadajućim datumima, ne inicijaliziraš varijablu mjesto na ništa. I naravno da se onda svašta dogodi kad metoda dodaj proba raditi sa tom varijablom mjesto.

EDIT EDITA:

I sada kad sam dodao taj mjesto = -1, javlja mi Floating point exception.
Uz malu pomoć debuggera uspio sam locirati gdje dolazi do toga, metoda najsnizenije, redak:

Kod:

snizen=100-((artikli[i].cijena2/artikli[i].cijena1)*100);


Floating point exception se javlja kada se obavljaju nedopuštene operacije pomoću dijeljenja s nulom, korjenovanja negativnog broja itd. itd.

Ne kužim zašto se to događa tu, a idem uzeti malu pauzu od gedita i Terminala, ali ako kasnije skužim, bit će EDIT EDITOVOG EDITA. Very Happy




Zadnja promjena: ceps; 14:48 čet, 12. 4. 2012; ukupno mijenjano 2 put/a.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
jabuka
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 11. 2009. (15:53:14)
Postovi: (7C)16
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 14:44 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

joj ispricavam se..imam dva koda od zadatka, a ovo je onaj prije ispravljanja gresaka :/
idem probat promijenit to mjesto i ovo drugo pa javim ak ne radi jos uvijek
joj ispricavam se..imam dva koda od zadatka, a ovo je onaj prije ispravljanja gresaka Ehm?
idem probat promijenit to mjesto i ovo drugo pa javim ak ne radi jos uvijek


[Vrh]
Korisnički profil Pošaljite privatnu poruku
ceps
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2010. (13:03:07)
Postovi: (13A)16
Sarma = la pohva - posuda
71 = 74 - 3

PostPostano: 14:49 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

U metodi dodaj, novom elementu šalješ samo proizvođač i ime, a ne i cijene.

[code:1]
if(postoji==0){
++mjesto;
artikli[mjesto].ime=ime;
artikli[mjesto].proizvodac=proizvodac;
}
[/code:1]

I onda kad probaš dijeliti sa nepostojećim cijenama, dogodi se Floating point exception.

Kad staviš ovako:

[code:1]
if(postoji==0){
++mjesto;
artikli[mjesto].ime=ime;
artikli[mjesto].proizvodac=proizvodac;
artikli[mjesto].cijena1 = stara_cijena;
artikli[mjesto].cijena2 = nova_cijena;
}
[/code:1]

će biti OK.
U metodi dodaj, novom elementu šalješ samo proizvođač i ime, a ne i cijene.

Kod:

if(postoji==0){
      ++mjesto;
      artikli[mjesto].ime=ime;
      artikli[mjesto].proizvodac=proizvodac;
   }


I onda kad probaš dijeliti sa nepostojećim cijenama, dogodi se Floating point exception.

Kad staviš ovako:

Kod:

if(postoji==0){
      ++mjesto;
      artikli[mjesto].ime=ime;
      artikli[mjesto].proizvodac=proizvodac;
      artikli[mjesto].cijena1 = stara_cijena;
      artikli[mjesto].cijena2 = nova_cijena;
   }


će biti OK.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
jabuka
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 11. 2009. (15:53:14)
Postovi: (7C)16
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 14:51 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

dakle ovo je taj "dotjerani" kod :D
kompajlira se, ali u najpovoljniji je segmentation fault i najsnizeniji ne vrati nista
i nisam to mjesto mijenjala

[code:1]
#include<string>
#include<iostream>

using namespace std;

struct artikl{
double cijena1;
double cijena2;
string proizvodac;
string ime;
};

template<class T> struct Katalog{
artikl artikli[100];
T pocetnidatum;
T zadnjidatum;
int mjesto;

Katalog();
Katalog(T datum1, T datum2);
int vrijedi_na(T d);
void dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena);
string najpovoljniji(string vrsta);
string najsnizeniji(void);
~Katalog(void);
};

template<class T>
Katalog<T>::Katalog(){
mjesto=-1;
}

template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
Katalog::pocetnidatum=datum1;
Katalog::zadnjidatum=datum2;
}

template<class T>
int Katalog<T>::vrijedi_na(T d){
if(Katalog<T>::pocetnidatum<=d && d<=Katalog::zadnjidatum) return 1;
else return 0;
}

template<class T>
void Katalog<T>::dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena){
int i, postoji=0;
for(i=0; i<=mjesto; i++){
if(artikli[i].ime==ime && artikli[i].proizvodac==proizvodac){
artikli[i].cijena1=stara_cijena;
artikli[i].cijena2=nova_cijena;
postoji=1;
}
}
if(postoji==0){
++mjesto;
artikli[mjesto].ime=ime;
artikli[mjesto].proizvodac=proizvodac;
artikli[mjesto].cijena1=stara_cijena;
artikli[mjesto].cijena2=nova_cijena;
}
}

template<class T>
string Katalog<T>::najpovoljniji(string vrsta){
int i, br=0;
double najpovoljnije;
string a;
for(i=0; i<=mjesto; i++){
string S;
S=artikli[i].ime;
if(S.find(vrsta, 0) != string::npos){
br++;
if(br==1) najpovoljnije=artikli[i].cijena2;
else if(artikli[i].cijena2<najpovoljnije) najpovoljnije=artikli[i].cijena2;
}
}
for(i=0; i<=mjesto; i++){
if(artikli[i].cijena2==najpovoljnije){
a=artikli[i].proizvodac;
}}
return a;
}

template<class T>
string Katalog<T>::najsnizeniji(void){
int i, br=0;
double snizen, najsnizeni=0;
string a;
for(i=0; i<=mjesto; i++){
br++;
snizen=100-((artikli[i].cijena2/artikli[i].cijena1)*100);
if(br==1) najsnizeni=snizen;
if(snizen>najsnizeni) najsnizeni=snizen;
}
for(i=0; i<=mjesto; i++){
if(100-((artikli[i].cijena2/artikli[i].cijena1)*100)==najsnizeni) {a=artikli[i].ime;}
}
return a;
}

template<class T>
Katalog<T>::~Katalog(void){
int i;
double ukupnausteda=0;
for(i=0; i<=mjesto; i++){
ukupnausteda=ukupnausteda+(artikli[i].cijena1-artikli[i].cijena2);
}
cout<<ukupnausteda<<endl;
}

int main(void){
Katalog<string> getro("2009-04-20","2009-04-28");

if(getro.vrijedi_na("2009-04-22"))cout<<"Vrijedi"<<endl;

getro.dodaj("cajna pasteta","PPK",4.69,4.29);

getro.dodaj("juneca pasteta","Pik Vrbovec",5.19,4.79);

getro.dodaj("cajna pasteta","PPK",4.69,4.11);

getro.dodaj("Kiki bomboni","Kras",10.25,9.99);

getro.dodaj("Vrhnje","Vita Milk",2.19,2.09);

cout<<getro.najpovoljniji("pasteta")<<'\t';

cout<<getro.najsnizeniji()<<endl;
return 0;
}
[/code:1]
dakle ovo je taj "dotjerani" kod Very Happy
kompajlira se, ali u najpovoljniji je segmentation fault i najsnizeniji ne vrati nista
i nisam to mjesto mijenjala

Kod:

#include<string>
#include<iostream>

using namespace std;

struct artikl{
   double cijena1;
   double cijena2;
   string proizvodac;
   string ime;
};

template<class T> struct Katalog{
   artikl artikli[100];
   T pocetnidatum;
   T zadnjidatum;
   int mjesto;

Katalog();
Katalog(T datum1, T datum2);
int vrijedi_na(T d);
void dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena);
string najpovoljniji(string vrsta);
string najsnizeniji(void);
~Katalog(void);
};

template<class T>
Katalog<T>::Katalog(){
   mjesto=-1;
}

template<class T>
Katalog<T>::Katalog(T datum1, T datum2){
   Katalog::pocetnidatum=datum1;
   Katalog::zadnjidatum=datum2;
}

template<class T>
int Katalog<T>::vrijedi_na(T d){
   if(Katalog<T>::pocetnidatum<=d && d<=Katalog::zadnjidatum) return 1;
   else return 0;
}

template<class T>
void Katalog<T>::dodaj(string ime, string proizvodac, double stara_cijena, double nova_cijena){
   int i, postoji=0;
   for(i=0; i<=mjesto; i++){
      if(artikli[i].ime==ime && artikli[i].proizvodac==proizvodac){
         artikli[i].cijena1=stara_cijena;
         artikli[i].cijena2=nova_cijena;
         postoji=1;
      }
   }
   if(postoji==0){
      ++mjesto;
      artikli[mjesto].ime=ime;
      artikli[mjesto].proizvodac=proizvodac;
      artikli[mjesto].cijena1=stara_cijena;
      artikli[mjesto].cijena2=nova_cijena;
   }
}

template<class T>
string Katalog<T>::najpovoljniji(string vrsta){
   int i, br=0;
   double najpovoljnije;
   string a;
   for(i=0; i<=mjesto; i++){
      string S;
      S=artikli[i].ime;
      if(S.find(vrsta, 0) != string::npos){
         br++;
         if(br==1) najpovoljnije=artikli[i].cijena2;
         else if(artikli[i].cijena2<najpovoljnije) najpovoljnije=artikli[i].cijena2;
      }
   }
   for(i=0; i<=mjesto; i++){
      if(artikli[i].cijena2==najpovoljnije){
      a=artikli[i].proizvodac;
   }}
   return a;            
}

template<class T>
string Katalog<T>::najsnizeniji(void){
   int i, br=0;
   double snizen, najsnizeni=0;
   string a;
   for(i=0; i<=mjesto; i++){
      br++;
      snizen=100-((artikli[i].cijena2/artikli[i].cijena1)*100);
      if(br==1) najsnizeni=snizen;
      if(snizen>najsnizeni) najsnizeni=snizen;
   }
   for(i=0; i<=mjesto; i++){
      if(100-((artikli[i].cijena2/artikli[i].cijena1)*100)==najsnizeni) {a=artikli[i].ime;}
   }   
   return a;   
}

template<class T>
Katalog<T>::~Katalog(void){
   int i;
   double ukupnausteda=0;
   for(i=0; i<=mjesto; i++){
      ukupnausteda=ukupnausteda+(artikli[i].cijena1-artikli[i].cijena2);
   }
   cout<<ukupnausteda<<endl;
}

int main(void){
   Katalog<string> getro("2009-04-20","2009-04-28");

    if(getro.vrijedi_na("2009-04-22"))cout<<"Vrijedi"<<endl;

    getro.dodaj("cajna pasteta","PPK",4.69,4.29);

    getro.dodaj("juneca pasteta","Pik Vrbovec",5.19,4.79);

    getro.dodaj("cajna pasteta","PPK",4.69,4.11);

    getro.dodaj("Kiki bomboni","Kras",10.25,9.99);

    getro.dodaj("Vrhnje","Vita Milk",2.19,2.09);

    cout<<getro.najpovoljniji("pasteta")<<'\t';

    cout<<getro.najsnizeniji()<<endl;
return 0;
}


[Vrh]
Korisnički profil Pošaljite privatnu poruku
ceps
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2010. (13:03:07)
Postovi: (13A)16
Sarma = la pohva - posuda
71 = 74 - 3

PostPostano: 14:52 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

Ma evo napisao sam ti iznad u čemu je problem, kad se to popravi sve u redu radi...
Znači:

1. dodaj mjesto = -1 u konstruktor.
2. kad dodaješ novi element pošalji sve parametre, ne samo proizvođač i ime (zaboravila si cijene!)

i trebalo bi biti OK.
Ma evo napisao sam ti iznad u čemu je problem, kad se to popravi sve u redu radi...
Znači:

1. dodaj mjesto = -1 u konstruktor.
2. kad dodaješ novi element pošalji sve parametre, ne samo proizvođač i ime (zaboravila si cijene!)

i trebalo bi biti OK.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
jabuka
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 11. 2009. (15:53:14)
Postovi: (7C)16
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 15:00 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

na kraju je u ovom novom kodu trebalo samo to mjesto promijenit, a kolko sam se izivcirala zbog njega -.-
hvala puno :)
na kraju je u ovom novom kodu trebalo samo to mjesto promijenit, a kolko sam se izivcirala zbog njega -.-
hvala puno Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
ceps
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 10. 2010. (13:03:07)
Postovi: (13A)16
Sarma = la pohva - posuda
71 = 74 - 3

PostPostano: 15:44 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

Savjet za smanjenje živciranja za ubuduće:

Problem je bio u samim ''temeljima'' tvoje strukture - konstruktoru (i fji dodaj u onoj prvoj verziji), no ti si u svom prvom postu rekla da je problem u kompliciranijim funkcijama najpovoljniji i najsniženiji.
To si mislila zato jer se greška ''provukla'' i do tih funkcija, jer te funkcije ne mogu ništa raditi ako se prije ne iskoristi ''dodaj'' par puta.

Savjet je da nakon pisanja svake funkcije u mainu isprobaš tu funkciju na par jednostavnih primjera. Uvijek je zgodno napraviti neku funkciju koja radi ispis, čak iako te zadatak to ne traži (par linija koda).
Da si na taj način odmah isprobala konstruktor, znala bi da je problem negdje u njemu, a onda bi imala PUUUUNO manje koda za analizirati.

I jedan malo napredniji savjet: zgodno je upoznati osnove gdb-a, debuggera koji je već ugrađen u kompajler koji koristiš. Također smanjuje živciranje. :D
Savjet za smanjenje živciranja za ubuduće:

Problem je bio u samim ''temeljima'' tvoje strukture - konstruktoru (i fji dodaj u onoj prvoj verziji), no ti si u svom prvom postu rekla da je problem u kompliciranijim funkcijama najpovoljniji i najsniženiji.
To si mislila zato jer se greška ''provukla'' i do tih funkcija, jer te funkcije ne mogu ništa raditi ako se prije ne iskoristi ''dodaj'' par puta.

Savjet je da nakon pisanja svake funkcije u mainu isprobaš tu funkciju na par jednostavnih primjera. Uvijek je zgodno napraviti neku funkciju koja radi ispis, čak iako te zadatak to ne traži (par linija koda).
Da si na taj način odmah isprobala konstruktor, znala bi da je problem negdje u njemu, a onda bi imala PUUUUNO manje koda za analizirati.

I jedan malo napredniji savjet: zgodno je upoznati osnove gdb-a, debuggera koji je već ugrađen u kompajler koji koristiš. Također smanjuje živciranje. Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku
kosani
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2010. (21:22:58)
Postovi: (26)16
Sarma = la pohva - posuda
= 9 - 7

PostPostano: 20:36 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

Nisam siguran zašto mi ova 2 koda ne rade?

[code:1]#include <iostream>
#include <string>
#include <set>

using namespace std;

class Jedinka
{
public:
string ImeJedinke;
Jedinka(string ime="")
{
ImeJedinke=ime;
}
char& operator[](int indeks)
{
for(int i=ImeJedinke.size(); i<indeks ;++i) ImeJedinke.push_back('a');
char &Znak = ImeJedinke[indeks];
return Znak;
}
//EDIT:
bool operator<(const Jedinka J)
{
if(ImeJedinke<J.ImeJedinke)return 1;
else return 0;
}
// \EDIT
};

class Populacija
{
public:
set<Jedinka> skupina;
Populacija(){}

void operator<<(const Jedinka& J)
{
skupina.insert(J);
return;
}

void operator>>(const Jedinka& J)
{
skupina.erase(J);
return;
}
};

ostream& operator<<(ostream& f, const Populacija& P)
{
set<Jedinka>::iterator it;
for(it=P.skupina.begin(); it!=P.skupina.end() ;++it)
f << it->ImeJedinke << " ";
return f;
}

int main ()
{
Jedinka mrav("ana");
cout << mrav[4];
mrav[5]='d';
cout << mrav[5];
}
[/code:1]

Tu me zeza za funkcije << i >>.
TEKST GREŠKE: predug.. vezan je za STL Set..

Onda, u ovom drugom sam se htio zabaviti radom 'set'-a koji je određen operatorom < kao što je rečeno na vježbama da je potrebno definirati opreator manje da bi skup imao uređaj.

Kod mi izgleda ovako:

[code:1]

#include <iostream>
#include <string>
#include <set>

using namespace std;



class Osoba
{
public:
double MasaOsobe;
string ImeOsobe;
int ZeljeniKat;

Osoba(string ime, double masa)
{
ImeOsobe=ime;
MasaOsobe=masa;
ZeljeniKat=0;
static set<Osoba*> SvaImena;
SvaImena.insert(this);
}

bool operator<(Osoba DesnaOsoba)
{
if(ImeOsobe<DesnaOsoba.ImeOsobe) return 1;
else return 0;
}
void ispis()
{
set<Osoba*>::iterator it;
for(it=SvaImena.begin(); it!=SvaImena.end() ;++it)
cout << (*it)->ImeOsobe << endl;
}


};



int main()
{
Osoba A("Kosani",82);
A.ispis();
}
[/code:1]

TEKST GREŠKE: 'SvaImena' was not declared in this scope


Deklarirao sam set kao static da mi sve sprema u isti. Proba sam tu static varijablu stavit i prije i poslije i izvan konstruktora i unutar te sam se na kraju odlučio za unutar pošto mi prijavljuje najkonkretniju grešku :)

Pomoć?

EDIT: Dio pomoći sam dobio.

Greška u drugom je bila što sam static set morao maknuti staviti iznad konstruktora a ne u njega. Nakon toga sam ga trebao dodati i ovu liniju koda nakon klase: set <Osoba*> Osoba::SvaImena;

Hvala Rimidalvu i njegovom prijatelju ;)

U prvom je jedna od greška isto ono što sam naveo u postu koju sam sam naveo u istom postu: Za set moram imati definiran operator <.

[b]I nakon napisanog operatora < i dalje mi izbacuje istu grešku..[/b]
Nisam siguran zašto mi ova 2 koda ne rade?

Kod:
#include <iostream>
#include <string>
#include <set>

using namespace std;

class Jedinka
{
        public:
        string ImeJedinke;
        Jedinka(string ime="")
        {
            ImeJedinke=ime;
        }
        char& operator[](int indeks)
        {
            for(int i=ImeJedinke.size(); i<indeks ;++i) ImeJedinke.push_back('a');
            char &Znak = ImeJedinke[indeks];
            return Znak;
        }
        //EDIT:
        bool operator<(const Jedinka J)
        {
            if(ImeJedinke<J.ImeJedinke)return 1;
            else return 0;
        }
        // \EDIT
};

class Populacija
{
    public:
    set<Jedinka> skupina;
    Populacija(){}

    void operator<<(const Jedinka& J)
    {
        skupina.insert(J);
        return;
    }

    void operator>>(const Jedinka& J)
    {
        skupina.erase(J);
        return;
    }
};

ostream& operator<<(ostream& f, const Populacija& P)
{
    set<Jedinka>::iterator it;
    for(it=P.skupina.begin(); it!=P.skupina.end() ;++it)
        f << it->ImeJedinke << " ";
    return f;
}

int main ()
{
    Jedinka mrav("ana");
    cout <<  mrav[4];
    mrav[5]='d';
    cout <<  mrav[5];
}


Tu me zeza za funkcije << i >>.
TEKST GREŠKE: predug.. vezan je za STL Set..

Onda, u ovom drugom sam se htio zabaviti radom 'set'-a koji je određen operatorom < kao što je rečeno na vježbama da je potrebno definirati opreator manje da bi skup imao uređaj.

Kod mi izgleda ovako:

Kod:


#include <iostream>
#include <string>
#include <set>

using namespace std;



class Osoba
{
    public:
        double MasaOsobe;
        string ImeOsobe;
        int ZeljeniKat;

        Osoba(string ime, double masa)
        {
            ImeOsobe=ime;
            MasaOsobe=masa;
            ZeljeniKat=0;
            static set<Osoba*> SvaImena;
            SvaImena.insert(this);
        }

        bool operator<(Osoba DesnaOsoba)
        {
            if(ImeOsobe<DesnaOsoba.ImeOsobe) return 1;
            else return 0;
        }
        void ispis()
        {
            set<Osoba*>::iterator it;
            for(it=SvaImena.begin(); it!=SvaImena.end() ;++it)
                cout << (*it)->ImeOsobe << endl;
        }


};



int main()
{
    Osoba A("Kosani",82);
    A.ispis();
}


TEKST GREŠKE: 'SvaImena' was not declared in this scope


Deklarirao sam set kao static da mi sve sprema u isti. Proba sam tu static varijablu stavit i prije i poslije i izvan konstruktora i unutar te sam se na kraju odlučio za unutar pošto mi prijavljuje najkonkretniju grešku Smile

Pomoć?

EDIT: Dio pomoći sam dobio.

Greška u drugom je bila što sam static set morao maknuti staviti iznad konstruktora a ne u njega. Nakon toga sam ga trebao dodati i ovu liniju koda nakon klase: set <Osoba*> Osoba::SvaImena;

Hvala Rimidalvu i njegovom prijatelju Wink

U prvom je jedna od greška isto ono što sam naveo u postu koju sam sam naveo u istom postu: Za set moram imati definiran operator <.

I nakon napisanog operatora < i dalje mi izbacuje istu grešku..


[Vrh]
Korisnički profil Pošaljite privatnu poruku
rurushu
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 29. 03. 2011. (18:33:06)
Postovi: (8)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 22:01 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

Meni radi ako stavim

[code:1]set<Jedinka *> skupina; [/code:1]

umjesto

[code:1]set<Jedinka> skupina;[/code:1]

Naravno, treba jos izmijeniti neke stvari kod operatora >> i << i kod iteratora.

Ne znam tocno zasto ovo radi, pa bi bilo lijepo ako netko moze objasniti :)
Meni radi ako stavim

Kod:
set<Jedinka *> skupina;


umjesto

Kod:
set<Jedinka> skupina;


Naravno, treba jos izmijeniti neke stvari kod operatora >> i << i kod iteratora.

Ne znam tocno zasto ovo radi, pa bi bilo lijepo ako netko moze objasniti Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
kosani
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2010. (21:22:58)
Postovi: (26)16
Sarma = la pohva - posuda
= 9 - 7

PostPostano: 22:25 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

Satja mi je dao ogovor.

Sve radi ako je operator dvočlanski.

Izvan članske funkcije radi ovako:

[code:1]
bool operator<(const Jedinka J1, const Jedinka J2)
{
if(J1.ImeJedinke<J2.ImeJedinke)return 1;
else return 0;
}[/code:1]

a unutar člnaske mora biti friend;

[code:1]
friend bool operator<(const Jedinka J1, const Jedinka J2)
{
if(J1.ImeJedinke<J2.ImeJedinke)return 1;
else return 0;
}[/code:1]
Satja mi je dao ogovor.

Sve radi ako je operator dvočlanski.

Izvan članske funkcije radi ovako:

Kod:

bool operator<(const Jedinka J1, const Jedinka J2)
        {
            if(J1.ImeJedinke<J2.ImeJedinke)return 1;
            else return 0;
        }


a unutar člnaske mora biti friend;

Kod:

friend bool operator<(const Jedinka J1, const Jedinka J2)
        {
            if(J1.ImeJedinke<J2.ImeJedinke)return 1;
            else return 0;
        }


[Vrh]
Korisnički profil Pošaljite privatnu poruku
rurushu
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 29. 03. 2011. (18:33:06)
Postovi: (8)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 22:39 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

Aha, sad je jasno zasto ovo s pointerima radi. Operator < za pointere vec postoji pa ovaj u programu ni ne treba. :oops:
Aha, sad je jasno zasto ovo s pointerima radi. Operator < za pointere vec postoji pa ovaj u programu ni ne treba. Embarassed


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Računarski praktikum 1 Vremenska zona: GMT + 01:00.
Idite na Prethodno  1, 2
Stranica 2 / 2.

 
Forum(o)Bir:  
Možete otvarati nove teme.
Možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You can attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan