All pastes #576879 Raw Edit

ABB

public cpp v1 · immutable
·published 2007-06-19 17:47 UTC
rendered paste body
/*  Helton Fernandes da Rosa   EP3 - Estrutura de Dados  */#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{             int freq;             int num;             char *seq;             node *esq, *dir, *pai;};     void InsereABB(node* no, node *root, bool h){            if(root == NULL)    {        // AKI ELE ATRIBUIU MAS PERDEU QDO SAI DA FUNÇAÕ....        ////////////////////////////////////////////////////////            printf("\n root1: %p no: %p",root, no);        root = no;        printf("\n root2: %p",root);        printf("\n %s - 1,", root->seq);        /////////////////////////////////////////////////////////    }    else    {        if(strcmp(no->seq,root->seq) == 0)        {            root->freq++;            printf("\n %s - 2,", root->seq);            free(no->seq);            free(no);        }        else        {            if(strcmp(no->seq,root->seq)>0)            {                if(root->dir)                    InsereABB(no, root->dir, &h);                else                {                                        root->dir = no;                    printf("\n %s,-3", root->seq);                }            }                            else            {                if(root->esq)                    InsereABB(no, root->esq, &h);                else                {                                        root->esq = no;                    printf("\n %s -4,", root->seq);                }            }        }    }            }void InOrdem(node* root){     if(root)     {         printf(" %s,", root->seq);         InOrdem(root->esq);         InOrdem(root->dir);      }}void Desaloca(node* root){     if(root)     {             Desaloca(root->esq);             free(root->esq);             Desaloca(root->dir);             free(root->dir);     }}int main (int argc, char **argv){         // AKI EU DECAREI     /////////////////////////////////////////////////////////     node* root = NULL;         // Raiz da árvore.               //////////////////////////////////////////////////////////     FILE *arq;                 // Variável para abertura do arquivo.     int flinha, fcoluna, wlinha, wcoluna;  // Dados da imagem e da janela.     int i, j, h, k;            // Variáveis auxiliares.       char *imagem;              // Vetor que conterá a imagem lida.     char tipo[3];				// Variável que conterá o tipo do pgm.     int m, n, p, q, r, s;      // Auxiliares de percorrimento do vetor imagem.     int max_value;				// Valor máximo da figura de entrada.     int seq_counter;           // Contador para a sequência de caracteres.     char *seq_temp;            // Armazena temporariamente um padrão da imagem.     int temp_num;              // Armazena temporariamente um padrão da imagem, transformado em um inteiro.     char* temp_seq;            // Sequência temporária.     node* no;                  // Novo nó.               // Testa-se se a chamada do programa está passando os parâmetros		if(argc==4)	{        // Pego os valores da janela        wlinha = atoi(argv[2]);        wcoluna = atoi(argv[3]);        		// Abertura do arquivo de entrada		arq = fopen(argv[1], "r");		if(arq)		{               			// Leio o cabeçalho do arquivo.			fscanf(arq, "%s", &tipo);	            fscanf(arq, "%d", &fcoluna);			fscanf(arq, "%d", &flinha); 			fscanf(arq, "%d", &max_value);	            			// Aloco o vetor que conterá a imagem de entrada.			if(flinha != 0 && fcoluna!= 0)			{				                // Aloco as mastrizes e a fila				imagem = (char*)malloc(sizeof(char)*flinha*fcoluna+1);												// Faz-se a leitura da imaem para um vetor.				for(i=0; i<flinha; i++)				{                    for(j=0; j<fcoluna ; j++)                    {                        fscanf(arq, "%s", imagem + i*fcoluna + j);                    }                }                                // Construo os padrões                p = wlinha;                q = wcoluna;                m = flinha;                n = fcoluna;                                                for(i=0 ; i <= (m-p); i++)                {                    for( j=0; j <= (n-q); j++)                    {                        seq_counter=0;                        seq_temp = (char*)malloc((p*q)+1);                        for(h=0; h < wlinha; h++)                        {                            for(k=0; k < wcoluna; k++)                            {                                                             // Escreve o caracter corrente.                                seq_temp[seq_counter++] = imagem[(i+h)*fcoluna + (j+k)];                            }                        }                         seq_temp[seq_counter] = '\0';                         no = (node*)malloc(sizeof(node));                        no->esq = no->dir = no->pai= NULL;                        no->seq = seq_temp;                        no->freq = 1;                                                   //  AKI EU CHAMEI A FUNÇÃO                        //////////////////////////////////////////////                                           InsereABB(no, root, true);                        ///////////////////////////////////////////////                    }                                    }                                           }            else                printf(" Linha e/ou coluna vazia(s)");        }        else                printf("Erro na abertura do arquivo. Verifique o nome do arquivo.");    }    else        printf("Sintaxe: ep3 nome_arquivo p q");        InOrdem(root);    Desaloca(root);    free(root);        scanf("%d",&i);     return 1;}