E' corretto questo programma in C?

di il
5 risposte

E' corretto questo programma in C?

Testo:
Cattura.PNG
Cattura.PNG

Esecuzione:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double genInput (double a, double b, char *str);
void genRandom (double *x, double min, double max);
void distance(double a[], double b[], int size);
void mediavarianza (double a[], int size, double v);
int main() {
    int N;
    double v;
    srand(time(NULL));
    printf("Il programma verifica se si hanno eventi distribuiti temporalmente in modo casuale con frequenza v\n");
    do {
        printf("Inserisci la frequenza ");
        scanf("%lf",&v);
    } while (v <= 0);
    N = genInput (0, 10000, "il numero di eventi da generare");
    double t[N], x;
    int i;
    for (i = 0; i < N; i++) {
        genRandom (&x, 0.0, N/v);
        t[i] = x;
    }
    double DT[N];
    distance(t, DT, N);
    for (i=0; i<N ; i++) {
        printf("%lf\n",DT[i]);
    }
    mediavarianza (DT, N, v);
    
}

double genInput (double a, double b, char *str) {
    double N;
    do {
        printf("Inserisci %s ",str);
        scanf("%lf",&N);
    } while (N < a || N > b);
    return N;
}

void genRandom (double *x, double min, double max) {
    double a;
    a = (max - min)*rand()/((double)RAND_MAX)+min;
    *x = a;
}

void distance(double a[], double b[], int size) {
    int i, j, k;
    double min;
    b[size-1] = 0;
    for (i = 0; i < size - 1; i++) {
        for (j = i+1; j < size; j++) {
            if (a[i] - a[j] >= 0) {
                min = a[i] - a[j];
                break;
            }
        }
        for (k = 0; k < size; k++) {
            if (a[i] - a[k] >= 0 && a[i] - a[k] <= min && k != i) {
                min = a[i] - a[k];
            }
        }
        b[i] = min;
    }
}

void mediavarianza (double a[], int size, double v) {
    double u,s;
    double sum = 0.0;
    int i;
    for (i=0; i < size; i++) {
        sum += a[i];
    }
    u = sum/(size - 1);
    sum = 0.0;
    for (i=0; i< size; i++) {
        sum = (a[i] - u)*(a[i] - u);
    }
    s = sqrt(sum/(size-2));
    printf("La media degli elementi dell' array vale %lf, la deviazione standard %lf\n",u,s);
    printf("La deviazione relativa rispetto a mu vale: %lf,quella rispetto a sigma: %lf\n",(u - 1/v)/u,(s - 1/v)/s);
}
In particolare non sono sicuro della funzione creata per il punto 4 e per il fatto che le deviazioni relative spesso vengono negative (è una cosa normale questa?)

5 Risposte

  • Re: E' corretto questo programma in C?

    Ti sei dimenticato un +

    for (i=0; i<size; i++)
    sum += (a[ i ] - u)*(a[ i ] - u);

    La traccia è scritta veramente male. Cosa vuol dire il successivo? Possono esistere i doppioni, vanno quindi esclusi nella generazione dei valori? Banalmente potrebbero esserci due massimi, ad esempio
  • Re: E' corretto questo programma in C?

    Grazie delle correzione.
    Per quanto riguarda i testi purtroppo ho notato questa cosa anche io, non so che dirti. Comunque per quanta riguarda i doppioni, probabilmente il testo non richiede di distinguerli
  • Re: E' corretto questo programma in C?

    Vabbè allora come distanza farei
    
    void distance(double a[], double b[], int size) {
        int i, j;
        double successivo, max = a[0];
        for(i = 1; i < size, i++)
            if(a[i] > max)
                max = a[i];
        for (i = 0; i < size; i++) {
            successivo = max;
            for (j = 0; j < size; j++) 
                if (a[j] > a[i] && a[j] < successivo) 
                     successivo = a[j];
            b[i] = successivo - a[i];
        }
    }
    
  • Re: E' corretto questo programma in C?

    Ma il secondo ciclo non dovrebbe terminare prima di size - 1? in questo modo viene riempita anche l'ultima cella di b
  • Re: E' corretto questo programma in C?

    Non c'è scritto nella traccia di ordinare i risultati di modo che il DT nullo sia l'ultimo
Devi accedere o registrarti per scrivere nel forum
5 risposte