Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jean Martins

[Resolvido] Arvore Binária

Recommended Posts

Olá Galera!

 

Estou fazendo um programa que cria uma arvore binaria einsere os dados nela. Já li sobre os conceitos de arvore binaria, agora estou implementando mas meu programa apresenta um erro de tipo na função mas vejo que está certo, gostaria que me ajudassem. Segue abaixo o codigo:

 


#include <stdio.h>
#include <stdlib.h>


typedef struct
{
   int info;
   struct arvore* esq;
   struct arvore* dir;

}arvore;



void insere(arvore **r,int num);

main()
{

   arvore *raiz;
    raiz = NULL;
   int num;
   num = 15;
   insere(&raiz,num);
   num = 10;
   insere(&raiz,num);



   return 0;
}

void insere(arvore **r,int num)
{
   arvore *novo_no;

   novo_no = (arvore *)malloc(sizeof(arvore));


   if(*r == NULL)        //verifica se a raiz da arvore esta vazia
   {
       novo_no->info = num;
       novo_no->esq = NULL;
       novo_no->dir = NULL;

       *r = novo_no;
   }

   else
   {
       if(((*r)->info) < num)
       {

           insere(&(*r)->dir,num);
       }
       else
       {
           insere(&(*r)->esq,num);

       }
   }

}


Compartilhar este post


Link para o post
Compartilhar em outros sites

É só na struct que ta errado, você fez assim:

typedef struct

{

int info;

struct arvore* esq;

struct arvore* dir;

 

}arvore;

 

O correto é dar um nome protótipo depois de struct exemplo

typedef struct arv

Deste modo pode-se atribuir ao ponteiro para esquerda e para direita corretamente, deste jeito:

typedef struct arv

{

int info;

struct arv* esq;

struct arv* dir;

}arvore;

 

E para fazer o cast desta struct faz da mesma maneira que esta fazendo agora, arvore *raiz;(exemplo).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Fiz os testes e resolveu o problema, já consegui criar a arvore e imprimir em pre-ordem, in-ordem e pos-ordem. Agora estou fazendo uma função que calcula os nos da arvore, ela funcionou mas quando imprime a qtde de nos, é chamada varias vezes, não incrementa o contador. Segue o codigo:

 

#include <stdio.h>
#include <stdlib.h>


typedef struct arv
{
   int info;
   struct arv* esq;
   struct arv* dir;

}arvore;



void insere(arvore **r,int num);
void calc_no(arvore *r);
void imprime_inordem(arvore *r);
void imprime_preordem(arvore *r);
void imprime_posordem(arvore *r);

main()
{

   arvore *raiz;
    raiz = NULL;
   int num;
   num = 15;
   insere(&raiz,num);
   num = 10;
   insere(&raiz,num);
   num = 20;
   insere(&raiz,num);
   num = 50;
   insere(&raiz,num);
   num = 8;
   insere(&raiz,num);
   printf("\n\nImpressao preordem\n\n");
   imprime_preordem(raiz);
   calc_no(raiz);

   return 0;
}

void insere(arvore **r,int num)
{
   arvore *novo_no;

   novo_no = (arvore *)malloc(sizeof(arvore));


   if(*r == NULL)        //verifica se a raiz da arvore esta vazia
   {
       novo_no->info = num;
       novo_no->esq = NULL;
       novo_no->dir = NULL;

       *r = novo_no;
   }

   else
   {
       if((*r)->info < num)    //verifica se é maior que a raiz
       {

           insere(&(*r)->dir,num); // se maior que a raiz, insere no nodo direito.
       }
       else
       {
           insere(&(*r)->esq,num);  // se menor que a raiz, insere no nodo esquerdo.

       }
   }

}

void calc_no(arvore *r)  // funcao para calcular os nós de uma arvore
{
   int calc = 0;
   if(r != NULL)
   {
       if(((r->esq)||(r->dir))!=NULL)
       {
           calc = calc + 1;
           calc_no(r->esq);
           calc_no(r->dir);
       }

   }
printf("Qtde de nos na arvore: %d", calc);

}

