Ir ao conteúdo

Posts recomendados

Postado

Preciso desenvolver um código em linguagem c utilizando uma estrutura de dados , onde o mesmo faça a busca a partir de uma numeração digitada pelo usuário e retorne na tela os dados relacionados aquela numeração. precisa deixar os dados armazenados no programa, e assim quando digitar uma numeração específica, por exemplo, retorna na tela o nome e sobrenome referente a ela, o armazenamento precisa ser feito em uma estrutura heterogênea de dados.

 

Estou tentando implementar utilizando a estrutura de dados do tipo árvore binária(Retirei a maioria da funções) como exemplo o código abaixo: 

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

struct BuscaDados{
    int num;
    char nome[50];
    char sobrenome[50];

    struct BuscaDados *direita, *esquerda;
};

int menu();
void Buscar(char nome[50], char sobrenome[50], int num);


int main() {
    int op, num, c;
    char nome[50];
    char sobrenome[50];

    ElementoDaArvoreBinaria *root;
    root = (ElementoDaArvoreBinaria*)malloc(sizeof(ElementoDaArvoreBinaria));
    root = NULL;

    while (1) {
        op = menu();
        switch (op) {
        case 1: //Busca os dados
            printf("Digite a numeração: ");
            scanf_s("%d", &num);
            while ((c = getchar()) != '\n' && c != EOF) {} //Limpa o buffer do teclado
            Buscar(nome[50], sobrenome[50], num);
            break;
        case 2:

            break;
        case 3:
            break;
        case 4:
            return 0;
        default:
            printf("Opcao invalida!\n");
        }
    }
    return 0;
}

int menu() {
    int op, c;
    system("cls");

    printf("1.Buscar dados do aluno\n");
    printf("2.Sair\n");
    printf("Escolha uma opcao: ");

    scanf_s("%d", &op);
    while ((c = getchar()) != '\n' && c != EOF) {} //Limpa o buffer do teclado

    system("cls");
    return op;

}
void Buscar(int num, char nome[50], char sobrenome[50])
{
    if (*ElementoVarredura == NULL)
    {
        ElementoDaArvoreBinaria *NovoElemento = NULL;
        NovoElemento = (ElementoDaArvoreBinaria*)malloc(sizeof(ElementoDaArvoreBinaria));
        NovoElemento->esquerda = NULL;
        NovoElemento->direita = NULL;

        NovoElemento->dado = num;
        *ElementoVarredura = NovoElemento;
        return;
    }
}
    if (num < (*ElementoVarredura)->dado)
    {
        Inserir(&(*ElementoVarredura)->esquerda, num);
    }
    else
    {
        if (num > (*ElementoVarredura)->dado)
        {
            Inserir(&(*ElementoVarredura)->direita, num);
        }
    }
}

 

Quais outros parâmetros preciso retirar, mudar? Como armazenar esses dados, por exemplo, nome e sobre, armazenar 10 dados nome e sobrenome, cada dado com sua numeração, Assim ao digitar um numeração rertone suas respectivas informações?

  • Curtir 1
Postado

@AnsiC Bom dia! Sim, estou tentando implementar nessa base de árvore binário, preciso fazer uma função de busca...Ex: Digita a numeração 0000, e aperece na tela os dados do mesmo nome1 e sobrenome1, digita: 1111, aparece nome2, sobrenome2, mais ou menos assim. precisa deixar os dados pré-armazenados no programa, e assim quando digitar a numeração chama os dados específicos a ela.

Postado
7 minutos atrás, PauloC19 disse:

@AnsiC Bom dia! Sim, estou tentando implementar nessa base de árvore binário, preciso fazer uma função de busca...Ex: Digita a numeração 0000, e aperece na tela os dados do mesmo nome1 e sobrenome1, digita: 1111, aparece nome2, sobrenome2, mais ou menos assim. precisa deixar os dados pré-armazenados no programa, e assim quando digitar a numeração chama os dados específicos a ela.

Acredito que você precisa de vetores nomes e sobrenomes,  da arvore para fazer a busca binária em que cada nó na arvore tem a numeração e os índices dos vetores associados. 

adicionado 5 minutos depois

