Buscar

AEDS 2 Documentacao Trabalho Pratico 0

Prévia do material em texto

TRABALHO PRATICO DE AEDS2
TP0: 50 TONS DE CINZA
Prof. Gisele Pappa e Rodrygo Santos
Aluna: Julia Ferri Leite Storino
1. Introducao
Ao longo da disciplina, foi trabalhado dois conceitos fundamentais: Alocação 
dinâmica de memória e Tipo Abstrato de dados. A alocação dinâmica consiste em 
alocar dinamicamente variáveis, no caso os Apontadores, que armazenam o 
endereço de memoria na variavel. Ja os Tipos Abstratos de Dados (TADs), agrupam 
a estrutura de dados juntamente com as operações que podem ser feitas sobre 
esses dados. 
O objetivo desse trabalho e implementar um programa para conversao de uma 
imagem colorida para tons de cinza. Isso foi feito a partir da transformação de cada 
pixel (amostra de um espaço de cores) colorido em um tom de cinza. Essa 
transformação foi feita de acordo com um calculo pre-definido, envolvendo a escala 
RGB em forma matricial. 
Desse modo, espera-se com isso trabalhar e entender melhor o funcionamento 
dos conceitos de Alocação dinâmica de memória e Tipo Abstrato de dados, tao 
importantes na disciplina.
2. Implementacao
Para facilitar a implementação e evitar a criação de varias variáveis, foi 
utilizado no código o conceito aprendido de Estrutura de Dados. De acordo com a 
proposta, foi criado, juntamente com o typedef, uma struct para armazenar os dados 
das matrizes, tanto de entrada quanto a de saída.
A struct criada Dados, armazena todas as informações contidas na matriz, 
organizando-as em tipos diferentes, tais como: char tipo para guardar o tipo da 
imagem, int linha int coluna para guardar o tamanho da matriz (ixj), int cor para 
definir a quantidade de tons, e int mat para definir a matriz.
Alem da estrutura de dados, foi implementado funções que dividiram o 
problema em 3: a leitura (1), a transformação (2) e a escrita(3) do arquivo.
1) Dados* matrizinput(char* nome): essa função recebe a matriz/foto a ser lida. Para 
isso, ela abre o arquivo, com a opcao “r”, para realizar a leitura e armazena seus 
dados nas variáveis do tipo struct Dados, de acordo com o significado dos números 
e as armazenam na variavel inputPPM.
2) Dados* transformacao(Dados *inputPPM): essa função recebe a variável 
inputPPM, derivada da função de leitura, e as convertem para a variável onde sera 
armazenadas as informações de saída (outputPGM). Para isso, o tipo e modificado 
para “P2”, visto que a escala não e mais RGB, as linhas e colunas se mantém, o 
numero de cores, ou tons, e modificado para 49 (visto que o loop for vai de 0 a 49, 
totalizando 50 tons). E o mais importante, os pixels em escala RGB são convertidos 
para a escala de cinza, de acordo com a formula fornecida. A função então, retorna 
a variável outputPGM, que armazena todas essas informações acima.
3) void matrizoutput(Dados *outputPGM, char *saida): essa função cria um novo 
arquivo, a partir da opcao “w”, que contem todas as informações convertidas de 
inputPPM para outputPGM. Alem disso, ela imprime com os devidos espaços entre 
os números, assim como a matriz recebida. Essa função também e responsavel por 
fechar o arquivo.
- O programa main.c e responsável por receber os argumentos de entrada e 
saída (input/output), e inseri-los nas devidas funções acima. Alem disso, o programa 
principal libera a memória utilizada pelo malloc, a partir do comando “free”.
Em geral, o arquivo Trabalho Pratico foi dividido em 3 partes: o main.c, 
programa principal que define a entrada e a saída e “chama as funções”, 
Trabalhopratico.c onde foi definido o que cada função faz, e o Trabalhopratico.h 
onde foi definido a struct a ser utilizada, evitando a criação de variáveis de forma 
desorganizada.
4. Conclusao
O desenvolvimento do algoritmo ocorreu de forma tranquila, visto que foi 
trabalhado desde o dia do lançamento do trabalho, ate a data de entrega, evitando 
desesperos e surpresas. 
A principal dificuldade encontrada foi entender a formula pre definida no 
Trabalho Pratico e implementa-la. Desse modo, ao meu ver, a transformação da 
escala RGB em tons de cinza, apesar de ser uma conta fácil, exige o entendimento 
do significado de cada numero na tabela, para assim, ser convertido na escala de 
tons de cinza sem comprometer os resultados.
Referencias
[1] Ziviani, N., Projeto de Algoritmos com Implementações em Pascal e C, 2ª Edição, 
Editora Thomson, 2004.
[2] Material disponibilizado pelo Moodle da disciplina

Outros materiais