Dividir e conquistar é o lema desse método. Ordena os dados para localiza-lo posteriormente usando o método de pesquisa binária.

{
1. Iniciar um contador, pedir a leitura de dez nomes e colocalos em ordem alfabetica
2. Criar um looping que efetue a pesquisa enquanto o usuario desejar
Durante a fase de pesquisa, deve ser solicitada a informação a ser pesquisada.
Essa informação deve ser comparada, utilizando o método de pesquisa binária
Sendo igual, mostra; caso contrário, avança para o próximo. Senão achar em toda lista, informar que não existe o lelemneto pesquisado; se existir, deve mostra-lo
3. Encerrar a pesquisa quando desejando
}

program PESQUISA_BINARIA;
var
nome: array [1..10] of string;
i, j: integer;
comeco, final, meio: integer;
pesq, resp, x: string;
acha: boolean;
BEGIN
writeln(‘Pesquisa binaria de nomes: ‘);
writeln;
for i:=1 to 10 do
begin
write(‘Digite o ‘, i:2, ‘o nome: ‘); readln(nome[i]);
end;

{Ordenando os nomes }
for i:= 1 to 9 do
for j:= i+1 to 10 do
if (nome[i] > nome[j]) then
begin
x:= nome[i];
nome[i]:=nome[j];
nome[j]:=x;
end;
{Pesquisando..}
resp:=’sim’;
while (resp=’sim’) or (resp=’SIM’) do
begin
writeln;
write(‘Entre o nome a ser pesquisado: ‘); readln(pesq);
comeco:=1;
final:=10;
acha:=false;
while (comeco <=final) and (acha=false) do
begin
meio:=(comeco+final) div 2;
if (pesq=nome[meio]) then
acha:=true
else
if (pesq < nome[meio]) then
final:=meio-1
else
comeco:=meio+1;
end;

if (acha=true) then
writeln(pesq, ‘ foi localizado na posicao ‘, meio:2)
else
writeln(pesq, ‘ não foi localizado’);
writeln;
write(‘Deseja continuar? sim/nao: ‘);
readln(resp);
end;

END.

Este artigo foi útil ?
SimNão

2 Replies to “[free pascal] Métodos de Pesquisa 2: Pesquisa binária”

  1. Luiz Daniel disse:

    Oi muito obrigado pelo exemplo… acredita por não colocar ‘=’
    na linha que diz
    ‘if (comeco<final) then ' tava dando eerado a maioria das pesquisas.. valeu…

  2. Yane disse:

    putz
    brigadão. Era o que eu precisava pra sanar as minhas dúvidas. =*

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Close Search Window