#cpp
Программа запрашивает рост в футах и дюймах. Нужно преобразовать рост в футах и дюймах в рост в дюймах (1 фут = 12 дюймов). Ввод роста должен производиться в формате (футы.дюймы). Максимальный размер дробной части не может превышать 11. Например, значение 5.12 не может быть принято, потому что в одном футе двенадцать дюймов, т.е. 5.12 футов == 6 футов. Я начал решать задачу, но столкнулся с проблемой: если принятое значение поместить в переменную типа float, то это значение нужно проверить на правильность прежде чем продолжить вычисления. Я использовал для этого функцию modff(), которая помещает целую и дробную части числа в две разные переменные. Как можно проверить дробную часть на правильность, если, например, 5.1 и 5.10 воспринимаются как одно число, но если речь идет о футах и дюймах, то это два разных числа. Ниже я привожу код, который написал. Помогите, пожалуйста, продолжить его или предложите другое решение. //calculate BMI #include#include int main() { using namespace std; const double Inches_per_foot = 12; float height; cout << "Enter your height in foots and inches: _____\b\b\b\b\b"; cin >> height; float foots ; float inches = modff(height, &foots); cout << foots << " - The integer part of number" << inches << " - The float part of number " << endl; if ( inches >= 0.12 ) { cout << "Error: Inches value must be less than 12" << endl; } else if ( ) { } else { cout << " foots = " << foots << ", inches = " << inches << endl; } return 0; }
Ответы
Ответ 1
#include#include #include int main() { using namespace std; string input{}; int foots{}; int inches{}; cout << "Enter your height in foots and inches: _____\b\b\b\b\b"; while (true) { cin >> input; float foots; //float inches = modff(height, &foots); int pos = input.find_first_of('.'); if (pos > 0) { string sfoots = input.substr(0, pos); string sinches = input.substr(pos + 1); foots = atoi(sfoots.c_str()); inches = atoi(sinches.c_str()); } else { if (input.size() > 0) { foots = atoi(input.c_str()); } } if (inches > 11) { cout << "Wrong inches. Retype height in foots and inches" << endl; cout << "Enter your height in foots and inches: _____\b\b\b\b\b"; } else { cout << foots << " - The integer part of number " << inches << " - The float part of number " << endl; cout << "The size in inches:" << foots * 12 + inches< Ответ 2
Если вы видите число с точкой, то это не значит, что тип — float. Вы имеете дело с двумя целыми значениями (футы и дюймы), и хранить их надо как два целых значения. К слову, запись футов и дюймов через точку — неверная. Если вы встретите надпись "5.12 футов", то это означает "5 футов и 12∕100 фута", а вовсе не "5 футов и 12 дюймов". "5 футов и 12 дюймов" традиционно записываются как "5´12˝" с вариациями символов и пробелов.
Комментариев нет:
Отправить комментарий