Olá pessoal, queria saber se alguém poderia analizar meu código que está com problema na hora de retornar o valor da busca binária.
É o seguinte, no programa entra com a matricula de 5 alunos e seus respectivos nomes. Depois ele coloca em ordem de matricula(só porque o enunciado pediu, mas é inútil), em seguida coloca em ordem alfabética. Depois entra com um nome, que será a chave para a busca, em seguida roda a busca binária para localizar o nome e tem que retornar o numero da matricula. É aí que está o problema, aparentemente não está comparando ou não está retornando.
Desde já agradeço.
O código:
#include <cstdlib>
#include <iostream>
#define tamanho 5
#define nometamanho 30
using namespace std;
struct tno
{
int matricula;
char nome[nometamanho];
};
struct tfila
{
struct tno no[tamanho];
int topo;
};
void iniciafila (struct tfila*fila)
{
fila->topo=0;
}
int ordenainsercao(struct tfila*fila, struct tno no[], int tam)
{
int j,i,aux;
tno noaux;
for (j=1; j<tam; j++){
aux=no[j].matricula;
for (i=j-1; i>=0 && no[i].matricula > noaux.matricula; i--){
no[i+1]=no[i];
}
no[i+1]=noaux;
}
}
int ordenanome (struct tfila * fila , struct tno no[] , int tam)
{
int j,i;
tno noaux;
for (j=1; j<tam; j++){
noaux,no[j];
for (i=j-1; i>=0 && strcmp(no[i].nome,noaux.nome)>0; i--){
no[i+1]=no[i];
}
no[i+1]=noaux;
}
}
int buscabinaria (struct tfila* fila, struct tno no[], int tam, char chave[],int nometam )
{
int e,m,d; e=0; d=tam-1;
while (e<=d){
m=(e+d)/2;
if (strcmp(no[m].nome,chave)==0){
return no[m].matricula;
}
if (strcmp(no[m].nome,chave)>0){
e=m+1;
}
else{
d=m-1;
}
return 0;
}
}
int main(int argc, char *argv[])
{
struct tfila fila;
int c, retornopesquisa;
struct tno no[tamanho];
char chave[nometamanho];
iniciafila(&fila);
for (c=0; c<tamanho; c++){
cout<<"\n digite "<<c+1<<"o matricula: ";
cin>>no[c].matricula;
cout<<"\n digite "<<c+1<<"o nome: ";
cin>>no[c].nome;
}
ordenainsercao(& fila , no, tamanho);
ordenanome(& fila, no, tamanho);
cout<<"\n digite nome para ser pesquisado \n ";
cin>>chave;
retornopesquisa=buscabinaria(& fila, no, tamanho, chave, nometamanho);
if(retornopesquisa==0){
cout<<"\n nenhum nome ou matricula encontarada \n ";
}
else{
cout<<"nome encontrado a matricula referente a este nome e: \n ";
cout<<retornopesquisa +1;
}
system("PAUSE");
}
Pergunta
cassiogallotti
Olá pessoal, queria saber se alguém poderia analizar meu código que está com problema na hora de retornar o valor da busca binária.
É o seguinte, no programa entra com a matricula de 5 alunos e seus respectivos nomes. Depois ele coloca em ordem de matricula(só porque o enunciado pediu, mas é inútil), em seguida coloca em ordem alfabética. Depois entra com um nome, que será a chave para a busca, em seguida roda a busca binária para localizar o nome e tem que retornar o numero da matricula. É aí que está o problema, aparentemente não está comparando ou não está retornando.
Desde já agradeço.
O código:
#include <cstdlib> #include <iostream> #define tamanho 5 #define nometamanho 30 using namespace std; struct tno { int matricula; char nome[nometamanho]; }; struct tfila { struct tno no[tamanho]; int topo; }; void iniciafila (struct tfila*fila) { fila->topo=0; } int ordenainsercao(struct tfila*fila, struct tno no[], int tam) { int j,i,aux; tno noaux; for (j=1; j<tam; j++){ aux=no[j].matricula; for (i=j-1; i>=0 && no[i].matricula > noaux.matricula; i--){ no[i+1]=no[i]; } no[i+1]=noaux; } } int ordenanome (struct tfila * fila , struct tno no[] , int tam) { int j,i; tno noaux; for (j=1; j<tam; j++){ noaux,no[j]; for (i=j-1; i>=0 && strcmp(no[i].nome,noaux.nome)>0; i--){ no[i+1]=no[i]; } no[i+1]=noaux; } } int buscabinaria (struct tfila* fila, struct tno no[], int tam, char chave[],int nometam ) { int e,m,d; e=0; d=tam-1; while (e<=d){ m=(e+d)/2; if (strcmp(no[m].nome,chave)==0){ return no[m].matricula; } if (strcmp(no[m].nome,chave)>0){ e=m+1; } else{ d=m-1; } return 0; } } int main(int argc, char *argv[]) { struct tfila fila; int c, retornopesquisa; struct tno no[tamanho]; char chave[nometamanho]; iniciafila(&fila); for (c=0; c<tamanho; c++){ cout<<"\n digite "<<c+1<<"o matricula: "; cin>>no[c].matricula; cout<<"\n digite "<<c+1<<"o nome: "; cin>>no[c].nome; } ordenainsercao(& fila , no, tamanho); ordenanome(& fila, no, tamanho); cout<<"\n digite nome para ser pesquisado \n "; cin>>chave; retornopesquisa=buscabinaria(& fila, no, tamanho, chave, nometamanho); if(retornopesquisa==0){ cout<<"\n nenhum nome ou matricula encontarada \n "; } else{ cout<<"nome encontrado a matricula referente a este nome e: \n "; cout<<retornopesquisa +1; } system("PAUSE"); }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.