Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38

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

24.01.2011, 18:33. Показов 1397. Ответов 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*.
Подскажите, пожалуйста чем это связано, чтобы уложить у себя в голове и больше не сталкиваться с этой ошибкой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2011, 18:33
Ответы с готовыми решениями:

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

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

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

4
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
24.01.2011, 18:40
поясните что именно не работает, перевод из одной систему в другую правильный
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.01.2011, 18:49
Цитата Сообщение от 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
.
1
 Аватар для zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
24.01.2011, 19:02  [ТС]
Цитата Сообщение от 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.
Я не понимаю почему так происходит.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.01.2011, 19:06
Потому что
C++
1
9/5
- это
C++
1
(int)(9/5)
. То есть, какой тип делимого, таков и частного, а округление всегда вниз.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2011, 19:06
Помогаю со студенческими работами здесь

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

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

Неявное преобразование типа данных через структуры
Помню что вроде был в С/С++ такой прием, который позволял посмотреть на содержимое переменной одного типа с точки зрения другого типа....

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru