Problem z zmienną - C

0

Podczas ćwiczeń z języka C pracowałem nad programem który generował tablę wypełnianą losowymi liczbami z pewnego zakresu. Mieliśmy w ramach programu policzyć wartość średnią, odchylenie standardowe itp.. I okazało się ,że przy liczeniu odchylenia konieczne było wyzerowanie zmiennej której używałem do trzymania wartości odchylenia. Problematyczna była funkcja Deviation. Aby odtworzyć błąd należy usunąć linijkę D=0; Czy ktoś mógłby mi wyjaśnić dlaczego tak się stało?



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

void MaxMin(int Tab[30]);
void Sigma(int Tab[30], float C, float D);
void Deviation(int Tab[30], float C);
void AverageValue(int Tab[30]);
void Random();

void printer(int Tab[30]);

int main()
{
    Random();
    return 0;
}
void Random()
{
    int A;
    int Tab[30];
    int I;
    srand(time(0));
    for(I=0;I<30;I++)
    {
        Tab[I]=rand()%101;
        A=rand()%2;
        switch(A)
        {
            case 1:
            Tab[I]=Tab[I]*(-1);
            break;
            default:
            break;
        }
    }
    printer(Tab);
    AverageValue(Tab);
}
void printer(int Tab[30])
{
    int i;
    for(i=0;i<30;i++)
    {
        printf("Random number No.%d is equal to %d \n",i, Tab[i]);
    }
}
void AverageValue(int Tab[30])
{
    int B;
    float C;
    for(B=0;B<30;B++)
    {
        C=C+Tab[B];
    }
    C=C/30;
    printf("Average value of this set of numbers is equal to %f\n", C);
    Deviation(Tab, C);
}
void Deviation(int Tab[30], float C)
{
    float D;
    int I;
    float temp;
    D=0;
    for(I=0;I<30;I++)
    {
        D=D+pow(Tab[I]-C,2);
    }
    D=D/30;
    D=sqrt(D);
    printf("Deviation is equal to %f\n", D);
    Sigma(Tab,C,D);
}
void Sigma(int Tab[30], float C, float D)
{
    int i;
    for(i=0;i<30;i++)
    {
        if(Tab[i]<(C-D) || Tab[i]>(C+D))
        {
            printf("%d Matches the given conditions\n", Tab[i]);
        }
    }
    MaxMin(Tab);
}

void MaxMin(int Tab[30])
{
    int n;
    int Min, Max;
    Max=Tab[0];
    Min=Tab[0];
    for(n=0;n<30;n++)
    {
        if(Min>Tab[n]){
            Min=Tab[n];
        }
        if(Max<Tab[n]){
            Max=Tab[n];
        }
    }
    printf("Maximal Value of this array is %d . Minimal Value is %d \n", Max ,Min);
}
1

Undefined Behaviour dlatego że próbujesz odczytać przy przypisywaniu z niezainicjalizowanej zmiennej D wartość więc będziesz czytał jakieś bzdury z pamięci. Należy, tak jak sam to zrobiłeś, zainicjalizować zmienną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1