Buscar

Prog. de computadores Gabarito 4

Prévia do material em texto

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

Continue navegando