В задании нужно посчитать частоту попадания в заданный интервал, который пользователь вводит сам. Преподаватель сказал, что нужно динамическое выделение памяти, но для начала я не уверена, что выделила и освободила все правильно. Также сказал, что здесь переполнение:
double temp = random(a, b);
res[(int)(temp + b)]++;
Вот файлы полностью:
1. основная логика
// ввести интервал, найти частоту попадания
#include <stdio.h>
#include <stdlib.h>
#include "gen.h"
double random(double a, double b)
{
return (double) a + (double)rand() / RAND_MAX * (b - a); // a = -5; b = 5
}
void result(int num, double a, double b)
{
int i, n;
double *res;
res = (double*)malloc(((b - a ) + 1) * sizeof(double));// res[(b - a) + 1] = {0}; // 11
for (i = 0; i < num; i++)
{
double temp = random(a, b);
res[(int)(temp + b)]++; // 5
}
for (i = 0; i < (b - a) ; i++) // 10
{
printf("%d) - (%d) : %.4lf\n", i - b, (i - (b - 1)), ((double)res[i]/num)); // 5, 4
}
free(*res);
}
2. main
/*Написать генератор псевдослучайных чисел, распределенных на интервале[-5., 5.]
Подсчитать частоты попадания в каждый из интервалов длиной 1 при выборке 500000.
*/
#include <stdio.h>
#include "gen.h"
int main()
{
double a, b;
result( a, b, 500000);
printf ("[a.; b.]");
printf ("\na = ");
scanf ("%ld", a);
printf ("\nb = ");
scanf ("%ld", b);
result( a, b, 500000);
getchar();
return 0;
}