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

Вниз

Помогите, пожалуйста, разобраться!   Найти похожие ветки 

 
Санёк77   (2007-05-08 20:14) [0]

Не врубаюсь, как с помощью операторов if и while посчитать факториал, например, 50! Скажите, кто знает, please!


 
{RASkov} ©   (2007-05-08 20:35) [1]

var F, J: Extended; K: Integer;
begin
 F:=50; J:=1; K:=1;
 while True do begin
  J:=J*K; INC(K);
  if K>F then Break;
 end;
 ShowMessage(FloatToStr(J));
end;


 
Санёк77   (2007-05-08 20:38) [2]

Thank"s! Вроде разобрался..


 
homm ©   (2007-05-09 11:04) [3]

> var F, J: Extended;

Огромная нарастающая ошибка. Нужно длинную арифметику применять.


 
{RASkov} ©   (2007-05-09 11:16) [4]

> [3] homm ©   (09.05.07 11:04)
> длинную арифметику

Это что такое?


 
Санёк77   (2007-05-20 16:39) [5]

У меня не получается посчитать факториал только с while:( Кто знает, помогите, пожалуйста..


 
begin...end ©   (2007-05-20 18:57) [6]

var
 n: Byte;
 r: Extended;
begin
 r := 1;
 while n <> 0 do
 begin
   r := r * n;
   Dec(n)
 end
end


 
homm ©   (2007-05-20 19:14) [7]

> [4] {RASkov} ©   (09.05.07 11:16)
> > [3] homm ©   (09.05.07 11:04)
> > длинную арифметику
> Это что такое?


Помоему именно так называеться когда цифры пакуються по 1 или 2 десятиразрядных цифры в байте. Например число 255 буде представлять уже не $ff, а $5520 или $050502.


 
begin...end ©   (2007-05-20 19:19) [8]

> homm ©   (20.05.07 19:14) [7]

Это называется BCD (двоично-десятичные числа).


 
jack128 ©   (2007-05-20 19:58) [9]

homm ©   (09.05.07 11:04) [3]
Огромная нарастающая ошибка. Нужно длинную арифметику применять.


Обычно так называют арифметические операции над целыми числами, разрядность которых превосходит разрядность процессора.. bcd тут никаким боком не идет.


 
homm ©   (2007-05-20 20:17) [10]

> Обычно так называют арифметические операции над целыми числами

Оказываеться правда задача нахождения факториала достаточно устойчива. Ошибка в 7-м знаке между single и extended для факториала 32-х. Я в шоке, мне казалось наоборот.


 
Anatoly Podgoretsky ©   (2007-05-20 20:49) [11]

> homm  (20.05.2007 19:14:07)  [7]

Ну ты пукнул :-)


 
Санёк77   (2007-05-21 16:42) [12]

Я уже всех достал, наверное, но у меня тут простейшая программа, в ней 3 кнопки: 1ая для оператора for, 2 для if, 3 для while. Должен считаться факториал 10. С for всё считается правильно, в остальных ошибка:-( Подскажите, где эта ошибка, плиз!

procedure TForm1.Button1Click(Sender: TObject);
var
n: integer;
i: Integer;
begin
n:=1;
for i:=1 to 10 do begin
 n:=n*i;
 end;
ShowMessage(FloatToStr(n));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
n: integer;
i: Integer;
begin
n:=1;
if i<=10 then begin
 n:=n*i;
 end;
ShowMessage(FloatToStr(n));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
n: integer;
i: Integer;
begin
n:=1;
while i<=10 do begin
 n:=n*i;
 end;
ShowMessage(FloatToStr(n));
end;


 
Сергей М. ©   (2007-05-21 16:49) [13]


> Я уже всех достал


"Тебя сразу пристрелить или желаешь помучаться ?" (с)


 
{RASkov} ©   (2007-05-21 16:51) [14]

> [12] Санёк77   (21.05.07 16:42)
n:=n*i;

Ну ты приколист... а i чему равно? Чем тебе мой пример или begin...end"а - для while не угодил?


 
Санёк77   (2007-05-21 16:53) [15]


>  Чем тебе мой пример или begin...end"а - для while не угодил?

Что такое Dec(n)? Я хочу, чтобы программа попроще была..


 
X9 ©   (2007-05-21 16:56) [16]

> [15] Санёк77   (21.05.07 16:53)
> Что такое Dec(n)?

Уменьшение аргумента на единицу. Эквивалентно n:=n-1


 
Санёк77   (2007-05-21 17:02) [17]

А понял, increase, decrease.. просто не получается именно с while или if отдельно считать, условие для if, while не могу понять..


 
{RASkov} ©   (2007-05-21 17:04) [18]


> [15] Санёк77   (21.05.07 16:53)

Уже ответили Dec(N, i) = N:=N-i; i - по умолчанию = 1;

> [17] Санёк77   (21.05.07 17:02)

для if
var I,N: Int64;
Label LStep, LEnd;
begin
 N:=10;
 I:=1;
LStep:
 if N>0 then begin I:=I*N; Dec(N); goto LStep; end else goto LEnd;
LEnd:
 ShowMessage(IntToStr(I));
end;

:)


 
{RASkov} ©   (2007-05-21 17:08) [19]

> просто не получается именно с while или if отдельно считать,
> условие для if, while не могу понять..

Ну так условие проверяешь, а менять ситуацию не хочешь, так как i у тебя не меняется все время 0.
А в примере с if у тебя вообще один раз все это делается...) Можно сразу написать N:=N*0; )


 
{RASkov} ©   (2007-05-21 17:11) [20]

Кстати в моем примере [18] метка LEnd собственно и не нужна...


 
ММК   (2007-05-22 00:36) [21]


> {RASkov}


goto вредно для здоровья:)


 
{RASkov} ©   (2007-05-22 00:42) [22]

> [21] ММК   (22.05.07 00:36)

Нисколько.... Водка в малых количествах тоже полезна....)


 
turbouser ©   (2007-05-22 00:56) [23]

Мда...



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

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

Наверх




Память: 0.52 MB
Время: 0.02 c
15-1179123133
boriskb
2007-05-14 10:12
2007.06.10
М. Руссинович: вредоносное ПО будет процветать и в Windows Vista


11-1160673450
ANTPro
2006-10-12 21:17
2007.06.10
Easy Debug


2-1179388526
Сергей_112233
2007-05-17 11:55
2007.06.10
простой вопрос


2-1179521069
NDF
2007-05-19 00:44
2007.06.10
Глупый Вопрос


3-1174498152
olevacho_
2007-03-21 20:29
2007.06.10
Определение пользователя и компьютера