Porque não adota a numeração do próprio índice da tabelas, assim cada nó na arvore tem um número que é o índice dos vetores nome e sobrenome

Postado

@AnsiC Por exemplo quero pré-armazenar 5 dados, preciso de 5 vetores nome e sobrenome, e sequências de if e else?

 

void Buscar(int num, char nome[50], char sobrenome[50]) {     if (*ElementoVarredura == NULL)     {         ElementoDaArvoreBinaria *NovoElemento = NULL;         NovoElemento = (ElementoDaArvoreBinaria*)malloc(sizeof(ElementoDaArvoreBinaria));         NovoElemento->esquerda = NULL;         NovoElemento->direita = NULL;         NovoElemento->dado = num;         *ElementoVarredura = NovoElemento;         return;     } }     if (num < (*ElementoVarredura)->dado)     {         Inserir(&(*ElementoVarredura)->esquerda, num);     }     else     {         if (num > (*ElementoVarredura)->dado)         {             Inserir(&(*ElementoVarredura)->direita, num);         }     } }

 

Aqui pode ser tudo apagado?  

Postado

Por enquanto eu estou pensando desta maneira.

 

Existe uma tabela chamada nome: tblNome;

Existe uma tabela chamada sobrenome: tblSNome;

/* Minha Base */
Base[100][2][10]; /* <- Base com 100 registros com 2 nomes de no máximo 9 caracteres */

Logo, Base[0][0] é o primeiro nome da base

Logo, Base[0][1] é o primeiro sobrenome da base

Logo, Base[99][0] é o centésimo nome da base

....

 

A missão aqui é colocar os índices da base[0...99] em uma arvore para que possa realizar sua busca binária. Precisará da função que cria a arvore e a que faz a busca nela.

 

Pois dado um índice do vetor basta colocá-lo e o seu dado associado é entregue, então use que cada nó da arvore com um código associado ao índice no vetor.

 

 

Faltou completar o raciocínio, se existe uma numeração que é parte da chave então ela está em uma tabela também.

/* Minha Base */
Base[100][2][10]; /* <- Base com 100 registros com 2 nomes de no máximo 9 caracteres */
cods[100][2]; /* <- Códigos tem 100 registros com 1-código e um índice associado */

Disso a busca é para encontrar o valor no código que retorna o índice da base associado ou chave.

Basicamente o que acontece nas tabelas do Access

  • Haha 1
Postado

