Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Fallo en mostrar n pares de array

Estas en el tema de Fallo en mostrar n pares de array en el foro de PHP en Foros del Web. Hola a toda la comunidad!. Bueno posteo la pregunta del ejercicio que estoy realizando: Cita: 2.-) Se considera un array tab como el siguiente: 4, ...
  #1 (permalink)  
Antiguo 20/12/2013, 10:01
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Pregunta Fallo en mostrar n pares de array

Hola a toda la comunidad!.

Bueno posteo la pregunta del ejercicio que estoy realizando:

Cita:
2.-) Se considera un array tab como el siguiente: 4, -5, 5, 7, 1,-8 , 9, -10, 4, 15
Guardar en un array tabPar aquellos valores de tab que sean pares y en un
array tabImpar aquellos valores impares.
Visualizar ambos arrays: tabPar y tabImpar.
La solución que hice es esta.

Código PHP:
Ver original
  1. //Variables
  2. $tab = array( 4, -5, 5, 7, 1, -8, 9, -10, 4, 15);
  3.  
  4. $tabPar = array();
  5. $tabImpar = array();
  6.   //funcion para saber si es par o impar y sumarlo en el array vacío.
  7.     function solucion2 ($tab, &$tabPar, &$tabImpar) {
  8.              
  9.                 for ($i=0; $i <= count($tab); $i++) {
  10.                  
  11.                     if ($tab[$i] % 2 == 0 ) {
  12.                      
  13.                         $tabPar[] += $tab[$i] ;      
  14.                     }
  15.                     else {
  16.                      
  17.                         $tabImpar[] += $tab[$i];  
  18.                     }
  19.                 }
  20.         //La funcion devuelve los pares e Impares del array.
  21.         for ($i=0; $i <= count($tabPar); $i++) {
  22.             echo "Par : ";
  23.             echo $tabPar[$i] . "<br/>";
  24.             echo " Impares : ";
  25.             echo $tabImpar[$i] . "<br/>";
  26.         }
  27.     }
  28.  
  29. //Llamar la funcion
  30. solucion2 ($tab, $tabPar, $tabImpar);

Funciona solo que me devuelve 2 números PARES de más en la solución.

Si se fijan cuando ejecuto el código.

Como puedo quitar este fallo ???? Gracias a todos.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 20/12/2013, 10:15
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Fallo en mostrar n pares de array

Código PHP:
Ver original
  1. <?php
  2. //Variables
  3. $tab = array( 4, -5, 5, 7, 1, -8, 9, -10, 4, 15);
  4. $tabPar = array();
  5. $tabImpar = array();
  6. //funcion para saber si es par o impar y sumarlo en el array vacío.
  7. function solucion2 ($tab, &$tabPar, &$tabImpar) {
  8.     for ($i=0; $i < count($tab); $i++) {
  9.         if ($tab[$i] % 2 == 0 ) {
  10.             $tabPar[] = $tab[$i] ;      
  11.         } else {
  12.             $tabImpar[] = $tab[$i];  
  13.         }
  14.     }
  15.     //La funcion devuelve los pares e Impares del array.
  16.     $numTabPar = count($tabPar);
  17.     echo "Par : <br>";
  18.     for ($i=0; $i < $numTabPar; $i++) {
  19.         echo $tabPar[$i] . "<br/>";
  20.     }
  21.    
  22.     $numTabImpar = count($tabImpar);
  23.     echo " Impares : <br>";
  24.     for ($i=0; $i < $numTabImpar; $i++) {
  25.         echo $tabImpar[$i] . "<br/>";
  26.     }
  27. }
  28. //Llamar la funcion
  29. solucion2 ($tab, $tabPar, $tabImpar); ?>

Tienes varios problemillas:

Cuando usas for para trabajar con arrays el limite debe ser menor a la cantidad de elementos del array, no menor o igual

Código PHP:
Ver original
  1. for ($i=0; $i <= count($tab); $i++) {

Por

Código PHP:
Ver original
  1. for ($i=0; $i <= count($tab); $i++) {

Segundo es recomendable que trabajes con arrays separados para saber el contenido de cada uno de ellos ya que pueden tener diferentes longitudes.

Tercero es una pequeña optimización, cuando trabajes con for no coloques un count dentro de este ya que siempre se ejecutará con cada llamada que se haga al for

Edito: Hay un caso adicional. Usaste += para asignar un nuevo valor al array, esto es incorrecto ya que += se usa para sumar valores. En este caso debes de usar = que es para asignación.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 20/12/2013, 16:34
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Fallo en mostrar n pares de array

Cita:
Iniciado por jonni09lo Ver Mensaje
Tienes varios problemillas:

Cuando usas for para trabajar con arrays el limite debe ser menor a la cantidad de elementos del array, no menor o igual

Código PHP:
Ver original
  1. for ($i=0; $i <= count($tab); $i++) {

Por
AQUI CREO QUE Querías decir < no <= de nuevo. :)
Código PHP:
Ver original
  1. for ($i=0; $i < count($tab); $i++) {

Segundo es recomendable que trabajes con arrays separados para saber el contenido de cada uno de ellos ya que pueden tener diferentes longitudes.

Tercero es una pequeña optimización, cuando trabajes con for no coloques un count dentro de este ya que siempre se ejecutará con cada llamada que se haga al for

Edito: Hay un caso adicional. Usaste += para asignar un nuevo valor al array, esto es incorrecto ya que += se usa para sumar valores. En este caso debes de usar = que es para asignación.

Saludos
Gracias por tus consejos y por tu ayuda.
Una pregunta que tengo con respecto a lo que me has dicho de no usar count dentro del for( )..
No es igual el poner $i < $numTabPar como aquí
Código PHP:
Ver original
  1. $numTabPar = count($tabPar);
  2.        
  3.         for ($i=0; $i < $numTabPar; $i++) {
Que poner el count dentro??

Se que en una es $i < (variable con el count($tabPar) , pero que diferencia tiene esto o en que puede ayudar, entiendo que has dicho que es para que no se repita el count cada vez en el for, pero no lo haría también de esa forma, ya que la Variable tiene un count($tabPar) dentro????

Saludos y muchas gracias , tendré más en cuenta el < y no el <= en los próximos ejercicios con arrays y con bucles for
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #4 (permalink)  
Antiguo 20/12/2013, 16:44
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Fallo en mostrar n pares de array

Hola, si tenias razón un error de typo

Bueno lo que quiero decirte es que si el ciclo for se repite 500 veces, al tener el count() dentro de la declaración del for, se repetirá 500 veces. Pero si lo tienes por fuera solo se ejecura una sola vez el count().

Código PHP:
Ver original
  1. //Ejemplo A
  2. $numMax = count($data) //retorna 500 por ejemplo
  3.  
  4. for($i=0; $i < $numMax; $i++){
  5.     //operaciones
  6. }
  7.  
  8. //Ejemplo B
  9. for($i=0; $i < count($data); $i++){ //Php no sabe cuanto vale count($data) así que ejecutará siempre el count para saber cuando llega al limite
  10.     //operaciones
  11. }

Espero sea mas claro

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 20/12/2013, 16:47
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Fallo en mostrar n pares de array

Gracias por tomarte el tiempo en aclarar mi duda, ahora lo entiendo mucho mejor, estos fallos son cosas que mi maestro en clases ni nos explica la verdad, y dudo que si se lo preguntará a él nos diera una respuesta clara.

Gracias de nuevo! Tema Solucionado.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Etiquetas: arrays, vacios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:07.