;(define conta-folhas ; (lambda ( ) ; (cond ; ( ( ) ) ; ( (and ) ) ; ( else ; ) ) ))



Documentos relacionados
TIPOS ABSTRATOS DE DADOS DEFINIÇÃO E EXEMPLOS. Bruno Maffeo Departamento de Informática PUC-Rio

Árvore Binária de Busca

Árvores Binárias e Busca. Jeane Melo

EAD Árvore - representação usando listas ligadas

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Árvores Binárias de Busca

Estruturas de Dados I

Busca. Pesquisa sequencial

Métodos Computacionais. Árvores

EAD Árvore árvore binária

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Árvores Binárias de Busca

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

INF 1007 Programação II

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

Algoritmos e Estruturas de Dados 2

BC1424 Algoritmos e Estruturas de Dados I. Aula 16: Árvores (introdução) Prof. Jesús P. Mena-Chalco. jesus.mena@ufabc.edu.br

Árvores AVL. Prof. Othon M. N. Batista Estrutura de Dados

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Resolução de problemas e desenvolvimento de algoritmos

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

ESTRUTURA DE DADOS PILHA

Compiladores Aula 5. Celso Olivete Júnior.

Algoritmos e Estruturas de Dados: Árvore Binária

Algoritmos e Estrutura de Dados III. Árvores

Figura 13.1: Um exemplo de árvore de diretório.

2ª Lista de Exercícios

Árvores e Árvores Binárias

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

Pesquisa em Memória Primária. Prof. Jonas Potros

Árvore B UNITINS ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3º PERÍODO 43

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

Linguagem C: Árvores Binarias

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

Funcional V: estruturas de dados puramente funcionais

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Este Procedimento Operacional Padrão explica a melhor forma de se utilizar os filtros no Sistema TOTVS RM. Índice

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

Acumuladores. Paradigma de Programação Funcional. Marco A L Barbosa

ESTRUTURAS DE DADOS II

Árvores. Algoritmos e Estruturas de Dados 2005/2006

Javascript 101. Parte 2

Manual do Usuário. Integrador FC Store V ACSN Desenvolvimento de Software do Brasil Ltda. Av. Dom Pedro II, 1211 Salto SP

Assinatura ainda não verificada

1. Estrutura de seleção. Seleção: algumas etapas (passos) do algoritmo são executadas dependendo do resultado de uma condição

MATERIAL MATEMÁTICA I

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Recursão em Listas. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de Programação Funcional

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo

Como instalar Certificado Digital

DAINF - Departamento de Informática

Geração de código intermediário. Novembro 2006

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

1. Introdução Definição Conceitos relacionados... 2

ESTRUTURA DE DADOS DCC013

Tutorial de Matlab Francesco Franco

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Noções Básicas de Excel página 1 de 19

Estrutura de Dados Árvores. Prof. Robinson Alves

Microsoft Excel 2007

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 4

Tuplas e Dicionários. Vanessa Braganholo vanessa@ic.uff.br

Passo a passo da instalação do certificado da AC Raiz da Sefaz. Certificado AC Raiz Sefaz AL

Python: Comandos Básicos. Claudio Esperança

Programação em Lógica com Restrições Exame sem consulta - Duração: 3 horas

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Conceitos de Linguagem de Programação - 2

Árvores binárias de pesquisa com balanceamento. Algoritmos e Estruturas de Dados II

ÁRVORES BINÁRIAS DE PESQUISA

1. FUNÇÕES NO EXCEL 2007

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Algoritmos e Estrutura de Dados. Aula 13 Estrutura de Dados: Árvores de Pesquisa Binária Prof. Tiago A. E. Ferreira

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Sumário. 1

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani

Algoritmos e Estruturas de Dados I. Arquivos. Pedro O.S. Vaz de Melo

Exercícios da cadeira de Introdução à Programação

Árvores Binárias - continuação

1. Domínio dos Atributos

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

BDII SQL Junção Revisão 8

Transcrição:

