Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Documentos relacionados
Sistema Rodoviário Tabajara

WikED! Na última década, um grande número de sistemas colaborativos apareceram

Universidade Federal do Espírito Santo - Departamento de Informática. Estruturas de Dados I INF09292

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Universidade Federal do Espírito Santo - Departamento de Informática. Estruturas de Dados I INF09292

Trabalho Prático 2 Mundo dos Blocos Alocação Dinâmica / Listas Encadeadas

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Programação Aplicada de Computadores. Trabalho 1 Freecell

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Programação II. Trabalho 2 Freecell

Cada cliente, necessariamente, sempre deve estar conectado a um Broker, e somente um;

Estruturas de Dados II. Caixeiro Viajante

Máquinas de Busca. Estruturas de Dados II Prof. a Mariella Berger. 1. Objetivo

Primeiro Trabalho de Estruturas de Dados (Sistema Portuário) Relatório de Correção

Todos os arquivos.c e.h criados (exigido código muito bem documentado!). O makefile.

Quinto Trabalho Prático. Este trabalho tem como objetivo indexar arquivos de dados usando um índice árvore-b.

Algoritmos e Estruturas de Dados II. Trabalho Prático 4

Lista de Exercícios 04

Quarto Trabalho Prático. Este trabalho tem como objetivo indexar arquivos de dados usando um índice simples ou linear. Descrição de páginas de disco

Caixeiro Viajante. Estruturas de Dados II. Prof. a Mariella Berger. 1. Objetivo

Terceiro Trabalho Prático. Este trabalho tem como objetivo ordenar um arquivo de dados e implementar as operações cosequenciais de merging e matching.

INE5408 Estruturas de Dados. Apresentação e Programa da Disciplina

Lista de Exercícios sobre Listas Implementadas por Encadeamento

2. Descrição do problema

Victor Hugo Andrade Soares monitor João Vitor dos Santos Tristão Primeiro Trabalho Prático

Segundo Trabalho Prático

Indexação e Busca. O objetivo deste trabalho é projetar e implementar um sistema de programas para indexação e busca em arquivos de texto.

Gauss-Seidel para Solução de Sistemas com Matrizes Banda Usando Armazenamento Especial

Trabalho 1: Árvore binária de busca

Segunda Parte do Trabalho Prático (Parte II) Valor: 60% Descrição do índice

Análise do problema. Desenvolvimento de programas. Desenvolvimento do algoritmo. Análise do problema

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)

Desenvolvimento de programas. Análise do problema. Análise do problema. Análise do problema. Desenvolvimento do algoritmo. Codificação do programa

Primeira Parte do Trabalho Prático (Parte I) Valor: 40% Descrição do arquivo de dados

Algoritmos e Estruturas de Dados II. Trabalho Prático 1

Desenvolvimento de programas

Trabalho de LP 15/07/2013. Prof. Flávio Miguel Varejão

Segundo Trabalho Prático

INF 1620 P4-09/07/03 Questão 1 Nome:

As mensagens HL7 de confirmação, ou ACK, são fundamentais para garantir que a comunicação HL7 em andamento seja continua e sem problemas.

Linguagens de Programação. Trabalhos. Carlos Bazilio

Trabalho Prático. Descrição do arquivo de dados

PRIMEIRA AVALIAÇÃO IDENTIFICAÇÃO. Nome: ID: 25/04/2005. PARTE I Questões Objetivas

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

Trabalho GA - Editor de Cenário Isométrico

Especificação do TP3

INF1007 Programação II

1 OBJETIVOS 2 HORÁRIO DE AULAS 3 PROGRAMA

Informática para Ciências e Engenharias-B 2017/18

4 Uma Linguagem Baseada em Máquinas de Estado 4.1. A Linguagem

Algoritmos e Estruturas de Dados II. Trabalho Prático 3

22/08/2011. Fila. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Fila. O que é? Para que serve?

Compiladores Prof. a Mariella Berger. Trabalho 2 Analisador Léxico

Realização: Apoio: Patrocínio:

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Departamento de Informática PUC-Rio INF Estruturas de Dados Lista 2 Completa (Gerada em 8 de maio de 2006)

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

Primeiro Trabalho Prático Turma A. Descrição do Trabalho. Considere os seguintes dados a respeito de um livro:

Web site. Profa. Patrícia Dockhorn Costa.

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Sistemas Operacionais I 2016/1

2ª. Competição Tecnológica (Outubro/2010)

Fila. SCC0502 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo

Trabalho Computacional Jogo da Forca

Informática para Ciências e Engenharias-B 2018/19

Compiladores Prof. a Mariella Berger. Trabalho 3 Analisador Semântico

Trabalho Linguagem e Programação de Compiladores

