Ciao a tutti, mi trovo davanti questo esercizio di cui vi scrivo una parte del testo, nello svolgimento mi viene segnato un errore che però non riesco proprio a risolvere, potreste darmi una mano? Grazie!
Una sequenza di valori in virgola mobile rappresenta i valori assunti da una funzione nei punti di ascissa intera da 0 a n-1 con n uguale al numero di valori della sequenza.
Si definisca una funzione double* leggiSequenza(char* nomeFile1, int* size1) in grado di aprire il file nomeFile1 (parametro IN) e:
- leggere la prima riga contenente il numero di elementi che seguono;
- allocare un vettore di dimensioni adeguate;
- leggere la sequenza di numeri in virgola mobile ed inserirli nelle posizioni crescenti del vettore;
- ritornare il puntatore al vettore contenente i valori letti;
Il numero di elementi letti deve essere reso noto al chiamante la funzione tramite il parametro (OUT) size1.
Si definisca un programma in grado di:
- prendere da riga di comando i nomi di n file con il formato utilizzato per la funzione enunciata prima (contenenti il numero di elementi ed una sequenza di numeri in virgola mobile)
- per ciascuno dei file il cui nome è passato da riga di comando, leggere i valoori, inserirli in un vettore, stampare i valori, inserirli in un vettore.
Risolto:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char** argv)
{
int i,j;
int size1;
for(j=1;j<argc;j++)
{
printf("Leggo il file %d", j);
double *val1 = leggiSequenza(argc[j], size1); l'errore è quì
printf("La dimensione del file e': %d\n", size1);
}
return 0;
}
double* leggiSequenza(char* nomeFile1, int* size1)
{
int i;
FILE *fp1 = fopen(nomeFile1, "r");
if(fp1 == NULL) //controllo che il valore del file non sia nullo
{
fprintf(stderr, "Errore nell'apertura del file %s\n", nomeFile1);
fclose(fp1);
return NULL;
}
else
{
fscanf(fp1, "%d", &(*size1));
/*Alloco la memoria per il vettore*/
double* val1 = (double*)malloc((*size1)*sizeof(double));
if(val1 == NULL)
{
fprintf(stderr, "Aiuto non ho memoria...");
fclose(fp1);
return NULL;
}
for(i=0; !feof(fp1) && i<(*size1); i++)
{
fscanf(fp1, "%lf", &val1);
}
fclose(fp1); //chiusura del file
return val1;
}
}