Skip to content

Especificación de estructuras algorítmicas

Este documento define cómo se escriben, se dibujan y se traducen a PSeInt las estructuras de la Unidad IV. Amplía la especificación de pseudocódigo de la Unidad III sin modificar lo que ya define.

Este documento define cómo se escriben, se dibujan y se traducen a PSeInt las estructuras de la Unidad IV. La notación de la Unidad III (tipos, identificadores, Entrada:, Mostrar, =, comentarios) se conserva tal cual.


EstructuraPseudocódigo de la materiaPSeInt (perfil Flexible)Diagrama de flujo
División enteratrunc(x)trunc(x)Dentro de un proceso
Redondeoredon(x)redon(x)Dentro de un proceso
Residuoa % ba % bDentro de un proceso
Condicional simpleSi … Entonces … FinSiSi … Entonces … FinSiRombo, rama “No” sin instrucciones
Condicional dobleSi … Entonces … Sino … FinSiSi … Entonces … SiNo … FinSiRombo con dos ramas
Condicional encadenadaSi … Sino Si … Sino … FinSiSi anidados dentro de cada SiNo (sección 6.3)Rombos en cascada por la rama “No”
Condicional múltipleSegun <variable> Hacer … De Otro Modo: … FinSegunSegun <variable> Hacer … De Otro Modo: … FinSegunRombo con una salida por valor
Condicional anidadaSi dentro de otro SiIgualRombo dentro de una rama
MientrasMientras … Hacer … FinMientrasIgualRombo con regreso (sección 9.8)
RepetirRepetir … Hasta Que …IgualCuerpo y rombo con regreso (sección 9.8)
DesdeDesde i = a Hasta b Con Paso p Hacer … FinDesdePara i = a Hasta b Con Paso p Hacer … FinParaEquivalencia con Mientras (sección 9.8)

PSeInt no distingue mayúsculas de minúsculas en las palabras clave: Sino y SiNo son equivalentes (verificado en la Unidad III con PSeInt 20240122).


Una función predefinida es una operación que ya existe y que se usa escribiendo su nombre y, entre paréntesis, el valor sobre el que actúa. Su resultado puede formar parte de cualquier expresión.

FunciónQué devuelveEjemploResultado
trunc(x)La parte entera de x, sin redondeartrunc(7385 / 3600)2
redon(x)El entero más cercano a xredon(2.5)3 (pendiente de verificación en PSeInt: regla de desempate en .5)
abs(x)El valor absolutoabs(-12)12

Reglas:

  • Para contar unidades completas se usa trunc, nunca redon.
  • Para redondear un importe a centavos: redon(x * 100) / 100.
  • trunc de un negativo se acerca al cero: trunc(-2.5) es -2.
  • Estos nombres ya están prohibidos como identificadores (especificación de pseudocódigo, sección 4.1).

Una condición es una expresión lógica (Unidad II) que vale VERDADERO o FALSO.

ElementoNotaciónEjemplo
Relacionales=, <>, <, >, <=, >=subtotal < 300
ConjunciónYsemestre >= 1 Y semestre <= 10
DisyunciónOedad < 0 O edad > 120
NegaciónNONO (opcion = 3)

Reglas:

  • Un rango se escribe con dos comparaciones unidas por Y. 1 <= semestre <= 10 no es válido.
  • Dentro de una condición, = compara (traducción a PSeInt, sección 11.3).
  • Se recomiendan paréntesis cuando se mezclan Y y O: (a % 4 = 0 Y a % 100 <> 0) O a % 400 = 0.
  • Se prefieren códigos numéricos (1 efectivo, 2 tarjeta) frente a respuestas de texto ("S", "s", "si") para evitar diferencias de mayúsculas. Pendiente de verificación: si PSeInt distingue mayúsculas al comparar cadenas.

Si <condición> Entonces
<instrucciones>
FinSi

Si la condición es falsa, no se ejecuta nada y el algoritmo continúa después de FinSi. Patrón frecuente: valor por omisión + condicional simple.

total = subtotal
Si subtotal < MINIMO_ENVIO_GRATIS Entonces
total = total + COSTO_ENVIO
FinSi
Si <condición> Entonces
<instrucciones si es verdadera>
Sino
<instrucciones si es falsa>
FinSi

Se ejecuta exactamente una de las dos ramas.

Cada nivel de estructura agrega cuatro espacios. Si, Sino y FinSi van alineados.


