Пример выполнения задания
Составить программу для подсчёта и сохранения в массиве M(10) количеств зна-чений целочисленного массива X(N), N≤500, попадающих в интервалы с номерами от 1
до 10 шириной h=(Xmax-Xmin+1)/10, где Xmax=50 и Xmin=1 – максимальное и мини-
мальное значения в массиве X соответственно. Массив X заполнить случайными числа-ми с равномерным распределением в диапазоне от Xmin до Xmax, используя стандарт-ную функцию rand. Использовать также функцию srand, чтобы генерировать при каж-дом запуске программы новый набор случайных чисел, задавая в качестве аргумента функции srand новое значение - календарное время, установленное в системе (см. ниже комментарий в тексте программы).
Объявить Xmin, Xmax и h в разделе констант. Полученные результаты использо-вать для вывода в виде гистограммы:
«Практикум по программированию на языке C в среде VS C++»
Вычислить также для помещенных в массив X случайных чисел среднее значение
N | N | |||
∑Xi | ∑(Xi−MX)2 | |||
MX и дисперсию DX по формулам: MX= | i=1 | и DX= | i=1 | |
N | N | |||
Программа |
#include "stdafx.h"
#include "time.h"//для функцииtime #include "stdlib.h"//для функцийsrandиrand int _tmain(int argc, _TCHAR* argv[])
{
const unsigned Nmax=500, Xmax=50, Xmin=1, h=5; unsigned M[10], X[Nmax], t;
unsignedi, j, u, N;//N -количество случайных чиселfloatMX, DX;
//Ввод количества случайных чисел printf("EnterN:");
scanf("%u", &N);
//Получение числа секунд, прошедших
t=time( NULL ); //с1.1.1970до текущего момента//задание начального значения srand(t);//генератора случайных чисел
//Получение N случайных чисел в диапазоне //от Xmin до Xmax и сохранение в массиве X //(RAND_MAX - максимальное случайное число) for(i=0; i<N; i++)
X[i]= (double)rand()/(RAND_MAX + 1) * (Xmax - Xmin+1)+ Xmin;
//Накопление в ячейках массива M количеств //попаданий значений из массива X в интервалы
//[0..4], [5..9], …, [45..49] for (i=0; i<10; i++) M[i]=0; for (i=0; i<N; i++)
«Практикум по программированию на языке C в среде VS C++»
//Увеличить на 1 значение элемента массива M
M[(X[i]-Xmin)/h]++;//с индексом(X[i]-Xmin)/h
//Вывод результатов в виде гистограммы for(i=0;i<10;i++)
{
printf("%3d - %3d%3d ",i*h+1,(i+1)*h,M[i]); for (j=0;j<M[i]; j++)
printf("X"); printf("\n");
}
//Вычисление и вывод среднего значения
MX=0;
for (i=0; i<N; i++)MX=MX+X[i];
MX=(float)MX/N; printf("\nMX = %lf\n",MX);
//Вычисление и вывод дисперсии
DX=0;
for (i=0; i<N; i++)DX=DX+(X[i]-MX)*(X[i]-MX);
DX=(float)DX/N; printf("DX = %lf\n",DX);
return0;
}