Programma C che ordina la parte decimale

di il
3 risposte

Programma C che ordina la parte decimale

Buonasera a tutti , sono nuovo, ma mi sembrate molto organizzati come forum!!!
Come da titolo devo fare un programma che :
/*
  Name: Ordina la parte decimale
  Description: 
  Con questo programma vogliamo ordinare la parte decimale di un elenco di 
  numeri presi dal file (ordina.txt),l' elenco verrà ordinato :
  1) Per grandezza della parte decimale dei vari numeri ,
  2) In 3 gruppi , rispettando il seguente schema:
        Gruppo:
               1) 2,01 3,23 9,13 (Numeri compresi da 0,00 e 0,30)
               2) 2,43 5,32 4,56 (Numeri compresi da 0,31 e 0,70)
               3) 4,71 7,98 2,89 (Numeri compresi da 0,71 e 0,99)
  Mostra risultato a video e aggiungi nel file di origine (ordina.txt)
*/

/* Prova con valori presi da vettore */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 5


int main()
{
    float vet[N];
    int i;
    vet[0]=7.23;
    vet[1]=5.48;
    vet[2]=5.90;
    vet[3]=6.32;
    for(i=0;i<N;i++)
     printf("%f\n",vet[i]);
    /* Qui pensavo di usare un selection sort per ordinare i numeri una volta 
       tolta la parte intera */
    
    system("PAUSE");
}
Visto che non riesco ad utilizzare le funzioni, le ho rimosse, e ho inserito un vettore con 5 valori diversi , in seguito, una volta che riesco ad ordinarle posso risolvere questo problema

Scusatemi se al primo messaggio vi chiedo un così grande aiuto, ma mi sono letto solo manuali, ma alla fine ancora non riesco ad applicare le varie cose, ho anche il libro: manuale C seconda edizione , ma li le cose mi sembrano ancora più complicate, vi ringrazio se potete aiutarmi, a presto!
Gianni

3 Risposte

  • Re: Programma C che ordina la parte decimale

    Usa la funzione modf. ti ritorna due valori la parte decimale e la parte intera.

    http://www.cplusplus.com/reference/clibrary/cmath/modf
  • Re: Programma C che ordina la parte decimale

    Grazie per l' aiuto , penso che con questa funzione riuscirò sicuramente a risolvere tutto, quando finisco vi posto il sorgente!!!

    EDIT:
    Purtroppo non ci riesco, ecco il mio codice, qualcuno può aiutarmi?
    /*
      Name: Ordina la parte decimale
      Description: 
      Con questo programma vogliamo ordinare la parte decimale di un elenco di 
      numeri presi dal file (ordina.txt),l' elenco verrà ordinato :
      1) Per grandezza della parte decimale dei vari numeri ,
      2) In 3 gruppi , rispettando il seguente schema:
            Gruppo:
                   1) 2,01 3,23 9,13 (Numeri compresi da 0,00 e 0,30)
                   2) 2,43 5,32 4,56 (Numeri compresi da 0,31 e 0,70)
                   3) 4,71 7,98 2,89 (Numeri compresi da 0,71 e 0,99)
      Mostra risultato a video e aggiungi nel file di origine (ordina.txt)
    */
    
    /* Prova con valori presi da vettore */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    #define N 100
    
    
    int main()
    {
        double vet,vett[N],parte_int,parte_dec,temp,fraz[N],dec[N];
        //char nf[50];
        FILE *f;
        int riemp=0 ;
        int i=0,j=1;
    
        printf("Prova modf\n");
          vet=2.3456;
          parte_dec= modf (vet,&parte_int);
          printf("%f ha come parte decimale %f\n",vet,parte_dec);
        printf("Inizio...\n");
    
      // printf("Digitare il nome del file: ");
      //scanf("%s",nf);
      //Togli il commento e modifica sotto quando finito
      //f=fopen(nf,"r");
       f=fopen("ordina.txt","r");
       if(f==NULL)
          printf("Errore caricamento\n");
       else {
       while(fscanf(f,"%f",&vett[riemp])!=EOF)
            riemp++;
          
       
        printf("Ho caricato %d numeri\n",riemp);
        fclose(f);
        printf("Ecco i numeri in ordine:\n");
        // Qui controllo ordine numeri
        while(i<riemp&&j<riemp)
        {
        fraz[i]= modf (vett[i],&dec[i]);
        fraz[j]= modf (vett[j],&dec[j]);
        
        /* if(fraz[i]>fraz[j])
         {
          temp=fraz[i];
          fraz[i]=fraz[j];
          fraz[j]=temp;  
          i=0;
          j=1; 
         }
         fraz[i]=fraz[i]+dec[i];
         fraz[j]=fraz[j]+dec[j];
         i++;
         j++;*/
         }
        for(i=0;i<riemp;i++)
        vett[i]=fraz[i];
         printf("%f\n",&vett[i]);
        
        
        /*f=fopen("ordina.txt","a");
        fprintf(f,"%f\n",vett);
        fclose(f); */
        }
        
        system("PAUSE");
    }
  • Re: Programma C che ordina la parte decimale

    Cosa non viene? ho visto che hai commentato la parte del codice dove i e j vengono incrementati, così il while va in loop infinito.
Devi accedere o registrarti per scrivere nel forum
3 risposte