Exercícios de Técnicas de Programação

Documentos relacionados
Tabelas de dispersão/hash

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

ESTRUTURA DE DADOS LISTAS LINEARES

Pilhas e Filas. Nádia Félix e Hebert Coelho

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Manual do Utilizador

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Índice 1. Introdução Nova Empresa Registo da empresa Perfis de utilizadores Descrição dos perfis Fun

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

Limite assintótico para a ordenação, Ordenação em tempo linear

DOSSIER DA DISCIPLINA

Programação. Folha Prática 9. Lab. 9. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Universidade de São Paulo

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Ficha 1 Noções de sequência e decisão em algoritmia

Laboratório de Informática Avançada Automatização de Horários Manual do Professor

atualização gratuita *para clientes Gnotarium com contrato de manutenção ativo.

Lista de Exercícios 04

PAGAMENTO A FORNECEDORES E ORDENADOS

Estruturas de Dados Apresentação

Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares)

Software-Global 1/10

Exame de 1ª Época Introdução à Programação IGE e ETI 2003/02/25-1º semestre de 2002/2003 ISCTE

Sistema de apoio à decisão M-MACBETH. Guia de utilização. Autor: João C. Bana e Costa

Trabalho Prático de Técnicas de Programação (2003/2004)

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Escola Básica e Secundária de Salvaterra de Magos RELATÓRIO CRÍTICO. Prova de Aptidão Profissional. João Miguel Correia Pereira Nº 5 12º G

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

Produto Projecto Projecto WinGCS, WinUTE, WinGSO, WinGTE

GUIA DE APOIO CANDIDATURA

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Índice. IMP.01.P.11 v01_ Página 1 de 16

Informática Parte 18 Prof. Márcio Hunecke

ANIECA. Manual do utilizador

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

Tarefa Orientada 7 Consultas de selecção

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 1 8: Figura 1 9: Figura 1 10:

Sistema de apoio à decisão M-MACBETH. Guia de utilização. Autor: João C. Bana e Costa (revisto em Outubro de 2014 por João Carlos Lourenço)

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

UNIVERSIDADE DA BEIRA INTERIOR

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados

Gestão de SHST. Manual do utilizador. - Versão 1 -

Manual de Utilizador. Documento de Apoio. (Versão Janeiro 2019)

Algoritmos de pesquisa. Tabelas de dispersão/hash

ICET CURSO: Ciência da Computação e Sistemas de Informação (Estrutura de Dados) Estudos Disciplinares Campus: Data: / / Nome:

Estrutura de Dados. Diego Silveira Costa Nascimento

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

ZS Rest. Manual Avançado. Início v.1. v2011

Ficha de Avaliação Sumativa. Notas Gerais:

Capítulo 20. Estruturas de Dados Dinâmicas. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Classificação Externa: Geração de Partições Classificadas

Iniciação ao Microsoft Access Ficha nº2. Exercício nº 1 Criação das tabelas:

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Como Declarar online e pagar sem filas?

Questões mais frequentes ENCOMENDAS NO MYHERBALIFE.COM PORTUGAL, 18 de Janeiro de 2013

Teoria dos Grafos. Aula 5 - Estruturas de Dados para Grafos. Profª. Alessandra Martins Coelho. março/2013

