Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вылетает ошибка, VS 03 
:(
    Опции темы
Grr
Дата 17.8.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2007

Репутация: нет
Всего: нет



Код

#include <iostream>
using namespace std;
/*Написать перегруженные шаблоны функций для нахождения корней линейного (a*x + b = 0) и 
квадратного (a*x2+b*x + c = 0) уравнений. Замечание: в функции передаются коэффициенты уравнений. */
float vichislenie (int a, int b, int c)
{
    float koren_1, koren_2, temp, d=0;
    temp = (b*b-4*a*c);
    for (; (d*d)<temp;)
    {
        d++;
    }
    d=0? koren_1 = (-b + d) / (2*a) : false;
    d>0? koren_2 = (-b - d) / (2*a) : false;
    return koren_1, koren_2;
}

void main()
{
    int a, b, c;
    cout<<"vvedite a, b, c\n";
    cin>>a; cin>>b; cin>>c; cout<<"\n\n";
    cout<<"korni uravneniya (a*x2+b*x + c = 0) : "<<vichislenie (a, b, c);
}

Пытаюсь написать для второго уравнения и вылетает ошибка на этапе выполнения. Помогите найти ошибку (-ки) пожалуйста.
PM MAIL   Вверх
bsa
Дата 17.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



вообще-то для вычисления корня можно использовать sqrt...
PM   Вверх
Fazil6
Дата 17.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



мда... ахереть... Жесть просто, а не функция...


PM MAIL   Вверх
_Michael
Дата 17.8.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: нет
Всего: 6



Код

.....
   return koren_1, koren_2;
}


Grr ты ж ведь два значения хочешь возвратить  smile 


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
Grr
Дата 17.8.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2007

Репутация: нет
Всего: нет



Ребята, я недавно начал учить. Что такое sqrt не знаю. И что такого в функции? Я рад бы сделать её лучше, но не знаю как smile

Добавлено через 1 минуту и 13 секунд
_Michael, да, корней два, по идее должно возвращать оба, если "д" больше нуля
PM MAIL   Вверх
_Michael
Дата 17.8.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: нет
Всего: 6



Да корней у квадратного уравнения действительно может быть два, но функция то в С возвращает только одно значение. Т-е таким макаром у тебя никак не выйдет. Тебе или надо выводить твои корни в консоль прямо в функции vichislenie  или ж передавать ей еще два дополнительных параметра - адреса переменных в которые ты будеш записывать полученные корни.


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
MAKCim
Дата 17.8.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Код

#define ANSWER_NO_SOLUTION      (1 << 0)
#define ANSWER_ONE_SOLUTION    (1 << 1)
#define ANSWER_TWO_SOLUTION    (1 << 2) 

struct answer {
    union {
        char array[2 * sizeof(double)];
        double x1, x2;
        double x;
    }
    int flags;
};

struct answer calculate(int a, int b, int c) {
    struct answer answer = {0};
    int d = b * b - 4 * a * c;
    if (d < 0) {
        answer.flags |= ANSWER_NO_SOLUTION;
        return answer;
    } else if (d == 0) {
        answer.flags |= ANSWER_ONE_SOLUTION;
        answer.x = (double) -b / (2 * a);
    } else {
        answer.flags |= ANSWER_TWO_SOLUTION;
        answer.x1 = (double) (-b + sqrt((double) d)) / (2 * a);
        answer.x2 = (double) (-b - sqrt((double) d)) / (2 * a);
    }
    return answer;
}


Это сообщение отредактировал(а) MAKCim - 17.8.2007, 12:54


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Grr
Дата 17.8.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2007

Репутация: нет
Всего: нет



_Michael, до обращений к памяти я ещё не дошёл) буду выводить в функции значит, спасибо smile
PM MAIL   Вверх
_Michael
Дата 17.8.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 23.6.2007
Где: з полонини

Репутация: нет
Всего: 6



Grr,   smile Не за что.
MAKCim, ето даже больше чем требовалось  smile 

Это сообщение отредактировал(а) _Michael - 17.8.2007, 12:58


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
bsa
Дата 17.8.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Grr @ 17.8.2007,  12:39)
Ребята, я недавно начал учить. Что такое sqrt не знаю. И что такого в функции? Я рад бы сделать её лучше, но не знаю как smile

Цитата(man 3 sqrt)
ИМЯ
       sqrt - вычисление квадратного корня

СИНТАКСИС
       #include <math.h>

       double sqrt(double x);

ОПИСАНИЕ
       Функция  sqrt()  возвращает неотрицательный квадратный корень аргумента
       x.  Функция завершается с ошибкой и присваивает errno значение  EDOM  в
       том случае, если x - отрицательное число.

КОДЫ ОШИБОК
       EDOM   x - отрицательное число.

СООТВЕТСТВИЕ СТАНДАРТАМ
       SVID 3, POSIX, BSD 4.3, ISO 9899

СМОТРИ ТАКЖЕ
       hypot(3)

PM   Вверх
hkklr
Дата 17.8.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



А зачем здесь вообще отдельная функция? Мне кажется(хотя я могу ошибаться), что здесь она только мешает. Почему бы не написать так:
Код

#include<iostream>
#include<cmath>
using namespace std;
void main()
{
   double a,b,c;
   cin>>a,b,c;
   if(a==0)
   {
       if(b==0)
       {
           if(c==0)
          {
              cout<<"Бесконечное число решений";
          }
          else
          {
              cout<<"Решений нет";
          }
       } 
       else
       {
           cout<<-c/b;
       }  
   }
    else
    {
        float d=b*b-4*a*c;
        if(d<0)
       {
           cout<<"Комплексные корни";
       }
       if(d==0)
       {
           cout<<-b/(2*a);
       }
       if(d>0)
      {
           cout<<(-b-sqrt(d))/(2*a)<<','<<(-b+sqrt(d))/(2*a);
      }
    }
}

Много, но зато надеюсь понятно smile

Добавлено через 48 секунд
В моём коде возможны ошибки - я не проверял.
PM MAIL   Вверх
Rockie
Дата 17.8.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Grr, глянь тут. И тут




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Grr
Дата 17.8.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2007

Репутация: нет
Всего: нет



bsa, спасибо, буду использовать библиотеку теперь. Только учительница может ругаться, что вперёд забежал)))

hkklr, это домашнее задание, где чётко нужно придержаться условия. Получу двойку, если найду оптимальнее, чем нужно) а хуже всего, что в перегруженных функциях нельзя использовать иф и свитч, с которыми эта и следующие д/з намного легче было бы выполнить. 
Rockie, тоже благодарю, только гуглю я с самого начала юзал smile))
PM MAIL   Вверх
hkklr
Дата 18.8.2007, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



Grr пишет:
Цитата

hkklr, это домашнее задание, где чётко нужно придержаться условия. Получу двойку, если найду оптимальнее, чем нужно) а хуже всего, что в перегруженных функциях нельзя использовать иф и свитч, с которыми эта и следующие д/з намного легче было бы выполнить. 

Да, я тебя понимаю... Что это за система обучения, где ставят двойки за оптимальное решение...  Все забывают про разумную достаточность. А почему нельзя использовать if и switch в перегруженных функциях? Это что, условие домашнего задания что ли?
PM MAIL   Вверх
bsa
Дата 18.8.2007, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



ну вместо if можно использовать operator?: Вместо свича тоже.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1141 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.