Занести в массив значения функции - C (СИ)
Формулировка задачи:
Помогите, пожалуйста
надо занести в массив значения функции f(x, y) = (x + y)^2, 0<=x<=5, 0<=y<=3 и вывести его на экран.
Решение задачи: «Занести в массив значения функции»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x, double y) { return pow(x+y,2); }
int main (){
double x1=0,x2=5,y1=0,y2=3,dx=1,dy=1; //границы по x,y и шаги
int n=ceil((x2-x1+1)/dx)*ceil((y2-y1+1)/dy); //размерность массива, необязательно точная
double *fa=(double *)malloc(n*sizeof(double));
double x,y;
int i=0;
for (x=x1; x<=x2+1e-9; x+=dx)
for (y=y1; y<=y2+1e-9; y+=dy) fa[i++]=f(x,y);
int j;
for (j=0; j<i; j++) printf ("%.2lf ",fa[j]);
fflush (stdin);
getchar ();
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создаются переменные
x1,x2,y1,y2,dxиdy, которые задают границы для переменныхxиy, а также шаги для их перебора. - Вычисляется размерность массива
nс помощью функцииceil, которая округляет результат в большую сторону. Здесь(x2-x1+1)- это количество переменныхx, которые будут рассмотрены,(y2-y1+1)- количество переменныхy.dxиdyздесь используются как коэффициенты, на которые увеличивается значение переменной при каждом шаге. - Осуществляется выделение памяти под массив
faс помощью функцииmalloc. Здесьn*sizeof(double)означает, что будет выделена память под массив изnэлементов типаdouble. - Задаются начальные значения переменных
xиy, а также инициализируется счетчикiравным 0. - Происходит перебор всех значений
xиyв заданных границах с помощью двух вложенных циклов. При каждой итерации внутрь функцииf(x,y)передаются значенияxиy, и результат присваивается соответствующему элементу массиваfa. После каждой итерации счетчикiувеличивается на 1. - Выводится содержимое массива
faс помощью циклаfor, в котором переменнаяjитерируется от 0 доi-1. Каждый элемент массива выводится с помощью функцииprintf, а затем с помощьюfflushиgetcharсчитывается ввод пользователя, чтобы программа не закрылась сразу после вывода. - В конце программы возвращается 0, что означает успешное выполнение программы.