Se resolverán exámenes pasados finales del curso de Principios de algoritmos de la UTP. Cada ejercicio se resuelve mediante un algoritmo bajo el paradigma de la programación estructurada aplicando las estructuras de control: secuenciales, selectivas y repetitivas. La representación de los algoritmos es a través de pseudocódigo y diagramas de flujo utilizando Pseint.
PREGUNTA 1
La gerencia de personal de una empresa, determina que es necesario aumentar los sueldos de sus empleados, para ello define la siguiente escala:
Si la empresa cuenta con una cantidad de trabajadores (cantidad desconocida), se solicita desarrollar un algoritmo en pseudocódigo que:
Solicite el tipo de colaborador y su sueldo:
- Defina las variables y ejecute la lectura de los datos de entrada.
- Calcule y muestra el total de personas que recibirán 10%, 15%, 20%, 25%.
- Calcule y muestre el monto total de aumento para obreros, empleados y el monto total a desembolsar por la empresa por efectos del aumento por tipo de empleado.
Pseint
Pseudocódigo
Proceso Pregunta1
Definir numeroTrabajadores, cont1, cont2, cont3, cont4 como Entero
Definir tipoColaborador, entradausuario Como Caracter
Definir sueldo, aumento, aumentoTotalObreros, aumentoTotalEmpleados, montoTotalDesembolsarEmpleado, montoTotalDesembolsarObrero como Real
cont1 <- 0
cont2 <- 0
cont3 <- 0
cont4 <- 0
aumentoTotalObreros <- 0
aumentoTotalEmpleados <- 0
montoTotalDesembolsarEmpleado <- 0
montoTotalDesembolsarObrero <- 0
Repetir
Repetir
Escribir "Ingrese tipo de colaborador: (Empleado (E) , Obrero (O))"
Leer tipoColaborador
Hasta Que tipoColaborador = 'E' o tipoColaborador = 'O'
Repetir
Escribir "Ingrese sueldo: "
Leer sueldo
Hasta Que sueldo > 0
aumento <- 0
Si tipoColaborador = 'E'
Si (sueldo >= 2501) Entonces
cont1 <- cont1 + 1
aumento <- sueldo * 0.10
SiNo
Si (sueldo >= 1201 y sueldo <= 2500)
cont2 <- cont2 + 1
aumento <- sueldo * 0.15
FinSi
FinSi
aumentoTotalEmpleados <- aumentoTotalEmpleados + aumento
// Se calcula el nuevo sueldo
sueldo <- sueldo + aumento
montoTotalDesembolsarEmpleado <- montoTotalDesembolsarEmpleado + sueldo
SiNo
Si (sueldo >= 901) Entonces
cont3 <- cont3 + 1
aumento <- sueldo * 0.20
SiNo
Si (sueldo <= 900)
cont4 <- cont4 + 1
aumento <- sueldo * 0.25
FinSi
FinSi
aumentoTotalObreros <- aumentoTotalObreros + aumento
// Se calcula el nuevo sueldo
sueldo <- sueldo + aumento
montoTotalDesembolsarObrero <- montoTotalDesembolsarObrero + sueldo
FinSi
Repetir
Escribir "¿Desea seguir ingresando obreros? (S/N)"
Leer entradausuario
Hasta Que (entradausuario = 'S' o entradausuario = 'N')
Hasta Que entradausuario = 'N'
Escribir "Total de personas que recibiran 10%: ', cont1
Escribir "Total de personas que recibiran 15%: ', cont2
Escribir "Total de personas que recibiran 20%: ', cont3
Escribir "Total de personas que recibiran 25%: ', cont4
Escribir "Monto total de aumento para empleados: ', aumentoTotalEmpleados
Escribir "Monto total de aumento para obreros: ', aumentoTotalObreros
Escribir "Monto total a desembolsar por tipo Empleado: ', montoTotalDesembolsarEmpleado
Escribir "Monto total a desembolsar por tipo Obrero: ', montoTotalDesembolsarObrero
FinProceso
Diagrama de flujo
PREGUNTA 2
Realizar una prueba de escritorio del siguiente pseudocódigo, y muestre en cada ciclo los valores de las variables que se indican en la tabla hasta finalizar el proceso:
Prueba de escritorio
Pseint
Pseudocódigo
Proceso Pregunta2
Definir j, m, n, r como Entero
j <- 2
m <- 10
n <- 0
r <- 0
Mientras j < 16 Hacer
Escribir "j=",j
Escribir "m=",m
Escribir "n=",n
Escribir "r=",r
Escribir "_________"
Si m > n Entonces
r <- m - 2 * j
FinSi
n <- n + 2
j <- j + 2
FinMientras
Escribir "Valor final"
Escribir "j=",j
Escribir "m=",m
Escribir "n=",n
Escribir "r=",r
Escribir "_________"
FinProceso
PREGUNTA 3
Elabore un programa que permita el ingreso de jugadores que estarán a prueba en un reconocido club de la capital, no se tiene certeza de la cantidad de jugadores que se presentarán a esta prueba.
Los datos que se solicitan al jugador son:
- Nombre completo.
- Código de afiliado a la AJFP.
- Edad.
- Número de clubes de primera división en las que ha jugado.
Una vez elegido el número de clubes en los que ha jugado, se solicitará por cada uno:
- Nombre del club.
- Número de minutos jugados en partidos oficiales.
Se pide:
a) El promedio del número de minutos totales jugadores en partidos oficiales por jugador.
b) El promedio de edad de los jugadores que se han presentado a la prueba.
c) El número total de jugadores que se han presentado a la prueba.
d) El promedio de la cantidad de clubes de primera división en los que han jugado los jugadores.
Si el número de letras de tu apellido es par resuelve las opciones a) y c)
Si el numero de letras de tu apellido paterno es impar resuelve las opciones b) y d)
Pseint
Pseudocódigo
Proceso Pregunta3
Definir numeroJugadores, edad, numeroClubes, minutosJugados, sumaMinutosJugados, sumaEdad, contadorCantidadClubes como Entero
Definir nombre, afiliado, nombreClub, entradausuario Como Caracter
Definir promedioMinutosJugados, promedioEdad, promedioCantidadClubes como Real
numeroJugadores <- 0
sumaEdad <- 0
contadorCantidadClubes <- 0
Repetir
numeroJugadores <- numeroJugadores + 1
Escribir "Nombre: "
Leer nombre
Escribir "Codigo afiliado: "
Leer afiliado
Repetir
Escribir "Ingrese edad: "
Leer edad
Hasta Que edad > 0
sumaEdad <- sumaEdad + edad
Repetir
Escribir "Ingrese numero de clubes de primera division: "
Leer numeroClubes
Hasta Que numeroClubes >= 0
contadorCantidadClubes <- contadorCantidadClubes + numeroClubes
sumaMinutosJugados <- 0
Si numeroClubes > 0 Entonces
Para i <- 1 Hasta numeroClubes Hacer
Escribir "Nombre Del Club: "
Leer nombreClub
Repetir
Escribir "Ingrese minutos jugados en partidos oficiales: "
Leer minutosJugados
Hasta Que minutosJugados > 0
sumaMinutosJugados <- sumaMinutosJugados + minutosJugados
FinPara
promedioMinutosJugados <- sumaMinutosJugados / numeroClubes
SiNo
promedioMinutosJugados <- 0
FinSi
// a
Escribir "Promedio del número de minutos totales jugados en partidos oficiales por el jugador numero ", numeroJugadores, " es: ", promedioMinutosJugados
Repetir
Escribir "¿Desea seguir ingresando jugadores? (S/N)"
Leer entradausuario
Hasta Que (entradausuario = 'S' o entradausuario = 'N')
Hasta Que entradausuario = 'N'
promedioEdad <- sumaEdad / numeroJugadores
promedioCantidadClubes <- contadorCantidadClubes / numeroJugadores
// b
Escribir "Promedio de edad de los jugadores que se presentaron a la prueba: ", promedioEdad
// c
Escribir "Numero total de jugadores que se presentaron a la prueba: ", numeroJugadores
// d
Escribir "Promedio de la cantidad de clubes de primera division en la que han jugado los jugadores: ", promedioCantidadClubes
FinProceso
Diagrama de flujo
PREGUNTA 4
Desarrollar un algoritmo que permita el salario de N personas, validando que este valor sea positivo. Luego mostrar un cuadro resumen que indique cuantas personas ganan menos de 5000 y cuantos de 5000 a más. Además, el promedio de salarios de las personas.
Consideraciones:
- Uso de estructuras repetitivas.
- Valida el salario, solo permite valores positivos.
- Muestra la cantidad de personas con sueldo de hasta 5000 y más de 5000.
- Muestra el promedio de salarios.
Pseint
Pseudocódigo
Proceso Pregunta1
Definir N, contadorMas5000, contadorMenos5000, contador5000 Como Entero
Definir salario, sumaSalario, promedioSalario como Real
Repetir
Escribir "Ingrese el numero de personas: "
Leer N
Hasta Que N > 0
sumaSalario <- 0
contadorMenos5000 <- 0
contadorMas5000 <- 0
contador5000 <- 0
Para i <- 1 hasta N Con Paso 1 Hacer
Repetir
Escribir "Salario persona ", i, ": "
Leer salario
Hasta Que salario > 0
sumaSalario <- sumaSalario + salario
Si salario > 5000 Entonces
contadorMas5000 <- contadorMas5000 + 1
SiNo
Si salario < 5000 Entonces
contadorMenos5000 <- contadorMenos5000 + 1
SiNo
contador5000 <- contador5000 + 1
FinSi
FinSi
FinPara
promedioSalario <- sumaSalario / N
Escribir "Numero de personas que ganan menos de 5000: ", contadorMenos5000
Escribir "Numero de personas que ganan mas de 5000: ", contadorMas5000
Escribir "Numero de personas que ganan 5000: ", contador5000
Escribir "Cantidad de personas con sueldo de hasta 5000: ", (contadorMenos5000 + contador5000)
Escribir "Promedio de salario de las personas: ", promedioSalario
FinProceso
Diagrama de flujo
PREGUNTA 5
Crear un programa en pseudocódigo para un estacionamiento que cumpla con las siguientes condiciones:
- Se debe ingresar la placa del vehículo.
- Se ingresa el tiempo que el vehículo permaneció parqueado en minutos.
- Si el vehículo es una motocicleta se cobra S/ 0.05 el minuto, S/ 0.10 el minuto si es un mototaxi, S/ 0.20 si es un auto, S/ 0.30 si es una camioneta y S/ 0.90 si es un camión.
- Si el vehículo permanece más de 2 horas se hace un descuento del 15%; si permanece más de 4 horas, un 20%; si son más de 6 horas, un 25% y si son más de 8 horas un 30%.
- Se debe mostrar un cuadro resumen que indique: la placa, el tiempo en horas y minutos, el importe base, el descuento y el importe final.
- El algoritmo solo debe permitir ingresar los tipos de vehículos mencionados y una cantidad de minutos mayor a cero, en caso no se ingresen valores correctos debe volver a pedirlos sin finalizar la ejecución.
Se evaluará:
- Validar el tipo de vehículo.
- Validar la cantidad de minutos.
- Calcular el precio base.
- Calcular el descuento.
- Calcular el precio final.
- Calcular el tiempo en horas y minutos. Por ejemplo, si se ingresa 200 minutos, se debe mostrar 3 horas y 20 minutos.
- Mostrar el cuadro resumen.
Pseint
Pseudocódigo
Proceso Pregunta2
Definir placa, tipo, ingresa Como Caracter
Definir tiempo Como Entero
Definir importeBase, descuento, importeFinal como Real
Definir horas, minutos como Entero
Repetir
Escribir "Ingrese Placa del vehiculo"
Leer placa
Repetir
Escribir "Ingrese Tipo del vehiculo: (M:motocicleta, N:mototaxi, A:auto, C:camioneta, K:camion): "
Leer tipo
Hasta Que tipo = 'M' o tipo = 'N' o tipo = 'A' o tipo = 'C' o tipo = 'K'
Repetir
Escribir "Tiempo de parqueado (minutos): "
Leer tiempo
Hasta Que tiempo > 0
Segun tipo Hacer
'M':
importeBase <- tiempo * 0.05
'N':
importeBase <- tiempo * 0.10
'A':
importeBase <- tiempo * 0.20
'C':
importeBase <- tiempo * 0.30
'K':
importeBase <- tiempo * 0.90
Fin Segun
descuento <- 0
Si tiempo > 480 Entonces
descuento <- importeBase * 0.30
SiNo
Si tiempo > 360 Entonces
descuento <- importeBase * 0.25
SiNo
Si tiempo > 240 Entonces
descuento <- importeBase * 0.20
SiNo
Si tiempo > 120 Entonces
descuento <- importeBase * 0.15
FinSi
FinSi
FinSi
FinSi
importeFinal <- importeBase - descuento
horas <- trunc(tiempo / 60)
minutos <- tiempo - horas * 60
Escribir "Cuadro de resumen: "
Escribir "Placa: ", placa
Escribir "Tiempo: ", horas, " horas y ", minutos, " minutos"
Escribir "Importe base: S/ ", importeBase
Escribir "Descuento: S/ ", descuento
Escribir "Importe final: S/ ", importeFinal
Repetir
Escribir "¿Va a ingresar mas vehiculos? S: Si , N: No"
Leer ingresa
Hasta Que (ingresa = 'S' o ingresa = 'N')
Hasta Que ingresa = 'N'
FinProceso
Diagrama de flujo
PREGUNTA 6
Realizar prueba de escritorio al siguiente algoritmo.
Prueba de escritorio
Pseint
Pseudocódigo
Proceso Test
Definir a, b, c Como Entero
a<-10
b<-10
c<-0
Escribir "a = ", a
Escribir "b = ", b
Escribir "c = ", c
Escribir "----------"
Para i<-12 Hasta 2 Con Paso -2 Hacer
a<-a-1
b<-b-2
c<-a*b
Escribir "i = ", i
Escribir "a = ", a
Escribir "b = ", b
Escribir "c = ", c
Escribir "----------"
FinPara
Escribir "Valores finales----------"
Escribir "a = ", a
Escribir "b = ", b
Escribir "c = ", c
FinProceso
PREGUNTA 7
Desarrollar un algoritmo que permita realizar para N empleados:
- Leer los salarios, validando que sean entre 1000 y 6000.
- Mostrar un reporte con el porcentaje de empleados que ganan menos de 1800, entre 1800 y 3500, y más de 3500.
- Mostrar el promedio de salarios.
Pseint
Pseudocódigo
Proceso Pregunta1
Definir N, contador1, contador2, contador3 Como Entero
Definir salario, sumaSalario, promedioSalario, porcentaje1, porcentaje2, porcentaje3 como Real
Repetir
Escribir "Ingrese el numero de empleados: "
Leer N
Hasta Que N > 0
sumaSalario <- 0
contador1 <- 0
contador2 <- 0
contador3 <- 0
Para i <- 1 hasta N Con Paso 1 Hacer
Repetir
Escribir "Salario persona ", i, ": "
Leer salario
Hasta Que salario >= 1000 y salario <= 6000
sumaSalario <- sumaSalario + salario
Si salario < 1800 Entonces
contador1 <- contador1 + 1
SiNo
Si salario <= 3500 Entonces
contador2 <- contador2 + 1
SiNo
contador3 <- contador3 + 1
FinSi
FinSi
FinPara
promedioSalario <- sumaSalario / N
porcentaje1 <- contador1 * 100 / N
porcentaje2 <- contador2 * 100 / N
porcentaje3 <- contador3 * 100 / N
Escribir "Porcentaje de personas que ganan menos de 1800: ", porcentaje1, "%"
Escribir "Porcentaje de personas que ganan entre 1800 y 3500: ", porcentaje2, "%"
Escribir "Porcentaje de personas que ganan de 3500: ", porcentaje3, "%"
Escribir "Promedio de salarios: S/", promedioSalario
FinProceso
Diagrama de flujo
PREGUNTA 8
Crear un programa en pseudocódigo para un estacionamiento que cumpla con las siguientes condiciones:
- Se debe ingresar la placa del vehículo.
- Se ingresa el tiempo que el vehículo permaneció parqueado en minutos.
- Si el vehículo es una motocicleta se cobra S/ 0.02 el minuto, S/ 0.25 el minuto si es un auto y S/ 0.30 si es una camioneta.
- Si el vehículo permanece más de 1 hora se hace un descuento del 10%; si permanece más de 2 horas, un 20%; si son más de 3 horas, un 30%.
- Se debe mostrar un cuadro resumen que indique: la placa, el tiempo en horas y minutos, el precio base, el descuento y el importe final.
- El algoritmo solo debe permitir ingresar los tipos de vehículos mencionados y una cantidad de minutos mayor a cero, en caso no se ingresen valores correctos debe volver a pedirlos sin finalizar la ejecución.
Se evaluará:
- Validar el tipo de vehículo.
- Validar la cantidad de minutos.
- Calcular el precio base.
- Calcular el descuento.
- Calcular el precio final.
- Calcular el tiempo en horas y minutos. Por ejemplo, si se ingresa 200 minutos, se debe mostrar 3 horas y 20 minutos.
- Mostrar el cuadro resumen.
Pseint
Pseudocódigo
Proceso Pregunta2
Definir N, tiempo Como Entero
Definir placa, tipo Como Caracter
Definir importeBase, descuento, importeFinal como Real
Definir horas, minutos como Entero
Repetir
Escribir "Ingrese el numero de vehiculos: "
Leer N
Hasta Que N > 0
Para i <- 1 hasta N Con Paso 1 Hacer
Escribir "Ingrese Placa del vehiculo #", i
Leer placa
Repetir
Escribir "Tiempo de parqueado (minutos): "
Leer tiempo
Hasta Que tiempo > 0
Repetir
Escribir "Ingrese Tipo del vehiculo: (M:motocicleta, A:auto, C:Camioneta): "
Leer tipo
Hasta Que tipo = 'M' o tipo = 'A' o tipo = 'C'
Segun tipo Hacer
'M':
importeBase <- tiempo * 0.20
'A':
importeBase <- tiempo * 0.25
'C':
importeBase <- tiempo * 0.30
Fin Segun
Si tiempo <= 60
descuento <- 0
Sino
Si tiempo <= 120
descuento <- importeBase * 0.10
SiNo
Si tiempo <= 180
descuento <- importeBase * 0.20
SiNo
descuento <- importeBase * 0.30
FinSi
FinSi
FinSi
importeFinal <- importeBase - descuento
horas <- trunc(tiempo / 60)
minutos <- tiempo - horas * 60
Escribir "REPORTE: "
Escribir "Placa: ", placa
Si (tiempo > 60) entonces
Escribir "Tiempo: ", horas, " horas y ", minutos, " minutos"
Sino
Escribir "Tiempo: ", tiempo, " minutos"
FinSi
Escribir "Precio base: S/ ", importeBase
Escribir "Descuento: S/ ", descuento
Escribir "Importe final: S/ ", importeFinal
FinPara
FinProceso
Diagrama de flujo
PREGUNTA 9
Realizar prueba de escritorio al siguiente algoritmo.
Prueba de escritorio
Pseint
Pseudocódigo
Proceso Pregunta3
Definir m, n, p Como Entero
m<-30
n<-6
p<-1
Mientras n > 2 Hacer
Escribir "true"
Escribir "m=", m
Escribir "n=", n
Escribir "p=", p
Escribir "-----------"
m <- n mod 2
n <- n - 1
p <- m - n
FinMientras
Escribir "false"
Escribir "m=", m
Escribir "n=", n
Escribir "p=", p
Escribir "-----------"
FinProceso