Página 1 de 1

Hallar mayor y menor dentro de un array

NotaPublicado: 2014-06-19 07:33 @356
por Persefone
Hola, el programa debería ser capaz de sacar el valor menor y mayor de un array y de un grupo de números. No tengo claro cómo hacer correctamente el paso del for(). Agradecería mucho una ayuda, por favor.
Gracias :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $ga->( [ [ 100, 200 ], [ 100, 200 ], [ 4, 14 ], [ 8, 14 ] ] );
  2.  
  3. my $genes = $_[0];
  4.  
  5. my $x1 = $genes->[0] / 10;
  6. my $x2 = $genes->[1] / 10;
  7. my $x3 = $genes->[2];
  8. my $x4 = $genes->[3];
  9.  
  10. @variables = ( $x1, $x2, $x3, $x4 );
  11.  
  12. my $mayor = 0;
  13. my $n     = 68;
  14. for ( $i = 0; $i <= 3; $i++ ) {
  15.     if ( $variables[0] + $variables[1] + $variables[2] + $variables[3] == 68 ) {
  16.         $mayor = $n;
  17.     }
  18. }
  19.  
  20. my $menor = 0;
  21. $m = 36;
  22. for ( $i = 0; $i <= 3; $i++ ) {
  23.     if ( $variables[0] + $variables[1] + $variables[2] + $variables[3] == 36 ) {
  24.         $menor = $m;
  25.     }
  26. }
  27.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Re: Hallar mayor y menor dentro de un array

NotaPublicado: 2014-06-19 14:28 @644
por explorer
Bienvenida a los foros de Perl en Español, Persefone.

Si queremos buscar el máximo y mínimo de @variables:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $mayor = -1e20;      # -1·10^20
  2. my $menor = +1e20;      #  1·10^20
  3.  
  4. for my $valor (@variables) {
  5.  
  6.     if ($mayor < $valor) {      # $valor es mayor que el $mayor encontrado
  7.         $mayor = $valor;        # hasta ahora
  8.     }
  9.     if ($menor > $valor) {      # $valor es menor que el $menor encontrado
  10.         $menor = $valor;        # hasta ahora
  11.     }
  12. }
  13. say "Mayor: $mayor. Menor: $menor";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Hallar mayor y menor dentro de un array

NotaPublicado: 2014-08-31 15:35 @691
por Pichuzard
Yo, la verdad, prefiero inicializar los valores de mayor y menor a algún valor del arreglo ya que de la forma que propone explorer si todos los elementos están por debajo del valor que se le asigna a $mayor entonces tendremos un error ya que el valor mayor será el asignado a la variable $mayor aunque no exista en el arreglo. Algo análogo ocurre cuando todos los valores están sobre el valor asignado a la variable $menor.

Mi propuesta es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $mayor = $array[0];
  2. my $menor = $mayor;
  3.  
  4. foreach(@array){
  5.         $mayor=$_ if $_>$mayor;
  6.         $menor=$_ if $_<$menor;
  7. }
  8. print "Mayor: $mayor\nMenor: $menor\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Donde @array es un array unidimensional que guarda los valores numéricos donde buscar.

Lo que sí te puedo asegurar es que lo que estás haciendo en tu código no es encontrar el menor y el mayor.

Re: Hallar mayor y menor dentro de un array

NotaPublicado: 2014-08-31 18:36 @816
por explorer
Es una muy buena idea, pero la idea era mostrar eso: la idea. Depende después de cada caso particular.

Por ejemplo, tanto mi propuesta como la tuya no tiene en cuenta los casos extremos, como por ejemplo, que el array esté vacío.

Entonces, se trata de entender lo básico, y luego adaptarlo a cada caso.

Pero tu solución me gusta. Me la anoto.