miércoles, 15 de febrero de 2017

Ejercicio de Estructuras Selectivas


Introducción

Las estructuras selectivas son parte fundamental de todo lenguaje de programación, ya que es por medio de ellas que un programador puede indicarle al computador qué "decidir" dependiendo de una o más condiciones que se cumplen a partir de los datos recibidos.

Existen básicamente dos tipos de estructuras selectivas: SI (con todas sus variantes) y SEGÚN SEA. Asumiendo que se conoce el funcionamiento de ambas estructuras procederemos a desarrollar un ejercicio para demostrar su utilidad y su sintaxis en el lenguaje de programación C#.

Planteamiento

Se desea crear un programa que simule la compra de entradas para una función de cine. El programa debe mostrar un menú que muestre las películas en cartelera:

[1] El Impresor Asesino III (Terror, clasificación C)
[2] while(true){Hasta que este bucle termine} (Drama, clasificación B)
[3] ¿Dónde está mi ; ? (Comedia, clasificación TP)
[4] Canahuati: El Prodigio de la Informática (Histórica, clasificación TP)

Luego de seleccionar la película el usuario deberá ingresar la cantidad de entradas a comprar, indicando cuántas son para adultos y cuántas para niños. Las entradas para adultos tienen un valor de $3.50 y las de niños $2.00, sin embargo no puede comprar entradas para niños en las películas que no sean clasificación TP (Todo Público).

Al final se deberá mostrar el título de la película, la clasificación de la misma y su género, también la cantidad de entradas de adultos y de niños y el total a cancelar.

Solución

Para este caso utilizaremos una estructura según sea para la selección de la película y otras estructuras si para las validaciones correspondientes.


Nótese que la estructura "según sea" es útil cuando se debe comparar una misma variable contra distintos valores puntuales, en cambio "si" se utilizará cuando se evalúen rangos de valores, condiciones que deben cumplir diferentes variables o condiciones combinadas por medio de operadores lógicos (no, y, o).

martes, 7 de febrero de 2017

Números Primos en un Rango

Enunciado

Leer un valor inicial y un valor final y validar que el inicial sea menor que el final. Mostrar todos los números primos que se encuentren en el rango dado por ambos valores.

Solución

Introducción

Este ejercicio es uno de los ejemplos más comunes que se plantean para la utilización de estructuras de control, ya que implica estructuras condicionales y repetitivas.

Lo primero que se requiere para resolverlo es tener una definición clara de lo que es un número primo: "En matemáticas, un número primo es un número natural mayor que 1 que tiene únicamente dos divisores distintos: él mismo y el 1." (https://es.wikipedia.org/wiki/Número_primo)

Es decir que si el número que se está evaluando es divisible entre cualquier otro número que no sea 1 o sí mismo, dicho número no es primo.

Paso 1: Verificar si un número es primo

Cuando se comienza a programar y se tiene un problema en que se debe ejecutar una acción n veces es recomendable definir cómo se resuelve una vez y luego adaptar esa solución a las n veces (dentro de un bucle). Así pues, tenemos que iniciar encontrando la forma de verificar si un número es o no primo.
Tomaremos como ejemplo el 7. Si realizáramos manualmente el procedimiento de verificación, iniciaríamos dividiendo el 7 entre 2 (el primer entero después del 1), y verificando si alguno de los números anteriores a él lo divide de manera exacta (residuo 0).
7 / 2 = 3 (residuo 1)
7 / 3 = 2 (residuo 1)
7 / 4 = 1 (residuo 3)
7 / 5 = 1 (residuo 2)
7 / 6 = 1 (residuo 1)
De esta forma se demuestra que 7 no es divisible sino solamente entre sí mismo y el 1.
En un bucle podríamos definir entonces:
Booleano bandera
Desde i=2 hasta i>7, 1
    bandera = verdadero
    Si 7 % i == 0 entonces
        bandera = falso
    Fin_si
    Si bandera == verdadero
         Imprimir “Es Primo”
     Fin_si
Fin_desde

Nótese la utilización de una variable booleana bandera que servirá para indicar si el número es primo o no, ya que el divisor de un número, en caso de que exista, puede encontrarse al principio, al final o en el medio del rango de números menores del mismo. Este seudo-código puede optimizarse, pero para efectos de explicación lo dejaremos así.

Paso 2: Validar los valores límites

Iniciaremos el algoritmo, puesto que, en comparación al proceso anterior, un condicional no representa un obstáculo.
Inicio
Entero ini=0, fin=0, i=0, j=0
Booleano bandera

Leer(ini)
Leer(fin)

Si ini > fin entonces
Imprimir “Error! El valor inicial debe ser menor al final”
Sino
Desde i=ini hasta i==fin, 1
Desde j=2 hasta j>i, 1
bandera = verdadero
     Si i % j == 0 entonces
         bandera = falso
     Fin_si
     Si i <> 1 ^ bandera == verdadero
          Imprimir i + “, ”
     Fin_si
Fin_desde
Fin_desde
Fin_si

Fin

Código

Si bien, una habilidad que todo programador debe desarrollar es la de "correr" su propio código, mentalmente o en papel, no está de más ver la ejecución del programa en el lenguaje que estamos aprendiendo: C#.

Este pequeño programa puede mejorarse en cuanto a validaciones y optimizarse para que sea más eficiente, así que las sugerencias de mejora son bienvenidas.