Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Рассчет фактариала числа   Найти похожие ветки 

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

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


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

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


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

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


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

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


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

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


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

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

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

Можно просто написать
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. Хотя если вы работаете с консольными прилоениями то придется заглянуть в учебник и посмотреть операторы ввода/вывода паскаля.


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


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

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


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

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


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


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

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

> Palladin ©

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


 
Palladin ©   (2004-10-22 01:23) [9]

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


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

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


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

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

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;


 
ЮЮ ©   (2004-10-22 08:06) [12]

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

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


 
piople ©   (2004-10-22 08:19) [13]


> ЮЮ ©  

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


 
VMcL ©   (2004-10-22 08:24) [14]

>>Графтер  (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

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

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


 
VMcL ©   (2004-10-22 08:27) [15]

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;



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.041 c
14-1098065200
Думкин
2004-10-18 06:06
2004.11.07
С днем рождения! 18 октября


3-1097223065
Akoli
2004-10-08 12:11
2004.11.07
Надобы текстовый файл в МЕМО поле фугануть


1-1098291292
Madze
2004-10-20 20:54
2004.11.07
Как изменит свойства TWebBrowser


14-1098296415
Серега
2004-10-20 22:20
2004.11.07
Математические модели


14-1098094155
TUser
2004-10-18 14:09
2004.11.07
Дот НЕТ