Ejemplo 8: Bucle Par/Impar

Operador módulo y procesamiento condicional en bucles

Descargar archivo bucle

🎯 Demo en Vivo

Análisis de Números (0-50)

🔵
26
Números Pares
51%
🔴
25
Números Impares
49%
🧮
625
Suma Impares
Promedio: 25

📋 Últimos Pares:

36, 38, 40, 42, 44, 46, 48, 50

📋 Últimos Impares:

35, 37, 39, 41, 43, 45, 47, 49

¡Cambia el límite del análisis!

Analizaremos números del 0 hasta este límite

Límites rápidos:

🔢 Cálculo en Tiempo Real:

📖 Explicación del Código

Código PHP Completo

<?php
$numero = 50;
$suma = 0;

for ($i = 0; $i <= $numero; $i++) {
    if ($i % 2 == 0) {
        print($i);
    } else {
        $suma += $i;
    }
}

print("La suma total de impares es: $suma");
?>

📝 Líneas 1-2: Variables iniciales

$numero = 50;
$suma = 0;

¿Qué hace? Define el límite del análisis y inicializa la variable acumuladora.

¿Por qué se hace así? $suma debe empezar en 0 para poder acumular valores correctamente.

💡 Concepto: Variables acumuladoras

Las variables como $suma se usan para acumular valores durante un bucle. Deben inicializarse antes del bucle.

📝 Línea 4: Bucle for

