Сглаживание вещественного массива - C (СИ)
Формулировка задачи:
Описать функцию Smooth3(A, N), выполняющую сглаживание вещественного массива A размера N следующим образом: каждый элемент массива заменяется на его среднее арифметическое с соседними элементами (при вычислении среднего арифметического используются исходные значения соседних элементов). Массив A является входным и выходным параметром. С помощью этой функции выполнить пятикратное сглаживание данного массива A размера N, выводя результаты каждого сглаживания.
Решение задачи: «Сглаживание вещественного массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void Smooth3(double A[], int N)
{
int j, m;
for(m = 1; m <= 5; m++){
printf("\nSmooth array after %d passage:\n", m);
for(j = 0; j < N; j++){
if(j == 0){
A[j] = (A[N - 1] + A[0] + A[1]) / 3.0;
printf("%g\t", A[j]);
}
if(j == N - 1){
A[j] = (A[N - 2] + A[N - 1] + A[0]) / 3.0;
printf("%g\t", A[j]);
}
if(j != 0 && j != N - 1){
A[j] = (A[j - 1] + A[j] + A[j + 1]) / 3.0;
printf("%g\t", A[j]);
}
}
}
}
int main()
{
int N, i;
double *p = NULL;
puts("Enter array size:");
scanf("%d", &N);
p = malloc(N * sizeof(p));
puts("Enter value of elements:");
for(i = 0; i < N && printf("p[%d] = ", i) && 1 == scanf("%lf", &p[i]); i++);
puts("Source array:");
for(i = 0; i < N; i++)
printf("%g\t", p[i]);
Smooth3( p, N);
return 0;
}
Объяснение кода листинга программы
- Включаются заголовочные файлы stdio.h и stdlib.h
- Определяется функция Smooth3, которая принимает два аргумента: массив A и его размер N.
- Внутри функции объявляются три переменные: j, m и A[].
- Задается цикл, который выполняется пять раз (от m = 1 до m <= 5).
- Внутри цикла выводится заголовок
Smooth array after m passage:и переменная m. - Задается второй цикл, который выполняется от j = 0 до j < N.
- Внутри второго цикла проверяется условие j == 0. Если это так, то значение A[j] заменяется на (A[N - 1] + A[0] + A[1]) / 3.0 и выводится на экран.
- Если условие j == N - 1 выполняется, то значение A[j] заменяется на (A[N - 2] + A[N - 1] + A[0]) / 3.0 и выводится на экран.
- Если условие j != 0 && j != N - 1 выполняется, то значение A[j] заменяется на (A[j - 1] + A[j] + A[j + 1]) / 3.0 и выводится на экран.
- После выполнения второго цикла, выводится символ новой строки.
- В функции main() запрашивается размер массива и сохраняется в переменной N.
- Массив выделяется с помощью malloc() и сохраняется в переменной p.
- Запрашивается ввод значений элементов массива с помощью scanf().
- Выводится исходный массив с помощью цикла for и функции printf().
- Вызывается функция Smooth3() с аргументами p и N.
- Программа возвращает 0, завершая свою работу.