3
In my menu it is not doing the correct output in the print. In addition to the search return only empty tree.
#include<iostream>
#include<string>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef int TipoChave;
typedef struct TipoRegistro{
TipoChave Chave;
string Nome;
float Preco;
int QuantEstoque;
}TipoRegistro;
typedef struct TipoNo* Apontador;
typedef struct TipoNo{
TipoRegistro Reg;
Apontador Esq, Dir;
}TipoNo;
void ImprimeEmOrdem(TipoNo *pRaiz)
{
if(pRaiz != NULL)
{
ImprimeEmOrdem(pRaiz->Esq);
cout<<"IMPRIME "<<pRaiz->Reg.Chave;
ImprimeEmOrdem(pRaiz->Dir);
}
}
void Pesquisa(TipoRegistro x, Apontador *p)
{
if((*p) == NULL)
{
cout<<"ERRO 1: Regristo nao esta presente\n"<<endl;
}
if(x.Chave < (*p)->Reg.Chave)
{
Pesquisa(x, &((*p)->Esq));
}
if(x.Chave > (*p)->Reg.Chave)
{
Pesquisa(x, &((*p)->Dir));
}
else
{
x = (*p)->Reg;
}
}
void Insere(TipoRegistro x, Apontador *p)
{
cout << "teste";
if(*p == NULL)
{
cout << "primeiro if";
*p = (Apontador)malloc(sizeof(TipoNo));
(*p)->Reg = x;
(*p)->Esq = NULL;
(*p)->Dir = NULL;
cout << "Registro inserido com sucesso";
}
if(x.Chave < (*p)->Reg.Chave)
{
cout << "segundo if";
Insere(x,&(*p)->Esq);
return;
}
if(x.Chave > (*p)->Reg.Chave)
{
cout << "terceiro if";
Insere(x, &(*p)->Dir);
return;
}
//else cout<<"ERRO 2 : Regristo ja existe na arvore\n";
}
void Inicializa(Apontador p) //Apontador 'e um ponteiro
{
p = NULL;
}
int main()
{
int op, c = 1;
Apontador No, Topo;
TipoRegistro x;
Topo = NULL;
//No = Topo;
do //while(c != 0)
{
cout<<"Escolha Uma das opcoes abaixo"<<endl;
cout<<"\t1. Inserir Produtos: \n\t2. Buscar Produtos \n\t3. SAIR"<<endl;
cin>>op;
switch (op)
{
case 1 :
cout<<"DIGITE O CODIGO : ";
cin>>x.Chave;
cout<<"DIGITE O NOME DO PRODUTO : ";
cin>>x.Nome;
cout<<"DIGITE O PRECO DO PRODUTO : ";
cin>>x.Preco;
cout<<"DIGITE A QUANTIDADE DISPONIVEL NO ESTOQUE : ";
cin>>x.QuantEstoque;
cout << x.Chave << endl;
cout << (Topo == NULL) << endl;
Insere(x, &Topo);
cout << Topo->Reg.Chave;
Pesquisa(x, &Topo);
break;
case 2 :
cout<<"DIGITE O CODIGO OU NOME A SER BUSCADO : ";
cin>>x.Chave;
Pesquisa(x, &Topo);
break;
case 3 :
cout<<"VOCE ESTA SAINDO\n";
c = 0 ;
break;
default :
cout<<"OPCAO INVALIDA";
break;
}
}while(op !=3 );
ImprimeEmOrdem(Topo);
}
Vinicius, after you told me about these errors I made the changes, but the inserts keep leaving the terminal, in that decide to compile in the terminal using G++, and the file generated from the segmentation failure saying that can not record in memory. I don’t know why this is happening. If you can help me...
– Luiz Felipe Evaristo
Sure, I can! Update your code here in the post, so I know how it turned out.
– Vinícius Gobbo A. de Oliveira
On which line is the error occurring?
– Vinícius Gobbo A. de Oliveira
On my computer it is inserting correctly however when it has to return in the menu, it of the Gmentation fault. Then give up this code and made another much more complete and efficient. Thanks Vinicius. I will update this.
– Luiz Felipe Evaristo