Напечатать таблицу значений функции заданной в виде графика. Ошибка - C (СИ)
Формулировка задачи:
Задача:
Напечатать таблицу значений функции заданной в виде графика(в приложении) при изменении аргумента от X начального до X конечного с шагом дельтаХ(исходные данные задать самостоятельно, так чтобы Xn, Xk включал все участки графика, а дельтаХ выбрать так чтобы в таблице было 10 строчек). Таблица должна иметь вид:
| x | f(x) |
| Xn | ... |
|... |... | 10 строк всего
|Xk | .....|
Я не до конца понял условие задачи.Получается пользователь сам высчитывает шаг, и вводит его... Я попытался написаль программу, которая выводит таблицу значений от Xn до Xk в 10 строк. Но у меня она не всегда выводит 10 строк. Понятно что не каждое число делится на 9 и тогда шаг округляется и условие не выполняется. Как сделать так чтобы он всегда выводил по 10 строчек.
#include <stdio.h>
#include <math.h>
void main()
{
double Xn,Xk, y,x, sh;
do
{printf("Введите X начальное=");
scanf("%lf",&Xn);
printf("\nВведите X конечное=");
scanf("%lf",&Xk);
if (Xn>=Xk) printf("\nX начальное должно быть больше X конечное\n" );
}
while ( Xn >= Xk );
sh=(Xk-Xn)/9.; //shag
printf("\n__________________");
printf("\n| x | f(x) |");
for (x=Xn; x <= Xk; x+=sh);
{
if (x<=-3.)
{
y=3.;
printf("\n| %8.3lf | %8.3lf |", x, y);
}
else
if (x>-3. && x<=3.)
{
y=3-sqrt(9-pow(x,2.));
printf("\n| %8.3lf | %8.3lf |", x, y);
}
else
if (x>3. && x<=6.)
{
y=-2*x+9;
printf("\n| %8.3lf | %8.3lf |", x, y);
}
else {
y=x-9;
printf("\n| %8.3lf | %8.3lf |", x, y);
}
}
printf("\n-----------------");
}Решение задачи: «Напечатать таблицу значений функции заданной в виде графика. Ошибка»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
void main()
{
double Xn,Xk, y,x, sh;
int i;
do
{printf("Введите X начальное=");
scanf("%lf",&Xn);
printf("\nВведите X конечное=");
scanf("%lf",&Xk);
if (Xn>=Xk) printf("\nX нач. должно быть меньше X кон.\n" );
}
while ( Xn >= Xk );
sh=(Xk-Xn)/9; //шаг
printf("\n┌──────────┬──────────┐");
printf("\nв”‚ x в”‚ f(x) в”‚");
for (i=1; i<=10; i+=1)
{
x=Xn+sh*(i-1);
if (x<=-3.)
{
y=3.;
printf("\n├──────────┼──────────┤");
printf("\nв”‚ %8.3lf в”‚ %8.3lf в”‚", x, y);
}
else
if (x>-3. && x<=3.)
{
y=3-sqrt(9-pow(x,2.));
printf("\n├──────────┼──────────┤");
printf("\nв”‚ %8.3lf в”‚ %8.3lf в”‚", x, y);
}
else
if (x>3. && x<=6.)
{
y=-2*x+9;
printf("\n├──────────┼──────────┤");
printf("\nв”‚ %8.3lf в”‚ %8.3lf в”‚", x, y);
}
else {
y=x-9;
printf("\n├──────────┼──────────┤");
printf("\nв”‚ %8.3lf в”‚ %8.3lf в”‚", x, y);
}
}
printf("\n└──────────┴──────────в”
Объяснение кода листинга программы
- Объединение двух строк с помощью оператора
||. - Использование функции scanf для ввода числовых значений.
- Вывод таблицы значений функции с помощью функции printf.
- Использование условных операторов if-else для определения диапазона значений функции.
- Использование математических функций, таких как sqrt и pow, для вычисления значений функции.
- Использование оператора
whileдля повторения ввода, пока значение X начального не станет больше значения X конечного. - Вычисление шага с помощью формулы (Xk-Xn)/9.
- Вывод заголовка таблицы с помощью функции printf.
- Использование цикла for для вычисления значений функции для каждого шага.
- Использование условных операторов if-else для определения типа графика функции.
- Вывод значений X и Y на экран с помощью функции printf.
- Использование символов
в”‹и┈для форматирования вывода таблицы. - Использование символа
в”‘для создания вертикального разделителя таблицы. - Использование символа
┈для создания горизонтального разделителя таблицы. - Использование символа
в”’для создания разделителя между значениями X и Y в таблице. - Использование символа
┈для создания разделителя между значениями Y в таблице. - Использование символа
в”‘для создания разделителя между значениями X в таблице. - Использование символа
┈для создания разделителя между значениями Y в таблице. - Использование символа
в”’для создания разделителя между значениями X в таблице. - Использование символа
┈для создания разделителя между значениями Y в таблице.