PLANIFICAÇÃO ANUAL DE TECNOLOGIAS DE INFORMAÇÃO E COMUNICAÇÃO (10º

Bem-vindo! (CIT) Tutorial - Aplicação CIT. versão 1.0. Nota:

4ª Lista de Exercícios de Programação I

Algoritmos e Estruturas de Dados

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

INF1010 Lista de Exercícios 2

DAINF - Departamento de Informática

Algoritmo de Dijkstra Estudo e Implementação

Transcrição:

Exercícios de Técnicas de Programação LISTAS LIGADAS 1. Pretende-se desenvolver uma aplicação capaz de armazenar a informação relativa a todos os sócios de um Clube de Futebol, utilizando para o efeito uma lista ligada simples. a) Comece por definir o tipo de nodo a usar na lista, uma estrutura que permita representar a informação referente a um único sócio, concretamente o nome, número e valor da quota a pagar. Considere que os nodos da lista devem estar ordenados pelo nome do sócio. b) Escreva uma função que lhe permita acrescentar um novo sócio. c) Escreva uma função que lhe permita listar a informação referente a todos os sócios. d) Escreva uma função que lhe permita remover um sócio, a partir do seu nome. e) Escreva uma função que lhe permita armazenar a lista num ficheiro designado por socios.bin. 2. O Dr. Sampaio, médico de clínica geral, foi destacado para se deslocar às Terças e Sextas Feiras à freguesia de Outeiro para aí atender a alguns pacientes. Até aqui o historial de cada paciente tem sido mantido, pelos vários médicos que se deslocam a Outeiro, em fichas de papel. No entanto esta solução tem levantado alguns problemas: é que o acesso à informação é lento, as fichas de papel tendem a deteriorar-se e alguns dos médicos têm uma letra ilegível. Por estes e outros motivos o Dr. Sampaio pediu à junta de freguesia para ver se seria possível instalar um computador com um programa de gestão de pacientes, de preferência nada de muito complicado, bastando que permita guardar o nome, a data de nascimento e o historial médico de cada paciente. Cabe-lhe a si implementar tal programa (não se esqueça, são necessárias as rotinas para inserir, remover, alterar, consultar, salvaguardar/aceder, listar,...). LISTAS DUPLAMENTE LIGADAS 3. Pretende-se implementar um programa para gerir a informação referente aos funcionários de uma Câmara Municipal, utilizando para tal uma lista duplamente ligada. A informação a reter para cada funcionário consiste no número do bilhete de identidade, nome e vencimento. Suponha que os funcionários se encontram ordenados pelo número do bilhete de identidade. 1

a) Comece por definir o tipo de nodo a usar na lista, contendo toda a informação necessária. b) Desenvolva uma função que lhe permita inserir um novo funcionário na lista. c) Desenvolva uma função que lhe permita pesquisar um funcionário pelo seu número de bilhete de identidade. d) Desenvolva uma função que lhe permita listar todos os funcionários existentes na lista. e) Desenvolva uma função que lhe permita gravar e ler para/do ficheiro. LISTAS CIRCULARES SIMPLES 4. A Comissão Nacional de Eleições pretende adquirir uma aplicação para gerir a informação de todos os eleitores existentes em Portugal. A informação a reter para cada eleitor consiste no número, nome, data de nascimento e residência. Pretende-se utilizar uma lista circular simples ordenada pelo número de eleitor. a) Comece por definir o tipo de nodo a usar na lista, contendo toda a informação necessária. b) Escreva uma função que lhe permita inserir um novo eleitor na lista. c) Escreva uma função que lhe permita remover um eleitor da lista. d) Escreva uma função que lhe permita listar todos os eleitores com idade superior ou igual a 50 anos. e) Escreva uma função que lhe permita armazenar a lista num ficheiro designado por eleitores.bin. STACK s 5. Pretende-se que desenvolva um programa que transforme uma expressão matemática em notação infixa para notação sufixa (notação Polaca). Para efectuar esta transformação deverá ter em atenção as seguintes regras: um operador é sempre empilhado; um operador no topo é desempilhado quando chega outro operador de menor ou igual prioridade; um parêntesis de abertura é sempre empilhado; um parêntesis de fecho faz desempilhar até ao parêntesis de abertura. Exemplos: 2 * ( 3 + 4 ) 2 3 4 + * ( 1 + 5 ) * ( 8 - ( 4-1 ) ) 1 5 + 8 4 1 - - * 2 + 4 * 5 2 4 5 * + 2

