Реализовать гистограмму из результатов вычислений - C (СИ)
Формулировка задачи:
Здравствуйте господа! Возникла проблема в реализации задачи. Не пойму как собрать гистограмму из результатов вычислений. код работает (сюда прилагается) что необходимо сделать? читал некоторые варианты но не получилось.
предполагалось использовать массив для его заполнения и вывода. подскажите как и что тут будет правильнее сделать
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <time.h>
double getrand(double l)
{
return -log(1-(double)(rand())/RAND_MAX)/l;
}
int main()
{
printf("Enter N:");//размер
int i, N;
scanf("%d", &N);
printf("Enter l");//параметр распр
double lambda;
scanf("%lf", &lambda);
srand ( time(NULL) );
for(i = 0; i < N; i++)
printf("%lf ", getrand(lambda));
getch();
return 0;
}Решение задачи: «Реализовать гистограмму из результатов вычислений»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double getrand( double l);
int main ( void )
{
int i, j, n;
double lambda, k;
puts( "Enter n:" ); //размер
scanf("%d", &n);
puts("Enter l"); //параметр распр
scanf( "%lf", &lambda );
srand ( time(NULL));
for( i = 1; i < n; i++ ) {
puts("");
printf( "%lf ", k = getrand( lambda ) );
for( j = 0; j < (int)k; j++ )
if ( k >= 1 )
putchar('*');
}
puts("");
getchar();
return 0;
}
double getrand (double l)
{
return -log(1-(double)(rand())/RAND_MAX)/l;
}
Объяснение кода листинга программы
В этом коде происходит следующее:
- В функции
mainпользователю предлагается ввести размер выборкиnи параметр распределенияlambda. - Затем происходит инициализация генератора случайных чисел с помощью функции
srand(time(NULL)). - В цикле
forсiот 1 доn-1выводится на экран строка, представляющая собой гистограмму. - Для каждого элемента гистограммы вызывается функция
getrand(lambda), которая возвращает случайное число, экспоненциально распределенное с параметромlambda. - Это случайное число выводится на экран с помощью
printf(%lf, k). - Если случайное число больше или равно 1, то в соответствующую строку гистограммы добавляется символ
*с помощьюputchar('*');. - В конце программы пользователю предлагается нажать любую клавишу для выхода из программы.
- Функция
getrandиспользует встроенную функциюrand()для генерации случайного числа и функциюlog()для вычисления натурального логарифма. - Функция
getrandвозвращает результат вычисления-log(1-(double)(rand())/RAND_MAX)/l, который является случайным числом, экспоненциально распределенным с параметромlambda.