You are on page 1of 12

1

Guía de Ejercicios Resueltos Unidad 2 (Programación Procedimental).

Ejercicio 01.

Diseñe un programa que permita guardar los datos de una encuesta que se realizará a 300 personas
sobre su índice de masa corporal. A los encuestados se les pedirá su nombre, cédula, estatura y
peso, para luego calcular su IMC y clasificarlo. El programa debe estructurarse utilizando
programación procedimental, debe contar con las siguientes subrutinas:

1) Ingresar de los datos de la Encuesta: Permite ingresar los datos obtenidos de un encuestado,
luego preguntar si se desea ingresar los datos de otra persona o si desea regresar al menú principal.
2) Mostrar Datos Ingresados: Se debe visualizar la estructura con toda la información completa.
3) Calcular el Promedio de los IMC: Devolverá el cálculo del promedio de los IMC‟s de los
encuestados.
4) Buscar los datos de un encuestado según su cédula.
5) Salir del Programa.

Para calcular el índice de masa corporal se utiliza la fórmula:

IMC = Peso / Estatura2

Datos_IMC
Nombre [25] Cedula Estatura Peso IMC Eval

Encuesta [300]
Nombre [25] Cedula Estatura Peso IMC Eval
L 1
2

300

Clasificación IMC
Infrapeso <18,50
Normal 18,50 a 24,99
Sobrepeso ≥25,00
Obeso ≥30,00

Resolución.

Algoritmo Encuesta IMC

//Definición de la Estructura (Formato) del Registro


Registro Datos_IMC
Entero Cedula
Real Peso, Estatura, IMC
Caracter Nombre[25], Eval[10]
Fin_Registro

Entero N=300
2

// Procedimiento Validar
Procedimiento Validar (Entero &valor, Entero lim_inf, Entero lim_sup)
Inicio
Repetir Mientras (valor<lim_inf || valor>lim_sup)
Mostrar (“Ha seleccionado una opción incorrecta, reintrodúzcala:”)
Leer (valor)
Fin_Repetir_Mientras
Fin

// Función Menu
Entero Menu ()
Inicio
Entero opc
Mostrar (“Menú de Opciones”)
Mostrar (“1) Ingresar datos de Encuestado”)
Mostrar (“2) Visualizar datos de la Encuesta”)
Mostrar (“3) Ver Promedio de IMC‟s”)
Mostrar (“4) Buscar los datos de un encuestado”)
Mostrar (“5) Salir del Sistema”)
Mostrar (“Seleccione una opción:”)
Leer (opc)
Llamar a: Validar (opc, 1, 5)
Devolver (opc)
Fin

// Procedimiento Ingreso Fila por Fila


Procedimiento Ing_FxF (Datos_IMC Reg[ ], Entero &L)
Inicio
Resp=‟s‟
Repetir Mientras (Resp==‟s‟ && L<N)
L=L+1
Mostar (“Ingrese los datos del Encuestado: ”)
Mostar (“Nombre: ”)
Leer (Reg[L].Nombre)
Mostrar (“Cédula: ”)
Leer (Reg[L].Cedula)
Mostrar (“Estatura: ”)
Leer (Reg[L].Estatura)
Mostrar (“Masa Corporal: ”)
Leer (Reg[L].Peso)

Reg[L].IMC = Reg[L].Peso / Reg[L].Estatura^2

Si (Reg[L].IMC < 18,5)


Reg[L].Eval = “Infrapeso”
Fin_Si
Si (Reg[L].IMC >= 18,5 && Reg[L].IMC < 25)
Reg[L].Eval = “Normal”
Fin_Si
Si (Reg[L].IMC >= 25 && Reg[L].IMC < 30)
3

Reg[L].Eval = “Sobrepeso”
Fin_Si
Si (Reg[L].IMC >= 30)
Reg[L].Eval = “Obeso”
Fin_Si

