O objetivo deste trabalho é
manipular polígonos que são lidos de arquivo, armazenados em uma lista
duplamente encadeada, manipulados e salvos novamente em disco.
Os polígonos são armazenados em disco conforme o exemplo deste arquivo,
cujo conteúdo é apresentado a seguir. Na primeira linha aparece o
número de vértices e nas demais linhas as coordenadas X e Y de cada
vértice.
10
2 8
7 5
11 8
15 7
13 0
10 2
5 1
4 4
2 1
0 4
Após a leitura, os vértices devem ser armazenados em uma lista duplamente encadeada de objetos da classe Nodo, apresentada a seguir.
#ifndef _NODOApós o armazenamento dos vértices na lista, deve ser possível realizar as seguintes operações:
imprimir os vértices no sentido em que foram lidos do arquivo;
imprimir os vértices no sentido inverso ao que foram lidos do arquivo;
remover um vértice, dado seu índice, até que restem 3 vértices;
inserir um vértice dadas as suas coordenadas e a posição de inserção. Posições inválidas devem ser adequadamente tratadas, e o programa deve seguir funcionando;
gravar o polígono em disco;
informar quantos nodos estão alocados em memória no momento. Para tanto deverão ser usadas as funções AlocaNodo e DestroiNodo, descritas a seguir, em substituição às funções new e delete;
realizar o split do polígono dados dois vértices não consecutivos. Após a realização do split, o polígono com menos vértives deve ser gravado em disco e seus vértices devem ser eliminados da memória. O polígono que tiver mais vértices deve permanecer em memória.
Após a realização de qualquer uma das operações o polígono deve poder ser manipulado novamente, sem erro.
Para alocação e remoção de nodos da lista o programa deve utilizar a função AlocaNodo descrita a seguir.
Nodo* AlocaNodo(float x, float y)
{
NodosAlocados ++;
return new Nodo (x,y);
}
void DestroiNodo(Nodo *n)
{
delete n;
NodosAlocados--;
}
Comando | Resultados | Imagem |
Split(2,4) |
A B C E F G H e C D E |
|
Split (0,3) |
A B C D e D E F G H A | |
Split (3,7) |
A B C D H e D E F G H |