@AnsiC Por exemplo: void Buscar(char nome, char sobrenome){

nome[0][0] = 'nome1'

sobrenome[0][1] = 'sobrenome1'

 

if((nome1[0][0]) && (sobrenome1[0][1]) == 0000)

 

printf("Nome: %s", nome1[0][0]);

printf("Sobrenome: %s", Sobrenome1[0][1]);

 

 

Perdido por onde declarar as situações?

Postado
17 minutos atrás, PauloC19 disse:

@AnsiC Por exemplo: void Buscar(char nome, char sobrenome){

nome[0][0] = 'nome1'

sobrenome[0][1] = 'sobrenome1'

 

if((nome1[0][0]) && (sobrenome1[0][1]) == 0000)

 

printf("Nome: %s", nome1[0][0]);

printf("Sobrenome: %s", Sobrenome1[0][1]);

 

 

Perdido onde salvar o nome, sobrenome, e numerção?

De um forma bem simples é isso mesmo, cada código é um padrão 00, 01, 02 ... 99 que são os índices do vetor.

Quando digitar 99 o nome e sobrenome da lista vai serão entregues.

 

void Buscar(int cod)

{ printf("%s %s", Base[cod][0], Base[cod][1]);

}

 

Mas se o trabalho é de estrutura de dados então você deve realmente estudar a teoria completa.

Eu tentei simplificar aqui ao máximo o que sei.

46 minutos atrás, AnsiC disse:

Por enquanto eu estou pensando desta maneira.

 

Existe uma tabela chamada nome: tblNome;

Existe uma tabela chamada sobrenome: tblSNome;


/* Minha Base */
Base[100][2][10]; /* <- Base com 100 registros com 2 nomes de no máximo 9 caracteres */

Logo, Base[0][0] é o primeiro nome da base

Logo, Base[0][1] é o primeiro sobrenome da base

Logo, Base[99][0] é o centésimo nome da base

....

 

A missão aqui é colocar os índices da base[0...99] em uma arvore para que possa realizar sua busca binária. Precisará da função que cria a arvore e a que faz a busca nela.

 

Pois dado um índice do vetor basta colocá-lo e o seu dado associado é entregue, então use que cada nó da arvore com um código associado ao índice no vetor.

 

 

Faltou completar o raciocínio, se existe uma numeração que é parte da chave então ela está em uma tabela também.


/* Minha Base */
Base[100][2][10]; /* <- Base com 100 registros com 2 nomes de no máximo 9 caracteres */
cods[100][2]; /* <- Códigos tem 100 registros com 1-código e um índice associado */

Disso a busca é para encontrar o valor no código que retorna o índice da base associado ou chave.

Basicamente o que acontece nas tabelas do Access

 

Postado

@AnsiC Essa parte de declarar amarzenar no vetor...

 

void MostrarDados(char nome[50], char sobrenome[50], int num)
{
    char nome[20][50];
    char sobrenome[20][50];
    int num, num1, num2, num3, num4, num5, num6, num7, num8, num9;

    nome[0][0] == nome1;
    sobrenome[0][1] == sobrenome1;
    num = 0000

    num->nome[0][0] = sobrenome[0][1];
    nome[0][0] = num;

   ......
 

Postado
6 minutos atrás, PauloC19 disse:

void MostrarDados(char nome[50], char sobrenome[50], int num)
{
    char nome[20][50];
    char sobrenome[20][50];
    int num, num1, num2, num3, num4, num5, num6, num7, num8, num9;

    nome[0][0] == nome1;
    sobrenome[0][1] == sobrenome1;
    num = 0000

    num->nome[0][0] = sobrenome[0][1];
    nome[0][0] = num;

   ......

Isso não funciona, diga-me o que você quer com a função MostrarDados?

Postado

@AnsiC Por exemplo, olha a função que pode ser implementada na árvore binária:

Estou tentando armazenar todos os dados em um vetor, uma base daquela, tipo que você explicou mais não sei por onde ir. Na base da árvore binário que tenho, os valores são digitados e armazenados, e com isso faz a busca, no código que preciso  tenho que armazenar no programa e buscar.

 

int buscar_ordenada(Arvore *a, int num)
{
      int direita, esquerda;
      if(a==NULL)
            return 0;
      if(a->info==num) //Localizou o noh
      {
            return 1;
      }
      if(num<a->info) //Percorre pela esquerda, caso o numero seja menor do que a raiz
      {
            esquerda=buscar_ordenada(a->esq,num);
      }
      else
      {
            direita=buscar_ordenada(a->dir,num);
      }
      return esquerda+direita;
      }

adicionado 1 minuto depois

@AnsiC Digitar o número dos dados armazenados e cair no if ou else e imprimir os dados da numeração digitada...

Postado

Entendi perfeitamente, e acho que posso ajudar sem deixar as coisas mais confusas.

A base que idealizei ela já existe e você atem. São duas tabelas.

 

tblNome

O; Nome; Sobrenome

1; "Nome 1", "SobreNome 1";

2; "Nome 2", "SobreNome 2;

3; "Nome 2", "SobreNome 2;

 

Que em notação de vetores é em C

char base[3][2][30]= { "Nome 1", "SobreNome 1",

                                    "Nome 2", "SobreNome 2",

                                    "Nome 3", "SobreNome 3",

                                   };

 

tblCodigo

C; Codigo; O

1; 1234; 2

2; 3594; 3

3; 4668; 1

 

Que em notação de vetores é em C

int cods[3][2]= { 1234,  2,

                           3594, 3, 

                           4668, 1,

                         };

Tudo isso é padrão já estão gravados na memória.

A tabela códs cada registro nela será um nó para sua arvore 1) função para criar arvore, sua função busca vai localizar um código 2) função para buscar na arvore, por exemplo: 1234 e retorna 2 que é  colocado no índice da tabela Nome assim base[2], dai o programa preenche a struct 3) função para preencher e retorna a struct com código, nome e sobrenome.

 

A função 2) aquela que busca na arvore você já tem.

 

