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

Вниз

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

 
Санёк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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.047 c
2-1179409650
Тимоха
2007-05-17 17:47
2007.06.10
цвет в итеме


2-1179826215
pohil
2007-05-22 13:30
2007.06.10
Flash и Dephi


15-1177890843
Бедный_Чел
2007-04-30 03:54
2007.06.10
Нужен windows сервер


1-1174567523
Виталий Панасенко
2007-03-22 15:45
2007.06.10
Использование ZLib


3-1174464801
nick_van_rijn
2007-03-21 11:13
2007.06.10
тормоза при исполнении множественных запросов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский