Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;OTÁVIO FLORES JACOBI - AULA PRATICA 4 E EXERCÍCIOS EXTRA-CLASSES ;;
- ;; _______________________________________ ;;
- ;; | | ;;
- ;; |DEFINIÇÕES DE ESTRUTURAS E TIPOS MISTOS| ;;
- ;; |_______________________________________| ;;
- ;;STRUCTS ;;
- ;; ;;
- (define-struct infracao (id cnh placa hora data tipo)) ;;
- ;;um elemento infracao de Infracao é uma estrutura ;;
- ;;(make-infracao i c p h d t), onde ;;
- ;; - i : Número, representa a identificação da infracao ;;
- ;; - c : Número, representa a CNH do motorista que cometeu a infracao ;;
- ;; - p : Símbolo, representa a placa do carro que cometeu a infracao ;;
- ;; - h : String, representa a hora da infracao (formato: "xx:xx") ;;
- ;; - d : String, representa a data da infracao (formato: "dd/mm/aaaa") ;;
- ;; - t : Símbolo, representa o tipo da infracao (possibilidades: 'gravissima 'grave 'moderada 'leve) ;;
- ;; ;;
- ;; ;;
- ;; ;;
- (define-struct condutor (nome cnh haba habb habc habd pontos direito)) ;;
- ;;um elemento condutor de Condutor é uma estrutura ;;
- ;;(make-condutor n c ha hb hc hd pont d), onde ;;
- ;; - n: String, representa o nome do condutor ;;
- ;; - c: Número, representa a CNH do condutor ;;
- ;; - ha: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria a ;;
- ;; - hb: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria b ;;
- ;; - hc: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria c ;;
- ;; - hd: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria d ;;
- ;; - pont: Número, representa a pontuacao do condutor ;;
- ;; - d: Boolean, representa se o condutor tem ou não o direito de dirigir ;;
- ;; ;;
- ;; ;;
- (define-struct funcionário (nome cargo salário equipe)) ;;
- ;; Um elemento funcionário do conjunto Funcionário é uma estrutura: ;;
- ;; (make-funcionário n c s e), onde: ;;
- ;; - n : String, nome do funcionário ;;
- ;; - c : Símbolo, cargo do funcionário ;;
- ;; - s : Número, salário em reais do funcionário ;;
- ;; - e : Lista-de-funcionários ;;
- ;;
- ;;
- ;;um Noouempty é ;;
- ;;1. um Elemento do tipo No, ou ;;
- ;;2. empty ;;
- ;;
- (define-struct no(condutor left right)) ;;
- ;;Um elemento no do conjunto No é uma estrutura: ;;
- ;;(make-no c l r), onde ;;
- ;; - c : Condutor, e representa um condutor ;;
- ;; - l : Noouempty, e representa o condutor para a esquerda ;;
- ;; - r : Noouempty, e representa o condutor para a direita ;;
- ;; ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; ;;
- ;; _________________________ ;;
- ;; | | ;;
- ;; | DEFINIÇÕES DE LISTAS | ;;
- ;; |_________________________| ;;
- ;;LISTS ;;
- ;; ;;
- ;; Uma Lista-de-funcionários é: ;;
- ;; 1. ou empty ;;
- ;; 2. ou (cons f ldf) onde: ;;
- ;; - f : Funcionário ;;
- ;; - ldf : Lista-de-funcionários ;;
- ;; ;;
- ;; Uma Lista-de-strings é: ;;
- ;;1. ou empty ;;
- ;;2. ou (cons s lds) onde: ;;
- ;; - s : String ;;
- ;; - lds: Lista-de-string ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; ;;
- ;; _________________________ ;;
- ;; | | ;;
- ;; | DEFINIÇÕES DE ABPS | ;;
- ;; |_________________________| ;;
- ;; ;;
- ;;uma abpc é do tipo Árvore-binária de pesquisa ;;
- ;;abpc é ou: ;;
- ;;1-empty ;;
- ;;2-No ;;
- ;; - E é organizada pelo número da CNH ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; _________________________ ;;
- ;; | | ;;
- ;; |DEFINIÇÕES DE INSTÂNCIAS | ;;
- ;; |_________________________| ;;
- ;; ;;
- ;; ;;
- ;;infracoes ;;
- (define infr1 (make-infracao 101 1234 'irk3102 "21/12/2014" "22:30" 'grave)) ;;
- (define infr2 (make-infracao 102 5787 'jff3179 "17/02/2015" "17:45" 'leve)) ;;
- (define infr3 (make-infracao 103 9084 'ijk3109 "20/03/1998" "04:20" 'gravissima)) ;;
- (define infr4 (make-infracao 104 1244 'irk3102 "10/03/2011" "22:30" 'moderada )) ;;
- (define infr5 (make-infracao 105 3001 'irk3102 "14/07/2003" "23:00" 'gravissima)) ;;
- (define infr6 (make-infracao 106 6666 'irk3102 "25/12/2001" "17:22" 'leve)) ;;
- (define infr7 (make-infracao 107 4242 'irk3102 "22/05/2009" "08:53" 'moderada)) ;;
- ;; ;;
- ;;condutores ;;
- (define bruno (make-condutor "bruno" 1234 true false false false 15 true)) ;;
- (define luciane (make-condutor "luciane" 2102 false true false false 0 true)) ;;
- (define elton (make-condutor "elton" 5787 true true true false 23 false)) ;;
- (define otavio (make-condutor "otavio" 1244 true true false false 14 true)) ;;
- (define pedro (make-condutor "pedro" 3001 true false true false 10 true)) ;;
- (define vinicius (make-condutor "vinicius" 1000 false true true true 3 true)) ;;
- (define joao (make-condutor "joao" 7823 true false false false 12 true)) ;;
- (define juriscleisson (make-condutor "juriscleisson" 0420 true true true true 32 false)) ;;
- (define rodrigo (make-condutor "rodrigo" 0666 true true false true 21 false)) ;;
- ;; ;;
- ;; Funcionários ;;
- (define Silvia (make-funcionário "Sílvia" 'fiscal-de-rua 4000 empty)) ;;
- (define Carlos (make-funcionário "Carlos" 'fiscal-de-rua 4500 empty)) ;;
- (define Fernando (make-funcionário "Fernando" 'fiscal-de-rua 4500 empty)) ;;
- (define Eq4 (list Silvia)) ;;
- (define Jorge (make-funcionário "Jorge" 'chefe-de-equipe 8500 Eq4)) ;;
- (define Eq3 (list Fernando Carlos)) ;;
- (define Julio (make-funcionário "Júlio" 'chefe-de-equipe 10000 Eq3)) ;;
- (define Gustavo (make-funcionário "Gustavo" 'vice-diretor 20000 empty)) ;;
- (define Eq2 (list Julio Jorge)) ;;
- (define Tatiana (make-funcionário "Tatiana" 'vice-diretor 22000 Eq2)) ;;
- (define Eq1 (list Gustavo Tatiana)) ;;
- (define Sergio (make-funcionário "Sérgio" 'diretor 30000 Eq1)) ;;
- ;; ;;
- ;;abps ;;
- (define abpc ;;
- (make-no bruno ;;
- (make-no rodrigo ;;
- (make-no juriscleisson ;;
- empty ;;
- empty) ;;
- (make-no vinicius ;;
- empty ;;
- empty)) ;;
- (make-no otavio ;;
- empty ;;
- (make-no pedro ;;
- (make-no luciane ;;
- empty ;;
- empty) ;;
- (make-no elton ;;
- empty ;;
- (make-no joao ;;
- empty ;;
- empty)))))) ;;
- ;; ;;
- ;; ;;
- ;; ;;
- ;; ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (define ldc (list bruno luciane elton otavio pedro vinicius joao juriscleisson rodrigo))
- ;;Exercícios Extra Classe LAB 4
- ;;Questão 2
- ; Contrato: gera-abp: Lista-de-condutores -> abp
- ; Objetivo: Gera uma abp através do critério CNH.
- (define (gera-abp ldc)
- (cond
- [(empty? ldc) empty]
- [else (insere-cond(gera-abp (rest ldc))(first ldc))]))
- ; Contrato: insere-cond: abp Condutor -> abp
- ; Objetivo: Dada uma abp identifica onde se deve inserir o condutor fornecido.
- (define (insere-cond abc condutor)
- (cond
- [(empty? abc) (make-no condutor
- empty
- empty)]
- [(< (condutor-cnh condutor) (condutor-cnh (no-condutor abc))) (make-no
- (no-condutor abc)
- (insere-cond (no-left abc) condutor)
- (no-right abc))]
- [(> (condutor-cnh condutor) (condutor-cnh (no-condutor abc))) (make-no
- (no-condutor abc)
- (no-left abc)
- (insere-cond (no-right abc) condutor))]))
- ;;EXERCÍCIOS LAB 4
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;EX 3
- ;;achaNome : abp Número -> String
- ;;Obj: Recebe o Número da CNH referente a um condutor e retorna a String referente ao nome do condutor, procurando em um banco de dados(abp informada)
- ;;e retorna uma String de mensagem caso não seja encontrado o condutor.
- ;;ex: (achaNome abpc 2102) -> "luciane"
- ;;ex: (achaNome abpc 5798) -> "CNH não encontrada."
- (define (achaNome uma_abp uma_cnh)
- (cond
- [(empty? uma_abp) "CNH não encontrada."]
- [(> uma_cnh (condutor-cnh(no-condutor uma_abp)))(achaNome (no-right uma_abp) uma_cnh)]
- [(< uma_cnh (condutor-cnh(no-condutor uma_abp)))(achaNome (no-left uma_abp) uma_cnh)]
- [else (condutor-nome(no-condutor uma_abp))]))
- ;;testes
- (check-expect (achaNome abpc 2102) "luciane")
- (check-expect (achaNome abpc 5798) "CNH não encontrada.")
- (check-expect (achaNome abpc 0420) "juriscleisson")
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;EX 4
- ;;acimaNomes: abp Número -> lds
- ;;Obj: Recebe uma abp e um Número referente a pontuação máxima, retorna uma lds com os nomes dos condutores que passaram essa pontuação
- ;;ex: (acimaNomes abpc 50) -> empty
- ;;ex: (acimaNomes abpc 20) -> (list "rodrigo" "juriscleisson" "elton")
- (define (acimaNomes uma_abp max_pontos)
- (cond
- [(empty? uma_abp) empty]
- [(<= max_pontos (condutor-pontos (no-condutor uma_abp))) (cons
- (condutor-nome (no-condutor uma_abp))
- (append
- (acimaNomes(no-left uma_abp) max_pontos)
- (acimaNomes(no-right uma_abp) max_pontos)))]
- [else
- (append
- (acimaNomes (no-left uma_abp) max_pontos)
- (acimaNomes (no-right uma_abp) max_pontos))]))
- ;;testes
- (check-expect (acimaNomes abpc 50) empty)
- (check-expect (acimaNomes abpc 20) (list "rodrigo" "juriscleisson" "elton"))
- (check-expect (acimaNomes abpc 30) (list "juriscleisson"))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;EX 5
- ;; salarioPessoa : ldf -> Número
- ;; Obj: Recebe uma lista de funcionários e retorna o seu salário total e de todos da equipe que trabalham com ele
- (define (salário-contratados ldf)
- (cond
- [(empty? ldf) 0]
- [else (+ (salário-funcionário-e-contratados (first ldf)) (salário-contratados (rest ldf)))]))
- ;; salário-funcionário-e-equipe : Funcionário -> Número
- ;; Obj: Recebe uma lista de funcionários e retorna o seu salário total e de todos da equipe que trabalham com ele
- (define (salário-funcionário-e-contratados func)
- (+ (funcionário-salário func) (salário-contratados (funcionário-equipe func))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement