Enunciado
Sea un vector de n elementos únicos. Se quiere buscar un elemento k dado y conocer la posición en donde se encuentra, es decir, el índice correspondiente. En el caso de no hallarse el elemento en el vector, el procedimiento devuelve como posición un valor clave, no perteneciente al rango de valores de índices válidos y que sea interpretado como señal de dato no hallado.
El algoritmo de búsqueda secuencial recorre el vector desde la primera posición y compara cada elemento con el valor buscado k, mientras no lo encuentra ( v[ p ]<>k ) y el índice no va más allá del último elemento ( p<=n ) sigue el recorrido ( p = p + 1 ).
Apenas encuentre el valor sale del ciclo de iteración, es decir, interrumpe el recorrido y en parámetro variable p queda el valor del índice correspondiente al elemento hallado.
Si el elemento buscado no se encuentra en el vector este método implica recorrer todo el vector para detectar tal situación, en este caso p supera a n y a la salida del ciclo se asigna al parámetro variable p el valor señal.
Código
Python
def Sequential ( v, k ):
n = len( v )
p = 0
while p < n and v[p] != k:
p += 1
if p == n:
p = -1
return p
def main ():
n = 5
v1 = []
print( "Ingresar 5 numeros/Enter 5 numbers: " )
for i in range( n ):
v1.append( int( input( ) ) )
print()
while True:
print( "Ingresar numero a buscar/", end="" )
print( "Enter number to search: " )
num = int( input( ) )
p = Sequential( v1, num )
if p!=-1:
print( "\nIndice/Index: ",
p, "\n" )
else:
print( "\nNumero inexistente/", end="" )
print( "Non-existent number\n" )
print()
print( "Presione S para salir, cualquier ",
end="" )
print( "tecla para nueva consulta" )
print( "Press S to exit, any key ", end="" )
print( "to new query\n" )
r = input( ).upper()
if r=="S": break
main()
C++
#include <iostream>
#include <iomanip>
using namespace std ;
#include <conio.h>
void Sequential( int n, float v[ ], float k, int* p )
{
*p = 0 ;
while ( *p < n && v [ *p ] != k )
*p = *p + 1 ;
if ( *p == n ) *p = -1 ;
}
int main()
{
int i, p, n=5 ;
float v1[20], num ;
cout << "Ingresar 5 numeros/Enter 5 numbers: "
<< endl ;
for (i=0; i<n; i++)
cin >> v1[i] ;
cout << endl ;
do
{
cout << "Ingresar numero a buscar/" ;
cout << "Enter number to search: " ;
cin >> num ;
Sequential( n, v1, num, &p ) ;
if ( p!=-1 )
cout << endl << "Posicion/Position: "
<< p+1 << endl ;
else
{
cout << endl << "Numero inexistente/" ;
cout << "Non-existent number" << endl ;
}
cout << endl ;
cout << "Presione ESC para salir, cualquier " ;
cout << "tecla para nueva consulta" << endl ;
cout << "Press ESC to exit, " ;
cout << "any key to new query" ;
cout << endl ;
} while( getch() != char (27) ) ;
return 0 ;
}
Pascal
Program Problema03 ;
uses CRT ;
const
n = 5 ;
type
dim = 0..12 ;
vector = array [dim] of integer ;
element = integer ;
var
v1: vector ;
num: element ;
p, i: dim ;
Procedure Sequential( n:dim; var v:vector;
k:element; var p:dim ) ;
begin
p := 1 ;
while ( p <= n ) and ( v[p] <> k ) do
p := p + 1 ;
if p>n then p:=0 ;
end ;
begin
ClrScr ;
writeln( 'Ingresar 5 numeros/Enter 5 numbers: ' ) ;
for i:=1 to n do
begin
readln( v1[i]) ;
end ;
writeln ;
repeat
write( 'Ingresar numero a buscar/' ) ;
write( 'Enter number to search: ' ) ;
readln(num) ;
writeln ;
Sequential( n, v1, num, p ) ;
if p<>0
then
writeln( 'Posicion/Position: ', p )
else
begin
write( 'Numero inexistente/' ) ;
writeln( 'Non-existent number' ) ;
end ;
writeln ;
write( 'Presione ESC para salir, ' ) ;
write( 'cualquier tecla para ' ) ;
writeln( 'nueva consulta' ) ;
write( 'Press ESC to exit, ' ) ;
writeln( 'any key to new query' ) ;
writeln ;
until readkey=#27 ;
end.
Diagramas