Unidade de Processamento Baseado em Pilha Fundamentos de sistemas digitais

Algoritmos e Programação

BCC202 - Estrutura de Dados I

Trabalho Prático Data de Entrega : 30 de Maio

Objetivos...2. Passo a passo: Como liberar as avarias aduaneiras de um BL?...2. Possíveis problemas ao efetuar a liberação de avarias aduaneiras...

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Problema do Caminho Hamiltoniano

Fila. Fila. Biblioteca. Biblioteca. Biblioteca. Biblioteca. O que é? Para que serve? Algoritmos e Estruturas de Dados I

Fila. Algoritmos e Estruturas de Dados I. Baseado no material de Thiago A. S. Pardo. Debora Medeiros

Working 03 : Conceitos Básicos II

Segundo Trabalho Prático Turma A

Aula 3 Constantes e funções de E/S

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

Working 08 : Tipos Abstratos de Dados

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

DMS - DOCUMENTO DE MODELAGEM DE SISTEMA VERSÃO: [NOME DO SISTEMA] [SIGLA] [AUTORES]

3 Ferramenta Proposta 3.1. Objetivos

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

PROGRAMAÇÃO DE COMPUTADORES I BCC Aula Prática 15

SISTEMAS DIGITAIS LETI, LEE Ano lectivo de 2015/2016 Trabalho 4 Módulos Sequenciais: Contadores e Registos

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

UFG - Instituto de Informática

INF1007 Programação II

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Primeiro Trabalho de IA/SI: Buscas. Entrega: 03/03/2019 (2 semanas)

Programar com o CARMEN

Não utilize caracteres acentuados ou especiais para nomes de pastas e arquivos.

Spectrum Miner. Versão 8.0. Guia do usuário para a integração do Portrait Dialogue

Fila. 26 e 31/8/2008 Representação/Implementação: Seqüencial estática Encadeada dinâmica Exercícios/Aplicações

1 Introdução. 2 Especificação

SCC Algoritmos e Estruturas de Dados II Profa. Cristina Oliveira. Terceiro Trabalho Prático Árvores B. Prazo máximo: 23:55h de 05/07/2012

SCC0504 Programação Orientada a Objetos Projeto

Transcrição:

Universidade Federal do Espírito Santo Departamento de Informática Estruturas de Dados I (INF09292) 1 o Trabalho Prático Período: 2012/1 Prof a Patrícia Dockhorn Costa Email: pdcosta@inf.ufes.br Data de Entrega: 14/05/2012 Grupos de 2 pessoas Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista. Regras Importantes Não é tolerado plágio. Trabalhos copiados serão penalizados com zero. A data de entrega é inadiável. Para cada dia de atraso, é retirado um ponto da nota do trabalho. Material a entregar Impresso: Documentação do trabalho, que deve conter: o Introdução: descrição do problema a ser resolvido e visão geral sobre o funcionamento do programa (em termos de módulos, arquivos, etc.). o Implementação: descrição da implementação do programa. Devem ser detalhadas as estruturas de dados utilizadas (de preferência com diagramas ilustrativos), o funcionamento das principais funções utilizadas incluindo pré e pós condições, o formato de entrada e saída de dados, bem como decisões tomadas relativas aos casos e detalhes de especificação que porventura estejam omissos no enunciado. Modularize o seu programa como discutido em sala de aula. o Conclusão: comentários gerais sobre o trabalho e as principais dificuldades encontradas em sua implementação. o Bibliografia: bibliografia utilizada para o desenvolvimento do trabalho, incluindo sites da Internet se for o caso. Por email (pdcosta@inf.ufes.br): o O assunto da mensagem deve ser ed201201:trab1:<nome1>:<nome2> Por exemplo: ed201201:trab1:<joaosilva>:<mariacosta> o Documentação do trabalho (em formato PDF). o Todos os arquivos.c e.h criados (exigido código muito bem documentado!). o O makefile. o Favor nomear os arquivos da seguinte maneira: containers.h, containers.c, navios.h, navios.c, portos.h, portos.c e simulaportos.c. Sistema Portuário Um sistema portuário tem a função de gerenciar as atividades realizadas em um porto. Neste porto, containers podem chegar por via terrestre ou via marítma. Quando chegam por via terrestre, eles são adicionados ao conjunto de containers do porto, que ficam disponíveis para serem carregados em navios. Containers chegam por via marítma em navios, a serem descarregados no porto. À medida que chegam, os navios entram em uma fila de navios e esperam para serem processados. Processar um navio significa carregá-lo, caso o navio esteja vazio, ou esvaziá-lo, caso o navio tenha algum container. Navios são carregados com os containers disponíveis no conjunto de containers do porto (cada container é designado para um determinado navio específico). Os containers retirados de um navio são imediatamente excluídos do