Mostrar (“Desea ingresar los datos de otro encuestado, s: si o n: regresar al menú principal”)
Leer (Resp)
Fin_Repetir_Mientras
Fin

// Subrutina Mostrar
Procedimiento Mostrar (Datos_IMC Reg[ ], Entero n)
Inicio
Entero i
Si (n>0)
Mostrar (“Encuesta Índice de Masa Corporal”)
Mostrar (“Nombre Cédula Estatura Peso IMC Eval”)
Repetir Desde i=1 hasta i<=n
Mostar (Reg[i].Nombre, “ ”, Reg[i].Cedula, “ ”, Reg[i].Estatura)
Mostrar (“ ”, Reg[i].Peso, “ ”, Reg[i].IMC, “ ”)
Mostrar (Reg [i].Eval, “  ”)
Fin_Repetir_Desde
Sino
Mostrar (“No ha ingresado datos…”)
Fin_Si
Fin

// Subrutina Calculo de Promedio de IMC‟s


Real Promedio (Datos_IMC Reg[ ], Entero n)
Inicio
Entero i
Real Prom = 0
Si (n>0)
Repetir desde i=1 hasta i<=n
Prom = Prom + Reg[i].IMC
Fin_Repetir_Desde
Devolver (Prom/n)
Sino
Mostrar (“No ha ingresado datos…”)
Devolver (0)
Fin_Si
Fin

// Subrutina de Búsqueda
Entero Búsqueda (Datos_IMC Reg[ ], Entero n, Entero Ced_B)
Inicio
Entero i
Repetir desde i=1 hasta i<=n
Si (Reg[i].Cedula == Ced_B)
4

Devolver (i)
Fin_si
Fin_Repetir_Desde
Devolver (0)
Fin

// Programa Principal
Inicio

//Declaración del Arreglo de Registro


Datos_IMC Encuesta[N]

//Declaración de las otras Variables


Entero opc=1, Cedula_B, pos, L=0

// Ciclo para repetir el Programa


Repetir Mientras (opc>=1 && opc<5)

opc=menu() // Llamada a la función menú

En Caso de (opc)
Caso 1:
Llamar a: Ing_FxF (Encuesta, L)

Caso 2:
Llamar a: Mostrar (Encuesta, L)

Caso 3:
Mostrar (“El promedio del IMC de los encuestados es”, Promedio (Encuesta,L))

Caso 4:
Mostrar (“Indique el número de cédula a buscar: ”)
Leer (Cedula_B)
pos = Busqueda (Encuesta, L, Cedula_B)
Si (pos > 0)
Mostrar (“Nombre Cédula Estatura Peso IMC Eval”)
Mostrar (Encuesta[pos].Nombre, “ ”, Encuesta[pos].Cedula, “ ”, Encuesta[pos].Estatura)
Mostrar (“ ”, Encuesta[pos].Peso, “ ”, Encuesta[pos].IMC, “ ”)
Mostrar (Encuesta[pos].Eval, “  ”)
Sino
Mostrar(“Cédula Inexistente”)
Fin_Si

Caso 5:
Mostrar (“Fin del Programa”)
Fin_En_Caso_De
Fin_Repetir_Mientras
Fin
5

Ejercicio 02.

El departamento de bienestar y salud de una empresa está organizando una jornada de pérdida de
peso para sus empleados, por lo que se necesita un algoritmo que permita registrar los datos de los
30 empleados participantes junto con su peso a lo largo de las 10 semanas que duró la jornada y
además calcular pérdida de peso total que alcanzó el empleado. Se utilizará una estructura como la
que se muestra a continuación:
Jornada[30]
Peso[10]
Nombre Cedula Edad Perdido
1 2 3 4 5 6 7 8 9 10
1 Luis Perez 15768883 36 95 93,5 90 91 89,5 88 86,5 86 85 84 11
2

29
30

El programa contará con el siguiente menú de opciones:

1) Ingresar los datos de los participantes.


