Forum Pplware

Versão Completa: Programacao em Scheme
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Páginas: 1 2
Ola,


Sera que alguem me poderia ajudar e mostrar-me (com uma explicacao se possivel :confusedSmile como posso obter uma nova versao do procedimento abaixo, mas gerando um processo iterativo em vez de recursivo. Obrigado Smile


Código:
(define (soma x)
   (if (= x 0)
       x
       (+ (transforma x) (soma (- x 1)))))
Precisas de uma função auxiliar que tenha um argumento adicional que guarde o resultado actual.

Depois mais chamando essa função actualizando o resultado a cada chamada.
Obrigado pela resposta.

Sera que nao me poderias escrever 1 ou 2 linhas, para eu tentar perceber. Rolleyes

a ver se consigo fazer depois de engrenar

obg
Algo do tipo:

Código:
(if (= x 0)
    resultado
    (soma (- x 1) (+ resultado (transforma x))))
Código:
(define soma2 (lambda (x) (resultado)))
(if (= x 0)
    resultado
    (soma (- x 1) (+ resultado (transforma x))))

assim esta correcto?


este e o prog completo:


Código:
(define (transforma x)
  (if (even? x) (* x x)
        (* 3 x) ))

(define (soma x)
   (if (= x 0)
       x
       (+ (transforma x) (soma (- x 1)))))


(define soma2 (lambda (x) (resultado)))
(if (= x 0)
    resultado
    (soma2 (- x 1) (+ resultado (transforma x))))





esta.me a dar um erro (reference to undefined identifier: x) no x do segundo if.
Podes.me ajudar Sad. Estou a tentar, mas estou um pouco confuso.
Para que é esse lambda? Porque é que não fazes como tens feito na outra função?
Código:
(define (transforma n)
  (if (even? n) (* n n)
      (* 3 n)))
(define (soma n)
  (if (= n 1)
      3
      (+ (transforma n) (soma (- n 1)))))
(define (soma2 n)
(if (= n 0)
    0
    (+ (soma (- n 1)) (+ 0 (transforma n)))))
Podem-me dizer se este código está bem feito? Os valores de soma e soma2 saem iguais, mas é para confirmar a sintaxe. Obrigado.
Se corre é porque a sintaxe está correcta.
basicamente, o que vocês querem é este codigo Big Grin

Código:
(define (transforma n)
      (if (odd? n)
          (* 3 n)
          (expt n 2)))

(define (soma n)
    (cond ( (or (not (integer? n))
                (<= n 0))
            (error "inserir n inteiro positivo"))
          ( (= n 1) (transforma n))
          (else (+ ((soma (- n 1)) (transforma n))))))

(define (soma-aux n soma-ac)
    (cond ( (or (not (integer? n))
                (<= n 0))
            (error "inserir n inteiro positivo"))
          ( (= n 1) (+ (transforma n) soma-ac))
          (else (soma-aux (- n 1) (+ soma-ac (transforma n))))))
(define (soma n) (soma-aux n 0))

Isto foi o trabalho de casa de Fp ... LEIC alameda Mr Green

Cumprimentos
Excelente curso, esse. Tongue
Páginas: 1 2
URL's de Referência