porto. Assim que os navios forem processados, eles são desconsiderados pelo sistema portuário. A figura a seguir ilustra o funcionamento do porto. processando navio fila de navios chegada de containers conjunto de containers Figura 1 - Figura ilustrativa do porto "vitoria No porto mostrado na Figura 1 (porto vitória ), há 3 navios na fila esperando para serem processados, um conjunto de containers disponíveis para serem carregados em navios e alguns caminhões e trens carregando o porto com containers. Esse porto pode ser implementado com um conjunto de listas encadeadas: basicamente, implementa-se uma Navios, na qual cada célula contém o nome do navio (identificador único), bem como uma containers que este navio eventualmente estiver transportando. Uma outra lista pode ser utilizada para armazenar o conjunto de containers do porto, na qual cada célula representa um container, que deve especificar o identificador único do container, e o identificador do navio para o qual ele será carregado. Isso pode ser observado na seguinte Figura 2. C7 C8 Navio2 C1 Navio2 C9 C2 C3 C4 C5 C10 Navio4 C6 Navio4 C11 5 Fila de Navios C12 5 C13 5 Conjunto de Containers do Porto Figura 2 - Estruturas de dados do porto "vitória"

Como pode ser visto na Figura 2, na containers há 4 containers (08, 09, 10 e 11) destinados para o navio 1 (identificador único navio1 ). Desta forma, quando o navio 1 for processado, estes containers serão carregados neste navio. Os outros containers se referem aos navios 15 e 16, que ainda não chegaram ao porto. Quando for a vez do navio 2, o container c2 será descarregado no navio (célula retirada) e este navio sairá da navios, ou seja, será excluído da navios do porto. O sistema portuário a ser implementado pelo trabalho é formado por uma portos, cada porto contendo uma navios e uma containers (como na figura Figura 2). A figura a seguir ilustra uma portos que implementa o sistema portuário. vitoria roterda santos containers navios containers navios containers navios Nesse trabalho, você deverá implementar essa estrutura. No site da disciplina pode ser encontrada a especificação do TAD (portos.h), que define os tipos opacos e operações deste TAD. A implementação dos TADs de navios e containers é responsabilidade dos alunos. O Programa Testador (simulaportos.c) O programa testador deverá ser capaz de ler as instruções do arquivo texto de entrada e realizar as devidas operações no TAD portos. Para isto, o programa testador precisa manter uma portos. O seu programa (simulaportos) deverá ler os dados de entrada a partir de um arquivo, cujo nome é passado como parâmetro na linha de comando (faz parte do trabalho descobrir como manipular arquivos e strings em C). Exemplo de execução do programa a partir da linha de comando: simulaportos entrada.txt O arquivo de entrada é basicamente uma comandos (um por linha) em formato texto. O último comando é a palavra FIM, que indica o final do arquivo. O formato a ser usado é exemplificado abaixo: Exemplo de arquivo de entrada CRIAPORTO vitoria CRIAPORTO roterda CRIAPORTO santos INCLUICONTAINERPORTO vitoria c1 navio1 INCLUICONTAINERPORTO vitoria c2 navio1 INCLUICONTAINERPORTO vitoria c3 navio1 INCLUICONTAINERPORTO vitoria c4 navio2 INCLUICONTAINERPORTO vitoria c5 navio3 INCLUICONTAINERPORTO vitoria c6 navio2 INCLUICONTAINERPORTO roterda c7 navio1 INCLUICONTAINERPORTO roterda c8 navio2 INCLUICONTAINERPORTO roterda c9 navio3 INCLUICONTAINERPORTO roterda c10 navio4 INCLUICONTAINERPORTO santos c11 navio4