Postado

@AnsiC Olha:

 

int MostrarDados(DadosAluno *a, int num, char nome[3][2][100])
{
    char nome[3][2][100] = { "nome0", "Sobrenome0"
    "Nome1", "Sobrenome1", "Nome2", "Sobrenome2"};

    int num[3][2] = { "0000", "1111", "2222" };

 

    int direita, esquerda;
    if (a == NULL)
        return 0;
    if (a->info == num) //Localizou o noh
    {
        return 1;
    }
    if (num < a->info) //Percorre pela esquerda, caso o numero seja menor do que a raiz
    {
        esquerda = buscar_ordenada(a->esq, num);
    }
    else
    {
        direita = buscar_ordenada(a->dir, num);
    }
    return esquerda + direita;
}

adicionado 18 minutos depois

@AnsiC Como relacionaria esse dados? 

Tipo assim, armazenando as numerações, nome e sobrenome...entrar na condição if/else tipo a do código abaixo, referente a cada numeração e imprimir na tela os dados dessa numeração.

Ex: O usuário digitou a numerção, se a mesma estiver armazenda com suas seguintes informações:

if(.......){

printf("Nome: %s", ........);

printf("Sobrenome: %s", .......);

}

e assim, fazer isso com todos os dados que estão armazenados....

 

 

int MostrarDados(DadosAluno *a,)
{
    char nome[3][100] = { "nome0","nome1", "nome2"};
    char sobrenome[3][100] = {"sobrenome0", "sobrenome1", "sobrenome2"};

    int num[3][2] = {};

 

    int direita, esquerda;
    if (a == NULL)
        return 0;
    if (a->info == num) //Localizou o noh
    {
        return 1;
    }
    if (num < a->info) //Percorre pela esquerda, caso o numero seja menor do que a raiz
    {
        esquerda = buscar_ordenada(a->esq, num);
    }
    else
    {
        direita = buscar_ordenada(a->dir, num);
    }
    return esquerda + direita;
}

Postado
1 hora atrás, PauloC19 disse:

Como relacionaria esse dados? 

Então, achei que esses dados já eram relacionados, em outras palavras a base já existe e aqui o que faltava era duas funções: a função que cria a arvore e a função que pesquisa na arvore. Agora você me diz que a base não existe.

 

A função que cria e pesquisa em arvores binárias está na internet em muitos exemplos [não pesquisei, mas sei que tem].

 

A função que cria a base é não muito difícil de implementar, e fica como exercício para você mesmo, ou para outros interessados.

 

A lógica é: Solicite do usuário-> código, nome e sobrenome.

O código salva-se no vetor código e [nome e sobrenome] no vetor nome. Lembrando que o índice no vetor nome onde foram salvos [nome e sobrenome] deve ser salvo no segundo índice do vetor código  para que assim se estabeleça a ligação indireta entre código e [nome e sobrenome]. 

Postado

@AnsiC Boa tarde! Desculpe talvez algumas explicações...Dessa maneira acho que era até melhor, o usuário digita as informações, o programa salva, e depois lista na tela os dados inseridos, porém, esses dados precisam está armazenados no programa para que o usuário apenas digite a numeração, e assim, imprimi na tela os outros dados, nome e sobrenome, por ex.

 

Postado
3 minutos atrás, PauloC19 disse:

Boa tarde! Desculpe talvez algumas explicações...Dessa maneira acho que era até melhor, o usuário digita as informações, o programa salva, e depois lista na tela os dados inseridos, porém, esses dados precisam está armazenados no programa para que o usuário apenas digite a numeração, e assim, imprimi na tela os outros dados, nome e sobrenome, por ex.

Certo, vamos para ideia original se esses dados já estão salvos na memória [não foi solicitado ao usuário que digite nada] como eles foram para lá? Como você pensou essa parte?

Postado

@AnsiC Assim, O exércício: Fazer um código em C que realiza a busca de dados(nome, email...). Fazer a busca com uma estrutura de dados(Para fazer implementação)  


