Числа
Практика
Теперь, когда вы знаете про цифры почти всё, самое время закрепить материал на практике. Мы напишем программу, которая будет определять нормальный ли у нас вес, избыточный, или наоборот, недостаточный.
Общее признание получил так называемый индекс массы тела (ИМТ). Его расчет таков: разделите свой вес в килограммах на рост в метрах в квадрате. Пример: ИМТ = 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 и одна кнопка для вывода результатов. Оформите форму похожим образом:
Измените свойство 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 (см. "Анатомия проекта" ).