Ver Mensaje Individual
  #15 (permalink)  
Antiguo 01/05/2014, 12:33
zyxer
 
Fecha de Ingreso: abril-2014
Mensajes: 72
Antigüedad: 10 años, 1 mes
Puntos: 5
Respuesta: 2 ejercicios PHP

Yo no lo he resuelto con FOREACH, sino con WHILE (aunque puede que el FOREACH sea el más adecuado), la verdad es que me tengo que poner a trabajar en otro asunto, así que te dejo mi código para que (si no llegas a tener una idea clara de como hacerlo) lo revises y te hagas una idea (pero no le hagas hasta que llegues al borde de la desesperación XD):
Código PHP:
Ver original
  1. <?php
  2.  
  3.     function crearVector($tamano=10, $min=1, $max=100){
  4.        
  5.         $vector=array();
  6.         $i=0;
  7.        
  8.         while($i<$tamano){
  9.             $vector[$i]= mt_rand($min, $max);
  10.             $i++;
  11.         }
  12.        
  13.         return $vector;
  14.        
  15.     }
  16.  
  17.     function elementoMayor($vector=''){
  18.    
  19.         $mayor='';  
  20.         $i=0;  
  21.         $numElementos=count($vector);
  22.        
  23.         while($i<$numElementos){
  24.             if($mayor<$vector[$i]){
  25.                 $mayor=$vector[$i];
  26.                 $mayorId = $i;
  27.             }
  28.             $i++;
  29.         }
  30.        
  31.         if($mayor != ''){
  32.             return $mayorId;
  33.         }else{
  34.             return 'Error';
  35.         }
  36.    
  37.     }
  38.    
  39.     function mostrarMayores($vector='', $n=3){
  40.    
  41.         $return = '';
  42.    
  43.         while($n>0){
  44.             $mayor = elementoMayor($vector);
  45.             $return.= '- El elemento <b>'.$mayor.'</b>, que tiene valor igual a <b>'.$vector[$mayor].'</b><br>';
  46.             unset($vector[$mayor]);
  47.             $n--;
  48.         }
  49.        
  50.         if($return != ''){
  51.             return $return;
  52.         }else{
  53.             return 'Error';
  54.         }
  55.        
  56.     }
  57.    
  58.    
  59.     // Se ejecuta asi:
  60.     $vector = crearVector();
  61.     echo '<b>Para el vector:</b> '; print_r($vector);
  62.     echo '<br><br>';
  63.     echo 'Los elementos de mayor valor (en orden) son:<br>';
  64.     echo mostrarMayores($vector);
  65.    
  66.    
  67.     echo '<br><br><br>';
  68.    
  69.    
  70.     // Otra posible ejecución es esta:
  71.     $vector = crearVector(5, 1, 999); // Es esta se cambia la configura por defecto del array
  72.     echo '<b>Para el vector:</b> '; print_r($vector);
  73.     echo '<br><br>';
  74.     echo 'Los elementos de mayor valor (en orden) son:<br>';
  75.     echo mostrarMayores($vector, 2); // Aquí estoy pidiendo que solo me muestre los 2 primeros
  76.    
  77. ?>

Esto generaría un resultados, más o menos así:
Cita:
Para el vector: Array ( [0] => 56 [1] => 37 [2] => 39 [3] => 54 [4] => 9 [5] => 78 [6] => 77 [7] => 70 [8] => 57 [9] => 58 )

Los elementos de mayor valor (en orden) son:
- El elemento 5, que tiene valor igual a 78
- El elemento 6, que tiene valor igual a 77
- El elemento 7, que tiene valor igual a 70



Para el vector: Array ( [0] => 420 [1] => 753 [2] => 347 [3] => 833 [4] => 986 )

Los elementos de mayor valor (en orden) son:
- El elemento 4, que tiene valor igual a 986
- El elemento 3, que tiene valor igual a 833