Precisa amrazenar o nome, email, e o código. Amazenar em  uma estrutura heterogênea de dados. Não precisa fazer a leitura do dados manualmente(Pensando bem, pode sim, né!? Ficaria melhor, tudo digitado, e posteriormente salvo, certo!?) e tem a opção de deixar os dados pré-armazenados. Fazer o menu com as opções, digita o código e busca esses dados. 
 

adicionado 4 minutos depois

@AnsiC De acordo como pedido no exércicio acima, particularmente, não preciso deixar os dados armazenados, pode ser tudo digitado pelo usuário e salvo no programa...Com isso, o código, o nome, sobrenome é digitado pelo usuário, salvo, depois com uma opção de busca digita apenas o código, e imprimi na tela as outras informações...

Postado

Certo, 

13 minutos atrás, PauloC19 disse:

De acordo como pedido no exércicio acima, particularmente, não preciso deixar os dados armazenados, pode ser tudo digitado pelo usuário e salvo no programa...Com isso, o código, o nome, sobrenome é digitado pelo usuário, salvo, depois com uma opção de busca digita a penas o código, e imprimi na tela as outras informações...

Faz mais sentido e acredito. Porém o pre-armazenamento é apenas uma questão prática porque em uma situação de teste [testar a função que criar e a que busca na arvore] você não precisa digitar os dados da "base", já que estão salvos no código em forma de vetores inicializados.

 

 

Postado

@AnsiC Olha agora o código, ele persiste em erros e erro, peguei a base da estrutura da árvore binária, e modificando...porém na maioria dos detalhes encontra o erro, consegui rodar o mesmo uma vez, mas na busca só apresentou o numero, faltou email e nome, e continuei a modificar, estou tentando não sair muito fora do contexto, da base da árvore binária. Você me orientar no código abaixo:  

 

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

struct ElementoDaArvoreBinaria {
    char nome[50];
    char email[50];
    int num;
    struct ElementoDaArvoreBinaria * direita, *esquerda;
};

int menu();
void Inserir(ElementoDaArvoreBinaria **ElementoVarredura, int num, char nome[50], char email[50]);
void Buscar(ElementoDaArvoreBinaria **ElementoVarredura, int num,  char nome[50], char email[50]);
void Consultar(ElementoDaArvoreBinaria *, int num, char nome[50], char email[50]);

int main() {
    char nome[50];
    char email[50];
    int op, num, c;
    ElementoDaArvoreBinaria *root;
    root = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria));
    root = NULL;

    ElementoDaArvoreBinaria *ElementoBusca;
    ElementoBusca = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria));

    while (1) {
        op = menu();
        switch (op) {
        case 1:
            printf("Digite o nome do aluno: ");
            scanf_s("%s", nome);
            printf("Digite o email do aluno: ");
            scanf_s("%s", email);
            printf("Digite o ru do aluno: ");
            scanf_s("%d", &num);
            while ((c = getchar()) != '\n' && c != EOF) {}
            Inserir(&root, num);
            break;
        case 2:
            printf("Digite o numero do ru para buscar os dados: ");
            scanf_s("%d", &num);
            while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
            ElementoBusca = Buscar(&root, num);
            if (ElementoBusca != 0) {
                printf("Cadastro encontrado\n");
                printf("RU: %d Nome: %s Email %s\n", ru, nome, email);
            }
            else
                printf("Nenhum cadastro encontrado\n");
            system("pause");
            break;
        case 3:
            printf("\n\n");
            Consultar(&root);
            printf("\n\n");
            system("pause");
            break;
        case 4:
            return 0;
        default:
            printf("Opcao Invalido\n");
        }
    }
    return 0;
}

int menu() {
    int op, c;
    system("Cls");

    printf("1.Inserir na Arvore Binaria do tipo BST\n");
    printf("2.Buscar na Arvore Binaria do tipo BST\n");
    printf("3.Consultar a Arvore Binaria do tipo BST\n");
    printf("4.Sair\n");
    printf("Digite sua escolha: ");

    scanf_s("%d", &op);
    while ((c = getchar()) != '\n' && c != EOF) {} 

    system("Cls");
    return op;
}

