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;
}
#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;
}