Учебный центр "ANIT Texno Inform"
Опубликован: 25.06.2014 | Доступ: свободный | Студентов: 2596 / 851 | Длительность: 24:39:00
Специальности: Программист
Лекция 8:

Числа

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

Практика

Теперь, когда вы знаете про цифры почти всё, самое время закрепить материал на практике. Мы напишем программу, которая будет определять нормальный ли у нас вес, избыточный, или наоборот, недостаточный.

Общее признание получил так называемый индекс массы тела (ИМТ). Его расчет таков: разделите свой вес в килограммах на рост в метрах в квадрате. Пример: ИМТ = 68 кг / (1,72 м * 1,72 м) = 23. Эта формула хороша тем, что работает и для "малышей", и для "гулливеров", и для женщин, и для мужчин. Нормой считается ИМТ от 19 до 25. ИМТ меньше 19 - дефицит веса, 25-30 - избыточный вес, 30-40 - ожирение, более 40 - сильное ожирение.

Загрузите Lazarus с новым проектом. Если он у вас уже загружен - закройте проект и создайте новый. Сохраните проект в папку 08-01 под именем IMT, модуль главной формы назовите Main, а свойство Name формы переименуйте в fMain. Сделаем предварительные настройки формы. В свойстве Caption напишите:

ИМТ - Индекс массы тела
    

В свойстве BorderStyle установите bsDialog, а в Position - poDesktopCenter.

От пользователя нам нужно получить вес и рост, причем рост должен быть вещественным числом, а вес - целым. Например, вес 68, рост 1,72. Чтобы гарантировать правильность ввода, используем компонент TMaskEdit с вкладки Additional Палитры компонентов. Нам понадобятся два таких компонента, две метки TLabel и одна кнопка для вывода результатов. Оформите форму похожим образом:

Внешний вид программы IMT

Рис. 8.1. Внешний вид программы IMT

Измените свойство Name верхнего TMaskEdit на ME1, нижнего - на ME2. Имена остальных компонентов можно оставить по умолчанию. Нам еще понадобится изменить свойства EditMask обоих компонентов. Для ME1 установите EditMask:

0,00;1;_
    

Это нам гарантирует правильный ввод пользователем своего роста. Однако не забывайте, что на самом деле, пользователь будет вводить не число, а строку! К примеру, он введет "1,82" - это не вещественное число, как можно было бы подумать, а строка из цифровых символов. И нам ещё придётся преобразовать её в настоящее число. Для ME2 маска будет

###;0;_
    

Учитывая, что вес может быть и трехзначным целым числом.

Теперь нам осталось только сделать расчет. Правда, пока мы не будем делать проверку - ввел ли вообще пользователь в ME1 и ME2 что-нибудь? Оставим это на совести пользователя. О том, как делать "защиту от дураков", мы ещё поговорим в одной из следующих лекций.

Сгенерируйте событие нажатия на кнопку, и оформите его следующим образом:

procedure TfMain.Button1Click(Sender: TObject);
var
  s: string; //для формирования отчета
  rost: real; //для получения роста
  ves: Byte; //для получения веса
  imt: real; //для расчета ИМТ
begin
  //сначала преобразуем рост из строки в вещественное число:
  rost:= StrToFloat(ME1.Text);
  //теперь вес:
  ves:= StrToInt(ME2.Text);
  //теперь рассчитываем ИМТ:
  imt:= ves / (rost * rost);
  //в зависимости от результата формируем строку отчета:
  s:= 'Ваш ИМТ = ' + FormatFloat('#.##', imt) + #13;
  if imt < 19 then s:= s + 'У вас дефицит веса!'
  else if (imt >= 19) and (imt <= 25) then s:= s + 'У вас нормальный вес!'
  else if (imt > 25) and (imt <= 30) then s:= s + 'У вас избыточный вес!'
  else if (imt > 30) and (imt <= 40) then s:= s + 'У вас ожирение!'
  else if (imt > 40) then s:= s + 'Кошмар! У вас сильное ожирение!'
  else s:= 'Что-то пошло не так, результат не удалось рассчитать';
  //выводим результат на экран:
  ShowMessage(s);
end;
    

Программа получилась небольшая, но довольно полезная. Комментарии тут достаточно подробные, чтобы вы поняли, что тут к чему. Если вы планируете передавать программу друзьям, не забудьте отключить отладочную информацию для уменьшения размера файла программы IMT.exe (см. "Анатомия проекта" ).

< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Инга Готфрид
Инга Готфрид
Александр Скрябнев
Александр Скрябнев

Через WMI, или используя утилиту wmic? А может есть еще какие более простые пути...