Logo Studenta

Estructuras de decision pogramacion

¡Este material tiene más páginas!

Vista previa del material en texto

Universidad Nacional de Misiones
Facultad de Ingeniería
Informática
Guía Teórica Parte 3
Estructuras selectivas y repetitivas analizadas desde su uso
Plan 2013
DOCENTES
Ing. Alicia Rendón
Ing. Andrea Santander
Ing. Daniel Refosco
Ing. Juan Pablo Gross
Sr. Matías Krujoski
Sr. Walter Wasilewski
Facultad de Ingeniería. U.Na.M. – Juan Manuel de Rosas 325 - Oberá (Misiones.) CP 3360 –
Teléfonos/Fax: +54 03755 422169/422170 Fax: Interno 104. www.fio.unam.edu.ar.
E-mail:mailto:info@fio.unam.edu.ar
1
www.fio.unam.edu.ar
mailto:info@fio.unam.edu.ar
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Guía Teórica de Informática - Universidad Nacional de Misiones. Facultad de Ingeniería.
Los textos de este libro se distribuyen bajo una licencia Reconocimiento-CompartirIgual 3.0 Un-ported (CC BY-SA 3.0):
http://creativecommons.org/licenses/by-sa/3.0/deed.es_ES
Esta licencia permite:
Compartir: copiar y redistribuir el material en cualquier medio o formato.
Adaptar: remezclar, transformar y crear a partir del material para cualquier finalidad.
Siempre que se cumplan las siguientes condiciones:
Reconocimiento: Debe reconocer adecuadamente la autoría, proporcionar un enlace ala licencia e indicar si se han realizado cambios. Puede hacerlo de cualquier manera razona-ble, pero no de una manera que sugiera que tiene el apoyo del licenciador o lo recibe por eluso que hace.
Compartir Igual: Si remezcla, transforma o crea a partir del material, deberá di- fundirsus contribuciones bajo la misma licencia que el original.
Las figuras e ilustraciones que aparecen en el libro son de autoría de los respectivos autores. Deaquellas figuras o ilustraciones que no son realizadas por los autores, se coloca la referenciarespectiva.
Este texto forma parte de la Iniciativa Latinoamericana de Libros de Texto abiertos (LATIn),proyecto financiado por la Unión Europea en el marco de su Programa ALFA III EuropeAid. ElProyecto LATIn está conformado por: Escuela Superior Politécnica del Litoral, Ecuador (ESPOL);Universidad Autónoma de Aguascalientes, México (UAA), Universidad Católica de San Pablo,Perú (UCSP); Universidade Presbiteriana Mackenzie, Brasil(UPM); Universidad de la República,Uruguay (UdelaR); Universidad Nacional de Rosario, Argentina(UR); Universidad Central deVenezuela, Venezuela (UCV), Universidad Austral de Chile, Chile (UACH), Uni- versidad del Cauca,Colombia (UNICAUCA), Katholieke Universiteit Leuven, Bélgica (KUL), Universidad de Alcalá,España (UAH), Université Paul Sabatier, Francia (UPS). [?]
Cátedra de Informática rev8 2 de 68
http://creativecommons.org/licenses/by-sa/3.0/ deed.es_ES
Índice general
3 Estructuras selectivas y repetitivas analizadas desde su uso 53.1 Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2 Estructuras de selectiva o decisión: Condicionales . . . . . . . . . . . . . . . . . . . . . 63.2.1 Condicionales con una pregunta, Si-Entonces - FinSi (del Inglés: if) . . . . . . 63.2.2 Condicional con varias preguntas, Si-entonces - sino - FinSi (del Inglés: if-else) 93.2.3 Condicionales con casos o en cascada . . . . . . . . . . . . . . . . . . . . . . . 103.2.4 Condicionales en árbol o anidados . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2.5 Condicionales con casos vs. en árbol . . . . . . . . . . . . . . . . . . . . . . . . 143.2.6 Ejercicios propuestos de estructuras de decisión . . . . . . . . . . . . . . . . . 143.3 Estructuras de selección múltiple Según - Finsegun (switch) . . . . . . . . . . . . . . . 163.3.1 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.4 Estructuras repetitivas: "Bucles" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.4.1 Estructura “Para-FinPara” (FOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.4.2 Variantes de uso del Para-FinPara . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.4.3 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.4.4 Estructura "Mientras - FinMientras" (While) . . . . . . . . . . . . . . . . . . . . . 383.4.5 Estructura "Repetir - Mientras Que" (Do - While) . . . . . . . . . . . . . . . . . . 413.4.6 Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.5 Bucles con números Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.5.1 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.6 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.6.1 Ejemplos y Aplicaciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.6.2 Ejemplos de Estructuras de Control - Bucles con Bases numéricas . . . . . . 59
3
3 Estructuras selectivas y repetitivas analizadas
desde su uso
El presente capítulo tiene como objetivo describir el uso y utilidad de las estructuras de controlpara elaborar algoritmos que permitan resolver tareas asociadas con el manejo de información.En un algoritmo, las estructuras de control permiten escoger el orden en que se realizarán lasacciones a seguir o repetir. Por ejemplo:
Validar si se obtuvo la calificación suficiente para aprobar el curso,
Permitir subir pasajeros a un transporte mientras no se sobrepase su capacidad,
Asignar un descuento a un producto si se ha comprado más de una docena,
Verificar que un número ingresado se encuentre dentro de un rango valido, entre otros.
3.1. Estructuras de control
Las estructuras de control se clasifican en dos grandes grupos:
Estructuras de Selección:
• Condicionales o de selección
Estructuras repetitivas, iterativas o bucles (del Inglés: "Loops"):
• Lazo o Bucle Mientras - FinMientras [también llamado WHILE]
• Lazo o Bucle Repetir - Mientras que [también llamado DO-WHILE]
• Lazo o Bucle Para - FinPara [también llamado FOR]
Las estructuras condicionales permiten seleccionar las operaciones o acciones a seguir basadosen una pregunta o condición. Los bucles usan una pregunta o condición para indicar si se repiteuna o un grupo de acciones. Cada una de estas estructuras son tratadas en detalle en las siguien-tes secciones. En cada sección se repasan conceptos básicos para desarrollar ejercicios, que sonincorporados en los algoritmos, y que serán necesarios para las secciones siguientes. Los diagra-mas de flujo para algoritmo, se realizarán con las formas básicas del estándar ISO/ANSI 5807:1985.
5
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.2. Estructuras de selectiva o decisión: Condicionales
Estas estructuras permiten controlar el flujo de secuencia de una solución en un algoritmo, demanera tal que en función de una condición (que puede ser el valor de una variable), es posibledesviar la secuencia entre diferentes alternativas.
Cuando se puede escoger entre dos caminos, se debe tomar una decisión entre las opciones. Enestos casos se utilizan los “Condicionales” que son estructuras de selección.
3.2.1. Condicionales con una pregunta, Si-Entonces - FinSi (del Inglés: if)
El condicional más simple se encuentra constituido por dos caminos, donde se formula unapregunta simple (cuya respuesta puede ser verdadero o falso) que compara al menos dosvariables mediante expresiones de comparación, tales como:
a>b
a=b
a<b
a==true
b!=false
etc....
en forma general: {operando 1 } {operador relacional} {operando 2}
En diagramas de flujo el condicional se representa por un rombo, la expresión se escribe dentrodel rombo. Por convención, hacia la derecha del rombo se dibuja la salida por verdadero (V), yhacia abajo o la izquierda se dibuja la acción cuando el resultado es falso (F).
decisión
Acciones Acciones
F
I
F V
Figura 3.1: Ejemplo de una estructura de decisióncon dos bifurcaciones posibles
Cátedra de Informática rev8 6 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Paramostrar la aplicación de un condicional en un algoritmo se utilizan los siguientes ejemplos:
3.2.1.1. Ejemplo 1 - Descuento en Almacén
Un almacén aplica un descuento del 10% a quienes han comprado mas de $ 100 en productos.Realice un algoritmo que permita realizar esta operación directamente en la caja registradora.
Desarrollo:
El descuento lo puede aplicar el cajero, o se puede incorporar en el algoritmo de la máquinaregistradora, para que lo ejecute automáticamente. El valor de compra es la variable de ingreso, elprocedimiento debe determinar el valor a pagar, que se presenta al final como variable de salida.
1 Proceso ofertas012 Definir valor,descuento,pagar Como Real;3 Leer valor;4 Si valor>100 Entonces5 descuento = 0.10;6 SiNo7 descuento = 0;8 FinSi9 pagar = valor*(1-descuento);10 Escribir pagar;11 FinProceso
Figura 3.2: Diagrama de flujo del ejercicio del almacén con descuento
Cátedra de Informática rev8 7 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Otra forma de expresar el algoritmo es desde el punto de vista del dueño del almacén, quienprefiere que no exista descuento (0), el cual se modifica solamente si se cumple con la condiciónde que el cliente adquiera un valor superior a 100 dólares:
El pseudo-código para el ejercicio se presenta a continuación:
1 Proceso ofertas022 Definir valor,descuento,pagar Como Real;3 Leer valor;4 descuento = 0;5 Si valor>100 Entonces6 descuento = 0.10;7 FinSi8 pagar = valor*(1-descuento);9 Escribir pagar;10 FinProceso
Y su respectivo diagrama de flujo:
Figura 3.3: Diagrama de flujo del ejercicio
Cuando la condicional modifique el valor de una variable solamente en caso de que secumpla la condición, la acción se debe ejecutar por el lado Verdadero.
Importante!
Cátedra de Informática rev8 8 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Debe evitarse plantear condiciones lógicas que salgan solamente por el Falso y no tenganacción alguna por el camino Verdadero.
3.2.2. Condicional con varias preguntas, Si-entonces - sino - FinSi (del Inglés:
if-else)
Cuando se debe incluir más de una pregunta en un condicional, se utilizan los operadores lógicos.En diagramas de flujo o pseudo-código, las expresiones usan las mismas conectivas y que lanotación de lógica matemática. Algunos prefieren usar la notación de lenguajes estructuradosde programación y otros utilizan la forma simple: “Y”, “O”.
Conectiva Símbolo Expresión Operador
Conjunción ^ ,&& Y ANDDisyunción v ,|| O ORNegación ! NO NOT
Cuadro 3.1: Operadores lógicos comunes
3.2.2.1. Ejemplo 2 - Descuento en Almacén con 2 condiciones
Un almacén aplica el descuento del 10 % para compras mayores a 8 dólares y que incluyan másde 10 artículos.
Desarrollo:
Para el ejercicio se requieren dos variables de ingreso: valor y cantidad.
El descuento se aplica con la lógica
(valor > 8) y (canti d ad > 10). (3.1)
que se traduce en la siguiente expresión:
(valor > 8) && (canti d ad > 10). (3.2)
Para el procedimiento se continúa de igual forma que en el ejercicio anterior:
1 Proceso ejemplo022 Definir valor,descuento,pagar Como Real;3 Definir cantidad Como Entero;4 Leer valor;5 Leer cantidad;6 Si (valor>8) Y (cantidad>10) Entonces7 descuento = 0.10;8 SiNo9 descuento = 0;10 FinSi11 pagar = valor*(1-descuento);12 Escribir pagar;13 FinProceso
Cátedra de Informática rev8 9 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.4: Diagrama de flujo del ejercicio del almacén con descuento incluyendo la cantidad
3.2.3. Condicionales con casos o en cascada
Existen problemas en los que una variable puede tomar diferentes valores conforme alcumplimiento de diferentes casos.
Por ejemplo, cuando se realizan ventas por volumen (por cantidades grandes de producto), eldescuento depende de la cantidad del producto que se vende.
Cuando el condicional puede tener varios valores, se puede abordar el problema, dividiendo lacondición en casos, donde cada caso es una pregunta. Se empieza por el caso más simple y semodifica va analizando las condiciones utilizando preguntas en cascada:
Cátedra de Informática rev8 10 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
decisión
Caso 2
I
Caso 1
F
decisión
Caso 3
V
V
Figura 3.5: Condicionales con casos
3.2.3.1. Ejemplo 3 - Descuento en Almacén con más de 2 condiciones
Un almacén rebaja 10% del precio de un producto si se adquieren más de 20 unidades y 5% siadquieren entre 10 y 20 unidades (inclusive), no hay descuento para cantidades menores oiguales a 10 unidades. Con el precio unitario del producto y la cantidad adquirida, realice unalgoritmo para mostrar el valor a pagar.
[ ]( ](
descuento = 0%
0
descuento = 5%
10
descuento = 10%
20
cantidad
Figura 3.6: Intervalo para el ejemplo
Desarrollo:
Una forma de simplificar la resolución del problema, es dividirlo en casos. Siguiendo la lógica quese plantea en la figura 3.6, el programa calcula el descuento en función de la cantidad deartículos. De este modo, la acción de "Aplicar los descuentos" se traduce en evaluar cada rangode cantidad y escribirlos uno a uno como condicionales.
Cátedra de Informática rev8 11 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.7: Ejemplo 3 - condicionales con rangos
1 Proceso ofertas022 Definir valor,descuento,pagar Como Real;3 Leer valor;4 Leer cantidad;5 descuento <- 0;6 Si (cantidad>10) Y (cantidad<=20) Entonces7 descuento <- 0.05;8 FinSi9 Si (cantidad>20) Entonces10 descuento <- 0.1;11 FinSi12 pagar <- valor*cantidad*(1-descuento);13 Escribir pagar;14 FinProceso
3.2.4. Condicionales en árbol o anidados
Cátedra de Informática rev8 12 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Otra forma de resolver el problema del ejemplo anterior, consiste en generar un camino por cadacaso para asignar el valor a la variable de salida. De esta forma, cada camino planteado es partede un condicional.
decisión 1
I
F
Caso 2
decisión 2
Caso 3Caso 1
V
F
V
F
Figura 3.8: Diagrama de Flujo de un condicional en árbol
Replanteando el ejemplo anterior utilizando condicionales en árbol, el código queda:
1 Proceso ofertas022 Definir valor,descuento,pagar,cantidad Como Real;3 Leer valor;4 Leer cantidad;5 descuento = 0;6 Si (cantidad>10) Entonces7 Si (cantidad>20) Entonces8 descuento = 0.1;9 SiNo10 descuento = 0.05;11 FinSi12 SiNo13 descuento = 0;14 FinSi15 pagar = valor*cantidad*(1-descuento);16 Escribir pagar;17 FinProceso
Cátedra de Informática rev8 13 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.9: Diagrama de Flujo de condicionales en árbol para el ejemplo
3.2.5. Condicionales con casos vs. en árbol
Comparando los diagramas de flujo en las Figuras 3.7 y3.9, es posible notar que el hilo delprograma es diferente en ambas soluciones. El programa hace lo mismo, pero de diferentemanera. En un caso las preguntas se realizan una a continuación de otra, siempre. En elcondicional por árbol, solo se realizan las preguntas necesarias para el cada caso.
3.2.6. Ejercicios propuestosde estructuras de decisión
1. Escriba un algoritmo que determine si un número ingresado es positivo, negativo o cero.
2. Escriba un algoritmo que permita leer dos valores numéricos A y B. Si A es mayor que Bdebe realizar la suma de ambos, caso contrario, se hace el producto.
3. Escriba un algoritmo que permita ingresar valores numéricos A, B, C, D, E y decir si supromedio es mayor o igual a 10.
4. Hacer un programa que permita ingresa dos números y el símbolo de la operación (+,-,*,/).obteniéndose el correspondiente resultado. Si el símbolo no es correcto deberá imprimir unmensaje que indique “Error en símbolo”.
5. Escriba un algoritmo capaz de encontrar el máximo de dos valores (M y N)
6. Escriba un algoritmo capaz de encontrar el máximo de tres valores (R, S y T).
Cátedra de Informática rev8 14 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
7. Escribir un algoritmo que permita ingresar tres números distintos entre sí y los muestre enpantalla ordenados de mayor a menor y de menor a mayor.
8. Desarrollar un algoritmo que permita realizar la suma de dos horas distintas (HH, MM, SS).Tener en cuenta que si la hora supera 24 se debe contar un día.
9. Leer los lados de un rectángulo y el radio de un círculo. Determinar si las áreas de ambasfiguras son o no iguales.
10. Diseñe un algoritmo que permita ingresar la hora actual del día en tres variables, HH, MM ySS y determine cuantas horas, minutos y segundos restan para las 23:59:00.
11. Diseñe un algoritmo que permita ingresar dos valores X e Y, luego determine quéporcentaje es X de Y.
12. El promedio de prácticas de un curso se calcula en base a cuatro notas de las cuales seelimina la nota menor y se promedian las tres notas más altas. Diseñe un algoritmo quedetermine la nota eliminada y el promedio de un estudiante.
13. Diseñe un algoritmo que lea tres longitudes y determine si forman o no un triángulo. Si esun triángulo determine de que tipo de triángulo se trata entre: equilátero (si tiene tres ladosiguales), isósceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales).Considere que para formar un triángulo se requiere que: "el lado mayor sea menor que lasuma de los otros dos lados".
14. Ingresar un número C y determinar si pertenece al intervalo [A, B] con A y B ingresados porteclado.
15. Una compañía dedicada al alquiler de automóviles cobra $30 hasta un máximo de 300 kmde distancia recorrida. Para más de 300 km y hasta 1000 km, cobra $30 más un montoadicional de $ 0.15 por cada kilómetro en exceso sobre 300. Para más de 1000 km cobra$30 más un monto adicional de $ 0.10 por cada kilómetro en exceso sobre 1000. Losprecios ya incluyen el 18% del impuesto general a las ventas, IGV. Diseñe un algoritmo que,ingresando la distancia recorrida, determine el monto a pagar por el alquiler de un vehículoy el monto incluido del impuesto. Basándose en el año de fabricación y el peso delautomóvil en una fábrica se determina la tarifa de registro según la siguiente tabla:
Año (modelo) Peso (lb.) Categoría de Peso Tarifa de Registro
1970 o anterior Menos de 2.700 1 $ 11.6002.700 a 3.800 2 $ 23.200Más de 3.800 3 $ 34.800
1971 a 1979 Menos de 2.700 4 $ 13.0002.700 a 3.800 5 $ 26.000Más de 3.800 6 $ 39.000
1980 o posterior Menos de 3.500 7 $ 12.0003.500 o más 8 $ 46.000
Cuadro 3.2:
El programa debe ingresar el año y el peso del auto e imprimir la categoría y la tarifa.
Cátedra de Informática rev8 15 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
16. El cuadrante en el cual se ubica una línea dibujada desde el origen está determinado por elángulo que la línea forma con el eje positivo de x en la siguiente forma:
Ángulo del eje positivo de x Cuadrante
Entre 0 y 90 grados IEntre 90 y 180 grados IIEntre 180 y 270 grados IIIEntre 270 y 360 grados IV
Cuadro 3.3: Tabla de ángulos y cuadrantes
El programa debe ingresar el ángulo de la línea como dato de entrada y desplegar elcuadrante apropiado, según la tabla dada. Si el ángulo es exactamente 0, 90, 180 o 270grados, la línea resultante no se ubica en ningún cuadrante sino en cada uno de los ejesrespectivos.
17. Dados dos números reales mostrar el mayor.
18. Dados cuatro números reales mostrar el mayor.
19. Teniendo como dato una temperatura en grados Celsius, indicar el estado físico del agua aesa temperatura y a 760 mm de presión atmosférica: sólido (menor ó igual a 0 °C), líquido(mayor a 0 °C y menor ó igual a 100 °C) y gaseoso (mayor a 100 °C).
20. Siendo los datos tres números enteros, determinar si la suma de cualquier pareja de ellos esigual al número restante. Si se cumple esta condición, escribir “Iguales”, en caso contrarioescribir “Distintos”.
a) Dados tres números enteros distintos ingresados por teclado, determinar y mostrar elnúmero que ocupa la posición del centro, al ordenar los mismos de menor a mayor.
21. Siendo los datos tres enteros válidos que representan una fecha: dd, mm, aa, se pide obtenery mostrar la fecha del día siguiente.
22. Ingresar un número de mes válido y un año. Mostrar la cantidad de días que puede tener elmismo, considerando que el año puede ser bisiesto.
3.3. Estructuras de selección múltiple Según - Finsegun (switch)
Las estructuras de selección múltiple se utilizan para realizar selecciones entre mas de dosopciones, aliviando la necesidad realizar condiciones múltiples dentro de una misma pregunta. Acontinuación se presentan ejemplos que muestran los diferentes escenarios
Cátedra de Informática rev8 16 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.3.0.1. Ejemplo - Selección de vocales usando Si-Sino-FinSi con condiciones múltiples
En este ejemplo semuestra un programa que permite ingresar una letra por teclado e identificarlas vocales ingresadas. Se implementa utilizando una decisión con una condición formada porvarias proposiciones individuales. Estas proposiciones individuales se unen mediante operadoreslógicos. Cada caso debe especificarse con su respectiva condición.
Este ejemplo se usa para demostrar el uso justificado del Segun-FinSegun en losprogramas.
Si un bloque de un programa se puede implementar utilizando Si-FinSi o también Segun-FinSegun indistintamente, SE DEBE realizar usando esta última, de forma de optimizar el usode las instrucciones dadas en clase.
Atención!
1 Proceso vocal12 Definir letra Como Caracter;3 Escribir "Ingrese una letra para determinar si es vocal";4 Leer letra;5 Si (letra=="a" O letra=="e" O letra=="i" O letra=="o" O letra=="u")
Entonces6 Escribir "es vocal";7 SiNo8 Escribir "No es vocal";9 FinSi10 FinProceso
Figura 3.10: Ejemplo - Selección de vocales usando IF
3.3.0.2. Ejemplo - Selección de vocales usando múltiples Si-Sino-FinSi
En este ejemplo semuestra un programa que permite ingresar una letra por teclado e identificarlas vocales ingresadas. Se implementa utilizando estructuras de decisión anidadas.
Cátedra de Informática rev8 17 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Cada decisión identifica solo una vocal. Las demás vocales se identifican mediante otras con-diciones colocadas por el camino del FALSO de cada decisión.
La última decisión, tiene por el camino del FALSO el caso por descarte, que corresponde a cuan-do no se cumple con ninguna de las condiciones anteriores.
Cátedra de Informática rev8 18 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Este ejemplo se usa para mostrar el uso justificado del Segun-FinSegun en los programas.
Si un bloque de un programa sepuede implementar utilizando Si-FinSi o también Segun-FinSegun indistintamente, SE DEBE realizar usando esta última, de forma de optimizar el usode las instrucciones dadas en clase.
Atención!
1 Proceso vocal22 Definir letra Como Caracter;3 Escribir "Ingrese una letra para determinar si es vocal";4 Leer letra;5 Si (letra=="a") Entonces6 Escribir "es vocal";7 SiNo8 Si (letra=="e") Entonces9 Escribir "es vocal";10 SiNo11 Si (letra=="i") Entonces12 Escribir "es vocal";13 SiNo14 Si (letra=="o") Entonces15 Escribir "es vocal";16 SiNo17 Si (letra=="u") Entonces18 Escribir "es vocal";19 SiNo20 Escribir "No es vocal";21 FinSi22 FinSi23 FinSi24 FinSi25 FinSi26 FinProceso
Cátedra de Informática rev8 19 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.11: Ejemplo - Selección de vocales usando IF
3.3.0.3. Ejemplo - Selección de vocales- usando Segun-FinSegun
Figura 3.12: Ejemplo - Selección de vocales usando Segun-FinSegun
Cátedra de Informática rev8 20 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
1 Proceso switch_12 Definir letra Como Caracter;3 Escribir "Ingrese una letra para determinar si es vocal";4 Leer letra;5 Segun (letra) Hacer6 "a":7 Escribir "es vocal";8 "e":9 Escribir "es vocal";10 "i":11 Escribir "es vocal";12 "o":13 Escribir "es vocal";14 "u":15 Escribir "es vocal";16 De Otro Modo:17 Escribir "No es vocal";18 FinSegun19 FinProceso
En este ejemplo se muestra el mismo programa pero implementado utilizando la instrucciónSegun-FinSegun. Con una sola estructura de decisión es posible identificar las vocales y mostrarun cartel correspondiente. En caso de no se ingrese una vocal, existe el caso por defecto (tambiénse lo suele llamar caso "por descarte"), en el cual se muestra un cartel indicando que no se haingresado una vocal.
3.3.0.4. Ejemplo - Selección de vocales - variante
En este ejemplo se muestra como unificar los casos de cada vocal en uno solo, quedando entotal sólo dos casos.
Figura 3.13: Ejemplo - Selección de vocales
Cátedra de Informática rev8 21 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
1 Proceso switch_22 Definir letra Como Caracter;3 Escribir "Ingrese una letra para determinar si es vocal";4 Leer letra;5 Segun (letra) Hacer6 "a","e","i","o","u","A","E","I","O","U":7 Escribir "es vocal";8 De Otro Modo:9 Escribir "No es vocal";10 FinSegun11 FinProceso
3.3.0.5. Ejemplo - Implementar un Menú - variante con números
En este ejemplo se presenta un menú en pantalla. Cada opción del menú tiene un número aso-ciado. El usuario debe elegir una opción ingresando por teclado el número correspondiente a laopción elegida.Si el número ingresado por el usuario coincide con una de las opciones presentadas por elmenú,se ejecuta lamisma. En caso de que el número no coincida con alguna de las opciones disponiblesen el menú, se presenta en pantalla un mensaje que indica que la opción elegida no es válida.
Figura 3.14: Ejemplo - Ejemplo de Menú
Cátedra de Informática rev8 22 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
1 Proceso switch_22 Definir op Como Entero;3 Escribir "Ingrese una opción para el menú";4 Escribir "1.- sumar dos números";5 Escribir "2.- restar dos números";6 Escribir "3.- dividir dos números";7 Escribir "4.- multiplicar dos números";8 Escribir "5.- Salir";9 Leer op;10 Segun (op) Hacer11 1:12 Escribir "sumar";13 2:14 Escribir "restar";15 3:16 Escribir "dividir";17 4:18 Escribir "multiplicar";19 5:20 Escribir "salir";21 De Otro Modo:22 Escribir "Opción no valida";23 FinSegun24 FinProceso
3.3.0.6. Ejemplo - Implementar un Menú - variante con letras
Este ejemplo muestra una variante del ejercicio del menú, en donde cada opción del menú tieneasociada una letra. En este caso, el usuario ingresa la opción elegida en forma de carácter. Si elcarácter ingresado se corresponde con alguna de las opciones del menú, la misma se ejecuta.
Cuando la variable que almacena la opción elegida es del tipo carácter, lo que se guarda enla misma es el símbolo que corresponde con el número de opción elegida. Por eso esnecesario indicar en las opciones individuales que se está trabajando con caracteres,encerrando el carácter usando las comillas simples ’1’, o dobles "1".
Si no se usan las comillas, el programa interpretará solo el valor numérico de los símbolos.Se sugiere repasar el tema referente a caracteres ASCII en el capítulo 1.
Prestar atención
Cátedra de Informática rev8 23 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.15: Ejemplo - Ejemplo de Menú
Cátedra de Informática rev8 24 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
1 Proceso switch_22 Definir op Como Caracter;3 Escribir "Ingrese una opción para el menú";4 Escribir "1.- sumar dos números";5 Escribir "2.- restar dos números";6 Escribir "3.- dividir dos números";7 Escribir "4.- multiplicar dos números";8 Escribir "S o s.- Salir";9 Leer op;10 Segun (op) Hacer11 "1":12 Escribir "sumar";13 "2":14 Escribir "restar";15 "3":16 Escribir "dividir";17 "4":18 Escribir "multiplicar";19 "S","s":20 Escribir "salir";21 De Otro Modo:22 Escribir "Opción no valida";23 FinSegun24 FinProceso
3.3.1. Ejercicios propuestos
1. Realizar un programa que permita ingresar un número que corresponde con un número demes. El programa deberá imprimir el nombre del mes ingresado. Por ejemplo: si se ingresaun 4, debe imprimir "Abril".
2. Realizar un programa que permita ingresar la nota (número entero) de un alumno. En funciónde la misma debe imprimir la calificación correspondiente según la escala que se presenta:
Nota menor que 6 : "Reprobado"
Nota igual a 6: "Regular"
Nota igual a 7: "Bien"
Nota igual a 8: "Muy bien"
Nota igual a 9: "Excelente"
Nota igual a 10: "Sobresaliente"
3. Hacer un programa que permita ingresa dos números y el símbolo de la operación (+,-,*,/),obteniéndose el correspondiente resultado. Si el símbolo no es correcto deberá imprimir unmensaje que indique “Error en símbolo”.
3.4. Estructuras repetitivas: "Bucles"
Cátedra de Informática rev8 25 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Son estructuras que permiten repetir un bloque de instrucciones un determinado número deveces. También se las conoce como estructuras de iteración o ciclos repetitivos. La cantidad deveces que se repite es controlada por una condición lógica o el valor de una variable.
En los programas es común que existan bloques de operaciones que deban repetirse. Estasoperaciones se pueden repetir dentro de dos contextos:
Mientras se cumpla una condición (mientras la condición tenga resultado verdadero (true)).
Hasta que se cumpla una condición (mientras la condición tenga resultado falso (false)).
Por ejemplo
Forma 1:
Un estudiante toma un curso, al final debe cumplir la condición de superar una calificación
mínima para pasar al siguiente curso, en caso contrario debe repetir el curso.
Forma 2:
Un estudiante debe repetir el curso si obtiene una calificación inferior a la mínima. En cambio sila supera, puede pasar al siguiente curso.
Análisis
En las dos formas se indica que el alumno repite el curso si no consigue superar la calificaciónmínima, pero se plantea de 2 formas diferentes.
En la primer forma, el alumno repite el curso mientras su calificación seainferior a lamínima, en caso contrario, pasa al curso siguiente.
En la segunda forma, el alumno pasa al curso siguiente si su calificación supera la mínima,en caso contrario, repite el curso.
Existen varias formas de expresar las repeticiones por lazos:
1. Estructura Para
2. Estructura Repetir - Mientras Que
3. Estructura Mientras - Repetir
3.4.1. Estructura “Para-FinPara” (FOR)
En algoritmos es frecuente encontrar lazos controlados solamente por un incremento en 1, por loque se pueden integrar y resumir en una forma de representación conocida como el bucle“Para-FinPara”. En la figura 3.16 usamos un diagrama de flujo para mostrar el concepto con unbucle Para-FinPara.
Cátedra de Informática rev8 26 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
I
i < valor límite?
F
i=i+1
sentencias
a repetir
i = valor
 inicial
