PHP - VARIABLES NO DEFINIDAS

 
Vista:

VARIABLES NO DEFINIDAS

Publicado por SILVIA (80 intervenciones) el 16/05/2015 13:05:25
Estoy intentando hacer una función que me separe los números de un vector, en otros dos vectores, en uno los números pares y en otro los impares, pero me dice variables no definidas. Es urgente. Gracias de antemano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function pares_impares($vector){
$pares=array(); // Le decimos a PHP que $pares es un array
$impares=array(); // Le decimos a PHP que $impares es un array
$vector=array(); // Le decimos a PHP que $vector es un array
// Llenará un vector de posiciones aleatorios con números aleatorios
for ($i=0; $i<=5; $i++){ // Vamos generando posiciones del vector desde 0 hasta un rand de 1 a 50
$vector[$i]=rand(1,20); // Creamos una nueva caja de posición $i con un valor aleatorio entre 1 y 60
}
return $vector;
// Recorremos el array y si el valor de la posición es par lo almacenamos en el vector pares y si es impar en el vector impares
for($i=0; $i<count($vector); $i++){ // Recorremos el vector desde 0 hasta el final del vector
if ($vector[$i]%2==0){ // Si el contenido de la posición $i de $vector es par
return $pares;
}else{
return $impares;
}
}
}
echo "Vector original";
print_r($vector);
echo "Vector pares";
print_r($pares);
echo "Vector impares";
print_r($impares);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

VARIABLES NO DEFINIDAS

Publicado por Maxi (13 intervenciones) el 16/05/2015 16:06:10
Tu principal problema es que tienes encapsuladas las funciones que creación del array aleatorio y la de separación en número pares e impares en una misma función. Mi recomendación es separarlas en dos. Aquí el código de ejemplo con los comentarios:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 //esta función no debería recibir ningún parámetro, la creación del array sucede dentro 
function vector_aleatorio () {de la función por lo que no necesita de un array externo
    $vector = array(); //Le decimos a PHP que $vector es un array
    for ($i = 0; $i <= 5; $i++) {
        $vector[$i] = rand(1, 20);
    }
    return $vector;
}
 
//esta función toma como parámetro un array y lo separa en números pares e impares
function pares_impares ($vector) {
    $pares = $impares = array(); //Le decimos a PHP que $pares e $impares son un array
    for ($i = 0; $i < count($vector); $i++) {
        if ($vector[$i] % 2 == 0) {
            //return $pares; ESTO ESTABA MAL, al hacer un return detenes la ejecución del bucle y la función nunca termina de recorrer todo el array
            $pares[] = $vector[$i]; //si vector[$i] es par, lo almaceno dentro del vector de número impares
        } else {
            $impares[] = $vector[$i]; //si vector[$i] es impar, lo almaceno dentro del vector de números impares
            //return $impares; ESTO ESTABA MAL, por lo mismo que se explicó antes
        }
    }
    //especial antención con esto:
    //las funciones sólo puden devolver un único resultado, pero nosotros ahora tenemos dos arrays
    //uno de números pares y otro de números impares
    //la solución más común para esto es devolver un array que contenga ambos array
    //si estás estudiando y esto es parte de un ejercicio te recomiendo que lo uses
    //sólo si ya vieron array asociativos. Si ese no es el caso otro solución
    //sería implementar la función pares e impares por separado en donde cada una
    //de ellas devuelva un único array
    return array(
        'pares' => $pares,
        'impares' => $impares
    );
}
 
echo "Vector original:<br />";
//print_r($vector); ESTO ESTABA MAL, todavia no definiste la variable $vector
$vector = vector_aleatorio(); //lleno mi variable $vector con lo que devuelve la funcion vector_aleatoero
print_r($vector);
 
$vectorSeparado = pares_impares($vector); //lleno la variable $vectorSeparado con el resultado de la funcion pares_impares
echo "<br /><br />Vector pares:<br />";
print_r($vectorSeparado['pares']);
echo "<br /><br />Vector impares:<br />";
print_r($vectorSeparado['impares']);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

VARIABLES NO DEFINIDAS

Publicado por Silvia (80 intervenciones) el 16/05/2015 23:55:44
Una pregunta ¿Porque has puesto return array ($vector, $pares, $impares)? En lugar de ponerlo así todo junto ¿Podemos poner por separado return $vector, return $pares y return $impares? Si se puede ¿Donde y como lo pongo? ¿Qué es eso de list? ¿Puedo hacer el ejercicio sin utilizarlo?

Gracias de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

VARIABLES NO DEFINIDAS

Publicado por xve (6935 intervenciones) el 17/05/2015 09:20:04
Solo puedes poner un return!!!

En el momento que el código encuentra esa instrucción, ya no continua con la siguiente instrucción.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

VARIABLES NO DEFINIDAS

Publicado por Silvia (80 intervenciones) el 18/05/2015 22:24:53
El siguiente ejercicio me da un error en la línea donde esta el return $suma_capicua; me dice variable indefinida.

echo "Consideremos el siguiente algoritmo: Dado un número, lo sumamos a su reverso. Si esta suma es un capícua, entonces paramos; y si no, repetimos el proceso con el número obtenido de la suma, hasta dar con un capícua. Una curiosa conjetura de teoria de números afirma que, partiendo de cualquier número el algortimo anterior para, y por lo tanto nos lleva a un palindromo. Escribid un programa que lleve a término el algoritmo descrito por la conjetura para encontrar un capícua a partir de un número. Nota: Una conjetura es una hipótesis no demostrada ni refutada. En este caso, el método en general acaba, pero hay algunos números que no se sabe que pasa: por ejemplo, con el 196 se han realizado centenares de iteraciones pero no se ha conseguido llegar a un capicúa. Por tanto, el número de iteraciones se ha de limitar para así evitar los desbordamientos y asegurar que el programa acaba. Limitadlo a 15 iteraciones.<br><br>";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function numeroalreves($numero){
  $invertido=array();
  $numeroalreves="";
  while($numero>1){
    $invertido[]=$numero%10;
    $numero/=10;
  }
 
  foreach ($invertido as $valor){
    $numeroalreves=$numeroalreves.$valor;
  }
  return $numeroalreves;
}
    function suma_capicua($numero, $alreves){
        $suma_capicua=0;
        $numero=232;
        $alreves=232;
        }
        return $suma_capicua;
    if ($suma_capicua!=$suma_capicua){
        return false;
        if($suma_capicua==15){
        break;
        }
        }
    // Inicio del código
    $numero=522;
$alreves=numeroalreves($numero);
echo "El número a invertir es: $numero";
echo "<br> <br>";
echo "El número invertido es: $alreves";
    $suma_capicua=suma_capicua($suma_capicua+$numero+$alreves);
    echo "La suma es: $suma_capicua un número capicua";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar