Читайте также:
|
|
unit factor;
Interface
uses Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
Type
TForm1 = class (TForm)
Label1: TLabel; Label2: TLabel;
Edit1: TEdit;
Button1: TButton;
procedure ButtonlClick(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
Var
Form1: TForm1;
Implementation
{$R *.DFM}
// рекурсивная функция
function factorial(n: integer): integer;
Begin
if n > 1
then factorial:=n*factorial(n-1) // функция вызывает сама себя
else factorial:= 1; // факториал 1 равен 1
end;
procedure TForml.ButtonlClick(Sender: TObject);
Var
k:integer; // число, факториал которого надо вычислить
f:integer; // значение факториала числа k
Begin
k:= StrToInt(Edit1.Text);
f:= factorial(k);
label2.caption:='Факториал числа '+Edit1.Text
+ ' равен '+IntToStr(f);
end;
End.
На рис. 12.2 приведены два диалоговых окна. Результат вычисления факториала, представленный на рис. 12.2, а, соответствует ожидаемому.
Рис. 12.2. Примеры работы программы вычисления факториала
Результат, представленный на рис. 12.2, б, не соответствует ожидаемому. Факториал числа 44 равен нулю! Произошло это потому, что факториал числа 44 настолько велик, что превысил максимальное значение для переменной типа integer, и, как говорят программисты, произошло переполнение с потерей значения.
Delphi может включить в исполняемую программу инструкции контроля диапазона значений переменных. Чтобы инструкции контроля были добавлены в программу, нужно во вкладке Compiler диалогового окна Project Options (рис. 12.3) установить флажок Overflow checking (Контроль переполнения), который находится в группе Runtime errors (Ошибки времени выполнения).
Рис. 12.3. Вкладка Compiler диалогового окна Project Options
Дата добавления: 2015-02-16; просмотров: 17 | Поможем написать вашу работу | Нарушение авторских прав |