Цель работы - закрепление навыков передачи параметров по указателю в функции
МЕНЮ
вычислить значение; (выбор функции {S(x), V(x), Y(x)} и задание значения)
табулировать; (выбор функции {S(x), V(x), Y(x)} и задание интервала и шага табуляции)
выполнить операцию; (выбор функции {S(x), V(x), Y(x)} и задание необходимых параметров)
выход.
Варианты операций:
записать значение выбранной функции в файл dat.txt с разделителем запятая;
рассчитать значение выбранной функции для заданных в файле dat.txt значений (каждое значение на новой строке);
построить график выбранной функции;
найти максимальное значение функции в заданном интервале методом "золотого сечения";
описать заданную функцию на заданном интервале (возрастающая/убывающая\монотонная, знакопеременная, симметричная);
сформировать массив точек (структура типа Point, использованная в работе 18), вычисленных по заданной функцией в заданном интервале и напечатать их, используя ранее разработанную функцию печати данных типа Point;
сформировать двухмерный массив аргументов и значений функции;
вычислить размах заданной функции по оси ординат и абцисс.
void plot(double x0, double x1, TFunc f)
{
int SCREENW=60, SCREENH=40;//размеры поля вывода в символах
char screen[SCREENW][SCREENH];
double x, y[SCREENW];
double ymin=0, ymax=0;
double hx, hy;
int i, j;
int xz,yz;
hx=(x1-x0)/(SCREENW-1);
for(i=0, x=x0;i<SCREENW; ++i, x+=hx){
y[i]=f(x); //расчет значений функции для каждой точки поля вывода графика
if(y[i]<ymin) ymin=y[i];
if(y[i]>ymax) ymax=y[i];
}
hy=(ymax-ymin)/(SCREENH-1);
yz=(int)floor(ymax/hy+0.5);
xz=(int)floor((0.-x0)/hx+0.5);
//построение осей и заполнение массива отображения пробелами
for(j=0;j<SCREENH; ++j)
for(i=0;i<SCREENW; ++i) {
if(j==yz && i==xz) screen[i][j]='+';
else if (j==yz) screen[i][j]='-';
else if (i==xz) screen[i][j]='|';
else screen[i][j]=' ';
}
//определение положения значения функции на поле вывода
for(i=0;i<SCREENW; ++i){
j=(int)floor((ymax-y[i])/hy+0.5);
screen[i][j]='*';
}
//печать массива символов
for(j=0;j<SCREENH; ++j){
for(i=0;i<SCREENW; ++i) putchar(screen[i][j]);
putchar('\n');
}
}