Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Гуру C++, подскажите как можно сделать код чище?

Артём Аноним Ученик (218), на голосовании 1 год назад
 // FootInchersLbs_in_IBM.cpp
#include
int main()
{
using namespace std; // Использование простарнства имен str (standart)

const double Ft_on_in = 12; // Коеффициент для переменной ft (В 1 футе 12 дюймов)
const double In_on_m = 0.0254; // Коеффициент для переменной in (В одном дюйме 0.0254 метра)
const double Lbs_in_kg = 2.2; // Коеффициент для переменной lbs (В одном килограмме 2.2 фунта)

double ft; // Рост в футах
double in; // Рост в дюймах
double lbs; // Вес в фунтах
double m; // Рост в метрах
double kg; // Вес в килограммах
double BMI; // Индекс массы тела

cout << "Введите ваш рост в футах и дюймах." << endl;
cout << "Футов: ";
cin >> ft;
cout << "Дюймов: ";
cin >> in;
cout << "Введите ваш вес в фунтах: ";
cin >> lbs;

in = in + ft * Ft_on_in; // Переводит рост в футах и дюймах в рост в дюймах
m = in * In_on_m; // Переводит рост в дюймах в рост в метрах
kg = lbs / Lbs_in_kg; // Переводит вес в фунтах в вес в килограммах
BMI = kg / (m*m); // Расчёт индекса массы тела (вес в кг разделить на квадрат роста в метрах)
cout << "Ваш индекс массы тела: " << BMI << endl;

getchar();
getchar();

return 0;
}
Голосование за лучший ответ
Help Err Ученик (188) 1 год назад
ИЗИ.

1. Можно объединить все коэффициенты в структуру, это удобно для обращения к ним

struct Constants {
const double Ft_on_in = 12; // Коеффициент для переменной ft (В 1 футе 12 дюймов)
const double In_on_m = 0.0254; // Коеффициент для переменной in (В одном дюйме 0.0254 метра)
const double Lbs_in_kg = 2.2; // Коеффициент для переменной lbs (В одном килограмме 2.2 фунта)
};

Использование:

Constants koeff;
in = in + ft * koeff.Ft_on_in; // Переводит рост в футах и дюймах в рост в дюймах
m = in * koeff.In _on_m; // Переводит рост в дюймах в рост в метрах
kg = lbs / koeff.Lbs_in_kg; // Переводит вес в фунтах в вес в килограммах

2. Можно сделать константу для сообщения пользователю:

const std::string msg = "Введите ваш рост в футах и дюймах.\n";
cout << msg;

Остальные переменные могут остаться без изменений.
Evgeny Мастер (1448) 1 год назад
Артем,
Как код так и формулировка задачи хорошие, что происходит понятно и особо не требует изменения .

Поставленная вами задача скорее философская нежели практическая, поэтому есть два пути, путь усложнения который приведет к чему то вот такому :
 #include "realisation.hpp"
using namespace bmi;
int main(){

UserInterface ui;
Height hfi;
Weight wlb;

ui >> hfi;
ui >> wlb;

BodyMassIndex bmi(hfi,wlb);

ui << bmi;

return 0;
}
или вот такому:
 #include "realisation.hpp" 
using namespace bmi;

int main(){
UserInterface ui;
User u;
ui >> u;
UserQuestionarie uq(u);

ui >> uq;
Database db;
db << uq;
ui << db.get(u);

return 0;
}

И путь разбиения на процедуры который скорее из разряда С и процедурного программирования . :
 #include  
using std::cin;
using std::cout;

// запрос данных у пользователя
double get_from_user(const std::string& message){
cout<< message;

double param;
cin>> param;

return param;
}
void report_to_user(const std::string& message, double d)
{
std::cout << message << d << std::endl;
}

// запрос веса пользователя
double get_weight_from_user(){
return get_from_user("Введите ваш вес в фунтах: ");
}

//запрос роста пользователя и перевод его в дюймы
double get_height_from_user(){
cout << "Введите ваш рост в футах и дюймах." << endl;
const double Ft_on_in = 12; // (В 1 футе 12 дюймов)
return get_from_user("Футов: ") * Ft_on_in +get_from_user("Дюймов: ") ;
}

/* Функция вычисления коэффициента массы тела в метрической системе
если рост и вес заданы в фунтах и дюймах
/*
double calculate_BMI(double height,double weight_lbs){
const double BMI_coeff = 1.0/(2.2 * 0.0254 * 0.0254); коэффициент для конверсии индекса массы тела в метрическую систему исчисления.
double anti_height = 1.0 / height;
return BMI_coeff * weight_lbs * anti_height * anti_height ;
}

int main(){

double height_in = get_height_from_stdin();
double weight_lbs = get_weight_from_stdin();
double BMI = calculate_BMI(height_in ,weight_lbs );

report_to_user("Ваш индекс массы тела: ",BMI);


return 0;
}

Лучше особо не стало.
Похожие вопросы