INCLUICONTAINERPORTO santos c12 navio4 INCLUICONTAINERPORTO santos c13 navio5 INCLUICONTAINERPORTO santos c14 navio6 EXCLUICONTAINERPORTO santos c14 IMPRIMECONTAINERSPORTO santos IMPRIMECONTAINERSPORTO vitoria IMPRIMECONTAINERSPORTO roterda CRIANAVIO navio1 vitoria CRIANAVIO navio2 vitoria CRIANAVIO navio3 roterda CRIANAVIO navio4 santos CRIANAVIO navio5 santos CRIANAVIO navio6 santos CRIANAVIO navio7 roterda CRIANAVIO navio8 santos CRIANAVIO navio9 vitoria IMPRIMENAVIOSPORTO vitoria IMPRIMENAVIOSPORTO santos IMPRIMENAVIOSPORTO roterda TRANSPORTA vitoria roterda TRANSPORTA roterda vitoria TRANSPORTA santos vitoria TRANSPORTA vitoria santos INCLUICONTAINERPORTO vitoria c15 navio8 INCLUICONTAINERPORTO santos c16 navio8 INCLUICONTAINERPORTO santos c17 navio8 TRANSPORTA vitoria santos TRANSPORTA vitoria santos TRANSPORTAPRIORITARIO vitoria santos TRANSPORTA santos vitoria TRANSPORTAPRIORITARIO roterda vitoria TRANSPORTA santos roterda IMPRIMEPORTO vitoria IMPRIMEPORTO roterda IMPRIMEPORTO santos EXCLUIPORTO vitoria EXCLUIPORTO santos EXCLUIPORTO roterda FIM O seu programa deve checar consistência de dados do arquivo de entrada, como por exemplo: não incluir portos com os mesmos nomes, containeirs com os mesmos identificadores, etc. Para qualquer comando do arquivo de entrada, o teste de consistência deve ser realizado. Os comandos de impressão de dados (IMPRIMECONTAINERSPORTO, IMPRIMENAVIOSPORTO e IMPRIMEPORTO), imprimem os dados com o formato específico. Os comandos CRIAPORTO, INCLUICONTAINERPORTO, EXCLUICONTAINERPORTO, CRIANAVIO e EXCLUIPORTO possuem uma correspondência direta com as funções do tad portos. Portanto, para interpretá-los, vide documentação do arquivo portos.h.

O comando (TRANSPORTA porto1 porto2) faz com que seja processado o primeiro navio da fila de navios do porto1 e que este chegue no porto2 e entre na última posição da fila de navios. O comando (TRANSPORTAPRIORITARIO porto1 porto2) faz com que seja processado o primeiro navio da fila de navios do porto1 e que este chegue no porto2 e entre na primeira posição da fila de navios. Considerando o arquivo de entrada dado acima, espera-se o seguinte no arquivo de saída: Arquivo de saída para o arquivo entrada.txt Containers do Porto santos: C11(navio4), C12(navio4), C13(navio5) Containers do Porto vitoria: C1(navio1), C2(navio1), C3(navio1), c4(navio2), c5(navio3), c6(navio2) Containers do Porto roterda: C7(navio1), C8(navio2), C9(navio3), c10(navio4) Navios do Porto vitoria Navio: navio1 Navio: navio2 Navio: navio9 Navios do Porto santos Navio: navio4 Navio: navio5 Navio: navio6 Navio: navio8 Navios do Porto roterda Navio: navio3 Navio: navio7 Navios do Porto vitoria Navio: navio7 Navio: navio4 Containers do Porto vitoria: C5(navio3) Navios do Porto roterda Navio: navio1

c1, c2, c3 Navio: navio5 c13 Containers do Porto roterda: C7(navio1), c8(navio2), c10(navio4) Navios do Porto santos Navio: navio6 Navio: navio8 Navio: navio2 c4, c6 Navio: navio9 Navio: navio3 Containers do Porto santos: C16(navio8), c17(navio8) Como mostrado no arquivo de saída exemplo, existe uma padronização a ser seguida pelas funções de impressão: Imprime containers de um porto O comando IMPRIMECONTAINERSPORTO, imprime os containers no seguinte formato: Containers do Porto + nome-porto + : + id-container + ( + id-navio + ), + id-container + ( + idnavio + )... Por exemplo, o comando IMPRIMECONTAINERSPORTO vitoria gerou a seguinte saída: Containers do Porto vitoria: C1(navio1), C2(navio1), C3(navio1), c4(navio2), c5(navio3), c6(navio2) Imprime os navios de um porto O comando IMPRIMENAVIOSPORTO, imprime os navios do porto no seguinte formato: Navios do Porto + nome-porto + \n + id-container +, + id-container + + \n + id-container +, + id-container + + \n Por exemplo, o comando IMPRIMENAVIOSPORTO Roterda gerou a seguinte saída: Navios do Porto roterda Navio: navio1

c1, c2, c3 Navio: navio5 c13 Imprime os navios e containers de um porto O comando IMPRIMEPORTO, imprime os navios e os containers do porto, no seguinte formato: Navios do Porto + nome-porto + \n + id-container +, + id-container + + \n + id-container +, + id-container + + \n Containers do Porto + nome-porto + : + id-container + ( + id-navio + ), + id-container + ( + idnavio + )... Por exemplo, o comando IMPRIMEPORTO Santos gerou a seguinte saída: Navios do Porto santos Navio: navio6 Navio: navio8 Navio: navio2 c4, c6 Navio: navio9 Navio: navio3 Containers do Porto santos: C16(navio8), c17(navio8) Mensagens de erro Use a seguinte padronização para mensagens de erro: Erro: porto x já existente Erro: navio x já existente no porto x Erro: container x já existente no porto x Erro: não foi encontrado porto x Erro: não foi encontrado container x no porto x etc... BOM TRABALHO!