; ICC 00.2 PROVA 3 ; Gabarito ; QUESTAO 1 (1 ponto) (árvores binárias) ; Complete os espaços em branco na definição abaixo de maneira que ; a função receba uma Árvore Binária de números e retorne o número ; de folhas da árvore associadas a valores superiores a 10. ; (conta-folhas ( )) ; -> 0 ; (conta-folhas '(12 (3 1 10) (50 27 100))) ; -> 2 ; A manipulação da árvore deve ser feita empregando-se apenas as ; operações básicas de Árvores Binárias (vazia?, raiz, esquerda, ), ; que não precisam ser definidas. ;(define conta-folhas ; (lambda ( ) ; (cond ; ( ( ) ) ; ( (and ) ) ; ( else ; ) ) )) (define ab '(12 (3 1 10) (50 27 100))) (define arv-bin-vazia '( )) (define arv-bin-vazia? null?) (define folha? (lambda (ab) (not (list? ab)))) (define raiz (lambda (ab) (if (folha? ab) ab (car ab) ))) (define esquerda (lambda (ab) (if (folha? ab) arv-bin-vazia (cadr ab) ))) (define direita (lambda (ab) (if (folha? ab) arv-bin-vazia (caddr ab) ))) (define conta-folhas (lambda ( ab) (cond ( (arv-bin-vazia? ab) 0) ( (and (folha? ab) (> (raiz ab) 10)) 1) (else (+ (conta-folhas (esquerda ab)) (conta-folhas (direita ab)) )) ) )) (conta-folhas '( )) ; -> 0 (conta-folhas '(12 (3 1 10) (50 27 100))) ; -> 2 ; QUESTAO 2 (2 pts.) (árvores binárias de busca) ; Complete os espaços em branco na definição abaixo de maneira ; que a função receba um número e uma Árvore Binária de Busca ; contendo apenas números e retorne a sub-árvore cuja raiz esteja ; associada ao número dado ou uma árvore vazia se o número dado ; não ocorrer na árvore dada. ; (sub-abb 5 '(12 (3 1 10) (50 27 100))) ; -> ( ) ; (sub-abb 12 '(12 (3 1 10) (50 27 100))) ; -> (12 (3 1 10) (50 27 100)) ; (sub-abb 3 '(12 (3 1 10) (50 27 100))) ; -> (3 1 10) ; A manipulação da árvore deve ser feita empregando-se apenas as ; operações básicas de Árvores Binárias (vazia?, raiz, esquerda, ),

