PDA

Visualizza la versione completa : [C++] ordinamento array di oggetti


ivny
25-10-2013, 11:13
Buongiorno a tutti!
Ho un problema con un algoritmo che dovrebbe ordinare un array di oggetti di classe team;
la classe team, oltre ad avere una serie di variabili al suo interno, contiene anche un ulteriore array di oggetti di classe player(questo per non da ordinare).
Come potete immaginare, il programma deve prendere un array contenente i dati di 8 squadre di calcio e metterle in ordine in base al loro punteggio e, se due squadre sono a pari punteggio, in base alla differenza reti.
Per motivi vari non posso usare funzioni sort e/o qsort e compagnia.
Il codice che ho scritto questo:




#define N 8
#define P 10


team pl_team[N];


void PassaSquadra(int a)
{
int e;
team tester;
tester.nome = pl_team[a].nome;
tester.gf = pl_team[a].gf;
tester.gs = pl_team[a].gs;
tester.pv = pl_team[a].pv;
tester.pp = pl_team[a].pp;
tester.pn = pl_team[a].pn;
for(e=0; e<P; e++)
{
tester.giocatore[e].nome = pl_team[a].giocatore[e].nome;
tester.giocatore[e].goal = pl_team[a].giocatore[e].goal;
}
pl_team[a].nome = pl_team[a-1].nome;
pl_team[a].gf = pl_team[a-1].gf;
pl_team[a].gs = pl_team[a-1].gs;
pl_team[a].pv = pl_team[a-1].pv;
pl_team[a].pp = pl_team[a-1].pp;
pl_team[a].pn = pl_team[a-1].pn;
for(e=0; e<P; e++)
{
pl_team[a].giocatore[e].nome = pl_team[a-1].giocatore[e].nome;
pl_team[a].giocatore[e].goal = pl_team[a-1].giocatore[e].goal;
}


pl_team[a-1].nome = tester.nome;
pl_team[a-1].gf = tester.gf;
pl_team[a-1].gs = tester.gs;
pl_team[a-1].pv = tester.pv;
pl_team[a-1].pp = tester.pp;
pl_team[a-1].pn = tester.pn;
for(e=0; e<P; e++)
{
pl_team[a-1].giocatore[e].nome = tester.giocatore[e].nome;
pl_team[a-1].giocatore[e].goal = tester.giocatore[e].goal;
}
}

Questa la funzione, che dovrebbe, dato un indice a, scambiare di posto l'oggetto di posto [a] con l'oggetto di posto [a-1]; N il numero di squadre e P il numero di giocatori massimo per squadra (squadre da 5 pi riserve))

ivny
25-10-2013, 11:15
int a;
bool noCheck=false;
while(noCheck=false)
{
noCheck=true;
for(a=1;a<N;a++)
{
if(pl_team[a].punti()>pl_team[a-1].punti())
{
PassaSquadra(a);
noCheck=false;
}
elseif(pl_team[a].dr()>pl_team[a-1].dr())
{
PassaSquadra(a);
noCheck=false;
}
}
}
Questa invece la parte di codice che valuta se una squadra ha pi punti/dr di quella in una posizione pi in alto ed eventualmente le scambia.
Il problema di tutto questo che l'algoritmo non funziona e l'ordine rimane tale e quale.
Qualcuno riesce a vedere l'errore che io non trovo? :(

Scusate il doppio post, ma un singolo post ha un limite di caratteri che avevo sforato e dovevo scrivere tutto il codice per chiedere

ivny
25-10-2013, 16:07
Risolto, nella condizione del while avevo messo '=' invece di '=='
Scusate, erroraccio di distrazione -.-'
Ora per il programma si inchioda ogni volta che deve eseguire questa funzione, pu essere dovuto al fatto che deve gestire parecchi dati? in fin dei conti non mi paiono tanti

oregon
25-10-2013, 16:13
"Si inchioda" vuol dire non termina pi o hai un errore?

Quanti sarebbero i dati in questione?

ivny
25-10-2013, 16:17
Risolto anche questo, scusa, falso allarme
chiudete pure la discussione che inutile

Loading