Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Yan Esteves

Pesquisa binária

Recommended Posts

É o seguinte, tenho que construir um algoritmo no Visualg que receba 100 nomes em um vetor e organiza-lo em ordem alfabética e também precisa fazer uma pesquisa binária pra procurar algum nome que esteja armazenado no algoritmo.
O que eu fiz por enquanto ta bem simples, porem na parte da pesquisa que ta pegando.

algoritmo "semnome"
var

aux: vetor[1.5,1..20] de inteiro
org: vetor[1..5,1..20] de inteiro
numNomes: vetor[1..5,1..20] de inteiro
nomes: vetor[1..5,1..20] de caracter
i, j: inteiro
nome: VETOR [1..5] de caracter

inicio

//******PEGO OS NOMES DAS PESSOAS
para i de 1 ate 5 faca
escreval("Informe o nome da pessoa")
leia(nome[i])
fimpara

//******MANDO OS NOMES PARA UMA MATRIZ QUE IRÁ SEPARAR CADA LETRA
para i de 1 ate 5 faca
para j de 1 ate compr(nome[i]) faca
nomes[i,j] <- copia(nome[i],j,j)
fimpara
fimpara

//******TRANSFORMO CADA LETRA DA MATRIZ EM NUMERO DA TABELA ASCII
para i de 1 ate 5 faca
para j de 1 ate compr(nome[i]) faca
numNomes[i,j] <- asc(nomes[i,j])
fimpara
fimpara
//Continua com a ordenação da matriz e pesquisa binária

fimalgoritmo

Neste esboço super simples falta apenas terminar a organização da matriz e fazer a pesquisa binária. A organização até sei fazer e já tenho pronto em um caderno, mas como faço a pesquisa?

 

E existe outra forma de fazer sem que eu mande cada nome para uma matriz?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

var

NOME : array[1..10] de cadeia;

I, J : inteiro;

COMECO, FINAL, MEIO : inteiro;

PESQ, RESP, X : cadeia;

 

ACHA : lógico;

inicio

escreva('Pesquisa binaria de nomes');

escreva;

Para I ← 1 até 10 faça

inicio

escreva('Digite o ', I ,'o. nome: '); leia(NOME);

fim;

 

{*** Ordenacao ***}

Para I ← 1 até 9 faça

Para J ← I + 1 até 10 faça

se (NOME > NOME[J]) então

inicio

X ← NOME;

NOME ← NOME[J];

NOME[J] ← X;

fim;

 

{*** Trecho de pesquisa ***}

inicio

escreva('Entre o nome a ser pesquisado: '); leia(PESQ);

COMECO ← 1;

FINAL ← 10;

ACHA ← falso;

enquanto (COMECO <= FINAL) e (ACHA = falso) faça

inicio

MEIO ← (COMECO + FINAL) DIV 2;

se (PESQ = NOME[MEIO]) então

ACHA ← verdadeiro

senão

se (PESQ < NOME[MEIO]) então

FINAL ← MEIO - 1

senão

COMECO ← MEIO + 1;

fim;

se (ACHA = verdadeiro) então

escreva(PESQ, ' foi localizado na posicao ', MEIO)

senão

escreva(PESQ, ' nao foi localizado');

escreva('Deseja continuar? SIM/NAO: ');

leia(RESP);

fim;

fim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.