Universidade Federal da Bahia
Departamento de Ciência da Computação
MATA40 - Algoritmos e Estruturas de Dados I
Prof.: Flávio M. Assis Silva
7 de outubro de 2008
Manipulação de Listas
1
Descrição Geral do Trabalho
Neste trabalho o aluno deve fazer um programa que mantém informações sobre vendas de uma montadora de carros. O programa deve manter o número
de vendas para combinações de modelos de carros, cor e cidade onde o carro
foi vendido. Para isto, o programa deve obedecer aos itens abaixo:
• os modelos de carros devem ser mantidos em uma lista encadeada simples (cada item da lista mantém o nome de um modelo - p.e., gol, golf,
santana, etc.);
• as cores de carros devem ser mantidas em uma lista encadeada simples
(cada item da lista contém o nome de uma cor - p.e., azul, cinza chumbo,
cinza quasar, etc.);
• as cidades devem ser mantidas em uma lista encadeada simples (cada
item da lista contém o nome de uma cidade);
• cada quantidade de vendas de um determinado carro, de uma determinada cor, em uma determinada cidade deve ser armazenada como um
valor inteiro alocado dinamicamente;
• para atender às consultas (descritas a seguir), os itens informando quantidades de vendas devem formar listas encadeadas para cada uma das
dimensões (modelo de carro, cor e cidade), como indicado em sala de
aula.
1
2
Formato de Entrada
O programa deve ler da entrada padrão. A entrada consistirá de uma
seqüência de informações sobre vendas de carros, seguida por uma seqüência
de operações.
A seqüência de informações sobre vendas terá o seguinte formato. A
primeira linha terá um número inteiro, indicando uma quantidade de nomes
de modelos de carros. Representemos este número por m. Haverá em seguida
m linhas, cada uma com o nome de um modelo de carro (todos distintos entre
si).
Em seguida, haverá uma linha com outro número inteiro. Este número
indicará uma quantidade de cores. Representemos este número por c. Haverá
em seguida c linhas, cada uma com o nome de uma cor (todos distintos entre
si).
Em seguida, haverá uma linha com outro número inteiro. Este número
indicará uma quantidade de nomes de cidades. Representemos este número
por t. Haverá em seguida t linhas, cada uma com o nome de uma cidade
(todos distintos entre si).
Em seguida, haverá uma linha com mais um número inteiro. Representemos este número por v. Haverá em seguida v linhas, cada uma com o seguinte
formato: um nome de modelo de carro, seguido por um espaço, seguido pelo
nome de uma cor, seguido por um espaço, seguido pelo nome de uma cidade,
seguido por um espaço, seguido por um número inteiro. Esta linha indica o
número de vendas (último número na linha) de carros do modelo, da cor e
na cidade indicados.
Não haverá, nesta seção, mais de uma linha com os mesmos valores para
os três itens (modelo, cor e cidade), tomados em conjunto.
Assuma que um nome, seja de modelo de carro, cor ou cidade, é uma
seqüência de letras, de, no máximo, tamanho 20. Assuma que todos os
valores inteiros desta seção são maiores que zero.
Em seguida, haverá uma seqüência de operações. Cada operação pode ser
de um dos tipos definidos abaixo. A seqüência termina com uma operação
do tipo término de seqüência de operações. Os formatos das operações são:
1. consulta quantidade de carros vendidos: esta operação consistirá
de uma linha, contendo a letra ’m’, seguida de um espaço, seguido do
nome de um modelo de carro. Esta operação retorna o número de carros
do modelo indicado vendidos, independentemente de cor e cidade.
2. consulta quantidade de carros de uma determinada cor vendidos: esta operação consistirá de uma linha, contendo a letra ’c’,
2
seguida de um espaço, seguido do nome de uma cor. Esta operação retorna o número de carros vendidos da cor indicada, independentemente
de modelo e cidade.
3. consulta quantidade de carros vendidos em uma determinada
cidade: esta operação consistirá de uma linha, contendo a letra ’t’,
seguida de um espaço, seguido do nome de uma cidade. Esta operação
retorna o número de carros vendidos na cidade indicada, independentemente de modelo e cor.
4. consulta quantidade de carro por modelo e cidade: esta operação
consistirá de uma linha, contendo a letra ’s’, seguida de um espaço, seguido do nome de um modelo de carro, seguido de um espaço, seguido
do nome de uma cidade. Esta operação retorna o número de carros do
modelo indicado vendidos na cidade indicada (independentemente da
cor).
5. consulta quantidade de carro por modelo e cor: esta operação
consistirá de uma linha, contendo a letra ’u’, seguida de um espaço,
seguido do nome de um modelo de carro, seguido de um espaço, seguido do nome de uma cor. Esta operação retorna o número de carros
vendidos do modelo e cor indicados (independentemente da cidade).
6. consulta quantidade de carro por modelo, cor e cidade: esta
operação consistirá de uma linha contendo a letra ’v’, seguida de um
espaço, seguido do nome de um modelo de carro, seguido de um espaço,
seguido do nome de uma cor, seguido de um espaço, seguido pelo nome
de uma cidade. Esta operação retorna o número de carros vendidos do
modelo e cor e na cidade indicados.
7. remove informação sobre venda: esta operação consistirá de uma
linha contendo a letra ’r’, seguida de um espaço, seguido do nome de
um modelo de carro, seguido de um espaço, seguido do nome de uma
cor, seguido de um espaço, seguido pelo nome de uma cidade. Esta
operação remove a célula que indica o número de carros vendidos do
modelo, cor e cidade indicados. As listas de nomes de modelos de
carros, cores e cidades não são alteradas.
8. lista nomes de modelos de carros: esta operação consistirá de
uma linha contendo a letra ’l’, seguida de um espaço, seguido da letra
’m’. Esta operação lista os nomes dos modelos de carros mantidos pelo
programa (lidos na primeira parte da entrada).
3
9. lista nomes de cores: esta operação consistirá de uma linha contendo
a letra ’l’, seguida de um espaço, seguido da letra ’c’. Esta operação
lista os nomes de cores mantidos pelo programa (lidos na primeira parte
da entrada).
10. lista nomes de cidades: esta operação consistirá de uma linha contendo a letra ’l’, seguida de um espaço, seguido da letra ’t’. Esta
operação lista os nomes de cidades mantidos pelo programa (lidos na
primeira parte da entrada).
11. término de seqüência de operações: esta operação consistirá de
uma linha contendo a letra ’e’.
Somente ocorrerão letras minúsculas na entrada. Não serão usados acentos.
3
Formato de Saı́da
O programa deve gerar sua saı́da na saı́da padrão.
As operações de consulta retornarão um valor inteiro. As saı́das destas
operações devem ser uma em cada linha.
As operações de remoção e de término de seqüência de operações não
geram saı́da.
As operações de listagem devem apresentar cada item da lista em uma
linha separada.
Todas as letras na saı́da devem ser minúsculas.
Importante: O programa não deve gerar nenhum caractere na saı́da que
não siga o formato descrito nesta seção.
4
Observações
• trabalho individual
• data de entrega: 3 de novembro
• a entrega do trabalho será feita através da web, como indicado em sala
de aula
• o aluno deve usar apenas os seguintes compiladores (os trabalhos somente serão compilados neles):
4
– Pascal: FreePascal
– C: gcc ou djgpp
– C++: g++ ou djgpp
– Java: JDK mais recente
Erros de compilação gerados pelos compiladores acima serão
considerados erros do trabalho. Em outras palavras, somente
serão aceitos trabalhos compilados nos compiladores acima.
5
Download

1 Descriç˜ao Geral do Trabalho