Salve a tutti. Ho un problemino con la funzione ordina di questo programma che mi dovrebbe ordinare in base al cognome un array di record. L'algoritmo richiesto per l'ordinamento è quello per inserzione del quale il codice l'ho preso dal libro. L'inserimento e la stampa va alla grande, l'ordinamento no. Grazie per gli eventuali aiuti...posto il codice:
File ElencoPrenotati.h
#ifndef ELENCOPRENOTATI_H
#define ELENCOPRENOTATI_H
using namespace std;
struct Studente
{
string nome;
string cognome;
string matricola;
};
class ElencoPrenotati
{
public:
ElencoPrenotati (int);
~ElencoPrenotati ();
bool insert (Studente);
void ordina ();
void stampa ();
private:
int N;
Studente *stu;
};
#endif
File ElencoPrenotati.cpp
#include <iostream>
#include <string>
#include <cstdlib>
#include "ElencoPrenotati.h"
using namespace std;
ElencoPrenotati :: ElencoPrenotati (int n) : N(n)
{ stu = new Studente[N]; }
ElencoPrenotati :: ~ElencoPrenotati ()
{ delete [] stu; }
bool ElencoPrenotati :: insert (Studente e)
{
for (int i=0; i<N; i++)
{
if (stu[i].nome.length() == 0)
{
stu[i].nome = e.nome;
stu[i].cognome = e.cognome;
stu[i].matricola = e.matricola;
return true;
}
}
}
void ElencoPrenotati :: ordina ()
{
int i, j;
for (i=1; i<N; i++)
{
j=i;
while (j>0 && stu[i].cognome[0] < stu[j-1].cognome[0])
{
stu[j] = stu[j-1];
j--;
}
stu[j] = stu[i];
}
}
void ElencoPrenotati :: stampa ()
{
for (int i=0; i<N; i++)
{
if (stu[i].nome.length() != 0)
{
cout << "Nome: " << stu[i].nome << endl;
cout << "Cognome: " << stu[i].cognome << endl;
cout << "Matricola: " << stu[i].matricola << endl << endl;
}
}
}
File main.cpp
#include <iostream>
#include <string>
#include <cstdlib>
#include "ElencoPrenotati.h"
using namespace std;
int main()
{
Studente r;
ElencoPrenotati elenco(10);
r.cognome="Esposito"; r.nome="Francesco"; r.matricola="36596";
elenco.insert(r);
r.cognome="Paccado"; r.nome="Maurizio"; r.matricola="36296";
elenco.insert(r);
r.cognome="Zamboni"; r.nome="Stefano"; r.matricola="36291";
elenco.insert(r);
elenco.stampa();
r.cognome="Accardo"; r.nome="Domenico"; r.matricola="36293";
elenco.insert(r);
elenco.stampa();
elenco.ordina();
elenco.stampa();
cout << endl << endl;
system ("PAUSE");
return 0;
}