|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
C++ : Ordinamento su file (algoritmo sele sort)
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; } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
AH ! Forse devo utilizzare il metodo seekp() per il posizionamento in scrittura ? Ora ci provo
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2002
Città: Napoli
Messaggi: 543
|
Levami una curiosità a ke scuola stai ?
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Ho risolto da solo . Grazie lo stesso .
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:03.



