; que não precisam ser definidas. ;(define sub-abb ; (lambda ( ) ; (cond ; ( ( ) ) ; ( ( ) ) ; ( ( ) ) ; ( else ) ) )) (define sub-abb (lambda (elem abb) (cond ( (arv-bin-vazia? abb) arv-bin-vazia) ( (equal? (raiz abb) elem) abb) ( (< elem (raiz abb)) (sub-abb elem (esquerda abb))) (else (sub-abb elem (direita abb))) ) )) (sub-abb 5 '(12 (3 1 10) (50 27 100))) ; -> ( ) (sub-abb 12 '(12 (3 1 10) (50 27 100))) ; -> (12 (3 1 10) (50 27 100)) (sub-abb 3 '(12 (3 1 10) (50 27 100))) ; -> (3 1 10) ; QUESTAO 3 (3 pts.) (vetores e árvores binárias de busca; procedimentos) ; O objetivo desta questão é escrever em Scheme um procedimento ; que permita exibir, separados por um espaço em branco, ; os elementos de um Vetor de números que estejam também contidos ; em uma Árvore Binária de Busca. ; (exibe-vet '#(5 2 7 8 9) '(12 (3 1 10) (50 27 100))) ; -> ; (exibe-vet '#(5 3 7 100 27) '(12 (3 1 10) (50 27 100))) ; -> 3 100 27 ; (3a -- 1 pt.) ; Escreva em Scheme uma função que receba um número e uma Árvore ; Binária de Busca contendo apenas números e verifique se o número ; está contido na árvore dada. ; (pertence? 5 '(12 (3 1 10) (50 27 100))) ; -> #f ; (pertence? 27 '(12 (3 1 10) (50 27 100))) ; -> #t ; A manipulação da árvore deve ser feita empregando-se apenas as operações ; básicas de Árvores Binárias (vazia?, raiz, esquerda, ), que não precisam ; ser definidas. (define pertence? (lambda (elem abb) (cond ( (arv-bin-vazia? abb) #f) ( (equal? elem (raiz abb)) #t) ( (< elem (raiz abb)) (pertence? elem (esquerda abb))) ( else (pertence? elem (direita abb))) ) )) '3a

(pertence? 5 '(12 (3 1 10) (50 27 100))) ; -> #f (pertence? 27 '(12 (3 1 10) (50 27 100))) ; -> #t ; (3b -- 2 pts.) ; Complete os espaços em branco do procedimento abaixo de ; maneira que ele exiba, no formato acima definido, os ; elementos do vetor v também contidos na árvore binária de ; busca abb. ;(define exibe-vet-aux ; (lambda (v abb ) ; (if (not ( )) ; (begin ; (if (pertence? ) ; (begin ; ( ) ; ( ) ) ) ; ( ) ) ))) ;(define exibe-vet ; (lambda (v abb) ; ( ) )) (define exibe-vet-aux (lambda (v abb i) (if (not (>= i (vector-length v))) (begin ( if (pertence? (vector-ref v i) abb) (begin ( display (vector-ref v i)) (display " ") ) ) (exibe-vet-aux v abb (+ i 1)) ) ))) (define exibe-vet (lambda (v abb) (exibe-vet-aux v abb 0) )) (display '3b) (exibe-vet '#(5 2 7 8 9) '(12 (3 1 10) (50 27 100))) ; -> (exibe-vet '#(5 3 7 100 27) '(12 (3 1 10) (50 27 100))) ; -> 3 100 27 ; QUESTÃO 4 (3 pts.) (listas; procedimentos interativos) ; O objetivo desta questão é escrever em Scheme um procedimento ; que leia uma seqüência de números e exiba essa seqüência colocando ; os números entre parênteses e separados por vírgulas, obedecendo ; a ordem de leitura. Para isso, resolva os itens a seguir. ; (4a -- 1pt.) ; Escreva em Scheme uma função que leia uma seqüência de números e ; retorne uma lista com os números lidos, obedecendo a ordem de ; leitura.

; A leitura deverá ser terminada quando for lido o símbolo fim. ; O usuário deverá fornecer dado em resposta a um alerta do tipo ; numero ou fim?. Por exemplo: ; numero ou fim? 2 ; numero ou fim? 3 ; numero ou fim? fim ; (2, 3) ; Processo recursivo ( recursão "normal" ) (define lista-numeros-aux (lambda ( ) (let ( (resp (begin (display "numero ou fim? ") (read) ))) (if (equal? resp 'fim) '( ) (cons resp (lista-numeros-aux)) ) ) )) (define lista-numeros (lambda ( ) ( lista-numeros-aux))) ; Processo iterativo ( recursão "final" ) (define inverte-lista-it-aux (lambda ( lista ac) (if (null? lista) ac (inverte-lista-it-aux ( cdr lista) (cons (car lista) ac) ) ) )) (define inverte-lista-it (lambda ( lista) (inverte-lista-it-aux lista '( )) )) (define lista-numeros-it-aux (lambda (ac) (let ( (resp (begin (display "numero ou fim? ") (read) ))) (if (equal? resp 'fim) ac (lista-numeros-it-aux (cons resp ac)) ) ) )) (define lista-numeros-it (lambda ( ) (inverte-lista-it ( lista-numeros-it-aux '( ))) )) ; (4b -- 1pt.) ; Escreva em Scheme um procedimento que receba uma lista e ; exiba os itens da lista entre parênteses, separados por ; vírgulas e repeitando a ordem da lista. ; (mostra-seq '( )) ; -> ( ) ; (mostra-seq '(a b c d)) ; -> (a, b, c, d) (define mostra-itens (lambda ( lista) (if (not (null? lista)) (begin (display (car lista)) (if (not (null? (cdr lista))) (display ", ") ) (mostra-itens (cdr lista)) ) ) ))

(define mostra-seq (lambda ( seq) (begin (display "(") (mostra-itens seq) (display ")") ) )) (display '4b) (mostra-seq '( )) ; -> ( ) (mostra-seq '(a b c d)) ; -> (a, b, c, d) ; (4c -- 1pt.) ; Escreva em Scheme um procedimento que leia uma seqüência ; de números e exiba essa seqüência colocando os números ; entre parênteses e separados por vírgulas, obedecendo a ; ordem de leitura. (define exibe-seq (lambda ( ) (mostra-seq (lista-numeros)) )) (display '4c) (exibe-seq)