Lógica de Programación — Sesión 3.0
Puente PSInt → C# (Consola) · Variables · Tipos · Entrada/Salida · Condicionales
1/1

Sesión 3.0

Todo lo visto en PSInt, ahora “bien escrito” en C#

Meta: traducir conceptos, no memorizar sintaxis
Herramienta: consola + pruebas por casos
Salida: 1 programa corto + 3 casos (incluye bordes)

Navegación: ← → · Pantalla completa: F

Objetivos (universitario)

  • Escribir la estructura mínima de un programa de consola en C#.
  • Declarar variables con tipos correctos (int, decimal, bool, string).
  • Leer, convertir y validar entrada por consola (Parse/TryParse).
  • Implementar reglas con if/else y switch sin ambigüedad.

C# es estricto con tipos: eso te obliga a pensar mejor el modelo.

Mapa mental: PSInt → C#

PSInt C# --------------------------------------------------------- Proceso / FinProceso static void Main(...) { ... } Escribir Console.WriteLine(...) Leer x var s = Console.ReadLine() x = int.Parse(s) / TryParse Entero / Real / Cadena int / double|decimal / string Si / Sino / FinSi if / else Segun / FinSegun switch Y / O / No && / || / !

La lógica es la misma; cambia el “cómo se escribe”.

Cómo inicia un programa (plantilla mínima)

using System; class Program { static void Main(string[] args) { Console.WriteLine("Hola, mundo"); } }

Tu programa vive dentro de Main. Primero lo hacemos simple, luego lo organizamos.

Tipos de datos (lo que debes dominar ya)

Numéricos

int edad = 20; // enteros decimal precio = 12500m; // dinero (más seguro) double x = 3.14; // cálculo científico

Tip: dinero → decimal (usa sufijo m).

Texto y lógico

string ciudad = "Cali"; bool esValido = true;

bool solo puede ser true/false.

Entrada por consola (sin fallar)

Versión directa (Parse)

Console.Write("Edad: "); int edad = int.Parse(Console.ReadLine()!);

Si el usuario escribe texto, esto puede fallar.

Versión robusta (TryParse)

Console.Write("Edad: "); string s = Console.ReadLine() ?? ""; bool ok = int.TryParse(s, out int edad); if (!ok) { Console.WriteLine("Entrada inválida."); return; }

Universitario: valida entrada o define precondición explícita.

Operadores (repaso rápido)

Aritméticos

+ - * /

Comparación

== != > >= < <=

Lógicos

&& (AND) || (OR) ! (NOT)

Si mezclas AND/OR, usa paréntesis.

Condicionales (if / else)

if (edad >= 18) { Console.WriteLine("Mayor de edad"); } else { Console.WriteLine("Menor de edad"); }

No hay “FinSi”: en C# mandan las llaves { }.

Selección por categorías (switch)

Console.Write("Tipo (1=Moto, 2=Carro, 3=Camión): "); int tipo = int.Parse(Console.ReadLine()!); decimal baseTarifa = tipo switch { 1 => 6000m, 2 => 12000m, 3 => 20000m, _ => throw new Exception("Tipo inválido") };

switch ayuda cuando la regla es “según categoría”.

Ejemplo completo (IVA + descuento)

El mismo ejemplo de PSInt, ahora en C# con decimal.

Console.Write("Precio base: "); decimal precioBase = decimal.Parse(Console.ReadLine()!); Console.Write("IVA (%): "); decimal ivaPct = decimal.Parse(Console.ReadLine()!); Console.Write("Descuento (%): "); decimal descPct = decimal.Parse(Console.ReadLine()!); decimal ivaVal = precioBase * (ivaPct / 100m); decimal subtotal = precioBase + ivaVal; decimal descVal = subtotal * (descPct / 100m); decimal total = subtotal - descVal; Console.WriteLine($"Total: {total}");

Prueba mínima: descPct=0 debe dejar total=subtotal.

Prueba por casos (lo que exijo)

  • 1 caso normal (valores típicos).
  • 1 caso borde (0, umbral exacto, etc.).
  • 1 caso “sanity” (¿el resultado tiene sentido?).

Sin pruebas por casos, no hay evidencia de corrección.

Actividad (obligatoria)

Taller en clase: reescribe tu solución de “compra con envío” en C#.

  • Entradas: subtotal (decimal), ciudad (string), tieneCupon (S/N).
  • Reglas: cupón y envío gratis por umbral (prioridad).
  • Salida: total.
  • Entrega: .cs o captura del código + 3 casos de prueba documentados.
  • Enfócate en: tipos + if/else + claridad de reglas.

Reto (opcional, sin nota)

Modo robusto: reemplaza Parse por TryParse y maneja entrada inválida sin romper el programa.

Si lo haces, obtienes retroalimentación extra (no calificación).

Esto prepara tu proyecto: entrada real casi siempre trae errores.

Ticket de salida (5 min)

  • ¿Qué tipo usaste para dinero y por qué?
  • Escribe 1 borde que probaste (con valores).
  • ¿Qué regla de prioridad implementaste en tu if/else?

Objetivo: pasar de pseudocódigo a C# sin perder el modelo.