|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Цитата:
Спасибо за ответ. Для себя всё понял. |