Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;Ex4
- (define lista1 (list 2 5 3 6 1 4))
- ;;Ex1:
- (define-struct pessoa (nome ano pai mae))
- ;; Um parente é:
- ;; empty ou
- ;; (make-pessoa n a p m), onde:
- ;; n: String, nome
- ;; a: Número, idade
- ;; p: pessoa, pai
- ;; m: pessoa, mãe
- (define joa(make-pessoa 'joao 50
- (make-pessoa 'julia 40
- (make-pessoa 'lucian 23 empty empty) (make-pessoa 'jiboia 9 empty empty))
- (make-pessoa 'carla 30 empty (make-pessoa 'lucas 10 empty empty))))
- ;;soma-idade: parente -> Número
- ;; Obj.: Dado um parente, soma idade dele mesmo e todos os seus parentes.
- ;; Exemplo:
- ;; (soma-idade joao) -> 162
- ;; (soma-idade empty) -> 0
- (define (soma-idade parente)
- (cond
- [(empty? parente) 0]
- [else (+ (pessoa-ano parente) (soma-idade (pessoa-pai parente)) (soma-idade (pessoa-mae parente)))]))
- (check-expect (soma-idade joa) 162)
- (check-expect (soma-idade empty) 0)
- ;;conta-parentes: parente -> Número
- ;; Obj.: Dado um parente, conta o número de parentes incluindo ele mesmo.
- ;; Exemplo:
- ;; (conta-parentes joa) -> 6
- ;; (conta-parentes empty) -> 0
- (define (conta-parentes parente)
- (cond
- [(empty? parente) 0]
- [else (+ 1 (conta-parentes (pessoa-pai parente)) (conta-parentes (pessoa-mae parente)))]))
- (check-expect (conta-parentes joa) 6)
- (check-expect (conta-parentes empty) 0)
- ;;idade-média: parente -> Número
- ;; Obj.: Dado um parente, faz a média das idades de todos os seus parentes incluindo ele mesmo.
- ;; Exemplo:
- ;; (idade-média joa) ->
- ;; (idade-média empty) -> 0
- (define (idade-média parente)
- (cond
- [(empty? parente) 0]
- [else (/ (soma-idade parente) (conta-parentes parente))]))
- (check-expect (idade-média joa) 27)
- (check-expect (idade-média empty) 0)
- ;;Ex2:
- (define-struct registro (nome cod telefone esq dir))
- ;;um elem. do conjunto registro é:
- ;; (make-registro n c t e d), onde:
- ;; n: String
- ;; c: Número
- ;; t: Número
- ;; e, d: registro
- ;; um nó é:
- ;; empty ou registro
- ;; uma ABP é:
- ;; empty ou nó
- ;;ABP1:
- (define leo (make-registro 'leo 80 666 empty empty))
- (define julia (make-registro 'julia 92 555 empty empty))
- (define maria (make-registro 'maria 90 888 leo julia))
- (define julio (make-registro 'julio 110 777 empty empty))
- (define joao (make-registro 'joao 100 999 maria julio))
- ;;ABP2:
- (define leo2 (make-registro 'leo 80 123 empty empty))
- (define julia2 (make-registro 'julia 92 555 empty empty))
- (define maria2 (make-registro 'maria 90 888 leo2 julia2))
- (define julio2 (make-registro 'julio 110 777 empty empty))
- (define joao2 (make-registro 'joao 100 999 maria2 julio2))
- ;;ABP3:
- ;;empty
- ;;existe? ABP Número -> Booleano
- ;; Obj.: Dado uma ABP e um código,
- ;; retorna um booleano informando se existe um nó cuja estrutura de registro possua o código informado.
- ;; Exemplos:
- ;; (existe? ABP1 100) -> #true
- ;; (existe? ABP1 900) -> #false
- ;; (existe? ABP3 100) -> #false
- (define (existe? abp cod)
- (cond
- [(empty? abp) #false]
- [(> cod (registro-cod abp)) (existe? (registro-dir abp) cod)]
- [(< cod (registro-cod abp)) (existe? (registro-esq abp) cod)]
- [else #true]))
- ;;troca: ABP Número Número -> ABP
- ;; Obj.: Dada uma ABP, um telefone e um código, troca o telefone de determinado nó da abp pelo telefone passado e manda reconstruir a ABP.
- (define (troca abp tel cod)
- (make-registro (registro-nome abp) (registro-cod abp) tel (reconstrói (registro-esq abp) tel cod) (reconstrói (registro-dir abp) tel cod)))
- ;;reconstrói: ABP Número Número -> ABP
- ;; Obj.: Dada uma ABP, um telefone e um código, verifica se o nó atual de verificação possui o código informado, caso sim, chama a função
- ;; troca para trocar o telefone. Se não, apenas continua reconstruindo a ABP.
- (define (reconstrói abp tel cod)
- (cond
- [(empty? abp) empty]
- [(= cod (registro-cod abp)) (troca abp tel cod)]
- [else (make-registro (registro-nome abp) (registro-cod abp) (registro-telefone abp) (reconstrói (registro-esq abp) tel cod) (reconstrói(registro-dir abp) tel cod))]))
- ;;substitui-telefone: ABP Número Número -> ABP
- ;; Obj.: Dada uma abp, um telefone e um código, substitui o telefone do registro com o código passado caso existe e devolve a abp atualizada.
- ;; Exemplos:
- ;; (substitui-telefone ABP1 123 80) -> ABP2
- ;; (substitui-telefone ABP2 123 66) -> ABP2
- ;; (substitui-telefone ABP3 123 80) -> ABP3
- (define (substitui-telefone abp tel cod)
- (cond
- [(empty? abp) empty]
- [(existe? abp cod) (reconstrói abp tel cod)]
- [else abp]))
- ;;testes:
- (check-expect (substitui-telefone joao 123 80) joao2)
- (check-expect (substitui-telefone joao2 123 66) joao2)
- (check-expect (substitui-telefone empty 123 80) empty)
- ;;Ex3
- ;; Uma página-web é:
- ;; empty ou
- ;; (cons s wp), onde s é um símbolo e wp é uma página web ou
- ;; (cons ewp wp), onde ewp e wp são págionas web
- (define pag1 (list 'a 'b 'c (list 'c (list 'c (list 'c (list 'c (list 'c 'c 'c) 'c) 'c 'c) 'c 'c 'c 'c) 'c 'c (list 'c)) 'c 'c 'c 'a 'b (list 'a (list 'a 'b))))
- (define pag2 empty)
- ;; conta: página-web Símbolo -> Número
- ;; Obj.: Dado uma página web e um símbolo, conta o número de ocorrências desse símbolo na página web passada.
- ;; Exemplos:
- ;; (conta pag1 'c) -> 21
- ;; (conta pag1 'a) -> 4
- ;; (conta pag1 'b) -> 3
- ;; (conta pag1 'x) -> 0
- ;; (conta pag2 'a) -> 0
- (define (conta p s)
- (cond
- [(empty? p) 0]
- [(list? (first p)) (+ (conta (first p) s) (conta (rest p) s))]
- [else
- (cond
- [(symbol=? s (first p)) (+ 1 (conta (rest p) s))]
- [else (conta (rest p) s)])]))
- (check-expect (conta pag1 'c) 21)
- (check-expect (conta pag1 'a) 4)
- (check-expect (conta pag1 'b) 3)
- (check-expect (conta pag1 'x) 0)
- (check-expect (conta pag2 'a) 0)
- ;;criteriozador Lista-de-Número Número -> Número
- ;;Obj.: Dado um número e uma lista e o primeiro número dessa lista inicialmente, retorna o maior elemento da lista.
- ;;Exemplo:
- ;; (criteriozador lista1 1) -> 6
- (define (criteriozador lista selecionado criterio)
- (cond
- [else (cond
- [(criterio (first lista) selecionado) (criteriozador (rest lista) (first lista) criterio)]
- [else (criteriozador (rest lista) selecionado criterio)])]))
- (define (remove-selecionado ldn selecionado)
- (cond
- [(= selecionado (first ldn)) (rest ldn)]
- [else (cons (first ldn) (remove-selecionado (rest ldn) selecionado))]))
- ;;selection-sort: Lista-de-Número ? -> Lista-de-Número
- ;; Obj.: Dada uma lista de números, ordena com base num critério(> ou <)
- (define (selection-sort ldn criterio)
- (cond
- [(empty? ldn) empty]
- [else (cons (criteriozador ldn (first ldn) criterio)
- (selection-sort (remove-selecionado ldn (criteriozador ldn (first ldn) criterio)) criterio))]))
- (define (r l s)
- (cond
- [(empty? l) empty]
- [(= s (first l)) (rest l)]
- [else (cons (first l) (r (rest l)))]))
- (define (k c l s)
- ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement