С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
#1

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

17.06.2012, 07:40. Просмотров 2973. Ответов 9
Метки нет (Все метки)

Нужно описать функцию деления двух чисел с плавающей запятой, обработайте ошибку деления на ноль (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;  //нормальное завершение
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2012, 07:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция деления двух чисел с плавающей запятой (C++):

Произведение чисел с плавающей запятой - C++
Требуется реализовать произведение чисел с плавающей запятой, длинных чисел, к примеру 1234567890.9 и 1234567890.9, так что бы их результат...

Конвертация чисел с плавающей запятой в HEX - C++
Если несложно, исправьте, пожалуйста, код, чтобы и для дробей работало: #include &lt;iostream&gt; #include &lt;cctype&gt; using namespace...

Арифметика длинных чисел с плавающей запятой - C++
Добрый вечер, есть ли у кого исходники основных операций * / + - больших чисел с плавающей запятой? Например дано: char * a =...

Как найти остаток от деления чисел с плавающей точкой? - C++
Приветствую. Есть код: for(int i=0;i&lt;n;i++) { if(mas%2.0==0.0) { t++; } } Пишет что операция &quot;%&quot; невозможна,...

Вывод в консоль чисел с плавающей точкой: как сделать, чтобы после запятой было только два знака? - C++
как сделать что бы после запятой было только два знака? спасибо

Для двух целых чисел найти остаток и частное от целочисленного деления, частное от вещественного деления - C++
Уважаемые форумчане помогите пожалуйста с двумя программами. Это вопрос жизни и отчисления, я очень плохо понимаю программирование. В...

9
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
17.06.2012, 12:01 #2
В чем ошибка? Что пишет компилятор? И, пжлста, выделяйте код тэгами

Я увидел ошибку здесь
C++
1
catch (DivideByZeroError (пробел надо поставить)error) { //обработчик ошибки
1
David Sylva
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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;
}
1
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;  //нормальное завершение
}
}
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 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,"ошибка");
1
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
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 не копирует строку, а присваивает указателю адрес строковой константы.
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
18.06.2012, 13:58 #7
Цитата Сообщение от rangerx Посмотреть сообщение
TC не копирует строку, а присваивает указателю адрес строковой константы.
тогда надо посылать строку для которой уже выделена память
0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
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";  // всё верно
это разные вещи.
0
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"); 
}
Вот такой код пойдёт?
0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
18.06.2012, 17:58 #10
Цитата Сообщение от Dady Посмотреть сообщение
Вот такой код пойдёт?
#include <stdio.h> и using namespace std; можете убрать, вы это не используете. И исправьте DivideByZeroError на divide_by_zero в тексте комментария.
0
18.06.2012, 17:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2012, 17:58
Привет! Вот еще темы с ответами:

Вывод двух чисел после плавающей точки - C++
Собственно проблема. Никак не могу найти инструкцию для операции выводу, чтобы она выводила всегда 2 знака после десятичной точки. Выводить...

Операция с плавающей запятой - C++
float f=13565.0; float x=0.01; float z=f+x;

Числа с плавающей запятой - C++
есть программа которая подсчитывает сумму чисел, введенных с командной строки. к примеру С:\&gt; test.exe 1 2 3 &lt;ENTER&gt; что бы...

Программа деления двух чисел - C++
Программа должна проверять правильность введенных пользователем данных и, если они неверные (делитель равен нулю), выдвать сообщение об...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.