2) Mostrar los resultados obtenidos.
3) Determinar el empleado con mayor pérdida en la jornada.
4) Salir del Programa.

El código se estructurará mediante programación procedimental, usted debe desarrollar e


implementar las siguientes subrutinas:
1) Subrutina Menu: se encargará de desplegar el menú de opciones del programa y retornar la
opción seleccionada por el usuario validada (usar la subrutina validación).
2) Subrutina Ingreso: permitirá el ingreso los datos de todos los empleados participantes (nombre,
cedula y edad), sus registros de peso de las 10 semanas y se calculará el peso total perdido por la
persona (perdido).
3) Subrutina Ganador: determinará quien perdió más peso durante la jornada y retornando la fila
del registro en que está registrado.

// Desarrollo del Código

// Definición de la estructura del registro


Registro Datos_Jornada
Caracter Nombre[25]
Entero Cedula, Edad
Real Peso[10], Perdido
Fin_Registro

// Procedimiento Validar
Procedimiento Validar (Entero &valor, Entero lim_inf, Entero lim_sup)
Inicio
Repetir Mientras (valor<lim_inf || valor>lim_sup)
Mostrar (“Ha seleccionado una opción incorrecta, reintrodúzcala:”)
6

Leer (valor)
Fin_Repetir_Mientras
Fin

// Función Menu
Entero Menu ()
Inicio
Entero opc
Mostrar (“Menú de Opciones”)
Mostrar (“1) Ingresar Datos de Participantes”)
Mostrar (“2) Mostrar Resultados de Jornada”)
Mostrar (“3) Ver Ganador de la Jornada”)
Mostrar (“4) Salir del Sistema”)
Mostrar (“Seleccione una opción:”)
Leer (opc)
Llamar a: Validar (opc, 1, 4)
Devolver (opc)
Fin

// Procedimiento Ingreso
Procedimiento Ingreso (Datos_Jornada Reg[ ], Entero n)
Inicio
Entero i, j
Repetir desde i=1 hasta i<=n
Mostar (“Ingrese los datos del Encuestado: ”)
Mostar (“Nombre, Cedula y Edad: ”)
Leer (Reg[i].Nombre, Reg[i].Cedula, Reg[i].Edad)
Repetir desde j=1 hasta j<=10
Mostrar (“Peso semana ”, j)
Leer (Reg[i].Peso[j])
Fin_Repetir_Desde
Reg[i].Perdido = Reg[i].Peso[1] - Reg[i].Peso[10]
Fin_Repetir_Desde
Fin

// Subrutina Mostrar
Procedimiento Mostrar (Datos_Jornada Reg[ ], Entero n)
Inicio
Entero i, j
Mostrar (“Resultados Jornada de Bienestar”)
Mostrar (“Nombre Cédula Edad Peso por Semanas Total Perdido”)
Repetir Desde i=1 hasta i<=n
Mostar (Reg[i].Nombre, “ ”, Reg[i].Cedula, “ ”, Reg[i].Edad, “ ”)
Repetir Desde j=1 hasta j<=10
Mostrar (Reg[i].Peso[j], “ ”)
Fin_Repetir_Desde
Mostrar (Reg[i].Perdido, “  ”)
Fin_Repetir_Desde
Fin
7

// Subrutina Ganador
Entero Ganador (Datos_Jornada Reg[ ], Entero n)
Inicio
Entero i, pos = 1
Real Mayor = Reg[1].Perdido // Aplicando algoritmo “Mayor” asumimos que el primero es el mayor
Repetir desde i=2 hasta i<=n
Si (Reg[i].Perdido > Mayor)
Mayor = Reg[i].Perdido
pos = i
Fin_Si
Fin_Repetir_Desde
Devolver (pos)
Fin

//---------------- Programa Principal -----------------------//


Inicio

//Declaración del Arreglo de Registro


Datos_Jornada Jornada[30]

//Declaración de las otras Variables


Entero opc=1, pos