F
V
PARA
A repetir
Figura 3.16: Diagrama de flujo de la estructura PARA
La variable contador i (con valor inicial conocido) permite el controlar la cantidad de repeticionesdel bloque de sentencias mediante el lazo, cuya condición de salida consiste en evaluar el valordel contador i comparado con un valor límite. Luego de ejecutar el bloque de sentencias, en cadaiteración se incrementa el valor del contador i para luego, evaluar el valor del contador y repetir sies necesario.
El resultado de todo esto es que el bloque de sentencias se ejecuta un cantidad definida deveces, que viene dado por la diferencia entre el valor final e inicial del contador.
En el PSeInt se integran el contador y el lazo en un sólo símbolo, por lo que en el diagrama deflujo queda:
1 Proceso ciclo_para2 Definir i Como Entero;3 Para i=0 Hasta 10 con paso 1 hacer4 Escribir "acciones a repetir";5 FinPara6 FinProceso
Cátedra de Informática rev8 27 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.17: Diagrama de flujo de PSEint de la estructura PARA
Se puede leer también: “Para los valores de i empezando en el valor de inicio (i=0), avanzando en
pasos de incremento 1 hasta llegar al valor de fin (i=10), repita el siguiente bloque de operaciones”.
3.4.2. Variantes de uso del Para-FinPara
Es posible darle otros usos a la estructura PARA, veamos algunos ejemplos:
Incremento diferente a 1
Es posible hacer que el contador se incremente de dos en dos, en este caso solamente secambia el valor del incremento:
1 Proceso ciclo_para2 Definir i Como Entero;3 Para i=0 Hasta 10 con paso 2 hacer4 Escribir "el valor del contador es: ",sin saltar;5 escribir i;6 FinPara7 FinProceso
Cátedra de Informática rev8 28 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.18: Diagrama de flujo de PSEint de la estructura PARA con paso 2
3.4.2.1. Ciclo Para con incremento negativo
En este caso se cambia la condición de salida y el incremento
1 Proceso ciclo_para2 Definir i Como Entero;3 Para i=10 Hasta 0 Con Paso -1 Hacer4 Escribir "El valor del contador es: ", Sin Saltar;5 Escribir i;6 FinPara7 FinProceso
Figura 3.19: Diagrama de flujo de PSEint de la estructura PARA decremental
3.4.2.2. Forzar la salida anticipada del ciclo Para
Es posible forzar la salida del ciclo PARA, de forma que no tenga que hacer todas las iteracionesdefinidas por el contador. Esto puede ser útil en algunas circunstancias.
Cátedra de Informática rev8 29 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Para forzar la salida, dentro del ciclo PARA, se agrega una linea que asigna al contador un valorque haga que al evaluar la condición de repetición, esta de resultado "falso".
Si se cambia el valor del contador desde dentro del PARA, el programa puede entrar encondición de "colgado" o "bucle infinito".
Atención!
1 Proceso ciclo_para_salida_anticipada2 Definir i Como Entero;3 Para i=0 Hasta 10 Hacer4 Escribir "el valor del contador es: ", Sin Saltar;5 Escribir i;6 Si i>3 Entonces7 i = 10; // cambio el valor del contador dentro del PARA8 FinSi9 FinPara10 FinProceso
Figura 3.20: Diagrama de flujo de PSEint de la estructura PARA con salida anticipada
Cátedra de Informática rev8 30 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.21: Vista de la salida del programa de la estructura PARA con salida anticipada
3.4.2.3. Bucles infinitos utilizando el ciclo Para-FinPara
Se puede lograr entrar en un bucle infinito de varias maneras. Una de ellas es alterando el valorde la variable del contador, de forma tal que cuando se evalúa la condición de repetición lamisma siempre resulta en "verdadero":
un ejemplo de ello se muestra en el siguiente código:
1 Proceso ciclo_para_salida_anticipada2 Definir i Como Entero;3 Para i=0 Hasta 10 Hacer4 Escribir "el valor del contador es: ", Sin Saltar;5 Escribir i;6 Si i>3 Entonces7 i = 7; // cambio el valor del contador dentro del PARA8 FinSi9 FinPara10 FinProceso
Cátedra de Informática rev8 31 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.22: Diagrama de flujo de PSEint de la estructura PARA con un bucle infinito
Figura 3.23: Vista de la salida del programa de la estructura PARA en un bucle infinito
En este caso se hace que el contador i comience con valor 0. El ciclo se repitenormalmente hasta que i=4, entonces se cumple que:
• si i>3 entonces hacer que i=7; con ello se logra que i al finalizar la iteración, se le sume1, lo que hace que i tome siempre el valor 8. Se muestra en pantalla el valor 8.
se incrementa el contador y se muestra el valor.
Como i>3 entonces se vuelve a hacer que i=7, termina la iteración y se le suma 1; y sevuelve a repetir el bucle. Se muestra en pantalla el valor 8.
Cátedra de Informática rev8 32 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.4.2.4. Otra forma de lograr bucles infinitos
En este caso se hace que el contador vuelva tome el valor inicial cada cierta cantidad deiteraciones.
1 Proceso bucle_infinito22 Definir i Como Entero;3 Para i=0 Hasta 10 Hacer4 Escribir "el valor del contador es: ", Sin Saltar;5 Escribir i;6 Si i>3 Entonces7 i = -1; // cambio el valor del contador dentro del PARA8 FinSi9 FinPara10 FinProceso
Figura 3.24: Diagrama de flujo de PSEint de la estructura PARA con un bucle infinito
Cátedra de Informática rev8 33 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.25: Vista de la salida del programa de la estructura PARA con salida anticipada
En este caso se hace que i comience con valor 0. el ciclo se repite hasta que i=4, entoncesse cumple que:
Si i>3 entonces hacer que i=–1; con ello se logra que i comience en 0 de nuevo, ya que elcontador se incrementa al finalizar la iteración. →−1+1 = 0
Se incrementa el contador y se muestra el valor.
Como i>3 entonces se vuelve a hacer que i=7 y se vuelve a repetir el bucle.
Es muy importante mantener el control de los valores de las variables dentro del cicloPARA. Es necesario tener presente los rangos de los valores que pueden tomar lasvariables y tener presente como van cambiando entre iteración e iteración.
Tener presente
3.4.3. Ejercicios propuestos
1. Escribir un algoritmo que permita ingresar 10 números y calcule el promedio.
Para este ejercicio es útil repasar los conceptosde contadores y acumuladores.
TIP
Cátedra de Informática rev8 34 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
2. Ingresar 5 juegos de cuatro valores cada uno. Calcular y emitir el promedio de cada juego.
3. Dados 10 números, escribir un algoritmo que imprima:
La suma de los números positivos de la lista
Cantidad de números negativos de la lista
Promedio de los números positivos.
4. Desarrollar un algoritmo que determine en un conjunto de cien números la cantidad denegativos, cuántos son mayores de 50 y cuántos están comprendidos entre 25 y 45.
5. Escribir un algoritmo que calcule la suma de los cuadrados de los 10 primeros númerosnaturales.
6. Ingresar dos números y calcular el producto de los mismos por sumas sucesivas.
7. Calcular la suma de los números pares, la suma de los números impares comprendidosentre 1 y N, donde N es un número ingresado por teclado. (recordar que el incrementopuede ser de 2).
8. Escribir un algoritmo que imprima la tabla de multiplicar del 2.
9. Escribir un algoritmo que imprima todas las tablas de multiplicar (desde la del 2 hasta ladel 9).
10. Escribir un algoritmo que imprima la suma de los 1000 primeros números naturales, esdecir, 1 + 2 + 3 + 4 + ... + 998 + 999 + 1000.
11. Escriba un algoritmo para imprimir las coordenadas (X - Y) de una función cuadrática, de laforma Y = a ·X +b ·X + c haciendo variar X en el intervalo [-20, 20] con un incremento de 2.
12. Escribir un algoritmo que calcule el factorial de un número. El factorial de un número N sesimboliza: N!, donde N ! = N · (N −1)!. Sólo existen factoriales de números naturales y elcero. Se define 0! = 1. Ej: 5! = 5 ·4 ·3 ·2 ·1 = 125.
13. Leer 10 valores numéricos. Calcular e informar: La suma de los valores positivos y elproducto de los valores negativos. (Ignorar los valores nulos)
14. Leer una lista de 50 números y emitir: el valor mínimo de la lista, el valor máximo de la listay la ubicación del máximo dentro de la lista.
15. Dada una lista de 50 valores numéricos, indicar si esta ordenada en forma ascendente.
16. Diseñe un algoritmo para calcular el resultado de la suma de los 100 primeros términos dela siguiente serie: S = 1− 13 + 19 − 127 + 181 .
17. Realizar un algoritmo que convierta un número ingresado por teclado (en sistema decimal)a su equivalente en sistema binario.
18. Construir el algoritmo que realice la operación inversa al del ejercicio anterior.
19. Escribir un algoritmo que permita el ingreso de dos números X y N, y calcule X N , pormultiplicaciones sucesivas. Hacer las consideraciones necesarias para que funcione.Tener en cuenta casos particulares.
Cátedra de Informática rev8 35 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
20. Escribir un algoritmo que permita ingresar el promedio de un curso y luego lascalificaciones de un grupo de 50 alumnos. Se necesita saber cuántos alumnos tienen unacalificación superior al promedio del grupo. Realizar prueba de escritorio para 10 alumnos.
21. Escribir un programa que permita ingresar dos valores A y B que determinan un intervalo,luego ir acumulando los valores que se ingresan a continuación siempre y cuando estospertenezcan al intervalo.
22. Diseñar un DF que permita el ingreso de N números y al finalizar muestre el menor, el mayory la posición en que se ingresó cada uno. N se ingresa al principio por teclado. AYUDA:hacer primero el mayor, después agregarle la posición, después complicarlo con todo.
23. Realizar un algoritmo que imprima los N primeros números de la sucesión de Fibonacci. Nse ingresa por teclado.
24. Calcular la serie de Fibonacci. Ingresar N y generar la serie hasta que el último término seamenor a N.
25. Teniendo comodatos dos valores enterosA yB, calcular ymostrar el producto de losmismosdesarrollando un algoritmo que calcule a dicho producto como una suma reiterada.
26. Teniendo como datos dos enteros A y B, calcular y mostrar el cociente entre A y B, con Bdistinto de cero, como una resta reiterada.
27. Un numero es perfecto cuando es igual a la suma de todos sus números divisores.
Ejemplo 6=1 + 2 +3
Ingresar un número entero e informar si es perfecto.
28. Se leen 30 valores (comprendidos entre 5 y 40), que representan la temperatura máxima decada uno de los días de un mes. Se pide hallar e informar :
La temperatura máxima del mes y el día que se produjo. (Se supone única)
Cuántos días la temperatura supero los 25 °C.
El promedio de las temperaturas máxima del mes.
29. Los datos son: un número entero y la posición de un dígito del mismo, es decir posición1:unidades, posición 2: decenas, posición 3 centenas, etc, etc, etc. Mostrar el número y el dígitoque se encuentra en la posición ingresada. Proponer un fin de datos.
Ejemplo: Numero= 10345 y posición = 4 el algoritmo deberá mostrar: 10345 - 0 .
30. Se llaman números amigos a aquellos números donde cada uno de ellos es igual a la sumade los divisores del otro. Ingresar un valor entero N y mostrar todas las parejas de númerosamigos menores que N.
31. Se ingresan las notas de 40 alumnos. Por cada alumno se ingresa:
número de matrícula : 4 dígitos (1-9999)
asistencia : 1, presente; 0, ausente
calificación: 2 dígitos (0-10).
A partir de esta información se debe calcular e informar:
Cátedra de Informática rev8 36 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Cantidad y% de alumnos presentes.
Promedio de calificaciones de alumnos presentes.% de alumnos aprobados (sobre el total de alumnos presentes).
Número de matrícula del alumno de mayor calificación. (Si hay varios alumnos conesa calificación: calificación y cantidad de alumnos en esa situación).
32. Ejercicio - aproximación de π: El número π puede ser obtenido mediante aproximacionessiguiendo la serie conocida como “producto de Wallis”, desarrollada por el matemáticoinglés John Wallis en el año 1655.
2
1
× 2
3
× 4
3
× 4
5
× 6
5
× 6
7
× 8
7
× 8
9
× . . . = π
2
(3.3)
Realice un algoritmo para encontrar el valor aproximado de π con la fórmula mostrada paraun valor de N términos ingresado por teclado.
33. La sucesión de Padovan es la secuencia de números enteros P(n) definida por lossiguientes valores iniciales:
P0 = P1 = P2 = 1 (3.4)
a partir de 2, el valor siguiente se calcula mediante
Pn = Pn−2 +Pn−3 (3.5)
34. Se dice que un número de dos cifras es primo permutable si al intercambiar sus cifras, esteotro número también es primo:
Ejemplos:
• 37 es primo, entonces -> 73 también es primo.
• 17 es primo, entonces -> 71 también es primo.
• 19 es primo, entonces -> 91 también es primo.
• Realice un algoritmo para determinar si un número x es primo permutable.
Se sugiere comenzar desarrollando un algoritmo que permita averiguar si un numeroes primo.
Una vez hecha esa parte es posible agregar la capacidad de permutar los dígitos delnúmero.
Para permutar los números se puede utilizar la descomposición en dígitos vista en elejemplo 3.55
Tip
35. Un número perfecto es aquel que es igual a la suma de todos sus divisores, con excepcióndel mismo. Realice un algoritmo que valide si un número cualquiera X es o no perfecto, res-pondiendo mediante valores lógicos 1 y 0.
Ejemplo:
6 es perfecto porque sus divisores son: 1, 2, 3 (6 no se considera). Sumados da: 1+2+3=6. El algoritmo debe imprimir un valor 1, para este caso.
Cátedra de Informática rev8 37 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
8 no es perfecto porque sus divisores son: 1,2,4 (8 no se considera). Sumados da:1+2+4=7. El algoritmo debe imprimir un valor 0 en este caso.
Propuesta de mejora:
Modifique el programa escrito para que que calcule los númerosperfectos entre 0 y un límiteingresado por el usuario.
36. Describa un algoritmo estructurado que calcule y muestre el término n de la sucesión,considere que n >3.
Ejemplo
Los primeros valores de P(n) son:
1,1,1,2,2,3,4,5,7,9,12,16,21,28,37, ... (3.6)
Si n=15, el numero buscado es 37.
3.4.4. Estructura "Mientras - FinMientras" (While)
Esta estructura requiere que se satisfaga la condición para luego ejecutar el bloque se instruc-ciones a repetir.Es una forma usada para cumplir una condición antes de pasar al siguiente bloque. Si usamos lacondición del punto anterior, se usará la negación de la expresión, pues para continuar al siguientebloque se usará el lado falso.
condición es 
verdadera?
I
F
instrucciones
a repetir
se evalúa 
la condición
se repiten las 
instrucciones
continúa el hilo 
del programa
inicio del bucle
F
V
Figura 3.26: Mientras - FinMientras
3.4.4.1. Ejemplo - Validación de datos de entrada con Mientras-FinMientras
En este ejemplo se muestra como validar datos de entrada en el rango 0 a 10.
Cátedra de Informática rev8 38 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
1 Proceso while32 Definir nota Como Entero;3 Leer nota;4 Mientras (nota<0 O nota>10) Hacer5 Escribir "La nota no es valida, por favor reingrese";6 Leer nota;7 FinMientras8 Escribir "la nota es valida y vale: ",nota;9 FinProceso
Figura 3.27: Diagrama de flujo de PSEint de la validación
3.4.4.2. Ejemplo - Contador con Mientras-FinMientras
1 Proceso while22 Definir i Como Entero;3 i = 0;4 Mientras i<10 Hacer5 Escribir "El contador vale: ",i;6 // bloque de7 // sentencias a repetir8 i = i+1;9 FinMientras10 FinProceso
Cátedra de Informática rev8 39 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.28: Diagrama de flujo de PSEint de la estructura Repetir-MientrasQue
3.4.4.3. Ejemplo - Cursos de idiomas
Un instituto dicta cursos de idioma. Se cuenta con dos cursos, el nivel A (básico) y B ( avanzado).Cada nuevo alumno que se inscribe, debe pasar por una evaluación para determinar que cursoes adecuado para su nivel actual. El procedimiento utilizado establece que el estudiante primerorealiza una prueba. Si el resultado de la misma no alcanza la calificación mínima requerida, elalumno debe tomar el nivel A, en caso contrario puede pasar al nivel B.
Lo mismo sucede cuando el alumno termina el curso, se lo evalúa y si no supera el nivel mínimorequerido, debe repetir el curso.
Cátedra de Informática rev8 40 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
no supera el nivel 
mínimo requerido?
I
F
evaluación 
de nivel
evaluación 
de nivel
asistencia 
al curso
F
pasa al siguiente curso
al comienzo del curso
V
Figura 3.29: Asistencia a curso de idioma
3.4.5. Estructura "Repetir - Mientras Que" (Do - While)
La primera forma de repetir mostrada es el Repetir- Mientras que, que ejecuta un bloque oprocedimiento para luego evaluar una condición a ser satisfecha para pasar al siguiente bloque.Si la condición no se puede satisfacer, se repetirá el bloque de instrucciones hasta que en algúnmomento deje de cumplirse la condición.
condición
I
F
secuencia
a repetir
F
V
Figura 3.30: Repetir - Mientras Que
Cátedra de Informática rev8 41 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.4.5.1. Ejemplo - Validación de datos con Repetir-MientrasQue
En este ejemplo se muestra como validar datos de entrada en el rango 0 a 10.
1 Proceso while32 Definir nota Como Entero;3 Repetir4 Leer nota;5 Si (nota<0 O nota>10) Entonces6 Escribir "La nota no es valida, por favor reingrese";7 FinSi8 Mientras Que (nota<0 O nota>10)9 Escribir "la nota es valida y vale: ",nota;10 FinProceso
Figura 3.31: Diagrama de flujo de PSEint de la validación
3.4.5.2. Ejemplo - contador con Repetir- MientrasQue
Un programa que cuenta hasta 10 mientras va mostrando en pantalla el conteo:
Cátedra de Informática rev8 42 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
1 Proceso dowhile12 Definir i Como Entero;3 i = 0;4 Repetir5 Escribir "El contador vale: ",i;6 // bloque de7 // sentencias a repetir8 i = i+1;9 Mientras Que i<1010 FinProceso
Figura 3.32: Diagrama de flujo de PSEint de la estructura Mientras
3.4.5.3. Ejemplo - Fin de Curso Universidad
Un curso o materia de estudio en la universidad, al final del curso tiene la condición de superar lanota mínima para aprobar. El diagrama de flujo que representa el proceso de evaluar el curso yotorgar el estado de "aprobado o no aprobado" se puede representar así:
Cátedra de Informática rev8 43 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
¿la nota es inferior
a la mínima?
I
F
Fin del 
curso
F
Aprueba el curso
V
No aprueba 
el curso
Figura 3.33: Ejemplo de Repetir - Mientras Que
3.4.6. Ejercicios Propuestos
1. Realizar un algoritmo que permita calcular la suma de los números ingresadosmientras queel valor acumulado no supere el valor 100. Mostrar el valor acumulado antes de superar 100.
2. Ingresar juegos de cuatro valores cada uno. Calcular y emitir el promedio de cada juego. Elproceso finaliza al encontrarse un juego cuyo primer valor es 0 (cero).
3. Leer una lista de números que finaliza cuando se ingresar el número 0 (cero), al finalizaremitir el valor mínimo de la lista.
4. Leer una lista de números que finaliza cuando se ingresar el número 0 (cero), al finalizaremitir el valor máximo de la lista.
5. Leer una lista de números que finaliza cuando se ingresar el número 0 (cero), al finalizaremitir el valor máximo de la lista, y la ubicación del máximo dentro de la lista. (Suponer unúnico máximo).
6. Escribir un programa que permite ingresar dos valores A y B que determinan un intervalo,luego ir acumulando los valores que se ingresan a continuación siempre y cuando estospertenezcan al intervalo. El ingreso de números finaliza cuando ingresa el 99.
7. Diseñar el algoritmo para resolver una ecuación de segundo grado A · x²+B · x +C = y . Elalgoritmo deberá ingresar A, B y C e ir ingresando x. El programa finaliza cuando ingresa x =99.
8. Se tienen los siguientes datos sobre nacimientos en una ciudad: sexo (“F” ó “M”) y fechade nacimiento (DD y MM). Se pide realizar un algoritmo que informe cuántos son varonesy cuántas son mujeres, cuántos nacimientos hubo en el primer semestre y cuántos en elsegundo. El final de lectura de datos viene dado por una lectura del sexo en blanco.
Cátedra de Informática rev8 44 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
9. Realizar un algoritmo que determine si una serie de números ingresada por teclado es as-cendente. El final de la serie viene dado por un número negativo. (Ej: 1, 5, 5, 10, 11, 12, 12, 20,-1 es una serie ascendente).
10. Diseñar unDiagramade Flujo deDatos (DFD) que permita el ingreso de datos de tipo carácterhasta que se ingrese un espacio en blanco; al final informar si algún dato fue numérico (undígito de ’0’ a ’9’) y si se ingresaron datos numéricos, cuántos fueron.
11. Diseñar un DFD que permita el ingreso de N números; al final informar la sumatoria de losnúmeros. N se ingresa al principio por teclado.
12. Diseñar un DFD que permita el ingreso de números e informe si se ingresaron o no númerosnegativos. El ingreso de números finaliza cuando ingresael 99.
13. Diseñar un DFD que permita calcular el promedio deN notas introducidas por teclado, siendoN un valor introducido por el usuario. Además ha de indicar si ha habido algún 10, el númerode reprobados y de aprobados.
14. Diseñar un DFD que permita el ingreso de números, muestre el valor acumulado, el promedioy si ingresó el 0 (cero). El final del ingreso se da cuando ingresa el número 100 o la suma delos ingresados supere el valor 100.
15. Diseñar un DFD que permita mostrar en pantalla una rutina de selección del siguiente menú:
1.- Suma
2.- Resta
3.- Producto
4.- División
S.- Salir.
El usuario podrá elegir cualquier alternativa, luego ingresar A y B y realizar la operación se-leccionada. Solamente con “S” podrá Salir. Tener en cuenta que si elige 4.- División deberáreingresar el denominador hasta que ingrese un valor diferente a 0 (cero). Si ingresa un nú-mero negativo o mayor que 4 deberá informar “Opción no válida”.
16. Dado un conjunto de números positivos, determinar el mayor de ellos:
Cuando se tiene como dato su cantidad o tamaño del conjunto
Cuando el conjunto de datos finaliza con un valor negativo.
17. Un número OMIRP es un número primo que tiene una particularidad que lo hace diferente.Si se invierten los dígitos del número, se forma otro número. Este otro número también esun número primo, por ello se los llama números OMIRP. (PRIMO al revés)
Ejemplo Se desea escribir un algoritmo que permita determinar si un número n , tiene lacaracterística de ser un número OMIRP. Utilizando como ejemplo el número 1597:
1597 es número primo,
Se invierten sus dígitos: 7951
Se comprueba que 7951 es primo,
Entonces el número 1597 es un número omirp.
Cátedra de Informática rev8 45 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
18. Escriba un algoritmo para determinar el número de puntos del plano cartesiano con coor-denadas de valores enteros que pertenecen al círculo limitado por la circunferencia, cuyaecuación es
x2 + y2 = 100 (3.7)
(Círculo con centro en el origen y cuyo radio es 10).
Muestre también el promedio de las distancias de dichos puntos al origen de coordenadas.
(0,0)
(10,0)
(0,10)
R=1
0
Figura 3.34: Diagrama de puntos dentro del círculo
Utilice un círculo inscrito en un cuadrado, para cada punto con coordenadas enteras,calcule la distancia al origen para determinar si el punto está dentro del círculo.
Tip
19. Ingresar duplas de valores formadas cada una de ellas por un carácter y un dígito. Esteingreso no debe seguir ningún orden y no debe exceder las cuatro duplas. El carácter puedetomar los siguiente valores:
U: unidades,
D: decenas,
C: centenas,
M: unidades de mil.
Calcular y mostrar el número correspondiente.
3.4.6.1. Ejemplo - Números triangulares
Extendiendo el ejercicio mostrado en la sección 3.6.2.5, construya un algoritmo para determinarsi un número T es triangular.
Cátedra de Informática rev8 46 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Para esto el lazo se debe controlar mediante el número de bloques usados comparados con elnúmero T.
Cuando al cantidad de bloques USADOS son iguales o mayores a T, no es necesario continuar elproceso pues se obtuvo un resultado afirmativo, o los USADOS superan lo requerido y el númeroT no es triangular. Puede mostrarse la respuesta como un valor verdadero (1) o falso (0) alcomparar la igualdad entre T y usados.
1 Proceso verifica_triangular2 Definir N,piso,usados Como Entero;3 usados = 0;4 piso = 1;5 Escribir "Ingrese numero: ";6 Leer N;7 Repetir8 usados = usados+piso;9 piso = piso+1;10 Mientras Que usados<N11 Si N=usados Entonces12 Escribir "El numero es triangular";13 SiNo14 Escribir "El numero NO es triangular";15 FinSi16 FinProceso
Cátedra de Informática rev8 47 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.35: Ejemplo - números triangulares
Propuesta
Realizar el ejercicio usando la forma Repetir - MientrasQue.
3.4.6.2. Ejercicio - conversión binario a decimal y decimal a binario
Realizar los algoritmos Binario a Decimal y Decimal a Binario usando el bucle Repetir-MientrasQue.
a) Crear un algoritmo para convertir un número de base numérica genérica x a base y.
b) Comprobar el algoritmo usando los valores: 15 en decimal a la base 8 (octal)
Sugerencia, convierta el número de la base X primero a decimal y luego transforme elresultado a la siguiente base numérica Y.
Tip
Cátedra de Informática rev8 48 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.4.6.3. Ejercicio - Código de barras
El código de barras utiliza líneas paralelas verticales (barras y espacios) que representaninformación en su equivalente binario. El código es muy usado en los puntos de ventas y es“leído” por un dispositivo láser (scanner).
Para facilitar la lectura por scanner se usa el método de “simbología discreta”, en el que se marcael inicio, separación y fin de los datos con la secuencia barra/espacio/ barra (101) por cada grupode 10 bits (dígitos binarios).
Elabore un algoritmo que permita cambiar un código de producto conformado por dos númerosde 3 cifras a su equivalente en código de barras usando simbología discreta.
Referencia: http://es.wikipedia.org/wiki/C%C3%B3digo_de_barras
Figura 3.36: Código de barras del ejercicio
3.4.6.4. Ejercicio - Odómetro octal
En un odómetro mecánico de un vehículo antiguo se marcan las distancias recorridas enkilómetros, en formato numérico octal de hasta cinco dígitos.
Realice un algoritmo para encontrar la distancia recorrida en kilómetros en formato numéricodecimal, convirtiendo el valor octal marcado por el odómetro luego de un viaje.
Un odómetro es un dispositivo que indica la distancia recorrida en un viaje de un vehículo.
Tip
Cátedra de Informática rev8 49 de 68
http://es.wikipedia.org/wiki/C%C3%B3digo_de_barras
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
12345
Figura 3.37: odómetro
a) Para realizar la conversión de un número que está en una determinada base a su equivalentedecimal, debe emplearse la siguiente regla:
Nr = dn−1 · r n−1 + . . .+ rn−2 · r n−2 +dn−i · r n−i +d1 · r 1 +d0 · r 0 (3.8)
En donde:
Nr : número en expresado en la base r.
r n−i : Base del sistema de numeración original, ponderado con el peso n-i.
dn−i : dígito en la posición i, i = 0, 1, 2, ... (0 es la posición menos significativa)
Para repasar la conversión de sistemas numéricos, se recomienda revisar el Capítulo 1,sección 1.5.4.
Tip
1. Escriba un Algoritmo que permita obtener el equivalente decimal (base 10) de un numerooctal (entero de hasta 4 dígitos) ingresado por teclado. Suponga que ya existe la funciónEsOctal(n), cuyo parámetro n es un valor entero y retorna 2 posibles valores: 1 = verdadero,0 = falso, según sea que n es válido o no en ese sistema de numeración.
2. Realice la prueba de escritorio del algoritmo construido en el literal a) para el siguienteejemplo:
1034|8 = N |10 (3.9)
Ejemplo:
para convertir 764 (en base 8) a (en base 10):
N = 7 x 8 2 + 6 x 8 1 + 4 x 8 0 = 500 ( a base10)
N |8 = 7 ·82 +6 ·81 +4 ·80 = 7 ·64+6 ·8+4 ·1 = 448+48+4 = 500|10 (3.10)
Cátedra de Informática rev8 50 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.5. Bucles con números Aleatorios
Se presenta aquí el uso de números aleatorios mediante ejemplos y ejercicios.
3.5.0.1. Ejemplo - Números aleatorios
Para simular un número de azar, por ejemplo el obtenido allanzar un dado, se recurre alconcepto de números aleatorios. Un número aleatorio se define como un número real cualquieraen el rango [0,1)
[0 1)
Figura 3.38: Intervalo aleatorio
Para utilizar el número aleatorio se debe convertir al rango apropiado del número a simular, porejemplo, para simular un dado se escribiría en el algoritmo:
Figura 3.39: Posibles salidas de un dado
d ado ← enter o(al eator i o ∗6)+1 (3.11)
Esto significa que la función Aleatorio() devuelve un número real en el rango [0,1):
[0 1)
al eator i o
Figura 3.40: Intervalo aleatorio [0 ,1)
Como el dado tiene 6 caras se multiplica por 6, obteniendo un real de [0,6). No se incluye el6.
Cátedra de Informática rev8 51 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
[0 6)
al eator i o
Figura 3.41: Intervalo [0 , 5]
Se extrae solo la parte entera para obtener un número entero [0,5]
[0 1 2 3 4 5] 6
al eator i o
Figura 3.42: Intervalo [1 , 5)
Para que el resultado sea [1,6], se le suma 1
[1 2 3 4 5 6]
al eator i o
Figura 3.43: Intervalo [1 , 6]
3.5.0.2. Ejemplo - Juego de Generala
Realizar un programa que permita generar tiradas de un dado. Para ello es posible utilizar lafunción azar(N). El argumento N de la función sirve para indicar que genere un número aleatorioentero con un rango entre 0 y N-1.
A continuación se muestra un ejemplo de la salida del programa:
Cátedra de Informática rev8 52 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.44: Salida del programa
3.5.1. Ejercicios propuestos
3.5.1.1. Propuesta de mejora al juego de Generala
Modificar el programa presentado en la Sección 3.5.0.2de forma que calcule el resultado de unatirada de la generala. La generala se juega con 5 dados. Considerar los siguientes casos:
Si todos los números generados son iguales, es GENERALA.
Si 3 números son iguales y 2 son iguales, es FULL.
Si 4 números son iguales es POKER.
Si todos los números son crecientes, es ESCALERA.
3.5.1.2. Ejercicio - Precio del Petróleo
Realice un algoritmo para simular el precio del barril de petróleo durante un mes de 30 días,suponiendo que son valores enteros que fluctúan en forma aleatoria entre $ 130 y $ 150 y seobtenga las siguientes respuestas:
a) El promedio del precio del petróleo.
b) ¿Cuál fue el día en el que estuvo más barato el barril de petróleo?
1 6 11 16 21 26
120,00
125,00
130,00
135,00
140,00
145,00
150,00
155,00
Precio Petróleo
datos del mes
precio
día
p
re
ci
o
[$
]
Figura 3.45: Ejemplo de la variación del precio del petróleo a lo largo del mes.
Cátedra de Informática rev8 53 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Desarrollo:
Para iniciar el algoritmo, se puede considerar como variable de entrada los días del mes, oasignarles directamente 30 días. La primera aproximación al problema para responder el literal a)consiste en generar números aleatorios en el rango [130, 150] y acumular sus valores para elpromedio. Será necesario disponer de un contador para controlar el número de veces que segeneran los precios de forma aleatoria en el lazo de repetición. Una de las formas de resolver elproblema es con un lazo REPETIR MIENTRAS.
A continuación se muestra un ejemplo de salida del programa
Figura 3.46: Salida del programa
Para la pregunta b) es necesario analizar la manera de encontrar el día con el precio más barato.En este caso se utilizará un algoritmo para búsqueda del número menor, que consiste en iniciarcon el supuesto para el valor menor de precio y día, comparando contra el precio de cada día y deser necesario se cambian los valores menores. Es un similar al caso de usar una hipótesis yrealizar luego las pruebas. Como supuesto, se escogerá el valor máximo de precio con el objetivoque el primer precio que aparece sustituya los valores.
A continuación se muestra un ejemplo de salida del programa
Figura 3.47: Salida del programa
Cátedra de Informática rev8 54 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Otra forma de realizar el algoritmo consiste en cambiar la perspectiva del bucle
REPETIR-MIENTRAS QUE, por un bucle MIENTRAS - REPETIR. Se debe cambiar el lugar de lacondición, repitiendo la misma pregunta. Se deja como ejercicio propuesto al alumno reescribirel ejemplo utilizando este enfoque.
3.5.1.3. Ejercicio - Tiro al blanco
“Tiro al blanco” es un juego que consiste en lanzar dardos a un objetivo circular. El premio quegana el jugador, depende de la ubicación en la cual cae el dardo y su valor se reparte en Pesos($30, $40 o $50), tal como se muestra en la figura:
(0,0)
$30
$40
$50
80cm
40cm
10cm
160cm
Figura 3.48: Diana con su puntuación y premios
Existen 3 círculos concéntricos y las longitudes de los radios del primero, segundo y tercercírculos son 10 cm, 40 cm y 80 cm, respectivamente. Suponga que los 3 círculos están inscritosen un cuadrado de longitud de lado 160 cm.
Escriba un algoritmo que permita simular N lanzamientos aleatorios de dardos, asignando deforma aleatoria pares ordenados (x, y) en el cuadrado descrito. En cada lanzamiento se debeverificar si el dardo se ubica al interior de alguno de los círculos descritos y asignar el respectivopremio. Al final, muestre el premio total que obtuvo el jugador.
Cátedra de Informática rev8 55 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Desarrollo:
Como bloque de ingreso, se usará la variable N como el número de dardos cuyo lanzamientoserá simulado. Las coordenadas de los puntos donde cae cada dardo se harán utilizando comoreferencia el centro de los círculos, por lo que los rangos para el eje x y el eje y serán [-80, 80].
Si las coordenadas serán aleatorias, el rango del número aleatorio será 80-(-80)=160, con valorinicial de -80 como se describe en la siguiente expresión:
Coor denad apx = azar (160)−80 (3.12)
Al calcular la distancia de la coordenada del dardo al origen, usando la fórmula de distancia entredos puntos, se determinará la franja sobre la que cayó el dardo.
Como ejercicio se propone realizar el diagrama de flujo usando el lazo Mientras-Repita:
3.5.1.4. Ejercicio - Estimación de π
Encuentre un valor aproximado de la constante π con el siguiente procedimiento: Considere uncírculo de radio unitario, centrado en el origen e inscrito en un cuadrado:
x²+y²<1
x²+y²>1
x²+y²=1
Figura 3.49: Círculo unitario dentro de un cuadrado
Para n puntos (x, y) con coordenadas generadas de forma aleatoria (números reales entre 0 y 1),determine cuántos puntos caen dentro del cuadrante de círculo. Para contar los puntos se puedeutilizar un contador. Si llamamos a este contador k, se puede establecer la siguiente relaciónaproximada suponiendo n grande:
Cátedra de Informática rev8 56 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
k
n
=
1
4 ár ea del c ı́r culo
1
4 ár ea del cuadr ado
=
1
4π · (1)2
1
4 · (2)2
= π
4
(3.13)
Por ejemplo, para 4 pares de puntos (n=5) generados de forma aleatoria; si k puntos seencuentran dentro del área del círculo, entonces se puede escribir:
k
n
w
π
4
−→ k
5
= π
4
(3.14)
Donde se puede obtener el valor aproximado de πmediante:
π= k
n
·4 (3.15)
3.5.1.5. Ejercicio - Tiro de penales
El juego que se plantea consiste en 5 lanzamientos por parte de los jugadores que patean elbalón, los cuales pueden decidir lanzar en cualquiera de las seis secciones del arco (1: arriba a laderecha,2: arriba al centro, 3: arriba a la izquierda, 4 abajo a la izquierda, 5: abajo al centro, 6:abajo a la derecha). En cada lanzamiento, el arquero decide donde ubicarse para atajar el tiro yno tiene oportunidad de cubrir otra sección, si éste coincide con la ubicación donde disparó eljugador, entonces el lanzamiento fue atajado o fallado, caso contrario se marcó un GOL.
Escriba un algoritmo que simule un juego de 5 lanzamientos de penales, en donde la sección delarco donde cada jugador lanza es decidido por el usuario y la sección cubierta por el arquero essimulado por el computador (aleatoria).
Al final presente la siguiente información:
Cantidad de goles conseguidos.
Cantidad de penales fallados.
La cantidad de goles realizados en la parte derecha, central e izquierda del arco.
La ubicación del arco (derecha, centro o izquierda) por donde ingresaron másgoles.Suponga que existe una sola.
La ubicación del arco (derecha, centro o izquierda) por donde no ingresaron goles.Supongaque existe una sola.
Figura 3.50: Esquema de tiro de los penales
Cátedra de Informática rev8 57 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.6. Ejemplos
3.6.1. Ejemplos y Aplicaciones básicas
3.6.1.1. Ejemplo - Reciclado de botellas
Una fábrica produce botellas de vidrio reciclando botellas usadas. Suponiendo botellas similares,la máquina con cierta cantidad X de botellas usadas pueden fabricar 1 botella nueva. Realice unalgoritmo para encontrar la cantidad total acumulada de botellas que pueden fabricarse a partirde N botellas en el mercado, reciclándolas repetidamente hasta que ya no quede suficientesbotellas para reciclar.
Desarrollo
Si se recolectan 70 botellas usadas (N = 70), y se puede fabricar una botella nueva con 4 botellasusadas (X = 4), el programa debe dar como respuesta el número 23.
Entonces, cada vez que se recicla un lote de botellas, la cantidad obtenida se puede calcular con:
Nbotel l as
X
=C anti d ad botel l as r eci cl ad as (3.16)
Veamos paso a paso como se llega al resultado:
Primer reciclaje: se toman las 70 botellas recolectadas y se fabrican: 70/4 =17 botellas, ysobran 2 (que no se reciclan en esta etapa)
Segundo reciclaje: las 17 botellas se reciclan, sumadas a las 2 que sobraron de la etapaanterior: 17 + 2 = 19. Con ellas se fabrican 19/4 = 4 botellas y sobran 3.
Tercer reciclaje: Ahora quedan N= 4 + 3 =7, se fabrican 7/4 = 1 botella y sobran 3.
Cuarto reciclaje: N=1+3=4, ahora se fabrican 4/4=1 botella y ya no quedan suficientesbotellas para reciclar. El algoritmo termina y muestra la cantidad acumulada.
Se entiende que algunas botellas se han reciclado mas de una vez. En este caso, el algoritmo haejecutado el proceso de reciclaje 4 veces en total.
Entonces, a lo largo de las sucesivas etapas, se produjeron en total: 17 + 4 + 1 + 1= 23 botellasrecicladas.
Cátedra de Informática rev8 58 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.6.2. Ejemplos de Estructuras de Control - Bucles con Bases numéricas
3.6.2.1. Ejemplo - conversión binario a decimal
Para convertir el número binario 101 a decimal, se realizan las siguientes operaciones:
1 0 1− 1 00 1− 0
1
1 01 0 −→ 1 0− 1 0
0
1 01 −→ 1− 0
1
1 00
Combinando los restos de las divisiones sucesivas se obtiene la cifra en binario
101 (3.17)
La conversión se puede escribir como
1 ·2²+0 ·21 +1 ·20 = 1 ·4+0+1 ·1 = 5 (3.18)
3.6.2.2. Algoritmo de Binario a Decimal
Para realizar el algoritmo, se tiene que separar cada dígito del número binario, y realizar laoperación de ponderación para acumularla en el resultado final.
En la ponderación se usará un contador de posición para ser usado como el exponente dela base 2. Para repasar la conversión de sistemas numéricos, se puede pueden revisar elCapítulo 1.
Tip
Cátedra de Informática rev8 59 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.51: Diagrama de flujo de PSEint de la conversión de binario a decimal
1 Proceso binario2decimal2 Definir bin,dec,i,dig Como Entero;3 Leer bin;4 dec = 0;5 i = 0;6 Mientras bin>0 Hacer7 dig = bin MOD 10;8 bin = trunc(bin/10);9 dec = dec+dig*2^i;10 i = i+1;11 FinMientras12 Escribir "El valor decimal es:", Sin Saltar;13 Escribir dec;14 FinProceso
Cátedra de Informática rev8 60 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
3.6.2.3. Algoritmo de Decimal a Binario
En este caso hay que analizar descomponer el número en la nueva base numérica, para luegotrabajar con los residuos ubicándolos desde la posición menos significativa a la mássignificativa.
3.6.2.4. Ejemplo 2 - Número 17 decimal a binario
Para convertir el número decimal 17 a binario, se realizan las siguientes operaciones:
2 5− 20 5− 4
1
21 2 −→ 1 2− 1 2
0
26 −→ 6− 6
0
23 −→ 3− 2
1
21 −→ 1− 0
1
20
Combinando los restos de las divisiones sucesivas se obtiene la cifra en binario
11001 (3.19)
Nótese que los restos se escriben en orden inverso al que se fueron calculando: el resto dela última división es el primer 1 de la izquierda en binario (bit más significativo o MSB).
Tip
La conversión se puede escribir como
1 ·24 +1 ·23 +0 ·22 +0 ·21 +1 ·20 = 1 ·16+1 ·8+0 ·4+0 ·2+1 ·1 = 16+8+1 = 24 (3.20)
Observe la diferencia en las operaciones para el divisor y la base, las operaciones son similares alas del ejercicio anterior. Por lo que el algoritmo no debe representar mayor inconveniente al seruna variante del ejemplo anterior.
Algoritmo
1 Proceso decimal2binario2 Definir bin,dec,i,dig Como Entero;3 Leer dec;4 bin <- 0;5 i <- 0;6 Mientras dec>0 Hacer7 dig <- dec MOD 2;8 dec <- trunc(dec/2);9 bin <- bin+dig*10^i;10 i <- i+1;11 FinMientras12 Escribir "El valor binario es:", Sin Saltar;13 Escribir bin;14 FinProceso
Cátedra de Informática rev8 61 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Figura 3.52: Diagrama de flujo de PSEint de la conversión de binario a decimal
3.6.2.5. Ejemplo - Números triangulares
Un faraón le pide a su ingeniero Real que calcule los materiales necesarios para construir supirámide. El ingeniero real propone escribir un algoritmo que le permita encontrar el términon-ésimo de la secuencia de números triangulares. Un número triangular puede entenderse comoel número de elementos usados para formar una pirámide plana, como se muestra en la figura3.53.
1
1 3 6 10cantidad
1
2
1
2
3
1
2
3
4
pisos 1 2 3 4
Figura 3.53: números triangulares
Cátedra de Informática rev8 62 de 68
Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++
Universidad Nacional de Misiones
Matemáticamente, la fórmula que rige el algoritmo es la siguiente
canti d ad =
pi sos∑
p=1
usados (3.21)
Desarrollo:
Usando la analogía de la construcción de una pirámide, se observa que para construir un piso seusa un bloque, para añadir el piso 2 se usan 2 bloques, para añadir el piso 3 se usan 3 bloques,etc.
Así, para 3 pisos, se puede decir:
canti d ad = 1+2+3 = 6 (3.22)
Al principio se le pregunta al Faraón cuantos pisos desea construir. El el ingeniero real ingresaesa información en el programa, que se almacena en la variable llamada CUÁNTOS. Para iniciarlos trabajos, se anuncia la construcción del primer piso y que se han usado 0 bloques. En elprocedimiento de construcción de la pirámide, PISO es una variable tipo contador; USADOS esuna variable tipo acumulador que registra los bloques usados en la construcción de cada piso.Se construye un nuevo piso, acumulando los bloques usados

Continuar navegando