<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PSeInt.org</title>
	<atom:link href="https://pseint.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://pseint.org</link>
	<description>Descarga, Tutoriales y Ejercicios de Pseudocódigo</description>
	<lastBuildDate>Sun, 18 Jan 2026 14:19:42 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://pseint.org/wp-content/uploads/2026/01/favicon-150x150.png</url>
	<title>PSeInt.org</title>
	<link>https://pseint.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Algoritmo de Reloj Digital en PSeInt: Simulación con Ciclos (Guía 2026)</title>
		<link>https://pseint.org/reloj-digital-pseint-ciclos-anidados/</link>
					<comments>https://pseint.org/reloj-digital-pseint-ciclos-anidados/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Sat, 24 Jan 2026 14:18:57 +0000</pubDate>
				<category><![CDATA[Ciclos y Bucles]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=678</guid>

					<description><![CDATA[Nivel: Intermedio Tiempo: ~25 min ¿Cómo funciona el cronómetro de tu celular o el reloj de tu computadora? La respuesta está en los Ciclos Anidados. En este tutorial avanzado de PSeInt, construiremos un simulador de reloj digital que cuenta horas, minutos y segundos en tiempo real. Aprenderás a dominar la técnica de «un ciclo dentro...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Intermedio
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~25 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                ¿Cómo funciona el cronómetro de tu celular o el reloj de tu computadora? La respuesta está en los <strong>Ciclos Anidados</strong>. En este tutorial avanzado de <strong>PSeInt</strong>, construiremos un simulador de reloj digital que cuenta horas, minutos y segundos en tiempo real. Aprenderás a dominar la técnica de «un ciclo dentro de otro ciclo» (Nesting) y utilizarás comandos especiales como <code>Esperar</code> y <code>Borrar Pantalla</code> para crear la ilusión de movimiento y actualización constante. Este es el ejercicio definitivo para entender cómo interactúan múltiples contadores simultáneos.
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: La Mecánica del Tiempo
        </h2>
        <p style="margin-bottom: 20px;">Para simular un reloj, debemos replicar el comportamiento de los engranajes: el segundero mueve al minutero, y este a la hora.</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Ciclos Anidados (Nesting)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Necesitamos tres bucles <code>Para</code>, uno dentro del otro.
                    <br>1. <strong>Externo (Horas):</strong> De 0 a 23.
                    <br>2. <strong>Medio (Minutos):</strong> De 0 a 59.
                    <br>3. <strong>Interno (Segundos):</strong> De 0 a 59.
                    <br>Por cada vuelta del ciclo de horas, el de minutos da 60 vueltas, y el de segundos da 3600.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Comandos de Interfaz</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Para que parezca un reloj y no una lista infinita de números, usamos:
                    <br>• <code>Esperar 1 Segundos</code>: Frena la ejecución para marcar el ritmo.
                    <br>• <code>Borrar Pantalla</code>: Limpia la consola antes de escribir la nueva hora, creando la animación.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">La jerarquía de los bucles es fundamental. El ciclo más interno es el que cambia más rápido.</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">BUCLE HORAS</span>
                <span>Controla las horas del día. Va desde 0 hasta 23. Una vez termina, el día (o la simulación) acaba.</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">BUCLE MINUTOS</span>
                <span>Está <strong>dentro</strong> de las horas. Se repite 60 veces (0-59) por cada hora que pasa.</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">BUCLE SEGUNDOS</span>
                <span>El corazón del reloj. Está dentro de los minutos. Aquí es donde ponemos el <code>Escribir</code>, el <code>Esperar</code> y el <code>Borrar Pantalla</code>.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Estructura Básica)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: RelojSimple.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo RelojDigital
    // 1. Definición de Variables
    Definir h, m, s Como Entero;
    
    Escribir "Iniciando Reloj...";
    Esperar 1 Segundos;
    
    // 2. Ciclos Anidados (La lógica del reloj)
    
    // Bucle para las Horas (0 a 23)
    Para h <- 0 Hasta 23 Hacer
        
        // Bucle para los Minutos (0 a 59)
        Para m <- 0 Hasta 59 Hacer
            
            // Bucle para los Segundos (0 a 59)
            Para s <- 0 Hasta 59 Hacer
                
                // 3. Actualización de la Pantalla
                Borrar Pantalla; // Limpia el número anterior
                
                // Dibujo del reloj
                Escribir "=================";
                Escribir "  RELOJ DIGITAL  ";
                Escribir "    ", h, ":", m, ":", s;
                Escribir "=================";
                
                // 4. Pausa de tiempo real
                Esperar 1 Segundos;
                
            FinPara
            
        FinPara
        
    FinPara
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/reloj-digital-pseint-ciclos-anidados-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes en Simulaciones
        </h2>
        <p style="margin-bottom: 20px;">Lograr que el reloj se vea bien requiere evitar estos fallos:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Olvidar 'Borrar Pantalla'</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Si no borras la pantalla, PSeInt escribirá una hora debajo de la otra infinitamente (00:00:01, 00:00:02...). Para simular un reloj fijo, debes limpiar la consola en cada segundo.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Poner 'Esperar' en el bucle incorrecto</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    El comando <code>Esperar 1 Segundos</code> debe ir estrictamente dentro del bucle de los <strong>Segundos</strong>. Si lo pones en el de Minutos, los segundos volarán a la velocidad de la luz y el reloj solo se detendrá cada minuto.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Reto: Formato Profesional "00:00:00"
        </h2>
        <p style="margin-bottom: 20px;">
            El código básico muestra <code>9:5:1</code>. Los relojes reales muestran <code>09:05:01</code>. Para lograr esto, necesitamos condicionales que agreguen un "0" extra si el número es menor a 10.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo RelojEstetico
    Definir h, m, s Como Entero;
    
    Para h <- 0 Hasta 23 Hacer
        Para m <- 0 Hasta 59 Hacer
            Para s <- 0 Hasta 59 Hacer
                
                Borrar Pantalla;
                Escribir "==================";
                
                // Lógica de visualización (Cero a la izquierda)
                // Usamos 'Sin Saltar' para armar la línea
                
                // Horas
                Si h < 10 Entonces
                    Escribir "0", h, ":" Sin Saltar;
                SiNo
                    Escribir h, ":" Sin Saltar;
                FinSi
                
                // Minutos
                Si m < 10 Entonces
                    Escribir "0", m, ":" Sin Saltar;
                SiNo
                    Escribir m, ":" Sin Saltar;
                FinSi
                
                // Segundos
                Si s < 10 Entonces
                    Escribir "0", s;
                SiNo
                    Escribir s;
                FinSi
                
                Escribir "==================";
                Esperar 1 Segundos; // También puedes probar con 'Esperar 100 Milisegundos' para pruebas rápidas
                
            FinPara
        FinPara
    FinPara
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo detengo el reloj?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Como el ciclo dura 24 horas, parece infinito. Para detenerlo en PSeInt, simplemente cierra la ventana de ejecución o presiona el botón de "Pausa/Stop". Programáticamente, necesitarías leer una tecla con <code>Esperar Tecla</code>, lo cual cambiaría la lógica.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo poner una alarma?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Sí. Pide una hora de alarma al inicio (ej: <code>h_alarma</code>, <code>m_alarma</code>). Dentro del ciclo de segundos, agrega: <code>Si h=h_alarma Y m=m_alarma Y s=0 Entonces Escribir "¡DESPIERTA!" FinSi</code>.</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Por qué parpadea la pantalla?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">El comando <code>Borrar Pantalla</code> y volver a escribir causa un leve parpadeo visual en la consola. Esto es normal en aplicaciones de consola simples y difícil de evitar en PSeInt puro.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo lo hago infinito?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Envuelve todo el bloque de los ciclos <code>Para</code> dentro de un ciclo <code>Mientras Verdadero Hacer ... FinMientras</code>. Así, cuando llegue a 23:59:59, volverá a 00:00:00 automáticamente.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/reloj-digital-pseint-ciclos-anidados/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Crear el Juego «Adivina el Número» en PSeInt (Guía 2026)</title>
		<link>https://pseint.org/juego-adivinar-numero-pseint/</link>
					<comments>https://pseint.org/juego-adivinar-numero-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 14:11:55 +0000</pubDate>
				<category><![CDATA[Ciclos y Bucles]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=675</guid>

					<description><![CDATA[Nivel: Intermedio Tiempo: ~25 min Programar un videojuego, por sencillo que sea, es el sueño de todo aspirante a desarrollador. El clásico juego de «Alto o Bajo» es el ejercicio perfecto para dar ese salto. En este tutorial de PSeInt, construiremos un algoritmo donde la computadora «piensa» un número aleatorio y tú debes adivinarlo con...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Intermedio
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~25 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                Programar un videojuego, por sencillo que sea, es el sueño de todo aspirante a desarrollador. El clásico juego de <strong>«Alto o Bajo»</strong> es el ejercicio perfecto para dar ese salto. En este tutorial de <strong>PSeInt</strong>, construiremos un algoritmo donde la computadora «piensa» un número aleatorio y tú debes adivinarlo con pistas. Este proyecto es fundamental porque integra tres pilares de la lógica: la generación de <strong>números aleatorios (Azar)</strong>, el uso de <strong>bucles interactivos (Repetir/Mientras)</strong> y el manejo de <strong>contadores</strong> para registrar tu puntaje. ¡Prepárate para retar a la máquina!
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Azar y Bucles
        </h2>
        <p style="margin-bottom: 20px;">Para que el juego sea divertido e impredecible, necesitamos herramientas especiales:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Función Azar(N)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Esta función genera un número aleatorio entero. ¡Ojo con el rango! En PSeInt, <code>Azar(100)</code> genera números del <strong>0 al 99</strong>. Si queremos jugar del 1 al 100, debemos sumar 1 a la fórmula: <code>Azar(100) + 1</code>.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Bucle Indeterminado (Repetir)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    A diferencia de una tabla de multiplicar (donde sabemos que son 10 vueltas), aquí no sabemos cuántos intentos necesitará el usuario. Usamos la estructura <code>Repetir... Hasta Que</code> para mantener el juego vivo hasta que el jugador acierte.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">El flujo del juego debe ser lógico y amigable para el usuario:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">INICIO</span>
                <span>
                    1. La computadora genera un número secreto (ej: 42) y lo guarda en memoria.<br>
                    2. Inicializamos el contador de intentos en 0.
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">BUCLE DE JUEGO</span>
                <span>
                    Pedir un número al usuario. Sumar 1 intento. Comparar:<br>
                    • Si <code>Usuario < Secreto</code>: Decir "¡Más Alto!".<br>
                    • Si <code>Usuario > Secreto</code>: Decir "¡Más Bajo!".<br>
                    • Si son iguales: ¡Ganaste!
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">SALIDA</span>
                <span>Mostrar mensaje de felicitación y el número total de intentos utilizados.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Juego Clásico)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: AdivinaNumero.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo JuegoAdivinanza
    // 1. Definición de Variables
    Definir secreto, intento, contador Como Entero;
    
    // 2. Generación del Número Aleatorio (1 al 100)
    // Azar(100) da de 0 a 99, por eso sumamos 1
    secreto <- Azar(100) + 1;
    contador <- 0;
    intento <- 0; // Inicializamos con un valor que no sea el secreto
    
    Escribir "=== JUEGO: ADIVINA EL NÚMERO ===";
    Escribir "He pensado un número entre 1 y 100.";
    Escribir "¡Intenta adivinarlo!";
    Escribir "--------------------------------";
    
    // 3. Bucle Interactivo
    // Usamos 'Mientras' para repetir hasta que acierte
    Mientras intento <> secreto Hacer
        
        Escribir "Ingresa tu número:";
        Leer intento;
        
        // Aumentamos el contador de intentos
        contador <- contador + 1;
        
        // 4. Lógica de Pistas (Alto/Bajo)
        Si intento > secreto Entonces
            Escribir ">> ¡Demasiado ALTO! Prueba uno más bajo.";
        SiNo
            Si intento < secreto Entonces
                Escribir ">> ¡Demasiado BAJO! Prueba uno más alto.";
            SiNo
                // Si no es mayor ni menor, es igual (Victoria)
                Escribir "*********************************";
                Escribir "¡FELICIDADES! ¡ADIVINASTE!";
                Escribir "*********************************";
            FinSi
        FinSi
        
    FinMientras
    
    // 5. Estadísticas Finales
    Escribir "Número secreto: ", secreto;
    Escribir "Total de intentos: ", contador;
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/juego-adivinar-numero-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes de Desarrollo
        </h2>
        <p style="margin-bottom: 20px;">Programar juegos tiene sus trampas. Evita estos fallos:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Rango Incorrecto (El error del 0)</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Si solo escribes <code>Azar(100)</code>, la computadora puede generar el número 0 y nunca generará el 100. Recuerda que en informática contamos desde 0. La corrección <code>+1</code> es obligatoria si quieres jugar del 1 al 100.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Inicialización del Bucle</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    Si usas <code>Mientras intento <> secreto</code>, debes asegurarte de que <code>intento</code> no valga lo mismo que <code>secreto</code> antes de empezar (aunque es improbable por azar). Es más seguro inicializar <code>intento</code> en -1 o un valor fuera de rango.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Reto: Modo Difícil (Intentos Limitados)
        </h2>
        <p style="margin-bottom: 20px;">
            Hagamos el juego más emocionante. Ahora el jugador solo tiene <strong>5 vidas</strong>. Si se agotan, pierde el juego (Game Over). Esto introduce una condición de salida doble en el bucle.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo JuegoVidasLimitadas
    Definir secreto, intento, vidas Como Entero;
    
    secreto <- Azar(50) + 1; // Rango 1-50
    vidas <- 5;
    intento <- 0;
    
    Escribir "=== MODO HARDCORE (1-50) ===";
    Escribir "Tienes ", vidas, " vidas para adivinar.";
    
    // El bucle sigue MIENTRAS no acierte Y le queden vidas
    Mientras intento <> secreto Y vidas > 0 Hacer
        
        Escribir "Vidas restantes: ", vidas;
        Escribir "Ingresa tu número:";
        Leer intento;
        
        Si intento == secreto Entonces
            Escribir "¡VICTORIA! Lo lograste.";
        SiNo
            vidas <- vidas - 1; // Restamos vida
            
            Si vidas == 0 Entonces
                Escribir "--- GAME OVER ---";
                Escribir "El número era: ", secreto;
            SiNo
                // Damos pistas solo si sigue vivo
                Si intento > secreto Entonces
                    Escribir "Pista: Busca más BAJO.";
                SiNo
                    Escribir "Pista: Busca más ALTO.";
                FinSi
            FinSi
        FinSi
        Escribir ""; // Espacio estético
    FinMientras
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Por qué PSeInt siempre genera los mismos números?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Esto se llama "semilla pseudoaleatoria". En algunas configuraciones de PSeInt, la secuencia es fija para pruebas. Para evitarlo, marca la opción "No inicializar el azar con la misma semilla" en las opciones de configuración de tu perfil.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cuál es la diferencia entre Azar y Aleatorio?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;"><code>Azar(N)</code> genera desde 0 hasta N-1. <code>Aleatorio(A, B)</code> genera un número entre A y B (ambos incluidos). <code>Aleatorio(1, 100)</code> es equivalente a <code>Azar(100) + 1</code>.</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo hago niveles de dificultad?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Puedes añadir un menú al inicio: "1. Fácil (1-10), 2. Medio (1-50), 3. Difícil (1-100)". Según la opción elegida, cambias el valor dentro de la función <code>Azar()</code>.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo poner pistas de "Caliente" o "Frío"?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Sí. Calcula la diferencia con <code>abs(secreto - intento)</code>. Si la diferencia es menor a 5, escribes "¡Muy caliente!", si es mayor a 20, "¡Congelado!".</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/juego-adivinar-numero-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Calcular la Media de N Números en PSeInt (Guía 2026)</title>
		<link>https://pseint.org/calcular-media-n-numeros-pseint/</link>
					<comments>https://pseint.org/calcular-media-n-numeros-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 14:05:07 +0000</pubDate>
				<category><![CDATA[Ciclos y Bucles]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=672</guid>

					<description><![CDATA[Nivel: Básico / Intermedio Tiempo: ~15 min Calcular el promedio (o media aritmética) es una operación fundamental en análisis de datos, desde calificar exámenes hasta procesar sensores científicos. Pero, ¿qué pasa cuando no sabemos de antemano cuántos datos vamos a procesar? En este tutorial de Lógica de Programación, aprenderás a construir un algoritmo flexible en...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Básico / Intermedio
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~15 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                Calcular el promedio (o media aritmética) es una operación fundamental en análisis de datos, desde calificar exámenes hasta procesar sensores científicos. Pero, ¿qué pasa cuando no sabemos de antemano cuántos datos vamos a procesar? En este tutorial de <strong>Lógica de Programación</strong>, aprenderás a construir un algoritmo flexible en <strong>PSeInt</strong> que solicita al usuario la cantidad de datos (N) y luego utiliza un <strong>Ciclo Para</strong> y un <strong>Acumulador</strong> para procesar la información dinámicamente. Este ejercicio es crucial para entender la diferencia entre variables de control (contadores) y variables de almacenamiento (acumuladores).
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Acumuladores y Contadores
        </h2>
        <p style="margin-bottom: 20px;">Para resolver este problema, necesitamos gestionar dos tipos de datos simultáneamente:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">La Variable &#8216;N&#8217; (Límite)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Representa la «Cantidad de Elementos». Antes de empezar a sumar, debemos preguntar al usuario: «¿Cuántos números vas a ingresar?». Este valor <code>N</code> definirá cuántas vueltas dará nuestro ciclo. Es el denominador de nuestra fórmula de promedio.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">El Acumulador (Suma)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    No podemos guardar todos los números en variables distintas (n1, n2, n3&#8230;) porque no sabemos cuántos son. En su lugar, usamos una sola variable <code>suma</code> que atrapa y acumula el valor en cada iteración: <code>suma <- suma + dato</code>.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">La lógica matemática para la media es $\bar{x} = \frac{\sum x}{N}$. Traducido a algoritmo:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">ENTRADA</span>
                <span>
                    1. Solicitar <code>N</code> (Total de datos).<br>
                    2. Dentro de un bucle, solicitar <code>N</code> veces el valor numérico (<code>dato</code>).
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">PROCESO</span>
                <span>
                    1. Inicializar <code>suma = 0</code>.<br>
                    2. Ciclo desde 1 hasta N: <code>suma = suma + dato</code>.<br>
                    3. Al terminar el ciclo: <code>promedio = suma / N</code>.
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">SALIDA</span>
                <span>Mostrar el resultado del cálculo. Es importante validar que N > 0 para evitar la división por cero.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Solución Estándar)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: MediaNNumeros.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo CalcularPromedioN
    // 1. Definición de Variables
    // 'n' es la cantidad de datos (Entero)
    // 'dato' es el número que ingresa el usuario en cada vuelta
    // 'suma' es el acumulador
    // 'promedio' es el resultado final (Real)
    Definir n, i Como Entero;
    Definir dato, suma, promedio Como Real;
    
    // 2. Inicialización
    suma <- 0; // ¡Muy importante empezar en 0!
    
    // 3. Obtener la cantidad de datos
    Escribir "=== CÁLCULO DE MEDIA ARITMÉTICA ===";
    Escribir "¿Cuántos números desea ingresar?";
    Leer n;
    
    // 4. Ciclo de Lectura y Acumulación
    // Usamos PARA porque sabemos exactamente cuántas vueltas dar (n)
    Para i <- 1 Hasta n Con Paso 1 Hacer
        Escribir "Ingrese el número ", i, ":";
        Leer dato;
        
        // Acumulamos el valor
        suma <- suma + dato;
    FinPara
    
    // 5. Cálculo Final y Salida
    // Validamos para no dividir por cero si n es 0
    Si n > 0 Entonces
        promedio <- suma / n;
        Escribir "-----------------------------";
        Escribir "La suma total es: ", suma;
        Escribir "La MEDIA (Promedio) es: ", promedio;
        Escribir "-----------------------------";
    SiNo
        Escribir "Error: La cantidad de números debe ser mayor a 0.";
    FinSi
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/calcular-media-n-numeros-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Frecuentes al Calcular Medias
        </h2>
        <p style="margin-bottom: 20px;">Estos son los detalles que suelen olvidar los principiantes:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">No inicializar la Suma</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Si no escribes <code>suma <- 0</code> antes del ciclo, PSeInt podría usar un valor basura o dar error. El acumulador siempre debe empezar limpio.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Calcular el Promedio DENTRO del ciclo</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    Un error clásico es poner <code>promedio <- suma / n</code> dentro del <code>Para</code>. Esto hace que la computadora calcule el promedio N veces innecesariamente. La división solo debe hacerse <strong>una vez</strong>, al finalizar el bucle.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Reto: Validación Estricta de Datos
        </h2>
        <p style="margin-bottom: 20px;">
            ¿Qué pasa si el usuario dice que va a ingresar "-5" números? El programa fallaría. Vamos a blindar el código usando un ciclo <code>Repetir</code> para asegurar que N sea válido antes de continuar.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo MediaRobusta
    Definir n, i Como Entero;
    Definir dato, suma, promedio Como Real;
    
    suma <- 0;
    
    // Validación: Obligar a ingresar un N positivo
    Repetir
        Escribir "¿Cuántos datos va a procesar? (Debe ser > 0):";
        Leer n;
        Si n <= 0 Entonces
            Escribir "Error: Cantidad inválida.";
        FinSi
    Hasta Que n > 0
    
    Para i <- 1 Hasta n Hacer
        Escribir "Ingrese dato #", i, ":";
        Leer dato;
        suma <- suma + dato;
    FinPara
    
    promedio <- suma / n;
    
    // Redondeo visual (truco matemático)
    promedio <- redon(promedio * 100) / 100;
    
    Escribir ">>> El promedio de los ", n, " datos es: ", promedio;
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Qué hago si no sé cuántos números son (N)?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Si N es desconocido, no uses el ciclo <code>Para</code>. Usa un ciclo <code>Mientras</code> o <code>Repetir</code> con un "valor centinela" (ej: ingresar 0 para terminar) y usa un contador manual para saber por cuánto dividir al final.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo usar arreglos (vectores)?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Sí, podrías guardar todos los datos en un arreglo <code>Dimension datos[n]</code> y luego recorrerlo para sumar. Es útil si necesitas volver a usar los números individuales después (ej: para calcular la varianza), pero para un promedio simple, el acumulador consume menos memoria.</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Por qué declarar las variables como Real?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Aunque N sea entero, los datos ingresados pueden ser decimales (ej: notas 4.5, 3.2). Además, la división del promedio casi siempre genera decimales. Usar <code>Real</code> evita pérdida de precisión.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo reinicio el programa?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Envuelve todo el algoritmo (excepto la definición de variables) en un ciclo <code>Repetir... Hasta Que respuesta="N"</code>.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/calcular-media-n-numeros-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Sumar Números hasta que se Ingrese Cero (PSeInt 2026)</title>
		<link>https://pseint.org/sumar-numeros-hasta-cero-pseint/</link>
					<comments>https://pseint.org/sumar-numeros-hasta-cero-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Thu, 22 Jan 2026 13:58:52 +0000</pubDate>
				<category><![CDATA[Ciclos y Bucles]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=669</guid>

					<description><![CDATA[Nivel: Básico Tiempo: ~15 min ¿Cómo sumamos una lista de números cuando no sabemos cuántos son? A diferencia del ciclo Para (que tiene un fin fijo), aquí nos enfrentamos a un Ciclo Indeterminado. En este tutorial de PSeInt, aprenderás a utilizar un «Valor Centinela» (en este caso, el número 0) para controlar el flujo del...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Básico
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~15 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                ¿Cómo sumamos una lista de números cuando no sabemos cuántos son? A diferencia del ciclo <em>Para</em> (que tiene un fin fijo), aquí nos enfrentamos a un <strong>Ciclo Indeterminado</strong>. En este tutorial de <strong>PSeInt</strong>, aprenderás a utilizar un <strong>«Valor Centinela»</strong> (en este caso, el número 0) para controlar el flujo del programa. Utilizaremos las estructuras <code>Repetir-Hasta Que</code> y <code>Mientras</code> para crear un acumulador dinámico que sigue sumando indefinidamente hasta que el usuario decide detenerse. Este concepto es la base de aplicaciones como cajas registradoras o ingreso de datos masivos.
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Centinelas y Acumuladores
        </h2>
        <p style="margin-bottom: 20px;">Para dominar este ejercicio, es necesario entender dos patrones de diseño de algoritmos:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Valor Centinela (Flag)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Es un valor especial que no forma parte de los datos a procesar, sino que sirve como señal de «STOP». Se elige el <strong>0</strong> porque es el elemento neutro de la suma (sumarlo no afecta el resultado), lo que simplifica mucho el código.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Variable Acumulador</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    A diferencia de una variable normal que sobrescribe su valor, un acumulador <strong>suma sobre sí mismo</strong>.
                    <br>Fórmula: <code>suma = suma + nuevo_numero</code>.
                    <br>¡Regla de oro! Siempre debe inicializarse en 0 antes de entrar al ciclo.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">El flujo de ejecución es cíclico y depende totalmente de la entrada del usuario:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">INICIO</span>
                <span>Inicializar la variable <code>suma <- 0</code>. Esto limpia la memoria para empezar a contar desde cero.</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">BUCLE (Repetir)</span>
                <span>
                    1. Pedir un número al usuario.<br>
                    2. Leer el número en la variable <code>n</code>.<br>
                    3. Sumar <code>n</code> al acumulador: <code>suma <- suma + n</code>.
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">FIN Y SALIDA</span>
                <span>Evaluar: ¿El número ingresado fue 0? <br>Si es SÍ: Terminar el ciclo y mostrar la <code>suma</code> total. <br>Si es NO: Volver a pedir otro número.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Con Repetir-Hasta Que)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: SumaHastaCero.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo SumarNumerosIndefinidos
    // 1. Definición de Variables
    // 'num' es el valor temporal que ingresa el usuario
    // 'suma' es el acumulador total
    Definir num, suma Como Real;
    
    // 2. Inicialización
    // ¡Fundamental! Si no empieza en 0, la suma será incorrecta.
    suma <- 0;
    
    Escribir "=== SUMADORA INFINITA ===";
    Escribir "Ingrese números para sumar.";
    Escribir "Digite 0 para terminar y ver el resultado.";
    Escribir "-----------------------------";
    
    // 3. Estructura Repetitiva (Bucle)
    // Usamos 'Repetir' porque al menos debemos pedir un número una vez
    Repetir
        Escribir "Ingrese un número:";
        Leer num;
        
        // Acumulamos el valor
        // Nota: Si num es 0, suma + 0 sigue siendo suma. No afecta.
        suma <- suma + num;
        
        // Opcional: Mostrar subtotal parcial
        // Escribir "Subtotal parcial: ", suma;
        
    Hasta Que num = 0
    
    // 4. Salida Final
    Escribir "-----------------------------";
    Escribir "PROCESO TERMINADO (Se ingresó 0)";
    Escribir "La suma total es: ", suma;
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/sumar-numeros-hasta-cero-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes con Acumuladores
        </h2>
        <p style="margin-bottom: 20px;">Cuidado con estos detalles que pueden romper la lógica de tu suma:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">No Inicializar el Acumulador</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Si olvidas poner <code>suma <- 0</code> al principio, PSeInt podría asignar un valor "basura" o lanzar un error de variable no inicializada, causando que la suma total sea incorrecta desde el inicio.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Usar 'Mientras' incorrectamente</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    Si usas <code>Mientras num <> 0</code>, debes leer el número <strong>antes</strong> del ciclo Y <strong>dentro</strong> del ciclo. Si olvidas leerlo dentro, el valor de <code>num</code> nunca cambiará y crearás un <strong>bucle infinito</strong>.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Reto: Calcular también el Promedio
        </h2>
        <p style="margin-bottom: 20px;">
            Ahora que sabemos sumar, ¿qué tal si también contamos cuántos números ingresó el usuario para calcular el promedio? Necesitaremos una variable extra llamada <code>contador</code>.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo SumaYPromedio
    Definir num, suma, promedio Como Real;
    Definir contador Como Entero;
    
    suma <- 0;
    contador <- 0;
    
    Repetir
        Escribir "Ingrese número (0 para salir):";
        Leer num;
        
        Si num <> 0 Entonces
            suma <- suma + num;
            contador <- contador + 1; // Solo contamos si no es el 0 de salida
        FinSi
        
    Hasta Que num = 0
    
    Escribir "--- RESULTADOS ---";
    Escribir "Suma Total: ", suma;
    Escribir "Números ingresados: ", contador;
    
    // Validación para evitar división por cero si no ingresó nada
    Si contador > 0 Entonces
        promedio <- suma / contador;
        Escribir "Promedio: ", promedio;
    SiNo
        Escribir "Promedio: 0 (No se ingresaron datos)";
    FinSi
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Por qué se usa el 0 como centinela?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Porque el 0 es el elemento neutro de la suma. Si usaras el "-1" para salir, tendrías que restar o evitar sumar ese -1 al final para no alterar el resultado total. El 0 no daña la cuenta.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cuál es la diferencia entre Acumulador y Contador?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Un <strong>Contador</strong> aumenta en una constante (generalmente de 1 en 1: 1, 2, 3...). Un <strong>Acumulador</strong> aumenta en valores variables (ej: suma = suma + precio).</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo usar el ciclo Mientras?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Sí. Sería: <code>Leer num; Mientras num <> 0 Hacer ... Leer num; FinMientras</code>. Es un poco más seguro si no quieres que el código se ejecute ni una vez si el primer número es 0.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Funciona con números negativos?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">¡Claro! El algoritmo suma algebraicamente. Si ingresas 5 y luego -3, la suma será 2. Solo se detiene estrictamente con el 0.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/sumar-numeros-hasta-cero-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Calcular el Factorial (N!) en PSeInt (Guía 2026)</title>
		<link>https://pseint.org/calcular-factorial-numero-pseint/</link>
					<comments>https://pseint.org/calcular-factorial-numero-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Thu, 22 Jan 2026 12:12:27 +0000</pubDate>
				<category><![CDATA[Ciclos y Bucles]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=658</guid>

					<description><![CDATA[Nivel: Intermedio Tiempo: ~15 min El cálculo del factorial es un clásico de las matemáticas y la programación, esencial para entender probabilidad, estadística y algoritmos de permutación. Representado como N!, consiste en multiplicar un número por todos sus antecesores hasta llegar al 1 (ejemplo: 5! = 5*4*3*2*1 = 120). En este tutorial de Lógica de...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Intermedio
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~15 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                El cálculo del factorial es un clásico de las matemáticas y la programación, esencial para entender probabilidad, estadística y algoritmos de permutación. Representado como <strong>N!</strong>, consiste en multiplicar un número por todos sus antecesores hasta llegar al 1 (ejemplo: <code>5! = 5*4*3*2*1 = 120</code>). En este tutorial de <strong>Lógica de Programación con PSeInt</strong>, aprenderás a implementar este cálculo utilizando <strong>Ciclos (Bucles)</strong> y, lo más importante, comprenderás el concepto de <strong>Acumulador Multiplicativo</strong>, una técnica vital que diferencia a los programadores novatos de los intermedios.
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Acumuladores y Matemáticas
        </h2>
        <p style="margin-bottom: 20px;">Antes de codificar, debemos aclarar dos reglas de oro que harán que tu algoritmo funcione correctamente:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Inicialización en 1 (No en 0)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    A diferencia de las sumas, donde empezamos en 0, en una multiplicación acumulativa debemos empezar en <strong>1</strong>. Si inicializas tu variable <code>factorial <- 0</code>, al multiplicar cualquier número, el resultado siempre será cero. El 1 es el elemento neutro de la multiplicación.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">El Caso del Cero (0!)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Por definición matemática estricta, el factorial de 0 es <strong>1</strong> (0! = 1). Un buen algoritmo debe ser capaz de manejar esta excepción lógica sin romperse.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">El flujo para calcular N! sigue estos pasos estructurados:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">ENTRADA</span>
                <span>Solicitar un número entero positivo (N). Si el usuario ingresa negativos, el factorial no está definido (en los reales básicos).</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">PROCESO</span>
                <span>
                    1. Inicializar <code>resultado = 1</code>.<br>
                    2. Usar un ciclo (Para o Mientras) que vaya desde 1 hasta N.<br>
                    3. En cada vuelta, actualizar: <code>resultado = resultado * contador</code>.
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">SALIDA</span>
                <span>Mostrar el valor final acumulado. Ej: "El factorial de 5 es 120".</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Solución con Ciclo Para)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: Factorial.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo CalcularFactorial
    // 1. Definición de Variables
    // 'fact' guardará el resultado. 'num' es el dato de entrada. 'i' es el contador.
    // Usamos 'Real' para el factorial porque crecen muy rápido (pueden superar el límite de Entero)
    Definir num, i Como Entero;
    Definir fact Como Real;
    
    // 2. Inicialización CRÍTICA
    fact <- 1;
    
    // 3. Entrada de Datos
    Escribir "=== CÁLCULO DE FACTORIAL (N!) ===";
    Escribir "Ingrese un número entero positivo:";
    Leer num;
    
    // 4. Validación de entrada (No existen factoriales negativos)
    Si num < 0 Entonces
        Escribir "Error: No existe el factorial de números negativos.";
    SiNo
        // 5. Proceso: Ciclo Multiplicativo
        // Recorremos desde 1 hasta el número ingresado
        Para i <- 1 Hasta num Con Paso 1 Hacer
            fact <- fact * i;
            // Prueba de escritorio mental:
            // Vuelta 1: fact = 1 * 1 = 1
            // Vuelta 2: fact = 1 * 2 = 2
            // Vuelta 3: fact = 2 * 3 = 6 ...
        FinPara
        
        // 6. Salida de Resultados
        Escribir "-----------------------------";
        Escribir "El factorial de ", num, "! es: ", fact;
        Escribir "-----------------------------";
    FinSi
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/calcular-factorial-numero-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes: Por qué tu código da Cero
        </h2>
        <p style="margin-bottom: 20px;">El cálculo factorial tiene trampas específicas que debes evitar:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Inicializar en Cero</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    El error #1. Si escribes <code>fact <- 0</code>, la primera multiplicación será <code>0 * 1 = 0</code>, y todo el resultado final será 0. En acumuladores de sumas se usa 0; en acumuladores de productos se usa 1.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Desbordamiento (Overflow)</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    Los factoriales crecen explosivamente. <code>10!</code> es 3.6 millones. <code>20!</code> es un número gigantesco. Si defines la variable como <code>Entero</code>, al calcular factoriales grandes (ej: >13), PSeInt podría dar error o números negativos extraños. Usa <code>Real</code> para mayor capacidad.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Reto: Validación Robusta y Ciclo Repetitivo
        </h2>
        <p style="margin-bottom: 20px;">
            Vamos a profesionalizar el código. Esta versión usa un ciclo <code>Repetir</code> para asegurar que el usuario ingrese un número válido (no negativo) y maneja el caso especial del 0 de forma explícita.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo FactorialValidado
    Definir n, i Como Entero;
    Definir f Como Real;
    
    // Validación: Obligar al usuario a ingresar un positivo
    Repetir
        Escribir "Ingrese un número (0 o positivo):";
        Leer n;
        Si n < 0 Entonces
            Escribir "Dato inválido. Intente nuevamente.";
        FinSi
    Hasta Que n >= 0
    
    f <- 1;
    
    Si n = 0 Entonces
        // Caso base matemático explícito
        Escribir "El factorial de 0 es: 1";
    SiNo
        // Ciclo decreciente (otra forma de hacerlo: n hasta 1)
        Para i <- n Hasta 1 Con Paso -1 Hacer
            f <- f * i;
            Escribir "Multiplicando por: ", i, " Acumulado: ", f;
        FinPara
        
        Escribir "Resultado Final: ", n, "! = ", f;
    FinSi
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Qué es la Recursividad en Factorial?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Es una técnica avanzada donde una función se llama a sí misma. <code>Factorial(n) = n * Factorial(n-1)</code>. PSeInt soporta subprocesos recursivos, pero los ciclos (iterativo) son más eficientes en memoria.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Por qué el factorial de 0 es 1?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Es una convención matemática necesaria para que fórmulas de combinatoria y series de Taylor funcionen. Representa que hay "una sola forma" de ordenar cero elementos (el conjunto vacío).</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cuál es el número más grande que puedo calcular?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Depende de tu computadora, pero generalmente <code>170!</code> es el límite para variables de tipo doble precisión (Real) antes de devolver "Infinito".</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo usar el ciclo Mientras?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">¡Sí! Inicializa <code>i=1</code> antes, y dentro del ciclo haces <code>fact = fact * i</code> y luego <code>i = i + 1</code>. El resultado es idéntico.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/calcular-factorial-numero-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Calcular Descuentos por Monto en PSeInt (Guía 2026)</title>
		<link>https://pseint.org/calcular-descuento-compra-pseint/</link>
					<comments>https://pseint.org/calcular-descuento-compra-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 07:50:00 +0000</pubDate>
				<category><![CDATA[Estructuras Condicionales]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=644</guid>

					<description><![CDATA[Nivel: Básico / Intermedio Tiempo: ~20 min Aplicar promociones y descuentos es una lógica fundamental en cualquier sistema de punto de venta (POS) o e-commerce. En este tutorial de Lógica de Programación, aprenderás a diseñar un algoritmo en PSeInt que recompensa a los clientes según cuánto gastan: a mayor compra, mayor descuento. Este ejercicio es...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Básico / Intermedio
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~20 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                Aplicar promociones y descuentos es una lógica fundamental en cualquier sistema de punto de venta (POS) o e-commerce. En este tutorial de <strong>Lógica de Programación</strong>, aprenderás a diseñar un algoritmo en <strong>PSeInt</strong> que recompensa a los clientes según cuánto gastan: a mayor compra, mayor descuento. Este ejercicio es perfecto para dominar las <strong>Estructuras Condicionales Anidadas</strong> (Si-SiNo-Si), ya que evaluaremos rangos de precios (por ejemplo, compras mayores a $1000 vs. compras menores) para decidir qué porcentaje aplicar. Es la introducción ideal a la «lógica de negocios».
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Rangos y Porcentajes
        </h2>
        <p style="margin-bottom: 20px;">Para que la «caja registradora» funcione, necesitamos entender cómo la computadora toma decisiones basadas en números:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Condicionales Anidados (Escalera)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Cuando hay más de dos opciones (ej: sin descuento, 10% y 20%), un simple <code>Si-Entonces</code> no basta. Necesitamos colocar un <code>Si</code> dentro de otro para crear una «escalera» de decisiones que verifique los montos de mayor a menor.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Matemática de Porcentajes</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Recuerda: En programación no restamos «20» a 100. Multiplicamos por el factor decimal.
                    <br>• Descuento = <code>Monto * 0.20</code>
                    <br>• Total = <code>Monto - Descuento</code>
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">Supongamos la siguiente política de la tienda:</p>
        <ul style="list-style-type: circle; margin-left: 20px; margin-bottom: 20px; color: #475569;">
            <li>Compra menor a $500: <strong>0% de descuento</strong>.</li>
            <li>Compra entre $500 y $1000: <strong>10% de descuento</strong>.</li>
            <li>Compra mayor a $1000: <strong>20% de descuento</strong>.</li>
        </ul>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">ENTRADA</span>
                <span>El monto total de la compra (Subtotal). Variable: <code>montoCompra</code> (Real).</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">PROCESO</span>
                <span>
                    Evaluar el monto en orden descendente para aplicar el porcentaje correcto.
                    <br>1. ¿Es > 1000? -> Desc = 20%
                    <br>2. ¿Es > 500? -> Desc = 10%
                    <br>3. Si no -> Desc = 0%
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">SALIDA</span>
                <span>Imprimir una «factura» detallando: Subtotal, Descuento aplicado (monto) y Total Neto a Pagar.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Solución Estándar)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: DescuentoTienda.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo CalcularDescuentoCompra
    // 1. Definición de Variables
    // Todo dinero debe ser Real por los centavos
    Definir montoCompra, montoDescuento, totalPagar Como Real;
    Definir porcentaje Como Real; // Variable auxiliar para mostrar info
    
    // 2. Entrada de Datos
    Escribir "=== CAJA REGISTRADORA 2026 ===";
    Escribir "Ingrese el monto total de la compra:";
    Leer montoCompra;
    
    // 3. Lógica de Descuentos (Condicionales Anidados)
    // Importante: Evaluar del mayor al menor para evitar errores de rango
    
    Si montoCompra > 1000 Entonces
        // Caso: Compra mayor a $1000
        montoDescuento <- montoCompra * 0.20;
        porcentaje <- 20;
    SiNo
        Si montoCompra > 500 Entonces
            // Caso: Entre $501 y $1000
            montoDescuento <- montoCompra * 0.10;
            porcentaje <- 10;
        SiNo
            // Caso: $500 o menos (Sin descuento)
            montoDescuento <- 0;
            porcentaje <- 0;
        FinSi
    FinSi
    
    // Cálculo final
    totalPagar <- montoCompra - montoDescuento;
    
    // 4. Salida (Formato Ticket)
    Escribir "-------------------------------";
    Escribir "Subtotal:        $", montoCompra;
    Escribir "Descuento (", porcentaje, "%): -$", montoDescuento;
    Escribir "-------------------------------";
    Escribir "TOTAL A PAGAR:   $", totalPagar;
    Escribir "-------------------------------";
    
    // Mensaje de cortesía
    Si montoDescuento > 0 Entonces
        Escribir "¡Felicidades! Ahorraste dinero hoy.";
    FinSi
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/calcular-descuento-compra-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Frecuentes en Rangos Numéricos
        </h2>
        <p style="margin-bottom: 20px;">La lógica de rangos es traicionera. Evita estos errores:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Orden Incorrecto de Evaluación</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Si preguntas primero <code>Si compra > 500</code>, una compra de $2000 entrará en esa condición (porque 2000 es mayor que 500) y recibirá solo el 10% en lugar del 20%. <strong>Siempre evalúa del mayor al menor</strong> (o usa rangos con operador Y).
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Compras Negativas</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    El código básico acepta «-100» como monto. En un sistema real, esto podría generar un «crédito» incorrecto. Siempre debemos validar que <code>monto > 0</code>.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Reto: Código Seguro (Validación)
        </h2>
        <p style="margin-bottom: 20px;">
            Mejoremos el algoritmo para que no acepte números negativos y redondee los centavos para evitar problemas de visualización.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo DescuentoValidado
    Definir compra, desc, total Como Real;
    
    // Ciclo para asegurar un monto válido
    Repetir
        Escribir "Ingrese monto de compra (Positivo):";
        Leer compra;
        Si compra <= 0 Entonces
            Escribir "Error: El monto debe ser mayor a 0.";
        FinSi
    Hasta Que compra > 0
    
    // Usamos rangos explícitos con operador 'Y' para mayor seguridad
    Si compra > 1000 Entonces
        desc <- compra * 0.20;
    SiNo
        // Aquí decimos explícitamente el rango
        Si compra > 500 Y compra <= 1000 Entonces
            desc <- compra * 0.10;
        SiNo
            desc <- 0;
        FinSi
    FinSi
    
    total <- compra - desc;
    
    // Redondeo matemático a 2 decimales
    total <- redon(total * 100) / 100;
    
    Escribir "Total Final: $", total;
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo usar la estructura 'Segun'?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">No es recomendable para <strong>rangos</strong> continuos (como precios). <code>Segun</code> (Switch) funciona mejor para valores discretos y exactos (Opciones de menú 1, 2, 3). Para rangos de dinero, <code>Si-Entonces</code> es la herramienta correcta.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo agrego un cupón de descuento extra?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Puedes preguntar al final <code>¿Tiene cupón? (S/N)</code>. Si la respuesta es S, restas un valor adicional al <code>totalPagar</code> calculado previamente.</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Por qué me da el resultado con muchos decimales?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Las operaciones de punto flotante a veces generan residuos (ej: 10.0000001). Usa la función <code>redon(variable)</code> o formatea la salida si tu versión de PSeInt lo permite.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo cambio la moneda?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">El algoritmo es agnóstico a la moneda. Solo cambia el símbolo <code>$</code> en los comandos <code>Escribir</code> por <code>€</code>, <code>S/</code>, o el que necesites.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/calcular-descuento-compra-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Imprimir Números Pares del 1 al 100 en PSeInt (Guía 2026)</title>
		<link>https://pseint.org/imprimir-numeros-pares-1-100-pseint/</link>
					<comments>https://pseint.org/imprimir-numeros-pares-1-100-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 11:41:30 +0000</pubDate>
				<category><![CDATA[Ciclos y Bucles]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=652</guid>

					<description><![CDATA[Nivel: Básico Tiempo: ~10 min Filtrar datos numéricos es una habilidad esencial en programación. En este tutorial de PSeInt, resolveremos el clásico ejercicio de mostrar solo los números pares dentro de un rango (1 al 100). Este problema es excelente porque nos permite explorar dos caminos fundamentales de la lógica computacional: el uso del operador...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Básico
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~10 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                Filtrar datos numéricos es una habilidad esencial en programación. En este tutorial de <strong>PSeInt</strong>, resolveremos el clásico ejercicio de mostrar solo los números pares dentro de un rango (1 al 100). Este problema es excelente porque nos permite explorar dos caminos fundamentales de la lógica computacional: el uso del operador matemático <strong>Módulo (MOD)</strong> para filtrar números uno por uno, y la manipulación del <strong>«Paso»</strong> en los bucles para saltar iteraciones. Dominar estas técnicas te preparará para algoritmos más complejos de búsqueda y clasificación.
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Paridad y Ciclos
        </h2>
        <p style="margin-bottom: 20px;">Para resolver este ejercicio, necesitamos entender qué hace que un número sea «par» y cómo la computadora puede detectarlo:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Operador Módulo (MOD)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Un número es par si es divisible por 2. En programación, usamos el operador <code>MOD</code> (o <code>%</code>) que nos devuelve el <strong>residuo</strong>. Si <code>X MOD 2</code> es igual a 0, entonces X es par.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Ciclo con Filtro vs. Salto</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Podemos recorrer todos los números (1, 2, 3, 4&#8230;) y preguntar «¿Eres par?» (Filtro). O podemos ser más astutos y saltar de 2 en 2 comenzando desde el 2 (2, 4, 6&#8230;). Veremos ambos métodos.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo (Método Estándar)
        </h2>
        <p style="margin-bottom: 20px;">El enfoque lógico más educativo para principiantes es revisar cada número y decidir si imprimirlo o no:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">INICIO</span>
                <span>Iniciar un ciclo que vaya del 1 al 100. Variable contador: <code>i</code>.</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">DECISIÓN</span>
                <span>
                    Dentro del ciclo, verificar la condición matemática: <code>Si i MOD 2 = 0</code>.
                    <br>• Verdadero: Es par. Proceder a imprimir.
                    <br>• Falso: Es impar. No hacer nada.
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">FIN</span>
                <span>Repetir hasta que el contador llegue a 100 y terminar el programa.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Método de Filtro Lógico)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: ParesConModulo.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo ImprimirParesFiltro
    // 1. Definición de Variables
    Definir i Como Entero;
    
    Escribir "=== Números Pares del 1 al 100 ===";
    
    // 2. Ciclo Para que recorre TODOS los números
    Para i <- 1 Hasta 100 Hacer
        
        // 3. Condición Lógica (El Filtro)
        // Usamos MOD para ver si el residuo de la división por 2 es cero
        Si i MOD 2 == 0 Entonces
            Escribir i; // Solo se imprime si pasa el filtro
        FinSi
        
    FinPara
    
    Escribir "=== Fin de la Serie ===";
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/imprimir-numeros-pares-1-100-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes
        </h2>
        <p style="margin-bottom: 20px;">Al trabajar con pares e impares, es fácil confundirse:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Confundir Residuo con Cociente</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Escribir <code>Si i / 2 == 0</code>. Esto es incorrecto porque la división devuelve el resultado (ej: 4/2 = 2), no el sobrante. Siempre usa <code>MOD</code> o <code>%</code>.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Iniciar en 1 con saltos de 2</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    Si intentas optimizar usando saltos pero escribes <code>Para i<-1 Hasta 100 Con Paso 2</code>, obtendrás 1, 3, 5... (Impares). Para obtener pares, debes iniciar el ciclo en 2.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Método Optimizado: Uso de "Con Paso"
        </h2>
        <p style="margin-bottom: 20px;">
            ¿Por qué verificar 100 números si solo nos interesan 50? Este método es computacionalmente más eficiente porque salta directamente a los números que nos interesan, eliminando la necesidad del <code>Si-Entonces</code>.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo ParesOptimizado
    Definir i Como Entero;
    
    // OPTIMIZACIÓN:
    // 1. Iniciamos 'i' en 2 (el primer par).
    // 2. Usamos "Con Paso 2" para sumar 2 en cada vuelta.
    // Resultado: i valdrá 2, 4, 6, 8... automáticamente.
    
    Para i <- 2 Hasta 100 Con Paso 2 Hacer
        Escribir i; 
        // ¡No necesitamos condicionales aquí dentro!
    FinPara
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo imprimo los números impares?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Con el método de filtro, cambia la condición a <code>Si i MOD 2 <> 0</code>. Con el método optimizado, inicia el ciclo en 1: <code>Para i<-1 Hasta 100 Con Paso 2</code>.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo sumo todos los números pares?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Necesitas una variable "Acumulador" (ej: <code>suma <- 0</code>) antes del ciclo. Dentro del ciclo, agrega <code>suma <- suma + i</code>.</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo usar el ciclo Mientras?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Sí. Inicializa <code>i <- 2</code>. La condición sería <code>Mientras i <= 100</code>, y dentro del ciclo incrementas manualmente: <code>i <- i + 2</code>.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo los imprimo en orden descendente (100 al 2)?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Usa un paso negativo: <code>Para i <- 100 Hasta 2 Con Paso -2 Hacer</code>.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/imprimir-numeros-pares-1-100-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Ordenar 3 Números de Menor a Mayor en PSeInt (Guía 2026)</title>
		<link>https://pseint.org/ordenar-3-numeros-menor-mayor-pseint/</link>
					<comments>https://pseint.org/ordenar-3-numeros-menor-mayor-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 07:43:32 +0000</pubDate>
				<category><![CDATA[Estructuras Condicionales]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=641</guid>

					<description><![CDATA[Nivel: Intermedio Tiempo: ~20 min El ordenamiento de datos es uno de los pilares de las ciencias de la computación. Antes de aprender algoritmos complejos como *Quicksort* o *Merge Sort*, todo programador debe dominar la lógica básica: ¿Cómo ordenamos tres variables simples (A, B y C) de forma ascendente? En este tutorial de PSeInt, exploraremos...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Intermedio
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~20 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                El ordenamiento de datos es uno de los pilares de las ciencias de la computación. Antes de aprender algoritmos complejos como *Quicksort* o *Merge Sort*, todo programador debe dominar la lógica básica: ¿Cómo ordenamos tres variables simples (A, B y C) de forma ascendente? En este tutorial de <strong>PSeInt</strong>, exploraremos dos métodos esenciales: el uso de <strong>condicionales anidados</strong> (el árbol de decisión) y el <strong>método de intercambio</strong> (o principio de la burbuja), que es mucho más eficiente y elegante. Dominar este ejercicio mejorará tu capacidad para manejar variables temporales y estructuras de decisión secuencial.
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Lógica de Ordenamiento
        </h2>
        <p style="margin-bottom: 20px;">Para ordenar variables sin usar arreglos (arrays) complejos, necesitamos aplicar lógica pura:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Intercambio (Swap)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Si descubrimos que el número A es mayor que el número B, necesitamos intercambiar sus posiciones. Para hacer esto sin perder datos, utilizamos una <strong>variable auxiliar</strong>. (Recordar la analogía de los vasos: para intercambiar agua y jugo, necesitas un tercer vaso vacío).
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Comparación Secuencial</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Para garantizar que tres números (N1, N2, N3) queden ordenados, debemos realizar tres verificaciones estratégicas: comparar N1 con N2, N1 con N3, y finalmente N2 con N3. Si realizamos los intercambios necesarios en cada paso, los números «flotarán» a su posición correcta.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo (Método de Intercambio)
        </h2>
        <p style="margin-bottom: 20px;">Este método es el precursor del famoso «Ordenamiento Burbuja». El flujo lógico es el siguiente:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">ENTRADA</span>
                <span>Tres números desordenados ingresados por el usuario. Variables: <code>n1</code>, <code>n2</code>, <code>n3</code>.</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">PROCESO</span>
                <span>
                    1. Si <code>n1 > n2</code>, intercambiarlos (así n1 es el menor temporalmente).<br>
                    2. Si <code>n1 > n3</code>, intercambiarlos (ahora n1 es definitivamente el menor absoluto).<br>
                    3. Si <code>n2 > n3</code>, intercambiarlos (ordenamos los dos restantes).
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">SALIDA</span>
                <span>Mostrar las variables en orden: <code>n1</code>, <code>n2</code>, <code>n3</code>.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Solución Eficiente)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: OrdenarNumeros.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo OrdenarTresNumeros
    // 1. Definición de Variables
    Definir n1, n2, n3, aux Como Real;
    
    // 2. Entrada de Datos
    Escribir "=== Ordenamiento Ascendente ===";
    Escribir "Ingrese el primer número:";
    Leer n1;
    Escribir "Ingrese el segundo número:";
    Leer n2;
    Escribir "Ingrese el tercer número:";
    Leer n3;
    
    // 3. Proceso: Método de Intercambio (Burbuja simplificada)
    
    // Paso A: Comparamos el 1ro con el 2do
    // Si n1 es mayor, los cambiamos de lugar.
    Si n1 > n2 Entonces
        aux <- n1;
        n1 <- n2;
        n2 <- aux;
    FinSi
    
    // Paso B: Comparamos el 1ro (que ya podría ser nuevo) con el 3ro
    // Esto asegura que n1 sea el más pequeño de todos
    Si n1 > n3 Entonces
        aux <- n1;
        n1 <- n3;
        n3 <- aux;
    FinSi
    
    // Paso C: Comparamos el 2do con el 3ro
    // Esto ordena los dos restantes
    Si n2 > n3 Entonces
        aux <- n2;
        n2 <- n3;
        n3 <- aux;
    FinSi
    
    // 4. Salida
    Escribir "-----------------------------";
    Escribir "Números Ordenados: ", n1, ", ", n2, ", ", n3;
    Escribir "-----------------------------";
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/ordenar-3-numeros-menor-mayor-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes de Principiantes
        </h2>
        <p style="margin-bottom: 20px;">Evita estos tropiezos lógicos al intentar ordenar datos:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Perder Datos (Sin Auxiliar)</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Error clásico: Escribir <code>n1 <- n2</code> y luego <code>n2 <- n1</code>. Al hacer la primera asignación, el valor original de <code>n1</code> se borra para siempre. <strong>Siempre</strong> usa una variable <code>aux</code>.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Confundir Ascendente con Descendente</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    Para ordenar de menor a mayor (ascendente), preguntamos si el anterior es <strong>Mayor (>)</strong> que el siguiente para cambiarlo. Si usas <code><</code>, ordenarás de mayor a menor.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Alternativa: Árbol de Decisiones (Si Anidados)
        </h2>
        <p style="margin-bottom: 20px;">
            Aunque menos eficiente de escribir, este método es excelente para ejercitar la lógica deductiva. No intercambia valores, sino que busca todas las permutaciones posibles (n1,n2,n3 o n1,n3,n2, etc.).
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo OrdenarConSiAnidados
    Definir a, b, c Como Real;
    Leer a, b, c;
    
    // Evaluamos quién es el menor de todos primero
    Si a < b Y a < c Entonces
        // 'a' es el menor. Ahora comparamos 'b' y 'c'
        Si b < c Entonces
            Escribir a, ", ", b, ", ", c;
        SiNo
            Escribir a, ", ", c, ", ", b;
        FinSi
    SiNo
        Si b < a Y b < c Entonces
            // 'b' es el menor. Comparamos 'a' y 'c'
            Si a < c Entonces
                Escribir b, ", ", a, ", ", c;
            SiNo
                Escribir b, ", ", c, ", ", a;
            FinSi
        SiNo
            // 'c' es el menor. Comparamos 'a' y 'b'
            Si a < b Entonces
                Escribir c, ", ", a, ", ", b;
            SiNo
                Escribir c, ", ", b, ", ", a;
            FinSi
        FinSi
    FinSi
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo ordeno 4 o más números?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Para 4 o más números, el método de <code>Si-Entonces</code> se vuelve inmanejable. Debes usar <strong>Arreglos (Arrays)</strong> y bucles <code>Para</code> con el método de Burbuja completo.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Qué pasa si los números son iguales?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">El método de intercambio funciona perfectamente con números iguales. La condición <code>n1 > n2</code> será falsa, no se hará el intercambio, y el orden se mantendrá relativo, mostrando <code>5, 5, 8</code> correctamente.</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo los ordeno de Mayor a Menor?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Simplemente invierte el operador relacional en las condiciones. Cambia todos los <code>&gt;</code> por <code>&lt;</code> en el código de intercambio.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo usar funciones matemáticas?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">No existe una función <code>Ordenar(a,b,c)</code> nativa en PSeInt. Debes implementar la lógica tú mismo, lo cual es el objetivo pedagógico del ejercicio.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/ordenar-3-numeros-menor-mayor-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Imprimir Números del 1 al 100 en PSeInt (Guía 2026)</title>
		<link>https://pseint.org/imprimir-numeros-1-al-100-pseint/</link>
					<comments>https://pseint.org/imprimir-numeros-1-al-100-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 11:31:54 +0000</pubDate>
				<category><![CDATA[Ciclos y Bucles]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=649</guid>

					<description><![CDATA[Nivel: Básico Tiempo: ~10 min Imagina que tu profesor te pide escribir los números del 1 al 1000. ¿Escribirías mil veces el comando Escribir? ¡Por supuesto que no! Aquí es donde entran en juego los Ciclos o Bucles. En este tutorial fundamental de PSeInt, aprenderás a automatizar tareas repetitivas utilizando las estructuras de control Para...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Básico
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~10 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                Imagina que tu profesor te pide escribir los números del 1 al 1000. ¿Escribirías mil veces el comando <code>Escribir</code>? ¡Por supuesto que no! Aquí es donde entran en juego los <strong>Ciclos o Bucles</strong>. En este tutorial fundamental de <strong>PSeInt</strong>, aprenderás a automatizar tareas repetitivas utilizando las estructuras de control <strong>Para (For)</strong> y <strong>Mientras (While)</strong>. Este ejercicio, aunque sencillo, es la puerta de entrada para entender conceptos vitales como iteraciones, contadores y condiciones de parada.
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Conceptos Clave: Automatizando la Repetición
        </h2>
        <p style="margin-bottom: 20px;">Para resolver este problema eficientemente, necesitamos entender las herramientas que PSeInt nos ofrece para repetir instrucciones:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">El Ciclo «Para» (For)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Es la estructura ideal cuando <strong>sabemos exactamente cuántas veces</strong> queremos repetir algo. En este caso, sabemos que queremos ir del 1 al 100. El ciclo «Para» maneja automáticamente el contador, incrementándolo en cada vuelta.
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">Variable Contador (Iterador)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Es una variable (comúnmente llamada <code>i</code>, <code>j</code> o <code>contador</code>) que lleva la cuenta de en qué vuelta del ciclo estamos. Comienza en un valor inicial (1) y termina en un valor final (100).
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">El flujo lógico es circular. La computadora realizará los siguientes pasos:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">INICIO</span>
                <span>Inicializar una variable contador en 1 (ej: <code>i = 1</code>).</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">PROCESO CÍCLICO</span>
                <span>
                    1. Verificar si <code>i <= 100</code>.<br>
                    2. Si es verdadero: Mostrar el valor de <code>i</code> en pantalla.<br>
                    3. Incrementar <code>i</code> en 1 (<code>i = i + 1</code>).<br>
                    4. Volver al paso 1.
                </span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">FIN</span>
                <span>Cuando <code>i</code> llega a 101, la condición se vuelve falsa y el ciclo termina.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Ciclo Para)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: Serie1al100.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo ImprimirNumeros
    // 1. Definición de Variables
    // 'i' es el nombre estándar para iteradores (contadores)
    Definir i Como Entero;
    
    Escribir "=== Generando serie del 1 al 100 ===";
    
    // 2. Estructura Repetitiva PARA (For)
    // Sintaxis: Para [Variable] <- [Inicio] Hasta [Fin] Con Paso [Salto] Hacer
    
    Para i <- 1 Hasta 100 Con Paso 1 Hacer
        // En cada vuelta, 'i' vale 1, luego 2, luego 3... hasta 100
        Escribir "Número: ", i;
        
        // El 'Paso 1' indica que va de 1 en 1.
        // Si pusieras 'Paso 2', imprimiría 1, 3, 5... (impares)
    FinPara
    
    Escribir "=== Fin del Algoritmo ===";
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/imprimir-numeros-1-al-100-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes en Ciclos
        </h2>
        <p style="margin-bottom: 20px;">Los bucles son poderosos pero peligrosos. Evita estos errores:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Bucle Infinito (Infinite Loop)</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Suele pasar en el ciclo <code>Mientras</code>. Si olvidas incrementar el contador (<code>i <- i + 1</code>), la condición <code>i <= 100</code> siempre será verdadera y el programa nunca se detendrá, bloqueando la computadora.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Error "Off-by-One" (Por uno)</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    Poner <code>Hasta 99</code> en lugar de 100, o iniciar en 0 cuando debías iniciar en 1. Verifica siempre tus límites de inicio y fin.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Alternativa: Usando "Mientras" (While)
        </h2>
        <p style="margin-bottom: 20px;">
            El ciclo <code>Para</code> es automático, pero el ciclo <code>Mientras</code> te da más control manual. Es importante saber usar ambos. Aquí, tú eres responsable de incrementar el contador.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo SerieConMientras
    Definir contador Como Entero;
    
    // 1. Inicialización manual
    contador <- 1;
    
    // 2. Condición de entrada al ciclo
    Mientras contador <= 100 Hacer
        Escribir "Valor actual: ", contador;
        
        // 3. Incremento MANUAL (¡Fundamental!)
        // Si borras esta línea, crearás un bucle infinito
        contador <- contador + 1;
    FinMientras
    
    Escribir "Ciclo terminado con éxito.";
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo imprimo en orden inverso (100 al 1)?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">En el ciclo <code>Para</code>, cambia el paso a negativo: <code>Para i <- 100 Hasta 1 Con Paso -1 Hacer</code>. Esto restará 1 en cada vuelta en lugar de sumar.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo imprimo solo los números pares?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Puedes usar <code>Con Paso 2</code> iniciando en 2. O, dentro del ciclo, usar una condición: <code>Si i MOD 2 == 0 Entonces Escribir i</code>.</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Qué diferencia hay entre Para y Mientras?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Usa <strong>Para</strong> cuando sepas de antemano cuántas veces vas a repetir (ej: 100 veces). Usa <strong>Mientras</strong> cuando la repetición dependa de una condición externa o desconocida (ej: "Mientras el usuario no escriba 'Salir'").</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Puedo cambiar el nombre de la variable 'i'?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">¡Sí! Puedes llamarla <code>numero</code>, <code>x</code>, <code>iterador</code> o lo que quieras. Se usa <code>i</code> por tradición matemática (índice), pero no es obligatorio.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/imprimir-numeros-1-al-100-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Algoritmo para Determinar Año Bisiesto en PSeInt (Guía Completa 2026)</title>
		<link>https://pseint.org/determinar-ano-bisiesto-pseint/</link>
					<comments>https://pseint.org/determinar-ano-bisiesto-pseint/#respond</comments>
		
		<dc:creator><![CDATA[El Profe Juan]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 07:29:33 +0000</pubDate>
				<category><![CDATA[Estructuras Condicionales]]></category>
		<guid isPermaLink="false">https://pseint.org/?p=635</guid>

					<description><![CDATA[Nivel: Intermedio Tiempo: ~20 min Saber si un año tiene 366 días parece simple: «¿Es divisible por 4?». Sin embargo, el calendario Gregoriano tiene reglas de excepción que convierten este problema en la prueba definitiva para dominar los Operadores Lógicos Compuestos. En este tutorial avanzado de PSeInt, construiremos un algoritmo que no solo verifica la...]]></description>
										<content:encoded><![CDATA[
<article style="font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #334155; line-height: 1.8; max-width: 100%;">

    <!-- 1. HEADER (SEO OPTIMIZED) -->
    <header style="margin-bottom: 40px;">
        <div style="display: flex; gap: 10px; margin-bottom: 15px;">
            <span style="background-color: #e0f2fe; color: #0284c7; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; text-transform: uppercase;">
                Nivel: Intermedio
            </span>
            <span style="background-color: #f1f5f9; color: #64748b; padding: 4px 12px; border-radius: 4px; font-size: 0.85rem; font-weight: 600;">
                Tiempo: ~20 min
            </span>
        </div>
        <div style="background: #f8fafc; border-left: 5px solid #2563eb; padding: 25px; border-radius: 0 8px 8px 0;">
            <p style="margin: 0; font-size: 1.1rem; color: #475569;">
                Saber si un año tiene 366 días parece simple: «¿Es divisible por 4?». Sin embargo, el calendario Gregoriano tiene reglas de excepción que convierten este problema en la prueba definitiva para dominar los <strong>Operadores Lógicos Compuestos</strong>. En este tutorial avanzado de <strong>PSeInt</strong>, construiremos un algoritmo que no solo verifica la divisibilidad, sino que aplica correctamente las excepciones de los años seculares (como 1900 o 2000). Aprenderás a combinar el operador <strong>Módulo (MOD)</strong> con conectores lógicos <strong>Y (AND)</strong> y <strong>O (OR)</strong> para crear una condición robusta y libre de errores.
            </p>
        </div>
    </header>

    <!-- 2. THEORETICAL CONCEPTS (LSI KEYWORDS SECTION) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Las 3 Reglas del Calendario Gregoriano
        </h2>
        <p style="margin-bottom: 20px;">Para programar esto, primero debemos entender la lógica matemática establecida por el Papa Gregorio XIII en 1582:</p>
        <div style="display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));">
            <!-- Concept 1 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">La Regla General (Divisible por 4)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Casi cualquier año divisible por 4 es bisiesto.
                    <br><em>Ejemplo:</em> 2004, 2008, 2024.
                    <br><em>En PSeInt:</em> <code>anio MOD 4 == 0</code>
                </p>
            </div>
            <!-- Concept 2 -->
            <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">La Excepción Secular (Divisible por 100)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Los años fin de siglo (divisibles por 100) <strong>NO</strong> son bisiestos, a menos que cumplan la tercera regla.
                    <br><em>Ejemplo:</em> 1700, 1800, 1900 no fueron bisiestos.
                </p>
            </div>
             <!-- Concept 3 -->
             <div style="background: white; border: 1px solid #e2e8f0; padding: 20px; border-radius: 8px;">
                <strong style="color: #2563eb; display: block; margin-bottom: 10px;">La Excepción de la Excepción (Divisible por 400)</strong>
                <p style="font-size: 0.95rem; margin: 0;">
                    Si el año es divisible por 100, pero también por 400, <strong>SÍ</strong> es bisiesto.
                    <br><em>Ejemplo:</em> El año 2000 sí fue bisiesto.
                </p>
            </div>
        </div>
    </section>

    <!-- 3. LOGIC ANALYSIS -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Análisis Lógico del Algoritmo
        </h2>
        <p style="margin-bottom: 20px;">Podemos resumir todas las reglas anteriores en una sola expresión lógica compuesta:</p>
        <ul style="list-style: none; padding: 0; display: grid; gap: 15px;">
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dcfce7; color: #166534; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">CONDICIÓN 1</span>
                <span>(Divisible por 4) <strong>Y</strong> (NO Divisible por 100)</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #fef9c3; color: #854d0e; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">CONECTOR</span>
                <span>Usamos el operador <strong>O</strong> (OR). El año es bisiesto si cumple la Condición 1 <strong>O</strong> si cumple la Condición 2.</span>
            </li>
            <li style="background: #ffffff; border: 1px solid #e2e8f0; padding: 15px; border-radius: 8px; display: flex; align-items: start; gap: 15px;">
                <span style="background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; font-weight: 700; margin-top: 3px;">CONDICIÓN 2</span>
                <span>(Divisible por 400). Esta condición «rescata» a los años como el 2000 o 2400.</span>
            </li>
        </ul>
    </section>

    <!-- 4. MAIN CODE BLOCK -->
    <section style="margin-bottom: 50px;">
        <div style="display: flex; justify-content: space-between; align-items: end; margin-bottom: 15px;">
            <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin: 0; display: flex; align-items: center; gap: 10px;">
                Código Fuente (Solución Óptima)
            </h2>
            <span style="font-size: 0.85rem; color: #64748b;">Archivo: BisiestoPro.psc</span>
        </div>
        <div style="background: #1e293b; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.15);">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; color: #e2e8f0; line-height: 1.6; padding: 20px;"><code>Algoritmo DeterminarBisiesto
    // 1. Definición de Variables
    Definir anio Como Entero;
    
    // 2. Entrada de Datos
    Escribir "=== Validador de Años Bisiestos ===";
    Escribir "Ingrese el año a verificar (ej: 2024):";
    Leer anio;
    
    // 3. Proceso Lógico Compuesto
    // Leemos: Si (es divisible por 4 Y NO por 100) O (es divisible por 400)
    
    Si ((anio MOD 4 = 0) Y (anio MOD 100 <> 0)) O (anio MOD 400 = 0) Entonces
        Escribir "--------------------------------";
        Escribir "El año ", anio, " SÍ ES BISIESTO.";
        Escribir "Tiene 366 días (Febrero tiene 29).";
    SiNo
        Escribir "--------------------------------";
        Escribir "El año ", anio, " NO ES BISIESTO.";
        Escribir "Tiene 365 días (Febrero tiene 28).";
    FinSi
    
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 5. FLOWCHART PLACEHOLDER -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Diagrama de Flujo
        </h2>
        <div style="background: #f8fafc; border: 2px dashed #cbd5e1; border-radius: 8px; padding: 20px; text-align: center;">
            <img decoding="async" src="https://pseint.org/wp-content/uploads/2026/01/determinar-ano-bisiesto-pseint-diagrama-flujo.png" />
        </div>
    </section>

    <!-- 6. COMMON ERRORS (SEO GOLDMINE) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            ⚠️ Errores Comunes: La Trampa del 1900
        </h2>
        <p style="margin-bottom: 20px;">Este es el error que cometen el 80% de los programadores novatos:</p>
        <div style="display: grid; gap: 15px;">
            <!-- Error 1 -->
            <div style="background: #fff1f2; border-left: 4px solid #e11d48; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9f1239;">Verificar solo la divisibilidad por 4</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #881337;">
                    Escribir simplemente: <code>Si anio MOD 4 = 0</code>. <br>
                    <strong>Por qué falla:</strong> Según este código incorrecto, el año 1900 sería bisiesto. Sin embargo, 1900 <strong>NO</strong> fue bisiesto porque es divisible por 100 pero no por 400. Esto desajusta el calendario solar.
                </p>
            </div>
            <!-- Error 2 -->
            <div style="background: #fff7ed; border-left: 4px solid #f97316; padding: 15px; border-radius: 0 8px 8px 0;">
                <strong style="color: #9a3412;">Mal uso de Paréntesis</strong>
                <p style="font-size: 0.95rem; margin: 5px 0 0 0; color: #7c2d12;">
                    En la expresión lógica, el orden importa. <br>
                    <code>Condicion1 Y Condicion2 O Condicion3</code> puede evaluarse distinto sin paréntesis. Siempre agrupa: <code>(C1 Y C2) O C3</code> para asegurar que las excepciones se procesen juntas.
                </p>
            </div>
        </div>
    </section>

    <!-- 7. OPTIMIZED CODE (CONTENT DEPTH) -->
    <section style="margin-bottom: 50px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Alternativa: Condicionales Anidados (Paso a Paso)
        </h2>
        <p style="margin-bottom: 20px;">
            Si la fórmula compuesta te resulta confusa, aquí tienes la versión «desglosada» usando <code>Si-Entonces</code> anidados. Es más larga, pero más fácil de leer para entender el flujo de decisión.
        </p>
        <div style="background: #0f172a; border-radius: 8px; overflow: hidden; border: 1px solid #334155;">
            <div style="overflow-x: auto;">
<pre style="margin: 0; font-family: 'Consolas', monospace; font-size: 0.9rem; color: #94a3b8; line-height: 1.6; padding: 20px;"><code>Algoritmo BisiestoAnidado
    Definir anio Como Entero;
    Escribir "Ingrese año:";
    Leer anio;
    
    // Paso 1: ¿Es divisible por 4?
    Si anio MOD 4 = 0 Entonces
        // Paso 2: ¿Es divisible por 100?
        Si anio MOD 100 = 0 Entonces
            // Paso 3: ¿Es divisible por 400?
            Si anio MOD 400 = 0 Entonces
                Escribir "ES BISIESTO (Divisible por 400)";
            SiNo
                Escribir "NO ES BISIESTO (Divisible por 100 pero no 400)";
            FinSi
        SiNo
            Escribir "ES BISIESTO (Divisible por 4 y no por 100)";
        FinSi
    SiNo
        Escribir "NO ES BISIESTO (No divisible por 4)";
    FinSi
FinAlgoritmo</code></pre>
            </div>
        </div>
    </section>

    <!-- 8. EXPANDED FAQ (LONG TAIL SEO) -->
    <section style="margin-bottom: 60px;">
        <h2 style="font-size: 1.6rem; font-weight: 700; color: #1e293b; margin-bottom: 20px;">
            Preguntas Frecuentes (FAQ)
        </h2>
        
        <!-- FAQ 1 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Qué significa MOD en PSeInt?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">MOD es el operador de «Módulo» o Residuo. Devuelve lo que sobra de una división. <code>2024 MOD 4</code> da <code>0</code> (división exacta), lo que nos indica que es múltiplo. En algunos perfiles de PSeInt se usa el símbolo <code>%</code>.</div>
        </details>
        
        <!-- FAQ 2 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Por qué el año 2000 fue bisiesto y 1900 no?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Ambos son divisibles por 100, pero la regla dice que si es divisible por 100, debe serlo también por 400. 1900/400 = 4.75 (No exacto), 2000/400 = 5 (Exacto).</div>
        </details>
        
        <!-- FAQ 3 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cómo escribir «Diferente de» en PSeInt?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Para decir «No es igual a cero», usamos el operador <code>&lt;&gt;</code>. Ejemplo: <code>anio MOD 100 &lt;&gt; 0</code>.</div>
        </details>
        
        <!-- FAQ 4 -->
        <details style="background: white; border: 1px solid #e2e8f0; border-radius: 8px; margin-bottom: 10px;">
            <summary style="padding: 15px; font-weight: 600; cursor: pointer; background: #f8fafc;">¿Cuál será el próximo año NO bisiesto divisible por 4?</summary>
            <div style="padding: 15px; color: #475569; border-top: 1px solid #e2e8f0;">Será el año **2100**. Es divisible por 4 y por 100, pero NO por 400. Así que febrero de 2100 tendrá solo 28 días.</div>
        </details>
    </section>

    <!-- 9. CTA -->
    <div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px; border-radius: 12px; text-align: center; color: white;">
        <h3 style="font-size: 1.5rem; font-weight: 800; margin: 0 0 10px 0; color: #fff;">¿Listo para el siguiente nivel?</h3>
        <p style="color: #cbd5e1; margin-bottom: 25px; font-size: 1.1rem;">Domina la lógica de programación con nuestra colección completa.</p>
        <a href="/ejercicios-resueltos/" style="display: inline-block; background-color: #3b82f6; color: white; padding: 12px 30px; border-radius: 50px; text-decoration: none; font-weight: 700; font-size: 1.1rem; transition: background 0.2s;" onmouseover="this.style.background='#2563eb'" onmouseout="this.style.background='#3b82f6'">
            Ver Más Ejercicios Resueltos
        </a>
    </div>

</article>
]]></content:encoded>
					
					<wfw:commentRss>https://pseint.org/determinar-ano-bisiesto-pseint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