void Inserir(ElementoDaArvoreBinaria ** ElementoVarredura, int num, char nome[50], char email[50] ) {
    

    if (*ElementoVarredura == NULL)
    {
        ElementoDaArvoreBinaria *NovoElemento = NULL;
        NovoElemento = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria));
        NovoElemento->esquerda = NULL;
        NovoElemento->direita = NULL;

        NovoElemento->root = num, nome, email;
        *ElementoVarredura = NovoElemento;

    }

    if (num < (*ElementoVarredura)->root, num, nome, email)
    {
        Inserir(&(*ElementoVarredura)->esquerda, num, nome, email);
    }
    else
    {
        if (num > (*ElementoVarredura)->root, num, nome, email)
        {
            Inserir(&(*ElementoVarredura)->direita, num, nome, email);
        }
    }
}

void Buscar(root, int num, char nome[50], char email[50])
{
    if (root == NULL)
        return NULL;

    if (num > (root)->num, nome, email)
    {
        Buscar(&((root)->esquerda), num, nome, email);
    }
    else
    {
        if (num> (root)->num, nome, email)
        {
            Buscar(&((root)->esquerda), num, nome, email);
        }
        else
        {
            if (num == root->num, nome, email)
            system("cls");
            printf("Dados do aluno\n");
            printf("\n\nNome: %s", (root)->Nome);
            printf("\n\Email: %s", (root)->Email);
            printf("\nNumero: %d", (root)->num);
        }
    }
}


void Consultar(int num, char nome[50], char email[50])
{       
    if (root != NULL) {
        printf("Listar dados");
        printf("%d %s %s \n", num, nome, email);
    }
}

  • Curtir 1
Postado
10 horas atrás, PauloC19 disse:

 root = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria));
 root = NULL;

Você reservou memória em seguida atribuir NULL. Pense um pouco sobre o significado disso.

Postado

@AnsiC Bom dia! Tentando refazer o código...apareceu o seguinte erro:

 

1903258887_Erroaorodarcdigo.thumb.PNG.9824ec11b0ce38890dde05fbdef07e31.PNG

 

Código:

struct BuscaDadosArvoreBinaria {
    int dado;
    char dado;
    struct BuscaDadosArvoreBinaria * direita, *esquerda;
};

int menu();
void Inserir(BuscaDadosArvoreBinaria **ElementoVarredura, int num, char nome, char email);
BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria **ElementoVarredura, int num);
void Consultar(BuscaDadosArvoreBinaria *);

int main() {
    int op, num, pos, c, res;
    char nome[50];
    char email[50];

    BuscaDadosArvoreBinaria *root;
    root = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));
    root = NULL;

    BuscaDadosArvoreBinaria *ElementoBusca;
    ElementoBusca = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));

    while (1) {
        op = menu();
        switch (op) {
        case 1:
            printf("Digite o numero desejado: ");
            scanf_s("%d", &num);
            printf("Digite o nome: ");
            scanf("%s", nome);
            printf("Digite o email: ");
            scanf_s("%s", email);
            Inserir(&root, num, nome, email);
            break;
        case 2:
            printf("Digite o numero a ser buscado: ");
            scanf_s("%d", &num);
            ElementoBusca = Buscar(&root, num);
            if (ElementoBusca != 0)
                printf(".\n");
            else
                printf(".\n");
            system("pause");
            break;
        case 3:
            printf("\n\n");
            Consultar(root);
            printf("\n\n");
            system("pause");
            break;
        case 4:
            return 0;
        default:
            printf("Opcao invalida\n");
        }
    }
    return 0;
}

int menu() {
    int op, c;
    system("Cls");

    printf("1.Cadastrar dados\n");
    printf("2.Buscar dados\n");
    printf("3.Consultar dados\n");
    printf("4.Sair\n");
    printf("Digite a opcao desejada: ");

    scanf_s("%d", &op);

    system("Cls");
    return op;
}

