Ir para o conteúdo
joaoqalves

[Scheme] Médias

Mensagens Recomendadas

joaoqalves    0
joaoqalves

Boas pessoal, eu e o tirácio fizemos duas espécies de programas em Scheme para calcular as médias (neste caso, das Provas de Ingresso) e gostávamos de saber quais os erros e assim.

Quanto a mim, os meus erros:

- usei dois if's e devia ter usado um else.

- usei um contador (não sei se era possível não utilizar)

Aqui vai o source:

(define Soma 0)
(define Contador 0)
(define (Provas num)
  (if (> num 0)
   (begin
    (display " Nota da Prova de Ingresso ? ")
    (set! Soma(+ Soma (read)))
    (set! Contador(+ Contador 1))
    (Provas (- num 1))
  ))
  (if (= num 0)
    (begin
          (display " Média das PI :")
    (display (/ Soma Contador))
    (newline)
   )))

foi feito em R5RS

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

My code:

(define Soma 0)
(define tmp 0)
(define (prova num)
(display "Nota da prova de ingresso? ")
(let ((PI (read)))
(set! Soma (+ Soma PI))))

(define (Provas num)
  (prova num)
  (set! tmp (+ tmp 1))
  (init num))

(define (Media num)(
display (/ Soma num)))

(define (init num)
(cond [(< tmp num) (Provas num)]
       [else (Media num)]))

Lazy Scheme.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
_deXter    0
_deXter

Bom eu não testei os codes, presumo que funcionassem. Também não fiz alterações estruturais, apenas de identação/sintaxe.

(define Soma 0)
(define Contador 0)
(define (Provas num)
  (if (> num 0)
   (begin
      (display " Nota da Prova de Ingresso ? ")
     (set! Soma(+ Soma (read)))
      (set! Contador(+ Contador 1))
      (Provas (- num 1))))
  (if (= num 0)
      (begin
          (display " Média das PI :")
          (display (/ Soma Contador))
          (newline))))

joaoqalves:

Eu sei que custa a habituar a ter 50 parêntesis seguidos, mas tentem, porque acaba por ser uma marca da linguagem. :P

(define Soma 0)
(define tmp 0)
(define (prova num)
(display "Nota da prova de ingresso? ")
(let ((PI (read)))
(set! Soma (+ Soma PI))))

(define (Provas num)
  (prova num)
  (set! tmp (+ tmp 1))
  (init num))

(define (Media num)
  (display (/ Soma num)))

(define (init num)
(cond 
    ((< tmp num) (Provas num))
    (else (Media num))))

tiracio estavas a utilizar uma notação um pouco estranho no cond (até admito que funcionasse), mas vê a notação que eu utilizei. É mais limpa e agradável. ;)

Quanto ao resto, nunca gostei muito dos set! geralmente arranjava maneira de utilizar lets e coisas do género. Mas isso é com cada um.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vbmaster    5
vbmaster

Praticamente não analisei o código, mas se estão a codar Scheme para codarem Imperativo não vale a pena darem-se ao trabalho!

O challenge em Scheme é aprender a programar Funcional, esqueçam que sabem programação quando querem codar algo em scheme...

Googlem por Structure Interpretation of Computer Programs e leiam o livro... foi o que eu li no meu 12º e foi mais de um mês de aulas a não aprender nada de novo... ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

tiracio estavas a utilizar uma notação um pouco estranho no cond (até admito que funcionasse), mas vê a notação que eu utilizei. É mais limpa e agradável. :)

A notação que encontrei foi o que vi num link qq que o joaoqalves me deu.

Googlem por Structure Interpretation of Computer Programs e leiam o livro... foi o que eu li no meu 12º e foi mais de um mês de aulas a não aprender nada de novo... :)

http://mitpress.mit.edu/sicp/full-text/book/book.html right?

Codei aquilo ao calhas quase, tou a pensar olhar para isso com olhos de ver. :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Porreiro pá :) Obrigado pelo link

(define (power x n) (cond ((= n 0) 1) (else (* x (power x (- n 1))))))

Só não percebo muito bem como é que se identa nesta linguagem...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warrior    68
Warrior

Sempre usei editores que identam por mim, mas normalmente identam-se os blocos lógicos (ou seja, pelo número de parênteses abertos)

Vou ver se tenho tempo (e se me lembro) para vos mostrar como evitar modificadores.

Já agora, não usem displays, mas sim funções que retornem o valor pretendido.

Edit:

Provavelmente não é a melhor maneira para aprenderem, mas ficam aqui com uma sugestão:

(define media
  (lambda (lista)
    (/ (apply + lista) 
       (length lista))))

Podem chamar assim: (media '(1 2 3 4 5 6 7)) por exemplo

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zezima    0
zezima

boas, neste momento tou num projecto de criar um jogo de damas havaianas em scheme e tou com algumas dificuldades se alguem me poder ajudar diga

Obrigado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade