Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
Графтер   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
1-1098446830
Алексей Петухов
2004-10-22 16:07
2004.11.07
Clipboard


3-1097491658
Jann
2004-10-11 14:47
2004.11.07
запрос и результат


8-1091705142
анонимный
2004-08-05 15:25
2004.11.07
как проиграть .swf?


1-1098803527
Darrin
2004-10-26 19:12
2004.11.07
Передача ссылки на метод класса.


14-1098273465
Ega23
2004-10-20 15:57
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский