Computación para ingenieros Serie 5. Diseño de programas M.I. Jaime Alfonso Reyes Cortés En las secciones siguientes se presentan una serie de problemas para los cuáles el alumno tendrá que leer cuidadosamente cada uno de ellos; después diseñará sus correspondientes algoritmos, en pseudocódigo y en diagrama de flujo, y deberá realizar, también, las correspondientes pruebas de escritorio. Notas importantes: En los casos que se requiera revise la correspondiente teoría matemática. Los algoritmos deben revisarse en forma exhaustiva para garantizar que la solución a cada problema es la indicada, es decir, se deben de evaluar los casos críticos en las pruebas de escritorio para evitar que se llegue a resultados no deseados. Algoritmos con estructura secuencial 1. Prefijos del Sistema Internacional. Los prefijos utilizados en el Sistema Internacional se muestran en la tabla 1 al igual que sus correspondientes símbolos y valores multiplicativos. Tabla 1. Prefijos usados en el SI, así como sus correspondientes símbolos y valores multiplicativos. Elaborar el algoritmo que muestre en pantalla la tabla 1. 2. Prisma poligonal. Diseñar un algoritmo que calcule el volumen de un prisma poligonal cuya base es de lado n. Se debe de pedir al usuario la dimensión del lado, la cantidad de lados, su apotema y la altura del prisma. Se debe de mostrar en pantalla el volumen resultante. 3. Complejo conjugado. Realizar el algoritmo que le pida al usuario un número complejo que esté en forma binómica y que muestre en pantalla su correspondiente complejo conjugado. 4. Conversión de pies a centímetros y pulgadas. Elaborar el algoritmo que convierte de pies a centímetros y de pies a pulgadas. Se debe de pedir al usuario por vía teclado la cantidad de pies y se debe de mostrar en pantalla su equivalente en centímetros y pulgadas. 5. Error absoluto. Diseñar un algoritmo que calcule el error absoluto. Pida al usuario por vía teclado los valores del valor real y el valor leído. Muestre en pantalla el error obtenido.
6. Cálculo de área. En la figura 1, A y B son los centros de los dos círculos y el segmento AB = 1 cm, entonces el área de la parte sombreada en la figura1 es de cm Figura 1 Elaborar el algoritmo que permita resolver el problema para un valor del segmento AB que se le pida al usuario por vía teclado. 7. Matemáticas recreativas 1: Estudie cada una de las igualdades mostradas en la figura 2. 15 2 = 1 * 200 + 25 = 225 25 2 = 2 * 300 + 25 = 625 35 2 = 3 * 400 + 25 = 1225 45 2 = 4 * 500 + 25 = 2025 Figura 2 Enuncie un método abreviado para elevar al cuadrado un número de dos dígitos de los cuales el de las unidades sea el 5. Realice un algoritmo que le pida al usuario solamente el primer dígito del número que desee elevar al cuadrado. Con base en él determine y muestre en pantalla el renglón correspondiente. 8. Suma de enteros. Gauss, famoso matemático alemán, siendo joven, encontró la suma de los primeros 100 números consecutivos por él siguiente procedimiento: Dedujo que había 50 parejas de números, cada una de las cuales sumaría 101, como se observa en la figura 3.
Figura 3 Por consiguiente la suma total sería 50 * 101 es decir, 5050. Con base en esto se puede saber que la suma de los n primeros números enteros consecutivos es: n 2 ( n + 1) Diseñe el algoritmo que le pida al usuario el número n de enteros que se desean sumar y que muestre en pantalla la suma obtenida por la ecuación anterior. Después realice las pruebas de escritorio para resolver los incisos a y b. a. La suma de los primeros 80, números consecutivos. b. La suma de los primeros 200 números consecutivos. 9. Suma de enteros pares e impares. Realice un análisis similar al del ejercicio anterior y determine una fórmula para la suma de: a. los n primeros números pares,es decir, 2 + 4 + 6 +... + (2n - 4)+ (2n -2) +2n. b. los n primeros números impares (es decir, 1 + 3 + 5 +... + (2n - 3) + (2n - 1)). Diseñe el respectivo algoritmo que le pida al usuario el valor de n y devuelva la correspondiente suma de números pares o impares, según corresponda. También, según corresponda, realice como pruebas de escritorio: La suma de todos los números impares desde 1 hasta 49. La suma de todos los números impares desde 1 hasta 199. La suma de todos los números pares desde 2 hasta 400. Notas: En los ejercicios 8 y 9 no se deben usar ciclos.
Algoritmos con decisiones 1. Error relativo. Diseñar un algoritmo que calcule el error relativo. Pida al usuario por vía teclado los valores del valor real y el valor leído. Muestre en pantalla el error obtenido. 2. Valor absoluto. Diseñar un algoritmo que calcule el valor absoluto de un número real sin usar funciones matemáticas de los lenguajes de programación. 3. Función logaritmo. El logaritmo base n de un número se determina mediante la siguiente ecuación: ln log n ( x) = ln ( x) ( n) Elaborar el algoritmo que permita determinar el logaritmo base n de un número considerando las restricciones que se tienen para los logaritmos. Se le debe pedir al usuario los valores de x y de n por vía teclado y se debe mostrar en pantalla el logaritmo base n correspondiente. 4. Complejo conjugado 2. Suponga que se tiene un número complejo en forma exponencial, z = re iθ. Diseñar un algoritmo que obtenga el complejo conjugado en forma exponencial de un número complejo que se le pide al usuario por vía teclado y que se encuentra en forma exponencial. Considere que el ángulo θ se encuentra definido en el intervalo 0 θ < 2π su correspondiente complejo conjugado también. Se debe mostrar en pantalla ambos números en forma exponencial. 5. Suma de horas, minutos y segundos. Elaborar el algoritmo que pida al usuario por vía teclado dos valores dados en horas, minutos y segundos y que realice la suma correspondiente de ambos. Considere las restricciones asociadas a las horas minutos y segundos. En caso de que la cantidad de horas exceda a 24 se deberán señalar también los días correspondientes. 6. La línea recta. Diseñar un algoritmo que dados dos puntos, y, de una recta calcule la ecuación que define dicha recta. Muestre en pantalla la ecuación obtenida. Después pedir al usuario por vía teclado un valor de la abscisa para obtener su correspondiente ordenada y mostrarla en pantalla. Considere todos los casos válidos y no válidos para obtener la ecuación de la recta si es posible. 7. Triángulos. Diseñar un algoritmo que dados tres puntos,, y, que definen un triangulo en el plano coordenado x-y. Indique en pantalla si se trata de un triángulo o no lo es. En caso de que sea un triángulo deberá mostrar en pantalla el tipo de triángulo al que se refiere (isósceles, equilátero, escaleno) y también determine los ángulos de cada triangulo usando la ley de cosenos. y Nota: Para ver si dos lados son iguales considere que podría existir un error de redondeo, es decir,
asuma que dos lados son iguales si la diferencia entre sus longitudes es menor de 0.00001 (error absoluto <= 0.00001 o error relativo <= 0.001). Realiza como pruebas de escritorio los siguientes incisos. a. Prueba con los puntos (0,0), (2,4) y (6,0) b. Prueba con los puntos (1,2), (4,5) y (7,2) c. Prueba con los puntos (0,0), (3,5.196152) y (6,0) d. Define tres puntos que no formen un triángulo. 8. Prefijos del Sistema Internacional. Con base en la tabla 1 diseñe un algoritmo que le pida al usuario por vía teclado el nombre del prefijo en el SI y muestre en pantalla su símbolo y su valor multiplicativo correspondientes.
Algoritmos que emplean ciclos 1. Tabular la función logaritmo base n. Diseñar un algoritmo que tabule la función ln log n ( x) = ln ( x) ( n) en un intervalo que se le pida definir al usuario por vía teclado Considera las restricciones asociadas al log n y que el valor del incremento ( Δ ) que se usará para tabular se le deberá pedir al usuario por vía teclado. 2. Tabular una línea recta. Diseñar un algoritmo que dados dos puntos, y, de una recta calcule la ecuación que define dicha recta. Muestre en pantalla la ecuación obtenida. Tabule en pantalla los valores de con respecto a desde hasta. Considera que el valor del incremento ( Δ ) se le deberá pedir al usuario por vía teclado. Considere los casos válidos y no válidos para la ecuación de la recta. 3. Suma de enteros con ciclos. Diseñar los respectivos algoritmos que, mediante ciclos, obtengan las respectivas sumatorias y las muestren en pantalla para: a. la suma de los n primeros enteros consecutivos. b. la suma de los n primeros enteros pares. c. la suma de los n primeros enteros impares. En cada caso el valor de n se le deberá pedir al usuario y se deberá comparar las sumas obtenidas con la expresiones obtenidas por Gauss para comprobar que se cumplen. 4. Pirámide numérica. Realice un algoritmo que le pida un número entero al usuario y muestre en pantalla la pirámide correspondiente, como se muestra en la figura 4. Por ejemplo, para el número 5 se tiene la siguiente salida: 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 Figura 4 5. Serie numérica. Estudie el modelo de la figura 5. Observe que se expresa el cuadrado de un número entero como una suma de números consecutivos. Diseñe el algoritmo que pida el número entero al usuario que se desea y muestre en pantalla su
correspondiente renglón. Realice las pruebas de escritorio para expresar los cuadrados de 6, 7 y 8 del mismo modo. 1 2 = 1 2 2 = 1 + 2 + 1 3 2 = 1 + 2 + 3 + 2 + 1 4 2 = 1 + 2 + 3 + 4 + 3 + 2 + 1 5 2 = 1 + 2 + 3 + 4 + 5 + 4 + 3 + 2 + 1 Figura 5 6. Trucos con el número 9. En la figura 6 se muestra un modelo matemático relacionado con el número 9. Verificar, si se desea, que cada una de las siguientes igualdades es correcta: 1 * 9 + 2 = 11 12 * 9 + 3 = 111 123 * 9 + 4 = 1111 1234 * 9 + 5 = 11111 12345 * 9 + 6 = 111111 Figura 6 Trate de determinar una correspondencia entre el número de unos que componen al número de la derecha y uno de los números que se utilizan a la izquierda. Ahora desarrolle el algoritmo que sin efectuar el cálculo, obtenga los unos indicados en el resultado de la operación. Pida al usuario el número de unos que se quieren obtener y despliegue en pantalla todos los renglones anteriores hasta llegar a la operación deseada. Realice las siguientes operaciones como prueba de escritorio: a. 123456 * 9 + 7 =? b. 1234567 * 9 + 8 =? 7. Después de estudiar el modelo matemático de la figura 7, desarrolla un algoritmo que le pida al usuario solamente la cantidad de unos antes del símbolo * y que permita construir dicho modelo hasta la cantidad de 1 s deseada. l*l = 1 11 * 11 = 121 111 * 111 = 12321 1111 * 1111 = 1234321 11111 * 11111 = 123454321 Figura 7
Nota: Se debe de tomar en cuenta solamente los 1 s que se encuentran antes del símbolo *. Considera que el modelo expuesto continúa hasta que el usuario decida terminarlo. Use como prueba de escritorio al producto de 1111111111 * 1111111111. 8. En la figura 8 se han acomodado las fichas de un juego de domino de cierta manera. Observe que los puntos que debería mostrar cada ficha se han sustituido por la cantidad correspondiente. Elabore el algoritmo que muestre en pantalla solamente las secuencia de valores para cada renglón. Figura 8
Algoritmos con arreglos 1. Conversión decimal a hexadecimal. Elaborar el algoritmo que realice la conversión de números decimales a hexadecimales. Se debe pedir al usuario una entero correspondiente al número decimal y se debe de regresar una cadena correspondiente al valor hexadecimal del número original. 2. Reloj. Consideremos los números del 1 al 12 de un reloj de 12 horas. Se sabe que la suma, en dicho reloj, se basa en el conteo según la dirección de sus manecillas. Así por ejemplo, para determinar la suma de 9 + 5, empezamos en las 9 y contamos 5 unidades en la dirección de las manecillas del reloj obteniéndose 2 como resultado. a. Diseñar un algoritmo que cree una tabla de sumas para un reloj de 12 horas como la tabla 1. b. Haciendo uso de la tabla anterior diseñe un algoritmo que obtenga la suma de dos horas dadas por el usuario. Por ejemplo: 8 + 7 = 3 5 + 12 = 5 3 + 11 =2 Tabla 2 + 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6. 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 3. Una matriz escasamente poblada es aquella cuyos elementos son en su mayoría cero. Diseñe un algoritmo para determinar si una matriz de m*n es escasamente poblada o no lo es. Los
valores de dicha matriz se le deberán pedir al usuario y después determinar si es escasamente poblada o no lo es. 4. Podemos dar una aproximación de una matriz de n*n es positiva definida si todos sus elementos son mayores que cero. Una matriz de n*n es positiva semidefinida si todos sus elementos son mayores o iguales que cero. Una matriz de n*n es negativa definida si todos sus elementos son menores que cero. Diseñe un algoritmo que le pida al usuario el valor de n y los valores de la matriz cuadrada. Después determine si la matriz dada es positiva definida, positiva semidefinida o ninguna de las dos. 5. Divirtiéndose con binarios. Muchos aspectos divertidos están basados en el sistema binario. Consideremos, por ejemplo, las tablas que a continuación se exponen, dentro de las cuales se disponen los números del 1 al 15 de acuerdo al siguiente esquema. D C B A 8 4 2 1 9 5 3 3 10 6 6 5 11 7 7 7 12 12 10 9 13 13 11 11 14 14 14 13 15 15 15 15 En la tabla A se colocan todos los números en cuya representación binaria aparece un 1 en el lugar de las unidades. En la tabla B se colocan todos los números en cuya representación binaria aparece un 1 en el segundo lugar a partir de la derecha. En las tablas C y D se colocan los números con un 1 en la tercera y en la cuarta posición, respectivamente. Ahora dígale a alguien que piense en un número del 1 al 15 y que le diga en qué tabla o tablas se encuentra. Entonces usted puede indicarle en qué números pensó sumando los primeros números de las tablas que ha mencionado. Así por ejemplo, si el número en que pensó es el 11, le mencionará las tablas A, B y D. Sumando entonces 1 + 2 + 8 se determina el número en cuestión. Diseña un algoritmo que haga que la máquina deduzca el número en el que estaba pensando el usuario. Dicho algoritmo deberá presentar en pantalla las tablas correspondientes y realizar las preguntas correspondientes para deducir el número pensado. Las tablas deben ser definidas por arreglos que se deberán imprimir en pantalla. De ser necesario, si el usuario lo requiere darle una breve explicación mostrándole la representación en binario de la tabla.