Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - file binari e file di testo
Forum - C/C++ - file binari e file di testo

Avatar
dodo154 (Normal User)
Newbie


Messaggi: 14
Iscritto: 07/02/2011

Segnala al moderatore
Postato alle 18:58
Mercoledì, 09/03/2011
Salve a tutti!
un piccolo consulto...
vi riporto questo esercizio:

Scrivere un codice in linguaggio C, opportunamente strutturato in funzioni, per gestire completamente il seguente problema:
1.Supposta l'esistenza di un file binario "primo.dat" contenente max 15 numeri reali;
2.Supposta l'esistenza di un file di testo"secondo.txt" contenente max 15 numeri interi;
si allochi dinamicamente un vettore di interi contenente la sequenza di numeri acquisiti dai due file, in modo che la stessa non contenga ripetizioni tenuto anche conto del fatto che i numeri reali saranno arrotondati.
N.B. per l'arrotondamento applicare l'algoritmo per cui se la parte decimale di un numero reale è <=0,5 il numero viene arrotondato all'intero più piccolo altrimenti all'intero più grande.

ho scritto il seguente codice ma non sono sicuro che vada bene e mi riporta degli errori, qualcuno sa darmi una mano...?
grazie in anticipo...

Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main()
  5. {
  6.   leggi();
  7.   return 0;
  8. }
  9.  
  10. void leggi(void)
  11. {
  12.   FILE *fp;
  13.   float ele1;
  14.   int *buff;
  15.   int *vett;
  16.   int conta=0;
  17.   int ele2, ele;
  18.  
  19.   fp=fopen("primo.dat","rb");
  20.   while(!feof(fp))
  21.   {
  22.     fread(&ele1,sizeof(float),1,fp);
  23.     conta++;
  24.   }
  25.   fclose(fp);
  26.  
  27.   fp=fopen("secondo.txt","r");
  28.   while(!eof(fp))
  29.   {
  30.     fscanf(fp,"%d",&ele2);
  31.     conta++;
  32.   }
  33.   fclose(fp);
  34. };
  35.  
  36.  
  37.  
  38. void alloca(int* vett, int* buff, int conta)
  39. {
  40.   float ele1;
  41.   int ele, ele2, elementi, i=0,j,k=0,temp;
  42.  
  43.   fp=fopen("primo.dat","rb");
  44.   vett=malloc(conta*sizeof(int));
  45.   while(!feof(fp))
  46.   {
  47.     fread(&ele1, sizeof(float),1,fp);
  48.     if((ele1-(int)ele1)<=0,5)
  49.     {
  50.       ele=(int)ele1;
  51.     }
  52.     else
  53.       ele=(int)ele1;
  54.     vett[i]=ele;
  55.     i++;
  56.   }
  57.   fclose(fp);
  58.  
  59.   fp=fopen("secondo.txt","r");
  60.   while(!eof(fp))
  61.   {
  62.     fscanf(fp,"%d",&ele2);
  63.     vett[i]=ele2;
  64.     i++;
  65.   }
  66.   elementi=conta;
  67.   for(i=0;i<conta;i++)
  68.   {
  69.     j=i;
  70.     elemento=vett[i];
  71.     for(;j<conta;j++)
  72.       if(elemento==vett[j+1]);
  73.            elementi--;
  74.   }
  75.   buf=malloc(elementi*sizeof(int));
  76.  
  77.   //ordinamento
  78.   for(i=0;i<elementi;i++)
  79.   {
  80.     for(j=0;j<elementi;j++)
  81.     {
  82.       if(buff[i]>buff[j+1])
  83.       {
  84.         temp=buff[i];
  85.         buff[i]=buff[j+1];
  86.         buff[j+1]=temp;
  87.       }
  88.     }
  89.     return buff;
  90.   }
  91. }


PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 10:52
Giovedì, 10/03/2011
Meglio che impari subito che dire "mi dà degli errori" non significa nulla. Precisa quali errori e dove.

1. Per i decimali non si usa la virgola, ma il punto...
2. L'if alla riga 48 presenta lo stesso codice anche nell'else. Qual è dunque la sua utilità?
3. Per leggere ed elaborare dati ci vuole un ciclo a condizione finale, mentre tu ne stai usando una a condizione iniziale. Se il file è vuoto, avrai un dato senza senso.
4. Il for alla riga 67 trascura degli elementi, poiché parte da i e non da 0. Il testo non dice che gli elementi dei file siano ordinati, né che siano unici.
5. Sempre nello stesso for, se decrementi elementi di 1, puoi anche andare a scartare un dato valido. Ad esempio, nell'array {1, 2, 2, 3, 4} rintracci un doppione nel secondo due e diminuisci elementi (ossia il numero degli elementi da considerare), escludendo 4; tuttavia 4 è un dato corretto.
6. Ci vorrebbe una lista.

PM