Pereiti prie turinio

Vienodu masyvo nariu tikrinimas


Rekomenduojami pranešimai

Sveiki, turiu knygu sarasa ju kieki ir vieneto kaina

Trys nykštukai, 5 10.00

Mikė pūkuotukas, 6 15.99

Grybų karas, 10 12.10

Trys nykštukai, 4 8.50

Grybų karas, 3 19.99

Ir man reikia sudaryti nauja sarasa kuriame nebutu pasikartojanciu knygu ir butu didziausia tos knygos vieneto kaina.

for(int i=0; i<n-1; i++){
	for(int j=i+1; j<n; j++){
		if(K[i].Pavadinimas == K[j].Pavadinimas){
		    K[i].Pavadinimas = K[j].Pavadinimas; //salinu is masyvo
			cout << K[i].Pavadinimas << endl;
		}
	}
}

Man isspausdina 2 reiksmes Trys nukštukai ir Grybų karas (nes spausdininu if'e), kaip padaryti kad gauciau normalu sarasa?

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Atleisk, kad kad taip sakau, bet, tu, gal nebendrauji su grupiokais, kad jų nepaprašai pagalbos? :)

 

O tai, tu, nori į naują masyvą surašyti ar kaip padaryti?

Bendrauju su grupiokais, tik nelabai tikiu kad dar kazkas situs daro. Noreciau viska irasyti i ta pati pasyva, bet jei iseis galetum parodyti ir irasyma i nauja.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, turiu knygu sarasa ju kieki ir vieneto kaina

 

Ir man reikia sudaryti nauja sarasa kuriame nebutu pasikartojanciu knygu ir butu didziausia tos knygos vieneto kaina.

		    K[i].Pavadinimas = K[j].Pavadinimas; //salinu is masyvo

Jei čia norėjai priskirti vieną elementą kitam, tai neteisingai – čia priskiri tik vieno pavadinimą kitam. Reiktų K = K[j].

 

Aišku, tai nepašalina visiškai, nes dabar tiesiog turėsi du vienodus. :) Šalinimas yra toks:

n - elementų kiekis, s - šalinamas elementas

a) kai tvarka nesvarbi: K[s] = K[n]; n--
(paskutinį perkeli į šalinamo vietą, vienu elementu sumažėja)

b) kai tvarka svarbi: for (int i = s; i < n-1; i++) { K[i] = K[i+1] }; n--;
(visus elementus, pradedant nuo šalinamo, perrašo elementais, esančiais viena pozicija toliau, vienu elementu sumažėja)

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Skaidrese ikeltas toks variantas: (ji koregavau)

void PradinisKainorastis(KnyguKonteineris & kny, KnygosInfo K[], int n){
 ofstream rf(RF);
 std::vector<std::string> nPavadinimai;
 for(int i=0; i<n; i++){
	 for(int j=0; j<n; j++){
		 if(K[i].ImtiPavadinimas() == K[j].ImtiPavadinimas() && K[i].ImtiVntKaina() < K[j].ImtiVntKaina()){
		  i = j;
		 }
        }
	 if(nPavadinimai.size() == 0){
		 nPavadinimai.push_back(K[i].ImtiPavadinimas());
		 rf << K[i].ImtiPavadinimas() << " " << K[i].ImtiVntKaina() << endl;
	 }else{
	 int k =  0;
	 for(int j =0; j<nPavadinimai.size(); j++){
		 if(nPavadinimai[j] == K[i].ImtiPavadinimas()){
		 break;
		 }else
        k++;
		 if(k == nPavadinimai.size()){
		 nPavadinimai.push_back(K[i].ImtiPavadinimas());
		 rf << K[i].ImtiPavadinimas() << " " << K[i].ImtiVntKaina() << endl;
            break;
		 }
	 }
	}
}
rf.close();
}

Aisku jis veikia. Bet ar tokiam mano galva paprastam dalykui reikia tokio sudetingo kodo? (cia kartu tikrina ir kaina ir isspausdina didziausia

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Yra du protingi variantai:

  1. Prieš įrašydamas elementą į masyvą pasižiūri, ar jau jame yra elementas su tokiu pavadinimu. Jei yra ir jei naujo elemento kaina didesnė, tai įrašai naująją kainą. Jei nėra, įterpi naują elementą.
  2. Surašai visus elementus į masyvą. Tada masyvą surikiuoji. Elementai su vienodais pavadinimais bus vienas šalia kito. Tada pereini per visą masyvą tikrindamas du gretimus narius ir pasižymėdamas didžiausią kainą. Tiesa, kad masyvas būtų be pasikartojimų, reikės kiekvieną pavadinimą su jo didžiausia kaina perkopijuoti į naują masyvą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui uz info. dariau sitaip

void PradinisKainorastis(KnyguKonteineris & kny, KnygosInfo K[], int n){
ofstream rf(RF, ios::app);
rf << endl << "**************Rezultatai****************" << endl << endl;
for(int i=0; i<n; i++){
    for(int j=i+1; j<n; j++){
        if(K[i].ImtiPavadinimas() == K[j].ImtiPavadinimas()){
	   string pavadinimas = K[i].ImtiPavadinimas();
	   K[i].DetiPavadinimas(pavadinimas);
	   K[j] = K[n-1];
	   n--;
	   j--;
	     if(K[i].ImtiVntKaina() < K[j].ImtiVntKaina()){
	        double vntkaina = K[j].ImtiVntKaina();
		K[i].DetiVntKaina(vntkaina);
		K[j]=K[n-1];
		n--;
		j--;
	     }
	}
   }
	rf << K[i].ImtiPavadinimas() << " " << K[i].ImtiVntKaina() << endl;
}
rf.close();
}

Ir visgi rezultata viena gaunu ne toki.

Duomenu failas

Trys nykštukai 5 10

Mikė pūkuotukas 6 15.99

Grybų karas 10 12.1

Trys nykštukai 4 8.5

 

Rezultatai

Trys nykštukai 12.1

Mikė pūkuotukas 15.99

Grybų karas 19.99

Redagavo mendinskis
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.

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