QUEUE s 6. A oficina de automóveis A Ribeira utilizando as novas tecnologias pretende dar uma resposta cabal ao aumento crescente dos seus clientes. Assim, os clientes ao chegarem à oficina, dirigem-se à recepção, onde preenchem uma ficha, que para além de conter a informação pessoal, serve para determinar a ordem de atendimento. Pretende-se que implemente um programa com base numa queue estática que realize as seguintes operações: a) Escreva uma função que lhe permita inserir um novo cliente na fila. b) Escreva uma função que lhe permita atender um cliente. c) Escreva uma função que lhe permita gravar num ficheiro todos os clientes existentes em fila de espera. d) Escreva uma função que lhe permita ler do ficheiro criado na alínea anterior todos os clientes. 7. A secção de consultas sem marcação do Centro de Saúde de Bragança deparava-se com algumas dificuldades no atendimento dos pacientes, os quais tinham a tendência natural para "dar o golpe", acumulando-se às portas dos consultórios, dificultando o trabalho dos médicos, enfermeiros e paramédicos. O director do centro de saúde decidiu pôr ordem à situação, mandando implementar um sistema que garantisse o atendimento ordenado dos pacientes. A solução encontrada consistiu em instalar um leitor de código de barras no qual os pacientes, logo que chegam ao centro de saúde, passam o cartão de utente ficando imediatamente inseridos numa fila de espera informatizada, que trata de chamar cada um na sua vez. Cabe-lhe a si implementar a parte informática de tal sistema sabendo que através da leitura do cartão é possível saber o nome, data de nascimento, número de beneficiário e historial médico do paciente (não se esqueça, são necessárias as rotinas para inserir, remover, salvaguardar/aceder,...). TABELAS DE HASH 8. A Câmara Municipal de Bragança pretende manter um registo de todos os moradores guardando para cada um deles informação sobre a freguesia onde reside, morada e telefone. Cada morador é identificado pelo número do BI e é também guardado o seu nome e número de contribuinte. Implemente em C um programa que permita gerir esta informação (adicionar novo morador, remover morador, alterar e consultar informações). Após cada utilização devem ser gravadas as alterações para posterior entrada no sistema. NOTA: Use tabelas de hash com listas de colisões. 3

9. Crie mais duas funções no âmbito do problema do exercício anterior: uma função em C que determine o número de colisões para cada uma das posições na tabela; e uma outra que permita pesquisar determinada informação na tabela, tendo como parâmetro um campo da estrutura que não é chave. 10. Considere que se pretende alterar o programa anterior de forma a que: cada chave representa o n.º BI do chefe de família e portanto deve-lhe estar associada não apenas a informação do chefe mas de todo o agregado familiar considera-se um agregado familiar um conjunto de pessoas que partilham a mesma freguesia, morada e telefone. Altere o exercício anterior usando uma tabela de hash (com listas de colisões ) onde cada nodo tem pendurada uma lista do agregado familiar 11. Crie um programa de gestão para o problema dos exercícios anteriores usando uma tabela de hash com linear probing. 12. Hospital Distrital de Bragança mantém um registo de todos os pacientes que já atendeu. Assim quando alguém dá entrada pela primeira vez é criada uma ficha com o número do bilhete de identidade e nome do paciente, guarda-se também o número de contribuinte para emitir os recibos das taxas moderadoras. Sempre que o paciente dá novamente entrada no hospital é identificado pelo número do bilhete de identidade. NOTA: O historial médico é obtido através do sistema central do ministério da saúde. Pede-se que implemente um programa capaz de informatizar a gestão dos pacientes do Hospital Distrital de Bragança (não se esqueça, são necessárias as rotinas para inserir, remover, alterar, consultar, salvaguardar/aceder,...). ÁRVORES 13. Defina, em C, as estruturas necessárias para representar uma árvore binária de pesquisa, em que a chave é constituída por um número inteiro e a restante informação consiste nesse número escrito por extenso. Para essas estruturas, construa: a) uma função que, dado um apontador para a raiz de uma árvore binária de pesquisa, juntamente com a chave e a informação de um nodo a inserir, permita inserir esse nodo na árvore, retornando um apontador para a árvore resultado obtida; b) uma função que permita fazer a travessia de uma árvore binária de pesquisa em in-ordem, imprimindo desta forma os nodos por ordem crescente da chave; c) uma função de inserção de nodos numa árvore binária de pesquisa que receba um duplo apontador para a raiz da árvore, juntamente com a chave e a 4

