¿De qué va este proyecto?
El proyecto va a ser complicado. Sé que para quien está aprendiendo programación, será una tarea ardua. Sin embargo, tienes que ir saliendo de tu zona de confort. Está muy bien conocer todos los elementos básicos de programación, pero tienes que saber utilizarlos en proyecto prácticos.
Para conseguir pasar todas las secciones de este proyecto, deberás demostrar que has conseguido adquirir todos los conocimientos enseñados a lo largo de los capítulos de este curso.
Espacio publicitario
El proyecto va a ser para crear una calculadora con las cuatro operaciones aritméticas básicas, y le añadiremos alguna funcionalidad extra, como la de calcular potencias.
En parte, ya sabes un poco de esto, lo dimos en el capítulo 16 con las sumas, restas, etc.
Con el fin de que todo el mundo pueda seguirlo, he decidido partir el proyecto en varias fases. En cada fase, construiremos una parte del programa completo. Siempre intenta solucionar cada parte, no te rindas fácil, pero si no puedes completarla, consulta la solución. A partir de ella, podrás empezar con la siguiente parte.
Esto lo hago así, ya que es muy fácil hacer mal una parte del programa, y que no puedas intentar ni siquiera solucionar el resto.
Tienes total libertad para hacer el programa de la forma
que creas. Por ejemplo, si yo he utilizado un bucle
Para
de PseInt, no quiere decir que lo hayas
hecho mal con un bucle Mientras
.
Lo único que debes cumplir, son los objetivos que te vaya
proponiendo, si los cumples, lo tienes perfecto.
Esto lo indico, porque en programación, hay muchas
posibles soluciones para un mismo problema.
Sección 1: Creación de la interfaz en la consola
1.1 - Creando el menú de opciones estático
La primera parte del proyecto consiste en que crees una interfaz de usuario en la consola. Esta interfaz será un sencillo menú con todas las opciones de la calculadora. Lo que tienes que incluir en el menú, son las siguientes cosas:
- Título de la calculadora (puede llamarse "Calculadora" o lo que tú quieras).
- Opciones numeradas:
- Suma
- Resta
- Multiplicación
- División
- Módulo
- Potencia
- Salir
- Aviso de que el usuario tiene que introducir una opción.
De momento, este menú, será estático, es decir, una serie de texto mostrado una vez en la consola.
Con
Escribir
, puedes crear menús en la consola; simplemente son texto.
Intenta no tirar de la solución a la más mínima, pero si no te ves capaz de hacer alguna parte, sin dudarlo ves a verla y continúa tu proyecto con el código expuesto en dicha solución.
La solución a esta parte del proyecto, es crear un
menú a base de Escribir
. Con un elemento
por línea, podemos definir cada una de las opciones
que podrá elegir el usuario.
De momento, son solo opciones informativas. Aún no llevan la lógica para ejecutarlas.
Algoritmo Calculadora
// Menú de la calculadora
Escribir "Calculadora"
Escribir "1. Suma"
Escribir "2. Resta"
Escribir "3. Multiplicación"
Escribir "4. División"
Escribir "5. Módulo"
Escribir "6. Potencia"
Escribir "7. Salir"
Escribir ""
Escribir "Seleccione una opción: "
FinAlgoritmo
1.2 - Entrada de datos del usuario
Después de tener el menú creado, es el momento de añadir una entrada de datos en el programa. Esta entrada de datos, estará diseñada para que el usuario ponga una de las opciones del menú.
La solución a este apartado, es tan simple como añadir
un Leer
, después del código del apartado
anterior. Para ello, tenías que definir primero una
variable de tipo entero, para almacenar el valor del
usuario. Para posteriormente poder utilizarlo.
Algoritmo Calculadora
// Se declara la variable para las opciones del menú
Definir opcion Como Entero
// Menú de la calculadora
Escribir "Calculadora"
Escribir "1. Suma"
Escribir "2. Resta"
Escribir "3. Multiplicación"
Escribir "4. División"
Escribir "5. Módulo"
Escribir "6. Potencia"
Escribir "7. Salir"
Escribir ""
Escribir "Seleccione una opción: "
// Entrada de opción para el usuario
Leer opcion
FinAlgoritmo
1.3 - Condicional para llamar a las funciones
Lo siguiente que quiero que hagas, es crear un condicional que evalúe las posibles opciones puestas por el usuario.
Por el momento, no quiero que añadas estas llamadas a función, ya que todavía, no las tenemos creadas. Solo quiero que apliques la condición necesaria para cada una de las opciones.
Piensa en contemplar una opción por si el usuario introduce una opción incorrecta en la consola.
En este caso, podías utilizar perfectamente un
condicional Si-entonces o un condicional
Segun
. Para este caso concreto, prefiero
la segunda opción, ya que las opciones de un menú, son
algo bastante repetitivo.
Algoritmo Calculadora
// Se declara la variable para las opciones del menú
Definir opcion Como Entero
// Menú de la calculadora
Escribir "Calculadora"
Escribir "1. Suma"
Escribir "2. Resta"
Escribir "3. Multiplicación"
Escribir "4. División"
Escribir "5. Módulo"
Escribir "6. Potencia"
Escribir "7. Salir"
Escribir ""
Escribir "Seleccione una opción: "
// Entrada de opción para el usuario
Leer opcion
// Condicional para llamar a cada función del menú
Segun opcion Hacer
1: // Llamar a la función de suma
2: // Llamar a la función de resta
3: // Llamar a la función de multiplicación
4: // Llamar a la función de división
5: // Llamar a la función de módulo
6: // Llamar a la función de potencia
7: // Salir
De Otro Modo:
Escribir "Opción inválida. Por favor, seleccione una opción válida."
FinSegun
FinAlgoritmo
1.4 - Menú infinito
Lo siguiente que tenemos que hacer, para ir terminando con esta primera parte del proyecto, es envolver la interfaz del usuario con un bucle que repita el menú de forma indefinida.
Espacio publicitario
Si introduces cualquier valor en la consola, el programa
finaliza. No queremos que ocurra eso.
Lo que queremos, es que si el usuario se equivoca, que
introduzca de nuevo otro valor. Si lo pone bien, que se
llame a la función correspondiente y luego, le deje
utilizar cualquier opción.
La forma de salir de este bucle, será con la opción 7 (Salir). Deberás hacer funcional esa opción.
No te compliques en exceso para hacer esto, tan solo recuerda mis palabras: Ejecuta el menú y el condicional con la entrada de datos (todo) Hasta Que la opción valga 7.
La resolución de esta tarea, parece complicada en
exceso. Sin embargo, es tan fácil como añadir dos
simples líneas con un bucle Repetir
.
Con esto, no me malinterpretes, no quiero que pienses que realizar el apartado es fácil. Llegar a esta conclusión, te habrá costado o no lo habrás conseguido. Ahora, ya sabes para la próxima, que puedes hacer esto tan sencillo.
Algoritmo Calculadora
// Se declara la variable para las opciones del menú
Definir opcion Como Entero
// Se crea un bucle indeterminado que repite el menú
Repetir
// Menú de la calculadora
Escribir "Calculadora"
Escribir "1. Suma"
Escribir "2. Resta"
Escribir "3. Multiplicación"
Escribir "4. División"
Escribir "5. Módulo"
Escribir "6. Potencia"
Escribir "7. Salir"
Escribir ""
Escribir "Seleccione una opción: "
// Entrada de opción para el usuario
Leer opcion
// Condicional para llamar a cada función del menú
Segun opcion Hacer
1: // Llamar a la función de suma
2: // Llamar a la función de resta
3: // Llamar a la función de multiplicación
4: // Llamar a la función de división
5: // Llamar a la función de módulo
6: // Llamar a la función de potencia
7: // Salir
De Otro Modo:
Escribir "Opción inválida. Por favor, seleccione una opción válida."
FinSegun
Hasta Que opcion = 7
FinAlgoritmo
Sección 2: Crear las funcionalidades de la calculadora
Ahora que ya tenemos la interfaz de usuario lista, ha llegado el momento de entrar en faena con la lógica de la calculadora. Para este proceso, crearemos una función para cada tipo de operación.
2.1 - Funciones para suma, resta, multiplicación y división
Puesto que la lógica de estas cuatro funciones es muy parecida, he decidido agruparla en un apartado.
Lo que tienes que hacer concretamente, es crear cuatro funciones para estas cuatro operaciones básicas. Recuerda que siempre que no recuerdes algo, valga la redundancia, puedes volver a las partes del temario que necesites. Por eso están los temas religiosamente divididos.
Para crear estas funciones, deberás seguir estas normas:
- Las funciones tendrán dos parámetros. Eso quiere decir, que las operaciones serán siempre con dos números.
- Deberás hacer que el resultado de la operación sea devuelto cuando se llame a la función correspondiente
En el capítulo de las funciones, puedes hacerte una idea de como hacer estas funciones. Revísalo si es necesario.
Las funciones, son muy parecidas, de forma que si has sabido hacer una, no habrás tenido dificultades con el resto.
// Esta función calcula la suma de dos valores
Funcion r<-suma(a, b)
r <- a + b
Fin Funcion
// Esta función calcula la resta de dos valores
Funcion r<-resta(a, b)
r <- a - b
Fin Funcion
// Esta función calcula la multiplicación de dos valores
Funcion r<-multiplicacion(a, b)
r <- a * b
Fin Funcion
// Esta función calcula la división de dos valores
Funcion r<-division(a, b)
r <- a / b
Fin Funcion
Algoritmo Calculadora
// Se declara la variable para las opciones del menú
Definir opcion Como Entero
// Se crea un bucle indeterminado que repite el menú
Repetir
// Menú de la calculadora
Escribir "Calculadora"
Escribir "1. Suma"
Escribir "2. Resta"
Escribir "3. Multiplicación"
Escribir "4. División"
Escribir "5. Módulo"
Escribir "6. Potencia"
Escribir "7. Salir"
Escribir ""
Escribir "Seleccione una opción: "
// Entrada de opción para el usuario
Leer opcion
// Condicional para llamar a cada función del menú
Segun opcion Hacer
1: // Llamar a la función de suma
2: // Llamar a la función de resta
3: // Llamar a la función de multiplicación
4: // Llamar a la función de división
5: // Llamar a la función de módulo
6: // Llamar a la función de potencia
7: // Salir
De Otro Modo:
Escribir "Opción inválida. Por favor, seleccione una opción válida."
FinSegun
Hasta Que opcion = 7
FinAlgoritmo
2.2 - Funcionalidad de módulo
Ha llegado el momento de crear una función algo más difícil, la denominada "módulo".
La función debe ser capaz de devolver el resto de una división entre dos números. Por ejemplo, la división de 10 entre 3, da como resultado 3. El resto es 1. Pues eso mismo es lo que quiero que haga.
El operador para módulo en PseInt es %
.
Utilízalo como los otros cuatro operadores.
Otra forma de expresar este operador en PSeInt es
escribiendo MOD
.
Te dejo el código de la función. Debes colocarla fuera del algoritmo, junto con las otras cuatro.
// Esta función calcula el módulo de dos valores
Funcion r<-modulo(a, b)
r <- a % b
Fin Funcion
2.3 - Funcionalidad de potencia
Ahora, crea la última función, la del cálculo de potencias.
En PSeInt, contamos con un operador de flecha hacia
arriba, que puedes escribir con el carácter
^
del teclado. También lo podrás encontrar en
la sección del lateral izquierdo, llamada "Operadores y
Funciones".
Espacio publicitario
Por si no sabes lo que es una potencia, se trata de un número elevado a otro, es decir, multiplicado por él mismo un número x de veces.
Por ejemplo, si quieres elevar el número 2 a 4, será el
equivalente a multiplicar
2 * 2 * 2 * 2. Esta tarea
repetitiva, se automatiza en matemáticas con el cálculo de
potencias.
Para representar el ejemplo en PSeInt, sería
2 ^ 4. Con esto ya tienes una
buena pista para crear la función.
// Esta función calcula la potencia de dos valores
Funcion r<-potencia(a, b)
r <- a ^ b
Fin Funcion
Sección 3: Asociar la lógica de las funciones a la interfaz de usuario
Ahora que ya tienes una parte en el programa con la lógica, y otra parte con la interfaz de usuario, es el momento de asociar la lógica a dicha interfaz.
Para este propósito, tan solo tienes que llamar a las funciones en cada opción del menú. El problema, es que las llamadas, deben llevar los dos valores que quiera el usuario. Aún no tenemos la lógica creada para esto. Lo haremos más adelante. De momento, solo haz las llamadas y les das dos valores cualesquiera, tan solo, para que no te marque errores.
Las llamadas, con el fin de almacenar el resultado deben estar en una variable. Puedes crear una variable que se llame, por ejemplo, resultado. La puedes utilizar de forma general para todas las llamadas. Solo, declárala fuera del condicional y dentro del algoritmo.
Sencillamente, haremos esto. De momento, no hará nada,
porque no hay ni un Escribir
que muestre
el resultado, pero ya tendremos la lógica de la
calculadora asociada a la interfaz de usuario.
// Esta función calcula la suma de dos valores
Funcion r<-suma(a, b)
r <- a + b
Fin Funcion
// Esta función calcula la resta de dos valores
Funcion r<-resta(a, b)
r <- a - b
Fin Funcion
// Esta función calcula la multiplicación de dos valores
Funcion r<-multiplicacion(a, b)
r <- a * b
Fin Funcion
// Esta función calcula la división de dos valores
Funcion r<-division(a, b)
r <- a / b
Fin Funcion
// Esta función calcula el módulo de dos valores
Funcion r<-modulo(a, b)
r <- a % b
Fin Funcion
// Esta función calcula la potencia de dos valores
Funcion r<-potencia(a, b)
r <- a ^ b
Fin Funcion
Algoritmo Calculadora
// Se declara la variable para las opciones del menú
Definir opcion Como Entero
Definir resultado Como Real
// Se crea un bucle indeterminado que repite el menú
Repetir
// Menú de la calculadora
Escribir "Calculadora"
Escribir "1. Suma"
Escribir "2. Resta"
Escribir "3. Multiplicación"
Escribir "4. División"
Escribir "5. Módulo"
Escribir "6. Potencia"
Escribir "7. Salir"
Escribir ""
Escribir "Seleccione una opción: "
// Entrada de opción para el usuario
Leer opcion
// Condicional para llamar a cada función del menú
Segun opcion Hacer
1: resultado <- suma(0,0)
2: resultado <- resta(0,0)
3: resultado <- multiplicacion(0,0)
4: resultado <- division(0,0)
5: resultado <- modulo(0,0)
6: resultado <- potencia(0,0)
7: // Salir
De Otro Modo:
Escribir "Opción inválida. Por favor, seleccione una opción válida."
FinSegun
Hasta Que opcion = 7
FinAlgoritmo
Sección 4: Crea y asocia la lógica de entrada de datos
Ahora, si te pregunto en que parte pondrías los dos Leer
para pedirle al usuario los dos números con los que quiere
operar, ¿qué me responderías?
Este ejercicio, trata de eso, de que pienses como y donde
colocar la solicitud de los dos valores numéricos al
usuario. Después, tendrás que pasar esas dos entradas de
datos, a cada llamada del menú. Lo importante es que
consigas que funcione, si lo has hecho más o menos óptimo,
no importa.
El programa, después de hacer la llamada a una función con los datos del usuario, deberá responder en la consola con el resultado.
Este es la parte más complicada del proyecto. Si no la consigues hacer, tómatelo con mucha calma. Es perfectamente normal. Mira la solución y analízala poco a poco, mira cada parte y detente a pensar como funciona.
Puedes utilizar un condicional que contemple si la opción está entre 1 y 6, que solicite los números. Esto antes del condicional
Segun
. Si crees que esto es muy complicado (que lo es cuando empiezas con programación), hazlo como sabes, repitiendo en cada operación la solicitud de los dos valores al usuario.
He declarado las dos variables, numero1
y
numero2
, en la zona que he dejado para
variables en el algoritmo. Estas se necesitan para
guardar los valores del usuario.
Lo siguiente que he hecho, has sido crear un condicional después de pedir la opción del menú. La condición de este condicional se cumple, solo si la opción elegida está entre 1 y 6. Si no es así, o se sale del programa con la opción 7, o se le avisa al usuario, de opción inválida con cualquier otro valor numérico.
En el condicional Segun
, puedes ver, que
he hecho las llamadas con los valores de entrada del
usuario.
// Esta función calcula la suma de dos valores
Funcion r<-suma(a, b)
r <- a + b
Fin Funcion
// Esta función calcula la resta de dos valores
Funcion r<-resta(a, b)
r <- a - b
Fin Funcion
// Esta función calcula la multiplicación de dos valores
Funcion r<-multiplicacion(a, b)
r <- a * b
Fin Funcion
// Esta función calcula la división de dos valores
Funcion r<-division(a, b)
r <- a / b
Fin Funcion
// Esta función calcula el módulo de dos valores
Funcion r<-modulo(a, b)
r <- a % b
Fin Funcion
// Esta función calcula la potencia de dos valores
Funcion r<-potencia(a, b)
r <- a ^ b
Fin Funcion
Algoritmo Calculadora
// Se declara la variable para las opciones del menú
Definir opcion Como Entero
Definir resultado Como Real
Definir numero1 Como Real
Definir numero2 Como Real
// Se crea un bucle indeterminado que repite el menú
Repetir
// Menú de la calculadora
Escribir "Calculadora"
Escribir "1. Suma"
Escribir "2. Resta"
Escribir "3. Multiplicación"
Escribir "4. División"
Escribir "5. Módulo"
Escribir "6. Potencia"
Escribir "7. Salir"
Escribir ""
Escribir "Seleccione una opción: "
// Entrada de opción para el usuario
Leer opcion
// Si la opción no es Salir (7), solicitar los números
Si opcion >= 1 Y opcion <= 6 Entonces
Escribir "Introduzca el primer número para operar: "
Leer numero1
Escribir "Introduzca el segundo número para operar: "
Leer numero2
FinSi
// Condicional para llamar a cada función del menú
Segun opcion Hacer
1: resultado <- suma(numero1,numero2)
Escribir "El resultado de la suma es: " resultado
2: resultado <- resta(numero1,numero2)
Escribir "El resultado de la resta es: " resultado
3: resultado <- multiplicacion(numero1,numero2)
Escribir "El resultado de la multiplicación es: " resultado
4: resultado <- division(numero1,numero2)
Escribir "El resultado de la división es: " resultado
5: resultado <- modulo(numero1,numero2)
Escribir "El resto de la división es: " resultado
6: resultado <- potencia(numero1,numero2)
Escribir "El resultado del cálculo es: " resultado
7: // Salir
De Otro Modo:
Escribir "Opción inválida. Por favor, seleccione una opción válida."
FinSegun
Hasta Que opcion = 7
FinAlgoritmo
Con este código, tienes el programa completo. Tan solo falta añadir el mensaje de salida en la opción 7.
Sección 5: Última pincelada y pruebas del programa.
5.1 - Mensaje de salida del programa
Como último detalle, quiero que le añadas a la opción de salir, un pequeño mensaje que avise al usuario de que se ha cerrado la calculadora, o una despedida; el mensaje es libre.
La solución, es poner un sencillo
Escribir
:
7: Escribir "¡Hasta la próxima!"
5.2 - Pruebas del programa
Si no tienes quien pruebe los programas por ti, tendrás que aprender a hacerlo por tu cuenta. Parece tarea fácil, pero en programas complejos y grandes, tendrás que tener muchos flancos en cuenta.
Espacio publicitario
Cuando pruebes un programa, deberás probar todo lo que se te ocurra. Las cosas que dejes sin probar, podrían tener fácilmente errores de lógica.
Para esta sección, no tendrás solución en la parte de las soluciones, tienes que ir probando todo lo que te diga aquí mismo. Si te funciona como a mi, es que lo tienes perfecto. Además, si se te ocurre alguna prueba extra que no comente, hazla, nunca está de más.
¿Por donde empezamos?
Primero, ejecutaremos el programa y probaremos una opción numérica no válida:
Seleccione una opción:
> 15
Opción inválida. Por favor, seleccione una opción válida.
Perfecto. Esta parte del programa funciona.
Ahora, prueba cada una de las operaciones, de la 1 a la 6.
Si te funcionan todas, prueba también alguna de ellas con valores decimales, si no lo has hecho ya.
De momento, vemos que funciona todo, el bucle indeterminado nos deja ir eligiendo infinitas opciones del menú y sale cuando queremos.
Los usuarios son impredecibles. No podemos esperar que no
vayan a hacer cosas inesperadas. ¿Qué ocurre si en lugar
de un número, pones una letra en la entrada de datos de
cualquier Leer
?
Seleccione una opción:
> Q
Lin 54 (inst 1): ERROR 120: No coinciden los tipos (OPCION).
Este problema, no lo vamos a solucionar en este curso de
programación con PSeInt, lo debes tener en cuenta para
cuando estudies un lenguaje de programación. En todos o en
la mayoría, tenemos lo que se conoce como manejo de
excepciones y control de datos. Estas técnicas son muy
específicas para cada lenguaje.
En esta plataforma lo aprenderás a hacer con Python, en
los siguientes cursos.
El manejo de excepciones son como condicionales, que hacen cosas en torno a si ocurren ciertos errores (si ocurre este error, haz esto para evitarlo).
Ahora sí, doy por concluido este curso. Espero que haya
sido de tu agrado y que hayas adquirido muchos
conocimientos.
Quizás piensas que no sabes hacer muchas cosas en
programación por tu cuenta. Es normal, pero con un poco de
práctica en algún lenguaje de programación en concreto,
verás que muy pronto empiezas a hacer tus proyectos
realidad y que en verdad, si que sabes hacer más de lo que
piensas.
Por cierto, échale un vistazo a la sección de diagrama de flujo que ha salido con la calculadora. Ya verás que locura. Al tener funciones, tiene hasta varios diagramas.
Espacio publicitario
Espacio publicitario
Espacio publicitario