Главная страница
    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.48 MB
Время: 0.036 c
8-1091916682
negrila
2004-08-08 02:11
2004.11.07
Как узнать что в MemoryStream е?


4-1096526534
Muhsin
2004-09-30 10:42
2004.11.07
Запуск других приложений


1-1097601135
Grrey
2004-10-12 21:12
2004.11.07
ООП можно ли это сделать?


14-1097705686
Piter
2004-10-14 02:14
2004.11.07
Позор... Россия 1 - 7 Португалия


1-1098863309
aap
2004-10-27 11:48
2004.11.07
Как по имени класа найти компонент.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский