Búsqueda – Máximo/Mínimo

Enunciado

La función Max1 devuelve el valor máximo de los elementos del vector. El algoritmo se basa en suponer que el máximo valor es el que está en la primera posición y luego comparar los elementos de la segunda a la última posición actualizando el máximo cada vez que se encuentra un elemento mayor.

La función Max2 devuelve la posición del elemento máximo del vector.

El procedimiento Max3 devuelve el valor máximo de los elementos de un vector (max), la cantidad de veces que este valor aparece en el vector (c) y las posiciones en donde se encuentra (pos). Dado que el máximo puede aparecer en el vector entre 1 y a lo sumo n veces, pos debe ser un vector.

Para buscar un valor mínimo, los algoritmos son idénticos salvo que, en lugar de averiguar si el elemento del vector es mayor a la variable auxiliar (max), preguntaríamos si es menor a esa variable auxiliar, que en este caso la llamaríamos min.

Código

Python

Video: Búsqueda del Máximo / Mínimo

def Max1( v ):
    max = v[0]
    for i in range( len( v ) ):
        if max < v[i]:
            max = v[i]
    return max

def Max2( v ):
    p = 0
    for i in range( len( v ) ):
        if v[p] < v[i]:
            p = i
    return p

def Max3( v ):
    c = 0 
    p = [] 
    for i in range ( 0, len( v ) ): 
        if v[i]>v[c]:      
            p = [] 
            c = i   
            p.append(i) 
        elif v[i]==v[c]:
            p.append(i)      
    return p
    
def main():
    
    print( "Ingresar/Enter vector ", end="" )
    print( "(5 elementos/elements): " )
    v=[]
    for i in range( 5 ):
        v.append( int( input() ))

    print( "\nMayor elemento/Largest element: ", 
           Max1( v ) )

    p = Max2( v )
    print( "\nMayor elemento/Largest element: ",
           v[p], "\nPosicion/Position: ", p+1 )

    vp = Max3( v )
    print( "\nMayor elemento/Largest element: ",
           v[vp[0]], "\nPosicion/Position:" )

    for i in range( len( vp )):
        print( vp[i]+1 )
        
    input( "Presionar/Press Enter to exit " )
main()

C++

#include <iostream>
#include <iomanip>
using namespace std ;
#include <conio.h>

float Max1 ( float v[ ], int n )
{
   int i ; float max ;

   max = v[ 0 ] ;
   for ( i = 1 ; i < n ; i++ )
   	if ( max < v[ i ] )
      	   max = v[ i ] ;
   return max ;
}

void Max2 ( float v[ ] , int n , int* p )
{
   int i ;

   *p = 0 ;
   for ( i = 1 ; i < n ; i++ )
   	if ( v[ *p ] < v[ i ] )
      	   *p = i  ;
}

void Max3 ( float v[ ] , int n , 
            float* max , int p[ ] , int* c )
{
   int i ;

   *max = v[ 0 ] ;
   *c = 0 ;
   p[ *c ] = 0 ;
   for ( i = 1 ; i < n ; i++ )
   	if ( *max < v[ i ] )
      	{
      	    *max = v[ i ] ;
            *c = 0 ;
            p[ *c ] = i ;
      	}
      	else 
	    if ( *max == v[ i ] )
            {
           	*c = *c + 1 ; 
                p[ *c ] = i ;
            }
   *c = *c + 1 ;
}

int main ()
{
   int  i, p, n, vp[10] ;
   float v1[10], elem ;
	
   cout << "Ingresar/Enter vector " ;
   cout << "(5 elementos/elements): " << endl ;
   for ( i=0; i<5; i++ )
	cin >> v1[i] ;

   cout << endl << "Mayor elemento/Largest element: " 
	<< Max1( v1, 5 ) << endl << endl ;

   Max2( v1, 5, &p ) ;
   cout << endl << "Mayor elemento/Largest element: "
	<< v1[p] << endl << "Posicion/Position: " 
        << p+1 << endl << endl ;

   Max3( v1, 5, &elem, vp, &n ) ;
   cout << endl << "Mayor elemento/Largest element: " 
	<< elem << endl << "Posicion/Position: " ;

   for ( i=0; i<n; i++ )
	cout << endl << setw(10) << vp[i]+1 ;
	
   cout << endl ;
   cout << "Presionar/Press Enter to exit " ;	
   getch() ;
   return 0 ;
}

Pascal

program EjemploVector ;
uses crt ;
type
    rango  = 0..20 ;
    vecInt = array [rango] of integer ;
    vecRan = array [rango] of rango ;
    vecStr = array [rango] of string[30] ;
var
    v1: vecInt ;
    vp: vecRan ;
    p, n, i: rango ;
    elem: integer ;

Procedure CargarVector( n: rango; var v: vecInt ) ;
var
    i: rango ;
begin
     for i:=1 to n do
     begin
          write( 'Ingresar elemento ', i, ': ' ) ;
          readln( v[i] ) ;
     end;
end;

Procedure MostrarVector( n: rango; var v: vecInt ) ;
var
    i: rango ;
begin
     for i:=1 to n do
     begin
         writeln(i:10,v[i]:14) ;
     end ;
end ;

Procedure Max1( n: rango; var v: vecInt;
                var max: integer ) ;
var
    i: rango ;
begin
     max := v[1] ;
     for i:=2 to n do
         if v[i]>max
         then
         begin
              max := v[i] ;
         end ;
end ;

Procedure Max2( n: rango; var v: vecInt;
                var p: rango ) ;
var
   i: rango ;
begin
     p := 1 ;
     for i:=2 to n do
         if v[i]>v[p]
         then
         begin
              p := i ;
         end ;
end ;

Procedure Max3( n: rango; var v: vecInt;
                var max: integer; var p: vecRan; 
                var c: rango ) ;
var
   i: rango ;
begin
     c := 1 ;
     max := v[c] ;
     p[c] := c ;
     for i:=2 to n do
         if v[i]>max
         then
         begin
              max := v[i] ;
              c := 1 ;
              p[c] := i ;
         end
         else if v[i]=max
              then
              begin
                   c := c+1 ;
                   p[c] := i ;
              end;
end;

begin
     ClrScr;
     write( 'Ingresar/Enter vector ' ) ;
     writeln( '(5 elementos/elements): ' ) ;
     CargarVector( 5, v1 ) ;

     writeln ;
     writeln( 'Vector' ) ;
     MostrarVector( 5, v1 ) ;
     readkey ;
     
     Max1( 5, v1, elem ) ;
     writeln ;
     writeln( 'Mayor elemento/Largest element: ', 
               elem ) ;
     readkey ;
     
     Max2( 5, v1, p ) ;
     writeln ;
     writeln( 'Posicion/Position: ', p ) ;
     readkey ;

     Max3( 5, v1, elem, vp, n ) ;
     writeln ;
     writeln( 'Mayor elemento/Largest element: ', 
               elem ) ;
     writeln( 'Posicion/Position: ' ) ;
     For i:=1 to n do
     begin
          writeln( vp[i]:18 ) ;
     end ;
     
     writeln ;
     writeln( 'Presionar/Press Enter to exit ' ) ;
     readkey ;
end.

Diagramas

Subprogramas