Працюємо за комп'ютером
Завдання. Створіть проект для розв'язування
задачi: Перед початком повені рівень води у річці
становив н м. Під час повенi кожну годину рiвень
води зростав на Р % від рівня попередньоï години.
Яким буде рiвень води через N годин після
початку повені? (Програма повинна перевіряти
правильність заповнення полів)
Answers & Comments
unit Main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
function CalculateWaterLevel(startLevel: Double; growthRate: Double; hours: Integer): Double;
function ValidateInput(): Boolean;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
function TForm1.ValidateInput(): Boolean;
var
startLevel, growthRate: Double;
hours: Integer;
begin
Result := True;
if not TryStrToFloat(Edit1.Text, startLevel) or (startLevel < 0) then
begin
ShowMessage('Please enter a valid starting water level (a non-negative number)');
Result := False;
Exit;
end;
if not TryStrToFloat(Edit2.Text, growthRate) or (growthRate < 0) then
begin
ShowMessage('Please enter a valid growth rate (a non-negative number)');
Result := False;
Exit;
end;
if not TryStrToInt(Edit3.Text, hours) or (hours < 0) then
begin
ShowMessage('Please enter a valid number of hours (a non-negative integer)');
Result := False;
Exit;
end;
end;
function TForm1.CalculateWaterLevel(startLevel: Double; growthRate: Double; hours: Integer): Double;
begin
Result := startLevel * Power((1 + growthRate / 100), hours);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
startLevel, growthRate: Double;
hours: Integer;
waterLevel: Double;
begin
if ValidateInput() then
begin
startLevel := StrToFloat(Edit1.Text);
growthRate := StrToFloat(Edit2.Text);
hours := StrToInt(Edit3.Text);
waterLevel := CalculateWaterLevel(startLevel, growthRate, hours);
Memo1.Lines.Add(Format('After %d hours, the water level will be %.2f meters', [hours, waterLevel]));
end;
end;
end.