Главная страница
    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.061 c
1-1176535114
kyn66
2007-04-14 11:18
2007.06.10
Картика в гриде не отрисовывается транспарентно


5-1155109571
Vaitek__
2006-08-09 11:46
2007.06.10
Прозрачный TCustomPanel


3-1174307930
Still Swamp
2007-03-19 15:38
2007.06.10
Как узнать длинну данных BLOB поля


5-1155885569
karachun
2006-08-18 11:19
2007.06.10
Эксперт для создания компонентов


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