Другие языки программирования и технологии

помощь в простенькой паскаль-программе)

мне нужно создать программу для вычисления факториала числа n!, если n=10. Нужно использовать оператор WHILE. Я сделал вот такую програмку http://codepaste.ru/11210/ , но результат в любом случае получается 0 http://gyazo.com/cb38acbcf188b27786e9b206be5218fc . подскажите, где ошибка
Salnicov Tudor
Salnicov Tudor
136
PROGRAM FAKTORIAL;
var
a[array[1..10] of real;
i, sum:integer;
d: real;
begin
while i<10 do begin
i:=i+1;
d:=d*(i);
a = d;
writeln(a);
end;
readln;
end.

Ох уж эта школа, уж эти задания =\ Интересно а учитель (ница) сам (а) знает зачем там массив? Я бы долго с ним (ей) спорил :D Всегда так делал :DD
Ростислав Нефедьев
Ростислав Нефедьев
1 562
Лучший ответ
Твоя старая программа:
PROGRAM FAKTORIAL;
var a:array[1..10] of real; i:integer; d: real;
begin
d:=1;i:=1;
while i<10 do begin read (a[ i]);i:=i+1; d:=d*(a[ i]);
end;
writeln(d)
end.

На черта тебе массив? Да еще и чтение чего-то с клавиатуры?

var i:integer; d:longint;
begin
d:=1; i:=1; while i<=10 do begin d:=d*i; inc(i) end; writeln(d)
end.

P.S. "просто прохожу тему массивы и нужно именно через масив"
Хорошо, что не космонавтику проходите. А то бы еще через запуск космического корабля делали ;)
Извини, но такой абсурд делать у меня рука не поднимется. Хватит и того, что я согласился делать с while, который тут тоже по принципу "пришей кобыле хвост"...
Андрей Королёв
Андрей Королёв
83 980
Видимо ты не знаешь, что такое факториал. Факториал числа n - это произведение всех натуральных чисел от единицы до числа n.

Т. е. массив тут не нужен и принимать никакие значения не нужно. Ты просто перебираешь все числа от 1 до n и умножаешь какую-то переменную, значение которой ты изначально принял за единицу, на эти числа.

Вот правильная программа (Если твой компилятор будет ругаться на "int64", то замени его на "integer", но при этом ты не сможешь вычислять факториалы больших чисел) .

function fact(n:integer):int64;
var r:int64; i:integer;
begin
r:=1; i:=2;
while (i<=n) do begin r:=r*i; inc(i); end; fact:=r;
end;

begin
writeln(fact(10));
end.
Можно ещё через рекурсию, если есть желание. Но через массив.. . =)