void Inserir(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email) {
  
    if (*ElementoVarredura == NULL)
    {
        BuscaDadosArvoreBinaria *NovoElemento = NULL;
        NovoElemento = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));
        NovoElemento->esquerda = NULL;
        NovoElemento->direita = NULL;

        NovoElemento->dado = num, nome, email;
        *ElementoVarredura = NovoElemento;
        return;
    }

    if (num < (*ElementoVarredura)->dado)
    {
        Inserir(&(*ElementoVarredura)->esquerda, num);
    }
    else
    {
        if (num > (*ElementoVarredura)->dado)
        {
            Inserir(&(*ElementoVarredura)->direita, num);
        }
    }
}

BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria ** ElementoVarredura, int num)
{
    if (*ElementoVarredura == NULL)
        return NULL;

    if (num < (*ElementoVarredura)->dado)
    {
        Buscar(&((*ElementoVarredura)->esquerda), num);
    }
    else
    {
        if (num > (*ElementoVarredura)->dado)
        {
            Buscar(&((*ElementoVarredura)->direita), num);
        }
        else
        {
            if (num == (*ElementoVarredura)->dado)
                return *ElementoVarredura;
        }
    }
}

 

Postado
6 horas atrás, PauloC19 disse:

@AnsiC Bom dia! Tentando refazer o código...apareceu o seguinte erro:

 

1903258887_Erroaorodarcdigo.thumb.PNG.9824ec11b0ce38890dde05fbdef07e31.PNG

 

Código:


struct BuscaDadosArvoreBinaria {
    int dado;
    char dado;
    struct BuscaDadosArvoreBinaria * direita, *esquerda;
};

int menu();
void Inserir(BuscaDadosArvoreBinaria **ElementoVarredura, int num, char nome, char email);
BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria **ElementoVarredura, int num);
void Consultar(BuscaDadosArvoreBinaria *);

int main() {
    int op, num, pos, c, res;
    char nome[50];
    char email[50];

    BuscaDadosArvoreBinaria *root;
    root = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));
    root = NULL;

    BuscaDadosArvoreBinaria *ElementoBusca;
    ElementoBusca = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));

    while (1) {
        op = menu();
        switch (op) {
        case 1:
            printf("Digite o numero desejado: ");
            scanf_s("%d", &num);
            printf("Digite o nome: ");
            scanf("%s", nome);
            printf("Digite o email: ");
            scanf_s("%s", email);
            Inserir(&root, num, nome, email);
            break;
        case 2:
            printf("Digite o numero a ser buscado: ");
            scanf_s("%d", &num);
            ElementoBusca = Buscar(&root, num);
            if (ElementoBusca != 0)
                printf(".\n");
            else
                printf(".\n");
            system("pause");
            break;
        case 3:
            printf("\n\n");
            Consultar(root);
            printf("\n\n");
            system("pause");
            break;
        case 4:
            return 0;
        default:
            printf("Opcao invalida\n");
        }
    }
    return 0;
}

int menu() {
    int op, c;
    system("Cls");

    printf("1.Cadastrar dados\n");
    printf("2.Buscar dados\n");
    printf("3.Consultar dados\n");
    printf("4.Sair\n");
    printf("Digite a opcao desejada: ");

    scanf_s("%d", &op);

    system("Cls");
    return op;
}

void Inserir(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email) {
  
    if (*ElementoVarredura == NULL)
    {
        BuscaDadosArvoreBinaria *NovoElemento = NULL;
        NovoElemento = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));
        NovoElemento->esquerda = NULL;
        NovoElemento->direita = NULL;

        NovoElemento->dado = num, nome, email;
        *ElementoVarredura = NovoElemento;
        return;
    }

    if (num < (*ElementoVarredura)->dado)
    {
        Inserir(&(*ElementoVarredura)->esquerda, num);
    }
    else
    {
        if (num > (*ElementoVarredura)->dado)
        {
            Inserir(&(*ElementoVarredura)->direita, num);
        }
    }
}

BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria ** ElementoVarredura, int num)
{
    if (*ElementoVarredura == NULL)
        return NULL;

    if (num < (*ElementoVarredura)->dado)
    {
        Buscar(&((*ElementoVarredura)->esquerda), num);
    }
    else
    {
        if (num > (*ElementoVarredura)->dado)
        {
            Buscar(&((*ElementoVarredura)->direita), num);
        }
        else
        {
            if (num == (*ElementoVarredura)->dado)
                return *ElementoVarredura;
        }
    }
}

 

