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   
C/C++ Source or Header  |  1997-03-05  |  4KB  |  114 lines

  1.  
  2. /* Selection Sort sotto forma di programma:
  3.  * legge n e poi a1,..., an; li mette in un array, lo ordina, poi stampa
  4.  */
  5.  
  6. #include <stdio.h>
  7. /* #include <stdlib.h> */
  8.  
  9. #define MAX 99   /* la dimensione massima per l'array da ordinare e` 100  (sic !)*/
  10.  
  11. main()
  12.  
  13. {
  14.     FILE *f;   /*  f va dichiarata come puntatore, il tipo FILE e'
  15.                 *  definito in "stdio.h"  */
  16.  
  17.     int n, k, i, j, imin;
  18.     float a [MAX];
  19.     float temp;  
  20.     char s[10];         
  21.  
  22.         printf("\nInput file name (max 10 caratteri): "); 
  23.           /* legge il nome del file con i dati */ 
  24.         scanf("%s",s);
  25.          /* lettura da tastiera del nome */
  26.         
  27.         f=fopen(s,"r");  /* apre il file s in lettura ("r")  */
  28.     if (f == NULL)   /* f e' il puntatore NULL se s non esiste */
  29.            {
  30.             printf("Il file %s non esiste",s);
  31.             return 0;   /* esce dal main */
  32.             } 
  33.         if (fscanf(f,"%d", &n)==EOF)                              
  34.                              /* legge il valore per n; 
  35.                               *  notare che bisogna usare
  36.                           * l'indirizzo di n :  &n
  37.                               * fscanf restituisce EOF se si arriva alla 
  38.                               * fine del file.
  39.                          */
  40.            {
  41.             printf("Il file e' vuoto\n");
  42.             fclose(f);
  43.             return 0;        /* esce dal main */
  44.        }
  45.                
  46.     if ((n > MAX) || (n <1)) printf("input n errato"); 
  47.                          /* || e` l'or logico */
  48.       else {
  49.     
  50.         for(k=0; k <= n-1 ; k++) 
  51.                if (fscanf(f,"%f", &a[k])==EOF) 
  52.                 {
  53.                  printf("I numeri da ordinare devono essere %d \n",n);
  54.                  fclose(f);
  55.                  return 0;                 
  56.         };
  57.            
  58.             /* nota:  n-1 perche` in C si parte da 0 !!! */
  59.         fclose(f);  
  60.  
  61.         printf("\n Input  (n = %d) \n" , n);
  62.         for(k=0; k <= n-1 ; k++) printf("%f   ", a[k]);
  63.             /* e` utile scrivere l'input, per controllo */
  64.       
  65.         /* ora ordiniamo a  da 0  a  n-1 */
  66.         for(k=0; k <= n-2 ; k++) {
  67.        
  68.                /* trova indice del minimo da k a n-1 */
  69.                imin = k;
  70.                for(i=k+1; i <= n-1 ; i++) 
  71.                     if ( a[i] < a[imin] )  imin = i ;
  72.  
  73.                /* facciamo scambio: */
  74.                temp = a[k]; a[k] = a[imin]; a[imin] = temp;
  75.         } /* chiude il for su k */
  76.               
  77.       /* ora stampiamo il risultato: */ 
  78.            
  79.       printf("\n\nOutput file name (max 10 caratteri): "); 
  80.           /* legge il nome del file sul quale memorizzare l'output */ 
  81.           scanf("%s",s);
  82.         
  83.           f=fopen(s,"a");  /* apre il file in modo append ("a") 
  84.                             * cioe' si aggiungono dati alla fine 
  85.                             * del file s (che viene creato se gia' non esiste).
  86.                             * In alternativa con il modo "w" 
  87.                             * si cancella il contenuto precedente.  
  88.                             * Si puo' utilizzare la stessa variabile f 
  89.                             * usata x l'input. 
  90.                             */
  91.       if (f == NULL)  
  92.             {
  93.               printf("Il file %s non esiste",s);
  94.               return 0;
  95.             } 
  96.           fprintf(f,"\n\n Output: \n");                                
  97.           printf("\n\n Output: \n");       
  98.           for(k=0; k <= n-1 ; k++) 
  99.             { 
  100.              fprintf(f,"%f   ", a[k]);
  101.              printf("%f    ",a[k]); /* stampo anche su video */
  102.          }
  103.           fclose(f);    
  104.           printf("\n");
  105.  
  106.  } /* chiude l'else */
  107.        
  108. }   /* chiude il main */
  109.     
  110.  
  111.  
  112.  
  113.  
  114.