// Ciclo para repetir el Programa


Repetir Mientras (opc>=1 && opc<4)

opc=menu() // Llamada a la función menú

En Caso de (opc)
Caso 1:
Llamar a: Ingreso (Jornada, 30)

Caso 2:
Llamar a: Mostrar (Jornada, 30)

Caso 3:
pos = Ganador (Jornada, 30)

Mostrar (“El ganador de la jornada es: ”, Jornada[pos].Nombre)


Mostrar (“con ”, Jornada[pos].Perdido, “Kilos perdidos”)

Caso 4:
Mostrar (“Fin del Programa”)
Fin_En_Caso_De
Fin_Repetir_Mientras
Fin
8

Ejercicio 03.
Su mejor amig@ se va a casar, por lo que le pide el favor de desarrollar un programa que permita
automatizar el manejo de los invitados en las distintas mesas, los datos se encuentran almacenados
en una estructura como la que se muestra a continuación:
Invitados [200]
Nombre Cedula Mesa Estado
1 Ivan Montero 21000000 1 A A: Ausente
2 Fernanda Gonzalez 10000000 2 P P: Presente
… Juan Lopez 14000000 5 P
300 Luisa Castro 18000000 10 A

El programa contará con un menú de opciones como el siguiente:


1) Cambiar Estado de Invitado a Presente.
2) Mostrar Lista de Invitados Presentes.
3) Ver número de Mesa del Invitado buscándolo por su Número de Cédula.
4) Salir del Programa.

Usted debe asumir que los datos de los invitados ya se encuentran cargados en sistema y
debe implementar el código a través de programación procedimental utilizando las siguientes
subrutinas:

a) Menú: Despliega el menú de opciones con la opción seleccionada por el usuario previamente
validada.
b) Ya_llego: esta subrutina permitirá cambiar el estado del invitado a presente (P) buscándolo
por su número de cédula.
c) Lista_Presentes: Mostrará el listado de invitados que se han hecho presentes en el evento.
d) Buscar: Buscará un invitado por su cédula de identidad y retornará el número de mesa que
éste posea asignado, en caso de que la cédula no se consiga debe retornar un cero.

// Desarrollo del Código

// Definición de la estructura del registro


Registro Datos_Boda
Caracter Nombre[25], Estado
Entero Cedula, Mesa
Fin_Registro

// Procedimiento Validar
Procedimiento Validar (Entero &valor, Entero lim_inf, Entero lim_sup)
Inicio
Repetir Mientras (valor<lim_inf || valor>lim_sup)
Mostrar (“Ha seleccionado una opción incorrecta, reintrodúzcala:”)
Leer (valor)
Fin_Repetir_Mientras
Fin
9

// Función Menu
Entero Menu ()
Inicio
Entero opc
Mostrar (“Menú de Opciones”)
Mostrar (“1) Invitado confirmado en Boda”)
Mostrar (“2) Mostrar Invitados Presentes”)
Mostrar (“3) Buscar la Mesa del Invitado”)
Mostrar (“4) Salir del Sistema”)
Mostrar (“Seleccione una opción:”)
Leer (opc)
Llamar a: Validar (opc, 1, 4)
Devolver (opc)
Fin

// Subrutina Ya llego
Entero Ya_llegó (Datos_Boda Reg[ ], Entero n)
Inicio
Entero i, Ced_Bus
Mostrar (“Indique la cédula del invitado que ha llegado: ”)
Leer (Ced_Bus)
Repetir desde i=1 hasta i<=n
Si (Reg[i].Cedula == Ced_B)
Reg[i].Estado = „P‟
Devolver (1)
Fin_si
Fin_Repetir_Desde
Devolver (0)
Fin

