Escolar Documentos
Profissional Documentos
Cultura Documentos
Trabalho
Prtico
0
Reviso
de
Programao
C
e
Tipos
Abstratos
de
Dados
Valor:
5
pontos
Data
de
entrega
no
PRATICO
(aeds.dcc.ufmg.br):
02/09/2013
O
objetivo
deste
trabalho
rever
conceitos
bsicos
de
programao,
especialmente
em
linguagem
C,
e
explorar
conceitos
de
Tipos
Abstratos
de
Dados
(TADs)
e
anlise
de
complexidade.
Voc
dever
implementar
estruturas
para
os
seguintes
tipos
de
dados
em
um
TAD:
- - - Ponto:
representado
por
coordenadas
cartesianas
x
e
y
Linha
poligonal:
representada
por
uma
sequncia
de
2
a
100
pontos
(vrtices
ao
longo
da
linha)
Polgono:
representado
por
uma
sequncia
de
3
a
100
pontos
(vrtices
ao
longo
do
polgono),
sendo
que
o
ltimo
vrtice
e
o
primeiro
coincidem,
ou
seja,
tm
coordenadas
idnticas.
As coordenadas sero representadas por nmeros de ponto flutuante (double). Dentre as funes que devem ser implementadas no TAD, trs realizam processamento geomtrico. Duas destinam-se a verificar se a linha poligonal ou o polgono tm auto- intersees, ou seja, so no-simples. Veja o exemplo na figura abaixo. A linha (a) simples, mas a (b) no . Da mesma forma, o polgono (c) simples, mas (d) no .
A terceira funo de processamento geomtrico verifica se um ponto est contido em um polgono, conforme abaixo:
A
verificao
feita
imaginando
uma
semi-reta
em
qualquer
direo
a
partir
do
ponto
(em
geral
usa-se
a
direo
horizontal
positiva,
como
na
figura).
So
contadas
as
intersees
com
segmentos
do
contorno.
Se
o
nmero
de
intersees
for
par,
o
ponto
est
fora
do
polgono;
se
for
mpar,
est
dentro.
No
TAD
voc
deve
criar
um
tipo
(typedef)
para
representar
separadamente
ponto,
linha
e
polgono,
usar
a
definio
de
ponto
na
definio
de
linha
e
polgono,
e
implementar
funes
que
permitam
realizar
operaes
sobre
os
dados,
de
acordo
com
a
lista
abaixo:
TAD
Geometria:
void criaPonto(ponto *p, double x, double y); // retorna TRUE se os pontos forem identicos int pontoCoincide(ponto P, ponto Q); void imprimePonto(ponto P); void criaLinha(linha *l, numVertices, ponto *vertices); // verifica se a linha poligonal tem interseo com o polgono int linhaInterceptaPoligono(linha L, poligono P); // verifica se a linha simples (sem auto-intersees) int linhaSimples(linha L); void criaPoligono(polgono *p, numVertices, ponto *vertices); // verifica se o ponto est no interior do polgono int pontoEmPoligono(ponto P, poligono Pol); // verifica se o polgono simples (sem auto-intersees) int poligonoSimples(poligono Pol);
Voc
dever
implementar
um
programa
principal,
que
receber
um
arquivo
de
dados
contendo
a
geometria
de
pontos,
linhas
e
polgonos,
e
executar
testes
topolgicos
entre
eles,
de
acordo
com
o
especificado
nas
linhas
restantes
do
arquivo.
O
programa
principal
dever
ler,
da
entrada
padro,
o
arquivo
de
entrada.
Quando
executado
na
linha
de
comando,
usar:
> programa < entrada.txt A
sada
dever
ser
direcionada
para
o
dispositivo
de
sada
padro
(stdout).
Exemplo
de
arquivo
de
entrada
(os
comentrios
NO
fazem
parte
do
arquivo
de
entrada
real):
5 10 5 12 4 13 2 2 1 1 0 3 5 0 0 1 1 3 6 7 9 14 8 13 10 3 10 17 22 38 3 0 (...) 2 4 10 10 (...) 4 1 LINSIMP 3 2 LINPOL 3 1 3 POLSIMP 1 4 PTOPOL 1 1 // nmero de pontos // x y de cada ponto, separados por espao; um ponto por linha
// nmero de polgonos // nmero de vrtices do polgono 1 // x y de cada vrtice do polgono 1 // // // // // nmero de testes Teste 1: verificar Teste 2: verificar Teste 3: verificar Teste 4: verificar se se se se a a o o linha 3 simples linha 3 intercepta o polgono 1 polgono 1 simples ponto 1 est dentro do polgono 1
Conforme
o
exemplo,
cada
teste
conter
referncia
uma
das
quatro
funes:
LINSIMP
(linha
simples),
LINPOL
(linha
intercepta
o
polgono),
POLSIMP
(polgono
simples)
e
PTOPOL
(ponto
em
polgono).
Exemplo
de
sada
(uma
linha
para
cada
teste;
NO
USAR
ACENTOS;
usar
EXATAMENTE
as
frases):
Linha 3: Linha 3: Poligono Ponto 1: simples nao intercepta o poligono 1 1: nao simples fora do poligono 1
Note que o programa principal no poder acessar diretamente a estrutura interna do TAD. Se necessrio, acrescente novas funes ao seu TAD detalhando- as na documentao do trabalho.
O programa criado no deve conter menus interativos ou paradas para entrada de comandos (como o system(PAUSE) por exemplo). Ele deve apenas ler os arquivos de entrada, process-los e gerar os arquivos de sada. Os TPs sero corrigidos em um ambiente Linux. Portanto, o uso de bibliotecas do Windows est PROIBIDO. O que deve ser entregue: Cdigo fonte do programa em C (todos os arquivos .c e .h), bem identado e comentado. Arquivo executvel. Documentao do trabalho. Entre outras coisas, a documentao deve conter, sucintamente: 1. Introduo: descrio sucinta do problema a ser resolvido e viso geral sobre o funcionamento do programa. 2. Implementao: descrio sobre a implementao do programa. Deve ser detalhada a estrutura de dados utilizada (de preferncia com diagramas ilustrativos), o funcionamento das principais funes e procedimentos utilizados, o formato de entrada e sada de dados, compilador utilizado, bem como decises tomadas relativas aos casos e detalhes de especificao que porventura estejam omissos no enunciado. 3. Estudo de Complexidade: estudo da complexidade do tempo de execuo dos procedimentos implementados e do programa como um todo (notao O), considerando conjuntos de tamanho n. 4. Testes: descrio dos testes realizados e listagem da sada (no edite os resultados). 5. Concluso: comentrios gerais sobre o trabalho e as principais dificuldades encontradas em sua implementao. 6. Bibliografia: bibliografia utilizada para o desenvolvimento do trabalho, incluindo sites da Internet se for o caso Obs: Apesar desse trabalho ser simples, a documentao pedida segue o formato da documentao que dever ser entregue nos prximos trabalhos. Um exemplo de documentao est disponvel no Moodle. Comentrios Gerais: 1 2 3 4 5 6 7 Comece a fazer este trabalho logo, enquanto o problema est fresco na memria e o prazo para termin-lo est to longe quanto jamais poder estar. Clareza, indentao e comentrios no programa tambm sero avaliados. O trabalho individual. A submisso ser feita pelo sistema online (http://aeds.dcc.ufmg.br). Trabalhos copiados, comprados, doados, etc. sero penalizados conforme anunciado. Na prova 1, um dos exerccios ser sobre a implementao do trabalho. A nota do trabalho ser ponderada pela nota desse exerccio. Penalizao por atraso: (2d 1) pontos, onde d o nmero de dias de atraso.