CONTENIDO 8. Solución algorítmica de algunos problemas 9. Representación de la solución de problemas mediante diagramas. 10. Problemas resueltos por diagrama y seudocodigo 10.1 Estudio de las estructuras de seudocodigo utilizadas. 10.2 Solución de problemas por diagrama y seudocodigo. 10.3 Solución de problemas con subprogramas (procedimientos y funciones). 11. Problemas propuestos. TABLA DE PROBLEMAS 1. 2. 3. 4. 5. 6. 7. 8. 9. 12. 1:3. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Algoritmo para hacer llamada telefónica. Algoritmo para determinar el más alto.. Tabla de multiplicar del 5 con 10 productos.. Hacer las tablas desde 1 hasta N. Dado un número hacer 5 tablas de multiplicar. Determinar la calificación más alta. Determinar cuales números son primos. Elección de un candidato. Hallar suma parcial y total de N números. Diagrama para escoger la mayor estatura. Diagrama para hacer una tabla de multiplicar. Diagrama para generar N tablas de multiplicar.. Elaboración de tablas múltiplo de un número N. Diagrama para hallar números primos y no primos. Hallar la mejor nota de un conjunto de notas. Establecer el ganador entre tres candidatos. Diagrama para obtención de sumas parciales. Diagrama para hallar el mayor de 6 números. Determinar el mayor de N números.. Dos formas de obtener la suma de los números naturales Diagrama para establecer un tipo de anormalidad física para N pacientes. 24. 25. Determinar la suma de 100 números. Diagrama para determinar números positivos, en negativos y ceros en una lista de números. Generación de vectores y determinación del máximo y mínimo elemento Generación de vectores para un determinado numero de elementos pares e impares. Construcción de la matriz identidad de orden N. Transpuesta de una matriz Suma de dos matrices. Producto de dos matrices. Generación de una matriz especial. Matriz concéntrica de elementos repetidos. Diagrama y seudocodigo para hallar el seno de un ángulo por la serie de Taylor. Diagrama y seudocodigo para obtener las raíces de la ecuación de segundo grado. Diagrama y seudocodigo para hallar la media y la varianza de un conjunto de observaciones. Hallar el producto de una matriz de 5*4, por una matriz de orden 4*3 Seudocodigo para la multiplicación de matrices Diagrama y seudocodigo para determinar la eficiencia dentro de un grupo de empleados.. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 16 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. Seudocodigo para generar una lista de ahorradores por año de afiliación Seudocodigo para generar un listado de suma y máximo dato, de un conjunto de datos. Seudocodigo que genera e imprime la serie de Fibonacci Seudocodigo para buscar un elemento y su posición dentro de un vector de datos. Seudocodigo para intercambiar los elementos de un vector. Seudocodigo para calcular cuantas veces se encuentra repetido cada número del 1 al 99. Segunda forma de solución del problema 45. Seudocodigo para analizar una encuesta de ingresos por profesión. Seudoc6digo para generar una matriz de datos dispuestos en forma de espiral. Seudocodigo para generar una matriz cuadrada de orden N. La suma de las filas, columnas y diagonales debe dar el mismo resultado. Generación de matrices con subprogramas. Procedimiento para separar elementos por vectores. Función para calcular el factorial de un número. Procedimiento para buscar elementos primos en una matriz Seudocodigo de programa principal de matrices. Seudocodigo procedimiento hacer vectores. Seudocodigo procedimiento números primos. Formas de seudocód3go para hallar el factorial. 51. Programa para facturación del servicio de gas. Diagrama del programa principal de facturación. Procedimiento para, liquidar el servicio de gas. Procedimiento para facturar cada predio. Función para calcular el total recaudado por gas. Seudocodigo para facturación del servicio de gas. Seudocodigo del procedimiento liquidar. Seudocodigo del procedimiento que genera facturas. Seudocodigo para cálculo del valor recaudado. * Problemas propuestos. 17 8. SOLUCION ALGORITMICA DE ALGUNOS PROBLEMAS En esta sección, se enuncian problemas y se resuelven por algoritmos. En posteriores capitulas se resuelven problemas con diagrama y seudocódigo. Los problemas propuestos, permiten conocer la forma de solucionar ejercicios generales con algoritmos convencionales, tales como: * Llamada por teléfono * Casos de impresión de tablas de multiplicar. * Problemas típicos de conteo de datos. * Búsqueda de números que tengan ciertas características. * Problemas de ecuaciones. * Problemas para solución con vectores. * Operaciones con matrices. * Obtención de matrices especiales. * Problemas con funciones y procedimientos. * Problemas generales. 18 PROBLEMA NO 1 Haga un algoritmo para efectuar una llamada por teléfono. 1. Hay teléfono? si 2. Es público? si Introducir moneda No Continué 3. Hay tono? si 4. Marcar teléfono 5. Hay respuesta? Si Hablar No 6. Colgar 7. Ir a 2. No 8. Colgar 9. Ir a 2. No Continué 10. Terminar. PROBLEMA NO 2 Haga un algoritmo para determinar de dos estudiantes, cual es el más alto. 1. Conocer estatura 1 y nombre 1 2. Conocer estatura 2 y nombre 2 3. Es estatura 1 > estatura 2? si Escribir ‘El más alto es ‘, nombre 1 No Escribir ‘El más alto es , nombre 2 4. Terminar. 19 PROBLEMA No 3 Haga un algoritmo para calcular e imprimir la tabla de multiplicar del 5 con 10 productos. 1. Hacer L = O 2. Hacer P= L * 5 3. Escribir L, ‘ * 5 = ‘, P 4. Hacer L = L + 1 5. Es 1 = 10? Si Ir a 6 No ir a 2 6. Terminar. (para iniciar productos) (cada producto de la tabla) (para otro producto) PROBLEMA NO. 4 Dado un número N mayor que 1, hacer las tablas de multiplicar desde 1 hasta el número N; cada tabla con 20 productos. 1. Conocer el número N 2. Es N > 1 Si 3. Hacer T = 1 (contador de tabla) 4. Hacer M = 1 (contador de multiplicador) 5. Hacer P = M * T (haciendo cada tabla) 6. Escribir M,’ *’,T,’ = ’,P 7. Es M > 20? Si Ir a 10 No 8. Hacer M = M + 1 9. Ir a 5 (continuar la tabla T) 10. Es T > N? (saber si faltan tablas) Si Ir a 13 (porque hizo las N tablas) No 11. Hacer T = T + 1 12. Ir a 4 (para seguir haciendo tablas) No Continué 13. Terminar. 20 PROBLEMA No. 5 A partir de un número N, imprimir 5 tablas de multiplicar cada una con 20 productos, siendo el multiplicador N de cada tabla, el doble del multiplicador anterior. 1. Conocer 2. Hacer 3. Hacer 4. Hacer 5. Escribir 6. Hacer 7. Es si N CT = O L=O P=L*N L,’ * ‘,N,’ = ’,P L=L+1 L = 20? 8. Hacer CT = CT + 1 9. Es CT = 5? si Ir a 12 No 10. Hacer N = 2*N 11. Ir a 3 (contador de tablas) (L = multiplicando) (P = producto) (contro1ar 20 productos) (Para hacer 5 tablas) (Nuevo multiplicador) (hacer nueva tabla) No Ir a 4 12. Terminar. PROBLEMA No 6 Buscar En una lista de notas, cual es la nota más alta y decir cuantas hay. 1. Hacer 2. Hacer 3. Leer nota 4. Es si CN = O MAYOR = O X X > MAYOR? (contador de notas) (suposición para comparación) (para hallar la nota mas alta) MAYOR = X No Continué 5. CN = CN + 1 (contar una nota mas) 6. Hay más notas? si Ir a 3 (a conocer otra nota) No 7. Escribir ‘Hay ‘, CN ,‘ notas’ 8. Escribir ‘La nota más alta es ‘JIAYOR 9. Terminar. 21 PROBLEMA No 7 Dada una lista de N números, decir cuales son primos. 1. Conocer N 2. Hacer CC = O 3. Conocer número X 4. Hacer CC = CC + 1 5. Hacer DF=X - 1 b. Hacer D = 2 7. Hacer C = X / D 8. Es C = C * D ? Si (número de datos) (contador de números conocidos) (un número de los N números) (contar otro número) (divisor final) (divisor) (parte entera del cociente) 9. Escribir X,’ no es primo’ 10. Es CC = N? Si Ir a 16 No Ir a 3 No 11. Es D = DF? (Continuar o no dividiendo el número X) Si 12. Escribir X,’ es primo’ 13. Es CC = N? Si Ir a 16 No Ir a 3 No 14. Hacer D = D+1 (para dividir nuevamente el numero X) 15. Ir a 7 22 PROBLEMA No 8 Para elegir el presidente de un comité se presentaron 3 candidatos; dado que cada votante puede votar por uno de ellos, haga un algoritmo para decir quien fue el ganador. Los códigos de los candidatos son 100, 200 y 300 respectivamente. La votación termina al leerse un voto con código 999. 1. Hacer N=O (número de electores) 2. Hacer C100 = O (contador votos código 100) 3. Hacer C200 = O (contador votos código 200). 4. Hacer C300 = O (contador votos código 300) 5. Leer CC (código del candidato, por el que vota una persona) 6. Es CC <> 999 Si 7. Hacer N = N + 1 (otro voto más) 8. Es CC = 100? Si 9. Hacer C100 = C100 + 1 10. Ir a 5 No 11. Es CC = 200? Si 12. Hacer C200 = C200 + 1 13. Ir a 5 No 14. Hacer C300 = C300 + 1 15. Ir a 5 (a leer otro voto) No Continué 16. Es C100 > C200 y C100 > C300? Si 17. Escribir ‘Ganador; leer candidato’ 18. Escribir ‘Con ‘, C100, ‘ votos’ Ir a 24 No 19. Es C200 > C100 y C200 > C300? Si 20. Escribir ‘Ganador; 2o candidato’ 21. Escribir ‘Con ‘, C200, ‘ votos’ Ir a 24 No 22. Escribir Ganador: 3er candidato’ 23. Escribir ‘Con ‘,C300,’ votos’ 24. Escribir ‘Votaron ‘, N, ‘ personas 25. Terminar. 23 PROBLEMA No. 9 Dados N números, hallar la suma total de los N números y calcular la suma parcial cada 4 números. 1. Hacer CN = O 2. Hacer C4 = O 3. Hacer ST = O 4. Hacer SP = O 5. Leer N 6. Leer X (contador de números) (contador parcial de 4 números) (suma total de los N números) (suma parcial de cada 4 números) (total de números) (X es un número de los N números) 7. Nacer CN = CN + 1 8. Hacer C4 = C4 + 1 9. Hacer ST = ST + X 10. Hacer SP = SP + X 11. Es CN = N? Si 12. Escribir ‘Suma parcial, SP 13. Escribir ‘Suma total ‘, ST Ir a 19 No 14. Es C4 = 4? Si 15. Escribir ‘Suma parcial ‘, SP 16. Hacer SP = O 17. Hacer C4 = O 18. Ir a 6 No Ir a 6 19. Terminar 24 PROBLEMA No 10 Dados N números obtener el mayor. 1. Leer N 2. Nacer CN = O 3. Hacer MAYOR = O 4. Leer X 5. Hacer CN = CN + 1 6. Es X > MAYOR? (total de números) (contador de números) (suposición inicial) (c/u de los N números) (escoger el mayor) Si 7. Hacer MAYOR = X (nuevo mayor) 8. Es CN = N? Si 9. Escribir ‘Mayor es ‘, MAYOR Ir a 11 No 10. Ir a 4 11. Terminar. 25 9. PRESENTACION DE PROBLEMAS MEDIANTE DIAGRAMAS SOLUCION DE PROBLEMAS A TRAVES DE DIAGRAMAS En las paginas siguientes se solucionan problemas utilizando diagramas algunos ya se solucionaron con algoritmos, pudiendo establecer el lector la relación que existe entre solución por algoritmo convencional y diagrama. Las estructuras que componen las graficas, se conforman de acuerdo a la regla fundamental de solución de problemas E-P-S (entrada, Proceso, Salida). 26 PROBLEMA 11 Hacer un diagrama para efectuar una llamada por teléfono (algoritmo 1). 27 Problema No 12 Hacer un diagrama que determine de dos estudiantes cual es el mas alto. 28 PROBLEMA No 13 Haga un diagrama para calcular e imprimir la tabla de multiplicar del 5, con 10 productos (algoritmo 3). 29 PROBLEMA No 14 Dado un Numero N Mayor que 1, construya un diagrama que haga las tablas de multip1icar desde 1 hasta el numero N, con 20 productos cada tabla (Algoritmo 4). 30 PROBLEMA No 15 Dado un numero N, obtener la tabla N con 20 productos y 5 tablas de números múltiplos del numero N dado (algoritmo 5). 31 PROBLEMA No 16 Hacer un diagrama que determine en un conjunto de números, cuales son primos (Algoritmo 6). 32 PROBLEMA No 17 Dado un conjunto de notas, determinar cual es la mas alta y dar la cantidad total de notas. Terminar cuando llegue la nota -10 (algoritmo7) 33 PROBLEMA No 18 Diagrama para decir quien gano las elecciones si había 3 candidatos, y cada persona voto por Uno de ellos. Contar el número de personas que votaron. Los códigos de cada candidato son 100, 260 y 300, La votación termina con el código 999 (Algoritmo 8). 34 PROBLEMA NO 19 Dados N números calcular sumas parciales cada 4 números, además calcular la suma total (algoritmo 9). 35 PROBLEMA No 20 Hacer un diagrama para hallar el mayor entre 6 números NOTA: ejercicio para practicar decisiones lógicas 36 PROBLEMA No 21 Hacer un diagrama para hallar el mayor de N números (A1goritmo 10). 37 PROBLENA No 22 Diagrama para obtener la suma de los 100 primeros números naturales 38 Diagrama para obtener la suma de los N primeros números primos naturales 39 PROBLEMA No 23 Diagrama para diagnostico de otitis dengue y gripa. Para N pacientes 40 PROBLEMA No 24 Diagrama para calcular la suma de 100 números. A1macenar los números en un vector .. 41 PROBLEMA NO 25 Dados N números, por Medio de un diagrama diga cuantos ceros hay, cuantos números son positivos y cuantos números son negativos. 42 PROBLEMA NO 26 Diagrama que toma N datos, guardando los positivos en un vector, los números negativos se guardan en otro vector; también se hallan las sumas de los positivos y negativos separadamente, buscándose además el mayor y el Menor de los números. 43 PROBLEMA No 27 Diagrama que toma N datos, con los cuales forma 2 vectores cada uno de 100 datos. El primero con los datos pares y el segundo con los impares. Si los N datos no alcanzan para llenar cada vector de 100 datos complete el vector de pares con el numero 2, y el de impares con el numero 1. Llame I el vector de Impares y P el vector de Pares. Nota: primero se llena el vector de pares con 2 y el de impares con 1. Luego reemplaza la respectiva posición con el par o impar leído. 44 PROBLEMA No 28 Haga un diagrama que construya una matriz identidad de orden N, imprímala. 45 PROBLEMA No 29 Hacer un diagrama para hallar la transpuesta de una matriz, Por ejemplo para una Matriz de 3*3. 46 PROBLEMA No 30 Hacer un diagrama para calcular la Matriz suma, de dos Matrices. Recuerde la suma de Matrices se efectúa entre Matrices de igual orden. 47 PROBLEMA No 31 Diagrama para hallar el producto de dos Matrices. Es condición indispensable que AN*M * BX*L = CN*L. Siendo K = M. 48 PROBLEMA No 32 Haga un diagrama que construya la siguiente matriz: 49 PROBLEMA No 33 Hacer un diagrama que construya la siguiente Matriz: 50 10 PROBLEMAS RESUELTOS POR DIAGRAMA Y SEUDÓCODIGO Se describen lo elementos que constituyen la solución de problemas a través de seudocodigo. El seudocodigo, es un código de instrucciones en español muy cercano a la sintaxis de las instrucciones de los lenguajes de programación PASCAL y DBASE. Permite solucionar problemas de manera estructurada, siguiendo una secuencia descendente de los pasos lógicos que resuelven un problema. En la solución por seudocodigo, no se utiliza la transferencia incondicional vaya a; por ejemplo no se usa ir al paso 3. Se explica el marco teórico del seudocodigo y posteriormente se resuelven problemas por diagrama y seudocodigo. 51 10.1 ESTRUCTURAS DE SEUDOCODIGO UTILIZADAS La estructura de seudocodigo utilizada es: ---------------------------------------------------------------------------------------------------------INICIALIZACION O DEFINICION ---------------------------------------------------------------------------------------------------------CUERPO Donde: Inicialización o definición, se utiliza para: Reservar espacio de memoria, iniciar valores de variables; leer valores iniciales. Cuerpo se utiliza para la secuencia de instrucciones en seudocodigo que determinan la solución del problema. En la sección de inicialización se utilizan los siguientes enunciados: Para inicializar haga var = valor donde var es la variable utilizada valor es la cantidad asignada Para definición de vectores defina vector nombre de rango donde nombre es el nombre del vector rango es el tamaño del vector Para definición de matrices Defina matriz nombre de rango donde nombre es el nombre de la matriz rango es el tamaño de la matriz 52 Para lectura de valores: Lea var donde var es un nombre de variable En la sección de cuerpo se tienen las siguientes estructuras: Para definición del cuerpo: (1) empiece …… termine ……… empiece abre un conjunto de instrucciones a ejecutar; esta sentencia debe estar presente al iniciar el cuerpo. puntos indican el repertorio de instrucciones de seudocodigo utilizadas. termine indica que el conjunto de instrucciones ha agotado. (1) empiece se puede reemplazar por inicie y el efecto es el mismo. 53 REPERTORIO DE INSTRUCCIONES Las instrucciones se clasifican según su función en: Instrucciones de secuencia instrucciones de control instrucciones de repetición Instrucciones de secuencia: i) lectura: lea var ji)escritura : escriba var Iii) asignación: var_1 = var_2 operador var_3 var, var_1, vr_2, var_3 son variables operador es un operador aritmético +,—,*,/ Instrucciones de control i) si condición entonces inicie …… …… Termine d. o. m. inicie … …. termine 54 ii) En caso de var haga 1: inicie ……. termine 2 inicie ……… termine ……….. (2) d. o. m. inicie ……. termine fin Instrucciones de repetición : i) repita ….. hasta condición Mínimo ejecuta las instrucciones una vez. Sale del ciclo al cumplirse la condición. No requiere las palabras inicie termine ii) Mientras condición haga inicie …………. termine (2) Si el d.o.m. no se usa, la secuencia también finaliza con fin. 55 iii) Para var = val_inicial hasta val_final haga inicie ………. termine donde var : variable val_inicial : valor inicial de var val_final : valor final de var Ejercicios En la siguiente sección, se utiliza la sintaxis descrita del seudocódigo, en la solución de problemas. 56 10.2 SOLUCION DE PROBLEMAS POR DIAGRAMA Y SEUDOCODIGO Se desarrollan problemas mediante diagrama y su equivalencia en seudocodigo según las estructuras explicadas. Se busca que el lector trabaje con la codificación en seudocodigo, haciendo más fácil el aprendizaje de la programación de computadores. El análisis de cada solución debe hacerse por separado. Observar el estudio del diagrama, y posteriormente analizar la solución por seudocodigo. Finalmente establecer la relación entre la estructura del diagrama y su codificación en seudocodigo. 57 PROBLEMA No 34 Hacer un diagrama y seudocodigo para calcular el seno de X por series de Tayior: la serie de Taylor es infinita, calcu1ar 10 términos de la serie Con lo cual se obtiene una buena aproximación del seno(x). 58 PROBLEMA No 35 Hacer un diagrama y seudocodigo para la obtención de las raíces de la ecuación cuadrática. Tome los valores A B, C, como los coeficientes de la ecuación: AX2 + BX + C = 0 59 PROBLEMA No 36 Calculo de la varianza de un conjunto de N observaciones (ver el problema propuesto No 7, del capitulo 11). 60 PROBLEMA No 37 MULTIPLICACION DE MATRICES Este diagrama es especifico para multiplicar Matrices de dimensión 5*4 y 4*3 siendo el producto de dimensión 5*3 (Vea problema propuesto No12 del capitulo 11). 61 PROBLEMA No 38 Solución por seudocodigo del problema anterior (Multiplicación de Matrices) SEUDCICODIGO M=5 N=4 P=3 DEFINA MATRIZ A DE M, N MATRIZ B DE N, P MATRIZ C DE M, P EMIPIECE PARA I = 1 HASTA M HAGA INICIE PARA J = 1 HASTA N HAGA LEA A(I, J) TERMINE PARA I = 1 HASTA N HAGA INICIE PARA J = 1 HASTA P HAGA LEA B(I, J) TERMINE PARA I = 1 HASTA M HAGA INICIE PARA K = 1 HASTA P HAGA INICIE C( I, K) = 0 PARA J = 1 HASTA N HAGA C( I, K) = C(J, K) + A( I, J) * B(J, K) TERMINE TERMINE. PARA I = 1 HASTA M HAGA INICIE PARA J = 1 HASTA P HAGA ESCRIBA C(I, J) TERMINE TERMINE 62 PROBLEMA No 39 Hacer un diagrama y seudocodigo para solucionar el calculo de eficiencia de los empleados, según un conjunto de criterios eva1uativos considerados de antemano (ver problema propuesto No 17, capitulo 11). 63 PROBLEMA No. 40 Una entidad crediticia necesita una lista de sus ahorradores que a 31/12/89 sean menores de 55 años y tengan 10 o más años de afiliación. Se dispone de una lista de N ahorradores, la cual contiene el código de cada socio y los siguientes datos: Año de nacimiento Año de afiliación Con las estructuras de seudocodigo, obtenga un listado de socios (lista de códigos), que cumplen la condición. El seudocodigo correspondiente es: empiece lea N para i= 1 hasta N haga inicie lea código, nacimiento, afiliación años_afiljado = 1989 — afiliación si edad < 55 entonces empiece si año_afiliado > 10 entonces escriba código termine termine termine 64 PROBLEMA No. 41 Se tiene el siguiente conjunte de datos totalmente correcto: S1 N S2 N S3 N ... N SK T. Donde: Sj, j=1,2,..k es una lista no vacía de enteros positivos. N es un separador de listas y es un entero negativo mayor que -1000. T es un terminador entero menor que -10000. Elaborar la solución de seudocodigo para: • Leer los datos y para cada lista Sj obtener e imprimir la suma de los datos y el valor máximo dado en cada lista. • Para cada lista el mensaje a imprimir debe contener: Lista No ___________; Suma________________ ; Máximo________________ El seudocodigo queda de la siguiente manera: L= 1 empiece repita suma = O mayor = O repita lea S suma = suma + S si S > mayor entonces mayor = S hasta que S < O suma = suma - S escriba ‘ lista ‘, L, ‘ suma ‘, suma escriba mayor ‘, mayor L = L+ 1 hasta que S < -10000 termine 65 PROBLEMA No 42 Mediante seudocodigo genere e imprima una lista de la serie de Fibonacci. Nota: la serie de Fibonacci es infinita. Halle términos de la serie hasta que el nuevo número generado sea mayor que un número dado N. La serie de Fibonacci es 0, l, 1, 2, 3, 5, 8, l3, 2l, empieza en O y 1. Seudocodigo: leer N empiece AO = O Al = 1 escribir AO escribir Al nuevo = AO + Al mientras nuevo < N haga empiece escriba nuevo AO = Al Al = nuevo nuevo = AO + Al termine termine 66 PROBLEMA No 43 Escriba un programa en seudocodigo, que busque un dato cualquiera X, dentro de un vector de 100 elementos e indique la posición donde lo encontró. Defina vector A de 100 elementos Empiece haga LC = O para I = 1 hasta 100 haga empiece lea A(I) escriba A(l) termine lea X para I = 1 hasta 100 haga empiece si x = A(I) entonces empiece LC = 1 P=I I = 100 termine termine si LC = 1 entonces escriba ‘X esta en la posición’, P escriba ‘del vector A’ d.o.m escriba ‘X no se encuentra en A’ termine (indica que X se encontró) (posición donde esta X) (para terminar la búsqueda) 67 PROBLEMA No 44 Programa que coloca el último elemento de un vector de 25 enteros en el primer lugar, el penúltimo en el segundo y así sucesivamente, imprima el resultado al final. Defina vector A de 25 elementos Defina vector B de 25 elementos Empiece para i = 1 hasta 25 haga empiece lea N A(i) = N termine j = 25 para i = 1 hasta 25 haga empiece B( j ) = A( i ) j= j - 1 termine para i = 1 hasta 25 haga empiece A( i ) = B( i ) escriba A( i ) termine termine 68 PROBLEMA No 45 Dados N números de hasta 2 dígitos, escriba un programa en seudocodigo que determine de esos N números, cuantas veces está el número 1, el 2, el 3, ..., el 98 y el 99. Además determine cual número está más veces. Seudocodigo: Defina vector A de 1000 elementos Empiece haga mayor = O lea N para i = 1 hasta N haga empiece lea A(i) escriba A(i) termine para i = 1 hasta 99 haga empiece con = 0 para j = 1 hasta N haga empiece if A(j) = i entonces con = con + 1 termine escriba (i, está ‘,con ,‘ veces’) si con > mayor entonces empiece mayor = con lugar = i termine termine escriba (‘el número más frecuente es ‘, lugar) escriba (‘está ‘, mayor ,‘ veces7) termine 69 PROBLEMA No. 46 Dados N números de hasta 2 dígitos, escriba un programa en seudocodigo que determine de esos N números, cuantas veces está el número 1, el 2, el 3, .,., el 98 y el 99.. Además determine cual número está más veces. El problema anterior puede ser resuelto de la siguiente manera: Defina vector C de 99 elementos * C vector contador de números 1,2,3,4 ,,,,99 Empiece para i = 1 hasta 99 haga C(i) = O lea N para i =1 hasta N haga empiece lea X C(X) = CCX) + 1 * contador automático de datos termine mayor = O para i = 1 hasta 99 haga empiece si C(i) > mayor entonces empiece mayor = C(i) p=i termine termine escriba (‘el número que más veces está es ‘, p ) termine 70 PROBLEMA No 47 Escriba un programa en seudocodigo para evaluar una encuesta sobre ingresos, s por cada uno de los encuestados se tomó la siguiente información: nombre del profesional; código de la profesión; ingreso mensual. La encuesta incluyó 5 profesiones codificadas del 1 al 5. Determinar el profesional que reportó el mayor ingreso mensual, y cual es el promedio mensual de ingreso por cada profesión, si la encuesta termina con un nombre “ZZZZZ’ Seudocodigo: Empiece C1 = O C2 = O C3 = O C4 = O C5 = O SIP1 = O SIP2 = O SIP3 = O SIP4 = O SIP5 = O * Contadores de profesionales por profesión. * Sumas de ingreso por profesión. lea nombre, profesión, ingreso mayor = O mientras nombre <> “ZZZZZ haga empiece si ingreso > mayor entonces empiece mayor = ingreso nommay = nombre termine en caso de profesión haga 1: inicie C1 = C1 +1 SIP1= SIP1 + ingreso termine 2: inicie C2 = C2 + 1 SIP2 = SIP2 + ingreso termine 3: inicie C3 = C3 +1 SIP3 = SIP3 + ingreso 71 termine 4: inicie C4 = C4 + 1 SIP4 = SIP4 + ingreso termine 5: inicie C5 = C5 +1 SIP5 = BIP5 + ingreso termine d. o. m. inicie escriba ( ‘código de profesión errado’) termine fin * fin del en caso lea nombre, profesión, ingreso termine * termine del mientras PIP1 = SIP1 / C1 PIP2 = SIP2 / C2 PIP3 = SIP3 / C3 PIP4 = SIP4 / C4 PIP5 = SIP5 / C5 escriba (‘promedio de ingreso por profesiones ‘) escriba PIP1, PIP2, PIP3, PIP4, PIP5 escriba (‘MAYOR INGRESO LO REPORTO’, nommay) termine 72 PROBLEMA No 48 Haga un programa en seudocódigo, que genere una matriz de orden N, de tal forma que sus elementos son los números comprendidos entre 1 y N’, dispuestos en forma de espiral, empezando desde la fila 1 con columna 1, hacia la derecha, hacia abajo, hacia arriba, y así sucesivamente hasta terminar el espiral. Ejemplo: 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 30 29 28 27 10 16 15 14 13 12 11 Seudocódigo: defina matriz A de 20 * 20 empiece repita escriba (‘orden de la matriz’) lea N hasta N<=20 haga x = 1 haga y = N haga z = O repita para j = x hasta y haga inicie z = z+1 A (x,j)= z termine para 1 = x+1 hasta y haga inicie z = z+1 A(i,y)= z termine para = y - 1 (atrás j) x haga inicie z=z+1 A(y,j)= z termine para i = y - 1 (atrás i) x+1 haga * (atrás j) decrementa j en 1 unidad por pasada hasta llegar a x 73 inicie * (atrás i) decrementa i z=z+1 en 1 unidad por pasada A(i, x)= z hasta llegar a x+1 termine x=x+1 y=y1 hasta z = N*N para i 1 hasta N haga empiece para j = 1 hasta N haga empiece escriba A(i,j) termine termine termine 74 PROBLEMA No 49 Escriba en seudocódigo un programa para generar una matriz cuadrada de orden N (siendo N impar), de tal forma que sus elementos son los enteros positivos desde 1 hasta N, dispuestos de tal forma, que al sumar cada fila, cada columna, y cada diagonal se obtenga el mismo resultado. Por ejemplo generar la matriz de orden 5 sería: 17 23 4 10 11 24 1 5 7 6 13 12 19 18 25 8 14 20 21 2 15 16 22 3 9 Seudocódigo: defina matriz A de 10*10 Empiece repita lea N hasta N <> 2*(N/2) y N <= 100 * parte entera de (N/2) haga i = 1 haga i = N/2 + 1 para k = 1 hasta N*N haga Empiece A(i,j) = k if residuo de (k/N) da 0 entonces haga empiece i=i+1 termine d. o. m empiece j = j+ 1 i = i -1 if i < 1 entonces empiece i=N termine d. OM• m empiece si j > N entonces empiece j= 1 75 termine termine . termine termine para i 1 hasta N haga empiece . para = 1 hasta N haga empiece escriba A(i,i) termine termine termine NOTA: Fabricar una rutina que halle la suma de cada fila, la suma de cada columna, la suma de cada diagonal y compruebe así, si la matriz generada cumple las condiciones del problema. 76 10.3 SOLUCION DE PROBLEMAS CON SUBPROGRAMAS (PROCEDIMIENTOS Y FUNCIONES) Un subprograma, es un programa que resuelve un caso especial, dentro de la solución total de un problema. El subprograma se construye como una rutina que es invocada desde el programa principal. Se escribe por separado y se ejecuta cada vez que sea necesario, mediante un llamado del principal. Existen básicamente dos tipos de subprogramas: funciones y procedimientos. FUNCIONES Las funciones, son rutinas que se caracterizan por calcular un solo valor de salida hacia el programa que las invoca. Se llaman desde el principal a través: Y = nombre(p/e), donde: nombre: es el nombre que identifica la función. Sirve además como parámetro de salida. (pie) : son parámetros de entrada(datos), enviados desde el programa que llama la función y con los cuales realiza el trabajo que se le encomendó. El resultado del trabajo hecho por la función queda en el nombre; por lo tanto dentro del cuerpo de la función, debe existir la asignación nombre = XXXXX, donde XXXXX es el valor calculado por la función. PROCEDIMIENTOS Los procedimientos, son rutinas destinadas para calcular mas de un valor de salida. Se llaman desde el programa principal a través de: nombre(p/e/s), donde: nombre : es el nombre que identifica el procedimiento. (p/e/s): parámetros de entrada y de salida. Los de entrada, son los valores que recibe del principal y con los cuales realiza el trabajo que se le encomendó. Los de salida, son los valores que calcula el procedimiento, valores que regresa al programa principal. 77 Dentro de un procedimiento o una función pueden existir llamados a otros procedimientos o funciones. La estructura general de la solución de un problema a través de subprogramas seria: *programa principal inicio Y función l (pel,pe2,pe3,..) *Llamado de función 1 procedimiento l(pel,Pe2,.,.P51P52) *llamado de procedimiento 1 Z = función 2(pel,pe2,.’..) *llamado de función2 R = función N(pel,pC2,...) *llamado de función N procedimiento N(Pel,Pe2,..,PslP52 *llamado de procedimiento N fin *subprograma función l FUNCION1 (pe1 , pe2, pe3,..) inicio k = pe1 + pe2 + pe3 función 1 = k *asignación del cálculo al nombre de la función. termine 78 *subprograma procedimiento l PROCEDIIIIENTOI (pe1 ,pe2,. . ,psl ,ps2,..) inicio ps1 = pe1 + pe2 ps2 = pe1 — pe2 termine *asignación del cálculo a los parámetros de salida. De esta forma se construyen las funciones y procedimientos. A continuación se escribe la solución de problemas, utilizando la teoría de programa principal, que invoca subprogramas, para que realicen una acción especial del programa. Se muestra la solución con diagrama y por seudocódigo. 79 PROBLEMA No 50 Para N datos hacer con ellos una matriz de 10 * 10, si los N no alcanzan completar la matriz con ceros. en un procedimiento llamado “hacer” haga un vector con los positivos y otro con los negativos; luego para cada elemento de la matriz halle su factorial así mismo diga si es o no primo mediante otro procedimiento llamado “primo”. 80 Procedimiento “hacer” mediante el cual separamos los positivos y los negativos en sus respectivos vectores 81 Subrutina para el cálculo de los factoriales de los números que pertenecen a la matriz. 82 Procedimiento para manejar la información acerca de si los elementos de la matriz son primos o no. 83 SEUDOCODIGO PROGRAMA PRINCIPAL defina matriz A de 10,10 lea N haga c = O empiece para i = 1 hasta 10 haga inicie para j = 1 hasta 10 haga inicie si c = N entonces A(i,1)= O *completar la matriz d. o. m. inicie lea X A(i,i) = X c = c +1 termine termine termine llame HACER (A,P,K,N,H) * llamado de procedimiento para i = 1 hasta 10 haga inicie para 3 = 1 hasta 10 haga inicie X = A(i,j) Y = FACTORIAL(X) * llamado de función llame PRIMO(X,CLAVE) *llamado de procedimiento escriba x,y si clave = 1 entonces escriba (X, ‘es primo’) d. o. m. escriba (X, ‘ no es primo termine termine termine SEUDOCODIGO PROCEDIMIENTO HACER HACER (A,P,K,N,H) defina matriz A de 10,10 defina vector P de 100 defina vector N de 100 84 k=0 h=0 empiece para i 1 hasta 10 haga inicie para j = 1 hasta 10 haga inicie si A (i,j) )> O entonces inicie k = k+ 1 P(k) = A(i,j) termine d o. m. inicie h=h+1 N(h) = A(i,j) termine termine termine para i = 1 hasta k haga escriba P(i) para i 1 hasta k haga escriba N(i) termine SEUDOCODIO PROCEDIMIENTO PRIMO PRIMO (X,CLAVE) clave = O L=X-1 empiece para i 2 hasta L haga empiece coc = (x/i) si x = coc * i entonces clave = O termine clave 1 termine *parte entera 85 SEUDOCODIGO FUNCION FACTORIAL Primera forma de solución: FACTORIAL (K) haga f = 1 empiece para i = 1 hasta k haga inicie f = f*i termine FACTORIAL = f termine SEUDOCODIGO FUNCION FACTORIAL Segunda forma de solución: FACTORIAL 1K) haga f = 1 haga i = 1 empiece repita f = f* i i = i+1 hasta que i > k FACTORIAL = f termine 86 PROBLEMA No. 51 Elabore un programa para facturar el servicio de gas de los predios de la ciudad. Por cada predio se tiene la siguiente información: dirección, tarifa básica, lectura anterior, lectura actual, estrato del predio. La forma de liquidar cada factura es la siguiente: —si el consumo del predio es menor que el consumo básico, cobre la tarifa básica más $500.00; —si el consumo del predio es superior al consumo básico, pero menor que tres veces el consumo básico, cobre la tarifa básica más $1.500.00; —de otra manera cobre el doble de la tarifa básica más $2500.00. Hacer la liquidación por predio en un procedimiento; la factura en otro y el cálculo del total recaudado por la compañía de gas en una rutina. Los predios se terminan cuando llegue uno con dirección igual a ‘ZZZZ”. Leer además una tabla de estratos que contiene: el estrato (de 1 a 6 ) y el consumo básico por estrato. Hacer la solución por diagrama y por seudocódigo. Estrato Consumo básico por estrato 1 2 30 20 3 40 4 25 5 45 6 50 87 DIAGRAMA DE FLUJO DEL PROGRAMA PRINCIPAL DE FACTURACION DEL SERVICIO DE GAS. 88 PROCEDIMIENTO “LIQUIDAR” MEDIANTE EL CUAL SE EFECTUA LA LIQUIDACION DE LOS PAGOS QUE DEBEN EFECTUAR LOS USUARIOS 89 PROCEDIMIENTO “FACTURAR” MEDIANTE EL CUAL SE EFECTUA LA FACTURACION DE LOS PAGOS QUE DEBEN HACER LOS USUARIOS. 90 FUNCION “SUMA” MEDIANTE LA CUAL SE EFECTUA LA SUMA PARA CALCULAR EL TOTAL DE LOS PAGOS QUE DEBEN HACER LOS USUARIOS 91 PROBLEMA DE FACTURACION DE LA COMPAÑIA DE GAS SOLUCION POR SEUDOCODIGO PROGRAMA PRINCIPAL defina matriz P de 1000,5 defina matriz TE de 6,2 defina vector PAGO de 1000 *hasta para 1000 predios empiece i =1 mientras i <= 6 haga empiece lea TE(i,l) *lectura tabla de estratos lea TE(i,2) i= i + 1 termine I=0 lea d, tb, lecant, lecact, est *información de cada predio mientras d <> “Z222’ haga empiece I =I+1 p(I,1) d *configuración de la p(I,2) = tb matriz de predios p(I,3) lecant p(I,4) lecact p(I,5) = est lea d,tb,lecant,lecact,est *información de cada predio termine LIQUIDAR (P,I,TE,PAGO) *llamado de procedimiento FACTURAR(P, 1 ,PAGO) *llamado de procedimiento R = SUMA(PAGO, I) *llamado de función escriba R, ‘ total recaudado por la compañía termine SEUDOCODIGO PROCEDIMIENTO LIQUIDAR LIQUIDAR (P,I,TE,PAGO) defina matriz P de 1000,5 92 defina matriz TE de 6,2 defina vector PAGO de 1000 empiece j=1 mientras j <= i haga empiece c = p(j,4) - p(j,3) *consumo mensual e = p(j,5) *estrato de predio cb = te(e,2) *consumó básico si c <= cb entonces *condición de liquidación empiece pb = p(j,2) *pago básico st = 500 *sobretasa pago(j)= pb + st *total a pagar cada predio termine d. o. m. empiece sa c > 3 * cb entonces *condición de liquidación empiece pb = 2 * p(j,2) st = 2500 pago(j) = pb + st termine d. o. m. *condición de liquidación empiece pb = p(j,2) st = 1500 pago (j) = pb + st termina termine j= j + 1 *liquidar otro predio termine termine SEUDOCODIGO PROCEDIMIENTO FACTURAR FACTURAR(P,X ,PAGO) defina matriz P de 1000,5 defina vector PAGO de 1000 empiece j=1 mientras j <= X haga empiece *facturar cada predio 93 escriba (‘COMPAÑIA DE GAS ‘) escriba (‘DIRECCION ‘, P(J,1) escriba (‘ESTRATO ‘, P(J,5) ) escriba (‘LECTURA ACTUAL’,‘, P(J,4)) escriba (‘LECTURA ANTERIOR’,‘, P(J,3)) escriba (‘TARIFA BASICA ‘, P(3,2) escriba (‘TOTAL A PAGAR’, ‘, PAGQ(J) *para facturar otro predio y escribir nueva factura j =j +1 termine termine SEUDOCODIGO FUNCION SUMA SUMA (PAGO,I) defina vector P de 1000 empiece S=0 i=1 mientras j < i haga empiece s = s + pago(j) *total recaudado por compañía de gas j= j+ 1 termine SUMA = s termine 94 11. PROBLEMAS PROPUESTOS En este capitulo se presentan una serie de problemas que pueden ser resueltos por el lector, con la guía del texto, y que contribuyen al aprendizaje del arte de la programación de computadores. Como metodología de solución puede seguir los siguientes pasos: 1. Análisis del problema, entendimiento del enunciado. 2. Solucionarlo mediante diagrama de flujo 3. Verificar la solución. Si no es correcta vuelva al paso 1. 4. Solucionarlo mediante seudocódigo 5. Verificar la solución. Si no es correcta vuelva al paso 1. 6. Solucionarlo mediante subprogramas. 7. Verificar la solución. Si no es correcta vuelva al paso 1. 8. Si ha solucionado correctamente el problema por las tres formas (diagrama, seudocódigo y subprogramas), está listo para solucionar otro problema y volver al paso 1. 1. Diseñar un algoritmo que calcule el seno de X. donde MAX representa un valor entero, por ejemplo 10. 2. Exprese algorítmicamente el logaritmo natural de X. donde MAX representa un valor entero, por ejemplo 10. 3. Dados dos numeros, calcule la combinatoria de ellos si es posible. (N debe ser > ó 95 = a M, tanto N como M deben ser > = 0). Recuerde la definición de combinatoria: 4. La serie de Fibonacci se obtiene como la suma de los dos números inmediatamente anteriores al que se calcula, inicia con O y 1; dado esto halle la serie de Fibonacci tal que la suma de sus elementos no exceda a 1000. Guarde la serie en un vector. 5. Tome los valores A, B, C como las coeficientes de la ecuación cuadrática AX2 + BX + C = O y halle sus respectivas raíces Xl y X2. 6. Dado un N diga si es numero primo o no, en caso de no serlo imprima sus factores. 7. En estadística se define la varianza como la suma de los cuadrados de las diferencias entre cada valor dado y la media de la totalidad de datos, dividido por el número de observaciones. Guarde los Xi en un vector, proceda a calcular la media y posteriormente halle la varianza. 8. Dado un vector, ordenarlo ascendentemente por el método burbuja, el cual consiste en tomar el primer elemento del vector y compararlo con los otros elementos del vector, si se encuentra uno menor se intercambia, continuando hasta comparar el primero con todos los demás. Luego toma el segundo y repite la operación de comparación con los restantes de ahí para abajo, continuándose el proceso. El algoritmo termina cuando ya se han comparado cada uno de los elementos con los restantes de abajo. 9. Dados dos vectores A y B, si están ordenados ascendentemente proceda a intercalarlos en el vector C. 96 10. Dado un vector ordenado verifique la existencia o no de un número dentro del conjunto, utilizando para ello el algoritmo de búsqueda binaria, el cual consiste en partir el vector en .mitades, verificando si se encuentra en dicha posición, sino, se examina si está dentro del rango de arriba o del rango de abajo de la posición. Así continúa el proceso hasta hallarlo o cuando el limite superior del vector sea contiguo al limite inferior. 11. Leer dos vectores A y 8 de dimensiones N, realizando con ellos las siguientes operaciones: — calculo del vector C, si: C(i)=A(i)*B(i) — calculo del vector D, si: D(i)=INTCA(i)/8(i)) INT significa parte entera. 12. Haga un algoritmo para obtener la matriz C al multiplicar dos matrices, tenga en cuenta que: C(i,j)=Suma A(i,k)*B(k,j) recuerde que a] multiplicar A de dimensión n*m y B de dimensión m*p, se obtiene la matriz producto C de n*p. 13. En una matriz de dimensión N*M, calcule el promedio de los valores pares ubicados en las posiciones tales que i+j sea par, así mismo halle la media de los valores impares ubicados en las posiciones i+j impares; donde i es la fila y j la columna de la matriz. 14. En algunos problemas de análisis numérico se requiere que: dada una matriz cuadrada, los elementos de su diagonal sean mayores que la suma de los restantes elementos de la fila, así, realice un diagrama que diga si una matriz cuadrada cumple dicha condición. 15. Para una matriz de orden N*M calcule los promedios de los elementos de cada fila y cada columna. 16 Suponga que impuestos nacionales requiere un diagrama de flujo que obtenga el monto de impuesto a cobrar en toda transacción. El impuesto se cobra con 0% (exento), 6% ó 10% del valor de la transacción. Además si el monto de la compra es mayor que $30.000 se le cobra una sobretasa del 2%. Para montos entre $10.000 y $30.000 la sobretasa es del .1%. En otro caso no hay sobretasa. La sobretasa se cobra a aquellas transacciones no exentas. 97 17. Se desea obtener el puntaje de eficiencia de 25 trabajadores de una empresa textil de acuerdo a las observaciones a que fueron sometidos durante el periodo enero 1 a enero 31, las condiciones de calificación fueron: 1. Total horas dejadas de laborar < 24. 2. Piezas totalmente terminadas > 300. 3. Piezas defectuosas < 25. Una vez definidos los tópicos a calificar se establecieron los siguientes criterios de calificación: — Cada trabajador inicia con 50 puntos. -Si se cumple 1. se le agregan 20 puntos. — Si se cumple 2. se le suman 30 puntos. — Si se cumpla 3. se le dan 20 puntos. Se pide leer los datos de cada trabajador, obtener el respectivo puntaje e imprimir código y puntaje. 18. El precio de una cadena de oro se calcula de la siguiente manera: -Se parte de una base de $10.000.000. — Por cada mgr de oro de peso se le agrega $10.00. — Si el peso excede 250 mgrs de oro adicionamos $1000.00. — Si el peso sobrepasa los 600 mgrs de oro se incrementa en $2.500.00 fuera de los ya cobrados por pasar de 250 mgrs. Obtener e imprimir el valor de la cadena de oro, imprimiendo además el código respectivo. 19. Para un grupo de N personas. cada una de ellas con la siguiente información: —edad —estado civil: 1 casado, 2 soltero; —sexo: 1 masculino, 2 femenino. Establecer el número total de: 98 • hombres casados mayores de 50 años. • .hombres solteros mayores de 50 anos. • mujeres casadas mayores de 50 años. • mujeres solteras mayores de 50 años. • personas solteras mayores de 40 años. • personas casadas menores di 40 años. • personas con edades entre 18 y 45 años. 20. La empresa de teléfonos de Bucaramanga esta interesada en obtener un diagrama que le permite calcular el salario de sus N empleados, partiendo de los datos al final del mes, sobre sueldo básico, total de horas extras diurnas laboradas, total de horas extras nocturnas laboradas; se desea además que solamente se calcule el salario bruto (es decir sin ningún tipo de descuento). Además se tiene como información que el pago por hora extra diurna es de $125.00 y la hora extra nocturna se paga a $200.00. El sueldo básico varía para cada empleado. 99