Narzew
(Rxprojekt)
12 Styczeń 2013 16:45
#1
Witam wszystkich.
Mam sprawę, a mianowicie mam napisać program, który sortuje ranking. A mianowicie mam trzy tablice, w której w jednej jest imię, w drugiej nazwisko, a w trzeciej jego wynik. Te tablice to imię, nazwisko i wynik. One tworzą ranking, numer pozycji tablicy oznacza numer w liście. Z tej listy trzeba stworzyć ranking.
Na przykład:
Kamil Paź - 1000
Marcin Fałsz - 10
Asia Prawda - 13
Ma posortować i wywalić tak:
Kamil Paź 1000
Asia Prawda 13
Marcin Fałsz 10
kostek135
(kostek135)
12 Styczeń 2013 17:07
#2
Yhm, to może napisz jeszcze co zrobiłeś i co ci nie działa.
177
(Copycona)
12 Styczeń 2013 17:18
#3
Bierzesz implementacje dowolnego algorytmu sortowania i go modyfikujesz w następujący sposób:
porównanie ma się odbywać dla tablicy z wynikami
zmiana wartości w przypadku, gdy porównanie zwróci prawdę ma nastąpić dla wszystkich trzech tablic
czyli:
jeżeli wynik[a+1] > wynik[a]
{
zamień wynik[a+1] i wynik[a]
zamień imię[a+1] i imię[a]
zamień nazwisko[a+1] i nazwisko[a]
}
kuhar
(Kubakuderski)
12 Styczeń 2013 17:34
#4
Tak na szybko:
#include
#include
#include
using namespace std;
class Result
{
public:
string name;
bool whatever;
int score;
Result(){}
Result(string n, bool w, int s)
{
name = n, whatever = w, score = s;
}
};
bool operator< (Result a, Result b)
{
return !(a.score != b.score ? a.score < b.score : a.name < b.name); // negacja tak na szybko, bo ma byc malejaco...
}
ostream& operator<< (ostream &os, const Result &a)
{
os << a.name << " " << (a.whatever == true ? "true" : "false") << " " << a.score;
return os;
}
int main()
{
string names[]={"Zenon", "Aaron", "Eustachy", "Jajeczko", "Mleko"};
bool whatever[]={true, false, true, false, false};
int score[]={1, 10, 45, 21, 21};
Result tab[5];
for(int i=0; i<5; i++) tab[i] = Result(names[i], whatever[i], score[i]);
sort(tab, tab+5);
for(int i=0; i<5; i++) cout << tab[i] << "\n";
cin.sync();
cin.get();
return 0;
}