for ($i = 0; $i <= $numero; $i++) {

¿Qué hace? Crea un bucle que recorre todos los números desde 0 hasta el límite.

¿Por qué se hace así? El bucle for es perfecto para recorrer rangos numéricos conocidos.

💡 Concepto: Rango inclusivo

Usamos <= en lugar de < para incluir el número límite en el análisis.

📝 Líneas 5-9: Condición con operador módulo

if ($i % 2 == 0) {
print($i);
} else {
$suma += $i;
}

¿Qué hace? Usa el operador módulo para determinar si un número es par o impar.

¿Por qué se hace así? El operador % devuelve el resto de una división, perfecto para verificar paridad.

💡 Concepto: Operador módulo (%)

$i % 2 devuelve 0 si $i es par, 1 si es impar. Es la forma más eficiente de verificar paridad.

📝 Operador de asignación compuesta

$suma += $i;

¿Qué hace? Equivale a $suma = $suma + $i. Acumula el valor actual en la suma total.

¿Por qué se hace así? Más compacto y legible que la forma expandida.

💡 Concepto: Operadores compuestos

+= suma y asigna
-= resta y asigna
*= multiplica y asigna
/= divide y asigna

➗ Operador Módulo en Profundidad

¿Qué es el operador módulo?

El operador % devuelve el resto de una división entre dos números.

10 % 3 = 1 (10 ÷ 3 = 3 con resto 1)
15 % 5 = 0 (15 ÷ 5 = 3 exacto)
7 % 2 = 1 (7 ÷ 2 = 3 con resto 1 → impar)
8 % 2 = 0 (8 ÷ 2 = 4 exacto → par)

Usos comunes del módulo

🔍 Verificar paridad

if ($numero % 2 == 0)

Determina si un número es par o impar

🔄 Alternar elementos

if ($i % 3 == 0)

Aplicar estilo cada 3 elementos

⏰ Conversión tiempo

$minutos = $segundos % 60

Extraer minutos de segundos totales

🎯 Grupos cíclicos

$grupo = $numero % 5

Asignar a grupos de 5 elementos

🎯 Patrones de Procesamiento en Bucles

Filtrado y Clasificación

$pares = [];
$impares = [];
foreach ($numeros as $num) {
    if ($num % 2 == 0) {
        $pares[] = $num;
    } else {
        $impares[] = $num;
    }
}

Separar elementos en diferentes categorías según condiciones.

Acumulación Condicional

$suma_condicional = 0;
for ($i = 0; $i <= 100; $i++) {
    if ($i % 3 == 0) {
        $suma_condicional += $i;
    }
}

Sumar solo los elementos que cumplen cierta condición.

Conteo y Estadísticas

$contador = 0;
foreach ($datos as $dato) {
    if ($dato > $umbral) {
        $contador++;
    }
}

Contar elementos que cumplen criterios específicos.

⚡ Optimización y Mejores Prácticas

✅ Inicializar variables

Siempre inicializa variables acumuladoras antes del bucle.

✅ Correcto

$suma = 0;
for(...) { $suma += ... }

❌ Incorrecto

for(...) { $suma += ... }

✅ Usar operadores compuestos

Los operadores como += son más eficientes y legibles.

✅ Mejor

$suma += $valor;

❌ Peor

$suma = $suma + $valor;

✅ Elegir el bucle correcto

Usa for para rangos, foreach para arrays.

✅ Apropiado

for ($i=0; $i<10; $i++)

❌ Inapropiado

foreach (range(0,9) as $i)

🎯 Conceptos Clave Aprendidos

Operador Módulo

  • Devuelve el resto de una división
  • Perfecto para verificar divisibilidad
  • Usado para paridad, agrupación, ciclos
  • $a % $b = resto de a ÷ b

Procesamiento Condicional

  • Ejecutar diferentes acciones según condiciones
  • Combinar bucles con if-else
  • Clasificar y filtrar datos
  • Acumular valores selectivamente

Variables Acumuladoras

  • Almacenan resultados acumulativos
  • Deben inicializarse antes del bucle
  • Pueden ser sumas, contadores, etc.
  • Usan operadores compuestos

💪 Ejercicio Práctico

Amplía el sistema de análisis

Practica estos cambios para mejorar tus habilidades:

  1. Modifica el código para calcular la suma de números pares también
  2. Implementa un contador para números divisibles por 3 y 5 simultáneamente
  3. Crea un sistema que encuentre números primos en el rango
  4. Añade cálculo de promedios separados para pares e impares
  5. Implementa una función que reciba el límite y devuelva estadísticas completas

Solución 1: Suma de pares

<?php
$suma_pares = 0;
$suma_impares = 0;

for ($i = 0; $i <= $limite; $i++) {
    if ($i % 2 == 0) {
        $suma_pares += $i;
    } else {
        $suma_impares += $i;
    }
}

echo "Suma pares: $suma_pares, Suma impares: $suma_impares";
?>

Solución 2: Divisibles por 3 y 5

<?php
$divisibles = 0;
for ($i = 0; $i <= $limite; $i++) {
    if ($i % 3 == 0 && $i % 5 == 0) {
        $divisibles++;
    }
}

echo "Números divisibles por 3 y 5: $divisibles";
?>

Solución 3: Números primos

<?php
$primos = [];
for ($i = 2; $i <= $limite; $i++) {
    $esPrimo = true;
    for ($j = 2; $j < $i; $j++) {
        if ($i % $j == 0) {
            $esPrimo = false;
            break;
        }
    }
    if ($esPrimo) {
        $primos[] = $i;
    }
}

echo "Números primos: " . implode(', ', $primos);
?>

Solución 4: Promedios

<?php
$pares = [];
$impares = [];

for ($i = 0; $i <= $limite; $i++) {
    if ($i % 2 == 0) {
        $pares[] = $i;
    } else {
        $impares[] = $i;
    }
}

$promedio_pares = count($pares) > 0 ? array_sum($pares) / count($pares) : 0;
$promedio_impares = count($impares) > 0 ? array_sum($impares) / count($impares) : 0;

echo "Promedio pares: $promedio_pares, Promedio impares: $promedio_impares";
?>

Solución 5: Función de estadísticas

<?php
function analizarNumeros($limite) {
    $estadisticas = [
        'pares' => [],
        'impares' => [],
        'suma_pares' => 0,
        'suma_impares' => 0
    ];
    
    for ($i = 0; $i <= $limite; $i++) {
        if ($i % 2 == 0) {
            $estadisticas['pares'][] = $i;
            $estadisticas['suma_pares'] += $i;
        } else {
            $estadisticas['impares'][] = $i;
            $estadisticas['suma_impares'] += $i;
        }
    }
    
    return $estadisticas;
}

$resultados = analizarNumeros(50);
print_r($resultados);
?>