Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.01.2008, 02:35
lawer lawer вне форума
Прохожий
 
Регистрация: 24.01.2008
Сообщения: 4
Репутация: 10
Вопрос Мини прога работает. А всё равно есть одна странность.

Я только учусь по учебнику на делфи 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  
Старый 24.01.2008, 03:29
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Код:
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  
Старый 24.01.2008, 03:50
lawer lawer вне форума
Прохожий
 
Регистрация: 24.01.2008
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Rosenkrantz
Код:
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.

Спасибо за ответ. Для себя всё понял.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter