Universidade Federal do Espı́rito Santo - CT - DI
Trabalho Computacional - PD II - Engenharia de Computação
Profa. Claudia Boeres
Considere o esboço do estado do ES e n cidades enumeradas de 1, 2, . . . , n.
Na ilustração do mapa apresentado, consideramos n = 30. No entanto, o
número de cidades a serem consideradas no problema podem variar entre 15
e 30. Desta forma, o valor de n, os nomes das cidades e as suas respectivas
coordenadas x e y estão armazenadas no arquivo nome-coord.txt. Cada
estrada entre duas cidades possui um custo por quilômetro que deve ser
multiplicado pela distância para calcular o custo de viagem entre as cidades.
Além disso, o hotel em cada cidade possui um determinado valor para a
diária. Os valores das diárias e os custos por quilômetro estão armazenados
no arquivo diaria-custo.txt. Observe que a fórmula para o cálculo do custo
total de viagem mencionado nas questões seguintes é apresentada no item a)
de {Observações Importantes}.
Faça um programa na linguagem C para:
1. Ler o arquivo de dados nome-coord.txt
2. Ler o arquivo de dados diaria-custo.txt
3. Construir uma matriz Dn×n de distâncias entre todas as cidades e armazenar em um arquivo que se chamará distancia.txt
4. Construir uma matriz Cn×n de custos de viagem entre todas as cidades
e armazenar em um arquivo que se chamará custo.txt
5. Criar o arquivo saida.txt que deverá conter em cada linha, as respostas
dos itens 6, 7, 8 e 9 no seguinte formato:
linha
linha
linha
linha
1:
2:
3:
4:
respostas
respostas
respostas
respostas
do
do
do
do
item
item
item
item
6
7
8
9
separadas
separadas
separadas
separadas
por
por
por
por
espaços
espaços
espaços
espaços
em
em
em
em
branco
branco
branco
branco
6. Imprimir no arquivo saida.txt a(s) cidade(s) mais ao norte, mais ao
sul, mais a oeste, mais a leste e a mais central. Defina o critério para
encontrar a cidade mais central.
7. Construir (imprimir no arquivo saida.txt) o caminho da cidade 1 até
a cidade n, passando por todas as cidades na ordem 1 → 2 → 3 →
. . . → 29 → n. Calcular (imprimir no arquivo saida.txt) a distância
total deste caminho (usando a matriz D) e o custo total desta viagem
(usando a matriz C), considerando que o viajante dormirá uma noite
em cada cidade, exceto a cidade 1.
8. Construir (imprimir no arquivo saida.txt) um caminho da cidade 1
até a cidade n seguindo a lei de formação: a cidade seguinte no caminho é a mais próxima e de maior ordem que a atual, considerando as
cidades na ordem fornecida no arquivo nome-coord.txt e ilustradas
no gráfico. Exemplo: se estamos na cidade 10 a cidade seguinte será
uma cidade de maior ordem (por exemplo, a cidade 12 ou 15) e não
uma cidade de menor ordem (por exemplo, a cidade 8 ou 9). Se houver
empate com relação à distância, escolher a cidade de maior ordem. Calcular (imprimir no arquivo saida.txt) a distância total deste caminho
e o custo total desta viagem.
9. Construir (imprimir no arquivo saida.txt) um caminho da cidade 1
até a cidade n seguindo a lei de formação: a cidade seguinte no caminho é a menos custosa e e de maior ordem que a atual, considerando as
cidades na ordem fornecida no arquivo nome-coord.txt e ilustradas
no gráfico. Se houver empate com relação ao custo, escolher a cidade
de maior ordem. Calcular (imprimir no arquivo saida.txt) a distância
total deste caminho e o custo total desta viagem.
10. Considere que a empresa de transporte de carga VIAJECOMPAZ possui um centro de armazenamento de carga na cidade 10. O centro tem
que ser abastecido com a carga necessária à demanda das solicitações
das cidades do estado. Essa carga chega ao Espı́rito Santo na cidade 1
e a empresa VIAJECOMPAZ é responsável pela sua distribuição para
as cidades de 1 a 10 e abastecer o centro de armazenamento na cidade
10. As demais cidades do estado (11 a 30) não utilizam esta empresa
e se responsabilizam por buscar no centro de armazenamento a carga
solicitada. Devido à economia de custos e à possibilidade de interdições
de estradas, a empresa VIAJECOMPAZ deseja fazer um estudo dos k
(o valor de k deve ser lido pelo teclado) menores caminhos existentes entre as cidades 1 e 10 e que passem por todas as cidades entre
elas (2 a 9), calculando a distância total de cada caminho. Para isso,
deve-se escrever em um arquivo chamado caminhos.txt, as seguintes
informações:
• o número k de caminhos construı́dos
• a lista com todos os k caminhos calculados e suas respectivas
distâncias ordenadas em ordem crescente.
Observações importantes:
a) Para calcular o custo de viagem entre as cidades i e j, utilize a expressão:
CVij = cij × dij + diariaj
b) Os arquivos de dados nome-coord.txt e diaria-custo.txt estarão disponı́veis na página da disciplina (www.inf.ufes.br/~pet)
c) Data de Entrega: O trabalho deverá ser entregue até às 23:59 horas
do dia 28/11/2008 (sexta-feira).
A seguir, o esboço do ES com as n = 30 cidades.
27
30
26
29
25
25
24
24
23
26
28
22
23
21
21
20
27
22
20
19
18
19
17
18
16
16
15
17
14
13
15
12
10
11
14
9
10
13
8
9
11
12
8
7
7
6
1
6
5
5
4
4
2
3
3
2
1
1
2 3
4
5 6
7
8
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Forma de Entrega:
1. Compacte o arquivo texto (o nome do arquivo DEVE ser caminho.c)
com o código fonte do programa do seu trabalho e envie o arquivo
compactado para o e-mail [email protected]. O nome do arquivo
compactado deverá ser trab2.zip (por favor, não enviem .rar)
2. O assunto do e-mail deverá ser o seguinte (somente o que está entre aspas duplas): ”pd2:trab2:nome1:nome2”, onde nome1 e nome2 (máximo
2 componentes) são os nomes dos integrantes do grupo. Substitua
nome1 (e demais) pelo primeiro nome e último sobrenome, separados
por espaços. Compacte o arquivo fonte utilizando o programa (ou comando) zip e envie o arquivo compactado em anexo. Ressaltamos que
o arquivo trab2.zip gerado deverá conter apenas o arquivo com o código
fonte do seu trabalho (não podem ter arquivos executáveis ou qualquer
outro arquivo)
3. O recebimento dos trabalhos é automatizado. Siga as instruções à
risca pois algum erro na submissão pode inviabilizar a entrega do seu
trabalho. Não deixe para enviar seu trabalho nos momentos finais de
seu prazo. É comum a ocorrência de problemas em virtude de erros na
submissão. Logo, enviem com algumas horas de antecedência para que
haja tempo hábil para eventuais correções
Veja abaixo um exemplo de um e-mail de envio do trabalho do grupo formado por João da Silva e José Geraldo Castro (enviado por João da Silva).
Apenas um integrante do grupo envia o trabalho. Não use acentos, cedilhas
ou qualquer outro caractere especial.
Para: [email protected]
De: Joao da Silva
Assunto: pd2:trab2:Joao Silva:Jose Castro
Anexo: trab2.zip
Atenção:
1. No assunto, a disciplina (pd2) e a identificação do trabalho (trab2)
devem ser escritos todos em letras minúsculas
2. NÃO escreva o seu nome com caracteres estendidos (ã, ç, é, etc)
3. Apenas um mail por trabalho deve ser enviado
Outras Observações Importantes:
1. Os trabalhos serão verificados automaticamente por uma ferramenta de
detecção de plágio. Em caso de deteção de cópia (parcial ou integral),
todos os envolvidos recebem nota ZERO. Em outras palavras, tanto os
alunos que copiaram quanto os que deixaram copiar recebem ZERO
2. Enviem o trabalho no prazo especificado e no formato especificado.
Trabalhos recebidos fora do prazo ou em formato inadequado recebem
nota ZERO
3. O trabalho deve ser enviado estritamente para o e-mail especificado
acima
4. Trabalho que não compila recebe nota ZERO. Não adianta submeter
5. Os trabalhos serão compilados e verificados usando o compilador gcc
no sistema operacional Linux
6. Os programas serão avaliados pela sua correção durante a execução e
também pelo estilo de programação. Serão observados particularmente
se os programas possuem os comentários apropriados, se usam nomes
significativos para as variáveis e funções, se o código está indentado
corretamente e se utilizam modularização sempre que possı́vel e apropriado
Download

Universidade Federal do Esp´ırito Santo - CT