В первой статье я приготовил визуальную форму для программы расчета площади и объема фигур на Делфи. Настало время подумать о реализации самого решения. Это дело творческое. У каждого есть фантазия. Я не стал сильно осложнять и предположил, что будет шесть функций. Они решают непосредственно саму задачу.
Вот эти функции:
//площадь цилиндра
function sq_cylinder (r,h:Integer):Real;
begin
Result := 2*Pi*r*(h+r);
end;
//площадь полого цилиндра
function sq_pol_cylinder (r1,h,r2:Integer):Real;
begin
Result := 2*Pi*h*(r2-r1);
end;
//площадь шара
function sq_sphere (r:Integer):Real;
begin
Result := 4*Pi*sqr(r);
end;
//объем цилиндра
function v_cylinder (r,h:Integer):Real;
begin
Result := 2*Pi*sqr(r)*h;
end;
//объем полого цилиндра
function v_pol_cylinder (r1,r2,h:Integer):Real;
begin
Result := Pi*h*(r2-r1);
end;
//объем шара
function v_sphere (r:Integer):Real;
begin
Result := 4/3*Pi*r*r*r;
end;
Эти функции следует расположить в разделе implementation. У меня все завязано на кнопке Рассчитать. Значит само решение будет в TForm2.Button1Click. Воспользуюсь оператором Case. Он будет проверять индексы компонента ComboBox1. Также в Case будет else ShowMessage(‘Выберите фигуру!!!’); — исключение. Если фигура не выбрана, а рассчитать нажали, то будет сообщение.
Case выбрал значение. Записывает в Label4 результат: Label4.Caption:=’Выбран цилиндр. ‘ Дальше дело техники. Добавляем решение к выводу. Не буду подробно расписывать.
case ComboBox1.ItemIndex of
0:
begin
Label4.Caption:=’Выбран цилиндр. S=’ +
FloatToStr(sq_cylinder(StrToInt(Edit1.Text),StrToInt(Edit2.Text))) + ‘. Объем V=’+
FloatToStr(v_cylinder(StrToInt(Edit1.Text),StrToInt(Edit2.Text))) + ‘.’;
Edit3.Text:=’0′;
end;
Это если выбран Цилиндр. Дело в том, что индексы ComboBox начинаются с нуля. В нулевом значении индекса у меня Цилиндр. И так далее. Сам листинг нажатия кнопки на Делфи выглядит у меня следующим образом:
//расчет
procedure TForm2.Button1Click(Sender: TObject);
begin
case ComboBox1.ItemIndex of
0:
begin
Label4.Caption:=’Выбран цилиндр. S=’ +
FloatToStr(sq_cylinder(StrToInt(Edit1.Text),StrToInt(Edit2.Text))) + ‘. Объем V=’+
FloatToStr(v_cylinder(StrToInt(Edit1.Text),StrToInt(Edit2.Text))) + ‘.’;
Edit3.Text:=’0′;
end;
1:
begin
Label4.Caption:=’Выбран полый цилиндр. S=’ +
FloatToStr(sq_pol_cylinder(StrToInt(Edit1.Text),StrToInt(Edit2.Text),StrToInt(Edit3.Text)))+
‘. Объем V=’+ FloatToStr(v_pol_cylinder(StrToInt(Edit1.Text),StrToInt(Edit3.Text),StrToInt(Edit2.Text))) + ‘.’;;
end;
2:
begin
Label4.Caption:=’Выбран шар. S=’+ FloatToStr(sq_sphere(StrToInt(Edit1.Text)))
+ ‘. Объем V=’+ FloatToStr(v_sphere(StrToInt(Edit1.Text)))+’.’;
Edit2.Text:=’0′;
Edit3.Text:=’0′;
end;
else ShowMessage(‘Выберите фигуру!!!’);
end;
end;
И последнее, я добавил в события (Events) Onselect объекта ComboBox в Делфи вызов Button1Click. Решать будет программка даже если вы не нажмете кнопку, а просто выберите фигуру. Также обнуляются ненужные поля Edit2.Text:=’0′; и так далее.
. вычисление объема в делфи