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



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

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

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

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

Trabalho Prático 1 Tipos Abstratos de Dados

Trabalho 3: Agenda de Tarefas

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

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

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

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

Especificação do 3º Trabalho

Trabalho 7 Fila de prioridade usando heap para simulação de atendimento

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

BR DOT COM SISPON: MANUAL DO USUÁRIO

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

Especificação do Trabalho Prático

Filas: conceitos e implementações

Para os demais formatos, o relatório será gerado mas virá com configurações incorretas.

Algoritmos e Estruturas de Dados I

Métodos Computacionais. Fila

Estrutura de Dados Básica

Sistema Rodoviário Tabajara

Programação Orientada a Objetos: Lista de exercícios #1. Bruno Góis Mateus

MANUAL MOODLE - PROFESSORES

Catálogo de Padrões de Dados

Descrição da aplicação

MIT072 Manual de Operação do Portal - Professores

Manual MQS. Logo após colocar essas informações abrirá a página inicial do sistema:

Treinamento - Union Web

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

Capítulo 13 Pastas e Arquivos

GATI Gestão de Atendimento Inteligente. Manual de Uso. powered by OPUS Software v1.0

AGHOS - GESTÃO E REGULAÇÃO ASSISTENCIAL E FINANCEIRA DE SAÚDE MÓDULO DE REGULAÇÃO AMBULATORIAL DE CONSULTAS ESPECIALIZADAS

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

Busca. Pesquisa sequencial

Sistema Integrado de Gerenciamento ARTESP. MANUAL DO USUÁRIO - SIGA Extranet GRD e Projetos. MANUAL DO USUÁRIO SIGA EXTRANET GRD e Projetos

1 Funções básicas de implementação de arquivos

Tipo Abstrato de Dados

Como estudar o SIPIA CT

Especificação do Trabalho

Implementando uma Classe e Criando Objetos a partir dela

AULA 16 - Sistema de Arquivos

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

VERSÃO VERSÃO FINANCEIRO NEFRODATA ESTOQUE FINALIZAÇÃO: 10 JUN.

Ter o controle das pastas (Prontuários) armazenadas no "SAME", utilizando-se do recurso do "Volume".

Tutorial 7 Fóruns no Moodle

Guia para utilização do ambiente de EaD UniRitter

ACESSANDO COM USUÁRIO DE PROFESSOR

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

ÍNDICE. Tela de Configuração Dados de Etiqueta Configuração da Impressora Configuração do Papel Itens para Inserção...

AGENDAMENTO PARA IMPORTAÇÃO DE NOTAS FISCAIS 1. PARÂMETROS DO ESTABELECIMENTO CONFIGURAÇÃO DO AGENDADOR... 3

Curso em Sistema de Editoração Eletrônica de Revistas (SEER) - Tutorial Editores/Editores de Seção

Agendador de Rotinas

Projeto ECA na Escola - Plataforma de Educação à Distância

GUIA DE ORIENTAÇÃO. 1- Para acessar o sistema é necessário seguir os passos abaixo:

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Astra LX Registro de Pacientes e Médicos Guia para o acesso aos registros de Pacientes e Médicos e eliminação de dados duplicados no AstraLX

Início Rápido para o Templo

PROCEDIMENTOS PARA AQUISIÇÃO

Lista restrita onde as operações de inserção e retirada são feitas nas extremidades. Deque (fila de final duplo).

SUPORTE TÉCNICO EBS. Envie-nos suas dúvidas e/ou sugestões para

Curso Online A Escola no Combate ao Trabalho Infantil Plataforma de Educação à Distância

FS Sistema: Futura Server. Caminho: Contas a Receber>Boleto>Boleto Baixa. Referência: FS Versão:

(Capitais e Interior) (Demais Localidades) (Capitais e Interior) Golden Fone (SAC)

MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO-GERAL DE MODERNIZAÇÃO E INFORMÁTICA

Aula 1 Tipo Abstrato de Dados

CÓPIA E EXPORTAÇÃO DE SALA

GP Gestão de Pessoal. Vale Transporte

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

Guia do Usuário. idocs Content Server v

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

SADLD. Software. Manual de Operação. Sistema de Apoio ao Diagnóstico de Lesões Dentárias utilizando Espectroscopia Raman

SIE - SISTEMA DE INFORMAÇÕES PARA O ENSINO CADASTRO DE FUNCIONÁRIOS

PROGRAMAÇÃO II 3. FILA DINÂMICA

Criar as tabelas para um banco de dados

