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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2011, 12:33   #1
Patutol
 
Регистрация: 05.10.2011
Сообщений: 6
По умолчанию Как корректно дописать программу???

Была лабораторная работа, и я что-то не совсем понимаю почему мой код выдает всегда один и тот же результат (1.#INF00), подскажите как исправить ошибку...

Условие задачи:
Каждый студент должен написать программу, в которой имеется две функции: главная и пользовательская для вычисления выражения. При этом необходимо запросить у пользователя вещественное число и вывести значение функции при таком значении аргумента. Вариант функции y(x) приведен ниже:


Итак, мой код:

Код:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h>

using namespace std;

double funct (double xf)
{      
       double yf;
       if (xf<=-2) yf= xf/(xf-1);
       else
    {  if (xf<=3) yf=cos(2*xf)-1;
       else
       yf=pow((1-xf*xf),1.0/3);
    }
       return yf;
}

int main()
{    
    double x,y;  
    printf("Vvedite X: ");
    scanf("%f",&x);    
    y=funct(x);
    printf ("Poluchim: %f",y);
    system("PAUSE");    
    return EXIT_SUCCESS;
}
Patutol вне форума Ответить с цитированием
Старый 05.10.2011, 13:12   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Не знаю почему, но неработает функция
scanf("%f",&x); , если заменить на cin>>x;, то проблем не возникает.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 05.10.2011, 13:14   #3
CallManASM
Новичок
Джуниор
 
Аватар для CallManASM
 
Регистрация: 05.10.2011
Сообщений: 1
По умолчанию

Код:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h>

using namespace std;

double funct (double xf)
{      
       double yf;
       if (xf<=-2) yf= xf/(xf-1);
       else
    {  if (xf<=3) yf=cos(2*xf)-1;
       else
       yf=pow((1-xf*xf),1.0/3);
    }
       return yf;
}

int main()
{    
    double x,y;  
    printf("Vvedite X: ");
    scanf("%f",&x);    
    y=funct(x);
    printf ("Poluchim: %f",y);
    system("PAUSE");    
    return EXIT_SUCCESS;
}
---------------------------
ошибка %F < ошибка " не ставь !

будет не, значения а что типа текста!

Последний раз редактировалось Stilet; 12.10.2011 в 08:12.
CallManASM вне форума Ответить с цитированием
Старый 05.10.2011, 13:52   #4
Patutol
 
Регистрация: 05.10.2011
Сообщений: 6
По умолчанию

CallManASM
Что-то я тебя не совсем понял...
Patutol вне форума Ответить с цитированием
Старый 05.10.2011, 14:20   #5
Patutol
 
Регистрация: 05.10.2011
Сообщений: 6
По умолчанию

Поставил вообщем вместо scanf("%f",&x); scanf("%lf",&x);
Выходит так же как и с: cin>>x;

С 1ым и 2ым условием все круто, но 3е всеравно прога выполнять не хочет, и выдает все те же (1.#INF00)

Последний раз редактировалось Patutol; 05.10.2011 в 14:23.
Patutol вне форума Ответить с цитированием
Старый 05.10.2011, 15:48   #6
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Не идет т.к. (1-xf*xf) при х>3 отрицательное. Посмотрите справку по функции pow.
Правильное решение
yf=-pow(fabs(1-xf*xf),1.0/3);
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 05.10.2011, 16:39   #7
Patutol
 
Регистрация: 05.10.2011
Сообщений: 6
По умолчанию

Да ты прав, супер... спасибо Sweta

Тему можно прикрывать...

Подскажите мне пожалуйста еще 1 момент в подобной программе:
Условие:
Сделать тоже самое что и в предыдущей задаче, только указать еще диапозон...


Мой код:
Код:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h> 

using namespace std;

double F(double x)
{      
       double y;
       if (x<=-4) y= exp(x)+sin(x);
       else
    {  if (x<=3) y=pow(fabs(x)-3,1.0/3);
       else
       y=sin(atan(x));
    }
       return y;
}

int main()
{    
    double x,x1,i;
    printf("Vvedite X,Y: ");
    scanf("%lf%lf",&x,&x1);

    printf("Enter your step: ");
    scanf("%lf", &i);
    while(x<x1)
    {
    printf("\ny(%lf)=%lf", x, F(x));
	x+=i;
    }
    printf("\nPress any key to exit...");
    _getch();
}
Получается:



1ое и 3е условие роботают, во 2ом опять ошибка с записью формулы, не могу понять как исправить... (((

И еще такой вопрос, препод объяснял как делать через for, но я по болезни занятие пропустил, если есть возможность подскажите....

Последний раз редактировалось Stilet; 12.10.2011 в 08:15.
Patutol вне форума Ответить с цитированием
Старый 12.10.2011, 06:11   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Программист, не всегда матемик, это ,скорене переводчик. Вы привели общую формулу. Для решения на компе, её нужно модифицироть, т.е. Выражась математически - привести к 0-ю.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 12.10.2011, 07:19   #9
Patutol
 
Регистрация: 05.10.2011
Сообщений: 6
По умолчанию

Еще предложения???
Patutol вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дописать программу на С++ до 23.07 insar Фриланс 6 20.07.2011 10:16
Как дописать программу по классам? datileo Visual C++ 1 08.06.2011 10:52
Изменить программу-обратную матрицу в Паскале,чтобы работала корректно Novenkaja Помощь студентам 0 25.04.2011 20:18
Дописать программу Deshrefresh Помощь студентам 0 04.12.2010 13:31
дописать программу span80 Паскаль, Turbo Pascal, PascalABC.NET 0 20.05.2010 10:15