Pomoć u programiranju (ispravljanje koda)

poruka: 43
|
čitano: 6.974
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
protjeran
offline
Ispravljanje grešaka u C++

Novi sam u C++ i općenito programiranju i treba mi pomoć u ispravljanju koda. Neću vas tražiti da mi napišete cijeli program, nego da ispravite grešku u mom programu.

Također pozivam ostale ako imaju nekih problema sa koje ne uspijevaju sami naći da ih stave ovdje. Nadam se da će se naći par dobrih programerskih duša da nam pomognu. :)

 

Evo ga moj prvi 'program', kada pritisnem F9, izbaci mi par grešaka. Nadam se da se nećete ljutiti ako 'sporo napredujem jer ovo radim u slobodno vrijeme i imam dosta školskih obaveza.

 

#include <iostream>

#include <ctime>

#include <cstdlib>

 

using namespace std;

 

int main()

{

int odgovor;

int slucajni_br;

int brojcanik = 0;

srand(time(NULL));

rand();

slucajni_br = (static_cast <float> (rand()) /RAND_MAX) *100;

cout << "Zamislio sam broj od 0 do 100." << endl;

cout << "Pogodite koji je to broj" << endl;

do

{

cout << "Unesite odgovor." << endl;

cin >> odgovor;

brojcanik = brojcanik + 1;

if (slucajni_br > odgovor)

{

cout << "Zamislio sam veči broj" << endl;

}

if (slucaji_br < odgovor)

{

cout << "Zamislio sam manji broj" << endl;

}

}

while(odgovor != slucajni broj)

cout << "Pogodili ste" << brojcanik << ".put." << endl;

system ("PAUSE");

return 0;

}

 
0 0 hvala 0
17 godina
offline
Pomoć u programiranju (ispravljanje koda)

Program si dobro napravio, osim par grešaka u nazivu varijable slucajni_br, druga greška je da iza zagrade uvjeta petlje while nisi stavio ";" (semicolon),

i mogao si funkciju rand napisati u obliku rand() % 100 + 1; (sada generira slučajne brojeve u rasponu 1-100.

 

 

 

#include <iostream>

#include <ctime>

#include <cstdlib>

 

using namespace std;

 

int main()

{

int odgovor;

int slucajni_br;

int brojcanik = 0;

srand(time(NULL));

slucajni_br =  rand() % 100 + 1;

cout << "Zamislio sam broj od 1 do 100." << endl;

cout << "Pogodite koji je to broj" << endl;

do

{

cout << "Unesite odgovor." << endl;

cin >> odgovor;

brojcanik = brojcanik + 1;

if (slucajni_br > odgovor)

{

cout << "Zamislio sam veči broj" << endl;

}

if (slucajni_br < odgovor)

{

cout << "Zamislio sam manji broj" << endl;

}

}

while(odgovor != slucajni_br);

cout << "Pogodili ste" << brojcanik << ".put." << endl;

system ("PAUSE");

return 0;

}

 

Marker označava gdje si krivo napisao varijablu

Da izbjegneš ovakve greške kod pisanja imena varijabli koristi Camel casting način pisanja naziva varijabli.

Prvo slovo varijable stavi malo, a ako se varijabla sastoji od više riječi onda pišeš velikim slovom prvo slovo sljedeće riječi.

Dakle umjesto slucajni_br napiši slucajniBroj (staviš puni naziv da znaš o čemu se radi)

Još sam ti izbacio onaj cast na float random brojeva, to nije potrebno, funkcija rand kao povratnu vrijednost ima slučajne integer brojeve, a to baš trebaš. 

Poruka je uređivana zadnji put sri 19.1.2011 15:14 (Floki).
 
0 0 hvala 1
17 godina
neaktivan
offline
Pomoć u programiranju (ispravljanje koda)

Imaš rand() viška poslije srand.

 
0 0 hvala 1
17 godina
offline
RE: Pomoć u programiranju (ispravljanje koda)
Tom69 kaže...

Imaš rand() viška poslije srand.

Da, i to treba izbaciti

 

Poruka je uređivana zadnji put sri 19.1.2011 12:43 (Floki).
16 godina
neaktivan
offline
RE: Pomoć u programiranju (ispravljanje koda)

Takav program sam ja radio za Mreže računala :D

Ako te zanima kako napravit da Server zamisli neki broj, igrači izvana se spoje na server i igraju igru pogađanja, reci :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
protjeran
offline
Pomoć u programiranju (ispravljanje koda)

Krenuo sam učiti polja...

 
1 0 hvala 0
14 godina
protjeran
offline
Pomoć u programiranju (ispravljanje koda)

Imam s ovim problema, spremanje mi ide u beskonacnost.

Hvala!

 

 

#include <iostream>

#include <cstdlib>

#include <fstream>

 

using namespace std;

 

int main()

{

int x;

int polje[8];

ofstream izlaz("radni.txt");

cout << "Spremanje brojeva:" << endl;

for (x=0;x<8;x+=1)

{

cin >> polje[x];

}

for (x=0;x<8;x=+1)

{

izlaz << polje[x];

cout << " ";

}

cout << "Spremanje je gotovo:" << endl;

cout << endl;

system("pause");

return 0;

}

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

U drugoj petlji imaš x=+1 umjesto x+=1. Btw to se lakše zapiše x++ ili ++x :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
17 godina
offline
Re: Pomoć u programiranju (ispravljanje koda)
Luuka kaže...

U drugoj petlji imaš x=+1 umjesto x+=1. Btw to se lakše zapiše x++ ili ++x :D

x++ i ++x nije isto!

16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)
Zlatni kaže...
Luuka kaže...

