Лаба №3. Адресная арифметика и управление памятью [Вариант 4]

Вариант: 
4
Решение

 #include <windows.h>

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <conio.h>
 
int random (int x)
{
return rand()%x;
}
 
int Check(int x){
if (x>999999)
return 0;
if (x<0)
return 0;
 
return 1;
}
 
void main(){
int i,n;
double s=0,c=0;
int *p;
puts("Vvedite razmernost' massiva M[1..999999]:");
do{ //цикл проверки заполнен ли массив
while(!scanf("%d",&n) || !Check(n)){ //цикл проверки ввода значений
puts("Incorrect input. Try again.");
fflush(stdin);
}
 
p = (int *) GlobalAlloc(GMEM_ZEROINIT, n*sizeof(int));
if(GlobalSize(p)==1 || !GlobalSize(p)) //вывод сообщения в случае если массив пуст
puts("The file is empty. Probably not enough memory. Try again.");
 
else{
printf("GlobalAlloc allocated %d bytes\n", GlobalSize(p));
srand ( time(0) );
for (i=0; i<=n-1; i++) //цикл заполнения массива случайными числами
p[i]=random(10);
 
for (i=0; i<=n-1; i++){
c+=p[i]; //подсчёт суммы чисел
s+=(p[i]-c/n)*(p[i]-c/n); //нахождение выборочной дисперсии по формуле (1/n)*Sum((x[i]-avg)^2)
}
 
  for (i=0; i<=n-1; i++) //цикл вывода данных
printf("%d ", p[i]);
 
printf("\nSumma chisel : %f\n", c);
printf("Srednee arifmeticheskoe : %f\n", c/n);
printf("Viborochnaya dispersia : %f\n", s/n);
printf("SKO : %f\n", sqrt(s/n));
}
} while((GlobalSize(p)==1) || !p);
GlobalFree(p);
getch();
}
 
Файл с решением: 
Задание

 Массив размерностью M. Необходимо рассчитать среднее арифметическое по формуле и выборочную дисперсию по формуле , где n = M.