Prigrama em racket/scheme para troca de cartas

Disponível somente no TrabalhosFeitos
  • Páginas : 2 (329 palavras )
  • Download(s) : 0
  • Publicado : 15 de novembro de 2011
Ler documento completo
Amostra do texto
#lang racket
; Problema C: Troca de cartas
; Adriano Alberto Borges Ramos TIA: 4080254-1
; Descobrindo qual é o menor número entre a quantidade de trocas.
(define (minimo x y)
(cond ((< x y)x)
(else y)))

; Definindo sintaxe para usar while como loop
(define-syntax (while stx)
(syntax-case stx ()
((_ condition expression ...)
#`(do ()
((not condition))expression
...))))

; Definindo quantidade de trocas de cada uma das jogadoras
(define trocasB 0)
(define trocasA 0)
; Contador
(define i 0)
; Maximo de cartas
(define n100000)
; Vectors de cartas de n posições zerados; Serão usados para contar as cartas que podem ser trocadas
(define vetA(make-vector n))
(define vetB(make-vector n))

; Definindo função"trocar"
; a = quantidade máxima de cartas da jogadora A
; b = quantidade máxima de cartas da jogadora B
; cartasA = vector com as IDs das cartas da jogadora A
; cartasB = vector com as IDs das cartas dajogadora B
; Exemplo:
; (trocar 4 6 #(8 9 15 56) #(15 2 9 16 2 7))
(define (trocar a b cartasA cartasB)
(begin
(while(< i a)
; Número de ID da carta = (posição no vetA-1)++ paraindicar quantas cartas de tal ID existem
(vector-set! vetA (- (vector-ref cartasA i) 1) (+ (vector-ref vetA i) 1))
(set! i (+ i 1))
)
(set! i 0)
(while(< i b); Número de ID da carta = (posição no vetB-1)++ para indicar quantas cartas de tal ID existem
(vector-set! vetB (- (vector-ref cartasB i) 1) (+ (vector-ref vetB i) 1))(set! i (+ i 1))
)
(set! i 0)
(while(< i n)
; Se no vetA existir uma carta e no vetB não existir nenhuma, então é possível trocar
(cond ((and (> (vector-ref vetA i)0) (= (vector-ref vetB i) 0)) (set! trocasA (+ trocasA 1))))
; Se no vetB existir uma carta e no vetA não existir nenhuma, então é possível trocar
(cond ((and (> (vector-ref vetB...
tracking img