Aiuto con linguaggio c

di il
9 risposte

Aiuto con linguaggio c

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;
}
}

9 Risposte

  • Re: Aiuto con linguaggio c

    E quale errore ti è stato segnalato?
  • Re: Aiuto con linguaggio c

    ...alla funzione leggiSequenza() passi l'argomento argc[j], anziché argv[j] .
  • Re: Aiuto con linguaggio c

    vuott ha scritto:


    ...alla funzione leggiSequenza() passi l'argomento argc[j], anziché argv[j] .
    Mi segna comunque errore...
  • Re: Aiuto con linguaggio c

    Ignazio84 ha scritto:


    Mi segna comunque errore...
    Sì, capisco.
    Devi aggiungere il prototipo della funzione chiamata, nonché v'è una differenza fra il tipo di valore passato nel secondo argomento della funzione chiamante leggiSequenza(argv[j], size1); ed il tipo di valore del secondo parametro della funzione chiamata:
    double* leggiSequenza(char* nomeFile1, int* size1)
  • Re: Aiuto con linguaggio c

    Ho capito il concetto, ma non saprei dove mettere mano nel codice, ho provato varie modifiche ma non ne vengo a capo :s
  • Re: Aiuto con linguaggio c

    Ancora non hai indicato l'errore ...
  • Re: Aiuto con linguaggio c

    Sì che l'ho indicato... L'errore è nel main, alla riga del double *val1
  • Re: Aiuto con linguaggio c

    QUALE errore? Hai una descrizione dell'errore?

    E comunque, hai fatto le modifiche indicate? Adesso hai un altro codice da mostrare?

    Dacci le informazioni che si chiedono altrimenti non è detto che potrai avere risposte ...
  • Re: Aiuto con linguaggio c

    Devi passare la variabile size per indirizzo
Devi accedere o registrarti per scrivere nel forum
9 risposte