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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2013, 14:57   #1
Suarez777
 
Регистрация: 11.09.2013
Сообщений: 7
По умолчанию Ошибка в коде!!! Программа с функцией должна вычислять следующее уравнение: y=a/sqrt(b-1)

Код:
# include <iostream>
 # include <math.h>
 using namespace std;
 double Func( double s, double b);
 void main ()
 {
 int s, b, c=0;
 try
 {
 while(cin>>s>>b)
 {
 c=Func(s, b);
 cout<<"Func"<<c;
 }
 }
 catch(int b)
 {
 if(b==1)
 cout<<"\n sorry, it's the end";
 }
 cin.get();
 cin.get();
 }

 double Func( double s, double b)
 {
 if((b!=0))
 throw 2;
 return s/sqrt(b-1);
 }

Последний раз редактировалось Stilet; 02.10.2013 в 15:06.
Suarez777 вне форума Ответить с цитированием
Старый 02.10.2013, 15:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ошибка то какая? Компилятор ругается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2013, 15:29   #3
Suarez777
 
Регистрация: 11.09.2013
Сообщений: 7
По умолчанию

Компилятор не ругается, он не высчитывает значение того уравнения...не знаю почему(
Suarez777 вне форума Ответить с цитированием
Старый 02.10.2013, 15:58   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Так Вы небось вводите b, не равный 0. Тогда выкидывается throw. Да и тип переменных лучше сделать double.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.10.2013, 16:40   #5
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Suarez777 Посмотреть сообщение
Код:
# include <iostream>
 # include <math.h>
 using namespace std;
 double Func( double s, double b);
 void main ()
 {
 int s, b, c=0;
 try
 {
 while(cin>>s>>b)
 {
 c=Func(s, b);
 cout<<"Func"<<c;
 }
 }
 catch(int b)
 {
 if(b==1)
 cout<<"\n sorry, it's the end";
 }
 cin.get();
 cin.get();
 }

 double Func( double s, double b)
 {
 if((b!=0))
 throw 2;
 return s/sqrt(b-1);
 }
Странная у вас функция s/sqrt(b-1) совместно с условием. Область определения этой функции b != 1 и b > 0, так как прислав 1 вы получаете деление на ноль а для этого у вас исключения не предусмотрено.
А если по теме, то во первых у вас объявлены переменные с типом int в том числе и ответ, и вы получаете значение без дробной части, это помню кто то говорил здесь. Во вторых как я писал выше вам нужно изменить условие выброса исключения или лучше создать 2 перехватчик для того момента когда будет деление на 0 при b = 1. Вам бы другой критерий выбрать для окончания ввода.
Может это и чушь, но это моя чушь и я ее никому не отдам.

Последний раз редактировалось Shad0wF1rst; 02.10.2013 в 16:44.
Shad0wF1rst вне форума Ответить с цитированием
Старый 02.10.2013, 16:47   #6
Suarez777
 
Регистрация: 11.09.2013
Сообщений: 7
По умолчанию

Уважаемый Shad0wF1rst, Вы сможете мне помочь в решении проблемы сией?)
мои знания в С++ очень малы, поэтому мне не обойтись без Вашей помощи)

считает правильно, только когда b=1, выдает ошибку
Код:
# include <iostream>
 # include <math.h>
 using namespace std;
 double Func( double s, double b);
 void main ()
 {
 double c=0;
  try
  {
  c=Func(4, 5);
  cout<<"Func "<<c;
  }
 catch(int b)
 {
 if(b==1)
 cout<<"\n sorry, it's the end";
 }
 cin.get();
 cin.get();
 }

 double Func( double s, double b)
 {
  double a;
  a=s/sqrt(b-1);
  return a;
 }

Последний раз редактировалось Stilet; 02.10.2013 в 20:26.
Suarez777 вне форума Ответить с цитированием
Старый 02.10.2013, 19:59   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include <iostream>
#include <cmath>

using namespace std;

double Func(double x, double y);

int
main()
{
    double a, b;
    while (cin >> a >> b)
        try {
            cout << "Func: " << Func(a, b) << endl;
        } catch(int h) {
            switch(h) {
                case -1: cout << "not valid" << endl;
                    break;
                case 0: cout << "division by zero" << endl;
                    break;
                default: cout << "unknown error" << endl;
            }
        }
    cin.get();
    cin.get();
}

double
Func(double x, double y)
{
    if (fabs(y - 1) < 0.00001)
        throw 0;
    if (y < 1)
        throw -1;
    return x / sqrt(y - 1);
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.10.2013, 09:06   #8
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Suarez777 Посмотреть сообщение
Уважаемый Shad0wF1rst, Вы сможете мне помочь в решении проблемы сией?)
мои знания в С++ очень малы, поэтому мне не обойтись без Вашей помощи)

считает правильно, только когда b=1, выдает ошибку
После вашего поста BDA представил готовую программу, по этому явно моя помощь в этом плане не нужна. А насчет себя скажу что сам тоже ошибся с областью определения. Должно быть b > 1.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
где ошибка в коде? Программа на С АлинКО Помощь студентам 2 15.01.2012 14:03
Ошибка `sqrt' undeclared (first use this function) jasul Общие вопросы C/C++ 21 24.09.2011 13:57
программа которая должна вычислять суммы всех членов ряда постоянно получаетd в ответе 1.Что не так? mariew13 Помощь студентам 0 24.02.2011 20:15
ошибка в коде с функцией else beygul Помощь студентам 1 26.11.2010 16:34
Программа должна вычислять количество точек на границе круга heny Помощь студентам 9 05.03.2010 11:32