Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
mono Forumaš(ica)

Pridružen/a: 16. 09. 2011. (13:04:01) Postovi: (E)16
|
|
[Vrh] |
|
jabuka Forumaš(ica)

Pridružen/a: 21. 11. 2009. (15:53:14) Postovi: (7C)16
|
Postano: 13:09 čet, 12. 4. 2012 Naslov: |
|
|
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] |
|
ceps Forumaš(ica)

Pridružen/a: 08. 10. 2010. (13:03:07) Postovi: (13A)16
|
Postano: 13:51 čet, 12. 4. 2012 Naslov: |
|
|
[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.
Zadnja promjena: ceps; 14:48 čet, 12. 4. 2012; ukupno mijenjano 2 put/a.
|
|
[Vrh] |
|
jabuka Forumaš(ica)

Pridružen/a: 21. 11. 2009. (15:53:14) Postovi: (7C)16
|
|
[Vrh] |
|
ceps Forumaš(ica)

Pridružen/a: 08. 10. 2010. (13:03:07) Postovi: (13A)16
|
|
[Vrh] |
|
jabuka Forumaš(ica)

Pridružen/a: 21. 11. 2009. (15:53:14) Postovi: (7C)16
|
Postano: 14:51 čet, 12. 4. 2012 Naslov: |
|
|
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
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] |
|
ceps Forumaš(ica)

Pridružen/a: 08. 10. 2010. (13:03:07) Postovi: (13A)16
|
|
[Vrh] |
|
jabuka Forumaš(ica)

Pridružen/a: 21. 11. 2009. (15:53:14) Postovi: (7C)16
|
|
[Vrh] |
|
ceps Forumaš(ica)

Pridružen/a: 08. 10. 2010. (13:03:07) Postovi: (13A)16
|
Postano: 15:44 čet, 12. 4. 2012 Naslov: |
|
|
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.
|
|
[Vrh] |
|
kosani Forumaš(ica)

Pridružen/a: 14. 11. 2010. (21:22:58) Postovi: (26)16
|
|
[Vrh] |
|
rurushu Forumaš(ica)

Pridružen/a: 29. 03. 2011. (18:33:06) Postovi: (8)16
|
|
[Vrh] |
|
kosani Forumaš(ica)

Pridružen/a: 14. 11. 2010. (21:22:58) Postovi: (26)16
|
|
[Vrh] |
|
rurushu Forumaš(ica)

Pridružen/a: 29. 03. 2011. (18:33:06) Postovi: (8)16
|
|
[Vrh] |
|
|