Professional Documents
Culture Documents
LP_2012
WIWI&DATA-INGS
Nota: el prrafo de color rojo es un mensaje, y los de color verde corresponde a los valores que son almacenados en las variables respectiva. 3.-Se tiene el siguiente programa, el cual contiene a un subprograma function, escriba el programa, luego compile y ejecute, observe el resultado de la ejecucin del programa, explique porque los valores cambian (obligatorio la explicacin)
PROGRAM programa IMPLICIT NONE INTEGER::x,y x=1 y=1 PRINT*,suma(x,y) PRINT* PRINT*,suma(x,y) CONTAINS INTEGER FUNCTION suma(a,b) IMPLICIT NONE INTEGER::a,b a=a+b suma=a RETURN END FUNCTION END PROGRAM programa
4.-Elabore un programa principal que llame a una subrutina que imprima los caracteres W y w, estos caracteres se almacenaran en diferentes matrices, en el programa principal debe ingresar la cantidad de caracteres que se imprimirn. (observe una posible ejecucin del programa)
INGRESE M Y N 55 WWWWW wwwww WWWWW wwwww WWWWW wwwww WWWWW wwwww WWWWW wwwww
5.- Elabore un programa que pida dos nmeros naturales y use una funcin lgica para saber si ambos son cuadrones pares o no. A saber: dos nmeros son cuadrones pares si al sumarlos y restarlos se obtienen cuadrados perfectos. Ejemplo: 10 y 26 son cuadrones pares pues: 10+26 =36 (cuadrado perfecto) y 26-10 = 16 (cuadrado perfecto). 6.- Modifica el ejercicio anterior para obtener todos los nmeros cuadrones pares hasta 1000.
LP_2012
WIWI&DATA-INGS
7.- Elabore un programa que lee por teclado una matriz 3x3 y calcula su determinante. Utilizar la funcin siguiente para calcular adjuntos: INTEGER FUNCTION adjto (a,b,c,d) INTEGER, INTENT(IN):: a,b,c,d adjto=a*d-b*c RETURN END FUNCTION adjto 8.- Elabore un programa que lee por teclado una matriz 3x3 y calcula su determinante. Utilizar la subrutina siguiente para calcular adjuntos: SUBROUTINE adjto (a,b,c,d,det2) INTEGER, INTENT(IN):: a,b,c,d INTEGER, INTENT(OUT):: det2 det2=a*d-b*c RETURN END SUBROUTINE adjto 9.- Elabore un programa que pida 5 nmeros por teclado y averige si son primos o no utilizando el algoritmo de Wilson. A saber: un nmero K es primo si (K-1)!+1 es divisible entre K. Utilizar una funcin que devuelva a travs de su nombre los valores .TRUE: si el nmero dado es primo y .FALSE. si no lo es. 10.- Programa que pida por teclado una matriz cuadrada de 4X4 y calcule su traza y la suma de los elementos por encima y por debajo de la diagonal principal. Usar una subrutina para la lectura de la matriz, una funcin para calcular la traza y una subrutina para las dos sumas pedidas. 11.- Programa que desplace los valores de las componentes del vector A(5,10,15,20,25,30,35) una posicin hacia la derecha de modo que el valor de la ltima componente pase a la primera, es decir, despus del desplazamiento, el vector resultante es A(35,5,10,15,20,25,30). Usar una subrutina para realizar el desplazamiento a la derecha. 12.-Elabore un programa que calcule el producto de 2 matrices de 3X2 y 2X3, respectivamente. Usar una subrutina para la lectura de las dos matrices a multiplicar y otra subrutina para calcular la matriz producto. 13.- Programa que pida al usuario por teclado el nmero de filas y columnas de dos Matrices A y B (iguales para ambas) y sus componentes. Dimensiona dinmicamente las matrices. A continuacin, el programa presentar estas opciones: 1. Mostrar por monitor la Matriz A. 2. Mostrar por monitor la Matriz B. 3. Mostrar por monitor la traspuesta de la Matriz A. 4. Mostrar por monitor la traspuesta de la Matriz B. 5. Mostrar por monitor Matriz A + Matriz B. 6. Mostrar por monitor Matriz A - Matriz B. 7. Salir. Usa el mismo subprograma para responder a las opciones 1 y 2 del men anterior, otro subprograma para responder a las opciones 3 y 4 y otro para responder a las opciones 5 y 6. Antes de acabar el programa libera el espacio reservado en memoria previamente para las matrices A y B.
LP_2012
WIWI&DATA-INGS
14.- El siguiente programa contiene un programa principal, un modulo y una subrutina, escriba el programa , compile y ejectelo, luego explique en forma detalla que sucede con las variables en cada unidad de programa
MODULE datos INTEGER :: numval REAL, ALLOCATABLE, DIMENSION(:) :: valores END MODULE datos PROGRAM prog_compartir USE datos IMPLICIT NONE INTEGER :: i PRINT*,"INGRESE CANTIDAD DE VALORES" READ *, numval ALLOCATE (valores(numval)) DO i = 1, numval valores(i)=i**i END DO CALL escribe END PROGRAM prog_compartir SUBROUTINE escribe USE datos IMPLICIT NONE INTEGER :: i DO i = 1, numval print '(f12.1)', valores(i) ! carcter global END DO END SUBROUTINE escribe
15.- El siguiente programa contiene una subrutina dentro del programa principal, escriba, compile y ejecute, luego haga un anlisis de las variable, funciones que participan en el programa
PROGRAM pro_sort INTEGER, PARAMETER :: num=5 INTEGER, DIMENSION(num):: inicial=(/10,5,1,4,2/) INTEGER, DIMENSION(num):: ordenado ordenado=sort(inicial) print*,ordenado CONTAINS FUNCTION sort(entrada) RESULT (salida) INTEGER,DIMENSION(:),INTENT(IN) :: entrada INTEGER,DIMENSION(SIZE(entrada)) :: salida LOGICAL :: no_camb INTEGER :: i,t salida = entrada DO no_camb = .TRUE. DO i=1,SIZE(salida)-1 IF (salida(i) > salida(i+1)) THEN t=salida(i) salida(i)=salida(i+1) salida(i+1)=t no_camb = .FALSE. END IF END DO IF (no_camb) EXIT END DO END FUNCTION sort END PROGRAM pro_sort
LP_2012
WIWI&DATA-INGS
LP_2012
WIWI&DATA-INGS
18.- Para el problema 17, modificarlos utilizando un programa principal y un modulo conteniendo a los subprogramas 19.-Transcriba el programa y realice el anlisis respectivo
MODULE ARREGLO IMPLICIT NONE SAVE INTEGER, PAREMETER::N=10 REAL, DIMENSION (N,N)::VECTOR END MODULE ARREGLO PROGRAM USE ARREGLO IMPLI CIT NONE VECTOR = (/1,2,3,4,5,6,7,8,9,10/) CALL SALIDA END PROGRAM APLICACIN SUBROUTINE SALIDA USE SALIDA IMPLICIT NONE PRINT*, VECTOR RETURN END SUBROUTINE SALIDA
21.- En los siguientes programas, una vez ejecutado, escribir el enunciado o pregunta que tendra cada programa.
Problema 1 PROGRAM Sumar2Numeros IMPLICIT NONE INTEGER :: a, b, c, d PRINT*, "Dame dos nmeros enteros" READ*, a, b CALL Sumar(a,b,c) ! Primera llamada a la subrutina. CALL Sumar(2,c,d) ! Segunda llamada a la subrutina. PRINT*, "La suma vale ",c PRINT*, "2 + ",c," = ",d CONTAINS !**************************************************** !** Subrutina para sumar dos nmeros enteros x e y **
LP_2012
WIWI&DATA-INGS
!** Parmetros E/: ** !** x, y : nmeros enteros ** !** Parmetros /S: ** !** z : resultado de la suma x+y ** !**************************************************** SUBROUTINE Sumar(x,y,z) INTEGER :: x, y ! Datos de E/ INTEGER :: z ! Dato de /S z = x+y END SUBROUTINE Sumar END PROGRAM Sumar2Numeros Problema 2 PROGRAM EjemploMenu IMPLICIT NONE ! Ejemplo de uso de una subrutina ! No hay variables ! Comienzo del programa principal PRINT*, "Aqu tienes el menu de opciones:" CALL MostrarMenu() ! Llamada a la subrutina ! Fin del programa principal CONTAINS !************************************************ !** Subrutina para mostrar un menu de opciones ** !** Parmetros: ** !** NINGUNO ** !************************************************ SUBROUTINE MostrarMenu() ! No hay parmetros PRINT*, " 1 - Listado de alumnos" PRINT*, " 2 - Buscar un alumno" PRINT*, " 3 - Aadir un alumno" PRINT*, " 4 - Borrar un alumno" PRINT*, " 5 - Finalizar" END SUBROUTINE MostrarMenu END
Problema 3
PROGRAM EjemploIntercambio IMPLICIT NONE INTEGER :: a, b PRINT*, "Dame dos nmeros enteros" READ*, a, b CALL Intercambiar(a,b) ! Llamada a la subrutina. PRINT*, "Los nmeros intercambiados son: ",a, b CONTAINS !******************************************************************** !** Subrutina para intercambiar el valor de dos nm. enteros x e y ** !** Parmetros E/S: ** !** x, y : nmeros enteros ** !******************************************************************** SUBROUTINE Intercambiar(x,y) INTEGER :: x, y ! Datos de E/S INTEGER :: tmp ! Variable local auxiliar tmp = x x = y y = tmp END SUBROUTINE Intercambiar END PROGRAM