2015-09-27 1 views
1

Пожалуйста, скажите мне, где я ошибаюсь, я не мог исправить свою ошибку в 2 программах. Я пытаюсь использовать рекурсивный в pascal.Я не знаю, почему программа не запускалась

Это один работает, но это дает мне неправильные resuts

program fatorial; 
var 
    n: integer; 

function f(n: longint): longint; 
begin 
    if((n=0) or (n=1)) then 
    f:=1 
    else 
    *f:= n*f(n-1);* 
    read(f); 
end; 

begin 
    write('n:='); read(n); 
    f(n); 
    write('result:', f(n)); 
    readln; 
end. 

Это один сказал мне: «Ошибка: недопустимый выражение», но я не знаю, как это исправить

program Greatest_common_divisor; 
var 
    gcd,p,q: integer; 
    r:=real; 
begin 
    write('p:'); read(p); 
    write('q:'); read(q); 
    r:= p mod q; 
    if r <> o then 
    begin 
    p:=q; 
    q:=r 
    *gcv:= gcv(q,r);* 
    end; 
    write('Greatest common divisor:', gcv(p.q)); 
    readln; 
end. 
+0

Вашей первой программы дает правильные результаты, если избавиться от 'чтения (е)'. Почему это? И вам нужно удалить звездочки извне '* f: = n * f (n-1); *'. Я не уверен, почему у вас их есть. И почему у вас есть дополнительный 'f (n);' вызов по строке сам по себе? Это нецелесообразно. Результат не сохраняется. Для вашей второй функции, почему у вас есть звездочки вокруг 'gcv: = gcv (q, r)'? Где определяется 'gcv'? и 'gcv (p.q)' недействителен, так как у вас есть период, а не запятая. – lurker

+0

Звездочки были, вероятно, акцентом (чтобы показать рекурсию) из вики или страницы форума, которые он скопировал :-) –

+0

@MarcovandeVoort Я подумал, что звездочки должны были что-то выделить. Я привел несколько других вопросов, которые необходимо решить ОР. Я подумал о том, как они осознают свою часть того, что они выбрасывают в свой вопрос, поскольку источник также был бы желательной целью. :) – lurker

ответ

1
  1. Вы не должны читать f в функции.

  2. Вы должны написать функцию, а не использовать функции внутреннего gcv()

0

Первый вопрос:

  1. Я думаю, что чтение f в функции не является правильным.

Но второй вопрос:

  1. Не используйте := в команде: r:=real;, только :
  2. o и gcv являются какие переменные? Вы не идентифицировали o и gcv после var.
  3. Помещенного ; после q:=r