6. Condicional encadenada y condicional múltiple

Section titled “6. Condicional encadenada y condicional múltiple”

Se utiliza cuando la alternativa depende de rangos o de condiciones distintas que se revisan en orden.

Si peso <= 0 Entonces
Mostrar "Peso no válido"
Sino Si peso <= 1 Entonces
tarifa = TARIFA_HASTA_1KG
Sino Si peso <= 5 Entonces
tarifa = TARIFA_HASTA_5KG
Sino
tarifa = TARIFA_MAS_5KG
FinSi

Reglas:

  • Las condiciones se evalúan de arriba hacia abajo y se ejecuta solo la primera verdadera.
  • El orden importa: cada condición supone que las anteriores fueron falsas.
  • Un solo FinSi cierra toda la cadena.

6.2 Condicional múltiple (Segun) — contenido oficial 4.2.3

Section titled “6.2 Condicional múltiple (Segun) — contenido oficial 4.2.3”

Se utiliza cuando la alternativa depende del valor exacto de una variable entera o de un carácter.

Segun opcion Hacer
1:
Mostrar "Saldo disponible: $", saldo
2:
Mostrar "Monto a depositar: "
Entrada: monto
saldo = saldo + monto
3, 4:
Mostrar "Opción en mantenimiento"
De Otro Modo:
Mostrar "Opción no válida"
FinSegun

Reglas:

  • Cada caso es un valor (o varios separados por comas) seguido de :. Sus instrucciones van debajo con un nivel más de indentación.
  • Si el caso tiene una sola instrucción, puede escribirse en la misma línea: 1: Mostrar "Ventas".
  • De Otro Modo: es obligatorio en la materia. Atiende cualquier valor no previsto.
  • No se usan rangos ni condiciones en los casos (opcion > 3: no es válido). Para rangos se usa la condicional encadenada.

6.3 Traducción de la condicional encadenada a PSeInt

Section titled “6.3 Traducción de la condicional encadenada a PSeInt”

Pendiente de verificación: PSeInt no tiene una instrucción Sino Si en una sola línea. La traducción anida un Si dentro de cada SiNo y agrega un FinSi por cada Si:

Si peso <= 0 Entonces
Escribir "Peso no válido"
SiNo
Si peso <= 1 Entonces
tarifa = TARIFA_HASTA_1KG
SiNo
Si peso <= 5 Entonces
tarifa = TARIFA_HASTA_5KG
SiNo
tarifa = TARIFA_MAS_5KG
FinSi
FinSi
FinSi

La lógica no cambia. Por eso se dice que una cadena Sino Si es una forma compacta de escribir condicionales anidadas en la rama falsa.

SituaciónEstructura
Opción de un menú, código de producto, día de la semanaMúltiple (Segun)
Rangos de peso, de consumo, de calificaciónEncadenada (Sino Si)
Condiciones sobre variables distintasEncadenada o anidada

7. Condicional anidada — contenido oficial 4.2.4

Section titled “7. Condicional anidada — contenido oficial 4.2.4”

Una condicional anidada es una condicional escrita dentro de una rama de otra. La condición interior solo se evalúa si la exterior llevó a esa rama.

Si monto <= saldo Entonces
Si monto % 100 = 0 Entonces
saldo = saldo - monto
Mostrar "Retire su efectivo"
Sino
Mostrar "Solo se entregan billetes de $100"
FinSi
Sino
Mostrar "Saldo insuficiente"
FinSi

Reglas:

  • Se anida cuando la segunda decisión depende de la primera o cuando cada falla necesita una respuesta distinta.
  • Si dos condiciones llevan a la misma acción y no importa cuál falló, se prefiere una condición compuesta con Y.
  • Más de tres niveles de anidamiento es señal de que conviene reorganizar el algoritmo.

Se conservan los símbolos de la especificación de diagramas de flujo. Para las decisiones:

  • El rombo contiene solo la condición, sin Si ni Entonces: subtotal < MINIMO_ENVIO_GRATIS.
  • Cada salida del rombo lleva su etiqueta: Sí / No.
  • Las ramas se vuelven a unir en un solo punto antes de la siguiente instrucción.
  • Condicional simple: la rama No va directa al punto de unión.
  • Condicional múltiple: un rombo con la variable (opcion) y una salida etiquetada por cada valor, más una salida De otro modo.
Diagrama de flujo de una condicional simple: envío gratis Diagrama de flujo de una condicional doble: recibo de luz con validación