// Subrutina Mostrar
Procedimiento Mostrar_Presentes (Datos_Boda Reg[ ], Entero n)
Inicio
Entero i
Mostrar (“Invitados que se han hecho presentes”)
Mostrar (“Nombre Cédula Mesa”)
Repetir Desde i=1 hasta i<=n
Si (Reg[i].Estado == ‘P’)
Mostar (Reg[i].Nombre, “ ”, Reg[i].Cedula, “ ”, Reg[i].Mesa, “ ”)
Fin_Si
Fin_Repetir_Desde
Fin

// Subrutina de Búsqueda
Entero Búsqueda (Datos_Boda Reg[ ], Entero n, Entero Ced_B)
Inicio
Entero i
Repetir desde i=1 hasta i<=n
Si (Reg[i].Cedula == Ced_B)
Devolver (Reg[i].Mesa)
10

Fin_si
Fin_Repetir_Desde
Devolver (0)
Fin

//---------------- Programa Principal -----------------------//


Inicio

//Declaración del Arreglo de Registro


Datos_Boda Invitados[200]

//Declaración de las otras Variables


Entero opc=1, Mesa, CedulaB

// Ciclo para repetir el Programa


Repetir Mientras (opc>=1 && opc<4)

opc=menu() // Llamada a la función menú

En Caso de (opc)
Caso 1:
Si( Ya_llego (Invitados, 200) == 1 ) // Uso de valor retornado como condición
Mostrar (“Estado Cambiado Correctamente”)
Sino
Mostrar (“No se pudo actualizar estado, intente nuevamente”)
Fin_Si

Caso 2:
Llamar a: Mostrar_Presentes (Invitados, 200)

Caso 3:
Mostrar(“ Indique la cédula del invitado a buscar: ”)
Leer (CedulaB)

Mesa = Busqueda (Invitados, 200, CedulaB)

Si (Mesa>0)
Mostrar (“El invitado tiene asignada la mesa ”, Mesa)
Sino
Mostrar(“No se ha encontrado al invitado, vuelva a buscar…”)
Fin_Si

Caso 4:
Mostrar (“Fin del Programa”)
Fin_En_Caso_De
Fin_Repetir_Mientras
Fin
11

Ejercicio 04.

Diseñe un algoritmo que permita ingresar los valores de un arreglo unidimensional y llene un
segundo arreglo con los elementos del primero pero de forma invertida.

Arr1[X] 1 3 5 6 8 2 4

Arr2[X] 4 2 8 6 5 3 1

El algoritmo debe implementarse a través de tres subrutinas:


1) Cargar: permite ingresar los valores de un arreglo unidimensional de N celdas.
2) Invertir: toma los elementos de un primer arreglo y los carga en orden invertido en un segundo
arreglo.
3) Muestra: permite imprimir los valores del arreglo resultante de N celdas.

// ---------------- Resolución --------------- //


// Subrutina Cargar
Procedimiento Cargar (Entero Arr[ ], Entero n)
Inicio
Entero i
Repetir desde i = 1 hasta i<=n
Mostrar (“Ingrese el valor del elemento ”, i)
Leer (Arr[i])
Fin_Repetir_Desde
Fin

// Subrutina Muestra
Procedimiento Muestra (Entero Arr[ ], Entero n)
Inicio
Entero i
Repetir desde i = 1 hasta i<=n
Mostrar (“Elemento”, i, “=”, Arr[i])
Fin_Repetir_Desde
Fin

// Subrutina Invertir
Procedimiento Invertir (Entero Arr1[ ], Entero Arr2[ ], Entero n)
Inicio
Entero i
Repetir desde i=1 hasta i<=n
Arr2[i] = Arr1[n+1-i]
Fin_Repetir_Desde
Fin

//------------------ Programa Principal --------------------//


Inicio
Entero A[15], B[15]

Llamar a: Cargar (A, 15)


12

Llamar a: Invertir (A, B, 15)

Mostrar (“El arreglo original es”)


Llamar a: Muestra (A, 15)

Mostrar (“El arreglo invertido es”)


Llamar a: Muestra (B, 15)

Fin

You might also like