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

Программа конвертирует фаренгейт в цельсий или наоборот. Перегрузить ввод. - C++

Восстановить пароль Регистрация
 
Dimsssss
0 / 0 / 0
Регистрация: 13.06.2013
Сообщений: 20
17.06.2013, 22:33     Программа конвертирует фаренгейт в цельсий или наоборот. Перегрузить ввод. #1
Всем привет! Столкнулся с некоторой трудностью, разбираясь с перегрузками. Пишу следующий код.
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
50
51
52
53
#include <iostream>
 
float CelFar (float);
float CelFar (int);
float FarCel (float);
float FarCel (int);
 
int main()
{int fareng=0;
int celciy=0;
int choose=0;
std::cout<<"Fahrengate or Celciy [F(1)-C(2)]\n";
std::cin>>choose;
std::cout<<"Enter temperature:\n";
if (choose == 1){
std::cin>>fareng;
float FarCel(fareng);
}
if (choose == 2){
std::cin>>celciy;           
float CelFar(celciy);
}
if (choose == 1)
std::cout<<"Your Fahrengate temperature was: "<<fareng<<". And its equal to "<<celciy<<" degrees of Celciy.\n";   
if (choose == 2)
std::cout<<"Your Celciy temperature was: "<<celciy<<". And its equal to "<<fareng<<" degrees of Fahrengate.\n";                                         
system("PAUSE");
}
 
float CelFar (float celciy)
      {
      float fareng;
      fareng = ((celciy * 9)/5) + 32;
      return fareng;
      }
float CelFar (int celciy)
      {
      float fareng;
      fareng = ((celciy * 9)/5) + 32;
      return fareng;
      }      
float FarCel (float fareng)
      {
      float celciy;
      celciy = ((fareng - 32) * 5)/9;
      return celciy;
      }
float FarCel (int fareng)
      {
      float celciy;
      celciy = ((fareng - 32) * 5)/9;
      return celciy;
      }
Прога конвертирует фаренгейт в цельсий или наоборот. В зависимости от выбора. Но в конечном итоге код выводит неправильные данные (вероятно я чего-то напутал). Хотелось бы вас послушать по этому поводу.
З.Ы. я рассмотрел в тестовой версии только 2 варианта выбора. Пожалуйста, не заостряйте внимание на нехватке третьего варианта
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2013, 22:33     Программа конвертирует фаренгейт в цельсий или наоборот. Перегрузить ввод.
Посмотрите здесь:

C++ Фаренгейт и Цельсий
программа переставляет слова в строке наоборот C++
Принадлежит ли круг целому кругу или наоборот C++
Функция Цельсий и Фаренгейт C++
Ошибки - цельсий в фаренгейт C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
17.06.2013, 22:38     Программа конвертирует фаренгейт в цельсий или наоборот. Перегрузить ввод. #2
Dimsssss, смари:

C++
1
2
3
4
5
6
float CelFar (int celciy)
      {
      float fareng;
      fareng = ((celciy * 9)/5) + 32;
      return fareng;
      }
тут, например, у тебя следующее: celciy имеет тип int, предположим, ты передашь функции двойку. Получаешь:
((2 * 9) / 5) + 32 = ((18) / 5) + 32 = (18 / 5) + 32 = 3 + 32 = 35. После этого 35 переводится во float и возвращается как результат.
Почему? да потому что целочисленная арифметика работает. убери нафиг int'ы из сигнатуры функций
Dimsssss
0 / 0 / 0
Регистрация: 13.06.2013
Сообщений: 20
17.06.2013, 22:59  [ТС]     Программа конвертирует фаренгейт в цельсий или наоборот. Перегрузить ввод. #3
блин, а как тогда перевести инт во флоат, чтобы примерное значение совпадало? : /
мне же необходимо перегружать функции.
за совет сразу ставлю тебе спасибо (в смысле уже поставил)
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
17.06.2013, 23:16     Программа конвертирует фаренгейт в цельсий или наоборот. Перегрузить ввод. #4
Dimsssss, тай, я не понимаю, цельсии что, требуют int? Я считаю, что int в твоей предметной области - вообще не к месту. Если хочешь его оставить - пользуйся преобразованием типов (за него обычно отрывают руки. А, да, и нога, ну и еще..., довольно, не будем продолжать)
C++
1
2
3
4
5
6
float CelFar (int celciy)
      {
      float fareng;
      fareng = ((static_cast<float>(celciy) * 9)/5) + 32;
      return fareng;
      }
Причем, конструкцию static_cast<float>(celciy) нужно использовать всегда, когда хочешь, чтобы celciy воспринимался как float, являясь при этом int'ом

Для справки, твою функцию можно укоротить в 3 раза)))
C++
1
2
3
4
float CelFar (int celciy)
{      
      return  ( ( static_cast<float>( celciy ) * 9 ) / 5 ) + 32;
}
Yandex
Объявления
17.06.2013, 23:16     Программа конвертирует фаренгейт в цельсий или наоборот. Перегрузить ввод.
Ответ Создать тему
Опции темы

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