PDA

View Full Version : C++ : Ordinamento su file (algoritmo sele sort)


leon84
17-12-2002, 08:42
Ho realizzato un modulo per l'ordinamento degli elementi all'interno di un file binario . Il problema è semplice : Non ordina !! Qualcuno può aiutarmi ? Il modulo che posterò di seguito si chiama sele_sort . All'interno chiama un altro modulo che conta il numero di elementi del file . Ecco il codice . Fatemi sapere entro stasera . Domani c'è il compito in classe .

#include <iostream.h>
# include <fstream.h>
# include <string.h>
#include <stdlib.h>

void stampa ();
void aggiunta();
int conta_elementi();
void sele_sort ();
struct pers
{
int codice;
char cognome [15];
char nome [15];
};

void main ()
{
char tasto ;
aggiunta();
stampa();
cin >> tasto ;
sele_sort();
system ("cls");
stampa();
cin >> tasto ;
}

void aggiunta ( )
{
pers buffer;
int n,i;
system ("cls");
cout<<"N: ";
cin>>n;
fstream file;
file.open ("ces.txt",ios::out|ios::binary);
for (i=0;i<n;i++)
{
system ("cls");
cin.ignore();
cout<<"CODICE: ";
cin>>buffer.codice;
cout<<"COGNOME: ";
cin.ignore ( );
cin.get (buffer.cognome,15,'\n');
cout<<"NOME: ";
cin.ignore ( );
cin.get (buffer.nome ,15,'\n');
file.write ((char *) &buffer,sizeof buffer) ;
}
file.close();
}

void stampa ()
{
system ("cls");
pers buffer ;
fstream file ;
file.open ("ces.txt",ios::in|ios::binary);
while (file.read ((char *) &buffer,sizeof buffer))
{
cout << "CODICE : " << buffer.codice << '\n' ;
cout << "COGNOME : " << buffer.cognome <<'\n';
cout << "NOME : " << buffer.nome <<'\n';
cout << '\n';
}
}

void sele_sort ()
{
int pos=0;
int pos2=0 ;
int i=0;
int j=0;
int n=0 ;
n=conta_elementi();
fstream file ;
file.open ("ces.txt",ios::in|ios::app|ios::binary) ;
file.clear();
pers buffer;
pers buffer2 ;
for (i=1;i<n;i++)
{
pos2=pos+sizeof buffer ;
for (j=i+1;j<=n;j++)
{
file.clear();
file.seekg(pos);
file.read ((char *)&buffer , sizeof buffer);
file.clear();
file.seekg(pos2);
file.read ((char *) &buffer2,sizeof buffer2);
if (buffer.codice>buffer2.codice)
{
file.clear();
file.seekg(pos2);
file.write ((char *)&buffer,sizeof buffer);
file.clear();
file.seekg(pos);
file.write ((char *)&buffer2,sizeof buffer2);
}
pos2=pos2+sizeof buffer;
}
pos=pos+sizeof buffer;
}
file.close();
}

int conta_elementi ()
{
pers buffer;
int cont=0;
fstream file ;
file.open ("ces.txt",ios::in|ios::binary);
while (file.read((char *)&buffer,sizeof buffer))
cont++;
file.close();
return cont;
}

leon84
17-12-2002, 11:35
AH ! Forse devo utilizzare il metodo seekp() per il posizionamento in scrittura ? Ora ci provo

Tortellone
17-12-2002, 12:16
Levami una curiosità a ke scuola stai ?

leon84
17-12-2002, 13:10
Originally posted by "Tortellone"

Levami una curiosità a ke scuola stai ?

Istituto Tecnico Industriale Ettore Majorana . Perché ? Anche tu frequenti o pensavi di frequentare questa scuola ?

leon84
17-12-2002, 14:33
Ho risolto da solo . Grazie lo stesso .