Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    C

    Salve e' la prima volta che posto qualcosa, spero che faccio tutto nella norma . Chiedo aiuto con questo programma C, non riesco a capire perchè si blocca alla verifica del mio file.





    questo è il programma nella sua interezza, ci sono anche gli altri prototipi di funzioni, ma sono solo perchè ho già fatto la bozza del programma finale che mi serve. Grazie mille in anticipo.
    PROGRAMMA
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define N 50
    #define M 100
    
    // Definizione del tipo Vettore e Stringa per array di reali e caratteri
    typedef double Vettore[N];
    typedef char Stringa[M];
    
    // Prototipi delle funzioni
    void read_vector(Vettore v, int* n, Stringa nome_file);
    void print_vector(Vettore v, int n);
    double max(Vettore v,int n);
    double min(Vettore v,int n);
    double mean(Vettore v, int n);
    double var(Vettore v, int n);
    int count_null(Vettore v,int n);
    void process_vector(Vettore v, int n1, int* n2);
    void save_vector(Vettore v, int n, Stringa nome_file);
    
    
    void read_vector(Vettore v, int *n, Stringa nome_file)
    {
        register int i;
        FILE *fp;
        int ret;
        fp=fopen(nome_file, "r");
    
    
    
        if(fp==NULL)
            printf("Errore nell'apewrtura del file.");
        else
        {
            ret=fscanf(fp, "%lf", n);
            if(ret!=EOF)
            {
                printf("\n Numero elementi vettore: %lf\n", n);
                if(*n>0)
                {
                    for(i=0; i<*n; i++)
                    {
                        fscanf(fp, "%lf", &v[i]);
                    }
                }
            }
            else
                printf("\nIl file e' vuoto!!!!\n");
    
            fclose(fp);
        }
    }
    
    void print_vector(Vettore v, int n)
    {
        register int i;
    
        printf("[");
        for(i=0;i<n;i++)
        {
            if(i<(n-1))
                printf("%lf,", v[i]);
            else
                printf("%lf", v[i]);
        }
        printf("]");
    }
    
    
    int main()
    {
        Vettore m;
        Stringa filename;
        int n;
    
        printf("Inserire il nome del file: \n");
        gets(filename);
    
        read_vector(m, &n, filename);
    
        print_vector(m, n);
    
    
        return 0;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quale è l'errore nello specifico? Cosa fa che non dovrebbe fare o viceversa quale è il comportamento anomalo che si presenta?
    Manca solo questo, prima di prendere il tuo programma e debuggarlo noi.
    RTFM Read That F*** Manual!!!

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,318

    Re: C

    Originariamente inviato da pain-killer1990
    Salve e' la prima volta che posto qualcosa, spero che faccio tutto nella norma
    Manca il titolo della discussione + tutto quello che ha evidenziato valia.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4

    presunti errori che ho fatto

    Allora il comportamento anomalo sta che qualsiasi file di testo passi, mi dice che non lo può aprire(mentre con una versione senza utilizzo di funzione il programma va in porto),il compilatore non mi da nessuno errore, quindi penso che sia un errore logico, che non riesco proprio a capire da cosa è dovuto . Io ho dedotto che ho sbagliato qualche cosa nella funzione, forse ho fatto qualche errore nell'implementazione.

    Grazie per la pazienza

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    attento che tu devi inserire il path completo del file se vuoi aprirlo.
    Ricorda: se tu metti solo il nome del file, il programma lo cerca nel path corrente, non lo trova e ritorna NULL (il solo modo che ha per dirti che non lo ha trovato).
    O vai a dire il path assoluto oppure ti devi mettere all'interno della cartella in cui è contenuto il file (spero sia questo il problema).
    RTFM Read That F*** Manual!!!

  6. #6
    Valia grazie mille dell'aiuto, era proprio quello che mi fregava. Ora è sorto un ulteriore problema, con la funzione process_vector(.....) dovrei teoricamente, e dico teoricamente perchè non me lo fa, eliminare gli zeri dal vettore, la funzione giù scritta è il secondo modo che mi sono inventato per eliminarlo ma non funziona...


    codice:
    * Esercitazione del 23/05/2011
    Corso di Elementi di Informatica
    Ing. Aerospaziale (E-Z)
    Prof. Vincenzo Moscato
    */
    
    // Preambolo
    
    // Direttive di compilazione
    // Include librerie e definizione costanti
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define N 50
    #define M 100
    
    // Definizione del tipo Vettore e Stringa per array di reali e caratteri
    typedef double Vettore[N];
    typedef char Stringa[M];
    
    // Prototipi delle funzioni
    void read_vector(Vettore v, int* n, Stringa nome_file);
    void print_vector(Vettore v, int n);
    double max(Vettore v,int n);
    double min(Vettore v,int n);
    double mean(Vettore v, int n);
    double var(Vettore v, int n);
    int count_null(Vettore v,int n);
    void process_vector(Vettore v, int n1, int* n2);
    void save_vector(Vettore v, int n, Stringa nome_file);
    
    
    void read_vector(Vettore v, int *n, Stringa nome_file)
    {
        register int i;
        FILE *fp;
        int ret;
        fp=fopen(nome_file, "r");
    
    
    
        if(fp==NULL)
            printf("Errore nell'apewrtura del file.");
        else
        {
            ret=fscanf(fp, "%d", n);
            if(ret!=EOF)
            {
                //printf("\nNumero elementi vettore: %d \n", *n);                               Ricorda di eliminare riga a salvataggio compiuto......stronzoneeeeeeeeeeee
                if(*n>0)
                {
                    for(i=0; i<*n; i++)
                    {
                        fscanf(fp, "%lf", &v[i]);
                    }
                }
            }
            else
                printf("\nIl file e' vuoto!!!!\n");
    
            fclose(fp);
        }
    }
    
    void print_vector(Vettore v, int n)
    {
        register int i;
    
        printf("[");
        for(i=0;i<n;i++)
        {
            if(i<(n-1))
                printf("%lf,", v[i]);
            else
                printf("%lf", v[i]);
        }
        printf("]\n");
    }
    
    double max(Vettore v, int n)
    {
        register int i;
        double max=v[0];
    
        for(i=0;i<n;i++)
        {
            if (v[i]>max)
                max=v[i];
        }
        return max;
    }
    
    double min(Vettore v, int n)
    {
        register int i;
        double min=v[0];
    
        for(i=0;i<n;i++)
        {
            if (v[i]<min)
                min=v[i];
        }
    
        return min;
    }
    
    
    double mean(Vettore v, int n)
    {
        register int i;
        double somma=0, media;
    
        for(i=0; i<n; i++)
        {
            somma+= v[i];
        }
        media=(somma/n);
    
        return media;
    }
    
    double var(Vettore v, int n)
    {
        register int i;
        double somma=0, var;
    
        for(i=0; i<n; i++)
        {
            somma+= pow((v[i]-mean(v, n)), 2);
        }
    
        var= (somma/n);
        return var;
    }
    
    int count_null(Vettore v,int n)
    {
        register int i;
        int somma_nulli=0;
    
        for(i=0;i<n;i++)
        {
            if(v[i]==0)
            {
                somma_nulli+=1;
            }
        }
    
        return somma_nulli;
    
    }
    
    void process_vector(Vettore v, int n1, int* n2)
    {
        register int i, j;
        int z=0, posiz;
    
        for(i=0; i<n1; i++)
        {
            if( v[i] == 0)
            {
                z++;
                posiz=i;
                printf("\t%d\t", posiz);
            }
            else
                printf("caxxo vuoi");
    
            for(j=posiz+1;  j<n1; j++)
            {
                v[j-1]=v[j];
            }
        }
        *n2= (n1 - z);
        printf("\n%d, %d, %d\n", *n2, n1, z);
    }
    
    int main()
    {
        Vettore magn, grav;
        Stringa filename, filename2;
        int n, m, j;
    
        printf("Inserire il nome del file contenente i valori dei campi magnetici: \n");
        scanf("%s", &filename);
    
        read_vector(magn, &n, filename);
    
        printf("Inserire il nome del file contenente i valori dei campi gravitazionali: \n");
        scanf("%s", &filename2);
    
        read_vector(grav, &m, filename2);
    
        printf("I valori dei campi magnetici e gravitazionali sono rispettivamente: \n\n");
    
        printf("Vet_magnetici: ");
        print_vector(magn,n);
        printf("\nVet_gravitazionali: ");
        print_vector(grav,m);
    
    
        printf("Il minimo e il massimo valore dei campi gravitazionali sono rispettivamente: \n %lf \t %lf \n", min(magn, n), max(magn, n));
    
        printf("Gli elementi nulli presenti nel campo magnetico/gravitazionale sono rispettivamente: %d \t %d\n", count_null(magn, n), count_null(grav, m));
    
        process_vector(grav, m, &j);
        print_vector(grav, j);
    
    
    
        system("PAUSE");
        return 0;
    }
    grazie mille per l'aiuto

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    altro aiutino: se ho capito bene tu hai un array fatto così

    1 0 0 1 4 5 7 8 1 0 10

    e vuoi

    1 1 4 5 7 8 1 10

    bene allora tu devi lavorare su due array, uno quello di partenza (con gli zeri), uno quello di uscita che ha dimensione UGUALE a quella dell'array di partenza (teoricamente puoi non avere uno zero nell'array e prenderli tutti) e che riempi via via che processi il primo array. OVviamente tieni conto anche della posizione tramite un altro indice (avevi già iniziato a farlo).
    RTFM Read That F*** Manual!!!

  8. #8

    risolto

    Ho risolto tutto grazie valia per i tuoi consigli sono stati utilissimi mi sento pienamente soddisfatto ...qui di seguito posto tutto il programma:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define N 50
    #define M 100
    
    // Definizione del tipo Vettore e Stringa per array di reali e caratteri
    typedef double Vettore[N];
    typedef char Stringa[M];
    
    // Prototipi delle funzioni
    void read_vector(Vettore v, int* n, Stringa nome_file);
    void print_vector(Vettore v, int n);
    double max(Vettore v,int n);
    double min(Vettore v,int n);
    double mean(Vettore v, int n);
    double var(Vettore v, int n);
    int count_null(Vettore v,int n);
    void process_vector(Vettore v, int n1, int* n2);
    void save_vector(Vettore v, int n, Stringa nome_file);
    
    //Svillupo funzioni
    
    //Funzione che legge il vettore da file
    void read_vector(Vettore v, int *n, Stringa nome_file)
    {
        register int i;
        FILE *fp;
        int ret;
        fp=fopen(nome_file, "r");
    
    
    
        if(fp==NULL)
            printf("Errore nell'apewrtura del file.");
        else
        {
            ret=fscanf(fp, "%d", n);
            if(ret!=EOF)
            {
                //printf("\nNumero elementi vettore: %d \n", *n);                               Ricorda di eliminare riga a salvataggio compiuto......stronzoneeeeeeeeeeee
                if(*n>0)
                {
                    for(i=0; i<*n; i++)
                    {
                        fscanf(fp, "%lf", &v[i]);
                    }
                }
            }
            else
                printf("\nIl file e' vuoto!!!!\n");
    
            fclose(fp);
        }
    }
    
    //Funzione che stampa a video il vettore letto precedentemente
    void print_vector(Vettore v, int n)
    {
        register int i;
    
        printf("[");
        for(i=0;i<n;i++)
        {
            if(i<(n-1))
                printf("%lf,", v[i]);
            else
                printf("%lf", v[i]);
        }
        printf("]\n");
    }
    
    //Funzione che ritorna il max tra gli elementi di un vettore
    double max(Vettore v, int n)
    {
        register int i;
        double max=v[0];
    
        for(i=0;i<n;i++)
        {
            if (v[i]>max)
                max=v[i];
        }
        return max;
    }
    
    //Funzione che ritorna il minimo tra gli elementi di un vettore
    double min(Vettore v, int n)
    {
        register int i;
        double min=max(v, n);
    
        for(i=0;i<n;i++)
        {
            if (v[i]<min)
                min=v[i];
        }
    
        return min;
    }
    
    //Funzione che ritorna la media degli elementi di un vettore
    double mean(Vettore v, int n)
    {
        register int i;
        double somma=0, media;
    
        for(i=0; i<n; i++)
        {
            somma+= v[i];
        }
        media=(somma/n);
    
        return media;
    }
    
    //Funzione che ritorna la varianza degli elementi di un vettore
    double var(Vettore v, int n)
    {
        register int i;
        double somma=0, var;
    
        for(i=0; i<n; i++)
        {
            somma+= pow((v[i]-mean(v, n)), 2);
        }
    
        var= (somma/n);
        return var;
    }
    
    //Funzione che ritorna il numero delle ricorrenze dei valori nulli all'interno di un vettore
    int count_null(Vettore v,int n)
    {
        register int i;
        int somma_nulli=0;
    
        for(i=0;i<n;i++)
        {
            if(v[i]==0)
            {
                somma_nulli+=1;
            }
        }
    
        return somma_nulli;
    
    }
    
    
    //Funzione che elimina gli 0 di un vettore e ritorna la nuova grandezza del vettore
    void process_vector(Vettore v, int n1, int* n2)
    {
        register int i, j=0, h;
        int z=0, posiz;
        Vettore m;
        for(i=0; i<n1;i++)
        {
            if(int(v[i])!=0)
            {
                m[j]=v[i];
                j++;
            }
        }
        for(h=0; h<j; h++)
        {
            v[h]=m[h];
        }
    
        *n2= j;
    }
    
    
    //Funzione che salva su file il nuovo vettore
    void save_vector(Vettore v, int n, Stringa nome_file)
    {
        register int i;
        FILE *fp;
    
        fp=fopen(nome_file, "w");
        if(!fp)
            printf("\nIl file non può essere salvato\n");
        else
        {
            fprintf(fp, "%d ", n);
            for(i=0; i<n; i++)
                fprintf(fp, "%lf ", v[i]);
        }
    }
    
    //Funzione coordinatrice
    int main()
    {
        Vettore magn, grav;
        Stringa filename, filename2, filename3, filename4;
        int n, m, j, k;
    
        printf("Inserire il nome del file contenente i valori dei campi magnetici: \n");
        scanf("%s", &filename);
    
        read_vector(magn, &n, filename);
    
        printf("Inserire il nome del file contenente i valori dei campi gravitazionali: \n");
        scanf("%s", &filename2);
    
        read_vector(grav, &m, filename2);
    
        printf("la media e la varianza dei valori del campo magnetico sono rispettivamente. \n %lf \t %lf \n", mean(magn, n), var(magn, n));
        printf("Il minimo e il massimo valore dei campi gravitazionali sono rispettivamente: \n %lf \t %lf \n", min(grav, m), max(grav, m));
    
        printf("Gli elementi nulli presenti nel campo magnetico/gravitazionale sono rispettivamente: \n %d \t\t %d\n", count_null(magn, n), count_null(grav, m));
    
        process_vector(magn, n, &j);
        process_vector(grav, m, &k);
    
    
        printf("Inserire i nomi dei file contenenti i valori dei campi magnetici e gravitazionali modificati: \n");
        scanf("%s %s", &filename3, &filename4);
        save_vector(magn, j, filename3);
        save_vector(grav, k, filename4);
    
        system("PAUSE");
        return 0;
    }
    grazie mille per l'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.