Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рассчет фактариала числа


Графтер ©   (2004-10-22 00:31:00) 

Помогите, как это можно представить на делфи ? Число вводится пользователем и заранее не известно.
фактариал числа, к примеру, 5 = 1*2*3*4*5


VMcL   (2004-10-22 08:27:00) [1]

P.S.
Чтобы можно было использовать бОльшие N:

function Fact(const N: Word): Extended;
var
 I: Integer;
begin
 Result := 1;
 for I := 2 to N do
   Result := Result * I;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 N: LongWord;
begin
 N := StrToInt(Edit1.Text);
 ShowMessage(Format('%u! = %g', [N, Fact(N)]));
end;


VMcL   (2004-10-22 08:24:00) [2]

>> Графтер  (22.10.04 00:31)

> Рассчет фактариала числа

Что такое "факт ариал", не знаю. А факт ориал можно рассчитать так:

// N = 0 .. 65
function Fact(const N: Byte): Int64;
var
 I: Integer;
begin
 Result := 1;
 for I := 2 to N do
   Result := Result * I;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 N: LongWord;
begin
 N := StrToInt(Edit1.Text);
 ShowMessage(Format('%u! = %u', [N, Fact(N)]));
end;


На форме:
* Edit1: TEdit
* Button1: TButton

> мозги не работают сооовсем

Когда заработают, возвращайся.


piople   (2004-10-22 08:19:00) [3]


> ЮЮ ©  

А ты чо собственно выеживаешься?! Это уже проблемы Графтер, я дал идейку, а вот умножение больших чилел это его проблемы!!!!!


ЮЮ   (2004-10-22 08:06:00) [4]

>Для тех кто в танке применять так:

Для тех, кто в бомбоубежише, так: ShowMessage(IntToStr(Fact( 1000)));


piople   (2004-10-22 08:00:00) [5]

Вообще есть очень хорошая штучка, рекурсией погоняют?! Слушал?! Если нет, то сунь пальцы в тески и бошку в унитаз!!! Если да то держи:

function Fact(n: Integer): Integer;
begin
if N = 1 then exit else result := N * Fact(N - 1);
end;


Для тех кто в танке применять так:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Fact(3)));
end;


Anatoly Podgoretsky   (2004-10-22 07:46:00) [6]

Тут слесарь требуется.


Palladin   (2004-10-22 01:23:00) [7]

Да я вообще не понял чего я тут распинался... Думал парень поучится хочет... я ошибался...


Gero   (2004-10-22 01:20:00) [8]


> мозги не работают сооовсем

Этим все сказано.

> Palladin ©

Тимур, не мучай человека...


Графтер   (2004-10-22 00:57:00) [9]

Все-такие не могу я врубить как мне отобразить значение lg4! ...
Делать нужно срочно, мозги не работают сооовсем, помогите, только как вывести lg4!, остальное сам начну изучать немного позже...


Palladin   (2004-10-22 00:52:00) [10]


> [3] Графтер   (22.10.04 00:43)

См. [5], первый абзац. Получай навыки комбинирования операторов.


Palladin   (2004-10-22 00:51:00) [11]

А вот для этого нужно думать... Вдуматся что есть цикл. Что в нем увеличивается, как можно использовать данную величину в вычислении факториала... так же неопбходимо знать про переменные... про возможные операции над ними... пытатся все это вместе увязать...

Как решить эту задачу без циклов с фиксированным заранее числом, факториал которого нужно получить.

Можно просто написать
Var
Res:Integer;
Begin
Res:=1*2*3*4*5;
End;


Можно развернуть выражение
Res:=1;
Res:=Res*2;
Res:=Res*3;
Res:=Res*4;
Res:=Res*5;

Теперь вспоминаем что цикл можно задать последовательным увеличением его переменной.

Var
i:Integer;
Begin
For i:=1 to 5 Do ...
End;


И теперь можно заметить что в выражении
Res:=1;
Res:=Res*2;
Res:=Res*3;
Res:=Res*4;
Res:=Res*5;


последний множитель переменной постоянно увеличивается на единицу и все это дело можно записать в виде цикла. А вот как, попробуй реализовать сам.

Если справишься, то, я думаю, тебе не составить подобным образом оформить более общую задачу: вычисление факториала N. Где N вводится с в TEdit. Хотя если вы работаете с консольными прилоениями то придется заглянуть в учебник и посмотреть операторы ввода/вывода паскаля.


Графтер   (2004-10-22 00:43:00) [12]

И, допустим, как представить такую конструкцию : корень из lg4!


Mihey_temporary   (2004-10-22 00:43:00) [13]

for i := N downto 1.....


Графтер   (2004-10-22 00:40:00) [14]

Да, молодой, да, немного имею...
Не могу понять как его задать нужно...


Palladin   (2004-10-22 00:35:00) [15]

Молодой человек (видимо очень), Вы о циклах понятие имеете?


Наверх

Титульная страница Поиск, карта сайта Написать письмо