Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ пасиба темку мона удалит =) С НАСТУПАЮЩИМ!

Автор: andreybatka 29.12.2006 0:43

Не сочтите за наглость но есть еще вопросик. Задача- Составить программу для вычисления факт. Вычисление факториала оформить в виде FUNCTION. N=8 M=3. Вот собссна мой код


Program FACTORIAL;
uses crt;
VAR c:longint; n,m:integer;
Function fact(n:integer):longint;
var N,M,i:integer;
f:longint;
Begin
clrscr;
f:=1
For i:=2 to n do f:=g*i;
fact:=f
end;
Begin writeln('vvedite N,M');
readln(N,M);
c:fact(n)/(fact(m)*fact(n-m));writeln('c=',c);
readln;
end.


ошибка Type mismatch в строчке
c:fact(n)/(fact(m)*fact(n-m));writeln('c=',c);

Помогите советом плизь unsure.gif


Прикрепленные файлы
Прикрепленный файл  fact.bmp ( 116.25 килобайт ) Кол-во скачиваний: 415

Автор: Айра 29.12.2006 1:34

Цитата
ошибка Type mismatch в строчке
c:fact(n)/(fact(m)*fact(n-m));writeln('c=',c);

Во-первых, c:=fact(n)/(fact(m)*fact(n-m));writeln('c=',c).
Во-вторых, ты уверен, что c будет целым? smile.gif
В-третьих, вот мой вариант проги:
 
program Fakt(input,output);
uses wincrt;
var c: real;
n,m: integer;
function fact(n: integer): longint;
begin
if n=1 then fact:=1
else fact:=n*fact(n-1);
end;
begin
writeln ('введите число n >');
read (n);
while n<=0 do
begin
writeln ('Ошибка');
read (n);
end;
writeln ('введите число m >');
read (m);
while (m<=0) or (m>=n) do
begin
writeln ('Ошибка');
read (m);
end;
c:=fact(n)/(fact(m)*fact(n-m));writeln('c=',c:10:2);
end.


но он рекурсивный.

Автор: klem4 29.12.2006 1:39

Айра , пробовала запускать свою программу с n = 0 или m = 0, ну или и то и другое ?

Автор: andreybatka 29.12.2006 1:45

Цитата(Айра @ 28.12.2006 21:34) *

Во-первых, c:=fact(n)/(fact(m)*fact(n-m));writeln('c=',c).
Во-вторых, ты уверен, что c будет целым? smile.gif
но он рекурсивный.

БАААААААЛЬШОЕ ТЕБЕ СПАСИИИИБО!!! give_rose.gif give_rose.gif give_rose.gif ты мне очень помогла!

Автор: Айра 29.12.2006 1:49

Цитата
Айра , пробовала запускать свою программу с n = 0 или m = 0, ну или и то и другое ?

Намек понят. Я как обычно расчитываю, что пользователь введет нормальные данные. unsure.gif
Щас исправлюсь.
Исправила. Так вроде все нормально.
Цитата
ты мне очень помогла!

Рада стараться smile.gif

Автор: Michael_Rybak 29.12.2006 2:08

Не-не, це из 0 по 0 равно 1, что тут ненормального ;)

А вообще биноминальные коэффициенты, по-моему, лучше считать треугольником Паскаля:


...
for i := 0 to n do begin
c[i, 0] := 1;
c[i, i] := 1;
for j := 1 to i - 1 do
c[i, j] := c[i - 1, j - 1] + c[i - 1, j];
end;
writeln(c[n, m]);