Форум программистов, компьютерный форум CyberForum.ru

Функция деления двух чисел с плавающей запятой - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
17.06.2012, 07:40     Функция деления двух чисел с плавающей запятой #1
Нужно описать функцию деления двух чисел с плавающей запятой, обработайте ошибку деления на ноль (zero division). Я начал делать, но не могу довести до ума, помогите пожалуйста!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{setlocale(LC_ALL,"Russian");
//Определение класса DivideByZeroError, используемого при 
// обработке исключения, генерируемого делением на нуль 
class DivideByZeroError { 
public:
DivideByZeroError (): message ("Деление на нуль") { } 
void printMessage () const {cout << message;}
private:
const char *message;
};
// Описание функции quotient. Используется, чтобы показать 
// генерацию исключения при ошибке деления на нуль 
float quotient
    (int numl, int num2)
{ if (num2 == 0)
  throw DivideByZeroError ();
  return (float) numl / num2;
}
//Управляющая программа 
 
{   cout << "Введите два целых числа для расчета их частного:";
int number1, number2; 
    cin >> number1 >> number2;
    try { // включает код, который может сгенерировать исключение 
        float result = quotient (numberl, number2);
        cout << "Частное равно " << result << endl;
    }
    catch (DivideByZeroErrorerror) { //обработчик ошибки
         cout << "ОШИБКА: ";
        error.printMessage (); 
        cout << endl;
    return 1;  // завершение при ошибке 
}
    return 0;  //нормальное завершение
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2012, 07:40     Функция деления двух чисел с плавающей запятой
Посмотрите здесь:

C++ Вывод двух чисел после плавающей точки
Операция с плавающей запятой C++
Числа с плавающей запятой C++
произведение чисел с плавающей запятой C++
C++ Конвертация чисел с плавающей запятой в HEX
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
17.06.2012, 12:01     Функция деления двух чисел с плавающей запятой #2
В чем ошибка? Что пишет компилятор? И, пжлста, выделяйте код тэгами

Я увидел ошибку здесь
C++
1
catch (DivideByZeroError (пробел надо поставить)error) { //обработчик ошибки
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
17.06.2012, 12:33     Функция деления двух чисел с плавающей запятой #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream> 
#include <cstring>
using namespace std; 
 
class MyException  //класс моё исключеие
{ 
public: 
    char str_what[80]; 
 
    MyException( char *s) // конструктор, с аргументом
    { strcpy(str_what, s); } 
}; 
 
int main() 
{   
    setlocale(0, "rus");
    int a, b; 
    try //try блок который мы хотим проконтролировать
    {
    cout << "Введите числитель и знаменатель " << endl; 
    cin >> a >> b; 
    if(!b) // если знаменатель равен 0 генерируется исключение
        throw MyException("Делить на 0 нельзя!" ); 
    else 
        cout << "Частное равно " << a / b << endl;  // иначе выводится результат вычисления
    } 
    catch (MyException e) // исключение перехватывается интсрукцией catch, создаётся объект класса исключений
    { cout << e.str_what << "\n"; } // выводится фраза 
 
    system("Pause");
 
    return 0;
}
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
17.06.2012, 12:36  [ТС]     Функция деления двух чисел с плавающей запятой #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{setlocale(LC_ALL,"Russian");
//Определение класса DivideByZeroError, используемого при 
// обработке исключения, генерируемого делением на нуль 
class DivideByZeroError { 
public:
DivideByZeroError (): message ("Деление на нуль") { } 
void printMessage () const {cout << message;}
private:
const char *message;
};
// Описание функции quotient. Используется, чтобы показать 
// генерацию исключения при ошибке деления на нуль 
float quotient
    (int numl, int num2)
{ if (num2 == 0)
  throw DivideByZeroError ();
  return (float) numl / num2;
}
//Управляющая программа 
 
{   cout << "Введите два целых числа для расчета их частного:";
int number1, number2; 
    cin >> number1 >> number2;
    try { // включает код, который может сгенерировать исключение 
        float result = quotient (numberl, number2);
        cout << "Частное равно " << result << endl;
    }
    catch (DivideByZeroError error) { //обработчик ошибки
         cout << "ОШИБКА: ";
        error.printMessage (); 
        cout << endl;
    return 1;  // завершение при ошибке 
}
    return 0;  //нормальное завершение
}
}
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
17.06.2012, 12:50     Функция деления двух чисел с плавающей запятой #5
Цитата Сообщение от Dady Посмотреть сообщение
class DivideByZeroError {
public:
DivideByZeroError (): message ("Деление на нуль") { }
void printMessage () const {cout << message;}
private:
const char *message;
};
1 класс не определяется в функции main
2 со строками через двоеточие нельзя надо делать strcpy(message,"ошибка");
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
17.06.2012, 14:16     Функция деления двух чисел с плавающей запятой #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <exception>
 
 
//------------------------------
class divide_by_zero : public std::exception
{
    public:
        const char* what() const throw()
        {
            return "divide_by_zero";
        }
};
 
 
 
//------------------------------
double division(double a, double b)
{
    if(b == 0)
        throw divide_by_zero();
 
    return a / b;
}
 
 
 
//------------------------------
int main()
{
    double a;
    std::cout << "a: ";
    std::cin >> a;
 
    double b;
    std::cout << "b: ";
    std::cin >> b;
 
    try
    {
        double c = division(a, b);
        std::cout << a << " / " << b << " = " << c << std::endl;
    }
 
    catch(divide_by_zero&)
    {
        std::cerr << "Error!!! Division by zero." << std::endl;
    }
}
Добавлено через 6 минут
Цитата Сообщение от Van111 Посмотреть сообщение
2 со строками через двоеточие нельзя надо делать strcpy(message,"ошибка");
TC не копирует строку, а присваивает указателю адрес строковой константы.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
18.06.2012, 13:58     Функция деления двух чисел с плавающей запятой #7
Цитата Сообщение от rangerx Посмотреть сообщение
TC не копирует строку, а присваивает указателю адрес строковой константы.
тогда надо посылать строку для которой уже выделена память
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
18.06.2012, 16:43     Функция деления двух чисел с плавающей запятой #8
Цитата Сообщение от Van111 Посмотреть сообщение
тогда надо посылать строку для которой уже выделена память
C++
1
2
3
//...
DivideByZeroError (): message ("Деление на нуль") { }
//...
"Деление на нуль" - является строковой константой, которая существует на протяжении всей работы программы.
message - указатель на константу.
message ("Деление на нуль") - присваивает указателю адрес строковой константы.
Другими словами, код ТС является абсолютно корректным.
P.S. не следует путать
C++
1
2
3
char s[] = "text1";
s = "text2";        // ошибка!!!
strcpy(s, "text2"); // так нормально
и
C++
1
2
const char* s = "text1";
s = "text2";  // всё верно
это разные вещи.
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
18.06.2012, 16:46  [ТС]     Функция деления двух чисел с плавающей запятой #9
Цитата Сообщение от rangerx Посмотреть сообщение
Другими словами, код ТС является абсолютно корректным.
P.S. не следует путать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
//Определение класса DivideByZeroError, используемого при 
// обработке исключения, генерируемого делением на нуль 
class divide_by_zero : public std::exception 
{ public:
        const char* what() const throw()
        {
            return "divide_by_zero";
        }                                   
};
double division(double a, double b)
{
    if(b == 0)
        throw divide_by_zero();
 
    return a / b;
}
int main()
{   double a;
    std::cout << "a: ";
    std::cin >> a; 
    double b;
    std::cout << "b: ";
    std::cin >> b; 
    try
    {
        double c = division(a, b);
        std::cout << a << " / " << b << " = " << c << std::endl;
    } 
    catch(divide_by_zero&)
    {
        std::cerr << "Error!!! Division by zero." << std::endl;
    }system("Pause"); 
}
Вот такой код пойдёт?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2012, 17:58     Функция деления двух чисел с плавающей запятой
Еще ссылки по теме:

Арифметика длинных чисел с плавающей запятой C++
C++ Число с плавающей запятой в строках
Для двух целых чисел найти остаток и частное от целочисленного деления, частное от вещественного деления C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
18.06.2012, 17:58     Функция деления двух чисел с плавающей запятой #10
Цитата Сообщение от Dady Посмотреть сообщение
Вот такой код пойдёт?
#include <stdio.h> и using namespace std; можете убрать, вы это не используете. И исправьте DivideByZeroError на divide_by_zero в тексте комментария.
Yandex
Объявления
18.06.2012, 17:58     Функция деления двух чисел с плавающей запятой
Ответ Создать тему
Опции темы

Текущее время: 11:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru