![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Я только учусь по учебнику на делфи 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. |
|
#2
|
|||
|
|||
|
Код:
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;Если cbSign.ItemIndex меньше 0 или больше 3, то значение Z не будет присвоено. Если вы уверены, что остальная логика программы всегда обеспечивает попадание переменной cbSign.ItemIndex в эти пределы, то можно не обращать внимания. Если нет - добавьте в case вариант else. |
|
#3
|
|||
|
|||
|
Цитата:
Спасибо за ответ. Для себя всё понял. |