Você está na página 1de 4

Universidade

Federal de Minas Gerais Instituto de Cincias Exatas Departamento de Cincia da Computao

Algoritmos e Estruturas de Dados II 2 Semestre de 2013

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 linhas // nmero de vrtices da linha 1 // x y de cada vrtice da linha

// nmero de vrtices da linha 2 // x y de cada vrtice da linha 2

// 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.

Você também pode gostar