C/C++

Программа на СИ. Циклы с постусловием и предусловием

Напишите программу на языке Си для вычисления значений функций на всем диапазоне изменения аргумента с заданным шагом. Предусмотрите ввод всех исходных данных с клавиатуры
#include <stdio.h>
#include <math.h>

#define DEBUG

int main()
{
double a,x,dx;
double y,b,P = 1.0,S = 0.0;
char vvod;
int k = 0;
printf("Чтобы ввести все исходные данные с клавиатуры, введите \'k\': ");
scanf("%c", &vvod); /* для visual studio scanf_s */
if(vvod == 'k' || vvod == 'K')
{
printf("Введите a: ");
scanf("%lf", &a);
do
{
printf("Введите x (от -1.5 до 0.5): ");
scanf("%lf", &x);
} while(x < -1.5 || x > 0.5);
printf("Введите dx: ");
scanf("%lf", &dx);
}
else
{
a = 2.17;
dx = 0.1;
x = -1.5;
}

while(x >= -1.5 && x <= 0.5)
{
if(x >= 0.)
{
double kor = a*x + b*x;
if(kor < 0.0)
{
#ifdef DEBUG
printf("%d\n", __LINE__);
#endif /* DEBUG */
perror("Отрицательное подкоренное значение. \n");
return 1;
}
double del = a + x*x;
if(del == 0.0)
{
#ifdef DEBUG
printf("%d\n", __LINE__);
#endif /* DEBUG */
perror("Делить на ноль нельзя. \n");
return 1;
}
y = sqrt(kor) / del;
}
else /* x < 0. */
{
double f = fabs(b - x*x);
double l = a + x;
if(l <= 0.0)
{
#ifdef DEBUG
printf("%d\n", __LINE__);
#endif /* DEBUG */
perror("Неверное значение для логорифма. \n");
return 1;
}
double l2 = log(l);
if(l2 < 0.0)
{
#ifdef DEBUG
printf("%d\n", __LINE__);
#endif /* DEBUG */
perror("Неверное подкоренное значние. \n");
return 1;
}
if(a < 0.0)
{
#ifdef DEBUG
printf("%d\n", __LINE__);
#endif /* DEBUG */
perror("Неверное подкоренное значение. \n");
return 1;
}
double del2 = x + sqrt(a);
if(del2 == 0.0)
{
#ifdef DEBUG
printf("%d\n", __LINE__);
#endif /* DEBUG */
perror("Делить на ноль нельзя. \n");
return 1;
}
y = sqrt(f*l2) / del2;
}
if(y >= 0.0)
{
k++;
P *= y;
}
S += y;

b = 2.*x + a*a;
/* вывод значений */
printf("x: %lf, y: %lf, k: %d, P: %lf, S: %lf\n",x,y,k,P,S);
/* шаг цикла */
x += dx;
x = round(x * 10) / 10.0; /* округляем из-за неточности double */
}

return 0;
}
/* если не вводить вручную, возникает ошиба,
* если ввести a = 7, x = -1.5, dx = 0.1,
* получится нормальный вывод на всём промежутке
* функции.
*/
Марат Кадиков
Марат Кадиков
64 735
Лучший ответ
Арзамас Купатов Спасибо работает
Арзамас Купатов Хотя нет не получается вывести. Ввожу любое число, выходит вот это
Арзамас Купатов Спасибо! Я уже разобрался!