Licenciatura de Matemáticas Algorítmica y Lenguajes de Programación Primer examen parcial Universidad de Oviedo 24/02/2001 Apellidos: Nombre: D.N.I: Notas: 1. Las preguntas deben contestarse de forma breve, razonando la respuesta sobre el código presentado. Siempre que sea necesario referirse al código se 2. Los errores que se buscan en los programas son sintácticos, un programa será correcto si no presenta errores sintácticos aún cuando los resultados puedan parecer poco razonables. 3. No se aceptará una respuesta, aún siendo válida, si no se justifica la forma en que se llega a la misma. 4. En algunos casos se indica la traza como posible forma de razonar la solución propuesta; en dichos casos se debe proporcionar una tabla en la que se muestre cómo cambian los valores de las variables del programa a lo largo de la ejecución del mismo. 5. El lenguaje de programación a utilizar es FORTRAN 90. 6. Cuando la solución de un ejercicio sea un programa debe esbozarse, previamente, un análisis y diseño del algoritmo que resuelva el problema. 7. Los • • • ejercicios puntuarán de la siguiente forma: Ejercicios 1 al 4: 1,3 puntos Ejercicio 5: 1,8 puntos Ejercicios 6: 3 puntos 1. Dado el siguiente fragmento de programa: 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. REAL FUNCTION facil (x, y, d) IMPLICIT NONE REAL x, y INTEGER d ! Código FORTRAN END PROGRAM examen IMPLICIT NONE REAL, PARAMETER :: pi = 3.141592, max = 2000 CHARACTER letra, tipo INTEGER dia, mes, anio, p, q REAL distancia, precio, total, u, v REAL facil ! Código FORTRAN IF (mes == max) THEN total = facil (distancia, facil(precio, pi, mes), dia) END IF DO WHILE (facil(total, pi, 0) > 0) total = facil (total, 0, letra) END DO facil (distancia, pi, dia) PRINT *, facil (distancia, pi, dia) PRINT *, facil (distancia, dia, pi) ! Código FORTRAN END ¿Qué problemas presenta? 2. Dado el siguiente programa: 01. PROGRAM examen 02. IMPLICIT NONE 03. 04. INTEGER i, j, k 05. INTEGER n 06. 07. n = 0 08. 09. DO i=1, 3 10. DO j=2, 3, -1 11. DO k=3, 3 12. n=n+1 13. END DO 14. END DO 15. END DO 16. 17. PRINT *, n 18. END ¿Qué problemas presenta? 3. Dado el siguiente programa: 01. PROGRAM examen 02. IMPLICIT NONE 03. INTEGER i 04. 05. i=0 06. 07. DO WHILE (i<3) 08. DO i=1, 5 09. PRINT *, i 10. END DO 11. END ¿Qué problema presenta? Una vez subsanado (indíquese forma de hacerlo), ¿qué salida produciría (utilice una traza)? 4. Dado el siguiente programa: 01. PROGRAM examen 02. IMPLICIT NONE 03. INTEGER i, total 04. 05. i = 0 06. total = 0 07. 08. PRINT *, 'Introduzca numeros menores que 10:' 09. 10. DO WHILE (i<10) 11. READ *, i 12. total = total + i 13. END DO 14. 15. PRINT *, total 16. END Complete el siguiente código para obtener un programa equivalente: 01. PROGRAM examen 02. IMPLICIT NONE 03. INT EGER i, total 04. 05. ! Aquí faltan líneas de código 06. 07. i = 0 08. total = 0 09. 10. PRINT *, 'Introduzca numeros menores que 10:' 11. 12. DO WHILE (.NOT.parada) 13. 14. ! Y aquí también... 15. 16. END DO 17. 18. PRINT *, total 19. END Razónense los cambios realizados y muéstrese una traza de los dos programas para justificar tales cambios. 5. Dado el siguiente programa: 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. INTEGER FUNCTION f (n,b) IMPLICIT NONE INTEGER n LOGICAL b IF (b .AND. (n<=1)) THEN f = 1 ELSE b=.NOT.b f = 1 + f (n-1, b) END IF END PROGRAM examen IMPLICIT NONE INTEGER f PRINT *, f (3, .TRUE.) END ¿Qué problema presenta? Si es posible, soluciónese el problema e indíquese la salida que produciría el programa resultante. En caso necesario, razonar la salida propuesta mediante una traza del programa. 6. Escribir un programa que lea un número entero comprendido entre 1 y 20 y dibuje una “escalera” formada por asteriscos, ‘*’. Ejemplos de uso: Cantidad leída Salida * 1 5 * ** *** **** ***** * 10 ** *** **** ***** ****** ******* ******** ********* **********