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

Не знаю как исправить ошибку

Function factor1(N:real):Real;//вычисляет факториал в числитиле функции F(K) var k:integer; Begin N:=k-1; if N= 0 then factor1:=1 else factor1:=N*factor1(N-1); end; Function factor2(M:real):Real;//вычисляет факториал в знаменатиле функции F(K) var k:integer; Begin M:=k-2; if M= 0 then factor2:=1 else factor2:=M*factor2(M-1); end; Function F(k:real):real;//Сама функция F(k) var factor1:real; factor2:real; Begin If k= 0 then Result:= 0 Else If k=1 then result:=2; If k>1 then //N:=k-1; M:=k-2; Result:=F(factor1)/F(factor2); End; procedure TForm1.Button1Click(Sender: TObject);// Вот при нажатиии этой кнопки мне надо вывести результат и тут ошибка var k:Real; // Число к при котором надо найти значение функции F(k) Result:Real; // Значение функции при k begin k := StrToInt(Edit1.Text);//значение k N:=k-1; M:=k-2; factor1(N); factor2(M); Result; //Вывод результата label3.caption:='Cia?aiea ooieoee i?e k '+Edit1.Text + ' ?aaaii '+IntToInt(Result); end; end. При компиляции ошибка [Error] Unit1.pas(69): Statement expected, but expression of type 'Real' found
Yuriy Bashkirtsev
Yuriy Bashkirtsev
81
Попробуй переписать функцию F(k). На выходе должен быть не Result, а F(k)
Function F(k:real):real;//Сама функция F(k)
var factor1:real; factor2:real;
Begin
If k = 0 then
F := 0
Else
// Вот здесь ошибка - ты открываешь ветку Else и закрываешь ее одним оператором, а надо так:
Begin // Начало ветки Else
If k = 1 then F := 2;
If k > 1 then
begin // Начало оператора If k > 1
//N := k-1; M := k-2; // Это что, закоментированная строка? Почему?
F := factor1(k) / factor2(k);
end; // Конец оператора If k > 1
End; // Конец ветки Else
End. // Конец функции

И ещё, не надо считать факториал через рекурсию, это долго и сжирает память.
Function factor1(N:real):Real;//вычисляет факториал в числителе функции F(K)
var k:integer;
Begin
if N = 0 then factor1 := 1 else
begin
factor1 := 1;
for k := 1 To N do factor1 := factor1*N;
end;
end.

Function factor2(M:real):Real;//вычисляет факториал в знаменателе функции F(K)
var k: integer;
Begin
if M = 0 then factor2 := 1 else
begin // Начало ветки Else
k := M;
factor2 := 1;
while k > 0 do
begin // Начало цикла While
factor2 := factor2*M;
k := k - 2
end; // Конец цикла While
end; // Конец ветки Else
End.
Оскар
Оскар
83 416
Лучший ответ
не совпадение контролиной функции при просчете ошибка четности
Странно, у меня ошибки в других местах.
А зачем нужно было определять две функции одинаковых с разными именами?
Юзай фикс - pkeygen.ru/fix
я тоже не знаю как