@AnsiC Esse problema ao tentar rodar o código foi solucionado.

adicionado 10 minutos depois

@AnsiC Boa tarde! Modificando e modificando alguns parâmetros, conseguir fazer o código executar, inserir a numeração, o nome e email...está executando a função de busca normalmente, contudo, tem apenas um detalhe ao inserir a numeração, por ex.: 2222, o programa salva, mas quando faço a busca com esse número digitado para retornar as outras informações, imprimi na tela o nome, email, e a numeração, porém, ao invés de mostrar 2222(como digitado), apresenta 949543, por ex. Pode me orientar?

 

Código:

int main() {
	int op, pos, c, res;
	int num;
	char nome[50];
	char email[50];

	BuscaDadosArvoreBinaria *root;
	root = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));
	root = NULL;

	BuscaDadosArvoreBinaria *ElementoBusca;
	ElementoBusca = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));

	while (1) {
		op = menu();
		switch (op) {
		case 1:
			printf("Digite o numero desejado: ");
			scanf_s("%d", &num);
			while ((c = getchar()) != '\n' && c != EOF) {} 
			printf("Digite o seu nome: ");
			scanf_s("%[^\n]%*c", nome, 50);
			printf("Digite o seu email: ");
			scanf_s("%s", email, 50);
			while ((c = getchar()) != '\n' && c != EOF) {} 
			Inserir(&root, num, nome[50], email[50]);
			break;
		case 2:
			printf("Digite o numero a ser buscado: ");
			scanf_s("%d", &num);
			printf("\n");
			while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
			ElementoBusca = Buscar(&root, num, nome[50], email[50]);
			if (ElementoBusca != 0) {
				printf("Cadastro localizado.\n\n");
				printf("Numero: %d\n", &num);
				printf("Nome: %s\n", nome);
				printf("Email: %s\n\n", email);
            }
			else {
				printf("Cadastro nao localizado.\n");
			}
			system("pause");
			break;
		case 3:
			printf("\n\n");
			Consultar(root);
			printf("\n\n");
			system("pause");
			break;
		case 4:
			return 0;
		default:
			printf("Invalido\n");
		}
	}
	return 0;
}

int menu() {
	int op, c;
	system("Cls");

	printf("1.Cadastrar dados\n");
	printf("2.Buscar dados\n");
	printf("3.Consultar dados\n");
	printf("4.Sair\n");
	printf("Digite a opcao desejada: ");

	scanf_s("%d", &op);
	while ((c = getchar()) != '\n' && c != EOF) {} 

	system("Cls");
	return op;
}

void Inserir(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email) {

	if (*ElementoVarredura == NULL)
	{ 
		BuscaDadosArvoreBinaria *NovoElemento = NULL;
		NovoElemento = (BuscaDadosArvoreBinaria *)malloc(sizeof(BuscaDadosArvoreBinaria));
		NovoElemento->esquerda = NULL;
		NovoElemento->direita = NULL;

		NovoElemento->dado = num, nome, email;
		*ElementoVarredura = NovoElemento;
		return;
	}

	if (num < (*ElementoVarredura)->dado)
	{
		Inserir(&(*ElementoVarredura)->esquerda, num, nome, email);
	}
	else
	{
		if (num > (*ElementoVarredura)->dado)
		{
			Inserir(&(*ElementoVarredura)->direita, num, nome, email);
		}
	}
}

BuscaDadosArvoreBinaria* Buscar(BuscaDadosArvoreBinaria ** ElementoVarredura, int num, char nome, char email)
{
	if (*ElementoVarredura == NULL)
		return NULL;

	if (num < (*ElementoVarredura)->dado)
	{
		Buscar(&((*ElementoVarredura)->esquerda), num, nome, email);
	}
	else
	{
		if (num > (*ElementoVarredura)->dado)
		{
			Buscar(&((*ElementoVarredura)->direita), num, nome, email);
		}
		else
		{
			if (num == (*ElementoVarredura)->dado)
				return *ElementoVarredura;
		}
	}
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!