Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 14:48   #1
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию Задача на Си

Подскажите пожалуйста в чем ошибка и как исправить.
Неправильно считает
Код:
y= 1 - abs(sin(3 * x0));
Код:
/*Расчетно-графическая работа*/

/*Включаем описания функций стандартного ввода/вывода */
#include <stdio.h>
/*Включаем описания математических функций*/
#include <math.h>
/*Включаем описания функций консольного ввода/вывода*/
#include <conio.h>

double func(double x0) //Заголовок создаваемой   функции
{
double y; //Описание переменной y
  if (x0 < -1)
      y= 1 - abs(sin(3 * x0)); // Левая ветвь функции

  else if (x0 >= -1 && x0 <= 3)
      y = 3 - exp(2 * x0); // Средний участок функции

  else y = x0 / sqrt(1 + pow(x0, 2)); // Правая ветвь функции

return y; //Возвращаем результат
}


void main() //Главная функция программы
{
  clrscr(); //Очищаем экран

  double x0,x1,dx; //Описание переменных
  /*Вывод приветствия и приглашение ко вводу данных*/
  printf("Программа табуляции функции y(x) от x0 до x1 с шагом dx\
       \nВведите x0, x1 и dx: ");
  scanf("%lf%lf%lf", &x0, &x1, &dx); //Ввод данных

  while (x0 <= x1) //Цикл с предусловием
  /*Тело цикла*/
  {
     printf("\ny(%10.5lf) = %10.5lf", x0, func(x0));//Вывод текущего значения y
      x0+=dx;//приращение текущего x
  }
  printf("\nНажмите любую клавишу для выхода"); //предупреждение перед завершением
  getch(); //ждать нажатия клавиши
}
savra вне форума Ответить с цитированием
Старый 15.10.2009, 14:53   #2
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию

Вот сама функция
savra вне форума Ответить с цитированием
Старый 15.10.2009, 15:52   #3
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вы учитываете, что х0 д.б. в радианах?
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 15.10.2009, 16:05   #4
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию

вот это вывод

да, конечно НО в принципе не может так увеличиться при шаге 1.0. Причем при x0 = -4 -3 -2 получается 1, а при x0 = 3 получается -400

Последний раз редактировалось savra; 15.10.2009 в 16:08.
savra вне форума Ответить с цитированием
Старый 15.10.2009, 16:16   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

попробуйте вместо
Код:
abs
написать
Код:
fabs
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 15.10.2009, 16:24   #6
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию

Все по прежнему... выводит тоже самое
savra вне форума Ответить с цитированием
Старый 15.10.2009, 16:48   #7
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
 printf("\ny(%10.5lf) = %10.5lf", x0, func(x0));//Вывод текущего значения y
      x0+=dx;//приращение текущего x
попробуйте не экономить, а сделать по шагам, т.е
Код:
rez=func(x0);
printf("\ny(%10.5lf) = %10.5lf", x0, rez);
 x0+=dx;
и замените в функции х0 к примеру на х.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 15.10.2009, 16:55   #8
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

У вас вроде все правильно, только что проверил у себя на Visual C++ 2008. У вас какая среда разработки?

Цитата:
попробуйте не экономить, а сделать по шагам, т.е
Код:


rez=func(x0);
printf("\ny(%10.5lf) = %10.5lf", x0, rez);
x0+=dx;

и замените в функции х0 к примеру на х.
А какая разница?
profi вне форума Ответить с цитированием
Старый 15.10.2009, 17:14   #9
savra
search money
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 46
По умолчанию

Цитата:
А какая разница?
Все сделал... Действительно разницы нет...

Цитата:
У вас какая среда разработки?
Borland C 3.1

Думал может пути сбились, ну то есть либо не компилирует вообще, либо компилирует в одно место, а для отладки запускает из другого. Все проверил,настроил -толку 0.

Откомпилировал в C++ Builder 6, результат такой же...
savra вне форума Ответить с цитированием
Старый 15.10.2009, 17:26   #10
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

В общем разницы никакой, но иногда компиляторы глючат. Если никто не поможет, то после 21. Сейчас нет компилятора.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц