Описать процедуру Smooth1, выполняющую сглаживание вещественного массива - C (СИ)
Формулировка задачи:
Описать процедуру Smooth1(A, N), выполняющую сглаживание вещественного массива A размера N следующим образом: элемент AK заменяется на среднее арифметическое первых K исходных элементов массива A. Массив A является входным и выходным параметром. С помощью этой процедуры выполнить пятикратное сглаживание данного массива A размера N, выводя результаты каждого сглаживания.
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<malloc.h>
void Func(float *a,float *b, int n)
{
int i;
float sum1=0;
for(i=1;i<=n;i++)
{
sum1+=a[i];
b[i]=sum1/i;
}
}
void main()
{
int i,n,j,k;
float *a,*b,sum1=0;
puts("vvedite razmernost'");
scanf("%d",&n);
a=(float*)malloc(n*sizeof(float));
for(i=1;i<=n;i++)
{
printf("vvedite a[%f]=",i);
scanf("%f",(a+i));
}
for(i=1;i<=n;i++)
{
printf("%4f",*(a+i));
}
puts("\n");
b=(float*)malloc(n*sizeof(float));
for(j=1;j<6;j++)
{
Func(a,b,n);
for(i=1;i<n;i++)
a[i]=b[i];
for(k=1;k<=n;k++)
{
printf("%0.2f \t",*(b+k));
}
puts("\n");
}
puts("\n");
}Решение задачи: «Описать процедуру Smooth1, выполняющую сглаживание вещественного массива»
textual
Листинг программы
#include <windows.h>
#include <stdio.h>
#include <conio.h>
void inpmas(int n, float * a);
void outmas(int n, float * a);
float Summ(int n, float * a);
void Smooth(int n, float * a);
int main()
{
int i,m,n;
char ch;
//Первоначальное выделение памяти
float * A = (float *)malloc(sizeof(float));
//Далее память изменяем realloc
do
{
printf("Enter num elements in massiv: ");
scanf("%d",&n);
if(!(A = (float *)realloc((void *)A,n*sizeof(float))))
printf("Allocation memory error\r\n");
else
{
inpmas(n, A);
printf("Enter num of smooth operations: ");
scanf("%d",&m);
for(i = 0; i < m; i++)
{
Smooth(n, A);
printf("\tSmooth %d\r\n",i + 1);
outmas(n, A);
}
}
printf("Y - new massiv input\r\n");;
ch = getch();
}
while(ch == 'Y' || ch == 'y');
return 0;
}
void inpmas(int n, float * a)
{
for(int i = 0; i < n; i++)
{
printf("Enter a[%02d] : ", i + 1);
scanf("%f",&a[i]);
}
}
void outmas(int n, float * a)
{
for(int i = 0; i < n; i++)
printf("%f\r\n",a[i]);
}
//Нахождение сцммы N элементов
float Summ(int n, float * a)
{
float sum = 0;
for(int i = 0; i <= n; i++)
sum += a[i];
return sum;
}
void Smooth(int n, float * a)
{
//Проходим массив сконца,
//это позволяет не вводить доп массив
for(int p,i = n - 1; 0 < i; i--)
{
p = Summ(i - 1,a);
a[i] = Summ(i - 1,a)/i;
}
//Первый эдемент не трогаем
}
Объяснение кода листинга программы
В данном коде реализована процедура Smooth1, которая выполняет сглаживание вещественного массива. Список действий:
- Ввод количества элементов в массив.
- Выделение памяти под массив.
- Ввод элементов массива с помощью функции inpmas.
- Ввод количества операций сглаживания.
- Повторение от 1 до m раз:
- Выполнение операции сглаживания с помощью функции Smooth.
- Вывод сообщения о выполненной операции сглаживания.
- Вывод текущего состояния массива с помощью функции outmas.
- Запрос на ввод нового массива.
- Повторение шагов 1-6 до тех пор, пока не будет введено 'Y' или 'y'.
- Завершение программы. Функция inpmas служит для ввода элементов массива. Функция outmas служит для вывода элементов массива. Функция Summ служит для нахождения суммы элементов массива. Функция Smooth служит для сглаживания массива.