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