Manual do Sistema de Almoxarifado P á g i n a 2. Manual do Sistema de Almoxarifado Geral. Núcleo de Tecnologia da Informação

FCONT Correção dos erros apresentados na validação

Índice Notificações Menu lateral... 2

Ficheiros binários 1. Ficheiros binários

Manual do Usuário. Sistema para Administração de Condomínios MANUAL USUÁRIO. Bancos do Condomínio. ENG Sistemas - 1 -

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

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

Sistemas Operacionais. Prof. André Y. Kusumoto

RELATÓRIO DE PROGRAMAÇÃO II. Igor Bissoli. Ramon Bambini. Victor Melo

Como usar as Instruções de Embarque avançadas em PDF

Manual do Usuário. Protocolo

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

Tutorial para a geração do Relatório de Gestão em Portable Document Format (PDF)

Manual do Gate Expresso e Rodoviário

UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO Diretoria de Informática Departamento de Desenvolvimento de Sistemas de Informação

O Gerenciamento de Documentos Analógico/Digital

Neo Solutions Manual do usuário Net Contábil. Índice

Especificação do Trabalho Prático

Assessoria Técnica de Tecnologia da Informação - ATTI. Projeto de Informatização da Secretaria Municipal de Saúde do Município de São Paulo

Manual de utilização

Transcrição:

Universidade Federal do Espírito Santo Departamento de Informática Estruturas de Dados (INF09292) 1 o Trabalho Prático Período: 2011/1 Prof a Patrícia Dockhorn Costa Email: pdcosta@inf.ufes.br Data de Entrega: 18/05/2011 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 ed201101cc:trab1:<nome1>:<nome2> Por exemplo: ed201101cc: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, porto.h, porto.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 através da chegada de navios, a serem descarregados. À medida que chegam, os navios entram em uma fila de navios e esperam para serem processados. Processar um navio significa carregá-lo, no caso do navio estar 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 (esses containers são designados para um determinado navio). Os containers retirados de um navio são imediatamente retirados 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 No porto mostrado na figura acima, 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 sistema portuário pode ser implementado com um conjunto de listas encadeadas: basicamente, implementa-se uma lista de Navios, na qual cada célula contém o nome do navio (identificador único), bem como uma lista de 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: 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

Como pode ser visto na figura, no conjunto de 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 lista de navios. Nesse trabalho, você deverá implementar essa estrutura. No site da disciplina pode ser encontrada a especificação do TAD (porto.h), que define os seguintes tipos opacos e operações: //Tipo que define um porto typedef struct porto Porto; //Tipo que define um navio typedef struct navio Navio; //Tipo que define um container typedef struct container Container; /*Cria um novo porto com um identificador id (único no sistema)*/ Porto* CriaPorto(char* id); /*Cria um novo navio com um identificador id. Este navio ainda nao esta' em nenhum porto */ Navio* CriaNavio(Porto* p, char* id); /*Insere um container em um conjunto de containers disponiveis em um porto. Vale ressaltar que esta funcao nao carrega o container em navio */ Container* InsereContainerPorto (Porto* p, char* id_navio, char* id_container); /*Retira um container de um determinado porto (que nao esteja carregado em navio)*/ Container* RetiraContainerPorto (Porto* p, char* id_container); /*Anuncia a chegada de um navio (carregado ou vazio) em um dado porto. O navio vai para a ultima posicao da fila */ void ChegaNavio (Porto* p, Navio* n); /*Anuncia a chegada de um navio prioritario (carregado ou vazio) em um dado porto. O navio vai para a primeira posicao da fila */ void ChegaNavioPrioritario (Porto* p, Navio* n); /*Funcao que processa o primeiro navio da lista de navios do porto. Processar significa carregar (caso o navio esteja vazio) ou descarregar (caso o navio esteja cheio). Assim que o navio for processado, ele deve deixar o porto (ou seja, deve ser excluido da lista de navios). A função retorna o navio retirado, com ou sem containers */ Navio* ProcessaNavio(Porto* p); /*Imprime todos os containers carregados e um determinado navio, no seguinte formato (para o exemplo da figura, considere que pediu-se para imprimir informações do navio 3): C2, C3, C4, C5 */ void ImprimeContainersNavio (Porto* p, Navio* n); /*Imprime todos os containers disponiveis em um porto (ou seja, nao carregados em navios). Para o exemplo da figura, deve-se imprimir os containers, no seguinte formato: Containers do Porto vitoria: C7(navio1), C8(navio1), C9(navio1), C10(navio1), C11(navio15), C12(navio15), C13(navio15) */ void ImprimeContainersPorto (Porto* p);

