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

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

Войти
Регистрация
Восстановить пароль
 
zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
#1

Неявное преобразование переменных - C++

24.01.2011, 18:33. Просмотров 877. Ответов 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
#include <iostream>
 
using namespace std;
 
int main()
{
    int userCh;
    float tempCel, tempFahr;
    cout << "If you want convert temperature in Celsius to temperature in Fahrenheit push 1,\n";
    cout << "if you want convert temperature in Fahrenheit to temperature in Celsius push 2: ";
    cin >> userCh;
    switch(userCh)
    {
        case 1:
            cout << "Insert temperature in Celsius: ";
            cin >> tempCel;
            tempFahr = 9.0 /5.0 *tempCel +32.0;
            cout << "Temperature in Fahrenheit is: " << tempFahr << endl;
            break;
       case 2:
            cout << "Insert temperature in Fahrenheit: ";
            cin >> tempFahr;
            tempCel = (tempFahr -32.0) *5.0 /9.0;
            cout << "Temperature in Celsius is: " << tempCel << endl;
        break;
        default:
        {
            cout << "You inserted wrong symbol!" << endl;
        }
    }
    return 0;
}
Если все константы сделать целыми, то ветвление case 1:, будет работать не верно, будет отбрасывать, в формуле, 9/5*.
Подскажите, пожалуйста чем это связано, чтобы уложить у себя в голове и больше не сталкиваться с этой ошибкой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2011, 18:33     Неявное преобразование переменных
Посмотрите здесь:

Неявное преобразование типа - C++
Привет. Решаю задачу, не могу решить проблему. Есть класс 'time' и производный от него класс 'interval'. 1 - содержит поля h, m, s,...

Неявное преобразование типов - C++
Здравствуйте, определен класс: template&lt;typename T&gt; class Polynomial { public: explicit...

Неявное преобразование типов - C++
если я правильно понял, то explicit работает таким образом: class abc { int x; public: abc(int x_):x(x_){} ~abc(){} };

Неявное преобразование типов? - C++
есть класс Vector затем с его помощью создается класс Matrix (матрица - массив векторов) дошла очередь до операции умножения матрицы...

Объясните неявное преобразование в этом случае - C++
scoped_ptr p = new Object();То есть &quot;p&quot; неявно преобразовывается в указатель, но как не понятно. Это я встретил просматривая вот это. В...

Неявное восходящее преобразование при защищенном/закрытом наследовании - C++
Здравствуйте. Читаю книгу Стивена Прата по C++. Попался непонятный момент: в одной таблице (в таблице 14.1 в 6-й рус. редакции на стр....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
24.01.2011, 18:40     Неявное преобразование переменных #2
поясните что именно не работает, перевод из одной систему в другую правильный
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.01.2011, 18:49     Неявное преобразование переменных #3
Цитата Сообщение от zabuka Посмотреть сообщение
C++
1
tempFahr = 9 /5 *tempCel +32;
? Это
C++
1
tempFahr = 1 *tempCel +32;
, то есть
C++
1
tempFahr = tempCel +32;
. Кроме переполнения типа ничем не грозит, но и это вылетать не должно. У флоата диапазон не только больше, но у границ диапазона
C++
1
tempFahr = tempCel +32
; даёт
C++
1
tempFahr == tempCel
.
zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
24.01.2011, 19:02  [ТС]     Неявное преобразование переменных #4
Цитата Сообщение от panicwassano Посмотреть сообщение
поясните что именно не работает, перевод из одной систему в другую правильный
Например пользователь выбирает перевод Цельсия в Фаренгейты. То есть работает:
C++
1
2
3
4
5
6
case 1:
            cout << "Insert temperature in Celsius: ";
            cin >> tempCel;
            tempFahr = 9.0 /5.0 *tempCel +32.0;
            cout << "Temperature in Fahrenheit is: " << tempFahr << endl;
            break;
если формулу переписать как: tempFahr = 9 /5 *tempCel +32;
оставив тип переменной как float, то 9/5 *, не будет участвовать в расчете tempFahr. И когда пользователь введет 100, он получит результат 132, а не 212.
Я не понимаю почему так происходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2011, 19:06     Неявное преобразование переменных
Еще ссылки по теме:

Продемонстровать неявное преобразование типов: из целого в вещественный и обратно - C++
Помогите решить задачи по С++, никак не могу, вся надежда только на вас. 1. Даны вещественные и целые числа. Наглядно продемонстрируйте...

Как запретить компилятору неявное преобразование из числового типа в символьный? - C++
У мя возникла такая проблема: я ввожу данные типа char и мне надо быть уверенным, что я ввел именно символ, т.е. если я ввожу число мне...

Преобразование переменных - C++
Товарищи, подскажите пожалуйста как перевести из UnicodeString в char, const char и long? Гуглить не получается... Заранее благодарен! ...

Преобразование переменных - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { int j,i=5; string ss=5; char...


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.01.2011, 19:06     Неявное преобразование переменных #5
Потому что
C++
1
9/5
- это
C++
1
(int)(9/5)
. То есть, какой тип делимого, таков и частного, а округление всегда вниз.
Yandex
Объявления
24.01.2011, 19:06     Неявное преобразование переменных
Ответ Создать тему
Опции темы

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