Download Programación estructurada
Document related concepts
Transcript
Programación estructurada 1. Definición La programación estructurada es un conjunto de técnicas utilizadas para escribir programas de forma clara. La programación estructurada se basa en el diseño descendente, esto es, se plantea una operación como un todo y se divide en segmentos más sencillos o de menor complejidad, facilitando así el desarrollo de un programa; una vez terminado todos los segmentos del programa se procede a unirlos. La programación estructurada logra minimizar la complejidad y errores de los programas. La principal desventaja de la programación estructurada, es que en el momento de hacerse demasiado grande puede resultar bastante problemático su manejo, ya que todo se constituye en un solo bloque. Utiliza únicamente tres estructuras: la secuencial, la selectiva y la iterativa. 2. Estructura secuencial Se representa por una sentencia ó un conjunto de sentencias (a la que en adelante llamaremos acción) que se ejecutan una a continuación de otra a modo de secuencia. Las sentencias se suceden de tal modo que la salida de una es la entrada de la siguiente, y así sucesivamente hasta finalizar el algoritmo. Su sintaxis es: Pseudocodigo Diagrama de flujo inicio Inicio Acción1 Acción2 . . . AcciónN Accion1 Accion2 . . . Fin AccionN Fin 2.1. Ejercicios resueltos Ejemplo 01 Pseudocódigo para sumar dos números. Lectura de datos nro1, nro2 Impresión de datos suma nro1 + nro2 suma Variables a utilizar en el pseudocódigo nro1 primer número nro2 segundo número suma suma dos números Inicio // Definir variables entero: nro1, nro2, suma // Lectura de datos Escribir (“Ingresar dos valores”) Leer (nro1, nro2) // Calcular suma suma nro1 + nro2 Escribir (“La suma de ambos números es: ” , suma) Fin Explicación Los Pseudocódigos están delimitados por las palabras: Inicio y Fin. Los comentarios son mensajes de texto opcionales que se utiliza para documentar un programa haciéndolo fácilmente entendibles a los lectores. Empieza con los caracteres “//” seguido a continuación del comentario deseado. En nuestro ejemplo se ha utilizado: // Definir e inicializar variables // Lectura de datos // Calcular suma Se definen todas las variables que se van a utilizar en el desarrollo del algoritmo. En nuestro ejemplo: entero: nro1, nro2, suma Aqui se define el tipo de dato de las variables y a continuación la lista de variables separadas por comas. Se utiliza la palabra Leer para introducir el valor de una variable a través del teclado o algún otro medio. En nuestro ejemplo: Leer (nro1, nro2) Se asigna un valor a una variable, a través del símbolo flecha ( ) que dice que el valor a la derecha tiene que ser asignado a la variable que esta a la izquierda. En nuestro ejemplo: suma nro1 + nro2 Se suman los números nro1 y nro2 utilizando el operador “+”. Luego este resultado es asignado a la variable suma. Se usa la palabra Escribir para identificar una salida estándar a través del monitor o consola. En nuestro ejemplo: Escribir (“La suma de ambos números es: ”, suma) De esta forma, se muestra en la pantalla el siguiente texto: La suma de ambos números es: … , en este caso el operador “,” une el texto La suma de ambos números es: con el contenido de la variable suma. Ejemplo 02 Pseudocódigo para calcular el área de un rectángulo, donde la base y la altura serán ingresados. La fórmula es: area = base * altura Lectura de datos base, altura Impresión de datos area base * altura area Variables a utilizar en el pseudocódigo base base del rectángulo altura altura del rectángulo area área del rectángulo Inicio // Definir variables entero: base, altura, area // Lectura de datos Escribir (“Ingrese la base y la altura”) Leer (base, altura) // Proceso: calculo del area area base * altura // Salida de resultados Escribir (“El área del rectángulo es ”,area) Fin Ejemplo 03 Pseudocódigo para determinar la suma de las cifras de un número entero positivo de 3 cifras. Por ejemplo para sumar las cifras del número 257 se tiene: 2 + 5 + 7 = 14 Para obtener cada cifra del número será necesario realizar divisiones sucesivas entre 10. Lectura de datos Impresión de datos nro suma unidades nro Mod 10 nro nro Div 10 decenas nro Mod 10 nro nro Div 10 centenas nro Mod 10 unidades + decenas + centenas Variables a utilizar en el pseudocódigo nro número ingresado de tres dígitos suma suma de los dígitos del número unidades unidades del número decenas decenas del número centenas centenas del número Inicio // Definir e inicializar variables entero: nro, unidades, decenas, centenas, suma // Lectura de datos Leer (nro) // Proceso de cálculo unidades nro Mod 10 nro nro Div 10 decenas nro Mod 10 nro nro Div 10 centenas nro Mod 10 suma unidades + decenas + centenas // Salida de resultados Escribir (“La suma de los dígitos es ”, suma) Fin 0 suma Ejemplo 04 Pseudocódigo para sumar dos tiempos dados en horas, minutos y segundos. Por ejemplo: Tiempo 1 = 8:15:56 Tiempo 2 = 10:58:43 1 8 10 19 : : 19 : 1 15 58 74 60 14 : : 60 1 : 56 43 99 60 39 60 1 Para el desarrollo del pseudocódigo se suman los segundos de los dos tiempos, el resultado de esta suma se divide entre 60, siendo el residuo de esta división el total de segundos y el cociente se suma a los minutos, de igual forma se realiza la suma de los minutos, el resultado de esta suma se divide entre 60, siendo el residuo de la división el total de minutos y el cociente se suma a las horas. Lectura de datos hor1, min1, seg1 hor2, min2, seg2 Impresión de datos seg seg1 + seg2 llevaMin seg Div 60 seg seg Mod 60 min llevaMin + min1 + min2 llevaHora min Div 60 min min Mod 60 hor llevaHora + hor1 + hor2 hor, min, seg Variables a utilizar en el pseudocódigo hor1 horas del primer tiempo min1 minutos del primer tiempo seg1 segundos del primer tiempo hor2 horas del segundo tiempo min2 minutos del segundo tiempo seg2 segundos del segundo tiempo llevaMin minutos que se lleva llevaHora hora que se lleva hor horas resultante min minutos resultante seg segundos resultante Inicio // Definir variables entero: hor1, min1, seg1, llevaMin,hor2, min2, seg2, llevaHora, hor, min, seg // Lectura de datos Escribir (“Ingresar primer tiempo”) Leer (hor1, min1, seg1) Escribir (“Ingresar segundo tiempo”) Leer (hor2, min2, seg2) // Determina la cantidad total de segundos entre los dos tiempos seg seg1 + seg2 llevaMin seg Div 60 seg seg Mod 60 min llevaMin + min1 + min2 llevaHora min Div 60 min min Mod 60 hor llevaHora + hor1 + hor2 // Salida de resultados Escribir (“La suma de los 2 tiempos es ”, hor, min, seg) Fin Ejemplo 05 Pseudocódigo que permita pasar de grados centígrados a grados Farenheit sabiendo que: 9 ºF º C 32 5 El siguiente cuadro muestra resultados con datos de prueba, para diferentes valores de la variable centi. centi 10 20 30 40 faren 50 68 86 104 Lectura de datos centi Impresión de datos faren 9/5*centi +32 faren Variables a utilizar en el pseudocódigo centi medida ingresada en centígrado faren medida en farenheit Inicio // Definir variables real: centi, faren // Lectura de datos Escribir (“Ingresar grados centígrados”) Leer (centi) // Proceso de cálculo: conversión de temperatura faren 9 / 5 * centi +32 // Salida de resultados Escribir (centi, “ centígrado equivale a ”, faren, “ Farenheit“) Fin Ejemplo 06 Pseudocodigo calcular la suma de los “n” primeros números naturales. Emplear la fórmula: n(n 1) suma 2 Lectura de datos nro Impresión de datos suma nro*(nro+1)/2 suma Variables a utilizar en el pseudocódigo nro nro ingresado suma suma de los nros Inicio // Definir variables entero: nro, suma // Lectura de datos Escribir (“Ingresar cantidad de números a sumar”) Leer (nro) // Proceso de cálculo: Suma de los “n” nros naturales suma nro * (nro + 1) / 2 // Salida de resultados Escribir (“La suma es ”, suma) Fin Factor de conversión Es una fracción en la que el numerador y denominador son medidas iguales expresadas en unidades distintas, de tal manera, que esta fracción vale la unidad. Método efectivo para cambio de unidades y resolución de ejercicios sencillos dejando de utilizar la regla de tres. Ejemplo 1: Pasar 15 pulgadas a centímetros (1 pulgada = 2.54 cm) 15 pulgadas × (2.54 cm / 1 pulgada) = 15 × 2.54 cm = 38.1 cm. Ejemplo 2: Pasar 25 metros por segundo a kilómetros por hora (1 kilómetro = 1000 metros, 1 hora = 3600 segundos) 25 m/s × (1 km / 1000 m ) × (3600 s / 1 h) = 90 km/h. Ejemplo 07 Pseudocódigo para convertir una longitud dada en metros a sus equivalentes en milímetros, centímetros, pies, pulgadas y yardas. Se sabe que: 1 1 1 1 1 1 metro = 1000 milímetros metro = 100 centímetros pulgada = 2.54 centímetros pie = 12 pulgadas yarda = 3 pies Kilómetro = 1000 metros El siguiente cuadro muestra resultados con datos de prueba, para diferentes valores: Metros 5 10 20 50 70 Milímetros 5000 10000 20000 50000 70000 Centímetros 500 1000 2000 5000 7000 Pulgadas 196.85 393.701 787.402 1968.50 2755.91 Pies 16.4042 32.8084 65.6168 164.042 229.659 Yardas 5.46807 10.9361 21.8723 54.6807 76.5529 Kilómetros 0.005 0.01 0.02 0.05 0.07 Impresión de datos Lectura de datos metros mili 1000*metros cent metros*100 pulg cent/2.54 pies pulg/12 yarda pies/3 km m /1000 mili, cent, pulg, pies, yardas, km Variables a utilizar en el pseudocódigo metros medida ingresada en metros mili medida en milímetros cent medida en centímetros pies medida en pies pulg medida en pulgadas yarda medida en yardas Inicio // Definir variables real: metros, mili, cent, pies, pulg, yarda, km // Lectura de datos Escribir (“Ingresar medida en metros”) Leer (metros) // Proceso de cálculo: conversiones métricas mili 1000 * metros cent metros * 100 pulg cent / 2.54 pies pulg / 12 yarda pies / 3 km metros / 1000 // Salida de resultados Escribir (metros, “metros equivale a ”, mili, “ milímetros ”, cent, “Centímetros ”, pulg, “pulgadas ”, pies, “ pies ”, yarda, “ yardas ”, km, “Kilómetros”) Fin Ejemplo 08 Pseudocódigo para convertir pesos, dado en gramos a sus equivalentes en miligramos, kilogramos, onza y libras. Se sabe que: 1 1 1 1 1 gramo = 1000 miligramos kilogramo = 1000 gramos onza = 28.35 gramos libra = 16 onzas = 453.6 gramos tonelada = 2000 libras El siguiente cuadro muestra resultados con datos de prueba, para diferentes valores: Gramos 500 300 600 700 900 Miligramos 500000 300000 20000 50000 900000 Kilogramos 0.5 0.3 0.6 0.7 0.9 Onza 17.6367 10.5822 21.1644 24.6918 31.7466 Libra 1.10229 0.66139 1.32277 1.54324 1.98416 Toneladas 0.0005 0.0003 0.0006 0.0007 0.0009 Lectura de datos Impresión de datos mili kilo onza libra gramo 1000*gramo gramo/1000 gramo/28.35 gramo/453.6 mili, kilo, onza, libra Variables a utilizar en el pseudocódigo gramo peso ingresada en gramos mili peso en miligramos kilo peso en kilos onza peso en onza libra peso en libra tm peso en toneladas Inicio // Definir variables real: gramo, mili, kilo, onza, libra, tm // Lectura de datos Escribir (“Ingresar peso en gramos”) Leer (gramo) // Proceso de cálculo: conversiones de pesos mili 1000 * gramo kilo gramo / 1000 onza gramo / 28.35 libra gramo / 453.6 tm libra / 2000 // Salida de resultados Escribir (gramo, “gramos equivale a ”, mili, “ miligramos “, kilo, “ Kilogramos ”, onza, “ Onzas ”, libra, “ Libra ”, tm , “ toneladas ”) Fin Ejemplo 09 Pseudocódigo para convertir velocidades dada en metros/segundos a equivalentes en km/hora, km/seg, pies/seg, milla/hora, nudo. Se sabe que: 1 1 1 1 1 1 sus km = 1000 metros minuto = 60segundos hora = 3600 segundos nudo = 1.852 km pie = 12 pulgadas =0.3048 metros milla =1.609 km El siguiente cuadro muestra resultados con datos de prueba, para diferentes valores: Mts/seg 10 20 30 40 50 Km/hora 36 72 108 144 180 Km/seg 0.01 0.02 0.03 0.04 0.05 Pies/seg 32.8084 65.6168 98.4252 131.234 164.042 Milla/hora 22.3741 44.7483 67.1224 89.4966 111.871 Nudo 19.4384 38.8769 58.3153 77.7538 97.1922 Lectura de datos metroSeg Impresión de datos kmHora metroSeg * 3.6 kmSeg metroSeg/1000 piesSeg 100 * metroSeg /30.48 millaHora 3600 * metroSeg /1609 nudo 3600 * metroSeg /1852 kmHora, kmSeg, piesSeg, millaHora, nudo Variables a utilizar en el pseudocódigo metroSeg medida ingresada en metros/ seg kmHora medida en kilómetros/ Hora kmSeg medida en kilómetros/seg piesSeg medida en pies/ seg millaHora medida en millas /hora nudo medida en nudos Inicio // Definir variables real: metroSeg, kmHora, kmSeg, piesSeg, millaHora, nudo // Lectura de datos Escribir (“Ingresar velocidad en metros y segundos”) Leer (metroSeg) // Proceso de cálculo: conversiones de velocidades kmHora metroSeg * 3.6 kmSeg metroSeg / 1000 piesSeg metroSeg / 0.3048 millaHora 3600 * metroSeg / 1609 nudo 3600 * metroSeg / 1852 // Salida de resultados Escribir (metroSeg, “ Metros/seg equivale a ”, kmHora, “ Kilómetros/hora ”, kmSeg, “ Kilómetros /seg ”, piesSeg, “ Pie/seg ”, millaHora, “ Millas/hora ”, nudo, “ Nudo ”) Fin Ejemplo 10 En una tienda se ha puesto en oferta la venta de cierto tipo de producto ofreciendo un descuento fijo del 15% del monto de la compra. Elabore un algoritmo que determine el monto del descuento y el monto a pagar por la compra de cierta cantidad de unidades del producto. Lectura de datos precio, cantidad Impresión de datos compra precio * cantidad desc 0.15 * compra montoAPagar compra - desc Variables a utilizar en el pseudocódigo cantidad cantidad de productos a comprar precio precio del producto desc monto descontado compra monto de la compra montoAPagar monto a pagar Inicio desc, compra // Definir variables entero: cantidad real: precio, desc, compra, montoAPagar // Lectura de datos Escribir (“Ingresar precio del producto”) Leer (precio) Escribir (“Ingresar cantidad”) Leer (cantidad) // Proceso de calculo compra precio * cantidad desc 0.15 * compra montoAPagar compra - desc // Salida de resultados Escribir (“El monto del descuento es ”, desc) Escribir (“El monto a pagar es ”, montoAPagar) Fin Ejemplo 11 Pseudocódigo que determina el porcentaje de varones y de mujeres que hay en un salón de clase. Lectura de datos cvar, cmuj Impresión de datos total cvar + cmuj pvar (cvar * 100) / total pmuj 100 - pvar pvar, pmuj Variables a utilizar en el pseudocódigo cvar cantidad de varones cmuj cantidad de mujeres total total de alumnos pvar porcentaje de varones pmuj porcentaje de mujeres Inicio // Definir variables entero: cvar, cmuj, total real: pvar, pmuj // Lectura de datos Escribir (“Ingresar cantidad de varones”) Leer (cvar) Escribir (“Ingresar cantidad de mujeres”) Leer (cmuj) // Proceso de calculo total cvar + cmuj pvar (cvar * 100) / total pmuj 100 - pvar // Salida de resultados Escribir (“El porcentaje de varones es ”, pvar) Escribir (“El porcentaje de mujeres es ”, pmuj) Fin Ejemplo 12 Pseudocódigo que intercambie las cifras de las unidades de dos números naturales. Por ejemplo: Número 1: 2485 Número 2: 17 Intercambiando sus unidades se obtiene: 2487 y 15. Lectura de datos nro1, nro2 Impresión de datos unro1 unro2 nro1 nro1 nro2 nro2 nro1 Mod 10 nro2 Mod 10 – unro1 + unro2 – unro2 + unro1 nro1, nro2 Variables a utilizar en el pseudocódigo nro1 primer número ingresado nro2 segundo número ingresado unro1 unidades del primer número unro2 unidades del segundo número Inicio // Definir variables entero: nro1, nro2, unro1, unro2 // Lectura de datos Escribir (“Ingresar dos números”) Leer (nro1, nro2) // Proceso de calculo unro1 nro1 Mod 10 unro2 nro2 Mod 10 nro1 nro1 – unro1 + unro2 nro2 nro2 – unro2 + unro1 // Salida de resultados Escribir (“Los números intercambiados son ”, nro1, nro2) Fin Ejemplo 13 Pseudocódigo que convierte una hora expresada como un número real a su equivalente en horas, minutos y segundos. Por ejemplo: Hora: 16.235 Equivale a: 16 horas, 14 minutos y 6 segundos Lectura de datos hora Impresión de datos hor entero (hora) hora hora - hor minuto hora * 60 min entero (minuto) minuto minuto - min segundo minuto * 60 seg entero (segundo) segundo segundo – seg cs segundo * 100 hor, min, seg, cs Para la resolución de este ejemplo se hace uso de la función predefinida entero(). Variables a utilizar en el pseudocódigo hora hora real minuto minuto real segundo segundo real hor hora entera min seg cs minuto entero segundo entero centésimo de segundos entero Inicio // Definir variables real: hora, minuto, segundo entero: hor, min, seg, cs // Lectura de datos Escribir (“Ingresar hora”) Leer (hora) // Proceso de cálculo hor entero (hora) hora hora - hor minuto hora * 60 min entero (minuto) minuto minuto - min segundo minuto * 60 seg entero (segundo) segundo segundo – seg cs segundo * 100 // Salida de resultados Escribir (“El equivalente es ”, hor, min, seg, cs) Fin Ejemplo 14 Pesudocódigo para calcular el monto final que se paga por la compra de un auto al crédito, al precio de venta se le aumenta el 4% de impuestos estatales, de tal forma que el cliente tendrá que pagar como cuota inicial el 20% de este nuevo precio, el monto financiado tendrá un interés del 7% anual. Lectura de datos precio, tiempo Impresión de datos imp 0.04 * precio precio precio + imp cuota 0.20 * precio finan precio - cuota inter 0.07 * finan * tiempo total cuota + finan + inter Variables a utilizar en el pseudocódigo imp impuesto estatal precio precio del auto cuota cuota inicial finan monto financiado inter intereses generados total total a pagar tiempo tiempo a financiar Inicio // Definir variables real: imp, precio, cuota, finan, inter, total // Lectura de datos Escribir (“Ingresar precio”) Leer (precio) Escribir (“Ingresar años financiados”) total Leer (tiempo) // Proceso de cálculo imp 0.04 * precio precio precio + imp cuota 0.20 * precio finan precio - cuota inter 0.07 * finan * tiempo total cuota + finan + inter // Salida de resultados Escribir (“El total a pagar es ”, total) Fin Ejemplo 15 Pseudocódigo para calcular la cantidad de arena que se necesita para pulir una pared, se conoce las medidas de la pared (largo y alto) y se sabe que se necesita 0,5 metros cúbicos de arena por cada metro cuadrado de pared. Lectura de datos largo, alto Impresión de datos area arena largo * alto 0.5 * area arena Variables a utilizar en el pseudocódigo largo largo de la pared ancho ancho de la pared area área total de la pared arena cantidad de arena que se necesita Inicio // Definir variables real: largo, alto, area, arena // Lectura de datos Escribir (“Ingresar largo y alto de la pared”) Leer (largo, alto) // Proceso de cálculo area largo * alto arena 0.5 * area // Salida de resultados Escribir (“Se necesita ”, arena, “metros cúbicos de arena”) Fin Ejemplo 16 Pesudocódigo para calcular el tiempo que tarda el atleta en dar 2 vueltas a una pista de atletismo, se tiene como datos la velocidad en metros/segundos y el radio de la circunferencia de la pista, se sabe además que el atleta descansa 1 minuto cada 100 metros. Lectura de datos Impresión de datos recor vel, radio (2 * 3.1416 * radio) * 2 tiempo recor / vel tiemdes (recor Div 100) * 2 tiempo tiempo + tiemdes tiempo Variables a utilizar en el pseudocódigo vel velocidad que corre el atleta radio radio de la pista de atletismo recor recorrido total tiemdes tiempo que descansa el atleta tiempo tiempo empleado en dar 2 vueltas a la pista Inicio // Definir variables real: vel, radio, recor, tiempo, tiemdes // Lectura de datos Escribir (“Ingresar velocidad”) Leer (vel) Escribir (“Ingresar radio”) Leer (radio) // Proceso de cálculo recor (2 * 3.1416 * radio) * 2 tiempo recor / vel tiemdes (recor Div 100) * 2 tiempo tiempo + tiemdes // Salida de resultados Escribir (“El tiempo empleado en dar 2 vueltas es ”, tiempo) Fin Ejemplo 17 Pseudocódigo para calcular el precio de venta de una pizza; el tamaño de la pizza varía según la solicitud del cliente, quien determina el diámetro en centímetros que tendrá la pizza. El costo básico (pizza sin ingredientes extras) es de 0,48 soles por cm, el costo de cada ingrediente extra agregado a la pizza base es de 0,10 soles por cm, el precio de venta de la pizza se obtiene recargando un 120% en costo total. Lectura de datos diam, extra Impresión de datos precio diam * 0.48 adic extra * diam recar (precio + adic) * 1.2 venta precio + adic + recar Variables a utilizar en el pseudocódigo diam diámetro de la pizza extra cantidad de ingredientes extras precio precio base de la pizza adic monto adicional por los ingredientes extras recar monto recargado venta precio de venta Inicio // Definir variables entero: diam, extra real: precio, adic, recar, venta // Lectura de datos Escribir (“Ingresar diámetro de la pizza”) Leer (diam) Escribir (“Ingresar cantidad de ingredientes extras”) Leer (extra) venta // Proceso de cálculo precio diam * 0.48 adic extra * diam recar (precio + adic) * 1.2 venta precio + adic + recar // Salida de resultados Escribir (“El precio de venta es ”, venta) Fin Ejemplo 18 Pesudocódigo para calcular el mínimo de monedas de 2.00, 1.00, 0.50, 0.20 y 0.10 que una máquina electrónica da como vuelto por la compra de un paquete de galletas, dicha maquina solo acepta monedas de 5 soles. Lectura de datos precio Impresión de datos vuelto 5 – precio vueltoEnt entero (vuelto) vueltoReal (vuelto – vueltoEnt) * 100 m2 vueltoEnt Div 2 m1 vueltoEnt Mod 2 m50 vueltoReal Div 50 vueltoReal vueltoReal Mod 50 m20 vueltoReal Div 20 m10 vueltoReal Mod 20 m1, m2, m50, m20, m10 Variables a utilizar en el pseudocódigo precio precio de la galleta vuelto vuelto de la compra vueltoEnt parte entera del vuelto expresado como valor entero vueltoReal parte fraccionaria del vuelto expresado como valor entero m2 cantidad de monedas de 2.00 soles m1 cantidad de monedas de 1.00 sol m50 cantidad de monedas de 0.50 céntimos m20 cantidad de monedas de 0.20 céntimos m10 cantidad de monedas de 0.10 céntimos Inicio // Definir variables entero: vueltoEnt, vueltoReal, m1, m2, m50, m20, m10 real: precio, vuelto // Lectura de datos Escribir (“Ingresar precio de la galleta”) Leer (precio) // Proceso de cálculo vuelto 5 – precio vueltoEnt entero (vuelto) vueltoReal (vuelto – vueltoEnt) * 100 m2 vueltoEnt Div 2 m1 vueltoEnt Mod 2 m50 vueltoReal Div 50 vueltoReal vueltoReal Mod 50 m20 vueltoReal Div 20 m10 vueltoReal Mod 20 // Salida de resultados Fin Escribir (“Se recibe ”, m2, “monedas de 2.00 soles”, m1, “monedas de 1.00 sol”, m50, “monedas de 0.50 céntimos”, m20, “monedas de 0.20 céntimos”, m10, “monedas de 0.10 céntimos”) Ejemplo 19 Pseudocódigo para calcular el tiempo, en horas y minutos que emplea un profesor para calificar un grupo de exámenes. Se tienen tres tipos de examen A, B, C y el tiempo en minutos requerido para cada tipo son: A = 5 min, B = 7 min y C = 8 min. Lectura de datos Impresión de datos tiempo ca, cb, cc (ca*5) + (cb*7) + (cc*8) hor tiempo Div 60 min tiempo Mod 60 hor, min Variables a utilizar en el pseudocódigo ca cantidad de exámenes tipo a cb cantidad de exámenes tipo b cc cantidad de exámenes tipo c hor horas empleadas para calificar los exámenes min minutos empleados para calificar los exámenes tiempo tiempo en horas,minutos para calificar los exámenes Inicio // Definir variables entero: ca, cb, cc, hor, min // Lectura de datos Escribir (“Ingresar cantidad de exámenes tipo A”) Leer (ca) Escribir (“Ingresar cantidad de exámenes tipo B”) Leer (cb) Escribir (“Ingresar cantidad de exámenes tipo C”) Leer (cc) // Proceso de cálculo tiempo (ca * 5) + (cb * 7) + (cc * 8) hor tiempo Div 60 min tiempo Mod 60 // Salida de resultados Escribir (“Se emplea ”, hor, “horas con”, min, “minutos”) Fin 2.2.Ejercicios Propuestos 1. Dada las siguientes ecuaciones: a = b + 2c + 3m c = a + 3b + n z = m + n + 5a Diseñe un pesudocódigo que determine los valores de m y z conociendo los valores de a, b, y c. 2. Una persona tiene 2 recipientes llenos de gasolina cuyas capacidades están dadas en galones y pies cúbicos, respectivamente. Diseñe un pesudocódigo que determine la cantidad total de gasolina en metros cúbicos, pies cúbicos y yardas cúbicas. Considere los siguientes factores de conversión: 1 pie cúbico = 0.0283 metros cúbicos 1 galón = 3.79 litros 1 metro cúbico = 1000 litros 1 yarda cúbica = 27 pies cúbicos 3. Diseñe un pesudocódigo que calcule las HH:MM:SS transcurridos entre dos tiempos. Ambos tiempos vienen dados en el formato HH:MM:SS. 4. Diseñe un pesudocódigo que lea la hora actual del día HH:MM:SS y determine cuantas horas, minutos y segundos restan para culminar el día. 5. El sueldo neto de un vendedor se calcula como la suma de un sueldo básico más el 12% del monto total que ha vendido. Diseñe un pesudocódigo que determine el sueldo neto de un vendedor sabiendo que hizo tres ventas en el mes. 6. Elaborar un pseudocódigo que permita convertir un volumen dado en litros a sus equivalentes en mililitros, hectolitro, pie cúbico, pinta, galones. Se sabe que: 1 litro = 1000 mililitros 1 hectolitro = 100 litros 1 pie cúbico = 28.32 litros 1 onza fluida = 29.57 mililitro 1 pinta = 16 onza fluida 1 galón = 3.785 litros 7. Desarrollar un programa que dado el largo y el ancho de un campo, permita determinar cuantos metros de alambre serán necesarios para colocar al perímetro 5 hilos de alambrado. 8. Una empresa exportadora de trigo trabaja con 2 proveedores; el primer proveedor le brinda una cierta cantidad de trigo en gramos y el segundo proveedor otra cierta cantidad de trigo en libras. Se pide elaborar un pesudocódigo que calcule la cantidad total de trigo que obtiene la empresa. 1 libras = 16 onzas 1 onza = 28.35 gramos 1 kilogramo = 1000 gramos 1 tonelada = 1000 kilogramos 9. Calcular el perímetro de una circunferencia dado su radio. Luego calcule el perímetro de la misma si se reduce al 50%, y el perímetro de la misma si se reduce al 25% con respecto al resultado anterior. 10. La calificación final de un estudiante viene dada por tres calificaciones: nota de laboratorio que cuenta un 30% del total, nota de examen parcial que cuenta un 20% del total y nota de examen final que cuenta el 50% restante. Diseñar un pesudocódigo que lea la nota de laboratorio, la nota del examen parcial y la nota del examen final de un estudiante y muestre el tanto por ciento correspondiente a cada una de las notas así como la calificación final. 11. Diseñe un algoritmo que lea un número de 4 dígitos luego intercambie el primer digito con el último dígito. 12. Una empresa constructora ofrece departamentos al crédito, para adquirir un departamento se abona una cuota inicial del 12% y se determina la cantidad de años que se financia. Al monto financiado se le aplica un interés del 10% anual. Diseñar un pesudocódigo que calcule el monto mensual que se paga por un departamento. 13. Tres personas deciden invertir su dinero para fundar una empresa. Cada una de ellas invierte una cantidad distinta. Obtener el porcentaje que cada persona invierte con respecto a la cantidad total invertida. 3. Estructura selectiva Para poder desarrollar aplicaciones, no basta con ejecutar sentencias secuenciales, también resulta esencial tomar decisiones en base a evaluaciones de expresiones lógicas que nos señalaran el camino alternativo a seguir. El tipo de resultado de una estructura selectiva es lógico (booleano), es decir, verdadero (true) o falso (false). Las estructuras selectivas que se utilizan para tomar decisiones podemos clasificarlas en: simple, doble y múltiple. 3.1.Estructura selectiva simple: Si - Fin_si Evalúa una expresión lógica y si su resultado es verdadero (true), se ejecuta una acción determinada. Su sintaxis es la siguiente: Si (expresión_lógica) entonces Acción(es) Fin_si Funcionamiento de la estructura selectiva Si - Fin_si Cuando la sentencia Si - Fin_si inicia su ejecución, se suceden los siguientes pasos: a) Se evalúa una expresión_lógica, obteniéndose un resultado lógico. b) Si este resultado es verdadero (true), se ejecuta una acción, luego el pseudocódigo proseguirá con la siguiente acción que sigue al Fin_si. c) Si este resultado es falso (false), la ejecución del pseudocódigo saltará a la acción que sigue al Fin_si, es decir, no se ejecuta la acción que se encuentra a continuación del Si. Ejemplo 01 Pseudocódigo que lea tres notas de un alumno: examen parcial, examen final y promedio de prácticas imprima el promedio final del estudiante y el mensaje “aprobado”, solo si el promedio final es mayor o igual que 10.5. El siguiente cuadro muestra los resultados con datos de prueba: exPar exFin promP 14 10 16 14 12 15 promedio = (exPar+exFin+promP)/3 14.00 13.00 Variables a utilizar en el pseudocódigo exPar examen parcial exFin examen final promP promedio de prácticas promedio promedio final Inicio // Definir variables real: exPar, exFin, promP, promedio // Lectura de datos Escribir (“Ingresar tres notas:”) Leer (exPar, exFin, promP) mensaje aprobado aprobado // Calcula promedio promedio (exPar + exFin + promP) / 3 Si (promedio >= 10.5) entonces Escribir (“El promedio es ”, promedio, "aprobado”) Fin_si Fin Explicación Para resolver el ejemplo planteado se definen las variables reales exPar, exFin, promP y promedio: real: exPar, exFin, promP, promedio Se ingresa tres notas exPar, exFin, promP: Escribir (“Ingresar tres notas”) Leer (exPar, exFin, promP) Posteriormente se calcula el promedio de las tres notas ingresadas exPar, exFin, promP: promedio (exPar + exFin + promP) / 3 Con el promedio calculado se evalua la expresión lógica (promedio >= 10.5) si esta condición es verdadera se imprime el mensaje solicitado: Si (promedio>=10.5) entonces Escribir (“El promedio es ”, promedio, "aprobado”) Fin_si Ejemplo 02 Pseudocódigo que lea el sueldo de un trabajador, aplique un aumento del 15% si su sueldo es inferior a 500 e imprima el nuevo sueldo. Variables a utilizar en el pseudocódigo sueldo sueldo aum aumento nuevoSueldo nuevo sueldo Inicio // Definir variables real: sueldo, nuevoSueldo, aum 0 // Lectura de datos Escribir (“Ingresar sueldo: ”) Leer (sueldo) // Calcula el sueldo Si (sueldo >=0 and sueldo < 500) entonces aum 0.15*sueldo Fin_si nuevoSueldo sueldo + aum Escribir (“Nuevo sueldo ”, nuevoSueldo) Fin Ejemplo 03 Pseudocódigo calcula el monto final que se paga por un consumo en un restaurante, sabiendo que por consumos mayores a S/.100.00 se aplica un descuento del 20%. Variables a utilizar en el pseudocódigo consumo monto del consumo desc descuento montoFinal monto final a pagar Inicio // Definir e inicializar variables real: consumo, desc 0, montoFinal // Lectura de datos Escribir (“Ingresar consumo: ”) Leer (consumo) // Calcula el descuento Si (consumo > 100) entonces desc 0.20 * consumo Fin_si montoFinal consumo - desc Escribir (“El total a pagar es ”, montoFinal) Fin Ejemplo 04 Pseudocódigo que calcula el sueldo semanal de un obrero que trabaja por horas, si durante la semana trabajó más de 40 horas se le paga por cada hora extra dos veces la tarifa normal. Variables a utilizar en el pseudocódigo tarifa tarifa de cada hora trabajada horas total de horas trabajadas extra pago extra sueldo sueldo del obrero Inicio // Definir e inicializar variables real: tarifa, sueldo, extra 0 entero: horas // Lectura de datos Escribir (“Ingresar tarifa: ”) Leer (tarifa) Escribir (“Ingresar horas trabajadas: ”) Leer (horas) // Calcula el sueldo sueldo horas * tarifa Si (horas > 40) entonces extra (horas – 40) * (2*tarifa) Fin_si sueldo sueldo +extra Escribir (“El sueldo final es ”, sueldo) Fin Ejemplo 05 Pseudocódigo para hallar el menor de 4 números. Variables a utilizar en el pseudocódigo nro1 primer número nro2 segundo número nro3 tercero número nro4 cuarto número menor menor número Inicio // Definir variables entero: nro1, nro2, nro3, nro4, menor // Lectura de datos Escribir (“Ingresar 4 números: ”) Leer (nro1, nro2, nro3, nro4) // Proceso menor nro1 Si (nro2 < menor) entonces menor nro2 Fin_si Si (nro3 < menor) entonces menor nro3 Fin_si Si (nro4 < menor) entonces menor nro4 Fin_si Escribir (“El menor es ”, menor) Fin 3.2. Estructura selectiva doble: Si – Sino – Fin_si Se evalúa la expresión-lógica, si este resultado es verdadero se ejecuta la Accion1, si el resultado es falso se ejecuta la Accion2. En ambos casos, luego de finalizar la acción seleccionada, se termina la sentecia Si – Sino - Fin_si y la ejecución del pseudocódigo proseguirá con la primera sentencia que sigue al Si - Sino - Fin_si. Su sintaxis es la siguiente: Si (expresión_lógica) entonces Acción1 Sino Acción2 Fin_si Funcionamiento de la estructura selectiva Si – Sino - Fin_si Cuando la sentencia Si – Sino - Fin_si inicia su ejecución, se suceden los siguientes pasos: a) Se evalúa expresión-lógica, obteniendo un resultado lógico. b) Si este resultado es verdadero, se ejecuta la Acción1 y se va al paso d. c) Si este resultado es falso, se ejecuta la Acción2 y se va al paso d. d) La ejecución del pseudocódigo proseguirá con la siguiente sentencia que sigue al Fin_si Ejemplo 06 Pseudocódigo para hallar el mayor de dos números. El siguiente cuadro muestra resultados con datos de prueba: nro1 14 12 nro2 16 10 Variables a utilizar en el pseudocódigo nro1 primer número nro2 segundo número mayor mayor de dos números Inicio // Definir variables entero: nro1, nro2, mayor mayor 16 12 Fin // Lectura de datos Escribir (“Ingresar dos números: ”) Leer (nro1, nro2) // Calcula el mayor de dos números Si (nro1 > nro2) entonces mayor nro1 Sino mayor nro2 Fin_si Escribir ("El mayor de dos números es:", mayor) Explicación Para resolver el ejemplo planteado se definen las variables enteras nro1, nro2, mayor: entero: nro1, nro2, mayor Se lee dos números: Leer (nro1, nro2) Se evalua la expresión logica (nro1 > nro2) si esta condicion es verdadera se asigna nro1 a mayor, de lo contrario se asigna nro2 a mayor. Si (nro1 > nro2) entonces mayor nro1 Sino mayor nro2 Fin_si Ejemplo 07 Pseudocódigo para hallar el mayor de tres números El siguiente cuadro muestra los resultados con datos de prueba: nro1 14 12 08 nro2 16 14 05 Variables a utilizar en el pseudocódigo nro1 primer número nro2 segundo número nro3 tercer número t variable temporal mayor mayor de tres números Inicio // Definir variables entero: nro1, nro2, nro3, t, mayor // Lectura de datos Escribir (“Ingresar tres números:”) Leer (nro1, nro2, nro3) // Calcula el mayor de tres números Si (nro1 > nro2) entonces t nro1 Sino nro3 18 11 04 mayor 18 14 08 t nro2 Fin_si Si (t > nro3) entonces mayor t Sino mayor nro3 Fin_si Escribir (“El mayor de tres números es: ”, mayor) Fin Ejemplo 08 Pseudocódigo que lea el espacio recorrido por un auto y su tiempo empleado en este recorrido. Se pide hallar la velocidad del recorrido. Fórmula: velocidad = espacio / tiempo. Tenga en cuenta que en caso de que el tiempo sea igual a cero la velocidad no se podrá calcularse. Variables a utilizar en el pseudocódigo espacio espacio recorrido tiempo tiempo empleado velocidad velocidad del recorrido Inicio // Definir variables real : espacio, tiempo, velocidad // Lectura de datos Escribir (“Ingresar espacio recorrido y tiempo”) Leer (espacio, tiempo) // Calcula velocidad Si (tiempo <> 0) entonces velocidad espacio / tiempo Escribir (“La velocidad es: ”, velocidad) Sino Escribir (“Error”) Fin_si Fin Ejemplo 09 Pseudocódigo que lea tres valores tal como a, b, c. Calcular el resultado de la siguiente expresión: y = (a - b) / c Donde: a > b > c, además c no puede ser cero. Variables a utilizar en el pseudocódigo a primer valor b segundo valor c tercer valor y resultado de la expresión Inicio // Definir variables real: a, b, c, y // Lectura de datos Escribir (“Ingresar tres números”) Leer (a, b, c) // Calcula expresión Si (c <> 0 ) entonces y (a - b ) / c Escribir (y) Sino Escribir (“No se puede calcular la expresión”) Fin_si Fin Ejemplo 10 Pseudocódigo que lea tres notas de un alumno: examen parcial, examen final y promedio de prácticas, imprima el promedio y el mensaje aprobado en caso de que el promedio es mayor o igual que 10.5, si su promedio es menor de 10.5 imprimir el promedio y el mensaje desaprobado. El siguiente cuadro muestra los resultados con datos de prueba: exPar exFin promP 14 10 16 08 12 06 promedio = (exPar+exFin+promP)/3 14.00 8.0 mensaje aprobado desaprobado Variables a utilizar en el pseudocódigo exPar examen parcial exFin examen final promP promedio de practicas promedio promedio final Inicio // Definir variables real: exPar, exFin, promP, promedio // Lectura de datos Escribir ("Ingrese tres notas: ") Leer (exPar, exFin, promP) // Calcula promedio promedio (exPar + exFin + promP) / 3 Si (promedio >= 10.5) entonces Escribir (promedio, “aprobado”) sino Escribir (promedio, “desaprobado”) Fin_si Fin Ejemplo 11 Pseudocódigo que lea como dato el sueldo de un trabajador, aplique un aumento del 15% si su sueldo es inferior a 500 y 10% en caso contrario. Imprima el nuevo sueldo del trabajador. Variables a utilizar en el pseudocódigo sueldo sueldo aum aumento nuevoSueldo nuevo sueldo Inicio // Definir variables real: sueldo, aum, nuevoSueldo // Lectura de datos Escribir (“Ingrese sueldo) Leer (sueldo) // Calcula sueldo Si (sueldo < 500) entonces aum 0.15 * sueldo sino aum 0.10 * sueldo Fin_si nuevoSueldo sueldo + aum Escribir (“Nuevo sueldo ”, nuevoSueldo) Fin Ejemplo 12 Pseudocódigo que determine si un número es múltiplo de otro. Un número a es múltiplo de otro numero b, cuando el residuo de la división de a entre b es cero. En la siguiente tabla se muestra resultados para diferentes valores de las variables: nro1 20 18 9 Variables nro1 nro2 r nro2 5 6 2 r = nro1 Mod nro2 0 0 1 Mensaje a mostrar 20 es múltiplo de 5 18 es múltiplo de 6 9 no es múltiplo de 2 a utilizar en el pseudocódigo primer número segundo número residuo de dos números Inicio // Definir variables entero: nro1,nro2, r // Lectura de datos Escribir (“Ingresar dos numeros”) Leer (nro1, nro2) // Calcular múltiplo r nro1 Mod nro2 Si (r = 0) entonces Escribir (nro1, “es múltiplo de”, nro2) sino Escribir (nro1, “no es múltiplo de”, nro2) Fin_si Fin Ejemplo 13 Pseudocódigo que lea tres números e imprima su producto si el primero de ellos es positivo, en caso contrario imprima su suma. Por ejemplo: a = 4, b = 3, c = 2 entonces su producto es p = a * b * c = 42 a = -4, b = 3, c = 2 entonces la suma es s = a + b + c = 1 Variables a b c a utilizar en el pseudocódigo primer número segundo número tercer número p s producto suma Inicio // Definir variables entero: a, b, c, p, s // Lectura de datos Escribir (“Ingresar primer numero:”) Leer (a) Escribir (“Ingresar segundo número:”) Leer (b) Escribir (“Ingresar tercer número:”) Leer (c) Si (a > 0) entonces p a*b*c Escribir (“El producto es igual ”, p) Sino s a+b+c Escribir (“La suma es igual ”, s) Fin_si Fin Ejemplo 14 Pseudocódigo que lea dos números y diga si la suma de los números es par o impar. Por ejemplo: a = 4, b = 3 a = 4, b = 4 Variables a b s entonces su suma es s = a + b = 7 entonces la suma es s = a + b = 8 es impar es par a utilizar en el pseudocódigo primer número segundo número suma Inicio // Definir variables entero: a, b, s // Lectura de datos Escribir ("Ingresar primer numero:") Leer (a) Escribir ("Ingresar segundo número:") Leer (b) s a+b Si (s Mod 2 = 0) entonces Escribir (s, “La suma es par”) Sino Escribir (s, “La suma es impar”) Fin_si Fin Ejemplo 15 Pseudocódigo que determine si un año es bisiesto. Un año es bisiesto si es múltiplo de 4 y no de 100 o cuando es múltiplo de 400. Un año es bisiesto si es múltiplo de 4. Para esto tendremos que verificar si el residuo de la división del año entre 4 es igual a cero. a Mod 4 = 0 Además, se sabe que no debe ser múltiplo de 100 para lo cual escribimos a Mod 100 <> 0 Sea múltiplo de 400. a Mod 400 = 0 Entonces un año es bisiesto si múltiplo de 4, que no debe ser multiplo de 100 a menos que sea múltiplo de 400 (((a Mod 4 = 0 ) and (a Mod 100 <> 0)) or (a Mod 400 = 0)) Variables a utilizar en el pseudocódigo a año Inicio // Definir variable entero: a // Lectura de datos Escribir ("Ingresar año:") Leer (a) Si (((a Mod 4 = 0) and (a Mod 100 <> 0)) or (a Mod 400 = 0)) entonces Escribir (“El año es bisiesto”) Sino Escribir (“El año no es bisiesto”) Fin_si Fin Ejemplo 16 Pseudocódigo que calcule el total a pagar por la compra de camisas. Si se compran tres camisas o más se aplica un descuento del 20% sobre el total de la compra, sino se aplica un descuento del 10%. Variables a utilizar en el pseudocódigo precio precio de cada camisa cant cantidad a comprar compra monto de la compra desc descuento total total a pagar Inicio // Definir variables entero: cant real: precio, compra, desc, total // Lectura de datos Escribir ("Ingresar precio unitario:") Leer (precio) Escribir ("Ingresar cantidad de camisas:") Leer (cant) compra cant * precio Si (compra >=3) entonces desc 0.20 * compra Sino desc 0.10 * compra Fin_si total compra – desc Escribir (“El total a pagar es ”, total) Fin Ejemplo 17 Pseudocódigo que calcule el total que se paga en una playa de estacionamiento, en el que se registra la hora de ingreso y la hora de salida del vehículo en HH:MM, la tarifa por hora o fracción de S/.2.00. Por ejemplo: Hora de inicio:4:20 Hora de término: 7:10 Total a pagar: 7:10- 4:20= 2: 40 = 6 Hora de inicio:3:20 Hora de termino: 8:40 Total a pagar: 8:40- 3:20= 5: 20 = 12 Variables a utilizar en el pseudocódigo h1, m1 hora de ingreso h2, m2 hora de salida pago total a pagar Inicio // Definir e inicializar variables entero: h1, m1, h2, m2, min, hor 0 real : pago // Lectura de datos Escribir ("Ingresar hora de ingreso:") Leer (h1, m1) Escribir ("Ingresar hora de salida:") Leer (h2, m2) Si (m2 >= m1) entonces min m2 – m1 Sino min (m2 + 60) – m1 h2 h2 - 1 Fin_si hor h2 – h1 Si (min > 0) hor hor + 1 Fin_si pago hor * 2 Escribir (“El total a pagar es ”, pago) Fin 3.3.Estructura selectiva múltiple 3.3.1. Estructura selectiva múltiple: Si anidado Un Si anidado es una sentencia Si que esta contenido dentro de otro Si o Sino. Cuando se anidan Si, cada sentencia Sino siempre se corresponde a la sentencia Si mas próxima dentro del mismo bloque y que no este asociada con otro Sino. Un caso particular de una sentencia Si anidada es la siguiente: Si (expresión_lógica1) entonces Acción1 Sino Si (expresión_lógica2) entonces Acción2 Sino Fin_si Fin_si Acción3 Funcionamiento de Si anidado: Si – Sino - Si ... Cuando la sentencia si múltiple inicia su ejecución, se suceden los siguientes pasos: a) Se evalúa expresión_lógica1, obteniendo un resultado lógico. b) Si este resultado es verdadero (true), se ejecuta la Accion1 y se va al paso d. c) Si este resultado es falso, se evalúa expresión_lógica2, obteniendo un resultado lógico, si este resultado es verdadero, se ejecuta la Accion2 y se va al paso d, si este resultado es falso, se ejecuta la Accion3 y se va al paso d. d) La ejecución del pseudocódigo proseguirá con la siguiente sentencia que sigue al ultimo Fin_si Ejemplo 18 Pseudocódigo que lea un número y determine si es positivo, negativo o cero. Variables a utilizar en el pseudocódigo nro número a ingresar mensa mensaje a mostrar Inicio Fin // Definir variables entero: nro cadena: mensa // Lectura de datos Escribir (“Ingresar numero:”) Leer (nro) Si (nro = 0 ) entonces mensa “Cero” Sino Si (nro>0) entonces mensa “Positivo” Sino mensa “Negativo” Fin_si Fin_si Escribir (nro, mensa) Explicación Para resolver el ejemplo planteado se define la variable entera nro y la variable cadena mensa: entero: nro cadena: mensa Se ingresa un número cualquiera: Escribir (“Ingresar numero:”) Leer (nro) Se evalua la expresión lógica (nro = 0) en caso de cumplirse la igualdad se asigna “Cero” a la variable mensa: Si (nro = 0 ) entonces mensa “Cero” Después de esta asignación la ejecución pasa a la sentencia escribir y finaliza el pseudocodigo: Escribir (nro, mensa) Pero, si la expresión lógica (nro = 0) resulta ser falsa, se ejecuta el SINO asociado al primer SI: SINO Este sino esta conformado por un SI que evalua la expresión logica (nro > 0), si la asignación es verdadera se asigna “Positivo” a la variable mensa: Si (nro>0) entonces mensa “Positivo” Después de esta asignación la ejecución pasa a la sentencia escribir y finaliza el pseudocodigo: Escribir (nro, mensa) Pero, si la expresión logica resulta ser falsa se ejecuta el SINO asociado al segundo SI en la cual se asigna “Negativo” a la variable mensa: mensa “Negativo” Después de esta asignación la ejecución pasa a la sentencia escribir y finaliza el pseudocodigo: Escribir (nro, mensa) Ejemplo 19 En una tienda comercial se realizan descuentos en las compras en función del importe total de dichas compras. Se desea calcular el importe que se cobra a un cliente, teniendo en cuenta los siguientes supuestos: Si el importe total de la compra es menor de 200 soles no hay descuentos. Si el importe total de la compra esta comprendido entre 200 y 800 se hace un descuento del 10% Si el importe total de la compra es mayor de 800 se hace un descuento del 20%. Se pide mostrar el nombre del cliente, el importe total, el descuento y el importe a cobrar a un cliente cualquiera Variables a utilizar en el pseudocódigo nombre nombre del cliente importeTotal importe total descto descuento importeACobrar importe a cobrar Inicio // Definir variables real: importeTotal, descto, importeACobrar cadena: nombre // Lectura de datos Escribir (“Ingresar nombre del cliente:”) Leer (nombre) Escribir (“Ingresar monto total de la compra:”) Leer (importeTotal) // Calcula el importe a Cobrar Si (importeTotal >= 0 and importeTotal < 200) entonces descto 0 Sino Si (importeTotal <= 800) entonces descto 0.10*importeTotal Sino descto 0.20*importeTotal Fin_si Fin_si ImporteACobrar importeTotal - descto Escribir (“Cliente: ”, nombre) Escribir (“Descuento: ”, descto) Escribir (“Importe total: ”, importeTotal) Escribir (“Importe a cobrar: ”, importeACobrar) Fin Ejemplo 20 Una compañía de gaseosas está realizando una promoción por la compra de su producto. Dentro de cada chapa viene un número que determina el premio que obtiene un comprador. Si la chapa tiene un número entre 1 y 5 el comprador obtiene como premio el doble del precio pagado por la gaseosa. Si la chapa tiene un número entre 6 y 8 el comprador obtiene como premio la devolución del precio pagado por la gaseosa. Si chapa tiene un número entre 9 y 10 el comprador no gana ningún premio. Escribir un pseudocódigo que muestre los diferentes resultados que se podría obtener al comprar una gaseosa. El siguiente cuadro muestra los resultados con datos de prueba: nro corrida 1 2 3 4 datos precio nroChapa 0.50 5 1.00 4 3.00 9 5.00 7 Premio (soles) 1.0 2.0 0.0 5.0 Variables a utilizar en el pseudocódigo nroChapa numero de chapa precio precio de la gaseosa premio premio a recibir Inicio // Definir variables entero: nroChapa real: premio, precio // Lectura de datos Escribir (“Ingresar precio y nro de chapa: ”) Leer (precio, nroChapa) Si (nroChapa >=1 and nroChapa<=5 ) entonces premio 2*precio Sino Si (nroChapa >=6 and nroChapa<= 8) entonces premio precio Sino Si (nroChapa >=9 and nroChapa<=10) entonces premio 0 Fin_si Fin Fin_si Fin_si Escribir (“Premio: ”, premio) Ejemplo 21 El precio de venta de DVD varía de acuerdo a la cantidad que se compra: S/.2.50 si se compran unidades separadas hasta 9. S/.2.20 si se compran entre 10 unidades hasta 99. S/.1.90 entre 100 y 499 unidades S/.1.50 para mas de 500 El vendedor gana por cada CD vendido el 20% del costo. Realizar un pseudocódigo que calcule el pago total y la ganancia para el vendedor. Variables a utilizar en el pseudocódigo cant cantidad de dvd pago pago total ganan ganancia del vendedor Inicio // Definir variables entero: cant real: pago, ganan // Lectura de datos Escribir (“Ingresar cantidad de DVD: ”) Leer (cant) Si (cant < 10) entonces pago 2.50 * cant Sino Si (cant < 100) entonces pago 2.20 * cant Sino Si (cant < 500) entonces pago 1.90 * cant Sino pago 1.50 * cant Fin_si Fin_si Fin_si ganan 0.20 * pago Escribir (“El pago total es: ”, pago) Escribir (“La ganancia del vendedor es: ”, ganan) Fin Ejemplo 22 Pseudocódigo que calcule el sueldo neto de un trabajador, que tiene los siguientes descuentos: 11% del sueldo bruto si pertenece a la AFP A 10% del sueldo bruto si pertenece a la AFP B 7% del sueldo bruto por seguro si gana mas de 4000 6% del sueldo bruto por seguro si gana mas de 3000 5% del sueldo bruto por seguro si gana menos o igual a 3000 Variables a utilizar en el pseudocódigo afp afp al que pertenece el empleado sueldoBruto sueldo bruto desc1 descuento por AFP desc2 descuento por seguro sueldoNeto sueldo neto Inicio // Definir variables caracter: afp real: sueldoBruto, desc1, desc2, sueldoNeto // Lectura de datos Escribir (“Ingresar sueldo bruto: ”) Leer (sueldoBruto) Escribir (“Ingresar AFP: ”) Leer (afp) Si (afp = „A‟) entonces desc1 0.11 * sueldoBruto Sino Si (afp = „B‟) entonces desc1 0.10 * sueldoBruto Fin_si Fin_si Si (sueldoBruto > 4000) entonces desc2 0.07 * sueldoBruto Sino Si (sueldoBruto > 3000) entonces desc2 0.06 * sueldoBruto Sino desc2 0.05 * sueldoBruto Fin_si Fin_si sueldoNeto sueldoBruto – desc1 – desc2 Escribir (“El sueldo neto es: ”, sueldoNeto) Fin Ejemplo 23 Un supermercado ofrece a sus clientes descuentos de acuerdo al monto de compra, como se muestra en el siguiente cuadro: Compra (S/.) 0 – 250 251 – 500 501 – 1000 1001 – más Descuento (%) 0 10 15 20 Elaborar un pseudocódigo que calcule el monto final que paga un cliente por una compra. Variables a utilizar en el pseudocódigo montoCompra monto de la compra desc descuento montoFinal monto final Inicio // Definir variables Fin real: montoCompra, desc, montoFinal // Lectura de datos Escribir (“Ingresar monto compra: ”) Leer (montoCompra) Si (montoCompra <= 250) entonces desc 0 Sino Si (montoCompra <= 500) entonces desc 0.10 * montoCompra Sino Si (montoCompra <= 1000) entonces desc 0.15 * montoCompra Sino desc 0.20 * montoCompra Fin_si Fin_si Fin_si montoFinal montoCompra – desc Escribir (“El total a pagar es: ”, montoFinal) Ejemplo 24 En empresa ensambladora de computadoras oferta a sus clientes descuentos que varían de acuerdo al número de computadoras que se compre. Si se compra hasta cinco computadoras se descontará el 10%, si se compra entre 6 y 10 computadoras se descuenta el 20% y si se compra más de 10 computadoras se descuenta el 40%. Elaborar un pseudocódigo que calcule el monto final que se paga por un cierto número de computadoras. Variables a utilizar en el pseudocódigo precio precio de venta total total a pagar desc descuento cant cantidad de computadoras Inicio // Definir variables real: precio, total, desc entero: cant // Lectura de datos Escribir (“Ingresar precio: ”) Leer (precio) Escribir (“Ingresar cantidad: ”) Leer (cant) total precio * cant Si (cant <= 5) entonces desc 0.10 * total Sino Si (cant <= 10) entonces desc 0.20 * total Sino desc 0.40 * total Fin_si Fin_si total total – desc Escribir (“El total a pagar es: ”, total) Fin Ejemplo 25 Pseudocódigo que compruebe si tres lados forman un triángulo, de ser así calcule su área y muestre que tipo de triangulo forma: equilátero, isósceles o escaleno. Teorema: En todo triángulo cada lado es menor que la suma de los otros dos lados, pero mayor que su diferencia. Para hallar el área de un triángulo conociendo sus lados se aplica la siguiente fórmula: area p( p a)( p b)( p c) Donde, p es el semiperímetro. Variables a utilizar en el pseudocódigo a, b, c lados del triángulo p semiperímetro area área del triángulo Inicio // Definir variables real: p, area entero: a, b, c // Lectura de datos Escribir (“Ingresar lados: ”) Leer (a, b, c) Si ((a < b + c) and (b < a + c) and (c < a + b)) entonces Escribir (“Forman un triángulo”) p (a + b + c) /2 area raiz (p * (p - a) * (p - b) * (p - c)) Si (a = b and b = c) entonces Escribir (“Equilátero”) Sino Si (a = b or b = c or a = c) entonces Escribir (“Isósceles”) Sino Escribir (“Escaleno”) Fin_si Fin_si Escribir (“El área es ”, area) Sino Escribir (“No forman un triángulo”) Fin_si Fin Ejemplo 26 Pseudocódigo que calcula la calificación de un alumno en base a 3 notas, validar el ingreso de notas entre 0 y 100, considerar la siguiente tabla: Promedio 90 – 100 80 – 89 70 – 79 Calificación A B C 50 – 69 0 – 49 D E Variables a utilizar en el pseudocódigo nt1 nota 1 nt2 nota 2 nt3 nota 3 caft carácter de calificación prom promedio Inicio // Definir variables entero: nt1, nt2, nt3, prom caracter: calf // Lectura de datos Escribir (“Ingresar tres notas: ”) Leer (nt1, nt2, nt3) Si ((nt1 >= 0 and nt1 <= 100) and (nt2 >= 0 and nt2 <= 100) and (nt3 >= 0 and nt3 <= 100)) entonces prom (nt1 + nt2 + nt3) Div 3 Si (prom > 89) entonces calf „A‟ Sino Si (prom > 79) entonces calf „B‟ Sino Si (prom > 69) entonces calf „C‟ Sino Si (prom > 49) entonces calf „D‟ Sino calf „E‟ Fin_si Fin_si Fin_si Fin_si Escribir (“La calificación es: ”, calf) Sino Escribir (“Ingreso incorrecto”) Fin_si Fin Ejemplo 27 Una clínica ofrece tres tipos de seguro: Tipo A B C Máximo De consultas 8 6 4 Pago mensual (S/.) 80.00 60.00 40.00 Si el cliente realiza más consultas de las indicadas en el cuadro anterior tendrá que pagar S/.8.50 por cada consulta adicional si el seguro es de tipo A, S/.6.50 por cada consulta adicional si el seguro es de tipo B, y S/.5.00 mensuales por cada consulta adicional si el seguro es de tipo C. Calcular el monto que paga un cliente durante un mes. Variables a utilizar en el pseudocódigo tipo tipo de seguro cant cantidad de consultas realizadas en el mes max maximo número de consultas padic pago adicional pago pago mensual Inicio // Definir variables entero: cant, max real: pago 0, padic caracter: tipo entero: cant // Lectura de datos Escribir (“Ingresar tipo de seguro: ”) Leer (tipo) Escribir (“Ingresar cantidad de consultas: ”) Leer (cant) Si (tipo = „A‟) entonces pago 80.00 max 8 padic 8.50 Sino Si (tipo = „B‟) entonces pago 60.00 max 6 padic 6.50 Sino Si (tipo = „C‟) entonces pago 40.00 max 4 padic 5.00 Fin_si Fin_si Fin_si Si (cant > max) entonces padic padic * (cant - max) Fin_si pago pago + padic Escribir (“El total a pagar es: ”, pago) Fin Ejemplo 28 Un centro comercial bonifica a sus clientes con puntos los cuales son reemplazados por obsequios. Por compras menores a S/.10.00 el cliente recibe 1 punto, por compras de S/.10.00 a más el cliente recibe 2 puntos por cada S/.10.00 y un punto por el monto adicional. Elaborar un pseudocódigo que calcule la cantidad de puntos que obtiene un cliente en una compra. Por ejemplo: Si la compra Si la compra S/.10.00 y 1 Si la compra S/.10.00) es de S/.7.00 el cliente recibe 1 punto es de S/.23.00 el cliente recibe 5 puntos (2 puntos por cada punto por los S/.3.00). es de S/.40.00 el cliente recibe 8 puntos (2 puntos por cada Variables a utilizar en el pseudocódigo punto puntos obtenidos monto monto de la compra parEnt valor entero de la compra resto1 residuo del valor entero de la compra resto2 valor real de la compra c10 cantidad de montos de S/.10.00 Inicio // Definir variables entero: punto 0, parEnt, resto2, c10 real: monto, resto1 0 // Lectura de datos Escribir (“Ingresar monto de la compra: ”) Leer (monto) Si (monto < 10) entonces punto 1 Sino parEnt entero (monto) resto1 monto – parEnt resto2 parEnt Mod 10 c10 parEnt Div 10 Si (resto1 > 0 or resto2 >0) entonces punto (2 * c10) + 1 Sino punto 2 * c10 Fin_si Fin_si Escribir (“Los puntos obtenidos son: ”, punto) Fin Ejemplo 29 Un grupo de alumnos de un centro educativo, desea saber cuanto se va a gastar en pasajes para realizar el viaje de promoción, el precio de cada pasaje varía de acuerdo al día en que viajan y al número de alumnos que viajan: Cantidad de Precio x pasaje ($) alumnos Hasta el día 15 del mes Después del día 15 del mes 1 – 10 60 50 11 – 20 55 45 21 – mas 50 40 Elaborar un pseudocódigo que muestre el costo total de los pasajes. Variables a utilizar en el pseudocódigo dia dia del mes en el que se desea viajar cant cantidad de alumnos total monto total a pagar por los pasajes Inicio // Definir variables entero: dia, cant real: total // Lectura de datos Escribir (“Ingresar día del mes: ”) Leer (dia) Fin Escribir (“Ingresar cantidad de alumnos: ”) Leer (cant) Si (dia <= 15) entonces Si (cant < 11) entonces total 60 * cant Sino Si (cant < 21) entonces total 55 * cant Sino total 50 * cant Fin_si Fin_si Sino Si (cant < 11) entonces total 50 * cant Sino Si (cant < 21) entonces total 45 * cant Sino total 40 * cant Fin_si Fin_si Fin_si Escribir (“El costo total de los pasajes es: ”, total) 3.3.2. Estructura selectiva múltiple: En caso sea – Fin_caso Ejecuta una acción dependiendo del resultado del selector. Se presenta como una alternativa de la sentencia Si anidada, ya que en ocasiones resulta ser más comprensible y ordenado. Su sintaxis es la siguiente: En caso sea (selector) hacer c1: Acción 1 c2: Acción 2 . . . cn: Acción N Sino Accion c Fin_Caso Donde: Selector, cuyo valor se compara con cada una de las alternativas (c1, c2, etc). c1, c2, etc., son constantes enteras o de tipo caracter compatibles con el selector. Si es de tipo caracter c1, c2, etc. deben de ir encerradas entre comillas simples, es decir „c1’, ‘c2’, etc. Sino, cuando toma un valor distinto de las alternativas (c1, c2, etc). El Sino es opcional, si se omite y no hay coincidencia finaliza la sentencia En caso sea – Fin_caso sin ejecutar nada. Las sentencias si anidadas pueden aplicarse a cualquier tipo de dato simple, en contraste con la sentencia En caso – Fin_caso donde solo puede aplicarse al selector variables: enteras y caracteres. Funcionamiento de En caso sea – Fin_caso Cuando la sentencia En caso sea – Fin_caso inicia su ejecución, se suceden los siguientes pasos: a) Se evalúa el Selector, obteniéndose un resultado de tipo entero o carácter. b) Se compara este resultado con las alternativas (constantes) c1, c2, etc. c) Si algunas de estas constantes es igual al valor del selector, entonces se ejecutan la acción correspondiente a esa alternativa y se va al paso e. d) Si no existe coincidencia con las alternativas, se ejecutará la acción correspondiente al Sino y se va al paso e. e) La ejecución del pseudocódigo proseguirá con la siguiente sentencia que sigue al Fin_Caso Ejemplo 30 Pseudocódigo que lea una variable entera, que representa un día de la semana y que muestre el texto correspondiente al día. Por ejemplo: Lunes si es 1, Martes si es 2, …, Domingo si es 7. El siguiente cuadro muestra resultados con datos de prueba: Día 1 4 6 Texto a mostrar Lunes Jueves Sábado Variables a utilizar en el pseudocódigo dia día de la semana Inicio // Definir variable entero: dia // Lectura de datos Escribir (“Ingresar dia:”) Leer (dia) En caso sea (dia) hacer 1 : Escribir (“lunes”) 2 : Escribir (“martes”) 3 : Escribir (“miércoles”) 4 : Escribir (“jueves”) 5 : Escribir (“viernes”) 6 : Escribir (“sábado”) 7 : Escribir (“domingo”) Sino Escribir (“Fuera de rango”) Fin_Caso Fin Explicación Para resolver el ejemplo planteado se define la variable entera dia: entero: dia Se ingresa la variable dia Escribir (“Ingresar dia:”) Leer (dia) Y se evalua el contenido de la variable dia mediante la sentencia En caso sea - hacer, si coincide con algunos de los valores de 1 a 7 se ejecuta la sentencia correspondinte al valor que coincide y la ejecución del pseudocódigo proseguira con la siguiente sentencia a Fin_caso: En caso sea (dia) hacer 1 : Escribir (“lunes”) 2 : Escribir (“martes”) 3 : Escribir (“miércoles”) 4 : Escribir (“jueves”) 5 : Escribir (“viernes”) 6 : Escribir (“sábado”) 7 : Escribir (“domingo”) Si no coincide con algunos de los valores de la sentencia En caso sea – hacer se ejecuta la sentencia Sino, ejecutándose: Sino Escribir (“Fuera de rango”) Ejemplo 31 Pseudocódigo que permite ingresar una calificación expresada con un caracter (a, b, c o d) y averiguar su equivalencia correspondiente de acuerdo a la siguiente tabla: Nota A B C D Otra letra Descripción Sobresaliente Notable Aprobado Insuficiente Nota no esta en el rango Variables a utilizar en el pseudocódigo nota nota del alumno Inicio // Definir variable caracter: nota // Lectura de datos Escribir (“Ingresar nota”) Leer (nota) En caso sea (nota) hacer „A‟: Escribir (“Sobresaliente”) „B‟: Escribir (“Notable”) „C‟: Escribir (“Aprobado”) „D‟: Escribir (“Insuficiente”) Sino Escribir (“Nota no esta en el rango”) Fin_caso Fin Ejemplo 32. Una compañía incrementa el sueldo actual de sus empleados de acuerdo a su categoría como se muestra en el siguiente cuadro: Categoría A B C Incremento (%) 25 20 15 D 10 Además recibe un aumento especial de 2.5% de su sueldo actual por cada hijo que tuviese. Así mismo si el nuevo sueldo excede a S/.2000 se descuenta el 3% por impuesto de solidaridad. Construir un pesudocódigo que permita calcular el sueldo neto que recibe un empleado de dicha compañía. Variables a utilizar en el pseudocódigo cat categoría del empleado sueldo sueldo del empleado cant cantidad de hijos del empleado aum aumento adic pago adicional por cada hijo desc descuento de solidaridad sueldoNeto sueldo neto sw bandera que cambia de valor cuando se ingresa una categoría no existente Inicio // Definir e inicializar variables entero: cant real: sueldo, aum, adic, desc, sueldoNeto caracter: cat // Lectura de datos Escribir (“Ingresar categoría”) Leer (cat) Escribir (“Ingresar sueldo”) Leer (sueldo) Escribir (“Ingresar cantidad de hijos”) Leer (cant) En caso sea (cat) hacer „A‟: aum 0.25 * sueldo „B‟: aum 0.20 * sueldo „C‟: aum 0.15 * sueldo „D‟: aum 0.10 * sueldo Sino Escribir (“Categoría no existe”) sw 1 Fin_caso Si (sw = 0) entonces sueldo sueldo + aum Si (cant > 0) entonces adic 0.025 * sueldo * cant Fin_si sueldo sueldo + adic Si (sueldo > 2000) entonces desc 0.03 * sueldo Fin_si sueldoNeto sueldo - desc Escribir (“El sueldo neto del empleado es ”, sueldoNeto) Fin_si Fin En ocasiones es necesario el uso de una variable que altere el funcionamiento del algoritmo, cambiando su valor entre 0 y 1 ó entre verdadero y falso, a esta variable también se le conoce como switch o bandera. Para nuestro ejemplo se ha utilizado la variable sw inicializado en cero; este valor cambia a 1 al entrar al sino del En caso sea, luego de identificar que se ha ingresado una categoría diferente a las existentes; esto permite que una vez impreso el mensaje de error ya no se realice los siguientes cálculos. Ejemplo 33 Pseudocódigo que actúe como una calculadora, permitiendo realizar las operaciones de suma, resta, multiplicación y división entre dos números cualquiera. Variables a utilizar en el pseudocódigo n1 primer número n2 segundo número res resultado de la operación oper operador sw bandera que cambia de valor cuando en la división se ingresa un divisor igual a 0 Inicio // Definir e inicializar variables real: n1, n2, res caracter: oper entero: sw 0 // Lectura de datos Escribir (“Ingresar primer número”) Leer (n1) Escribir (“Ingresar operador”) Leer (oper) Escribir (“Ingresar segundo número”) Leer (n2) En caso sea (oper) hacer „+‟: res n1 + n2 „-‟ : res n1 - n2 „*‟: res n1 * n2 „/‟ : Si (n2 <>0) res n1 / n2 Sino Escribir (“Error”) sw 1 Fin_si Sino Escribir (“Operador no válido”) sw 1 Fin_caso Si (sw = 0) entonces Escribir (“El resultado es ”, res) Fin_si Fin Ejemplo 34 Un centro comercial ofrece ventas financiadas por medio de 3 tipos de tarjetas de crédito como indica a continuación: Tipo de Tarjeta A B Máximo de Letras 36 24 Interés (%) 7 6 C 12 5 El cliente solo puede financiar una compra hasta el máximo de letras que se indica en el cuadro anterior, en caso contrario la venta no debe proceder. Calcular el monto de cada letra por pagar así como el monto total. Variables a utilizar en el pseudocódigo tipo tipo de tarjeta monto monto de la compra cant cantidad de letras que se desea financiar max máximo de letras a financiar inte interés del la compra letra monto de cada letra Inicio // Definir variables entero: cant, max, sw 0 real: monto, inte, letra caracter: tipo // Lectura de datos Escribir (“Ingresar tipo de tarjeta”) Leer (tipo) Escribir (“Ingresar monto de la compra”) Leer (monto) Escribir (“Ingresar cantidad de letras a financiar”) Leer (cant) En caso sea (tipo) hacer „A‟: max 36 inte 0.07 * monto „B‟: max 24 inte 0.06 * monto „C‟: max 12 inte 0.05 * monto Sino Escribir (“Tipo de tarjeta no existe”) sw 1 Fin_caso Si (sw = 0) entonces monto monto + inte Si (cant <= max) entonces letra monto / cant Escribir (“El monto total a pagar es ”, monto) Escribir (“El monto de cada letra es ”, letra) Sino Escribir (“La venta no procede”) Fin_si Fin_si Fin Ejemplo 35 Calcular el consumo de combustible y el total que se invirtió en el recorrido de un automóvil. Para esto se debe diseñar un algoritmo en el que se ingresa los kilometrajes con el que inicia y termina el recorrido, así como la cantidad de galones de combustible con el que se inicia y termina el recorrido. Además calcular la cantidad de galones que consume el auto por cada 100 kilómetros. Los precio por cada galón de combustible son: Tipo de combustible Gasolina 97 Gasolina 95 Gasolina 89 Diesel Precio (S/.) x galón 16.98 15.60 13.50 10.20 Variables a utilizar en el pseudocódigo kil1 kilometraje de incio de recorrido kil2 kilometraje fin del recorrido gal1 galones de inicio de recorrido gal2 galones fin de recorrido tipo tipo de combustible kilRec kilómetros recorridos totGal total de galones total total que se invirtio en el recorrido c100 cantidad de galones que consume el auto por cada 100 km Inicio // Definir variables entero: tipo real: kil1, kil2, gal1, gal2, kilRec 0, totGal 0, total, c100 // Lectura de datos Escribir (“Ingresar kilometraje de inicio y fin del recorrido”) Leer (kil1, kil2) Escribir (“Ingresar galones con el que inicia y termina el recorrido”) Leer (gal1, gal2) Escribir (“Ingresar tipo de combustible que usa el automóvil (1)Gasolina 97, (2)Gasolina 95, (3)Gasolina 89, (4)Diesel”) Leer (tipo) Si (tipo > 0 and tipo < 5) entonces En caso sea (tipo) hacer 1 : precio 16.98 2 : precio 15.60 3 : precio 13.50 4 : precio 10.20 Fin_caso kilRec kil2 – kil1 totGal gal2 – gal1 total totGal * precio c100 (totGal * 100) / kilRec Escribir (“El total de combustible que se consumió es ”, totGal) Escribir (“El total de se invirtió en el recorrido es ”, total) Escribir (“El consumo por cada 100 kilómetros es ”, c100) Sino Escribir (“El tipo de combustible no es válido”) Fin_si Fin 3.3.3. Estructura selectiva múltiple: En caso sea múltiple La sentencia En caso sea múltiple se presenta de dos formas: a) Cuando más de una alternativa debe ejecutar la misma acción; para estos casos se agrupan todas las alternativas con acciones comunes. Ejemplo 36 Pseudocódigo que determine si un número que se encuentre en el rango de 1 a 9, es par o impar. El siguiente cuadro muestra resultados con datos de prueba, para diferentes valores de la variable nro. Nro de corrida 1 2 3 5 Nro Resultado 5 2 9 10 impar par impar Error fuera de rango Variables a utilizar en el pseudocódigo nro número a determinar si es par o impar Inicio // Definir variable entero: nro // Lectura de datos Escribir (“Ingresar número:”) Leer (nro) En caso sea (nro) hacer 1: 3: 5: 7: 9: Escribir (“impar”) 2: 4: 6: 8 : Escribir (“par” ) sino Escribir (“Fuera de rango”) Fin_Caso Fin Ejemplo 37 En un campeonato de tiro al blanco se ha llegado a un acuerdo entre los participantes para que el puntaje obtenido sea calculado en base al puntaje original (el que esta entre 0 y 10) alcanzado en el tiro multiplicado por un factor el cual se muestra en el siguiente cuadro. Hacer un pseudocódigo que muestre el nuevo puntaje obtenido por cualquier participante. Puntaje original 0 Entre 1 y 5 Entre 6 y 8 Entre 9 y 10 Factor 0 6 9 10 Variables a utilizar en el pseudocódigo puntaje puntaje original factor factor multiplicativo nuevoPuntaje nuevo puntaje del participante sw bandera que condiciona el cálculo del nuevo puntaje Inicio // Definir e inicializar variables entero: factor, puntaje, nuevoPuntaje, sw // Lectura de datos Escribir (“Ingresar puntaje:”) Leer (puntaje) // Calcula puntaje En caso sea (puntaje) hacer 0 0: factor 0 1: 2: 3: 4: 5: factor 6 6: 7: 8: factor 9 9: 10: factor 10 Sino Escribir (“Fuera de rango”) sw 1 Fin_Caso Si (sw = 0) entonces nuevoPuntaje puntaje + factor Escribir (“El nuevo puntaje es ”, nuevoPuntaje) Fin_si Fin Ejemplo 38 Pseudocódigo que permita calcular cuántos días tiene un mes, teniendo en cuenta lo siguiente: a) El orden del calendario indica que enero es 1, febrero es 2, etc. b) Enero, marzo, mayo, julio, agosto, octubre y diciembre tienen 31 días. c) Abril, junio, setiembre y noviembre tienen 30 días. d) Febrero tiene 28 días o 29 días si el año bisiesto. Un año es bisiesto si es múltiplo de 4 y no de 100 o cuando es múltiplo de 400. En la siguiente tabla se muestra resultados para diferentes valores de las variables: Nro corrida 1 2 3 4 5 6 datos Mes Año 2 2004 4 2016 2 2001 2 2000 10 2006 4 2007 Resultado Día 29 29 28 29 31 30 Variables a utilizar en el pseudocódigo dia día que tiene un mes mes mes del año year año a determinar si es bisiesto Inicio // Definir variables entero: mes, year, dias // Lectura de datos Escribir (“Ingresar mes, año ”) Leer (mes, year) En caso sea (mes) Hacer 1: 3: 5: 7: 8: 10: 12: dias 31 4: 6: 9: dias 30 2: Si (year Mod 4 = 0) and (year Mod (year Mod 400 = 0)) entonces dias 29 Sino dias 28 Fin_si Fin_Caso Escribir (mes, year, dias) 100 <> 0) or Fin b) Cuando se presentan selecciones basadas en dos o más niveles; en estos casos se utiliza la sentencia En caso sea anidado. Ejemplo 39 Pseudocódigo para calcular la pensión que tiene que pagar un alumno de un instituto cuya cuota de matricula tiene un porcentaje de descuento que se establece en la siguiente tabla y esta en función del colegio de procedencia del alumno y de las tres categorías que existe en el instituto. Considere que la pensión esta exonerada de impuesto. Colegio de procedencia Nacional Particular A 50 15 Categoría B 40 20 C 30 25 En la siguiente tabla se muestra resultados para diferentes valores de las variables: Pensión 1000 1500 Colegio Nacional Particular Categoría A B Descuento 1000*0.05=500 1500*0.20=300 Pensión final 500.0 1200.0 Variables a utilizar en el pseudocódigo colegio colegio de procedencia categoria categoría dentro del instituto dscto descuento a realizar cuota pago mensual importe importe a pagar Inicio // Definir e inicializar variables real: cuota, dscto, importe 0 caracter: colegio, categoría entero: sw 0 // Lectura de datos Escribir (“Ingresar colegio de procedencia (N)acional, (P)articular:”) Leer (colegio) Escribir (“Ingresar categoría (A, B, C):”) Leer (categoria) Escribir (“Ingresar cuota:”) Leer (cuota) // Cálculos En caso sea (colegio) hacer „N‟: En caso sea (categoria) hacer „A‟ : dscto 0.50 * cuota „B‟ : dscto 0.40 * cuota „C‟ : dscto 0.30 * cuota Sino Escribir (“Opción no contemplada”) sw 1 Fin_caso „P‟: En caso sea (categoria) hacer „A‟ : dscto 0.25 * cuota „B‟ : dscto 0.20 * cuota „C‟ : dscto 0.15 * cuota Sino Escribir (“Opción no contemplada”) sw 1 Fin_caso Sino Fin Escribir (“Opción no contemplada”) sw 1 Fin_caso Si (sw = 0) entonces importe cuota – dscto Escribir(“El importe a pagar es: ”, importe) Fin_si Ejemplo 40 Calcular el pago de un obrero que trabaja al destajo. El pago que recibe el obrero por cada unidad producida depende de su categoría y del tipo de producto que produce, como se muestra en el siguiente cuadro: Categoría A B C Tarifa (S/. x unidad) Tejas Losetas 2.50 2.00 2.00 1.50 1.50 1.00 Así mismo, el obrero recibe una bonificación especial de acuerdo a la cantidad que produce: Unidades Producidas 1 – 250 251 – 500 501 – 1000 1001 – mas Bonificación (%) 0.00 50.00 100.00 150.00 Además del total de ingresos se descuenta S/.25.00 por seguro. Variables a utilizar en el pseudocódigo cat categoría del obrero prod producto que se produce cant cantidad producida pago pago del obrero bonf bonificación desc descuento sw bandera Inicio // Definir e inicializar variables entero: cant, sw 0 real: pago, bonf, desc 25.00 caracter: cat, prod // Lectura de datos Escribir (“Ingresar categoría:”) Leer (cat) Escribir (“Ingresar producto que produce (T)ejas, (L)osetas”) Leer (prod) Escribir (“Ingresar cantidad producida:”) Fin Leer (cant) // Cálculos En caso sea (prod) hacer „T‟: En caso sea (cat) hacer „A‟ : pago 2.50 * cant „B‟ : pago 2.00 * cant „C‟ : pago 1.50 * cant Sino Escribir (“Categoría no existe”) sw 1 Fin_caso „L‟: En caso sea (cat) hacer „A‟ : pago 2.00 * cant „B‟ : pago 1.50 * cant „C‟ : pago 1.00 * cant Sino Escribir (“Categoría no existe”) sw 1 Fin_caso Sino Escribir (“Producto no existe”) sw 1 Fin_caso Si (sw = 0) entonces Si (cant <= 250) entonces bonf 0 Sino Si (cant <= 500) entonces bonf 50.00 Sino Si (cant <= 1000) entonces bonf 100.00 Sino bonf 150.00 Fin_si Fin_si Fin_si pago pago + bonf – desc // Salida de resultados Escribir (“El pago del obrero es: ”, pago) Fin_si 3.4.Ejercicios propuestos 1. Evaluar la siguiente función: fx x 2 x / 6 x x 3 5 si ( x Mod 4 ) 0 si ( x Mod 4 ) 1 si ( x Mod 4 ) 2 si ( x Mod 4 ) 3 2. Una compañía de gaseosas esta realizando una promoción por la compra de sus productos. Dentro de cada chapa viene un número que determina el premio que obtiene un comprador. Si la chapa tiene un número entre 1 y 5 el comprador obtiene como premio el doble del precio pagado por la gaseosa. Si la chapa tiene un número entre 6 y 8 el comprador obtiene como premio la devolución del precio pagado por la gaseosa Si chapa tiene un número entre 9 y 10 el comprador no gana ningún premio Se pide mostrar los diferentes resultados que podría obtener un comprador al comprar una gaseosa. Utilizar la sentencia En caso sea. 3. Escribir un programa para hallar el valor absoluto de un número: 0, si x 0 x x, si x 0 - x, si x 0 Por Ejemplo: De -7 su valor absoluto es: -(-7) = 7 (cuando es negativo se cambia de signo) De 7 su valor absoluto es: (7) = 7 (cuando es positivo nos da el mismo número) 4. Escribir un programa para leer dos números a, b y obtenga el valor numérico de la función. 2 a b, si a2 - b 2 0 f x a2 - 2b, si a2 - b 2 0 a b, si a2 - b 2 0 5. Pseudocódigo que determine si un número es divisible por 5. Un número es divisible por 5 cuando acaba en cero 0 en 5. 6. Mostrar el nombre correspondiente a un número de mes y además mostrar la estación al cual pertenece. Considerar 3 meses por estación. Verano = enero, febrero, marzo Otoño = abril, mayo, junio Invierno = julio, agosto, setiembre Primavera = octubre, noviembre, diciembre. 7. Ingresar cuatro valores por el teclado a, b, c, d. Se desea redondear a la centena más próxima y visualizar la salida. Por ejemplo: a = 2, b = 3, c = 6 y d = 2 entonces n = 2362 el resultado redondeado será 2400. Si n = 2342 el resultado redondeado será 2300 Si n = 2962 el resultado redondeado será 3000 8. Pseudocódigo que lea tres números y diga si la suma de los dos primeros números es igual al tercer número. 9. Una empresa de bienes y raíces ofrece casas de interés social bajo las siguientes condiciones: si el ingreso mensual del comprador es menos de S/2250 la cuota inicial será igual al 15% del costo de la casa y el resto se distribuirá en 120 cuotas mensuales. Si el ingreso mensual del comprador es mayor o igual a S/.2250 la cuota inicial será igual al 30% del costo de la casa y el resto se distribuirá en 75 cuotas mensuales. Diseñe un algoritmo que permita determinar cuanto debe pagar un comprador por concepto de cuota inicial y cuanto por cada cuota mensual. 10. En una escuela la colegiatura de los alumnos se determina según el número de materias que cursan. El costo de todas las materias es el mismo. Se ha establecido un programa para estimular a los alumnos, el cual consiste en lo siguiente: si el promedio obtenido por un alumno en el ultimo periodo es mayor o igual que 15, se le hará un descuento del 30% sobre la colegiatura y no se le cobrara impuesto; si el promedio obtenido es menor que 15 deberá pagar la colegiatura completa, la cual incluye el 10% de impuesto. Obtener cuanto debe pagar un alumno. 11. Una persona desea iniciar un negocio, para lo cual piensa verificar cuanto dinero le prestará el banco por hipotecar su casa. Tiene una cuenta bancaria, pero no quiere disponer de ella a menos que el monto por hipotecar su casa sea muy pequeño. Si el monto de la hipoteca es menor que $30,000 entonces invertirá el 50% de la inversión total y un socio invertirá el otro 50%. Si el monto de la hipoteca es de $30,000 o mas, entonces invertirá el monto total de la hipoteca y el resto del dinero que se necesite para cubrir la inversión total se repartirá a partes iguales entre el socio y el. 12. Elaborar un algoritmo que tenga como entrada los valores de dos ángulos, expresados en grados, minutos y segundos, obtenga el valor de su suma de la misma forma. Se supone que las entradas son correctas, en el sentido de que cada ángulo está expresado como tres números enteros, en los rangos respectivos (0 - 360), (0 - 60) y (0 - 60). La salida debe estar expresada de la misma manera. 13. El ministerio de agricultura ha distribuido la siembra de 3 productos en terrenos con más de 1000 hectáreas de la siguiente manera: Producto Terreno (%) Papa 50 Zanahoria 30 Camote 20 Si la superficie del terreno es menor o igual 1000 hectáreas, se deberá sembrar de la siguiente manera: Producto Terreno (%) Papa 60 Zanahoria 25 Camote 15 Se desea saber la cantidad de toneladas de papa, zanahoria y camote que se espera cosechar, si se sabe que se obtiene 2 toneladas de papa, zanahoria y camote en 10, 8 y 9 hectáreas respectivamente. 14. Una empresa eléctrica dispone de la siguiente tabla de costos: Cod. de tarifa Descripción Tarifa 1 kw/hora (S/.) Porcentaje (%) 1 Domestico 35.00 1.5 2 Industrial 80.00 2.5 3 Comercial 100.00 3 Además se dispone del cobro de un impuesto especial que esta dado por los porcentajes mencionados en el cuadro anterior, así como el cobro por arbitrios municipales: Alumbrado público 4.5% Limpieza pública 10% Parques y jardines 2.5% 15. Calcular el costo del servicio de mudanza, de acuerdo a la distancia entre el punto de partida y de llegada, el tipo de carga y al número de viajes ida y vuelta. Para calcular el costo se debe tener en cuenta: a) Si la distancia por cada viaje es mayor o igual a 5 Km., se cobrará S/.5.00 por kilómetro, de lo contrario se cobrará el monto básico que será igual a S/.25.00. b) La carga puede ser frágil o no frágil. Solo si la carga es frágil al monto calculado anteriormente se le aumentará 20%. c) El monto resultante de acuerdo a la distancia y al tipo de carga se multiplicará por el número de viajes. 16. Una empresa calcula las bonificaciones de sus empleados teniendo en cuenta lo siguiente: si el sueldo del empleado es menor a S/.750, recibe una bonificación del 15% del sueldo, si el sueldo esta entre S/.750 y S/.1200, recibe una bonificación del 10% y si el sueldo es superior a los S/.1200, recibe una bonificación del 7%. 4. Estructura repetitiva Las estructuras repetitivas se utilizan cuando es necesaria la repetición de una o mas sentencias, en un número determinado de veces, ó tantas veces como lo permita el resultado de una expresión lógica. Los controles de esta estructura son: mientras, repetir y para. Dentro de las estructuras repetitivas intervienen los contadores y acumuladores, que son variables que toman valores iniciales antes de que empiece el proceso repetitivo, para que luego, dentro del proceso repetitivo, incrementar sus valores según la lógica de solución del problema. 4.1.Conceptos básicos Contador Es una variable numérica entera que se incrementa o decrementa cada vez que se ejecuta la acción que lo contiene, toma un valor inicial de cero o uno, según sea el caso. En la siguiente figura la variable i representa a un contador. i valor actual = i + 1 valor anterior cantidad a incrementar Acumulador o totalizador Es una variable numérica que se incrementa o decrementa de forma no constante, toma un valor inicial de cero o uno según sea el caso. En la siguiente figura, la variable total representa a un acumulador y la variable parcial es la cantidad que se incrementará el acumulador en cada iteración. total valor actual = total + parcial valor anterior cantidad a incrementar Bucle Es un mecanismo de programación que repite un segmento de un programa (una o mas sentencias) un cierto número de veces. Los bucles se implementan utilizando las sentencias repetitivas: mientras, repetir y para. Cuerpo del bucle Son las sentencias que se ejecutarán repetidamente un cierto número de veces. Iteración Representa cada repetición del cuerpo de bucle. 4.2.Estructura repetitiva Mientras – Fin_mientras Repite una o mas acciones mientras el resultado de una expresión lógica es verdadera (true). Si el resultado de la expresión lógica es falsa (false), este proceso de repetición termina, y la ejecución del programa continúa con la siguiente sentencia que sigue al Fin_mientras. Su sintaxis es la siguiente: Mientras (expresión_lógica) hacer Acción Fin_Mientras Funcionamiento de Mientras – Fin_mientras Cuando la sentencia Mientras inicia su ejecución, se suceden los siguientes pasos: a) Se evalúa expresión_lógica, obteniéndose un resultado lógico. b) Si este resultado es verdadero (true), se ejecuta la acción y se retorna al paso a. c) Si este resultado es falso (false), la ejecución del pseudocódigo proseguirá con la sentencia siguiente al Fin_Mientras. Ejemplo 01 Pseudocódigo que invierta un número entero positivo. Variables a utilizar en el pseudocódigo nro número a invertir nro1 variable auxiliar donde guardamos el número nro nroinvertido número invertido digito dígito Inicio // Definir e inicializar variables entero: nro, nro1, digito, nroinvertido 0 // Leer Datos Escribir (“Ingresar número:”) Leer (nro) // Calcular número invertido nro1 nro Mientras (nro > 0) hacer digito nro Mod 10 nroinvertido 10 * nroinvertido + digito nro nro Div 10 Fin_Mientras Escribir (“El número invertido de ”, nro1, “es ”, nroinvertido) Fin Explicación Para resolver el ejemplo planteado se definen las variables enteras: nro, nro1, dígito y se inicializa en cero la variable nroinvertido entero: nro, nro1, digito, nroinvertido 0 Se ingresa la variable nro: Escribir (“Ingresar número:”) Leer (nro) Y se asigna nro a una nueva variable nro1, para conservar el valor original del número ingresado: nro1 nro La sentencia Mientras ejecuta tres sentencias, mientras que la expresión lógica (nro > 0) es verdadera, en estas sentencia se va extrayendo cada dógito del número ingresado: Mientras (nro > 0) hacer digito nro Mod 10 nroinvertido 10 * nroinvertido + digito nro nro Div 10 Fin_Mientras Cuando la expresión logica (nro > 0) llega a ser falsa, se ejecuta la sentencia escribir y finaliza el pseudocódigo: Escribir (“El número invertido de ”, nro1, “es ”, nroinvertido) Por ejemplo si el número es 134, entonces el número invertido será 431. Para ir reduciendo cada número emplearemos la operación: nro nro Div 10 Así tenemos: 134 Div 10 = 13 13 Div 10 = 1 Se detiene cuando es cero 1 Div 10 = 0 A la vez, para obtener cada dígito emplearemos la operación: digito digito Mod 10 Así tenemos: 134 Mod 10 = 4 13 Mod 10 = 3 1 Mod 10 = 1 Se puede ir formando el número invertido multiplicando el mismo número invertido por 10 y agregándole cada digito empleando la operación: nroinvertido = 10 * nroinvertido + digito Que en valores es: 10 * 0 + 4 = 4 10 * 4 + 3 = 43 10 * 43+ 1 = 431 Inicialmente nroinvertido = 0 La siguiente tabla muestra los resultados de la corrida del algoritmo. Iteración nro Valores de nro Expresión Lógica nro > 0 Resultado de la Expresión Lógica 1 2 3 --- 134 13 1 0 134>0 13 >0 1> 0 0>0 True True True False Resultados del cuerpo del bucle digito = nro Mod 10 4 3 1 nroinvertido = 10*nroinvertido + digito nro = nro Div 10 4 43 431 Fin del Mientras Ejemplo 02 Pseudocódigo que multiplique dos números enteros utilizando el siguiente algoritmo: Proceso de división: Se divide por 2 el primer número y se obtiene un cociente. Se divide por 2 este cociente y se obtiene otro cociente. Se continúa este proceso de división por 2, hasta que el número cociente sea 1. 13 1 0 Proceso de Multiplicación: Se multiplica por 2 el segundo número y se obtiene un número. Se multiplica por 2 este número y se obtiene otro número. Se continúa este proceso de multiplicación por 2 hasta que el cociente obtenido en el paso 1 sea igual a 1. Se suma el segundo número con todos los valores obtenidos al multiplicar el segundo número por 2 siempre y cuando sus correspondientes valores al dividir el primer número por 2 sea impar. El resultado de esta suma será la multiplicación de ambos números. Por ejemplo si se tiene los números 23 y 4, emplearemos para el proceso de división la operación: nro1 nro1 Div 2 mediante el cual se obtiene los siguientes valores: 23 Div 2 = 11 11 Div 2 = 5 5 Div 2 = 2 2 Div 2 = 1 Se detiene cuando es 1 Para el proceso de multiplicación emplearemos la operación: nro2 nro2 * 2 que permite obtener los siguientes valores: 4*2=8 8 * 2 = 16 16 * 2 = 32 32 * 2 = 64 Para sumar los valores de la multiplicación emplearemos la operación: suma suma + nro2 que permite obtener los siguientes valores: 4 + 8 + 16 + 64 = 92, que es igual al valor de multiplicar 23 * 4. Variables a utilizar en el pseudocódigo nro1, nro2 números a multiplicar suma producto de dos números Inicio // Definir e inicializar variables entero: nro1, nro2, suma 0 // Leer Datos Escribir (“Ingresar dos números:”) Leer (nro1, nro2) // Calcula multiplicación Mientras (nro1 >= 1) Hacer Si (nro1 Mod 2 = 1) entonces suma suma + nro2 Fin_si nro1 nro1 Div 2 nro2 nro2 * 2 Fin_mientras Escribir (“El producto es: ”, suma) Fin Ejemplo 03 Pseudocódigo que muestre los n términos de la siguiente serie y calcule su suma: 2 + 5 + 8 + 11 + 14 + … Variables a utilizar en el pseudocódigo n cantidad de términos de la serie ter cada término de la serie suma suma de los elementos de la serie con contador Inicio // Definir e inicializar variables entero: n, ter 2, con , suma 0 // Leer Datos Escribir (“Ingresar cantidad de términos:”) Leer (n) // Calcula serie y suma con 1 Mientras (con <= n) Hacer Escribir (ter) suma suma + ter ter ter + 3 con con + 1 Fin_mientras Escribir (“La suma es: ”, suma) Fin Ejemplo 04 Pseudocódigo que calcule la suma total y determine cuantos números múltiplos de M hay en los N primeros números naturales, tal que M <= N. Por ejemplo: Si se desea saber cuantos múltiplos de 7 hay en los primeros 80 números naturales. Diremos que existen 11 números y son: 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77 Variables a utilizar en el pseudocódigo n cantidad de números naturales m múltiplo a validar suma suma de los múltiplos de m con contador Inicio // Definir e inicializar variables entero: n, m, con, suma 0 // Leer Datos Escribir (“Ingresar cantidad de números:”) Leer (n) Escribir (“Ingresar múltiplo a validar:”) Leer (m) // Calcula serie y suma con 1 Mientras (m <= n) Hacer Escribir (m) con con + 1 suma suma + m m m+n Fin_mientras Escribir (“La suma es: ”, suma) Escribir (“La cantidad de múltiplos de ”, m, “encontrados en los ”, n, “primeros números naturales es ”, con) Fin Ejemplo 05 Pseudocódigo que calcule el cuadrado de un número realizando sólo sumas. El cuadrado de un número n es la suma de los n primeros números impares. Ejemplo: 32 = 1 + 3 + 5 = 9. Variables a utilizar en el pseudocódigo n número ingresado ter números impares cuad número al cuadrado con contador Inicio // Definir e inicializar variables entero: n, cuad 0, ter 1, con // Leer Datos Escribir (“Ingresar número:”) Leer (n) // Calcula serie y suma con 1 Mientras (con <= n) Hacer cuad cuad + ter ter ter + 2 con con + 1 Fin_mientras Escribir (“El cuadrado de ”, n, “es: ”, cuad) Fin Ejemplo 06 Pseudocódigo que imprima la serie y calcule el producto de los n términos de: 1/12 * 3/22 * 5/32 * Variables a utilizar en el pseudocódigo n cantidad de términos de la serie num numerador den denominador prod producto de los términos de la serie con contador Inicio // Definir e inicializar variables entero: n, con real : num 1, den 1, prod 1 // Leer Datos Escribir (“Ingresar cantidad de términos:”) Leer (n) // Calcula serie y multiplica con 1 7/42 * … Mientras (con <= n) Hacer Escribir (num, “/”, den, “^2”) prod prod * (num/(den^2)) num num + 2 den den + 1 con con + 1 Fin_mientras Escribir (“El producto es: ”, prod) Fin Ejemplo 07 Pseudocódigo que imprima la serie y calcule la suma de los n términos de: 1 + 2 + 5 + 10 + 17 + 26 + … Variables a utilizar en el pseudocódigo n cantidad de términos de la serie ter término de la serie inc incremento suma suma de los términos de la serie con contador Inicio // Definir e inicializar variables entero: n, con, ter 1, suma 0, inc 1 // Leer Datos Escribir (“Ingresar cantidad de términos:”) Leer (n) con 1 // Calcula serie y suma Mientras (con <= n) Hacer Escribir (ter) suma suma + ter ter ter + inc inc inc + 2 con con + 1 Fin_mientras Escribir (“La suma es: ”, suma) Fin Ejemplo 08 Pseudocódigo en el que se ingresa un número entero y se calcula: a) La suma de sus dígitos b) El número total (cantidad) de dígitos. c) La cantidad de dígitos pares e impares Por ejemplo si se tiene el número 3897, es necesario reducir el número empleando la operación nro nro Div 10, que en valores es: 3897 Div 10 = 389 389 Div 10 = 38 38 Div 10 = 3 3 Div 10 = 0 Para obtener cada digito emplearemos la operación digito en valores es: Se detiene cuando es cero digito Mod 10, que 3897 Mod 10 = 7 389 Mod 10 = 9 38 Mod10 = 8 3 Mod 10 = 3 Para calcular la suma de los dígitos de un número emplearemos la operación: suma suma + digito Para calcular la cantidad total de dígitos de un número emplearemos un contador tal como: c c+1 Para calcular la cantidad de dígitos pares e impares evaluamos cada dígito, un dígito es par si el residuo de la división del dígito entre 2 es cero, en caso contrario será impar. De manera se irán acumulando en dos contadores diferentes la cantidad total de dígitos pares y de dígitos impares. Variables a utilizar en el pseudocódigo nro número ingresado digito cada dígito del número suma la suma total de dígitos c contador que guarda la cantidad de dígitos cpar contador que guarda la cantidad de dígitos pares cimpar contador que guarda la cantidad de dígitos impares Inicio // Definir e inicializar variables entero: nro, digito, suma 0, c 0, cpar 0, cimpar // Leer Datos Escribir (“Ingresar número:”) Leer (nro) Mientras (nro>0) Hacer digito nro Mod 10 suma suma + digito c c+ 1 Si (digito Mod 2 = 0) entonces cpar cpar + 1 Sino cimpar cimpar + 1 Fin_si nro nro Div 10 Fin_mientras Escribir (“La suma es: ”, suma) Escribir (“El total de dígitos es: ”, c) Escribir (“La cantidad de digitos pares es: ”, cpar) Escribir (“La cantidad de digitos impares es: ”, cimpar) Fin 0 Ejemplo 09 Pseudocódigo que calcula los salarios de un conjunto de N trabajadores, conociendo la tarifa por hora y las horas trabajadas, asi como, la cantidad de trabajadores que reciben un salario mayor o igual a S/.700. Considerar una única tarifa por hora para todos los trabajadores. Variables a utilizar en el pseudocódigo n cantidad de trabajadores tar tarifa por hora hor horas trabajadas salario salario conS contador de trabajadores con salario mayor o igual a S/.700 con contador Inicio // Definir e inicializar variables entero: tar, n, con, hor, salario, conS 0 // Leer Datos Escribir (“Ingresar tarifa:”) Leer (tar) Escribir (“Ingresar cantidad de trabajadores:”) Leer (n) // Calculo con 1 Mientras (con <= n) Hacer Escribir (“Ingresar horas trabajadas del trabajador”, con, “:”) Leer (hor) salario hor * tar Si (salario >= 700) entonces conS conS + 1 Fin_si con con + 1 Escribir (“El salario del trabajador ”, con, “ es ”, salario) Fin_mientras Escribir (“La cantidad de trabajadores con salarios mayores o iguales a S/.700.00 es: ”, conS) Fin Ejemplo 10 Durante un censo se registra los datos de n personas como: sexo (masculino, femenino), edad y estado civil (soltero, casado, viudo, divorciado). Elaborar un pseudocódigo que muestre el número de jóvenes solteras que tienen entre 18 y 30 años. Variables a utilizar en el pseudocódigo n cantidad de personas sexo sexo de la persona edad edad de la persona estCiv estado civil conM cantidad de mujeres solteras entre 18 y 30 años con contador Inicio // Definir e inicializar variables entero: n, edad, con 1 , conM 0 caracter: sexo, estCiv // Leer Datos Escribir (“Ingresar cantidad de personas:”) Leer (n) // Calculo con 1 Mientras (con <= n) Hacer Escribir (“Ingresar sexo (M)asculino, (F)emenino:”) Leer (sexo) Escribir (“Ingresar edad:”) Leer (edad) Escribir (“Ingresar estado civil (S)oltero, (C)asado, (V)iudo, (D)ivorsiado:”) Leer (estCiv) Si (sexo = „F‟ and estCiv = „S‟ and edad>=18 and edad <=30) entonces conM conM + 1 Fin_si con con + 1 Fin_mientras Escribir (“La cantidad de mujeres solteras entre 18 y 30 años son: ”, conM) Fin Ejemplo 11 Una organización de bienestar familiar registra los pesos de las N personas de un centro poblado, a partir de estos datos, se desea determinar el promedio de peso de los niños, jóvenes, adultos y ancianos que existen en la zona. Considerar la siguiente tabla de categorías: Categoría Niños Jóvenes Adultos Ancianos Edad 0 – 12 13 – 29 30 – 59 60 – más Variables a utilizar en el pseudocódigo n cantidad de personas del centro poblado edad edad de cada persona peso peso de cada persona con contador sumaN suma de los pesos de los niños sumaJ suma de los pesos de los jóvenes sumaA suma de los pesos de los adultos sumaC suma de los pesos de los ancianos conN contador de niños conJ contador de jóvenes conA contador de adultos conC contador de ancianos promN promedio de peso de los niños promJ promedio de peso de los jóvenes promA promedio de peso de los adultos promC promedio de peso de los ancianos Inicio // Definir e inicializar variables entero: n, edad, con 1, conN 0, conJ 0, conA 0, conC real: peso, sumaN 0, sumaJ 0, sumaA 0, sumaC 0, promN, promJ, promA, promC // Leer Datos Escribir (“Ingresar cantidad de población”) Leer (n) // Calculo con 1 Mientras (con <= n) Hacer Escribir (“Ingresar edad”) Leer (edad) Escribir (“Ingresar peso”) Leer (peso) Si (edad <= 12) entonces sumaN sumaN + peso conN conN + 1 Sino Si (edad <= 29) entonces 0 conJ Sino sumaJ sumaJ + peso conJ + 1 Si (edad <= 59) entonces sumaA sumaA + peso conA conA + 1 Sino sumaC sumaC + peso conC conC + 1 Fin_si Fin_si Fin Fin_si Fin_mientras promN sumaN / conN promJ sumaJ/ conJ promA sumaA / conA promC sumaC / conC Escribir (“El promedio de Escribir (“El promedio de Escribir (“El promedio de Escribir (“El promedio de peso peso peso peso de de de de los los los los niños es: ”, promN) jóvenes es: ”, promJ) adultos es: ”, promA) ancianos es: ”, promC) Ejemplo 12 Pseudocódigo para calcular el máximo común divisor (M.C.D.) de dos números a y b, empleando el algoritmo de Euclides. El algoritmo consiste en: a) Dividir el mayor número entre el menor número, obteniendo el cociente q1 y el resto r1. b) Si r1 < > 0, se divide el menor número entre r1, obteniendo el cociente q2 y el resto r2. c) Si r2 < > 0, se divide r1 entre r2 obteniendo cociente q3 y resto r3. d) Este proceso continua hasta obtener un resto igual a 0. e) El máximo común divisor (M.C.D.) es el resto anterior al resto igual a 0. Por ejemplo se queremos hallar el M.C.D. de 1560 y 432, dividimos el mayor entre el menor. b a Cociente 1560 Residuo 432 264 264 168 168 r1<>0 r2<>0 r3<>0 r4<>0 r5<>0 r6 = 0 El M.C.D. es 24 Observamos que a toma el valor de b y b toma el valor del residuo para lo cual escribimos a byb residuo. Variables a utilizar en el pseudocódigo n1 primer número ingresado n2 segundo número ingresado a b residuo dividendo divisor residuo Inicio // Definir variables entero: a, b, residuo, n1, n2 // Leer Datos Escribir (“Ingresar dos números:”) Leer (n1, n2) // Calculo Si (n1 > n2) entonces a n1 b n2 Sino a n2 b n1 Fin_si Mientras (b > 0) Hacer residuo a Mod b a b b residuo Fin_mientras Escribir (“El máximo común divisor es: ”, a) Fin Ejemplo 13 Para convertir un número en base diferente de 10 a base 10, emplearemos la descomposición polinómica, se denomina así por que tiene la característica de un polinomio donde la variable del polinomio viene a estar dado por la base en la cual se ha escrito el número. Se pide realizar un Pseudocódigo para realizar la descomposición polinómica La siguiente tabla muestra la descomposición polinómica: Numero a convertir y su correspondiente base 344(7 1304(5 Resultado de la conversión Proceso de Conversión (descomposicion polinomica) 3*72 + 4*71 + 4*70 = 3*49 + 4*7 + 4 *1= 147 + 28 + 4 179 1*53 + 3*52 + 0*51 + 4*50 = 1*125 + 3*25 + 0*5 + 4*1 = 125 + 75 + 0 + 4 204 Por ejemplo, sea el número 344. Para ir reduciendo cada número emplearemos la operación nro que en valores es: 344 Div 10 = 34 34 Div 10 = 3 3 Div 10 = 0 Para obtener cada dígito emplearemos la operación digito en valores es: nro Div 10, Se detiene cuando es cero digito Mod 10, que 344 Mod 10 = 4 34 Mod 10 = 4 3 Mod 10 = 3 Se puede ir formando la descomposición polinómica multiplicando el primer residuo por la base elevado a la cero, el segundo residuo multiplicado por la base elevado a la 1 y así sucesivamente, guardando el resultado de esta operación en un acumulador suma, expresado mediante la operación: suma suma + digito * baseexpo , así, inicializando suma en cero tenemos: 0 + 4 * 70 = 4 4 + 4 * 71 = 32 32 + 3 * 72 = 179 Variables a utilizar en el pseudocódigo digito cada dígito del número base base del número nro número a realizar la descomposición polinómica nro1 variable auxiliar donde guardamos el nro expo exponente suma resultado de la descomposición polinómica Inicio // Definir e inicializar variables entero: nro, nro1, base, digito, suma 0, expo 0 // Leer datos Escribir (“Ingresar un número y su base”) Leer (nro, base) nro1 nro Mientras( nro > 0) hacer digito nro Mod 10 suma suma + digito * base ^ expo expo expo +1 nro nro Div 10 Fin_mientras Escribir (“El número ”, nro1, “en base 10 es ”, suma) Fin Ejemplo 14 Pseudocódigo para convertir un número decimal a una base que puede ser binario u octal. Existe varios sistemas de numeración como: El sistema binario utiliza los dígitos 0, 1 El sistema octal usa ocho dígitos 0, 1, 2, 3, 4, 5, 6 y 7. El sistema hexadecimal utiliza 16 dígitos, del 0 al 9 y para los otros seis se usan las letras A, B, C, D, E y F, que tienen valores 10, 11, 12, 13, 14 y 15, respectivamente. Se usan indistintamente mayúsculas y minúsculas. En la tabla se muestran los primeros diecisiete números decimales con su respectiva equivalencia binaria, octal y hexadecimal. Decimal 0 1 2 3 4 Binario 0000 0001 0010 0011 0100 Octal 0 1 2 3 4 Hexadecimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 5 6 7 10 11 12 13 14 15 16 17 20 21 5 6 7 8 9 A B C D E F 10 11 Para convertir un número de base decimal a cualquier base, se emplea el método de las divisiones sucesivas que consiste en dividir sucesivamente el número decimal y los cocientes que se van obteniendo entre la base, hasta que una de las divisiones se haga 0. La unión de todos los restos obtenidos escritos en orden inverso, nos proporcionan el número inicial expresado en el sistema deseado. Por ejemplo convertir el número 10 en base 2, obtenemos: 10 0 10(10) =1010(2) a) Se plantea una primera solución mediante el empleo de una fórmula aritmética que permita calcular la conversión del número. Variables a utilizar en el pseudocódigo digito cada digito del número base base que puede ser binario u octal nro número al cual vamos a convertir a otra base nro1 variable auxiliar donde guardamos nro coeficiente forma los coeficientes del nro mensa guardamos el texto correspondiente, si el número es binario u octal nuevonro número convertido a otra base Inicio // Definir e inicializar variables entero: nro, nro1, base, residuo, nuevonro 0, coeficiente cadena: mensa // Lectura de datos Escribir ("Ingrese numero en base decimal: " ) Leer (nro) Escribir ("Ingrese base: ") Leer (base) nro1 nro Mientras (nro >0) hacer residuo nro Mod base 1 nuevonro nuevonro + coeficiente * residuo coeficiente 10*coeficiente nro nro Div base Fin_mientras Si (base = 2) entonces mensa "Binario" Fin_si Si (base = 8) entonces mensa "Octal" Fin_si Escribir (“El número ”,nro1,“ en ”, mensa, “es ”, nuevonro) Fin b) Se plantea una segunda solución usando cadenas, permitiendo concatenar cada digito del número. Concatenar significa unir, enlazar elementos de texto en uno solo. digito = nro Mod base 12 Mod 2 = 0 6 Mod 2 = 0 3 Mod 2 = 1 1 Mod 2 = 1 Concatenar ( unir) cadena = digito + cadena 0+“”=0 0 + 0 = 00 1 + 00 = 100 1 + 100 = 1100 nro = nro / base 12 Div 2 = 6 6 Div 2 = 3 3 Div 2 = 1 1 Div 2 = 0 El resultado es 1100. Variables a utilizar en el pseudocódigo residuo residuo de nro y base base base que puede se binario u octal nro número al cual vamos a convertir a otra base nro1 variable auxiliar donde guardamos nro mensa guardamos el texto correspondiente, si el número es binario u octal nuevonro número convertido a otra base Inicio // Definir e inicializar variables entero: nro,nro1,base,residuo cadena: nuevonro “ ”, mensa // Lectura de datos Escribir (“Ingrese numero en base decimal:”) Leer (nro) Escribir (“Ingrese base:”) Leer (base) nro1 nro Mientras (nro >0) hacer residuo nro Mod base nuevonro residuo + nuevonro nro nro Div base Fin_mientras Si (base = 2) entonces mensa “Binario” Fin_si Si (base = 8) entonces mensa “Octal” Fin_si Escribir (“El número ”,nro1,“ en ”, mensa, “es ”, nuevonro) Fin c) Se plantea una tercera solución usando cadenas, pero en este caso se procede a calcular conversiones a cualquier base incluyendo la base hexadecinal. Para hexadecimal tenemos que tener en cuenta las letras a, b, c, d, e, f para ello preguntamos si dígito es 10, 11, 12, 13, 14, 15 para lo cual hacemos las asignaciones correspondientes mediante la operación binario "letra" + binario. Si los dígitos son menores o igual que 9 para formar la conversión correspondiente hacemos la operación binario digito + binario. Variables a utilizar en el pseudocódigo residuo residuo de nro y base base base que puede se binario, octal o hexadecimal nro número al cual vamos a convertir a otra base nro1 variable auxiliar donde guardamos el nro mensa variable donde guardamos si el numero es binario, octal o Hexadecimal nuevonro número convertido a otra base Inicio // Definir e inicializar variables entero: nro, base, residuo, nro1 cadena: nuevonro “ ”, mensa “” // Lectura de datos Escribir (“Ingresar número en base dcimal: ”) Leer (nro) Escribir (“Ingresar base: ”) Leer (base) nro1 nro Mientras (nro > 0) hacer residuo nro Mod base Si (residuo <= 9) entonces nuevonro residuo + nuevonro Fin_si Si (residuo <= 10) entonces nuevonro “a” + nuevonro Fin_si Si (residuo <= 11) entonces nuevonro “b” + nuevonro Fin_si Si (residuo <= 12) entonces nuevonro “c” + nuevonro Fin_si Si (residuo <= 13) entonces nuevonro “c” + nuevonro Fin_si Si (residuo <= 14) entonces nuevonro “d” + nuevonro Fin_si Si (residuo <=15 ) entonces nuevonro “f” + nuevonro Fin_si Si (base = 2) entonces Fin mensa “Binario” Fin_si Si (base = 8) entonces mensa “Octal” Fin_si Si (base = 16) entonces mensa “Hexadecimal” Fin_si nro nro Div base Fin_mientras Escribir (nro1, “ en base ”, mensa, “ es ”, nuevonro) 4.3.Estructura repetitiva Repetir – Hasta_que Esta sentencia repite una sentencia o más sentencias hasta que el resultado de una expresión lógica sea verdadero (true), momento en que termina la sentencia Repetir y se continúa con el resto del algoritmo. Su sintaxis es la siguiente: Repetir Acción Hasta_que (expresión_lógica) Funcionamiento de Repetir – Hasta_que Cuando la sentencia Repetir – hasta_que inicia su ejecución, se suceden los siguientes pasos: a) b) c) d) Se ejecuta la acción (o conjunto de sentencias). Se evalúa Expresión_lógica, obteniéndose un resultado lógico. Si este resultado es falso (false), se retorna al paso a. Si este resultado es verdadero (true), la ejecución del pseudocódigo proseguirá con sentencia siguiente al hasta_que. Ejemplo 15 Pseudocódigo que imprime los 10 primeros términos de la serie: 1, 3, 5, 7, ... Observamos que cada término de la serie se incrementa en 2, para lo cual emplearemos la operación termino termino + 2. Para imprimir los 10 primeros términos se requiere de un contador que empieza en 1 y acaba en 10, de esta manera cada vez que se obtiene un término el contador se incrementa en 1 para lo cual usaremos con con + 1. Variables a utilizar en el pseudocódigo con controla la estructura repetitiva repetir - hasta_que termino cada uno de los términos de la serie Inicio // Definir e inicializar variables entero: termino 1, con 1 // Calcula e imprime termino Repetir Escribir (termino) termino termino + 2 con con + 1 Hasta_que (con = 10) Fin La siguiente tabla muestra los resultados de la corrida del algoritmo. Iteración numero Resultados del cuerpo del bucle Expresión lógica con Escribir termino termino = termino + 2 con = con + 1 con = 10 Resultado de la Expresión lógica 1 2 3 ….. ….. 10 1 3 5 …… …… 19 3 5 7 ….. ….. 21 2 3 4 …. ….. 10 2 = 10 3 = 10 4 = 10 …… …… 10 = 10 false false false …… ….. true Ejemplo 16 Pseudocódigo que encuentra el menor número, de un conjunto de números positivos ingresados. El pseudocódigo termina cuando se ingresa el cero o un número negativo. Asumimos que el valor inicial del menor número es un número grande: menor 99999, para poder iniciar la comparación con todos los números ingresados. Variables a utilizar en el pseudocódigo nro cada número ingresado menor menor número Inicio // Definir e inicializar variables entero: nro, menor 99999 // Calcula e imprime término Repetir Escribir (“Ingresar número”) Leer (nro) Si (nro < menor) entonces menor nro Fin_si Hasta_que (nro <= 0) Escribir (“El menor número ingresado es ”, menor) Fin Ejemplo 17 Pseudocódigo que genere una secuencia de números utilizando el siguiente algoritmo: Que empiece con cualquier número entero positivo. Si es par, lo dividimos por dos, si es impar lo multiplicamos por tres y le sumamos 1. Repetimos el paso anterior con el número resultante, la secuencia se puede repetir indefinidamente. Por ejemplo si ingresemos el número 7, la secuencia generada seria: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 4 2 1 … Que se obtuvo de la siguiente manera: Número 7 22 11 34 17 52 26 12 40 10 5 16 8 4 2 1 Proceso 7 es impar, entonces 7 * 3 + 1 = 22 22 es par, entonces 22 / 2 = 11 11 es impar, entonces 11 * 3 + 1 =34 34 es par, entonces 34 / 2 = 17 17 es impar, entonces 17 * 3 + 1 = 52 52 es par, entonces 52 / 2 = 26 26 es par, entonces 26 / 2 = 13 13 es impar, entonces 13 * 3 + 1 = 40 40 es par, entonces 40 / 2 = 10 10 es par, entonces 10 / 2 = 5 5 es impar, entonces 5 * 3 + 1 = 16 16 es par, entonces 16 / 2 = 8 8 es par, entonces 8 / 2 = 4 4 es par, entonces 4 / 2 = 2 2 es par, entonces 2 / 2 = 1 Observar que la serie comienza a repetir la serie 4 2 1 indefinidamente, el algoritmo debe de leer el número inicial, imprimir el número de valores encontrados hasta la aparición de un valor 1 en la secuencia. Para los números pares emplearemos la operación: Para los números impares emplearemos la operación: nro nro nro Div 2 3 * nro + 1 Variables a utilizar en el pseudocódigo residuo residuo del numero nro numero inicial de la serie Inicio // Definir variables entero: nro, residuo // Leer Datos Escribir (“Ingresar número:”) Leer (nro) // Calcula la serie Repetir residuo nro Mod 2 Si (residuo = 0) entonces nro nro Div 2 Sino nro 3 * nro + 1 Fin_si Escribir (nro) Hasta_que (nro = 1) Fin Ejemplo 18 Pseudocódigo que calcule el promedio de números positivos y el promedio de números negativos de un conjunto de números ingresados. El pseudocódigo termina cuando se ingresa el cero. Variables a utilizar en el pseudocódigo nro cada número ingresado sumap suma de números positivos suman suma de números negativos cp contador de números positivos cn contador de números negativos promp promedios de los números positivos promn promedios de los números negativos Inicio // Definir e inicializar variables entero: nro, sumap 0, suman 0, cp 0, cn 0 real: promp, promn // Ingreso y cálculo Repetir Escribir (“Ingresar número”) Leer (nro) Si (nro > 0) entonces sumap sumap + nro cp cp + 1 Sino Si (nro < 0) entonces suman suman + nro cn cn + 1 Fin_si Fin_si Hasta_que (nro = 0) promp sumap / cp promn suman / cn Escribir (“El promedio de los números positivos es ”, promp) Escribir (“El promedio de los números negativos es ”, promn) Fin Ejemplo 19 Pseudocódigo que lee N consumos de un restaurante. Si el consumo ingresado excede los S/.70.00, se le descontará el 15%. Mostrar el monto de cada consumo realizado y el total que recauda el restaurante por todos los consumos. Variables a utilizar en el pseudocódigo n cantidad de consumos consumo monto consumido desc descuento total total que recauda el restaurante con contador Inicio // Definir e inicializar variables entero: n, con 0 real: consumo, desc 0, total 0 Escribir (“Ingresar cantidad de consumos”) Leer (n) // Cálculo Repetir Escribir (“Ingresar consumo”) Leer (consumo) Si (consumo > 70.00) entonces desc 0.15 * consumo Fin_si Fin consumo consumo – desc Escribir (“El monto final del consumo es ”, consumo) total total + consumo con con +1 Hasta_que (con = n) Escribir (“El total que recauda el restaurante es ”, total) Ejemplo 20 Pseudocódigo que calcula la compra de N productos de diferentes precios, dicha compra se realiza hasta que el cliente ya no desea seguir comprando. Mostrar el monto total que paga el cliente. Variables a utilizar en el pseudocódigo cant cantidad de productos precio precio del producto subTot monto del subtotal total monto total resp respuesta Inicio // Definir e inicializar variables entero: cant real: precio, subTot, total 0 caracter: resp // Cálculo Repetir Escribir (“Ingresar precio del producto”) Leer (precio) Escribir (“Ingresar cantidad de productos”) Leer (cant) subTot precio * cant total total + subTot Escribir (“¿Desea seguir comprando (S/N)?”) Leer (resp) Hasta_que(resp = „N‟) Escribir (“El total a pagar es ”, total) Fin Ejemplo 21 Pseudocódigo que calcula el monto total que se paga por una entrada a un evento cultural, los precios varían de acuerdo al tipo de entrada: Tipo Vip Platea Popular Precio (S/.) 70.00 50.00 30.00 Además el precio tiene un incremento del 12% por impuesto. Validar el ingreso de datos. Variables a utilizar en el pseudocódigo tipo tipo de entrada precio precio del producto inc incremento Inicio Fin // Definir variables real: precio, inc caracter: tipo // Cálculo Repetir Escribir (“Ingresar tipo de entrada (V)ip, (P)latea, Popu(L)ar”) Leer (tipo) Si (tipo <> „V‟ and tipo <> „P‟ and tipo <> „L‟) Escribir (“Tipo no existe”) Fin_si Hasta_que (tipo = „V‟ or tipo = „P‟ or tipo = „L‟) Según sea (tipo) „V‟: precio 70.00 „P‟: precio 50.00 „L‟: precio 30.00 Fin_según inc precio * 0.12 precio precio + inc Escribir (“El precio final a pagar es ”, precio) Ejemplo 22 Un entrenador le ha propuesto a un atleta recorrer una ruta de cinco kilómetros durante 10 días, para determinar si es apto para competir. Para que el atleta sea considerado apto debe cumplir por lo menos una de las siguientes condiciones: Que en ninguna de las pruebas haga un tiempo mayor a 16 minutos. Que su promedio de tiempos sea menor o igual a 15 minutos. Variables a utilizar en el pseudocódigo tpo tiempo en minutos ct cantidad de dias que recorre en mas de 16 minutos suma suma de tiempos con contador prom promedio de tiempos Inicio // Definir e inicializar variables entero: tpo, ct 0, suma 0, con 0 real: prom // Cálculo Repetir Escribir (“Ingresar tiempo en minutos”) Leer (tpo) Si (tpo > 16) entonces ct ct + 1 Fin_si suma suma + tpo con con + 1 Hasta_que (con = 10) prom suma / 10 Si ((ct = 0) or (prom <= 15)) Escribir (“Si es apto para competir”) Sino Escribir (“No es apto para competir”) Fin_si Fin Ejemplo 23 Se ingresan los resultados de la evaluación de un cierto número de alumnos del curso de Programación; por cada alumno se informa: su asistencia (1 = presente; 0 = ausente) y su calificación. A partir de esta información se debe calcular: La cantidad y el porcentaje de alumnos presentes. Promedio de calificaciones de alumnos presentes. Si un alumno esta ausente no se registra su calificación. El pseudocódigo termina cuando se ingresa como asistencia un valor diferente a 1 ó 0. Variables a utilizar en el pseudocódigo asis asistencia del alumno calf calificación suma suma de calificaciones de los alumnos presentes cap cantidad de alumnos presentes caa cantidad de alumnos ausentes cant cantidad de alumnos registrados porp porcentaje de alumnos presentes prom promedio de calificaciones de los alumnos presentes Inicio // Definir e inicializar variables entero: asis, calf, suma 0, cap 0, caa 0, cant 0 real: porp, prom // Cálculo Repetir Escribir (“Ingresar asistencia (1)Presente, (0)Ausente”) Leer (asis) Si (asis = 1) Escribir (“Ingresar calificación”) Leer (calf) suma suma + calf Fin_si Según sea (asis) hacer 1 : cap cap + 1 0 : caa caa + 1 Fin_según cant cant + 1 Hasta_que (asis <> 0 or asis <>1) porp (cap * 100) / cant prom suma / cap Escribir (“La cantidad de alumnos presentes es ”, cap) Escribir (“El porcentaje de alumnos presentes es ”, porp) Escribir (“El promedio de calificaciones de los alumnos presentes es ”, prom) Fin Ejemplo 24 Pseudocódigo que lee de forma consecutiva y aleatoria una serie de números, y finalice cuando se ingresa un número mayor que la suma de los dos números anteriores ingresados, mostrándose la cantidad de números ingresados y los tres números que cumplieron la condición. Variables a utilizar en el pseudocódigo nro cada número ingresado n1 primer número antes del número ingresado n2 segundo número antes del número ingresado con suma sw contador de números suma del primer y segundo número antes del número ingresado bandera Inicio // Definir e inicializar variables entero: nro, sw 0, n1 0, n2 0, con 0, suma // Cálculo Repetir Escribir (“Ingresar número”) Leer (nro) Si (con >= 2) suma n1 + n2 Si (nro > suma) entonces sw 1 Fin_si Fin_si Si (sw = 0) entonces Si (con Mod 2 = 0) entonces n1 nro Sino n2 nro Fin_si Fin_si con con + 1 Hasta_que (sw = 1) Escribir (“La cantidad de números ingresados es ”, con) Escribir (“Los números que cumplieron la condicion son ”, n1, n2, nro) Fin Ejemplo 25 Pseudocódigo que lee números de forma consecutiva y aleatoria hasta que se ingrese el número 0 (cero). Calcular la suma de todos los números ingresados antes de que aparezca el primer número mayor a 150, asi como la suma de todos los números que entran a continuación de éste, hasta la aparición del cero. Mostrar la cantidad de números ingresados (sin contar el cero ni el primer número mayor de 150), en la primera y la segunda suma. Contemplar la posibilidad de que entre antes el 0 que el primer número mayor de 150. Variables a utilizar en el pseudocódigo nro cada número ingresado suma1 primera suma suma2 segunda suma con contador de números sw bandera Inicio // Definir e inicializar variables entero: nro, sw 0, suma1 0, suma2 // Cálculo Repetir Escribir (“Ingresar número”) Leer (nro) Si (nro <> 0) entonces con con + 1 0, con 0 Fin Fin_si Si (sw = 1) entonces suma2 suma2 + nro Fin_si Si ((nro < 150) and (sw = 0)) entonces suma1 suma1 + nro Sino sw = 1 con con - 1 Fin_si Hasta_que (nro = 0) Escribir (“La cantidad de números ingresados es ”, con) Escribir (“La primera suma es ”, suma1) Escribir (“La segunda suma es ”, suma2) Ejemplo 26 Suponga que se piden X soles prestados a un banco, con el acuerdo de devolver Y soles cada mes hasta devolver el préstamo completo. Parte del pago mensual serán los intereses calculados como el i por ciento del capital por devolver en ese momento. El resto del pago mensual se aplica a reducir el capital a devolver. El algoritmo debe determinar: La cantidad de intereses que se paga cada mes. La cantidad de dinero aplicada cada mes al capital por devolver. La cantidad acumulada de intereses. La cantidad del préstamo aún pendiente al final de cada mes. La cantidad probable que se devuelve en el último pago. Por ejemplo, si se pide prestado S/.1000.00 prestados a un banco a un interes del 15% se tiene: Nro Amortización Interés 1 2 3 4 5 6 7 8 9 10 50.00 57.50 66.125 76.0438 87.4503 100.568 115.653 133.001 152.951 160.708 1000.00 150.00 142.50 133.875 123.956 112.55 99.4321 84.347 66.999 47.0489 24.1062 Interes Acumulado 150.00 292.50 426.375 550.331 662.881 762.3131 846.6601 913.6591 960.708 984.8142 Préstamo Pendiente 950.00 892.50 826.375 750.3312 662.8809 562.3129 446.6599 313.6589 160.7079 0 Variables a utilizar en el Pseudocódigo x monto prestado i interes y monto que se devuelve ma monto aplicado al capital inte interés generado suma suma de intereses Inicio // Definir e inicializar variables real: x, i, inte, y, ma, suma 0 // Leer dato Escribir (“Ingresar monto prestado”) Leer (x) Escribir (“Ingresar interes”) Leer (i) Escribir (“Ingresar monto que se devuelve”) Leer (y) Repetir inte (i/100) * x Escribir (“El interes del mes es”, inte) ma y - inte Si (y > x) entonces Escribir (“El monto aplicado al capital es ”, x) Sino Escribir (“El monto aplicado al capital es ”, ma) Fin_si x x - ma Si (x < 0) entonces Escribir (“El monto pendiente es 0”) Escribir (“Se le devuelve ”, -x) Sino Escribir (“El monto pendiente es ”,x) Fin_si suma suma + inte Hasta_que (x > 0) Escribir (“La cantidad acumulada de interés es ”, suma) Fin Couta (Y) 200 200 200 200 200 200 200 200 200 200 4.4.Estructura repetitiva Desde – Fin_desde La sentencia Desde, repite una o más acciones un número determinado de veces. Se utiliza cuando se conoce por anticipado el número de veces que se van a repetir estas acciones. Su sintaxis es la siguiente: Desde (i Valor_Inicial) hasta (expresión_Lógica) con incremento N hacer Acción Fin_desde Valor_Inicial: especifica el primer valor asignado a la variable de control. Esta inicialización se realiza solo la primera vez que se repite el bucle. Expresión_Lógica: esta expresión debe ser verdadera para que se ejecute el bucle. La expresión_Lógica se compara con la variable de control cada vez que se repite el bucle. Incremento N: indica el valor que va ha aumentar o disminuir a la variable de control. Funcionamiento de Desde – Fin_desde Cuando la sentencia Desde inicia su ejecución, se suceden los siguientes pasos: Se asigna un Valor_Inicial a la variable de control, en nuestro caso i. Si la variable de control cumple la expresión_Lógica, se ejecuta la acción luego se incrementa (o disminuye) la variable de control. Si la variable de control no cumple la Condición se ejecuta la sentencia siguiente a Fin_desde. Ejemplo 27 Pseudocódigo que calcule la suma de los cuadrados y los cubos de los N primeros números naturales. Variables a utilizar en el pseudocódigo n cantidad de números naturales nro cada número natural cuad cuadrado del número cubo cubo del número raiz raíz cuadrada del número Inicio // Definir e inicializar variables entero: n, nro, cuad, cubo, sumaCuad 0, sumaCubo 0 // Leer dato Escribir (“Ingresar cantidad de números naturales”) Leer (n) Desde (nro 1) hasta (nro <= n) con incremento 1 Hacer cuad nro * nro sumaCuad sumaCuad + cuad cubo nro * nro * nro sumaCubo sumaCubo + cubo Fin_desde Escribir(“La suma de los cuadrados es ”, sumaCuad) Escribir(“La suma de los cubos es ”, sumaCubo) Fin Explicación Para realizar el ejercicio planteado se definen las variables enteras n, nro, cuad, cubo y se define e inicializa en cero las variables sumaCuad, sumaCubo: entero: n, nro, cuad, cubo, sumaCuad 0, sumaCubo 0 Se ingresa la cantidad de números que se desea sumar mediante la variable n: Escribir (“Ingresar cantidad de números naturales”) Leer (n) Enseguida se ejecuta la sentencia Desde, en el que se asigna a la variable nro el valor de 1 y se evalúa la expresión lógica (nro<=n), si es verdadera se ejecuta las cuatro sentencias que tiene esta estructura, luego se incrementa en una unidad el valor de la variable nro, en ese momento la sentencia Desde vuelve a verificar la expresión logica (nro<=n) si es verdadero continua el bucle: Desde (nro 1) hasta (nro <= n) con incremento 1 Hacer cuad nro * nro sumaCuad sumaCuad + cuad cubo nro * nro * nro sumaCubo sumaCubo + cubo Fin_desde Cuando la expresión lógica (nro<=n) llega a ser falso el bucle termina y se ejecuta la sentencia escribir y finaliza el pseudocódigo: Escribir(“La suma de los cuadrados es ”, sumaCuad) Escribir(“La suma de los cubos es ”, sumaCubo) Ejemplo 28 Pseudocódigo que calcula el numero PI, de acuerdo a la siguiente fórmula: PI/4 = 1 - 1/3 + 1/5 - 1/7 + ... El número de términos debe ser ingresado. Variables a utilizar en el pseudocódigo n cantidad de números num numerador den denminador con contador suma suma pi valor de PI Inicio // Definir e inicializar variables entero : n, con real : pi, suma 0, num 1, den 1 // Leer dato Escribir (“Ingresar cantidad de términos”) Leer (n) Desde (con 1) hasta (con <= n) con incremento 1 Hacer suma suma + (num / den) num num * -1 den den + 2 Fin_desde pi suma * 4 Escribir (“El valor de PI es ”, pi) Fin Ejemplo 29 Pseudocódigo para encontrar todos los divisores de un número ingresado. Un número a es divisor de otro número b, cuando el residuo de la división de b entre a es cero, en otras palabras cuando el residuo es exacto. Así pues, decimos que 5 es divisor de 20, porque 20 Mod 5 nos da residuo cero. Por ejemplo, los divisores de 24 son: 1, 2, 3, 4, 6, 8, 12, 24, para hallar estos valores es necesario dividir al número 24 con valores comprendidos entre 1 y 24, los cuales se trabajarán mediante la variable i, si el residuo de la división del número 24 entre i es cero entonces i es uno de los divisores de 24. Nro Mod i 24 Mod 1 = 0 entonces 1 es divisor de 24 24 Mod 2 = 0 entonces 2 es divisor de 24 24 Mod 3 = 0 entonces 3 es divisor de 24 24 Mod 4 = 0 entonces 4 es divisor de 24 24 Mod 5 <> 0 entonces 5 no es divisor de 24 y así sucesivamente Variables a utilizar en el pseudocódigo nro número al cual calculamos sus divisores i divisor del numero Inicio // Definir e inicializar variables entero: nro, i 1 // Leer datos Escribir (“Ingresar número”) Leer (nro) Desde (i 1) hasta (i <= nro) con incremento 1 hacer Si (nro Mod i = 0) entonces Escribir (i) Fin_si Fin_desde Fin Ejemplo 30 Pseudocódigo que calcule el factorial de un número entero. El factorial de un número n se representa por n! y su fórmula es: n ! = 1 * 2 * 3 * 4 * … * (n-2) * (n-1) * n Así por 1! 2! 3! 4! 4! ejemplo: = 1 = 1*2=2 = 1*2*3=6 = 1 * 2 * 3 * 4 = 24 = 3 ! * 4 = 24 Se observa que el factorial de 4 es el factorial de 3 multiplicado por 4, quiere decir que el factorial de n es el factorial de (n -1) multiplicado por n. n! = (n-1)! * n Esto nos sirve para implementar la lógica del programa empleando: fact fact * i Variables a utilizar en el pseudocódigo i controla el bucle desde fact calcula el factorial nro numero al cual se va a calcular el factorial Inicio // Definir e inicializar variables entero i, nro, fact 1 // Leer Datos Escribir (“Ingresar número:”) Leer (nro) // Calcula el factorial Desde (i 1) hasta (i <= nro) con incremento 1 hacer fact fact * i Fin_desde Escribir (“El factorial es: ”, fact) Fin La siguiente tabla muestra los resultados de la corrida del algoritmo para 5! Iteración Nro i 1 2 3 4 5 6 Expresión lógica i<=5 1<= 5 2<= 5 3 <=5 4 <=5 5<= 5 6<= 5 Valor de la Expresión lógica true true true true true false Resultados del cuerpo Incremento del bucle i=i+1 fact = fact * i 1 2 2 3 6 4 24 5 120 6 Finaliza la sentencia desde Ejemplo 31 Pseudocódigo que obtenga el cuadrado de un número entero utilizando formula: 2 n = 1 + 3 + 5 + . . . + 2n-1. la Para obtener cada termino de la serie emplearemos la fórmula 2 * n – 1. Si n = 1 Si n = 2 Si n = 3 2*1–1=1 2*2-1=3 2*3–1=5 Posteriormente es necesario sumar cada uno de los términos empleando la operación suma suma + termino. 1 4 9 0+1 1+3 4+5 Variables a utilizar en el pseudocódigo i controla el bucle desde suma cuadrado de un número termino cada termino de la serie nro número al cual se va a calcular su cuadrado Inicio // Definir e inicializar variables entero: nro, i, termino, suma 0 // Leer Datos Escribir (“Ingresar número:”) Leer (nro) Desde (i 1) hasta (i <= nro) con incremento 1 hacer termino 2*i-1 Escribir (termino) suma suma + termino Fin-desde Escribir (“El número al cuadrado es : ”, suma) Fin Ejemplo 32 Pseudocódigo para determinar si un año es bisiesto en un rango dado. Un año es bisiesto si es múltiplo de 4 pero no múltiplo de 100 excepto los múltiplos de 400. Como tenemos que hallar los años bisiestos en un rango, empleamos un bucle repetitivo que permita recorrer los años determinados en el rango añoinicio y añotermino que definen el año de inicio y término respectivamente, de esta manera usamos un contador año que empieza en añoinicio y termina en añotermino que se irá incrmentando en 1, el mismo que definirá cada año que se evalúa como bisiesto. De esta manera, dentro del bucle realizamos los cálculos correspondientes Variables a utilizar en el pseudocódigo añoinicio año el cual vamos a empezar la búsqueda añotermino año el cual vamos a terminar la búsqueda a cada uno de los años comprendidos en un rango Inicio // Definir variables entero: añoinicio, añotermino, a // Leer dato Escribir (“Ingresar año inicial y año final”) Leer (añoinicio, añotermino) Desde (a añoinicio) hasta (a <= añotermino) con incremento 1 Hacer Si ((a Mod 4 = 0) and (a Mod 100 <> 0) or (a Mod 400 = 0)) entonces Escribir (“El año ”, a, “es bisiesto”) Fin_si Fin_desde Fin Ejemplo 33 Pseudocódigo que muestra y calcula el promedio de todos los números pares comprendidos entre a y b. Indistintamente a puede ser menor que b o b menor que a. Variables a utilizar en el pseudocódigo a, b límites n1, n2 auxiliares nro número evaluado como par entre los límites a y b suma suma de números pares con contador de números pares prom promedio Inicio // Definir e inicializar variables entero: a, b, nro, suma 0, con 0 real: prom // Leer Datos Escribir (“Ingresar límites:”) Leer (a, b) Si (a > b) entonces n1 a n2 b Sino n1 b n2 a Fin_si Desde (nro n1) hasta (nro <= n2) con incremento 1 hacer Si (nro Mod 2 = 0) entonces Escribir (nro) suma suma + nro con con +1 Fin_si Fin-desde prom suma / con Escribir (“El promedio es ”, prom) Fin Ejemplo 34 Pseudocódigo que lee dos números, el primero representa el número a ser transformado, y el segundo el transformador, se debe hacer girar hacia la derecha el número a transformarse, tantas veces lo indique el transformador, e ir desplegando el número después de cada transformación. Ejemplo: Primer número: 35241, Segundo número: 4 Girado a la derecha se tiene Número de giros 1 2 3 4 Transformaciones 13524 41352 24135 52413 Variables a utilizar en el Pseudocódigo n1 número a transformar n2 número transformador aux auxiliar dig dígito cd cantidad de dígitos con contador Inicio // Definir e inicializar variables entero: n1, n2, aux, dig, cd 0, con // Leer dato Escribir (“Ingresar dos números”) Leer (n1, n2) aux n1 Mientras (aux > 0) hacer dig aux Mod 10 Fin cd cd + 1 aux aux Div 10 Fin_mientras cd cd - 1 Desde (con 0) hasta (con < n2) con incremento 1 Hacer dig n1 Mod 10 n1 n1 Div 10 dig dig * 10 ^ cd n1 dig + n1 Fin_desde Escribir(“El número transformado es ”, n1) Ejemplo 35 Pseudocódigo para averiguar si un número ingresado es primo. Un número es primo, si solo tiene como divisores al mismo número y a la unidad. Variables a utilizar en el pseudocódigo d posibles divisores del número ingresado con contador de divisores del número nro numero ingresado Inicio // Declarar e inicializar variables entero: nro, d, con 0 // Leer Datos Escribir (“Ingresar número:”) Leer (nro) Desde (d 1) hasta (d <= nro) con incremento 1 hacer Si (nro Mod d = 0) entonces con con + 1 Fin_si Fin-desde Si (con <= 2) Escribir (“El número es primo”) Sino Escribir (“El número no es primo”) Fin_si Fin Ejemplo 36 Una empresa almacena los datos de N empleados, para esto, en un proceso repetitivo se ingresa el sexo (masculino, femenino) y el salario de cada empleado. Se pide calcular: a) El mayor y el menor salario b) El promedio de salarios. c) La cantidad de mujeres y varones que trabajan en esa empresa Variables a utilizar en el pseudocódigo n cantidad de empleados sexo sexo del empleado sal salario mayor mayor salario menor menor salario suma suma de salarios conVar contador de empleados varones conMuj contador de empleadas mujeres prom con promedio de salarios contador de empleados Inicio // Definir e inicializar variables entero: n, con, conVar 0, conMuj 0 real: sal, mayor 0, menor 99999, suma 0, prom caracter: sexo // Leer dato Escribir (“Ingresar cantidad de empleados”) Leer (n) Desde (con 1) hasta (con <= n) con incremento 1 Hacer Escribir (“Ingresar sexo”) Leer (sexo) Escribir (“Ingresar salario”) Leer (sal) Si (sal > mayor) entonces mayor sal Fin_si Si (sal < menor) entonces menor sal Fin_si suma suma + sal Según sea (sexo) hacer „M‟ : conVar conVar + 1 „F‟ : conMuj conMuj + 1 Fin_según Fin_desde prom suma / n Escribir (“El mayor salario es ”, mayor) Escribir (“El menor salario es ”, menor) Escribir (“El promedio de salarios es ”, prom) Escribir (“La cantidad de varones que trabajan en la empresa es ”, conVar) Escribir (“La cantidad de mujeres que trabajan en la empresa es ”, conMuj) Fin Ejemplo 37 Pseudocódigo que indica mediante un mensaje si dos números son amigos o no. Se dice que dos números son amigos si la suma de los divisores del primer número (excepto él mismo) coincide con el segundo número y viceversa. Por ejemplo 220 y 284 son amigos, porque: La suma de los divisores de 220 es: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 Y la suma de los divisores de 284 es: 1 + 2 + 4 + 71 + 142 = 220 Variables a utilizar en el pseudocódigo nro1 primer número ingresado nro2 segundo número ingresado d posibles divisores de los números ingresados sin incluir el mismo número suma1 suma de los divisores del primer número ingresado suma2 suma de los divisores del segundo número ingresado Inicio // Definir e inicializar variables entero: nro1, nro2, d, suma1 0, suma2 0 // Leer Datos Escribir (“Ingresar primer número:”) Leer (nro1) Escribir (“Ingresar segundo número:”) Leer (nro2) Desde (d 1) hasta (d <= (nro1 Div 2)) con incremento 1 hacer Si (nro1 Mod d = 0) entonces suma1 suma1 + d Fin_si Fin-desde Desde (d 1) hasta (d <= (nro2 Div 2)) con incremento 1 hacer Si (nro2 Mod d = 0) entonces suma2 suma2 + d Fin_si Fin-desde Si (suma1 = nro2 and suma2 = nro1) Escribir (“Los números ”, nro1, “y ”, nro2, “son amigos”) Sino Escribir (“Los números ”, nro1, “y ”, nro2, “no son amigos”) Fin_si Fin Ejemplo 38 Se ha seleccionado n números de personas para realizar una encuesta, en un proceso repetitivo se ingresa el grado de instrucción y la edad de cada persona. Se desea saber el promedio de edades, la mayor edad y el porcentaje de personas con instrucción Primaria, Secundaria y Superior (P, S, R). Variables a utilizar en el pseudocódigo n cantidad de personas encuestadas edad edad de cada persona grad grado de instrucción de cada persona suma suma de edades prom promedio de edades mayor mayor edad conp cantidad de personas con instrucción primaria cons cantidad de personas con instrucción secundaria conr cantidad de personas con instrucción superior p1 porcentaje de personas con instrcucción primaria p2 porcentaje de personas con instrcucción secundaria p3 porcentaje de personas con instrcucción superior con contador Inicio // Definir e inicializar variables entero: n, con, edad, suma 0, mayor 0, conp 0, cons 0, conr 0 real: prom, p1, p2, p3 caracter: grad // Leer Datos Escribir (“Ingresar cantidad de personas:”) Leer (n) Desde (con 1) hasta (con <= n) con incremento 1 hacer Escribir (“Ingrese grado de instrucción (P)rimaria, (S)ecunadaria, supe(R)ior:”) Leer (grad) Fin Escribir (“Ingrese edad:”) Leer (edad) suma suma + edad Si (edad > mayor) entonces mayor edad Fin_si Según sea (grad) hacer „P‟: conp conp + 1 „S‟: cons cons + 1 „R‟: conr conr + 1 Fin_según Fin-desde prom suma / n p1 (conp * 100) / n p2 (cons * 100) / n p3 (conr * 100) / n Escribir (“El promedio de edades es ”, prom) Escribir (“La mayor edad es ”, mayor) Escribir (“El porcentaje de personas con instrucción primaria es ”, p1) Escribir (“El porcentaje de personas con instrucción secundaria es ”, p2) Escribir (“El porcentaje de personas con instrucción superior es ”, p3) 4.5.Variantes de las estructuras repetitivas 4.5.1. Bucles anidados Los bucles anidados, son bucles incluidos dentro de otro bucle. Se pueden tener los siguientes tipos de anidamiento: a) Un bucle Mientras dentro de un bucle Mientras, Repetir – Hasta_que o Desde. b) Un bucle Repetir – Hasta_que dentro de un bucle Repetir – Hasta_que, Mientras o Desde. c) Un bucle Desde dentro de un bucle Desde, Mientras o Repetir – Hasta_que. Consideraciones a tener en cuenta al trabajar con bucles Un bucle interno debe de estar completamente dentro del bucle externo que lo contiene de lo contrario si los bucles se cruzan se obtendrían resultados no previstos. Cuando se construyan los bucles anidados considere cada bucle como una sentencia y siga la sintaxis ya definida para ellas. Ejemplo 39 Bucle anidado Desde dentro de otro Desde, para hallar la tabla de multiplicar del 1 y del 2. Se pide la siguiente salida: Tabla de multiplicar del 1 1*1 =1 1*2 =2 ……. 1 * 12 = 12 Tabla de multiplicar del 2 2*1 =2 2*2 =4 …… 2 * 12 = 24 Observamos que en la tabla del 1, el primer número aparece fijo mientras que el segundo número varia de 1 a 12, incrementándose cada número en 1, lo mismo sucede en la tabla del 2. Para calcular el producto emplearemos la operación: m=i*j Tenemos bucles anidados donde el bucle externo varía de 1 a 2, y el bucle interno de 1 a 12 Variables a utilizar en el pseudocódigo i controla el bucle externo j controla el bucle interno m producto de los números i, j Inicio //Definir variables entero: i, j, m Desde (i 1) hasta (i <= 2) con incremento 1 Hacer Escribir (“Tabla de multiplicar del” , i) Desde (j 1) hasta (j <= 12) con incremento 1 Hacer m i*j Escribir (i , “ * ”, j, “ = ” , m ) Fin_desde Fin-desde Fin Ejemplo 40 Un centro de estudios desea saber cuál ha sido el promedio más alto, de un conjunto de 120 alumnos, sabiendo que cada alumno a llevado 5 asignaturas. Variables a utilizar en el pseudocódigo nota nota de cada una de las 5 asignaturas suma suma de las 5 notas prom promedio de cada alumno mayor mayor promedio con1 contador, que cuenta cada alumno con2 contador, que cuenta cada nota Inicio // Definir e inicializar variables entero: nota, suma 0, prom, mayor 0, con1 1, con2 // Calculo Mientras (con1 <= 120) Hacer Mientras (con2 <= 5) Hacer Escribir (“Ingresar nota de asignatura”, con, “:”) Leer (nota) suma suma + nota Fin_mientras prom suma / 5 Si (prom > mayor) entonces mayor prom Fin_si Fin_mientras Escribir (“El mayor promedio es: ”, mayor) Fin 1 Ejemplo 41 Pesudocódigo que reduce una fracción a su mínima expresión. Por ejemplo: Si se ingresa 36 / 48 num 36 18 9 3 den 48 24 12 4 2 2 3 En su mínima expresión es 3 / 4 Variables a utilizar en el pseudocódigo num numerador den denominador d divisor Inicio // Definir e inicializar variables entero: num, den, d 2 // Leer Datos Escribir (“Ingresar fracción:”) Leer (num, den) // Calcula serie y multiplica Mientras ((d < num) and (d < den)) Hacer Mientras ((num mod d = 0) and (den mod d = 0)) Hacer num num Div d den den Div d Fin_mientras d d+1 Fin_mientras Escribir (“La fracción en su mínima expresión es: ”, num, “/”, den) Fin Ejemplo 42 Pseudocódigo que lea N notas de un estudiante y calcule su promedio, sabiendo que se elimina la nota mas baja. Se debe validar el ingreso de notas, que debe estar comprendido entre 0 y 20. Variables a utilizar en el pseudocódigo n cantidad de notas nota nota suma suma de notas menor nota mas baja prom promedio con contador Inicio // Definir e inicializar variables entero: n, con, nota, menor 21 real: suma 0, prom Escribir (“Ingresar cantidad de notas”) Leer (n) // Calculo con 1 Mientas (con <= n) Repetir Escribir (“Ingresar nota”) Leer (nota) Hasta_que(nota >= 0 and nota <= 20) suma suma + nota con con + 1 Si (nota < menor) menor nota Fin_si Fin_mientras prom (suma – menor) / (n – 1) Escribir (“El promedio es ”, prom) Fin Ejemplo 43 Pseudocódigo para encontrar todos los números que sean capicúas en un rango dado. Un número es capicúa o poliandro, si al invertir el número nos da el mismo número. Por ejemplo, los siguientes números son capicúas. 44 44 373 373 18481 18481 Así, para determinar si el número 44 es capicúa, emplearemos la variable inver que guardará el resultado de invertir el número 44, de esta manera, si inver es igual a 44 entonces es número capicúa. Es necesario guardar el número 44 en otra variable por que al calcular el número invertido perderá su valor original, que es indispensable para realizar la comparación final. Se pide que hallar los capicúas de un rango determinado, para esto utilizamos las variable vi y vf que representan los valores inicial y final respectivamente, el contador i que indica cada uno de los números que existe dentro del rango dado, este contador empieza en vi y termina en vf incrementándose en una unidad. Dentro del bucle guardamos i en nro, para no perder el valor original del número que se esta evaluando. El bucle interno se encarga de invertir nro, y guardarlo en la variable inver cuando acaba este bucle incrementamos i para empezar nuevamente el ciclo externo. Variables a utilizar en el pseudocódigo digito cada digito del número vi número inicial vf número final nro variable auxiliar donde guardamos cada número a invertir inver número invertido Inicio // Definir e inicializar variables entero: vi, vf, nro, digito, inver 0, i // Leer datos Escrbir (“Ingresar el valor inicial y final de un rango de números”) Leer (vi, vf) Fin // Calcula número capicúa Desde (i vi) hasta (i<= vf) com incremento 1 Hacer nro i inver 0 Mientras (nro >0) Hacer digito nro Mod 10 inver 10 * inver + digito nro nro Div 10 Fin_ mientras Si (inver = i) entonces Escribir (inver) Fin_si Fin_desde Ejemplo 44 Pseudocódigo para buscar el número del tarot de una persona; para hallar el número del tarot, se tiene que sumar cada uno de los números de la fecha de nacimiento de una persona y a continuación reducirlos hasta obtener un solo dígito. Por ejemplo, para una fecha: 17/10/1970, se realiza: 17 + 10+ 1970 = 1997 1 + 9 + 9 + 7 = 26 2+6=8 El número del tarot calculado es 8 Para realizar este calculo, el algoritmo pide una fecha en el formato dd/mm/aa, donde dd es el dia, mm es el mes y aa es el año. La suma de cada una de estas variables que compone la fecha, se realiza mediante la operación: nro dd + mm + aa, que en valores es: nro 17 + 10 + 1970 = 1997 Luego, tenemos que descomponer nro, hallando cada dígito e ir sumándolo. Para este caso emplearemos las operaciones: digito nro Mod 10, para hallar cada dígito. tarot tarot + digito, para sumar cada dígito nro nro Div 10, para acortar el número Al acabar la primera iteración del bucle, obtendremos el valor de 26 para la variable tarot, pero como el enunciado nos pide que el número del tarot sea de un solo digito, entonces es necesario repetir el mismo proceso, para lo cual hacemos nro tarot utilizando otro bucle que sea externo. Variables a utilizar en el pseudocódigo digito cada digito del número d día de nacimiento m mes de nacimiento a año de nacimiento nro número al cual vamos a calcular el tarot tarot número de tarot Inicio // Definir e inicializar variables Fin entero: d, m, a, nro 0, digito, tarot 0 // Leer datos Escribir (“Ingresar fecha”) Leer (d, m, a) nro d+m+a Mientras (nro >9) Hacer tarot 0 Mientras (nro > 0) Hacer digito nro Mod 10 tarot tarot + digito nro nro Div 10 Fin_mientras nro tarot Fin_mientras Escribir (“El número del tarot es ”, tarot) Ejemplo 45 Pseudocódigo para hallar los números primos en un rango dado, un número es primo si es divisible por si mismo y por la unidad. Algunos números primos son: 1 2 3 5 7 11 13 Por ejemplo, si queremos determinar si el número 11 es primo, primero hallamos todos los divisores del número y mediante un contador calculamos la cantidad de divisores que tiene el número, luego comparamos si la cantidad de divisores es menor o igual que 2, entonces el número evaluado es número primo. Como tenemos que hallar los números primos en un rango determinado, es necesario usar dos bucles repetitivos. Un primer bucle al que llamamos bucle externo, que nos permite recorrer cada número (nro) definido en el rango vi y vf. Un segundo bucle, llamado bucle interno que se encarga de calcular la cantidad de divisores que tiene cada número del rango, mediante un contador p. Finalmente, al acabar el bucle interno se pregunta si p <= 2 si cumple es primo, luego se incrementa nro para ir nuevamente al bucle externo. Variables a utilizar en el pseudocódigo digito cada digito del número vi número inicial vf número final nro variable auxiliar donde guardamos el nro p contador de números primos k contador que representa los posibles divisores i controla el bucle mientras Inicio // Definir variables entero: vi, vf, nro, k, p // Leer datos Escribir (“Ingresar valor inicial y final de un rango”) Leer (vi, vf) // Calcula los números primos Desde (nro vi) hasta (nro <= vf) con incremento 1 hacer p 0 Fin Desde (k 1) hasta (k <= nro) con incremento 1 hacer Si (nro Mod k = 0) entonces p p+1 Fin_si Fin_desde Si (p <= 2 ) entonces Escribir (nro) Fin_si Fin_desde Ejemplo 46 Pseudocódigo que solicite un valor no negativo (si se ingresa un valor negativo volverá a pedir el número hasta que se ingrese un número positivo), una vez ingresado el número mostrar los números naturales desde el 1 hasta el número ingresado de forma consecutiva de manera que se vaya mostrando un número menos hasta que se muestre solo la unidad. Por ejemplo, si se ingreso n=6, se mostrará: 123456 12345 1234 123 12 1 Variables a utilizar en el pseudocódigo nro número ingresado aux guarda el valor original del número ingresado con contador de líneas de impresión n cada número impreso Inicio // Definir variables entero: nro, aux, con, n // Leer Datos Repetir Escribir (“Ingresar número:”) Leer (nro) Hasta_que (nro>0) aux nro Desde (con 1) hasta (con <= aux) con incremento 1 hacer Desde (n 1) hasta (n <= nro) con incremento 1 hacer Escribir (n) Fin_desde nro nro -1 Fin-desde Fin Ejemplo 47 Pseudocódigo que permita ingresar números enteros, y calcule el factorial de cada número ingresado. El algoritmo termina cuando se ingresa un número negativo. Variables a utilizar en el pseudocódigo nro número ingresado fact factorial con contador Inicio // Definir variables entero: nro, fact, con // Leer Datos Repetir Escribir (“Ingresar número:”) Leer (nro) fact 1 Si (nro >= 0) entonces Desde (con 1) hasta (con <= nro) con incremento 1 hacer fact fact * con Fin_desde Escribir (“El factorial de ”, nro, “es ”, fact) Fin_si Hasta_que (nro < 0) Fin Ejemplo 48 Se desea calcular los sueldos semanales de N obreros; durante los 5 días de la semana se registran la cantidad de horas diarias y el turno en el que trabajó el obrero. Un obrero puede alternar su trabajo en cualquiera de los dos turnos. La tarifa de cada hora trabajada para el turno mañana es de S/23.00 y para el turno tarde S/25.40. Además, si un obrero trabajó durante una semana más de 40 horas, se le pagará S/.12.00 por cada hora adicional a las 40. Variables a utilizar en el pseudocódigo n cantidad de obreros hor horas trabajadas dia cada dia de la semana totHor total de horas que trabaja un obrero durante una semana con contador de obreros tur turno en el que trabaja un obrero pagoDia pago del día pagoSem pago de la semana pagoExtra pago extra Inicio // Definir e inicializar variables entero: n, hor, dia, con 0, totHor caracter: tur real: pagoDia, pagoSem, pagoExtra // Leer Datos Escribir (“Ingresar cantidad de obreros:”) Leer (n) Repetir pagoSem 0 totHor 0 Desde (dia 1) hasta (dia <= 5) con incremento 1 hacer Escribir (“Ingresar turno (M)añana, (T)arde”) Leer (tur) Escribir (“Ingresar cantidad de horas trabajadas”) Leer (hor) Según sea (tur) hacer „M‟: pagoDia hor * 23.00 „T‟ : pagoDia hor * 25.40 Fin_según pagoSem pagoSem + pagoDia totHor totHor + hor Fin_desde Si (totHor >40) entonces pagoExtra (hor – 40) * 12.00 Fin_si pagoSem pagoSem + pagoExtra Escribir (“El pago semanal es ”, pagoSem) con con + 1 Hasta_que (con = n) Fin 4.5.2. Bucles infinitos Son bucles que nunca terminan (no tienen fin). Pueden implementarse fácilmente utilizando las sentencias Mientras o Repetir – Hasta_que. Generalmente son condiciones no deseadas y el programador las utiliza según su criterio, colocando en su interior una instrucción que fuerza la terminación del bucle, para nuestro caso se utiliza la palabra Salir (break). Para este caso, reemplazamos en la expresión_lógica por verdadero (true) Mientras (verdadero) Hacer instrucciones Si (condición) entonces Acción Salir //termina el bucle infinito Fin_si Acción Fin_Mientras Repetir instrucciones Si (condición) entonces Acción Salir //termina el bucle infinito Fin_si Acción Hasta_que (verdadero) Ejemplo 49 Pseudocódigo que genera una secuencia de números utilizando el siguiente algoritmo: Empezamos por cualquier número entero positivo Si es par, Lo dividimos por dos, si es impar lo multiplicamos por tres y le sumamos 1 Repetimos el segundo paso con el número resultante, la secuencia se puede repetir indefinidamente, detenerlo hasta que aparezca el primer número 1 Por ejemplo si ingresemos el número 20, la secuencia generada seria: 10 5 16 8 4 2 1 4 2 1…. Observar que la serie comienza a repetir la serie 4 2 1 indefinidamente, el algoritmo debe de leer el número inicial, imprimir el número de valores encontrados hasta la aparición de un valor 1 en la secuencia. Variables a utilizar en el pseudocódigo nro cada número de la serie Inicio // Definir variable entero: nro Fin // Leer Datos Escribir (“Ingresar número que inicia la serie:”) Leer (nro) Mientras (verdadero) hacer // bucle infinito Si (nro Mod 2 = 0) nro nro / 2 Sino nro 3*nro + 1 Fin_si Escribir (nro) Si (nro = 1) entonces // cuando nro es igual a 1 Salir // termina el bucle infinito Fin_si Fin_mientras Ejemplo 50 Pseudocódigo que muestra el mensaje “BUCLE INFINITO” infinitas veces. Variables a utilizar en el pseudocódigo No es necesario el uso de ninguna variable Inicio Mientras (verdadero) Escribir (“BUCLE INFINITO”) Fin_mientras Fin Ejemplo 51 Pseudocódigo que imprima el mensaje es par o impar, en caso se ingrese un número entre 3 y 13, sino está en el intervalo, imprimir el mensaje “fuera de rango”. Variables a utilizar en el pseudocódigo nro número que se evalúa como par o impar Inicio // Definir e inicializar variable lógico: r falso Repetir Escribir (“Ingresar número”) Leer (nro) Si (nro >= 3 and nro <= 13) entonces Si ( nro Mod 2 = 0 ) entonces Escribir (“Es par”) // es par Sino Escribir (“Es impar”) // es impar Fin_si r verdadero // r se hace verdadero para que // salga del bucle infinito Sino Escribir (“No esta entre 3 y 13”) r falso // r se hace falso para que siga en el bucle infinito Fin_si Hasta_que (r) Fin 4.6.Ejercicios propuestos 1. Determinar el factorial de los N primero números pares Número Factorial 2 2 4 24 6 720 8 40320 2. Escribir un pseudocódigo muestre todos los números de tres cifras tales que la suma de los cuadrados de sus dígitos sea igual al cociente de la división entera del número entre 3. 3. Los números amigos son aquellos en los que la suma de los divisores de uno es el otro. 220 = 1+2+4+5+10+11+20+22+44+55+110 = 284 284 = 1+2+4+71+142 = 220 Este par de números amigos era conocido por los griegos (220, 284). El siguiente par de números amigos fue descubierto en el siglo XIII y redescubierto por Fermat en 1636 (los números 17296 y 18416). Descartes descubrió el siguiente par: 9363584 y 9437056. Todos estos grandes matemáticos se saltaron el par 1184-1210 que fue descubierto por un niño italiano de 16 años Niccolò Paganini. Elaborar un pseudocódigo que encuentre todos estos números amigos. 4. El horóscopo de la alquimia, basado en la numerología y las correspondencias planetarias, te permitirá conocer qué poderosas energías, llegadas del cielo en forma de metales, rigen tu vida. Las civilizaciones antiguas consideraban los metales como la carne de los dioses, y eran conscientes de sus poderes mágicos. Crearon el horóscopo de los metales, gracias al cuál no sólo conocerás qué metal te corresponde por tu fecha de nacimiento, sino también el que te rige cada año. Ponerte joyas con el metal que te pertenezca o llevarlo simplemente en el bolsillo aumentará los dones que te concede éste y te aportará protección y suerte. Elaborar un pseudocódigo que averigüe a qué metal pertenece una persona, para esto sume los números de tu fecha de nacimiento y a continuación reducirlos a un sólo dígito. Una vez que tengas el número busca en la tabla siguiente el metal correspondiente. Por ejemplo, alguien nacido el 12 de marzo de 1973 estaría bajo la influencia de: Metal de nacimiento: 1+2+3+1+9+7+3= 26 (2+6) = 8= Níquel Número Metal Virtudes 1 Plata Seductores y volubles 2 Hierro Dinámicos y combativos 3 Mercurio Locuaces y simpáticos 4 Zinc Impulsivos y serviciales 5 Estaño Inconstantes y sociables 6 Plomo Pesimistas y tímidos 7 Platino Intelectuales y apasionados 8 Niquel Vagabundos y poetas 9 Oro Altruistas y encantadores 0 Cobre Afectuosos y detallistas Sólo en el caso de que la suma resultante sea 10, 20, 30, 40, 50, 60, 70, 80 ó 90, no se reducirá y se tomará el 0 como número y el Cobre como metal correspondiente. 5. Escribir un pseudocódigo que encuentre el siguiente primo dado un número ingresado por el usuario. Por ejemplo: si el número ingresado es 20, el siguiente primo seria 23. 6. Escribir un pseudocódigo que lea un número y lo despliegue como sumas sucesivas de números. Por ejemplo: numero = 15245 10000 + 5000 + 200 + 40 + 5 7. Escribir un pseudocódigo para buscar un número cuyo cuadrado sea igual o más cercano a un número ingresado. Por ejemplo: Si se ingresa 14 el cuadrado más cercano es 3. Si se ingresa 16 el cuadrado más cercano es 4. 8. Escribir un pseudocódigo que lea 100 números positivos de forma aleatoria y consecutiva, calcular y mostrar el mayor número por cada 10 números ingresados. Además mostrar el mayor número ingresado y diga en que decena se ingresó. 9. Construir un algoritmo que permita ingresar números enteros, calcular la suma de los dígitos pares y la suma de sus dígitos impares de cada número positivo ingresado. El algoritmo termina cuando se ingresa el cero. 10. Se registran las N aulas de la sección secundaria de un centro educativo, y por cada sección se registran los promedios finales de sus M alumnos. Elaborar un algoritmo que muestre el nombre del mejor alumno de cada aula y el mejor alumno de toda la sección secundaria, así mismo calcular el promedio general del aula. 11. Un número perfecto es aquel cuya suma de sus divisores excluyendo el mismo número da como resultado el número. Por ejemplo 6 es un número perfecto, porque 1 + 2 + 3 = 6. Se pide elaborar un algoritmo que muestre los 5 primeros números perfectos. 12. Los números Amstrong o cubos perfectos, son aquellos que sumados sus dígitos al cubo nos da el mismo número. Por ejemplo 153 es un número Amstrong pues 13 + 53 + 33 = 153. Elaborar un algoritmo que encuentre los 3 primeros números Amstrong. 13. Un centro comercial ofrece tres tipos de productos, como se muestra en el siguiente cuadro. Producto Precio Descuento (%) A 15.20 B 12.47 C 10.50 El centro comercial vende dichos productos a N número de clientes. Un cliente cualquiera puede comprar M productos de cada tipo. Se pide elaborar un algoritmo que calcule el total que paga cada cliente y el total que recauda el centro comercial. 14. Escribir un pseudocódigo en el que se ingrese un número entre el 1 y el 9 (se pedirá el ingreso de dicho número hasta que cumpla la condición), una vez ingresado el número correcto mostrar la tabla de multiplicar de ese número, después de mostrar la tabla, el pseudocódigo debe preguntar: ¿Desea ingresar otro número? S/N, si la respuesta es S, se volverá a ingresar otro número y si la respuesta es N finalizará el pesudocódigo. Las tablas de multiplicar debe tener el siguiente formato: 5X1=5 5 X 2 = 10 … 5 X 9 = 45 15. Un almacén se encuentra de aniversario y ha programado una serie de ofertas con la finalidad de brindar facilidades a sus clientes y al a vez de incrementar sus ventas. Estas ofertas se basan específicamente en un porcentaje de descuento sobre el total de compra el cual varía de acuerdo al monto: Por un monto mayor o igual a $500 se hará un descuento del 30% Por un monto menor de $500 pero mayor o igual a 200 se hará un descuento del 20% Por un monto menor de $200 pero mayor o igual a 100 se hará un descuento del 10% Se pide elaborar un algoritmo que calcule el monto total que recauda el almacén, así como, el monto final que paga un cliente. El algoritmo termina cuando se ingresa una compra negativa. 16. El un proceso repetitivo se ingresa números enteros, se pide elaborar un algoritmo que calcule el promedio de números negativos. El pseudocódigo termina cuando se ingresa el número cero. 17. Hacer un algoritmo que lea N consumos de un restaurante. Si el consumo ingresado excede los 70 soles, el descuento será de 5%. Se pide mostrar el monto que paga cada cliente. 18. Construir un algoritmo que muestre el mayor y el menor dígito de un número ingresado. 19. Determinar la suma de los términos que ocupan las posiciones pares y la suma de los términos que ocupan las posiciones impares, de la siguiente serie, considerando los n primeros términos: 1/3 + 2/5 + 3/7 + 4/9 + 5/11 + ... 20. Un almacén se encuentra de aniversario y ha programado una serie de ofertas. Estas ofertas se basan específicamente en un porcentaje de descuento sobre el total de compra, de esta manera: Por una compra mayor o igual a S/.350.00 se hará un descuento del 30%. Por una compra menor de S/.350.00 pero mayor o igual a S/.200.00 se hará un descuento del 20%. Por un monto menor de S/.200.00 pero mayor o igual a S/.100.00 se hará un descuento del 10%. Se pide elaborar un algoritmo que calcule el monto total que recauda el almacén por las 25 primeras compras realizadas, así como, el monto final que paga cada cliente. 21. Una compañía de seguros está preparando un estudio concerniente de todos sus asegurados. Por cada asegurado se registra los siguientes datos: año de nacimiento y sexo („M‟ o „F‟), se pide calcular: El porcentaje de asegurados menores de 30 años El porcentaje de asegurados de sexo femenino y masculino La mayor y la menor edad de los asegurados El registro de asegurados finaliza cuando se ingresa un año negativo. 22. El Ministerio de transportes desea saber, de los N autos que entran a nuestro país, cuántos entran con calcomanía de cada color. Conociendo el último dígito de la placa de cada automóvil se puede determinar el color de la calcomanía, como se muestra en el siguiente cuadro: Dígito Color 1o2 amarilla 3o4 negro rojo 5o6 7o8 verde 9o0 azul 23. Ingresar números enteros y mostrar la cantidad de dígitos que tiene cada número ingresado. El pseudocódigo termina cuando se ingresa el número 100. 24. Construir un pseudocódigo que calcule y muestre el sueldo de los N empleados de un empresa que trabajan por horas, la tarifa por cada hora trabajada es única (igual) para todos los empleados, asimismo, calcular la cantidad de empleados que reciben un sueldo menor a S/.500.00, la cantidad de empleados que reciben un sueldo entre S/.500.00 y S/.1200.00 y la cantidad de empleados que reciben un sueldo mayor a S/.1200.00. 25. La oficina de bienestar social del ministerio de vivienda, realiza un muestreo en 10 departamentos de nuestro país, de esta manera por cada departamento se registran los datos de N personas, como edades y pesos. Se pide elaborar un algoritmo que determine la cantidad de los niños, jóvenes, adultos y adultos mayores registrados en cada departamento, el mayor y el menor peso en cada departamento. Se sabe que: De 0 a 12 años, es niño De 13 a 29 años, es joven De 30 a 59 años, es adulto De 60 a más años, es adulto mayor.