Me he quedado atrancado

Iniciado por ismaelmagno, 25 Enero 2013, 09:40 AM

0 Miembros y 1 Visitante están viendo este tema.

ismaelmagno

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

RevangelyonX

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), 01);
$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
Just Linux
OSCP certified

Shell Root

Supongo que apenas está empezando y ya vos metiendole funciones y foreach ajajhahajajajjajajajaja
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

RevangelyonX

Hola Shell Root,

CitarEsta comentado, si algo no entiendes comentalo.

Salu2
Just Linux
OSCP certified

alister

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
Back 2 business!

ismaelmagno

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.

alister

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 :)
Back 2 business!