Práctico - ejercicios de programación en fortran de exámenes anteriores PDF

Title Práctico - ejercicios de programación en fortran de exámenes anteriores
Author Jacinto Gámez
Course Fundamentos de informática
Institution Universidad de Granada
Pages 6
File Size 60.4 KB
File Type PDF
Total Downloads 85
Total Views 116

Summary

Ejercicios de programación en Fortran de exámenes anteriores...


Description

1. Una matriz de Pascal simétrica está definida como una matriz cuadrada [NxN] de la siguiente forma: P(i,1) = P(1,j) = 1 para todo i,j P(i,j) = P(i#1,j) + P(i,j#1) para i,j > 1 Escribe un programa en Fortran que calcule una matriz de Pascal de orden n. Se asume que el tamaño de la matriz será como mucho de 10x10. El usuario introduce un valor para n, por teclado, y el programa calculará la matriz mostrándola por pantalla. Aquí debajo tienes un ejemplo de matriz de Pascal con N=5. 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70 PROGRAM pascal IMPLICIT NONE INTEGER, PARAMETER :: n=10 INTEGER, DIMENSION (n,n) :: matriz INTEGER :: i, j, tam=0 DO WHILE (tam.LT.1.OR.tam.GT.10) PRINT*, “Introduzca un valor entre 1 y 10” READ*, tam ENDDO DO i=1, tam DO j=1,tam matriz(i,j)=1 ENDDO ENDDO DO i=2,tam DO j=2,tam matriz(i,j)=matriz(i#1,j)+matriz(i,j#1) ENDDO ENDDO PRINT*, “La matriz de pascal de orden”, tam,”es:” DO i=1,5 PRINT*, (matriz(i,j), j=1,5) ENDDO END PROGRAM

2. Desarrollar un programa que permita almacenar en un vector datos de temperatura (en grados centígrados) para la estación de invierno de Sierra Nevada. El vector contendrá 24 registros de temperatura (de las 0 a las 23h). El programa calculará la temperatura máxima y mínima, así como la media. Además deberá mostrar la hora a la que se producen la temperatura máxima y mínima. Nota: En caso de que dicha temperatura se de en diferentes horas, debes indicarlos todos. PROGRAM temperaturas IMPLICIT NONE INTEGER, PARAMETER :: N=24 REAL, DIMENSION (N) :: v, hora INTEGER :: i REAL :: max, min, cantidad, media DO i=1,24 PRINT*, “Introduzca la temperatura en grados centígrados de las”, i#1,”horas” READ*, v(i) ENDDO cantidad=v(1) max=1 min=1 DO i=2, 24 cantidad=cantidad+v(i) IF (v(i).GT.v(max)) THEN max=i ELSEIF (v(i).LT.v(min)) THEN min=i ENDIF ENDDO media=cantidad/N PRINT*, “La temperatura máxima es:”, v(max),”y se da a las:” DO i=1,24 IF (v(i).EQ.v(max)) THEN PRINT*, i#1,”horas” ENDIF ENDDO PRINT*, “La temperatura mínima es:”, v(min),”y se da a las:” DO i=1,24 IF (v(i).EQ.v(min)) THEN PRINT*, i#1,”horas” ENDIF ENDDO PRINT*, “La temperatura media es:”, media END PROGRAM

3. Haz un programa que lea una matriz A de 2 dimensiones por teclado y que obtenga otra matriz B tal que el elemento B(i,j) sea: o bien A(i,2j)+A(i,2j#1) si el máximo de la columna 2j de la matriz A es mayor que el máximo de la columna 2j#1 o bien A(i,2j)# A(i,2j#1) en caso contrario. Nota: Podemos asumir que la matriz A tiene como tamaño máximo 100x100 y que tiene un número par de columnas (por tanto la matriz B tiene como máximo 50 columnas). PROGRAM matriz2x2 IMPLICIT NONE INTEGER, PARAMETER :: max=100 INTEGER, DIMENSION (max,max) :: A, B INTEGER :: i, j, tam1, tam2, max1, max2 PRINT*, "Dime el número de filas y de columnas de la matriz" READ*, tam1,tam2 PRINT*, "Dime la matriz por filas" DO i=1,tam1 DO j=1,tam2 READ*, A(i,j) ENDDO ENDDO j=1 DO WHILE (j.LE.tam2/2) max1=A(1,2*j) DO i=2,tam1 IF (A(i,2*j).GT.max1) max1=A(i,2*j) ENDDO max2=A(1,2*j#1) DO i=2,tam1 IF (A(i,2*j#1).GT.max2) max2=A(i,2*j#1) ENDDO IF (max1.GE.max2) THEN DO i=1,tam1 B(i,j)=A(i,2*j)+A(i,2*j#1) ENDDO ELSE DO i=1,tam1 B(i,j)=A(i,2*j)#A(i,2*j#1) ENDDO ENDIF j=j+1 ENDDO PRINT*, "La matriz introducida es" DO i=1, tam1 PRINT*, (A(i,j), j=1,tam2) ENDDO PRINT*, "La matriz obtenida es" DO i=1,tam1 PRINT*, (B(i,j),j=1,tam2/2) ENDDO END PROGRAM

4. Haga un programa que lea una matriz por teclado de tamaño M x N (cómo máximo, M y N pueden valer 100). A continuación, el programa debe calcular la suma de los máximos de las filas pares siempre y cuando estos sean números impares. Por ejemplo, dada la matriz: 1324536574 3 4 2 3 4 5 4 6 8 9 → máximo=9 3768453486 3 0 3 6 2 4 1 3 2 4 → máximo=6 4372879071 3 5 4 6 2 7 5 6 4 3 →máximo=7 La suma que se pide es 9+7=16. PROGRAM sumamaximos IMPLICIT NONE INTEGER, PARAMETER :: max=100 INTEGER, DIMENSION (max,max) :: matriz INTEGER :: fil, col, i, j, maximo, total=0 PRINT*, "Introduce el número de filas y de columnas de la matriz" READ*, fil,col PRINT*, "Introduce la matriz por filas" DO i=1,fil READ*, matriz(i,1:col) ENDDO DO i=2,fil,2 maximo=matriz(i,1) DO j=2,col IF (matriz(i,j).GT.maximo) maximo=matriz(i,j) ENDDO IF (mod(maximo,2).NE.0) THEN total=total+maximo ENDIF ENDDO PRINT*, "La suma de los máximos impares de las filas pares es:", total END PROGRAM

5. Escriba un programa modular con al menos un subprograma que permita codificar el nombre de una persona de acuerdo al siguiente algoritmo: leer el nombre y los dos apellidos (en tres cadenas de caracteres diferentes) y calcular, e imprimir, el código concatenando las tres primeras letras del primer apellido, las tres primeras letras del segundo apellido y las tres primeras letras del nombre. Por ejemplo, “Juan Pérez García” (omitimos las tildes) se codifica como “PerGarJua”. Se entiende que tanto nombres como apellidos tienen al menos tres letras. El programa principal estará pidiendo datos y mostrado códigos hasta que el usuario decida terminar. PROGRAM codnombre IMPLICIT NONE CHARACTER (LEN=20) :: nombre, apellido1, apellido2 INTEGER :: opc LOGICAL :: seguir=.TRUE. DO WHILE (seguir) PRINT*, "Introduzca el nombre y los apellidos" READ*, nombre, apellido1, apellido2 PRINT*, "El nombre codificado es:", codificado(nombre,apellido1,apellido2) PRINT*, "Si desea seguir introduciendo nombres pulse 1 si no cualquier otro número" READ*, opc IF (opc.NE.1) seguir=.FALSE. ENDDO CONTAINS FUNCTION codificado(n,a1,a2) CHARACTER (LEN=9) :: codificado CHARACTER (LEN=20) :: n, a1, a2 codificado=n(1:3)//a1(1:3)//a2(1:3) END FUNCTION codificado END PROGRAM

6. Escriba un programa que multiplique dos matrices de hasta 50x50 y lo guarde en una tercera. PROGRAM multmatrices IMPLICIT NONE INTEGER, PARAMETER :: max=50 INTEGER, DIMENSION (max,max) :: A, B, C INTEGER :: fil, col, col1, i, j, k, total=0 PRINT*, "Introduzca el número de filas y columnas de la primera matriz" READ*, fil,col PRINT*, "Introduzca dicha matriz por filas" DO i=1,fil READ*, A(i,1:col) ENDDO PRINT*, "Introduzca el número de columnas de la segunda matriz" READ*, col1 PRINT*, "Introduzca esta última matriz por filas" DO i=1,col READ*, B(i,1:col1) ENDDO DO i=1,fil DO j=1,col1 DO k=1,col total=total+A(i,k)*B(k,j) ENDDO C(i,j)=total total=0 ENDDO ENDDO PRINT*, "La matriz A es:" DO i=1,fil PRINT*, A(i,1:col) ENDDO PRINT*, "La matriz B es:" DO i=1,col PRINT*, B(i,1:col1) ENDDO PRINT*, "El resultado d multiplicar A*B es:" DO i=1,fil PRINT*, C(i,1:col1) ENDDO END PROGRAM...


Similar Free PDFs