/* ********************************************************* KISA.CPP Lukee näppäimistöltä kilpailijoiden tiedot, järjestää kilpailijat paremmuusjärjestykseen kuplalajittelulla, ja tulostaa lopputulokset näytölle. ********************************************************* */ #include #include #define MAXLKM 100 using namespace std; struct kilpailija { string nimi; int tulos; }; void lue_tiedot(kilpailija kisaajat[], int &lkm) { int i; cout << "\n\n"; do { cout << "Anna kilpailijoiden lukumäärä (1-" << MAXLKM << ") > "; cin >> lkm; } while (lkm < 1 || lkm > MAXLKM); /* edellinen cin ei ohita syötössä annettua rivinvaihtomerkkiä; ilman ohitusta seuraava merkkijonon lukeminen menisi pieleen */ cin.ignore(80, '\n'); for (i=0; i "; getline(cin, kisaajat[i].nimi); cout << "Tulos > "; cin >> kisaajat[i].tulos; cin.ignore(80, '\n'); // kuten edellä } } /* Alkioiden vertailufunktio. Palauttaa -1, jos a:n pitäisi olla ennen b:tä, 0, jos a ja b ovat samanarvoiset, +1, jos a:n pitäisi olla b:n jälkeen. */ int vertaa(kilpailija a, kilpailija b) { int vertailu; vertailu = b.tulos - a.tulos; // vertaillaan tuloksia if (vertailu == 0) { // jos samat tulokset, if (a.nimi < b.nimi) // laitetaan aakkosjärjestykseen vertailu = -1; else if (a.nimi > b.nimi) vertailu = 1; } return vertailu; } /* Alkioiden vaihtofunktio. */ void vaihda(kilpailija &a, kilpailija &b) { kilpailija apu; apu = a; a = b; b = apu; } /* Siirtää taulukon "painavimman" alkion viimeiseen paikkaan. */ void siirra_painavin(kilpailija taulukko[], int koko) { int i, vertailu; for (i=0; i 0) vaihda(taulukko[i], taulukko[i+1]); } } /* Kuplalajittelu kilpailija-taulukolle. */ void jarjesta(kilpailija taulukko[], int koko) { int pituus; for (pituus=koko; pituus>1; pituus--) siirra_painavin(taulukko, pituus); } void tulosta_tulokset(kilpailija kisaajat[], int lkm) { int i; cout << "\n\n"; cout << "Tulokset:\n"; for (i=0; i