Описать процедуру 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 служит для сглаживания массива.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д