/*Imprime todos os navios de um determinado porto (e seus containers), no seguinte formato: Navio: navio2 C1 C2, C3, C4, C5 C6 */ void ImprimeNaviosPorto (Porto* p); /*Imprime todas as informacoes referentes a um porto (lista de navios e containers, lista de containers disponiveis), no seguinte formato: Navios do Porto vitoria: Navio: navio2 C1 C2, C3, C4, C5 C6 Containers do Porto vitoria: C7(navio1), C8(navio1), C9(navio1), C10(navio1), C11(navio15), C12(navio15), C13(navio15)*; void ImprimePorto (Porto* p); /* Exclui toda a estrutura do porto, liberando a memoria alocada para todas as estruturas de dados utilizadas */ void ExcluirPorto (Porto* p); Dicas para implementação do arquivo porto.c (implementação do TAD porto.h) A estrutura porto deverá conter um campo com o nome do porto (que o identifica unicamente), e campos que definem as listas de containers e navios. Seria algo do tipo (apenas exemplo): struct porto{ char* id; lista_containers* containers; lista_navios* navios; } Para implementar estas listas, são necessários dois TAD s (a serem importados no arquivo porto.c): uma lista de containers (containers.h, containers.c) e uma lista de navios (navios.h, navios.c). Estes tads não serão fornecidos pela professora, portanto, o aluno deve definir os tipos e as operações a serem especificados por estes tads. Notem que um item da lista de navios contém um ponteiro para uma lista de containers. Isso significa que o Tad navios deve incluir o Tad containers.

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 porto. O programa testador precisa manter uma lista de portos, que poderá ser definda por um vetor de ponteiros para portos, visto que no máximo 20 portos serão incluídos no sistema portuário. 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 lista de 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 n1 INCLUICONTAINERPORTO vitoria c2 n1 INCLUICONTAINERPORTO vitoria c3 n1 INCLUICONTAINERPORTO vitoria c4 n2 INCLUICONTAINERPORTO vitoria c5 n3 INCLUICONTAINERPORTO vitoria c6 n2 INCLUICONTAINERPORTO roterda c7 n1 INCLUICONTAINERPORTO roterda c8 n2 INCLUICONTAINERPORTO roterda c9 n3 INCLUICONTAINERPORTO roterda c10 n4 INCLUICONTAINERPORTO santos c11 n4 INCLUICONTAINERPORTO santos c12 n4 INCLUICONTAINERPORTO santos c13 n5 INCLUICONTAINERPORTO santos c14 n6 EXCLUICONTAINERPORTO santos c14 IMPRIMECONTAINERSPORTO santos IMPRIMECONTAINERSPORTO vitoria IMPRIMECONTAINERSPORTO roterda CRIANAVIO n1 vitoria CRIANAVIO n2 vitoria CRIANAVIO n3 roterda CRIANAVIO n4 santos CRIANAVIO n5 santos CRIANAVIO n6 santos CRIANAVIO n7 roterda CRIANAVIO n8 santos CRIANAVIO n9 vitoria IMPRIMENAVIOSPORTO vitoria IMPRIMENAVIOSPORTO santos IMPRIMENAVIOSPORTO roterda

TRANSPORTA vitoria roterda TRANSPORTA roterda vitoria TRANSPORTA santos vitoria TRANSPORTA vitoria santos INCLUICONTAINERPORTO vitoria c15 n8 INCLUICONTAINERPORTO santos c16 n8 INCLUICONTAINERPORTO santos c17 n8 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 É garantido que o arquivo de entrada não inclui dados inconsistentes (identificadores incorretos, duplicados, etc.) Os comandos de impressão de dados (IMPRIMECONTAINERSPORTO, IMPRIMENAVIOSPORTO e IMPRIMEPORTO), imprimem os dados com o formato especificado no tad porto. Os comandos CRIAPORTO, INCLUICONTAINERPORTO, EXCLUICONTAINERPORTO, CRIANAVIO e EXCLUIPORTO possuem uma correspondência direta com as funções do tad porto. Portanto, para interpretá-los, vide documentação do arquivo porto.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: navio2 Navio: navio9 Navios do Porto santos Navio: navio5 Navio: navio6 Navio: navio8 Navios do Porto roterda Navio: navio7 Navios do Porto vitoria Navio: navio7 Containers do Porto vitoria: C5(navio3) Navios do Porto roterda 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 Containers do Porto santos: C16(navio8), c17(navio8) BOM TRABALHO!