Principios de algoritmos UTP – resolución de exámenes finales

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:

  1. Defina las variables y ejecute la lectura de los datos de entrada.
  2. Calcule y muestra el total de personas que recibirán 10%, 15%, 20%, 25%.
  3. 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:

  1. Se debe ingresar la placa del vehículo.
  2. Se ingresa el tiempo que el vehículo permaneció parqueado en minutos.
  3. 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.
  4. 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%.
  5. 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.
  6. 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:

  1. Se debe ingresar la placa del vehículo.
  2. Se ingresa el tiempo que el vehículo permaneció parqueado en minutos.
  3. 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.
  4. 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%.
  5. 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.
  6. 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