9. Estructuras repetitivas — contenidos oficiales 4.3.1 a 4.3.3

Section titled “9. Estructuras repetitivas — contenidos oficiales 4.3.1 a 4.3.3”
ElementoQué esEjemplo
CuerpoInstrucciones que se repitensuma = suma + calificacion
IteraciónCada ejecución del cuerpoLa tercera vuelta del ciclo
Condición de controlDecide si se repite otra vezpendiente > 0
Variable de controlVariable de la que depende la condiciónpendiente, i, opcion

La variable de control necesita tres momentos: inicialización (antes del ciclo), evaluación (en la condición) y actualización (dentro del cuerpo). Si falta la actualización, el ciclo no termina (ciclo infinito).

Mientras <condición> Hacer
<instrucciones>
FinMientras
  • La condición se evalúa antes de cada iteración. Si es falsa desde el principio, el cuerpo se ejecuta cero veces.
  • El ciclo continúa mientras la condición sea verdadera.
  • Uso típico: número de repeticiones desconocido. Por ejemplo, procesar datos hasta un valor centinela (un valor que indica el fin, como 0).
  • Con centinela se usa lectura previa: un dato se lee antes del ciclo y el siguiente al final del cuerpo.
Repetir
<instrucciones>
Hasta Que <condición>
  • La condición se evalúa después de cada iteración: el cuerpo se ejecuta al menos una vez.
  • El ciclo termina cuando la condición es verdadera (lógica inversa a Mientras).
  • Uso típico: validar una entrada y repetir un menú hasta elegir “Salir”.
Desde i = <inicio> Hasta <fin> Con Paso <paso> Hacer
<instrucciones>
FinDesde
  • Se usa cuando el número de repeticiones se conoce antes de empezar el ciclo (un valor fijo o un dato ya leído).
  • i toma el valor de inicio y aumenta paso al final de cada iteración. Con paso positivo, el ciclo se ejecuta mientras i <= fin.
  • Con Paso 1 es obligatorio en la materia, aunque PSeInt lo suponga, para que el paso siempre quede explícito.
  • Paso negativo para contar hacia atrás: Desde i = 10 Hasta 1 Con Paso -1 Hacer.
  • No se modifica i dentro del cuerpo.
  • Equivalencia con Mientras:
i = inicio
Mientras i <= fin Hacer
<instrucciones>
i = i + paso
FinMientras
PatrónInicialización (antes del ciclo)Dentro del ciclo
Contadorcontador = 0contador = contador + 1
Acumulador de sumasuma = 0suma = suma + dato
Acumulador de productoproducto = 1producto = producto * dato
Máximomayor = <valor menor que cualquier dato> o el primer datoSi dato > mayor Entonces mayor = dato FinSi
Mínimomenor = <valor mayor que cualquier dato> o el primer datoSi dato < menor Entonces menor = dato FinSi
Banderaencontrado = FALSOSi <condición> Entonces encontrado = VERDADERO FinSi

Un acumulador inicializado dentro del ciclo se reinicia en cada iteración. Es un error frecuente.

SituaciónCiclo
Se sabe cuántas veces antes de empezarDesde
No se sabe cuántas veces, y puede ser ningunaMientras
No se sabe cuántas veces, pero al menos unaRepetir
PseudocódigoPSeInt
Mientras … Hacer … FinMientrasIgual
Repetir … Hasta Que …Igual
Desde i = 1 Hasta n Con Paso 1 Hacer … FinDesdePara i = 1 Hasta n Con Paso 1 Hacer … FinPara

Pendiente de verificación: que el perfil Flexible acepte = en Para i = 1 (la sintaxis documentada de PSeInt usa Para i <- 1). Si no lo acepta, la traducción de Desde será la única excepción a la regla de asignar con = y se escribirá con <-.

  • Mientras: rombo con la condición. La rama Sí entra al cuerpo y una línea regresa al rombo. La rama No sale del ciclo.
  • Repetir: el cuerpo va primero. Después, un rombo con la condición de Hasta Que: la rama No regresa al inicio del cuerpo y la rama Sí sale.
  • Desde: se dibuja con su equivalencia en Mientras: un proceso de inicialización (i = 1), el rombo (i <= n), el cuerpo, un proceso de actualización (i = i + 1) y el regreso al rombo.
Diagrama de flujo de un ciclo Mientras: suma de cifras Diagrama de flujo de un ciclo Repetir: validación del semestre