U drugoj petlji imaš x=+1 umjesto x+=1. Btw to se lakše zapiše x++ ili ++x :D

x++ i ++x nije isto!

Nije isto, ali u ovom slučaju radi istu stvar (ako zanemarimo privremenu varijablu koja se konstruira pa uništava u x++ varijanti)

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Pomoć u programiranju (ispravljanje koda)

Bok,

zamolio bih vas za pomoć oko jednog programa. Radi se o listama. Zadatak je, među ostalim, iz podataka koji se ucitaju iz datoteke(struktura proizvod sa clanovima: naziv, vrsta i cijena) po parametru vrsta izdvojiti sve clanove iz pocetne liste u nove liste. Dakle, ako imamo 3 vrste proizvoda(npr. vrsta prehrambeni, kućanski aparati i rasvjeta) napraviti tri nove liste, svaku za pojedinu vrstu proizvoda, te ih sve ispisati na izlaz po novonastalim kategorijama. Sortiranje i ucitavanje mi nije bio problem al' tu sam zapeo. Kod ne prilazem jer mi ne pada na pamet nekakvo rjesenje za ovaj problem, google ne pomaze.  Eto, ako netko zna bio bih zahvalan da pomogne u vidu pseudo-koda ili savjeta naravno:). 

Hvala

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Što ti je točno zapelo? Učitavanje iz datoteke, izdvajanje nekih proizvoda, spremanje u novu listu?

 

U ovom zadatku vjerojatno se pretpostavlja da ćeš raditi sa tipom podatka list, i njegovim funkcijama. To su između ostalih size, push_back i slične. Ono što trebaš je najprije učitati podatke, spremiti ih u strukturu koja će biti element liste, i zatim tu strukturu ubaciti u listu (sa push_back recimo). Nakon učitavanja napraviti novu listu i to tako da sa petljom prođeš po prvoj listi i izdvojiš samo one koje zadovoljavaju neko svojstvo. Tu će ti trebati if, i naravno push_back za ubacivanje u listu. Također imaj na umu da se po listi ne krećeš sa int i, nego da ti treba iterator.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Pomoć u programiranju (ispravljanje koda)

Zaboravio sam napomenuti da je program pisan u c-u.  Funkcije za ucitavanje, sortiranje i ispis liste sam napravio. Problem je sad iz te gotove liste izdvojit sve one elemente koji spadaju pod istu "vrstu proizvoda"(kako strukutura kaze). Ta pocetna lista se ne dira nego trebam napraviti onoliko novih listi koliko imam razlicitih vrsta proizvoda.  Znaci, ako u toj pocetnoj listi gdje su mi svi podaci imam tri razlicite vrste proizvoda trebam nove tri liste u koju idu svi proizvodi po vrsti. U jednu listu npr. prehraambeni, u drugu npr. kućnanski aparati, u trecu rasvjetna tijela. Ne znam kako cu napraviti te liste ako svaki "head" element mora biti predefined za novu listu(koliko znam, sto ne znaci da je to tocno:)). Ako ja znam koliko ima vrsta to nije problem, problem je sto ne znam koliko vrsta proizvoda ima. Nadam se da sam sad jasniji. 

Hvala na brzom odgovoru

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Aha, sad kužim :D Problem ti je prebrojati vrste proizvoda :D

