Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

Нахождение факториала циклом и рекурсией

Лабораторная работа №2

Возведение в степень и нахождение факториала

Дано число в степени вычислить число, полученое возведением данного числа в степень и вычислить сумму разрядов полученого числа. Например: число 5 в степени 3 равно 125, а сумма разрядов полученого числа будет равна 1+2+5=8.

 

 

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;

type

TForm1 = class(TForm)

BitBtn1: TBitBtn;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

var

n,m,stepen,dlina,summa:int64;

i:integer;

s:string;

begin

n:=strtoint(inputbox('','Введите чисто,возводимое в степень',''));

m:=strtoint(inputbox('','Введите степень в которую необходимо возвести число',''));

stepen:=n; // переменная stepen будет показывать чему равно число n в степени m

for i:=1 to m-1 do stepen:=stepen*n; // вычисление числа в степени

dlina:=length(inttostr(stepen)); // вычисление длинны полученного числа

label2.Caption:='Число '+inttostr(n)+' в степени '+inttostr(m)+' = ';

label4.Caption:=inttostr(stepen);

summa:=0;

for i:=1 to dlina do begin

summa:=summa+strtoint(copy(inttostr(stepen),i,1)); // в цикле берутся поочередно символы полученного числа и складываются

end;

label1.Caption:=inttostr(summa); // вывод результата

end;

end.

 

Дополнительно: Объединить в одну общую программу нахождение степени произвольного числа, нахождение факториала циклом и через рекурсию. При загрузке программы должна появляться загрузочная форма с приветствием. Организовать в программе меню с такими пунктами: Файл: выход, Вычисление: степень, факториал циклом, факториал рекурсией. При выборе подпункта из пункта меню Вычисление на форме появляется соответствующее действие названию пункта.

 

 

Нахождение факториала циклом и рекурсией

 

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Button1: TButton;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var i,fact:integer;

begin

fact:=1;

for i:=1 to strtoint(Edit1.Text) do begin

fact:=fact*i;

end;

Label3.Caption:='факториал='+floattostr(fact);

end;

end.

 

 

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Button1: TButton;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

var

Form1: TForm1;

function factor(N:integer):real;

implementation

function factor(N:Integer):real;

begin

if N=1

then Result:= 1

else Result:= N*factor(N-1);

end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Label3.Caption:=Floattostr(factor(strtoint(Edit1.Text)));

end;

 

end.