home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
CataniaB
/
teach-act
/
esempi
/
File
/
selsort-con-file.c
< prev
Wrap
C/C++ Source or Header
|
1997-03-05
|
4KB
|
114 lines
/* Selection Sort sotto forma di programma:
* legge n e poi a1,..., an; li mette in un array, lo ordina, poi stampa
*/
#include <stdio.h>
/* #include <stdlib.h> */
#define MAX 99 /* la dimensione massima per l'array da ordinare e` 100 (sic !)*/
main()
{
FILE *f; /* f va dichiarata come puntatore, il tipo FILE e'
* definito in "stdio.h" */
int n, k, i, j, imin;
float a [MAX];
float temp;
char s[10];
printf("\nInput file name (max 10 caratteri): ");
/* legge il nome del file con i dati */
scanf("%s",s);
/* lettura da tastiera del nome */
f=fopen(s,"r"); /* apre il file s in lettura ("r") */
if (f == NULL) /* f e' il puntatore NULL se s non esiste */
{
printf("Il file %s non esiste",s);
return 0; /* esce dal main */
}
if (fscanf(f,"%d", &n)==EOF)
/* legge il valore per n;
* notare che bisogna usare
* l'indirizzo di n : &n
* fscanf restituisce EOF se si arriva alla
* fine del file.
*/
{
printf("Il file e' vuoto\n");
fclose(f);
return 0; /* esce dal main */
}
if ((n > MAX) || (n <1)) printf("input n errato");
/* || e` l'or logico */
else {
for(k=0; k <= n-1 ; k++)
if (fscanf(f,"%f", &a[k])==EOF)
{
printf("I numeri da ordinare devono essere %d \n",n);
fclose(f);
return 0;
};
/* nota: n-1 perche` in C si parte da 0 !!! */
fclose(f);
printf("\n Input (n = %d) \n" , n);
for(k=0; k <= n-1 ; k++) printf("%f ", a[k]);
/* e` utile scrivere l'input, per controllo */
/* ora ordiniamo a da 0 a n-1 */
for(k=0; k <= n-2 ; k++) {
/* trova indice del minimo da k a n-1 */
imin = k;
for(i=k+1; i <= n-1 ; i++)
if ( a[i] < a[imin] ) imin = i ;
/* facciamo scambio: */
temp = a[k]; a[k] = a[imin]; a[imin] = temp;
} /* chiude il for su k */
/* ora stampiamo il risultato: */
printf("\n\nOutput file name (max 10 caratteri): ");
/* legge il nome del file sul quale memorizzare l'output */
scanf("%s",s);
f=fopen(s,"a"); /* apre il file in modo append ("a")
* cioe' si aggiungono dati alla fine
* del file s (che viene creato se gia' non esiste).
* In alternativa con il modo "w"
* si cancella il contenuto precedente.
* Si puo' utilizzare la stessa variabile f
* usata x l'input.
*/
if (f == NULL)
{
printf("Il file %s non esiste",s);
return 0;
}
fprintf(f,"\n\n Output: \n");
printf("\n\n Output: \n");
for(k=0; k <= n-1 ; k++)
{
fprintf(f,"%f ", a[k]);
printf("%f ",a[k]); /* stampo anche su video */
}
fclose(f);
printf("\n");
} /* chiude l'else */
} /* chiude il main */