void imprime_inordem(arvore *r)  //in_ordem
{
   if(r!= NULL)
   {
       imprime_inordem(r->esq);
       printf("%d\n", r->info);
       imprime_inordem(r->dir);
   }

}
void imprime_preordem(arvore *r)  //pre_ordem
{
   if(r!= NULL)
   {
       printf("%d\n", r->info);
       imprime_inordem(r->esq);
       imprime_inordem(r->dir);
   }

}
void imprime_posordem(arvore *r)  //pos_ordem
{
   if(r!= NULL)
   {
       imprime_inordem(r->esq);
       imprime_inordem(r->dir);
       printf("%d\n", r->info);
   }

}

 

Tem como fazer uma função recursiva que calcule os nos da arvore sem acontecer que tenha que imprimir o contador varias vezes?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Fiz os testes e resolveu o problema, já consegui criar a arvore e imprimir em pre-ordem, in-ordem e pos-ordem. Agora estou fazendo uma função que calcula os nos da arvore, ela funcionou mas quando imprime a qtde de nos, é chamada varias vezes, não incrementa o contador. Segue o codigo:

 

#include <stdio.h>
#include <stdlib.h>


typedef struct arv
{
   int info;
   struct arv* esq;
   struct arv* dir;

}arvore;



void insere(arvore **r,int num);
void calc_no(arvore *r);
void imprime_inordem(arvore *r);
void imprime_preordem(arvore *r);
void imprime_posordem(arvore *r);

main()
{

   arvore *raiz;
    raiz = NULL;
   int num;
   num = 15;
   insere(&raiz,num);
   num = 10;
   insere(&raiz,num);
   num = 20;
   insere(&raiz,num);
   num = 50;
   insere(&raiz,num);
   num = 8;
   insere(&raiz,num);
   printf("\n\nImpressao preordem\n\n");
   imprime_preordem(raiz);
   calc_no(raiz);

   return 0;
}

void insere(arvore **r,int num)
{
   arvore *novo_no;

   novo_no = (arvore *)malloc(sizeof(arvore));


   if(*r == NULL)        //verifica se a raiz da arvore esta vazia
   {
       novo_no->info = num;
       novo_no->esq = NULL;
       novo_no->dir = NULL;

       *r = novo_no;
   }

   else
   {
       if((*r)->info < num)    //verifica se é maior que a raiz
       {

           insere(&(*r)->dir,num); // se maior que a raiz, insere no nodo direito.
       }
       else
       {
           insere(&(*r)->esq,num);  // se menor que a raiz, insere no nodo esquerdo.

       }
   }

}

void calc_no(arvore *r)  // funcao para calcular os nós de uma arvore
{
   int calc = 0;
   if(r != NULL)
   {
       if(((r->esq)||(r->dir))!=NULL)
       {
           calc = calc + 1;
           calc_no(r->esq);
           calc_no(r->dir);
       }

   }
printf("Qtde de nos na arvore: %d", calc);

}

void imprime_inordem(arvore *r)  //in_ordem
{
   if(r!= NULL)
   {
       imprime_inordem(r->esq);
       printf("%d\n", r->info);
       imprime_inordem(r->dir);
   }

}
void imprime_preordem(arvore *r)  //pre_ordem
{
   if(r!= NULL)
   {
       printf("%d\n", r->info);
       imprime_inordem(r->esq);
       imprime_inordem(r->dir);
   }

}
void imprime_posordem(arvore *r)  //pos_ordem
{
   if(r!= NULL)
   {
       imprime_inordem(r->esq);
       imprime_inordem(r->dir);
       printf("%d\n", r->info);
   }

}

 

Tem como fazer uma função recursiva que calcule os nos da arvore sem acontecer que tenha que imprimir o contador varias vezes?

 

 

Coloca calc pra ser enviado pra essa função

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca calc pra ser enviado pra essa função

 