Jedan od prvih načina koji mi pada na pamet je da napraviš listu (ili polje) sa nazivima vrsta proizvoda (lista_vrsta). Ideš po velikoj listi, i ako vrsta dosad nije ubačena u lista_vrsta onda ju ubaciš. lista_vrsta će maximalno biti velika koliko elemenata ima velika lista (ako je svaki proizvod različite vrste). Nakon što prođeš sve elemente velike liste u lista_vrsta će biti zapisane različite vrste proizvoda i koliko ih ima toliko ti novih listi treba.

 

Valjda si me skužio kaj hoću reć :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Pomoć u programiranju (ispravljanje koda)

#include <iomanip>

 

using namespace std;

 

vector <int> obradi_num_vri (vector <int> broj)

{

int num=0;

while (broj%10>0)

int k=broj%10;

num=num+k;

return num;

}

 

int main()

{

int br;

 cout<<"Koliko brojeva pretpostavljate da cete maksimalno unijeti?"<<endl;

 cin>>br;

   cout << "Unesite zeljene brojeve :" << endl;

   for(int i=0;i<=br;i++)

   {

   vector<int> broj(br);

   cin>>broj[i];

   vector<int> ispis(br);

   ispis=obradi_num_vri(broj);

 

   for(int i=0;i<=br;i++)

   cout<<"num vrijednost "<<broj[i]<<"je "<<ispis<<endl;

 

   }

 

   return 0;

}

Prvi put ovo radim pa ne znam na koliko sam dobrom putu. Tekst ide:

Numerologija je pseudo-nauka koja brojevima pridaje mistično značenje i tvrdi da se mnoga
svojstva raznih objekata mogu utvrditi proučavanjem strukture izvjesnih brojeva vezanik za te
objekte (npr. da se o karakteru neke osobe može saznati na osnovu njenog datuma rođenja). U
numerologiji se kao važno svojstvo nekog prirodnog broja definira njegova numerološka klasa
koja se dobija sabiranjem svih cifara datog broja, a zatim ponavljanjem istog postupka sa
novodobijenim brojem sve dok se kao rezultat ne dobije jednocifren broj. Na primjer,
numerološka klasa broja 39974285 je jednaka 2, jer je 3 + 9+ 9+ 7 + 4+2 + 8 + 5 = 47,
4 + 7 = 11 i, konačno, 1 +1 = 2. Znak broja se pri tome ignorora (broj –17 ima istu
numerološku klasu kao i broj 17). Napišite funkciju koja kao parametar prima vektor cijelih
brojeva a koja kao rezultat vraća novi vektor koji sadrži numerološke klase odgovarajućih
elemenata vektora koji je zadan kao parametar. Napisanu funkciju demonstrirajte u testnom
programu koji traži da se sa tastature unese slijed brojeva u neki vektor, a koji nakon toga
poziva napisanu funkciju da odredi numerološke klase unesenih brojeva i ispiše ih na ekran (u
vidu rečenica oblika “Numerološka klasa broja x iznosi y” i tako redom za sve brojeve.

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Dosta tu grešaka imaš.

Najprije, znaš li što zapravo predstavlja vector<int> ? Čini mi se kao da misliš da to predstavlja jedan broj...

 

Dakle vector<int> je struktura (klasa) koja predstavlja POLJE (niz) cijelih brojeva. Dakle jedan vector<int> sadrži više int-ova. Njega se ne može učitati sa cin, sa njime se drugačije barata.

 

Funkcije koje će ti trebati su:

operator [] - npr a[i] će dati i-ti član u vektoru a

operator push_back - a.push_back(5) će dodati broj 5 na kraj vektora a.

 

Ulaziti u detalje konstruktora i svojstva operatora neću ulaziti, mslim da je to too much za tebe zasada.

 

 

Funkcija ti također ne radi dobro. Trebaš zbrojiti sve znamenke od nekog broja, pa onda od te sume itd dok ne dobiješ jednoznamenkast broj. Ovo tvoje neće to ni prbližno napraviti. Probaj na nekom primjeru videti što trebaš napraviti pa to iskodirati.

 

Ako ti nešto nije jasno, pitaj.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Ma znam,shvatila sam to..ipak hvala,probat cu jos nesto.Konstruktorima se jos nismo bavili pa...:-)

14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Ovo mi je kao bolja verzija ali ne znam sta znaci ova greska koju javlja pa je ne mogu ispravti....

 

 

#include <iostream>

#include <vector>

#include <iomanip>

 

using namespace std;

vector<int> num_vrijednost(vector<int> brojevi)

{    int  vrijednost(0);

   for (int i(0);i<brojevi.size();i++)

     vrijednost+=brojevi[i]%10;

     int novibr=int(brojevi[i]/10);

   }

   return vrijednost;

   }

 

