Форум: "Начинающим";
Текущий архив: 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)
для ifvar 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