informação de um nodo a inserir, e retorne um valor booleano que indique insucesso sempre que o nodo a inserir já exista na árvore. 14. Escreva uma função que conte o número de nodos de uma árvore binária. 15. Escreva uma função que conte o número de folhas de uma árvore binária. 16. Pretende-se converter um texto numa árvore binária de pesquisa contendo todas as palavras, mas sem repetições na árvore. Cada nodo deverá conter, além da palavra, o total de ocorrências da palavra no texto. Construa as funções necessárias a tal tarefa de forma modular, isto é, funções para inserir nodos na árvore, para tratar o texto e para visualizar a árvore no final. 17. Escreva uma função que permita espelhar uma árvore binária, isto é, para cada nodo troca os seus filhos esquerdo e direito. 18. Escreva uma função que permita construir uma árvore de execução a partir de uma expressão matemática parentisada, para depois a imprimir em notação polaca (sufixa ou pós-ordem). Por exemplo: Expressão matemática parentisada: ((((a + b) * c)-(d / f)) + g) Árvore de execução: + - g * / + c d f a b Notação polaca: a b + c * d f / - g + 20. Pretende-se gerir, usando estruturas dinâmicas, o sistema de acessos dos utilizadores a uma máquina Unix. Para isso, projectou-se usar uma árvore binária de pesquisa que guarde a informação relevante do utilizador (nome, login e password). Para cada utilizador, pretendem-se guardar ainda as datas e horas de acesso ao sistema. Implemente as seguintes funcionalidades: a) inserir utilizadores b) fazer o login de um utilizador, verificando a sua password c) eliminar um utilizador do sistema 5

21. A clínica privada SóComSaúde funciona no centro de Bragança e apenas admite sócios. Estes para darem entrada na clínica apresentam o cartão de sócio e só são atendidos após a recepcionista confirmar se as cotas estão pagas. Este sistema guarda o nome, a data de nascimento, o historial médico e a data até à qual as cotas estão pagas. Pede-se que implemente um programa que permita informatizar o sistema de gestão de pacientes da clínica SóComSaude (não se esqueça, são necessárias as rotinas para inserir, remover, alterar, consultar, salvaguardar/aceder, listar,...). GRAFOS 22. Defina, em C, as estruturas necessárias para representar o grafo da seguinte figura, usando listas de adjacências, sabendo que a informação a reter para cada vértice é o nome da cidade e o número de habitantes, e para cada ligação é a designação da estrada e a distância. 23. Construa funções que permitam, para o grafo definido no exercício anterior: a) visualizar de alguma forma o grafo b) adicionar vértices c) remover vértices d) adicionar ligações e) remover ligações 24. Construa uma função que permita determinar os sucessores de um dado vértice. 25. Construa uma função que permita determinar os antecessores de um dado vértice. 26. Construa uma função que permita verificar se há caminho entre dois vértices dados. 6

27. Construa uma função que permita determinar um caminho entre dois vértices dados. 28. Construa uma função que permita determinar todos os vértices alcançáveis a partir de um dado vértice. 29. Construa uma função que permita determinar todos os vértices que alcançam um dado vértice. 30. Construa uma função que permita determinar o fecho transitivo do grafo. 31. Construa uma função que permita determinar o menor caminho (com menor número de vértices) entre dois vértices dados. 32. Construa uma função que permita determinar o caminho de menor custo entre dois vértices dados. ALGORITMOS DE ORDENAÇÃO 33. Crie e inicialize um array de inteiros não ordenado e aplique o processo de ordenação Bubble Sort para posicionar os números por ordem descendente. 34. Crie e inicialize um array de inteiros não ordenado e aplique dois ou três processos de ordenação (Insert Sort, Selection Sort, Bubble Sort, Merge Sort ou Quick Sort) e compare-os em termos de número de trocas e número de comparações. 35. Considere que a pauta de classificações da disciplina de Técnicas de Programação (Nº Mecanográfico, Nome, Classificação) não aparecerá, este ano, por ordem alfabética dos nomes dos alunos mas sim por ordem descendente de classificações. Dentro da mesma classificação deverão aparecer então os nomes por ordem alfabética. Sugestão: Preencha uma estrutura (array ou lista ligada) com alguns nomes e classificações para testar o algoritmo. 7