Я только учусь по учебнику на делфи 6.0 Там есть пример мини-калькулятора. Код указан был с ошибками. Я исправил и немного доработал. Прога полностью выполняет свои функции, но есть одна странность. При компиляции выводит предупреждение :
[Warning] calcU.pas(70): Variable 'Z' might not have been initialized.
С моим знанием англ - переменная Z могла быть неинициализирована. Строка 70 в коде
if Z >= 1.1e+38 then
Многие скажут забей всё равно ведь пашет, но нет хочу разобраться. Это плохо, если останется пробел в моих знаниях.
Вот сам код:
Код:
unit calcU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TfmExample = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
BbClose: TBitBtn;
edinput1: TEdit;
IbOutput: TLabel;
mmOutput: TMemo;
cbSign: TComboBox;
edinput2: TEdit;
procedure bbRunClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmExample: TfmExample;
implementation
{$R *.dfm}
procedure TfmExample.bbRunClick(Sender: TObject);
var
X,Y,Z: Real;
begin
{ Блокируем работу, если не введенны числа и не выбрано действие }
if (edInput1.Text='') or (edinput2.Text='') or (cbSign.Itemindex<0) then exit;
// Проверяем правильность ввода 1-го числа:
try // Начало защищённого блока
X := StrToFloat(Trim(edinput1.Text));
except // Обработка ошибки
ShowMessage('Ошибочная запись числа: ' + edinput1.Text);
edinput1.SelectAll;
exit;
end; // Конец защищённого блока
// Проверяем правильность ввода 2-го числа:
try // Начало защищённого блока
Y := StrToFloat(Trim(edinput2.Text));
except // Обработка ошибки
ShowMessage('Ошибочная запись числа: ' + edinput2.Text);
edinput2.SelectAll ;
exit;
end;
// Конец защищённого блока
// Всё правильно: вычисляем результат
case cbSign.ItemIndex of
0: Z := X + Y;
1: Z := X - Y;
2: Z := X * Y;
3: try
Z := X / Y; except
Z := 1.1e+38;// Бесконечность при делении на 0
end;
end;
// Показываем результат
IbOutput.Caption := FloatToStr(X) + cbSign.Items[cbSign.ItemIndex]+FloatToStr(Y)+'=';
if Z >= 1.1e+38 then
IbOutput.Caption := IbOutput.Caption+'бесконечность'
else
IbOutput.Caption := IbOutput.Caption+FloatToStr(Z);
mmOutput.Lines.Add(IbOutput.Caption);
// Очищаем ввод
edinput1.Text := '';
edinput2.Text := '';
cbSign.ItemIndex := -1;
end;
procedure TfmExample.FormActivate(Sender: TObject);
begin
edinput1.SetFocus;
Caption:='Мини-калькулятор';
end;
end.