MATRIZES
1) Faça um programa em Fortran que recebe como parâmetro uma matriz A (nxn) de números
reais. Esse programa deve informar
(a) a soma dos elementos da coluna “n”
(b) a soma dos elementos da diagonal principal da matriz e
(c) a soma dos elementos acima da diagonal principal
(d) o número de células da matriz que têm valor menor que a média dos valores das
células da matriz,
program numero_6
integer i,j,n,soma,cont,A(100,100)
real media
print *,'entre com a dimensao da Matriz A (nxn)'
print *,'n = '
read *, n
if (n .gt. 100) then
print *,'dimensao maior que o maximo'
stop
endif
print *,'entre com os elementos de A'
do i=1, n, 1
do j=1, n, 1
print '(a12,i3,a1,i3,a4,$)','elemento A(',i,',',j,') = '
read *, A(i,j)
end do
end do
soma = 0
do i=1, n, 1
soma = soma + A(i,n)
end do
print *,'Soma dos elementos da coluna n de A = ',soma
soma = 0
do i=1, n, 1
soma = soma + A(i,i)
end do
print *,'Soma da diagonal principal = ',soma
soma = 0
do i=1, n, 1
do j=1, n, 1
if (j .gt. i) then
soma = soma + A(i,j)
endif
end do
end do
print *,'Soma acima da diagonal principal = ',soma
soma = 0
do i=1, n, 1
do j=1, n, 1
soma = soma + A(i,j)
end do
end do
media = float(soma) / float(n*n)
print *,'media = ',media
cont = 0
do i=1, n, 1
do j=1, n, 1
if (A(i,j) .lt. media) then
cont = cont + 1
endif
end do
end do
print *,'menores que media = ',cont
print *,'matriz A'
do i=1, n, 1
do j=1, n, 1
print '(i3,a2,$)', A(i,j),' '
end do
print '(a1)',' '
end do
end
2) Faça um programa em Fortran que receba uma matriz A (nx m) e diga se esta matriz é
simétrica
program numero_7
integer i,j,n,m,A(100,100)
print *,'entre com a dimensao da Matriz A (nxm)'
print *,'n = '
read *, n
print *,'m = '
read *, m
if ((n .gt. 100) .OR. (m .gt. 100)) then
print *,'dimensao maior que o maximo'
stop
endif
if (n .ne. m) then
print *,'matriz nao simetrica'
stop
endif
print *,'entre com os elementos de A'
do i=1, n, 1
do j=1, m, 1
print '(a12,i3,a1,i3,a4,$)','elemento A(',i,',',j,') = '
read *, A(i,j)
end do
end do
do i=1, n, 1
do j=1, m, 1
if (A(i,j) .ne. A(j,i)) then
print *,'matriz nao simetrica'
stop
endif
end do
end do
print *,'matriz simetrica'
end
3) Faça um programa em Fortran que receba uma matriz A (nxn) e calcule e escreva o menor
elemento e a sua posição (índices) de sua área hachurada. A Figura a) fornece um exemplo de
uma matriz A (12x12)
program numero_8
integer i,j,n,menor,i_m,j_m,A(100,100)
print *,'entre com a dimensao da Matriz A (nxn)'
print *,'n = '
read *, n
if (n .gt. 100) then
print *,'dimensao maior que o maximo'
stop
endif
print *,'entre com os elementos de A'
do i=1, n, 1
do j=1, n, 1
print '(a12,i3,a1,i3,a4,$)','elemento A(',i,',',j,') = '
read *, A(i,j)
end do
end do
menor = A(1,n) ! Elemento inicial
do i=1, n, 1
do j=1, n, 1
if (i .ge. n+1-j) then
if (A(i,j) .le. menor) then
menor = A(i,j)
i_m = i
j_m = j
endif
endif
end do
end do
print *, 'menor elemento = ',menor
print *, 'i = ',i_m,' j = ',j_m
end
4) Faça um programa em Fortran que receba uma matriz A (nx m) e divida cada um dos “n”
elementos de cada uma das “m” colunas pelo maior elemento em módulo daquela coluna.
Imprima a matriz modificada
program numero_9
integer i,j,n,m
real maior,A(100,100)
print *,'entre com a dimensao da Matriz A (nxm)'
print *,'n = '
read *, n
print *,'m = '
read *, m
if ((n .gt. 100) .OR. (m .gt. 100)) then
print *,'dimensao maior que o maximo'
stop
endif
print *,'entre com os elementos de A'
do i=1, n, 1
do j=1, m, 1
print '(a12,i3,a1,i3,a4,$)','elemento A(',i,',',j,') = '
read *, A(i,j)
end do
end do
do j=1, m, 1
maior = ABS(A(1,j)) ! Elemento Inicial
do i=1, n, 1
if (ABS(A(i,j)) .gt. maior) then
maior = ABS(A(i,j))
endif
end do
do i=1, n, 1
! Divide coluna
A(i,j) = A(i,j) / maior
end do
end do
print *,'matriz A modificada'
do i=1, n, 1
do j=1, m, 1
print '(f10.6,a2,$)', A(i,j),' '
end do
print '(a1)',' '
end do
end
5) Faça um programa em Fortran que receba duas matrizes A (nx n) e B (nxn) e
(a) imprime as matrizes A e B,
(b) imprima a soma das matrizes (A+B),
(c) imprime a diferença das matrizes (A-B)
(d) imprima a multiplicação das matrizes (AxB)
(e) imprima a transposta de A
program numero_10
integer i,j,k,n,A(100,100),B(100,100),C(100,100)
print *,'entre com a dimensao das Matrizes'
print *,'n = '
read *, n
if (n .gt. 100) then
print *,'dimensao maior que o maximo'
stop
endif
print *,'entre com os elementos de A'
do i=1, n, 1
do j=1, n, 1
print '(a12,i3,a1,i3,a4,$)','elemento A(',i,',',j,') = '
read *, A(i,j)
end do
end do
print *,'entre com os elementos de B'
do i=1, n, 1
do j=1, n, 1
print '(a12,i3,a1,i3,a4,$)','elemento B(',i,',',j,') = '
read *, B(i,j)
end do
end do
print *,'matriz A'
do i=1, n, 1
do j=1, n, 1
print '(i3,a2,$)', A(i,j),' '
end do
print '(a1)',' '
end do
print *,'matriz B'
do i=1, n, 1
do j=1, n, 1
print '(i3,a2,$)', B(i,j),' '
end do
print '(a1)',' '
end do
print *,'A + B'
do i=1, n, 1
do j=1, n, 1
print '(i3,a2,$)', A(i,j)+B(i,j),' '
end do
print '(a1)',' '
end do
print *,'A - B'
do i=1, n, 1
do j=1, n, 1
print '(i3,a2,$)', A(i,j) - B(i,j),' '
end do
print '(a1)',' '
end do
do i = 1,n,1
do j = 1,n,1
C(i,j) = 0
do k = 1, n, 1
C(i,j) = C(i,j) + A(i,k) * B(k,j)
end do
end do
end do
print *,'AxB'
do i=1, n, 1
do j=1, n, 1
print '(i3,a2,$)', C(i,j),' '
end do
print '(a1)',' '
end do
print *,'A^T'
do i=1, n, 1
do j=1, n, 1
print '(i3,a2,$)', A(j,i),' '
end do
print '(a1)',' '
end do
end
6) Faça um programa em Fortran que receba uma matriz A (nxn) e calcule e escreva a média
dos elementos da sua área hachurada. A Figura b) fornece um exemplo de uma matriz A
(12x12)
program numero_11
integer i,j,n,cont,A(100,100)
real media
print *,'entre com a dimensao da Matriz A (nxn)'
print *,'n = '
read *, n
if (n .gt. 100) then
print *,'dimensao maior que o maximo'
stop
endif
print *,'entre com os elementos de A'
do i=1, n, 1
do j=1, n, 1
print '(a12,i3,a1,i3,a4,$)','elemento A(',i,',',j,') = '
read *, A(i,j)
end do
end do
! DP = Diagonal Principal
! DS = Diagonal Secundaria
cont = 0
media = 0
do i=1, n, 1
do j=1, n, 1
if (i .lt. j) then ! acima da DP
if (i .lt. n+1-j) then ! acima da DS
media = media + A(i,j)
cont = cont + 1
endif
endif
if (i .gt. j) then ! abaixo da DP
if (i .gt. n+1-j) then ! abaixo da DS
media = media + A(i,j)
cont = cont + 1
endif
endif
end do
end do
print *, 'media = ', media / cont
end
7) Faça um programa em Fortran que receba uma matriz A (nxm) e ordene os elementos de
cada linha da matriz. Imprimir o resultado
program numero_12
integer i,j,k,n,m,temp,A(100,100)
print *,'entre com as dimensoes do vetor A(nxm)'
print *,'n = '
read *, n
print *,'m = '
read *, m
if ((n .gt. 100) .OR. (m .gt. 100)) then
print *,'dimensao maior que o maximo'
stop
endif
print *,'entre com os elementos de A'
do i=1, n, 1
do j=1, m, 1
print '(a12,i3,a1,i3,a4,$)','elemento A(',i,',',j,') = '
read *, A(i,j)
end do
end do
print *,'matriz A'
do i=1, n, 1
do j=1, m, 1
print '(i3,a2,$)', A(i,j),' '
end do
print '(a1)',' '
end do
do k=1, n, 1
do i=1, m, 1
do j=1, m-1, 1
if (A(k,j) .gt. A(k,j+1)) then
temp
= A(k,j)
A(k,j) = A(k,j+1)
A(k,j+1) = temp;
end if
end do
end do
end do
print *,'matriz A com linhas ordenadas'
do i=1, n, 1
do j=1, m, 1
print '(i3,a2,$)', A(i,j),' '
end do
print '(a1)',' '
end do
end
Download

Gabarito 4