Opa beleza, eu fiz anteriormente, ele incrementa o contador quando está na subarvore, se mudar a subarvore ele ja nao incrementa imprime por exemplo, o que incrementou na subarvore esquerda e depois imprime o que incrementou da subarvore da direita.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver,obrigado pela ajuda, eis o codigo:

 


int calc_no(arvore *r)  // funcao para calcular os nós de uma arvore
{

   if (r ==  NULL)
   return 0;

   return 1+ calc_no(r->esq) + calc_no(r->dir);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores,

 

Como poderia implementar uma função para realizar uma busca binária neste programa?

Estou fazendo um trabalho para a Faculdade. Se puderem ajudar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores,

 

Como poderia implementar uma função para realizar uma busca binária neste programa?

Estou fazendo um trabalho para a Faculdade. Se puderem ajudar...

 

Faça uma função que peça o valor que esteja procurando e percorra a arvore até achar o valor, para uma binaria de pesquisa pode-se fazer da seguinte forma

 

 

if(arvore->info==valor)

{

return arvore;

}

else if(arvore->info>valor)

{

procura(arv->dir);

}

else

{

procura(arv->esq);

}

 

a base é essa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui implementar conforme sua sugestão. Porém está com um problema ao realizar a busca. Nem sempre encontra o valor (mesmo ele estando na árvore). E quando encontra, sempre aponta que está na raiz.

 

O que pode ser?

 

 

#include <stdio.h>
#include <stdlib.h>

/*
* Define a estrutura da árvore
*/

typedef struct arv {
   int raiz;
   struct arv* esq;
   struct arv* dir;
}arvore;

/*
* Função que inseri dados na árvore
*/

void insere(arvore **r, int num)
{
   arvore *no;

   no = (arvore *) malloc(sizeof(arvore));

   if(*r == NULL) {       //verifica se a raiz da arvore esta vazia
       no->raiz = num;
       no->esq = NULL;
       no->dir = NULL;

       *r = no;
   }

   else {
       if((*r)->raiz < num) {    //verifica se é maior que a raiz
           insere(&(*r)->dir, num); // se maior que a raiz, insere no nó direito.
       }
       else {
           insere(&(*r)->esq, num);  // se menor que a raiz, insere no nó esquerdo.
       }
   }
}

void imprime(arvore *r) {  //Exibe os dados de forma ordenada
   if(r != NULL) {
       imprime(r->esq);
       printf("%d\n", r->raiz);
       imprime(r->dir);
   }
}

int busca(arvore *r, int num) {
    if(r->raiz == num) {
         printf("Valor \"%d\" encontrado na raiz.", r->raiz);
    }
    else if(r->raiz > num) {
         busca(r->dir, num);
         if(r->dir == num) {
               printf("Valor \"%d\" encontrado na subarvore direita.", r->dir);          
         }
    }
    else if(r->esq < num) {
         busca(r->esq, num);
         if(r->esq == num) {
                   printf("Valor \"%d\" encontrado na subarvore esquerda.", r->esq);          
         }
    }
    else {
         printf("Valor \"%d\" não encontrado na arvore.");          
    }
}

int main() {
   arvore *p; // ponteiro manipulador da arvore
   p = NULL; // define o ponteiro como nulo
   int opc, num, i;


   printf("Operacao de busca em Arvore Binaria\n-----------------------------------------------\n\n");

   printf("Por favor, informe 10 numeros.\n-----------------------------------------------\n\n");

   for(i = 1; i <= 5; i++) {
       printf("Informe o numero %d: ", i);
       scanf("%d", &num);
       insere(&p, num);
   }

   printf("\n\nNumeros informados:\n\n");
   imprime(p);

   printf("Qual numero deseja procurar?\n\n-----------------------------------------------\n\n");
   scanf("%d", &num);

   busca(p, num);

   system("PAUSE");    
   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque voce esta andando com o ponteiro da raiz, entao quando achar o valor sempre estara na raiz, pois a raiz valera o ponto da arvore que voce estiver no momento. E sobre não achar é porque voce só tem maior ou menor, voce não tem maior igual ou menor igual.

 

Faça assim se o num for maior ande pra direita, senão se o numero for == voce achou o valor, senão se for menor voce anda pra esquerda, senão o numero não esta presente.

 

Acho que da assim

 

Como desafio tente fazer duas funções para sua arvore, 1 descubra qual o caminho com maior numero de nós da arvore, 2 faça e mostre na tela todos os caminhos possiveis da arvore.

 

Exemplo

           d
        b      f
     a    c  e    h

 

os caminhos são

dba

dbc

dfe

dfh

 

Observação use pilhas para mostrar os caminhos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Shurd,

 

Obrigado pela atenção. Mas não entendi seu raciocínio.

Seria possível exemplificar?

 

 

A função busca que voce possui recebe a raiz da arvore, portanto cade vez que a chamar, não importa aonde o ponteiro esteja sera considerado raiz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como a raiz? Estou passando a árvore, assim como nas outras funções.

 

int busca(arvore *r, int num) {
    if(r->raiz == num) {
         printf("Valor \"%d\" encontrado na raiz.", r->raiz);
    }
    else if(r->raiz >= num) {
         busca(r->dir, num);
         if(r->dir == num) {
               printf("Valor \"%d\" encontrado na subarvore direita.", r->dir);          
         }
    }
    else if(r->raiz < num) {
         busca(r->esq, num);
         if(r->esq == num) {
                   printf("Valor \"%d\" encontrado na subarvore esquerda.", r->esq);          
         }
    }
    else {
         printf("Valor \"%d\" não encontrado na arvore.");          
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte é recursivo assim quando voce manda a nova função busca(r->dir) o que acontece é que ele cria uma nova r para a parte que voce esta agora, então o r->dir da ultima busca é agora o r da nova.

 

Aqui esta uma procura das minhas aulas de estrutura de dados da faculdade(sou aluno)

 

arvore *Procura2(arvore *ainicio, char chave) {

arvore *a1;

if (ainicio == NULL)

return NULL;

else {

a1 = ainicio;

if (a1->dado != chave) {

a1 = Procura2 (ainicio->esq, chave);

if (a1 == NULL)

a1 = Procura2 (ainicio->dir, chave);

}

return a1;

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado mais uma vez pela atenção.

Só hoje pude responder.

Mas há havia feito a alteração na função, ficou assim:

 

busca(arvore *r, int v) {
   if(r == NULL) {
        return NULL;
   }
   else {
        if(v == r->raiz) {
             return r;
        }
        else if (v < r->raiz) {
             return busca(r->esq, v);
        }
        else {
             return busca(r->dir, v);
        }
   }
}

 

Agora tá certinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi pessoal sou nova no forum,então desculpem-me o engate no algortimo acima,mas estou com ploblemas em arvores também se poderem me ajudar meu problema e na forma de procurar determina sigla retornar se existe ou não,mas está dando erro apesar de imprimir a sigla encontrada me diz que ela nao existe se poderem dar uma olhada Obrigada.

 

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

//////////////////////////////////////////////////////////////////PARTE REFERENTE A listas//////////////////////////////////////////////////////////////////

typedef struct No_Produto{//Definicao da lista de produtos

char descricao[20];

float preco;

int qtd;

struct No_Produto *ant;

struct No_Produto *prox;

} No_Produto;

 

No_Produto * criar_produto( char * descricao,float preco,int qtd ){//Criacao de um nodo da lista

printf(" PRODUTO VENDIDO COM SUCESSO ! \n");

No_Produto *novo;

novo = (No_Produto *) malloc(sizeof(No_Produto));

strcpy (novo->descricao,descricao);

novo->preco = preco;

novo->qtd = qtd;

novo->ant = NULL;

novo->prox = NULL;

return novo;

}

 

No_Produto * retorna_ultimo_da_lista(No_Produto * lista_produtos){//Funçao que retorna o ultimo elemento da lista

while (lista_produtos->prox != NULL){

lista_produtos = lista_produtos->prox;

}

return lista_produtos;

}

 

No_Produto * insere_primeiro(No_Produto * lista_produtos, No_Produto * novo){//Inclusao de um nodo na lista

if (lista_produtos != NULL){

lista_produtos->ant = novo;

novo->prox = lista_produtos;

}

return novo;

}

 

No_Produto * insere_ultimo(No_Produto * lista_produtos, No_Produto * novo){//Insere um elemento no ao final da lista

if (lista_produtos != NULL) {

No_Produto * n = retorna_ultimo_da_lista(lista_produtos);

n->prox = novo;

novo->ant = n;

return lista_produtos;

}else{

return novo;

}

}

 

void apresenta_lista(No_Produto * lista_produtos){ //Percorrendo os elementos da lista

 

if(lista_produtos == NULL)

{

printf(" LISTA / SETOR VAZIA(O) \n");

}

int cont = 0;

while (lista_produtos != NULL){

printf(" PRODUTO : %s \n",(lista_produtos)->descricao);

printf(" O PRECO DO PRODUTO e %.1f \n",(lista_produtos)->preco );

cont=cont+1;

lista_produtos = (lista_produtos)->prox;

}

}

 

void valor_total_setor(No_Produto * lista_produtos, char * sigla){//Funçao que mostra o valor total de todos os produtos vendidos no setor

float acum=0;

 

 

if(lista_produtos == NULL)

{

printf(" LISTA / SETOR %s VAZIA(O) \n",sigla);

}

 

while (lista_produtos != NULL){

acum = acum + lista_produtos->preco;

lista_produtos = (lista_produtos)->prox;

}

printf(" O VALOR TOTAL DOS PRODUTOS VENDIDOS NO SETOR %s Eh : R$ %.2f \n",sigla,acum);

}

 

void verifica_setor(No_Produto * lista_produtos , char *descricao,char * sigla)//Funçao que verifica se determinado produto foi vendido em determinado setor

{

int acum =0;

float acumvalor =0;

int x ;

if(lista_produtos == NULL)

{

printf(" LISTA / SETOR VAZIA(O) \n");

}

while (lista_produtos != NULL){

x=strcmp(descricao,lista_produtos->descricao);

if(x==0)

{

acum++;

acumvalor = acumvalor + lista_produtos->preco;

}

lista_produtos = (lista_produtos)->prox;

}

 

if(x!=0)

{

printf(" PRODUTO %s NAO FOI VENDIDO NO SETOR %s \n",descricao,sigla);

}

if(x==0)

{

printf(" O PRODUTO %s FOI VENDIDO %d VEZ(ES) NO SETOR %s \n",descricao,acum,sigla);

printf(" TOTALIZANDO O VALOR DE R$ %.2f \n",acumvalor);

}

}

 

 

void verifica_setor2(No_Produto * lista_produtos , char *descricao,char * sigla)//Funçao que verifica se determinado produto foi vendido em determinado setor

{

int acum =0;

float acumvalor =0;

int x =666;

while (lista_produtos != NULL){

x=strcmp(descricao,lista_produtos->descricao);

if(x==0)

{

acum++;

acumvalor = acumvalor + lista_produtos->preco;

}

lista_produtos = (lista_produtos)->prox;

}

if(x==0)

{

printf(" O PRODUTO %s FOI VENDIDO %d VEZ(ES) NO SETOR %s \n",descricao,acum,sigla);

printf(" TOTALIZANDO O VALOR DE R$ %.2f \n",acumvalor);

}

}

 

 

//////////////////////////////////////////////////////////////////PARTE REFERENTE A ARVORES//////////////////////////////////////////////////////////////////

typedef struct nodo{//Definicao da arvore

struct No_Produto * lista_produtos;

struct nodo * esq;

char sigla;

struct nodo * dir;

} nodo;

//Criacao de um nodo da arvore

nodo * cria_elemento(char sigla){

nodo * novo = malloc(sizeof(nodo));

novo->sigla = sigla;

novo->esq = NULL;

novo->dir = NULL;

novo->lista_produtos = NULL;

return novo;

}

//Inclusao de um nodo na arvore

void insere_nodo(nodo ** arv, char sigla, No_Produto **lista ){

if (*arv == NULL){

*arv = cria_elemento(sigla);

}else{

if(sigla < (*arv)->sigla){

printf(" INSERIDO NA ESQUERDA \n");

insere_nodo(&(*arv)->esq, sigla,&(*lista));

}else if (sigla > (*arv)->sigla){

printf(" INSERIDO NA DIREITA \n");

insere_nodo(&(*arv)->dir, sigla,&(*lista));

}

}

}

void exibe_setor(nodo * arv){

 

if(arv != NULL){

 

printf("%c\n",(arv)->sigla);

exibe_setor((arv)->esq);

exibe_setor((arv)->dir);

}

}

int encontra_setor(nodo*arv,char sigla){

int x=0;

 

if(arv != NULL)

{

if(sigla == (arv)->sigla)

{

x=0;

return x;

}

else{

x=1;

return x;

}

if(sigla < (arv)->sigla)

{

return encontra_setor((arv)->esq,sigla);

}

if(sigla > (arv)->sigla)

{

return encontra_setor((arv)->dir,sigla);

}

}

}

 

 

 

 

 

 

 

void exibe(char sigla)

{

printf("%c\n",sigla);

}

 

void vende_produto(nodo *arv, char sigla,No_Produto **lista_produtos){

char produto[40];

float valor;

printf(" INSIRA O NOME DO PRODUTO A SER VENDIDO NO SETOR %c : ",sigla);

fflush(stdin);

gets(produto);

printf(" DIGITE O VALOR DO PRODUTO : ");

scanf("%f",&valor);

*lista_produtos =insere_ultimo(*lista_produtos,criar_produto(produto,valor,1));

printf("\n");

apresenta_lista(*lista_produtos);

}

 

/*void total_vendas_setor(nodo *arv , char sigla){

if(arv != NULL)

{

if((arv)->sigla == sigla)

{

apresenta_lista(

}

else

{

 

x=encontra_setor((arv)->esq,sigla);

x=encontra_setor((arv)->dir,sigla);

return(x);

}

}

}*/

 

 

 

 

 

 

 

 

 

 

 

 

//Monta o menu do programa

void monta_menu(){

printf("\n");

printf(" #################################################### \n");

printf(" Manutencao de Setores e Produtos Comercializados \n\n");

printf(" SELECIONE A OPCAO DESEJADA : \n\n");

printf(" 1 - Incluir Setor\n");

printf(" 2 - Vender produto no setor informado\n");

printf(" 3 - Apresentar total de vendas no setor informado \n");

printf(" 4 - Apresentar total de venda por setor (todos setores)\n");

printf(" 5 - Verificar se o produto informado foi vendido no setor informado\n");

printf(" 6 - Verificar se o produto informado foi vendido em algum dos setores\n");

printf(" 0 - Sair \n\n");

printf(" #################################################### \n\n");

printf(" QUAL SUA OPCAO : ");

 

}

int main()

{

char temp[20];

int x=1;

int op=0;

float acum=0;

int cont=0;

int resposta ;

char sigla ;

char produto[40];

float valor;

nodo * arv = NULL;

No_Produto * inilista = NULL;

No_Produto * inilistad = NULL;

No_Produto * inilistak = NULL;

No_Produto * inilistac = NULL;

No_Produto * inilistaf = NULL;

No_Produto * inilistaj = NULL;

No_Produto * inilistal = NULL;

No_Produto * inilistae = NULL;

insere_nodo(&arv,'G',&inilista);//Criação da raiz da arvore

do

{

 

printf("\n --- AO INFORMAR A SIGLA DE UM SETOR INFORME-A COM LETRAS MAIUSCULAS --- \n");

monta_menu();

scanf("%d", &op);

if(op == 1)

{cont++;

}

 

printf("\n");

 

switch(op)

{

case 1:

 

switch(cont){

case 1:

insere_nodo(&arv,'D',&inilistad);

printf(" SETOR - D - CRIADO \n\n");

printf("%d\n",cont);

 

break;

case 2:

insere_nodo(&arv,'K',&inilistak);

printf(" SETOR - K - CRIADO \n\n");

printf("%d\n",cont);

 

break;

case 3:

insere_nodo(&arv,'C',&inilistac);

printf(" SETOR - C - CRIADO \n\n");

printf("%d\n",cont);

 

break;

case 4:

insere_nodo(&arv,'F',&inilistaf);

printf(" SETOR - F - CRIADO \n\n");

printf("%d\n",cont);

 

break;

case 5:

insere_nodo(&arv,'J',&inilistaj);

printf(" SETOR - J - CRIADO \n\n");

printf("%d\n",cont);

 

break;

case 6:

insere_nodo(&arv,'L',&inilistal);

printf(" SETOR - L - CRIADO \n\n");

printf("%d\n",cont);

 

break;

case 7:

insere_nodo(&arv,'E',&inilistae);

printf(" SETOR - E - CRIADO \n\n");

printf("%d\n",cont);

 

break;

default :

printf(" O NUMERO MAXIMO DE SETORES FOI ATINGIDO !\n\n ");

 

 

break;

}

break;

case 2:

printf(" INFORME A SIGLA DO SETOR : ");

scanf("%s",&sigla);

resposta = encontra_setor(&(*arv),sigla);

if (resposta!=0){

printf(" O setor nao existe \n");

}

else

{ printf(" O setor existe \n");

}

 

/*switch(sigla)

{

case 'D':

vende_produto(&(*arv),sigla,&inilistad);

apresenta_lista(inilistad);

break;

case 'K':

vende_produto(&(*arv),sigla,&inilistak);

break;

case 'C':

vende_produto(&(*arv),sigla,&inilistac);

break;

case 'F':

vende_produto(&(*arv),sigla,&inilistaf);

break;

case 'J':

vende_produto(&(*arv),sigla,&inilistaj);

break;

case 'L':

vende_produto(&(*arv),sigla,&inilistal);

break;

case 'E':

vende_produto(&(*arv),sigla,&inilistae);

break;

default:

printf(" SIGLA/SETOR INEXISTENTE ! \n");

}

}*/

 

break;

case 3:

printf(" INFORME A SIGLA DO SETOR : ");

scanf("%s",&sigla);

resposta = encontra_setor(&(*arv),sigla);

if (resposta!=0){

printf(" O setor nao existe \n");

}

else

{

//total_vendas_setor(&(*arv),sigla);

}

 

 

 

 

 

break;

case 4:

 

break;

case 5:

printf(" INSIRA O NOME DO PRODUTO A SER PESQUIZADO : ");

fflush(stdin);

gets(produto);

printf(" DIGITE A SIGLA DO SETOR QUE DESEJA VERIFICAR :");

scanf("%c",&sigla);

 

 

break;

case 6 :

printf(" INSIRA O NOME DO PRODUTO A SER PESQUIZADO : ");

fflush(stdin);

gets(produto);

 

 

break;

default :

printf(" OPCAO INVALIDA ! \n");

 

}

}while (op != 0);

 

 

system("pause");

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Primeiro, coloque seu código entre [ code] e [/code] para que fique mais fácil de ler.

 

 

Segundo, não será que dá para postar só a parte que está com problemas? Porque é complicado entregar para a gente um programa desse tamanho e pedir que encontremos o bug, ainda mais com o código sem identação...

 

Já usou um Debugger? Eles ajudam muito nessas horas... Por exemplo, se está no linux, compile seu programa no GCC com a opção -g e instale o kdbg. Aí, é só entrar na pasta do seu programa e digitar isso:

 

kdbg ./NOME_DO_SEU_PROGRAMA

 

Se estiver no windows, considere instalar o Visual Studio 2010 Express Edition, ele é gratuito e vem com um debugger builtin na sua IDE.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.