Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: ismaelmagno en 25 Enero 2013, 09:40 am



Título: Me he quedado atrancado
Publicado por: ismaelmagno en 25 Enero 2013, 09:40 am
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.

Código:
<?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


Título: Re: Me he quedado atrancado
Publicado por: RevangelyonX en 25 Enero 2013, 15:08 pm
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.

Código:
<?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:


Código:
[*] 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


Título: Re: Me he quedado atrancado
Publicado por: Shell Root en 25 Enero 2013, 15:13 pm
Supongo que apenas está empezando y ya vos metiendole funciones y foreach ajajhahajajajjajajajaja


Título: Re: Me he quedado atrancado
Publicado por: RevangelyonX en 25 Enero 2013, 15:25 pm
Hola Shell Root,

Citar
Esta comentado, si algo no entiendes comentalo.

Salu2


Título: Re: Me he quedado atrancado
Publicado por: alister en 25 Enero 2013, 17:24 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


Título: Re: Me he quedado atrancado
Publicado por: 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.


Título: Re: Me he quedado atrancado
Publicado por: alister en 25 Enero 2013, 18:03 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 :)