int main ()

{

   vector<int> brojevi;

   cout<<"Unesite brojeve za koje zelite izracunati numericku vrijednost"<<endl;

   do

   {

     for(int i(0);i<=brojevi.size();i++)

     {

     int broj[i];

     cin>>broj[i];

     brojevi.push_back(broj[i]);

     vector<int>ispis=num_vrijednost(brojevi);

     for (int i(0);i<ispis.size();i++)

     cout<<"Numericka vrijednost broja "<<broj[i]<<" je "<<ispis[i]<<endl;

     }}while(cin!=0);

 

return 0;

}

 

14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Sta mi je problem ? Ne vidim gresku,a onemogucen mi je unos :-(

 

#include <iostream>

#include <vector>

#include <iomanip>

 

using namespace std;

vector<int> num_vrijednost(vector<int> brojevi)

{    int  vrijednost(0);

   for (int i(0);i<brojevi.size();i++)

   {

     vrijednost+=brojevi[i]%10;

   while((brojevi[i]%10)!=0)

     int novibr=int(brojevi[i]/10);

   }

 

   return brojevi;

   }

 

int main ()

{

   vector<int> brojevi;

   cout<<"Unesite brojeve za koje zelite izracunati numericku vrijednost"<<endl;

   do

   {

     for(int i(0);i<=brojevi.size();i++)

     {

     int broj[i];

     cin>>broj[i];

     brojevi.push_back(broj[i]);

     vector<int>ispis=num_vrijednost(brojevi);

     for (int i(0);i<ispis.size();i++)

     cout<<"Numericka vrijednost broja "<<broj[i]<<" je "<<ispis[i]<<endl;

     }}while(cin!=0);

 

return 0;

}

 

16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Opet izgleda da ne vidiš razliku između vector<int> i int. Uz to, kaj bi trebalo biti i(0) u for petljama? while(cin!=0) bi trebalo značiš što? Dosta toga ti tu miješaš, preporučam da kreneš s nečim jednostavnijim, i to korak po korak.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
offline
Re: Pomoć u programiranju (ispravljanje koda)
Luuka kaže...

Opet izgleda da ne vidiš razliku između vector<int> i int. Uz to, kaj bi trebalo biti i(0) u for petljama? while(cin!=0) bi trebalo značiš što? Dosta toga ti tu miješaš, preporučam da kreneš s nečim jednostavnijim, i to korak po korak.

int i(0); == int i = 0;

 

while( cin != 0 ) == {#}

 

Inteligencija nije znanje,već mašta
16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)
KKristijan kaže...

int i(0); == int i = 0;

Da, poslije mi je palo na pamet da bi moglo proć (slično ko kontruktori za klase), samo me malo začudila sintaxa, nikad takvu nisam videl :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

int i=0 je sintaksa C programskog jezika,a prema novom standardu za C++ se koristi sintaksa koju sam vam poslala.Dugo sam i sama koristila C sintaksu mjesto C++,medjutim onima koji obradjuju moje kodove to smeta :-( ....Sto se tice tog ROFL,ja nisam programer niti softverski inzenjer,inzenjer sam neceg drugog pa vam sa sigurnoscu mogu reci da je to "prljav trik " kojim se mi koristimo da izbjegnemo dupliranje unosa u petljama,ovdje je samo upotrebljen u drugom kontekstu.Zao mi je sto se niste s tim susretali,mnogo je korisno.Ipak vam hvala na pomoci

17 godina
moderator
offline
Re: Pomoć u programiranju (ispravljanje koda)
elektrotehnika kaže...

int i=0 je sintaksa C programskog jezika,a prema novom standardu za C++ se koristi sintaksa koju sam vam poslala.

Možeš dati link koji potvrđuje tu informaciju? Na koji konkretno standard se to odnosi?

 

Edit: krenuo sam istraživati i budući standard za C++ (C++0x) trebao bi donijeti takve nekakve preporuke. Uglavnom, teži se unifikaciji inicijalizacije varijabli/objekata.

 

 

Inače, uopće nisam imao pojma da se to može. Nikad dosad nisam ni vidio da je itko tako napisao kôd. A zapravo bi bilo logično da se to tako radi u jednom (pravom) OOP jeziku, jer u pravom/potpunom OOP jeziku sve bi trebali biti klase/objekti. Pa bi to bio poziv konstruktora. No, kod C++-a, vjerojatno radi kompatibilnosti, osnovni tipovi poput int-a ostali su praktički jednaki kao u C-u - kao da se uopće ne radi o klasama/objektima. Osim tog (kvazi?) konstruktora. Naišao sam na jednu raspravu u kojoj tip objašnjava situaciju i tvrdi da to ni nije pravi konstruktor, odnosno da su tim fundamentalnim tipovima omogućili da ih se inicijalizira kao da imaju konstruktor.

14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Standard je ISO 98...Pripazi jos i koji kompajler koristis,nisu svi jos ga u potpunosti prihvatili.Neko konstrukcije iako nisu pravilne u C++ ocitaju,ali to vrlo lako mozes regulisati.

Kao ocit dokaz da ono sto sam navela funkcionise,saljem ti kod za zadatak oko kojeg sam pomoc trazila.Kao sto vidis koristene su konstrukcije na koje sam gore opomenuta tipa while (!(cin>>n) || n<=0)  ili for (int i(0); i<=n-1; i++)...O razlozima zasto je tako dozvoljeno ne znam,nisam se time puno bavila jer mi to nije od interesa trenutno.Ali me tvoja tvrdnja zaintrigirala pa cu se vise informisati...Javim sta saznam :-)

 

#include <iostream>

#include <vector>

 

using namespace std;

 

vector <int> numerika (vector <long> brojevi)

{

   long pomocna_var;

   int n,suma;

   n=brojevi.size();

   vector <int> rezultat(n);

   for (int i(0); i<=n-1; i++)

   {

     pomocna_var=brojevi[i];

     if (pomocna_var<0) pomocna_var=-pomocna_var;

     while (int (pomocna_var/10)>0)

     {

       suma (0);

       while (pomocna_var!=0)

       {

         suma+=pomocna_var-int(pomocna_var/10)*10;

         pomocna_var=int(pomocna_var/10);

       }

       pomocna_var=suma;

     }

     rezultat[i]=pomocna_var;

   }

   return (rezultat);

}

 

void neispravan_unos()

{

   cout<<"Neispravan unos!"<<endl;

   cin.clear();

   cin.ignore(10000,'\n');

}

 

int main()

{

   vector <long> brojevi;

   long broj;

   int n;

   cout<<"Koliko brojeva zelite unijeti? ";

   while (!(cin>>n) || n<=0)

   {

     neispravan_unos();

     cout<<"Koliko brojeva zelite unijeti? ";

   }

   cin.ignore(10000,'\n');

   cout<<"Uneseni broj je interpretiran kao: "<<n<<endl;

 

   for (int i(1); i<=n; i++)

   {

     cout<<"Unesite "<<i<<". broj: ";

     while (!(cin>>broj))

     {

       neispravan_unos();

       cout<<"Unesite "<<i<<". broj: ";

     }

     cin.ignore(10000,'\n');

     brojevi.push_back(broj);

   }

 

   vector <int> rezultat(n);

   rezultat=numerika(brojevi);

 

   cout<<endl;

   for (int i(0); i<=n-1; i++)

   {

     cout<<"Numeroloska klasa broja "<<brojevi[i]<<" iznosi "<<rezultat[i]<<endl;

   }

 

   return 0;

}

17 godina
moderator
offline
Re: Pomoć u programiranju (ispravljanje koda)
elektrotehnika kaže...
       suma (0);

 

Ovo se ne da kompajlirati u DevC++-u. A i pitam se što bi to uopće značilo. Naime, tu nisi deklarirala i inicijlalizirala varijablu pa da bude int suma(0), nego... Ne znam što... Ta linija ti ništa ne znači (pozivanje konstruktora nepostojeće klase suma na r-vrijednosti?). Valjda je trebalo ići:

suma = 0;

14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Promaklo mi vjerovatno pri kopiranju itd...treba ici suma=0; . Kod mene radi,pa et...

14 godina
offline
Re: Pomoć u programiranju (ispravljanje koda)
elektrotehnika kaže...

Promaklo mi vjerovatno pri kopiranju itd...treba ici suma=0; . Kod mene radi,pa et...

kompajler?

Inteligencija nije znanje,već mašta
14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

GNU GCC....

17 godina
moderator
offline
Re: Pomoć u programiranju (ispravljanje koda)
elektrotehnika kaže...

GNU GCC....

A jesi ti sigurna da ti je ta "naredba" zaista imala neki utjecaj? Probaj za probu staviti:

 

suma (5);

 

pa vidi je li ti ukupna suma uvećana za 5. Ako je, onda znači da je kompajler zaista "nešto" napravio s tom naredbom, ako nije - onda nije.

Nova poruka
E-mail:
Lozinka:
 
vrh stranice