Pereiti prie turinio

Reikia pagalbos dėl rikiavimo C++


Rekomenduojami pranešimai

Sveiki,

 

Darydamas 2009 informatikos VBE 2 užduotį - "Varžybos" susidūriau viena problema.

Grupėse bėgikų laikus išrikiuoju gerai, bet man išrikiuoja tik bėgikų laikus, o bandydamas išrikiuoti ir vardus man rodo, kad yra klaida ([Error] invalid array assignment).

 

Gal kas nors žinote kitą būdą, kaip išrikiuoti laikus kartu su vardais?

 

 

Štai ta mano programa -

 

#include <fstream>
using namespace std;
/* duomenu/ruzeultatu failai */
const char CDfv[] = "duom.txt";
const char CRfv[] = "rez.txt";

/* Globalus kintamieji */
typedef char kvardas[21];
int n;
int k[50];
int up;			//laiko rikiavimui pagalbinis kintamasis
char up2[21];		//vardu rikiavimui pagalbinis rikiavimas
int kki[50];

struct katinai {
kvardas kv[50];  	//katino vardas
int min[50];		//minutes per kiek atbego
int sec[50];  		//sekundes per kiek atbego
int laik[50];     	//laikas sekundemis per kiek atbego
}cat[100];

void skaitymas ();
void rikiavimas ();
void spausdinti ();

/* Pagrindine funkcija */
int main (){
skaitymas ();
rikiavimas ();	
spausdinti ();
return 0;    
}

/* Proceduros */
void skaitymas () {
ifstream duom (CDfv);
duom>>n;
for (int i=0; i<n; i++) {
	duom>>k[i];
	duom.ignore ();
	for (int j=0; j<k[i]; j++) {
		duom.get (cat[i].kv[j], 20);
		duom>>cat[i].min[j]>>cat[i].sec[j];
		cat[i].laik[j] = cat[i].min[j] * 60 + cat[i].sec[j];
		duom.ignore ();	     		
	}
	kki[i] = k[i] / 2;
}
duom.close ();     
}

void rikiavimas () {
for (int i=0; i<n; i++) {
	for (int j=0; j<k[i]; j++) {
		for (int p=0; p<k[i]; p++) {
			if (cat[i].laik[j] < cat[i].laik[p]) {
				up = cat[i].laik[p];			//
				cat[i].laik[p] = cat[i].laik[j];	// isrikiuoja laikus
				cat[i].laik[j] = up;  			//

				up2 = cat[i].kv[p];			//
				cat[i].kv[p] = cat[i].kv[j];		//pagal mane taip turetu isrikiuoti vardus                                  
				cat[i].kv[j] = up2;			//
			}       
		}    	
	}
}     
}

void spausdinti () {
ofstream rez (CRfv);
for (int i=0; i<n; i++) {
	for (int j=0; j<kki[i]; j++) {
		rez<<cat[i].kv[j]<<cat[i].laik[j]/60<<" "<<cat[i].laik[j]%60<<endl;   
	}  
}      
rez.close ();
}

 

Duomenų failas -

http://img197.imageshack.us/img197/5565/96575557.png

 

Pridedu ir šią programą su visais reikalingais failais.

Varzybos.rar

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man atrodo kad tu cia strukturos pati masyva turi rikiuotis o ne jos elementus, nes dabar tai tu tiesiog pacia struktura isdarkai.

Gal galėtum parodyti kaip atrodo pačios struktūros rikiavimas? Matai, aš C++ naujokas dar, nelabai įsivaizduoju kaip tai turi atrodyti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Masyvo masyvui priskirt negalima, t.y.

int A[5] = {1, 2, 3, 4, 5};
int B[5] = {6, 7, 8, 9, 10};
A = B // Apsispjaudom errorais

Naudoji vardams string ir nematai vargo. O pagal tai, kaip darai, tai rikiuoji gerai, nes kaip suprantu pvz cat[0] atitinka pirmos grupes duomenis, o ne kazkuri konkretu dalyvi.

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Masyvo masyvui priskirt negalima, t.y.

int A[5] = {1, 2, 3, 4, 5};
int B[5] = {6, 7, 8, 9, 10};
A = B // Apsispjaudom errorais

Naudoji vardams string ir nematai vargo. O pagal tai, kaip darai, tai rikiuoji gerai, nes kaip suprantu pvz cat[0] atitinka pirmos grupes duomenis, o ne kazkuri konkretu dalyvi.

Tai string'as man tiktu jeigu vardų būtų tik vienas ar du, bet jeigu vardą sudarytų nuo 2 iki 5 žodžiu? Nes kiek žinau, tai string nuskaito, šiuo atveju vardą, iki tarpo, ar ne?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai string'as man tiktu jeigu vardų būtų tik vienas ar du, bet jeigu vardą sudarytų nuo 2 iki 5 žodžiu? Nes kiek žinau, tai string nuskaito, šiuo atveju vardą, iki tarpo, ar ne?

Ziurint kaip skaitai :) Tavo atveju tai pradziai nuskaityciau taip kaip tu, i char masyva ir tada ta char masyva priskirciau stringui (taip duoda priskirt);

char x[21]; string x2;
duom.get(x, 20);
x2 = x;

Ir dabar naudoji visur ta x2.

O stringa gali iki kur nori skaityt, tokiais atvejais kai yra kazkokie tai pavadinimai ar vardai is keliu zodziu, tai juos atskiria skyrikliais (kad ir kableliais) ir tada skaitai taip:

getline(duom, stringas, ',');

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...