Пример выполнения задания

 

Составить программу для подсчёта и сохранения в массиве 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   ∑(XiMX)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;

 

}