dmendes40 Postado Junho 12, 2012 Denunciar Share Postado Junho 12, 2012 Boa Tarde a todos,não encontro o erro desse programa,na hora de cadastrar ele trava, após a inserção do ultimo dado do cadastro.Objetivo: Criação de Hashtable implementada por Lista Ligada com opção busca na hashtable#include<iostream>#include<math.h>using namespace std;typedef struct produto{ int codigo; char descricao[20]; int quantidade; int fornecedor; float precoCusto; float precoVenda;} Produto;typedef struct lista{ Produto *ponteiro; lista *proximo;} Lista;struct lista inserirProdutoNaLista(Produto *p1, Lista *l1){ Lista *auxLista; *auxLista = *l1; cout<<p1->codigo; if(auxLista == NULL) { auxLista->ponteiro = p1; auxLista->proximo = NULL; } else { auxLista->ponteiro = p1; *(auxLista->proximo) = *l1; } *l1 = *auxLista; return *l1;}void busca(Lista l1, int codigo){ Lista *auxLista; *auxLista = l1; Produto *auxProduto; *auxProduto = *(auxLista->ponteiro); while (auxLista != NULL && auxProduto->codigo != codigo) { *auxLista = *(auxLista->proximo); *auxProduto = *(auxLista->ponteiro); if(auxLista == NULL) { cout<<"Elemento não encontrado!\n"; } else { if(auxProduto->codigo == codigo) { cout<< auxProduto->codigo << "\t" << auxProduto->descricao << "\t" << auxProduto->quantidade << "\t" << auxProduto->fornecedor << "\t" << auxProduto->precoCusto << "\t" << auxProduto->precoVenda; cout<<"\n"; } } }}int main(){ Lista *l1 = new Lista [7]; l1 = NULL; Produto *auxProduto = new Produto; Lista *auxLista; int hash,opcao,codigo; do { //Limpando a tela system("cls"); //Imprimindo o menu printf("Escolha um opcao: \n"); printf(" 1 - Inserir um produto.\n"); printf(" 2 - Buscar um produto pelo codigo.\n"); printf(" 3 - Sair do Programa.\n"); //usuario escolhe a opcao printf("\nOpcao: "); scanf("%d", &opcao); //verifica a opcao selecionada switch(opcao) { case 1: cout<< "\nDigite o codigo do produto: "; cin>>auxProduto->codigo; cout<< "Digite o descricao do produto: "; cin>>auxProduto->descricao; cout<< "Digite o quantidade de produtos: "; cin>>auxProduto->quantidade; cout<< "Digite o fornecedor do produto: "; cin>>auxProduto->fornecedor; cout<< "Digite o preço de custo do produto: "; cin>>auxProduto->precoCusto; cout<< "Digite o preço de venda do produto: "; cin>>auxProduto->precoVenda; hash = auxProduto->codigo % 7; *auxLista = l1[hash]; l1[hash] = inserirProdutoNaLista(auxProduto,auxLista); break; case 2: cout<<"Digite o codigo que deseja procurar: "; cin>>codigo; hash = codigo % 7; *auxLista = l1[hash]; busca(*auxLista,codigo); break; case 3: printf("\nFim do programa!!!\n"); break; default: printf("\nOpcao invalida!\n"); } cin.sync(); cin.get(); } while (opcao != 3);} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ezequiel A. Ribeiro Postado Junho 14, 2012 Denunciar Share Postado Junho 14, 2012 (editado) #include<iostream> #include<math.h> using namespace std; typedef struct produto { int codigo; char descricao[20]; int quantidade; int fornecedor; float precoCusto; float precoVenda; } Produto; typedef struct lista { Produto *ponteiro; lista *proximo; } Lista; struct lista inserirProdutoNaLista(Produto *p1, Lista *l1) { Lista *auxLista = new Lista; *auxLista = *l1; cout<<p1->codigo; if(auxLista == NULL) { auxLista->ponteiro = p1; auxLista->proximo = NULL; } else { cout<<"teste3"<<endl; auxLista->ponteiro = p1; auxLista->proximo = l1; cout<<"teste4"<<endl; } *l1 = *auxLista; return *l1; } void busca(Lista *l1, int cod) { Lista *auxLista = new Lista; *auxLista = *l1; Produto *auxProduto; *auxProduto = *(auxLista->ponteiro); cout<<"teste5"<<endl; //while (auxLista != NULL || auxProduto->codigo != cod) { cout<<"teste6"<<endl; *auxLista = *(auxLista->proximo); *auxProduto = *(auxLista->ponteiro); cout<<"teste8"<<endl; if(auxLista == NULL) { cout<<"Elemento não encontrado!\n"; } else { if(auxProduto->codigo == cod) { cout<<"teste7"<<endl; cout<< auxProduto->codigo << "\t" << auxProduto->descricao << "\t" << auxProduto->quantidade << "\t" << auxProduto->fornecedor << "\t" << auxProduto->precoCusto << "\t" << auxProduto->precoVenda; cout<<"\n"; } } } } int main() { Lista *l1 = new Lista [7]; Produto *auxProduto = new Produto; Lista *auxLista = new Lista; int hash,opcao,codigo; do { //Limpando a tela system("cls"); //Imprimindo o menu printf("Escolha um opcao: \n"); printf(" 1 - Inserir um produto.\n"); printf(" 2 - Buscar um produto pelo codigo.\n"); printf(" 3 - Sair do Programa.\n"); //usuario escolhe a opcao printf("\nOpcao: "); scanf("%d", &opcao); //verifica a opcao selecionada switch(opcao) { case 1: cout<< "\nDigite o codigo do produto: "; cin>>auxProduto->codigo; cout<< "Digite o descricao do produto: "; cin>>auxProduto->descricao; cout<< "Digite o quantidade de produtos: "; cin>>auxProduto->quantidade; cout<< "Digite o fornecedor do produto: "; cin>>auxProduto->fornecedor; cout<< "Digite o preço de custo do produto: "; cin>>auxProduto->precoCusto; cout<< "Digite o preço de venda do produto: "; cin>>auxProduto->precoVenda; hash = auxProduto->codigo % 7; cout<<"teste0"<<endl; *auxLista = l1[hash]; // cout<<"teste1"<<endl; l1[hash] = inserirProdutoNaLista(auxProduto,auxLista); cout<<"teste2"<<endl; break; cout<<"teste2"<<endl; case 2: cout<<"Digite o codigo que deseja procurar: "; cin>>codigo; hash = codigo % 7; *auxLista = l1[hash]; busca(auxLista,codigo); break; case 3: printf("\nFim do programa!!!\n"); break; default: printf("\nOpcao invalida!\n"); } cin.sync(); cin.get(); } while (opcao != 3); l1 = NULL; auxProduto = NULL; auxLista = NULL; delete l1; delete auxProduto; delete auxLista; }Amigo fiz algumas alterações e consegui cadastrar um produto e depois fazer a busca do mesmo.Existe algum problema com o while da busca. Parece -me que ele fica indefinidamente no loop.o problema após cadastrar o último item está nessa parte *auxLista = l1[hash], tirei o l1 = NULL e consegui fazer o cadastro. Editado Junho 14, 2012 por Ezequiel A. Ribeiro Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
dmendes40
Boa Tarde a todos,
não encontro o erro desse programa,
na hora de cadastrar ele trava, após a inserção do ultimo dado do cadastro.
Objetivo: Criação de Hashtable implementada por Lista Ligada com opção busca na hashtable
#include<iostream>
#include<math.h>
using namespace std;
typedef struct produto
{
int codigo;
char descricao[20];
int quantidade;
int fornecedor;
float precoCusto;
float precoVenda;
} Produto;
typedef struct lista
{
Produto *ponteiro;
lista *proximo;
} Lista;
struct lista inserirProdutoNaLista(Produto *p1, Lista *l1)
{
Lista *auxLista;
*auxLista = *l1;
cout<<p1->codigo;
if(auxLista == NULL)
{
auxLista->ponteiro = p1;
auxLista->proximo = NULL;
}
else
{
auxLista->ponteiro = p1;
*(auxLista->proximo) = *l1;
}
*l1 = *auxLista;
return *l1;
}
void busca(Lista l1, int codigo)
{
Lista *auxLista;
*auxLista = l1;
Produto *auxProduto;
*auxProduto = *(auxLista->ponteiro);
while (auxLista != NULL && auxProduto->codigo != codigo)
{
*auxLista = *(auxLista->proximo);
*auxProduto = *(auxLista->ponteiro);
if(auxLista == NULL)
{
cout<<"Elemento não encontrado!\n";
}
else
{
if(auxProduto->codigo == codigo)
{
cout<< auxProduto->codigo << "\t" << auxProduto->descricao << "\t" << auxProduto->quantidade << "\t" << auxProduto->fornecedor << "\t" << auxProduto->precoCusto << "\t" << auxProduto->precoVenda;
cout<<"\n";
}
}
}
}
int main()
{
Lista *l1 = new Lista [7];
l1 = NULL;
Produto *auxProduto = new Produto;
Lista *auxLista;
int hash,opcao,codigo;
do
{
//Limpando a tela
system("cls");
//Imprimindo o menu
printf("Escolha um opcao: \n");
printf(" 1 - Inserir um produto.\n");
printf(" 2 - Buscar um produto pelo codigo.\n");
printf(" 3 - Sair do Programa.\n");
//usuario escolhe a opcao
printf("\nOpcao: ");
scanf("%d", &opcao);
//verifica a opcao selecionada
switch(opcao)
{
case 1:
cout<< "\nDigite o codigo do produto: ";
cin>>auxProduto->codigo;
cout<< "Digite o descricao do produto: ";
cin>>auxProduto->descricao;
cout<< "Digite o quantidade de produtos: ";
cin>>auxProduto->quantidade;
cout<< "Digite o fornecedor do produto: ";
cin>>auxProduto->fornecedor;
cout<< "Digite o preço de custo do produto: ";
cin>>auxProduto->precoCusto;
cout<< "Digite o preço de venda do produto: ";
cin>>auxProduto->precoVenda;
hash = auxProduto->codigo % 7;
*auxLista = l1[hash];
l1[hash] = inserirProdutoNaLista(auxProduto,auxLista);
break;
case 2:
cout<<"Digite o codigo que deseja procurar: ";
cin>>codigo;
hash = codigo % 7;
*auxLista = l1[hash];
busca(*auxLista,codigo);
break;
case 3:
printf("\nFim do programa!!!\n");
break;
default:
printf("\nOpcao invalida!\n");
}
cin.sync();
cin.get();
} while (opcao != 3);
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.