[ aleksandar10803 @ 05.01.2010. 14:07 ] @
potrebna mi e pomoc rewiti jednog zadatka u c++ molim vas da mi pomognete wto pre
evo zadatka
kreirataj nacin se formira datoteka "sort.dat"

3. d
ime na pesna:


[Ovu poruku je menjao aleksandar10803 dana 06.01.2010. u 00:33 GMT+1]

[Ovu poruku je menjao aleksandar10803 dana 06.01.2010. u 00:35 GMT+1]
[ Mihajlo Cvetanović @ 05.01.2010. 15:00 ] @
Prvo učitaj podatke iz te datoteke sort.dat. Nije do kraja jasno kakav je format tog fajla. Jesu li podaci u CSV formatu (podaci razdvojeni zarezom), pa ima 14 polja u 15 redova?

Kad učitaš podatke moraš da proveriš ispravnost podataka. Osim očiglednih provera (glasovi publike u rasponu od 0 do 250000, glasovi žirija u rasponu od 0 do 12, a zabranjene vrednosti 11 i 9), postoje i druge provere. Moraš da proveriš i da li su podaci sortirani po imenu izvođača. Za svakog člana žirija moraš da proveriš da li ima tačno jednu vrednost od dozvoljenih bodova.

Ovo poslednje radiš tako što za svaki novi učitani slog proveravaš da se vrednost bodova nekog člana žirija nije do tada pojavila. I moraš da brojiš koliko puta je neki član žirija dao pozitivne bodove, jer broj pozitivnih bodova mora da bude 10 (1-8, 10, i 12). Ovaj brojač pozitivnih bodova je niz, jer moraš da posmatraš sve članove žirija istovremeno. Na kraju učitavanja svi članovi niza moraju da imaju vrednost 10.

Za bodovanje je najkomplikovanije glasanje publike. Publika je kao trinaesti član žirija, a ti moraš da pretvoriš niz glasova s vrednostima 0-250000 u niz bodova. Ovaj deo je lakše uraditi nego objasniti. Treba da sortiraš glasove, ali zajedno sa glasovima ide i indeks izvođača. Kad dobiješ sortirani niz glasova onda prvom izvođaču daš 12 bodova, drugom 10, itd. Ove početne bodove možeš da upišeš u pomoćni niz, int pocetni_bodovi[] = {12, 10, 8, 7, 6, 5, 4, 3, 2, 1}, tako da onda glasanje publike izgleda ovako:

Code:

int bodovi_pevaca[15] = {0};
// int sortirani_glasovi[15], sortirani_pevaci[15] -- ovo sortiraš opadajuće po prvom nizu,
// samo što svaki put kad menjaš mesta u prvom nizu moraš i u drugom

for (int i = 0; i < 15; ++i)
  bodovi_pevaca[sortirani_pevaci[i]] = pocetni_bodovi[i];


Možda primećuješ da niz sortirani_glasovi ne učestvuje u računici. Taj niz je samo bio potreban da dobijemo niz sortirani_pevaci.

Na ovaj niz bodovi_pevaca treba sad dodati bodove svih članova žirija, ali to je prosto sabiranje. Na kraju treba ponovo sortirati pevace, ali sad ne po glasovima, nego po boovima, i pobedio je onaj ko je prvi na listi.

[Ovu poruku je menjao Mihajlo Cvetanović dana 05.01.2010. u 16:40 GMT+1]
[ Mihajlo Cvetanović @ 05.01.2010. 16:15 ] @
Citat:
aleksandar10803: molim vas ja ne mogu da se snagem ako moze postepeno da mi pokazete rewenje ovog zadatka ali celosno


Koliko vremena imaš?

Prvo treba da učitaš podatke. Pošto radiš u C++ treba da koristiš ifstream (input file stream). Da li je format fajla takav da u jednom redu imamo sledeće: ime, prezime, pesma, glasovi, bod1, bod2, ..., bod10? Ako je tako onda je sort.dat u CSV formatu (comma separated values). Postoje uputstva na internetu kako da se čitaju podaci odvojeni zarezom. Pročitaj ceo tekst na ovoj stranici (da li znaš engleski?):

http://www.dreamincode.net/forums/showtopic95826.htm

Dat je i kod, poigraj se malo s kodom. U primeru ulazni podaci su u matrici, a kod tebe umesto jednog reda matrice treba da stoji struktura u kojoj su tri stringa, jedan int, i niz od 10 intova. To znači da kod tebe ne postoji ova unutrašnja petlja koja postoji u primeru, nego umesto petlje pozivaš po jedan getline za svako polje.

U primeru se poziva getline jednom da se učita jedna linija fajla, a onda se ta linija rasparčava na polja pomoću klase stringstream. Ova klasa služi da "tokenizuje" početni string, to jest da pročita polja iz stringa. Ta tokenizacija se radi opet sa getline, ali ovog puta tu je i treći parametar koji kaže gde je kraj svakog polja. U našem slučaju znak ',' označava kraj polja.

Kad pročitaš ceo fajl i smestiš sve podatke u memoriju nastavićemo dalje.
[ aleksandar10803 @ 05.01.2010. 16:35 ] @
nisu postaveni sa zapirkom treba da se napravi datoteka u kojoj ce biti ime i prezimena pevaca ime pesana a zatim da se odredat glasove publike i zirija i da se dobije pobednik
[ aleksandar10803 @ 05.01.2010. 16:38 ] @
konacni odgovor treba da bude ime i prezimena pevaca ime na pesma i broj na osvoeni glasovi za sekoj poedinecno
[ Mihajlo Cvetanović @ 05.01.2010. 18:38 ] @
Dobro, navedi ovde primer ulaznih podataka. Daj sadržaj ulaznog fajla.

I nemoj da mešaš glasove i bodove. Publika daje glasove, a žiri daje bodove. Pevači osvajaju bodove.