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:
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.