Не вызывается функция на С
Реализую код, который генерирует одномерный массив случайных чисел, считает среднее арифметическое массива, а потом находит отклонения, возводит их в квадрат и суммирует. Часть кода я реализую через отдельную функцию (так надо). Сама проблема в том, что, доходя до функции, процесс обрывается, а идей, как исправить, нет, поэтому и обращаюсь к вам.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<windows.h>
#include<string.h>
float avarage = 0;
int array_1[20] = { 0 };
float V = 0;
float final = 0;
int N = 0;
void main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int O, N, A, B;
A = 1;
B = 10;
O = 0;
float sum = 0;
printf("Введіть кількість елементів масиву: ");
scanf("%d", &N);
srand(time(NULL));
for (int i = 0 ; i < N; i++)
{
array_1[i] = rand() % (B - A + 1) + A;
printf("%5d", array_1[i]);
O = array_1[i];
sum = sum + O;
}
avarage = sum / N;
printf("\nСереднє арифметичне масиву: %f", avarage);
void output(float avarage);
}
void output(float avarage)
{
printf("\nHello World");
for (int i = 0; i < N; i++)
{
V = array_1[i] - avarage;
printf("\n%f", V);
final = V * V + final;
}
printf("\n%f", final);
}
Ответы (2 шт):
Автор решения: Daniil Loban
→ Ссылка
Оставил в комментариях изменения в коде. (то чего нет в линуксе на работу не влияет, можно вернуть)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
//#include <windows.h> // нет в линуксе
#include <time.h> // для time
#include <stdlib.h> // для rand
#include <string.h>
float avarage = 0;
int array_1[20] = { 0 };
float V = 0;
float final = 0;
int N = 0;
void output(float avarage); // так делается объявление функции
int main(void)
{
//SetConsoleOutputCP(1251); // нет в линуксе
//SetConsoleCP(1251); // нет в линуксе
int O, A, B; // N объявлено глобально
A = 1;
B = 10;
O = 0;
float sum = 0;
printf("Введіть кількість елементів масиву: ");
scanf("%d", &N);
srand(time(NULL));
for (int i = 0 ; i < N; i++)
{
array_1[i] = rand() % (B - A + 1) + A;
printf("%5d", array_1[i]);
O = array_1[i];
sum = sum + O;
}
avarage = sum / N;
printf("\nСереднє арифметичне масиву: %f", avarage);
output(avarage); // вызов делается так
return 0;
}
void output(float avarage)
{
printf("\nHello World");
for (int i = 0; i < N; i++)
{
V = array_1[i] - avarage;
printf("\n%f", V);
final = V * V + final;
}
printf("\n%f", final);
}
Автор решения: Harry
→ Ссылка
Немножко математики:
А значит,
float sum = 0, sum2 = 0;
...
sum = sum + O;
sum2 += O*O;
и вместо вычисления отклонений -
printf("\n%f", sum2-sum*sum/N);
Вот примерный код:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<windows.h>
void main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int N;
float sum = 0, sum2 = 0;
printf("Введіть кількість елементів масиву: ");
scanf("%d", &N);
srand(time(NULL));
int A = 1, B = 10;
for (int i = 0, j ; i < N; i++)
{
j = rand() % (B - A + 1) + A;
printf("%5d", j);
sum += j;
sum2 += j*j;
}
printf("\nСереднє арифметичне масиву: %f", sum/N);
printf("\nКвадратичне вiдхилення: %f", sum2 - sum*sum/N);
}
