Buenas estoy haciendo un ejercicio de la univesidad,y lo cierto es que me he quedado atrancado,no se como seguir espero que me podais ayudar,ahi va:
Lo que hay que hacer es un script en php que rellene un vector de50 numeros aleatorios entre -10 y 30. y que encuentre el numero y la posicion del vector mas cercano a la media de todos los numeros introducidos.
<?php
$media=0;
$suma=0;
for($i=1;$i<=50;$i++){
$array[$i]=rand(-10,30);
$suma=$suma+$array[$i];
}
$media=$suma/50;
for($i=1;$i<=50;$i++){
$resta=$media-$array[$i];
}
?>
No se como seguir a partir del ultimo for,mi intencion era comparar todas las restas y que me devuelva la mas pequeña(es decir la mas cercana al 0) con el $array[$i] correspondiente de la resta,pero no se como plasmarlo en la pantalla y llevo un buen rato mirandola como un tonto jaja
Si pudieseis ayudarme os lo agradeceria,un saludo
Hola,
No ibas tan mal.
La idea es:
De cada valor, restale la media, el resultado de la resta más cercano a 0 es el valor que más se acerca a la media.
Hay varias formas de hacerlo, yo he utilizado dos arrays (el original relleno de valores aleatorios, y otro con los resultados de la resta).
Esta comentado, si algo no entiendes comentalo.
<?php
$media = 0;
$suma = 0;
$array = array();
$max = 10;
function diferencias($media, $array){
$array_de_restas = array();
foreach($array as $pos=>$valor){
if ($valor > $media){
//el valor es superior a la media
$array_de_restas[$pos] = ($valor - $media);
} else if ( $valor < $media ){
//la media es más grande que el valor
$array_de_restas[$pos] = ( $media - $valor);
} else {
// son iguales. Podrias salir aqui con el resultado
// pero lo haremos bien
$array_de_restas[$pos] = 0;
}
}
return $array_de_restas;
}
// Rellenamos el array
for($i=1;$i<=$max;$i++){
$array[$i] = rand(-10,30);
$suma = $suma+$array[$i];
}
$media = $suma / 50;
echo "[*] Valores: ";
foreach ($array as $a){
echo $a." ";
}
echo "\n";
echo "[*] Media = $media\n";
$arrRestas = diferencias($media, $array);
// ordenamos el resultados de las restas de menor a mayor
// el primero es el resultado de la resta, es decir, el más cerca de 0
// es decir, es el resultado que buscamos
asort($arrRestas);
// en la funcion diferencias guardo la posicion del array original como indice
// y como valor el resultado de la resta.
// extraemos la posicion
$posicion = array_slice(array_keys($arrRestas), 0, 1);
$p = $posicion[0];
echo "[*] Valor mas cercano => $array[$p]\n";
?>
Resultado:
[*] Valores: -9 3 28 7 20 29 24 7 -2 30
[*] Media = 2.74
[*] Valor mas cercano => 3
PD: modifica la variable $max para tus 50 valores.
Salu2
Supongo que apenas está empezando y ya vos metiendole funciones y foreach ajajhahajajajjajajajaja
Hola Shell Root,
CitarEsta comentado, si algo no entiendes comentalo.
Salu2
Cita de: Shell Root en 25 Enero 2013, 15:13 PM
Supongo que apenas está empezando y ya vos metiendole funciones y foreach ajajhahajajajjajajajaja
no hay que tener piedad con los noveles! es la manera mas tonta de realentizar su aprendizaje.
está bien que le peguen caña!
y como bien dicen, si no comprende algo, debe preguntarlo.
salu2
Gracias RevangelyonX,he entendido todo el codigo (se agradecen los comentarios) lo unico ha sido las funciones del array_slice y array_keys pero bueno para eso esta el manual de PHP ;).
PD:si,estoy empezando jaja.
Cita de: ismaelmagno en 25 Enero 2013, 18:01 PM
Gracias RevangelyonX,he entendido todo el codigo (se agradecen los comentarios) lo unico ha sido las funciones del array_slice y array_keys pero bueno para eso esta el manual de PHP ;).
PD:si,estoy empezando jaja.
ESA es la actitud, muchacho! eso es lo que diferencia a un constructor, a un resolvedor de problemas... de un quejica.
mas como tú, necesitamos! que te lo pases bien aprendiendo :)