#include #include #ifndef _MYDATATYPE #define _MYDATATYPE /* --- Definições globais para a definição da matriz */ #define MAXLINHAS 601 #define MAXCOLUNAS 800 /* --- Tipo de Dados para a Matriz */ typedef int DESENHO[MAXLINHAS][MAXCOLUNAS]; #endif #ifndef _BOOL #define BOOL #define boolean int #define TRUE 1 #define FALSE 0 #endif /* ------------------------------------------------ O Meu Formato Textual (MFT) para gravação em ficheiro (é apenas uma sugestão, os alunos poderão criar os seus...) primeira linha - identificador/nome do desenho segunda linha - autor terceira linha - data de criação do ficheiro quarta linha - dimensões da matriz na seguinte sintaxe: Linhas = XXXX Colunas = YYYY em que XXXX e YYYY são inteiros restantes linhas - cada linha conterá uma linha do desenho ----------------------------------------------------------- */ /* --- Função de leitura de um desenho previamente gravado em MFT O resultado da função é um booleano: 1 : o desenho foi lido com sucesso 0 : o desenho não foi lido, ocorreu um erro */ boolean LoadMFT( char fnome[], DESENHO d ) /* fnome: nome do ficheiro que se vai carregar d : matriz onde vai ser carregado o desenho */ { FILE *fp; char linha[MAXCOLUNAS+1]; // usada para ler as linhas de comentário int i, j; // variáveis de controlo das linhas e colunas boolean erro=FALSE; // a primeira linha da matriz guardará a dim da imagem fp = fopen(fnome,"r"); if(!fp) return FALSE; // se não se conseguiu abrir o ficheiro // termina-se a execução do programa else { fgets(linha,MAXCOLUNAS+1,fp); /* lê a linha com o identificador e, nesta versão não faz nada com ele */ fgets(linha,MAXCOLUNAS+1,fp); /* faz o mesmo para o autor */ fgets(linha,MAXCOLUNAS+1,fp); /* faz o mesmo para a data */ /* --- leitura das dimensões da matriz --- */ fscanf(fp,"%*[^=]=%d %*[^=]=%d",&d[0][0],&d[0][1]); fgets(linha,MAXCOLUNAS+1,fp); /* limpa o resto da linha */ i=1; while((i<=d[0][0])&&(!erro)) //Enq não se tiverem lido as linhas todas { j=0; while((j= 3) res = marca; else res = ' '; return res; } int encolhe(DESENHO encolhido, DESENHO original, char marca) { int i, j, k=1, h=0, linhas, colunas; char c; encolhido[0][0] = original[0][0] / 2; encolhido[0][1] = original[0][1] / 2; for(j=1; j < original[0][1]; j+=2) { for(i=2; i <= original[0][0]; i+=2) { linhas = original[0][0]; colunas = original[0][1]; c = getValor(original, i, j, linhas, colunas, marca); encolhido[k][h] = c; k = k + 1; } k = 1; h = h + 1; } return 0; } int main() { DESENHO d, encolhido; boolean b; b = LoadMFT("cara.mft", d); if(!b) { printf("Load error."); return -1; } printDesenho(d); encolhe(encolhido, d, 'X'); printf("\n"); printDesenho(encolhido); }