Buscar

Exercícios de Agregados Homogêneos

Prévia do material em texto

Exercícios de Agregados Homogêneos
 PROGRAM L4EXERC1
c Ler e imprimir um conjunto com N elementos inteiros.
c Imprimir o maior elemento do conjunto. Imprimir tambem a posição.
 INTEGER N, ConjInt(50), MaxElem, Posicao, I
 PARAMETER (MaxElem=50)
 
c sera lido o num de elementos do conjunto
 PRINT*, ‘Digite numero de elementos do conjunto (Max:50)’
 READ(*,*) N
 10 FORMAT(I2)
 IF (N .GT. MaxElem) THEN
 PRINT*,'Numero maximo de elementos previsto: ',MaxElem
 STOP
 ENDIF
 PRINT*, 'Numero de elementos do conjunto:', N
 PRINT*
 PRINT*, ‘Digite N elementos para o conjunto.’
 READ(*,*) (ConjInt(I), I = 1, N)
 PRINT*, ' Elementos do conjunto lidos apos digitacao.'
 WRITE(*,30) (ConjInt(I), I = 1, N)
 30 FORMAT(20(I4,2X))
 Posicao = 1
 DO I = 2, N
 IF (ConjInt(I) .GT. ConjInt(Posicao)) THEN
 Posicao = I
 ENDIF
 ENDDO
 PRINT*
 PRINT*, 'Maior elemento:', ConjInt(Posicao)
 PRINT*, 'Posicao no conjunto:', Posicao
 STOP
 END
 PROGRAM L3EXERC2
c Ler e imprimir um conjunto com elementos reais.
c A leitura termina com o valor -1.Imprimir o menor elemento do
c conjunto, sua posicao e o numero de elementos processados.
 REAL ConjReal(20), ValorLido, Flag
 INTEGER NElem, I, Posicao
 PARAMETER(Flag = -1)
c Ler conjunto com valores inteiros ate valor lido for -1
 NElem = 0
 PRINT*, ‘Digite o primeiro valor do conjunto’.
 READ(*,*) ValorLido
 DO WHILE (ValorLido .NE. Flag)
 NElem = NElem + 1
c Defender posicao considerada com respeito ao tamanho do conjunto (20)
 IF ( NElem .GT. 20) THEN
 PRINT*,'O numero de elementos deve ser <= a 20.
 * Programa sera encerrado.'
 STOP
 ENDIF
 ConjReal(NElem) = ValorLido
 PRINT*, ‘Digite proximo valor do conjunto’.
 READ(7,10) ValorLido
 ENDDO
 PRINT*
 PRINT*, 'Numero de elementos do conjunto:', NElem
 PRINT*
c Imprimir conjunto com NElem valores
 WRITE(*,15) (ConjReal(I), I = 1, NElem)
 15 FORMAT( 20( F6.2, 2X ) )
 Posicao = 1
 DO I = 2, NElem
 IF (ConjReal(I) .LT. ConjReal(Posicao)) THEN
 Posicao = I
 ENDIF
 ENDDO
 PRINT*
 PRINT*, 'Menor elemento:', ConjReal(Posicao)
 PRINT*, 'Posicao no conjunto:', Posicao
 STOP
 END
 PROGRAM L4EXERC3
c Gerar e imprimir a serie de Fibonacci com K termos.
 INTEGER Fib(50), K, I, MaxElem
 PARAMETER(MaxElem = 50)
 PRINT*, ‘Digite o numero de elementos da serie.’
 READ(*,*) K
 IF (K .GT. MaxElem) THEN
 PRINT*,'Numero maximo de elementos previsto: ',MaxElem
 STOP
 ENDIF
 PRINT*, 'Numero de elementos do conjunto:', K
 PRINT*
 Fib(1) = 0
 Fib(2) = 1
 DO I = 3, K
 Fib(I) = Fib(I-1) + Fib(I-2)
 ENDDO
 PRINT*, 'Serie de Fibonacci gerada:'
 WRITE(*,11)(Fib(I), I = 1, K)
 11 FORMAT(10(I5, 2X))
 STOP
 END
 PROGRAM L4EXERC4
c Gerar e imprimir a serie de Fibonacci cujo ultimo termo seja
c menor do que 100.
 INTEGER Fib(50), N, MaxElem, I
 PARAMETER( MaxElem = 50)
 Fib(1) = 0
 Fib(2) = 1
 N = 2
 DO WHILE (Fib(N) .LT. 100)
 N = N + 1
 IF (N .GT. MaxElem) THEN
 PRINT*,'Numeros maximo de elementos previsto: ',MaxElem
 STOP
 ENDIF
 Fib(N) = Fib(N-1) + Fib(N-2)
 ENDDO
c descartar ultima posicao que contera valor > ou = a 100 
 N = N - 1
 PRINT*, 'Serie de Fibonacci gerada:'
 WRITE(*,11)(Fib(I), I = 1, N)
 11 FORMAT(5(I3, 2X))
 STOP
 END
 PROGRAM L4EXERC5
c Ler e imprimir um conjunto de P valores inteiros. A seguir ler 5
c valores inteiros, um a um ,e imprimir com mensagem se o valor lido
c pertence ou nao ao conjunto.
 INTEGER P, Conj (20), I, J, ValorLido
 LOGICAL Pertence
 PRINT*, ‘Digite o numero de elementos do conjunto.(Max:20)’
 READ(*,*) P
 IF ( P .GT. 20) THEN
 PRINT*, 'O numero de elementos deve ser menor ou igual a 20.'
 PRINT*, 'Programa sera encerrado.'
 STOP
 ENDIF
 PRINT*, 'Numero de elementos do conjunto:', P
 PRINT*
c Ler conjunto com P valores inteiros
 READ(*,*)(Conj(I), I = 1, P)
 PRINT*, 'Conjunto lido apos digitação.'
 WRITE(*,12) (Conj(I), I = 1, P)
 12 FORMAT( 20( I4, 2X ) )
c ler 5 valores e verificar se ocorrem no conjunto
 DO J = 1, 5
 PRINT*, ‘Digite valor para verificar ocorrencia.’
 READ(*,*) ValorLido
c verificar se valor ocorre no conjunto
 I = 1
 Pertence = .FALSE.
 DO WHILE ( (I .LE. P) .AND. (.NOT. Pertence) )
 IF (ValorLido .EQ. Conj(I)) THEN
 Pertence = .TRUE.
 ELSE
 I = I + 1
 ENDIF
 ENDDO
 PRINT*
 IF (Pertence) THEN
 PRINT*, ValorLido, ' pertence ao conjunto.'
 ELSE
 PRINT*, ValorLido, ' nao pertence ao conjunto.'
 ENDIF
 ENDDO
 STOP
 END
 PROGRAM L4EXERC6
c Dados dois conjuntos A e B com M e N elementos respect/,
c ordenados de forma crescente,gerar e imprimir um conjunto C,
c ordenado de forma crescente, que sera obtido intercalando-se
c os elementos de A com B sem repeticao de elementos.
 INTEGER A(20), B(20), C(40), M, N, K, I, J, MaxElem
 PARAMETER (MaxElem = 20)
 PRINT*, ‘Digite o numero de elementos dos conjuntos A e B (Max:20).’
 READ(*,*) M, N
c Defender valores lidos com respeito ao tamanho do conjunto (20)
 IF ( (M .GT. MaxElem) .OR. (N .GT. MaxElem)) THEN
 PRINT*,'O numero de elementos deve ser menor ou igual a 20'
 PRINT*, 'Programa sera encerrado.'
 STOP
 ENDIF
 PRINT*, 'Numero de elementos do conjunto A:', M
 PRINT*
 PRINT*, 'Numero de elementos do conjunto B:', N
 PRINT*
 PRINT*, ‘Digite os ‘ , M, ‘ elementos do conjunto A.’
 READ(*,*)(A(I), I = 1, M)
 PRINT*, ‘Digite os ‘ , N, ‘ elementos do conjunto B.’
 READ(*,*)(B(I), I = 1, N)
 PRINT*, 'Conjunto A lido.'
 WRITE(*,12) (A(I), I = 1, M)
 PRINT*
 PRINT*, 'Conjunto B lido.'
 WRITE(*,12) (B(I), I = 1, N)
 12 FORMAT( 12( I4, 2X ) )
c gerar conjunto C intercalando elementos de A com B
 I = 1
 J = 1
 K = 0
 DO WHILE ((I .LE. M) .AND. (J .LE. N))
 K = K + 1
 IF (A(I) .EQ. B(J)) THEN
 C(K) = A(I)
 I = I + 1
 J = J + 1
 ELSE
 IF (A(I) .LT. B(J)) THEN
 C(K) = A(I)
 I = I + 1
 ELSE
 C(K) = B(J)
 J = J + 1
 ENDIF
 ENDIF
 ENDDO
 DO WHILE (I .LE. M)
 K = K + 1
 C(K) = A(I)
 I = I + 1
 ENDDO
 DO WHILE (J .LE. N)
 K = K + 1
 C(K) = B(J)
 J = J + 1
 ENDDO
 
 PRINT*
 PRINT*, 'Conjunto C gerado pela intercalacaode A com B.'
 WRITE(*,12) (C(I), I = 1, K)
 CLOSE (7)
 STOP
 END
 PROGRAM L4EXERC7
c Ler e imprimir um conjunto com W elementos reais. Ordenar os
c elementos do conjunto em ordem crescente e imprimir o conjunto ordenado.
 REAL Conj(20), Aux
 INTEGER W, Tam, I, MaxElem
 LOGICAL Ordenado
 PARAMETER(MaxElem = 20)
 PRINT*, ‘Digite o numero de elementos do conjunto (Max:20).’
 READ(*,*) W
 IF (W .GT. MaxElem) THEN
 PRINT*,'Numeros maximo de elementos previsto: ',MaxElem
 STOP
 ENDIF
 PRINT*, 'Numero de elementos do conjunto:', W
 PRINT*
 PRINT*, ‘Digite os ‘ ,W, ‘ elementos do conjunto.’
 READ(*,*)(Conj(I), I = 1, W)
 PRINT*, 'Conjunto lido.'
 WRITE(*,12)(Conj(I), I = 1, W)
 12 FORMAT(20(F6.2, 2X))
c Ordenar elementos do conjunto
 Tam = W
 Ordenado = .FALSE.
 DO WHILE ((Tam .GT. 1) .AND. (.NOT. Ordenado))
 Ordenado = .TRUE.
 DO I = 1, Tam-1
 IF ( Conj(I) .GT. Conj(I+1) ) THEN
 Aux = Conj(I)
 Conj(I) = Conj(I+1)
 Conj(I+1) = Aux
 Ordenado = .FALSE.
 ENDIF
 ENDDO
 Tam = Tam - 1
 ENDDO
c Imprimir conjunto ordenado
 PRINT*
 PRINT*, 'Conjunto ordenado de forma crescente'
 WRITE(*,12) (Conj(I), I = 1, W)
 CLOSE (7)
 STOP
 END
 Program L4EXERC8
c Ler e imprimir dois conjuntos ConjA e ConjB com M e N elementos respec.
c Gerar e imprimir os seguintes conjuntos:UNIAO=A U B INTER=A^B 
 DIFER = A - B .
 INTEGER ConjA(20), ConjB(20), AuniB(20), AinterB(20),AdifB(20),
 * NElemA, NElemB, NAuB, NAiB, NAdB, I, MaxElem
 LOGICAL Pertence
 PARAMETER( MaxElem = 20)
 DATA NAuB, NAiB, NAdB/3*0/
 PRINT*, ‘Digite o numero de elementos de ConjA e ConjB (Max:20).’
 READ(*,*) NElemA, NElemB
c Defender valores lidos com respeito ao tamanho do conjunto (20)
 IF ( (NElemA .GT. MaxElem) .OR. (NElemB .GT. MaxElem)) THEN
 PRINT*,'O numero de elementos deve ser <= ', MaxElem
 PRINT*, 'Programa sera encerrado.'
 STOP
 ENDIF
 PRINT*, 'Numero de elementos do conjunto A:', NElemA
 PRINT*
 PRINT*, 'Numero de elementos do conjunto B:', NElemB
 PRINT*
 READ(*,*)(ConjA(I), I = 1, NElemA)
 READ(*,*)(ConjB(I), I = 1, NElemB)
 PRINT*, 'Conjunto A lido apos digitacao.'
 WRITE(*,20) (ConjA(I), I = 1, NElemA)
 PRINT*
 PRINT*, 'Conjunto B lido apos digitacao.'
 WRITE(*,20) (ConjB(I), I = 1, NElemB)
 20 FORMAT( 12( I4, 2X ) )
c uniao de conjuntos (ConjA, NElemA, ConjB, NElemC, AuniB,
c NAuB);
c ConjA esta contido na uniao
 DO I= 1, NElemA
 AuniB(I) = ConjA(I)
 ENDDO
 NAuB = NElemA
c elementos de ConjB que nao Pertencem a ConjA
 DO I = 1, NElemB
 Pertence = .FALSE.
 J = 1
 DO WHILE ((J .LE. NElemA) .AND. ( .NOT. Pertence))
 IF (ConjB(I) .EQ. ConjA(J)) THEN
 Pertence = .TRUE.
 ELSE
 J = J + 1
 ENDIF
 ENDDO
 IF (.NOT. Pertence) THEN
 NAuB = NAuB + 1
 AuniB(NAuB) = ConjB(I)
 ENDIF
 ENDDO
c intersecao de conjuntos (ConjA, NElemA, ConjB, NElemB,
c AinterB, NAiB)
 DO I = 1, NElemA
 Pertence = .FALSE.
 J = 1
 DO WHILE ((J .LE. NElemB) .AND. ( .NOT. Pertence))
 IF (ConjA(I) .EQ. ConjB(J)) THEN
 Pertence = .TRUE.
 ELSE
 J = J + 1
 ENDIF
 ENDDO
 IF (.NOT. Pertence) THEN
 NAiB = NAiB + 1
 AinterB(NAiB) = ConjA(I)
 ENDIF
 ENDDO
c diferenca de conjuntos (ConjA, NElemA, ConjB, NElemB,
c AdifB, NAdB);
 DO I = 1, NElemA
 Pertence = .FALSE.
 J = 1
 DO WHILE ((J .LE. NElembB) .AND. ( .NOT. Pertence))
 IF (ConjA(I) .EQ. ConjB(J)) THEN
 Pertence = .TRUE.
 ELSE
 J = J + 1
 ENDIF
 ENDDO
 IF (.NOT. Pertence) THEN
 NAdB = NAdB + 1
 AdifB(NAdB) = ConjA(I)
 ENDIF
 ENDDO
c imprimir conjunto AuniB com NAuB elementos
 PRINT*
 PRINT*, 'Elementos do Conjunto AvB'
 WRITE(*,25) (AuniB(I), I = 1, NAuB)
c imprimir conjunto AinterB com NAiB elementos;
 PRINT*
 PRINT*, 'Elementos do Conjunto A inter B'
 WRITE(*,25) (AinterB(I), I = 1, NAiB)
c imprimir conjunto AdifB com NAdB elementos;
 PRINT*
 PRINT*, 'Elementos do Conjunto A-B'
 WRITE(*,25) (AdifB(I), I = 1, NAdB)
 25 FORMAT(3X, 10(I4, 2X ) )
 STOP
 END
 
 PROGRAM L4EXERC9
c C Ler e imprimir a matricula, o nome (TabAluno(Matricula,Nome))
c e a nota de uma prova de uma turma (TabProva(Aluno)),
c com no maximo, 30 alunos. Calcular, armazenar e imprimir a media
c aritmetica da prova. A seguir imprimir matricula, nome e a nota dos
c alunos cuja nota seja maior ou igual a media da prova.
 CHARACTER Matric*5, Nome*30, TabAlunos(30,2)*30
 REAL Nota, Media, TabProva(31), Soma
 INTEGER Mat, Alunos, MaxAlu, I
 PARAMETER (MaxAlu = 30)
 DATA Mat, Alunos/2*0/
 
 PRINT*, 'Digite primeira matricula.'
 READ(*,10) Matric
 10 FORMAT(A5) 
 DO WHILE (Matric .NE. ‘00000’)
 PRINT*,’Digite nome nas primeiras 20 pos e nota nas 5 proxs.’
 READ(*, 20) Nome, Nota
 20 FORMAT(A30, F5.2)
 Mat = Mat + 1
 IF (Mat .GT. MaxAlu) THEN
 PRINT*,' Num de alunos ultrapassa ', MaxAlu
 PRINT*,' Programa sera encerrado.'
 STOP
 ENDIF
 TabAlunos(Mat,1) = Matric
 TabAlunos(Mat,2) = Nome
 Alunos = Alunos + 1
 TabProva(Alunos) = Nota
 PRINT*, 'Digite proxima matricula (00000-encerra).'
 READ(*,10) Matric
 ENDDO
 PRINT*
 PRINT*,' Informacoes dos alunos após digitacao.'
 DO I = 1, Mat
 PRINT*
 WRITE(*,40) TabAlunos(I,1), TabAlunos(I,2), TabProva(I)
 40 FORMAT(5X, A5, 2x, A30, 2X, F5.2)
 ENDDO
c calcular media da prova
 Soma = 0
 DO I = 1, Alunos
 Soma = Soma + TabProva(I)
 ENDDO
 Media = Soma/Alunos
 TabProva(Alunos+1) = Media
 PRINT*
 PRINT*,' Total de Provas/Alunos:', Alunos
 PRINT*
 WRITE(*,50) TabProva(Alunos+1)
 50 FORMAT(3X, 'Media da prova:', F5.2)
 PRINT*
c imprimir dados dos alunos com nota >= a media da prova
 PRINT*, ' Alunos com nota >= a media da prova.'
 DO I = 1, Alunos
 IF (TabProva(I) .GE. TabProva(Alunos+1)) THEN
 PRINT*
 WRITE(*,40) TabAlunos(I,1), TabAlunos(I,2), TabProva(I)
 ENDIF
 ENDDO
 STOP
 END
 
PROGRAM L4EXERC10
c Ler e imprimir um conjunto de valores reais. Encontrar e imprimir
c os doismaiores valores lidos e imprima quantos destes valores
c foram lidos. O conjunto devera ser varrido uma unica vez.
 REAL Conj(20), Maior1, Maior2, ValorLido
 INTEGER TotM1, TotM2, I, MaxElem, NElem
 PARAMETER(MaxElem = 20)
 
 NElem = 0
 PRINT*, 'Digite primeiro valor do conjunto.'
 READ(*,*) ValorLido
 DO WHILE (ValorLido .NE. -5555)
 NElem = NElem + 1
 IF (NElem .GT. MaxElem) THEN
 PRINT*,' Num de valores lidos ultrapassa ', MaxElem
 PRINT*,' Programa sera encerrado.'
 STOP
 ENDIF
 Conj(NElem) = ValorLido
 PRINT*, 'Digite proximo valor do conjunto (-55555-encerra).'
 READ(*,*) ValorLido
 ENDDO
 PRINT*, 'Numero de elementos do conjunto:', NElem
 PRINT*
 PRINT*, 'Conjunto lido apos digitacao.'
 WRITE(*,15) (Conj(I), I = 1, NElem)
 15 FORMAT (3X, 10(F5.2, 2X))
 PRINT*
 Maior1 = Conj(1)
 TotM1 = 1
 Maior2 = Conj(1)
 TotM2 = 1
 DO I = 2, NElem
 IF (Conj(I) .GT. Maior1) THEN
 Maior2 = Maior1
 TotM2 = TotM1
 Maior1 = Conj(I)
 TotM1 = 1
 ELSE
 IF (Conj(I) .EQ. Maior1) THEN
 TotM1 = TotM1 + 1
 ELSE
 IF (Conj(I) .GT. Maior2) THEN
 Maior2 = Conj(I)
 TotM2 = 1
 ELSE
 IF (Conj(I) .EQ. Maior2) THEN
 TotM2 = TotM2 + 1
 ENDIF
 ENDIF
 ENDIF
 ENDIF
 ENDDO
 PRINT*, ' Maior valor do conjunto:', Maior1
 PRINT*, 'Total de valor(es) lido(s):', TotM1
 PRINT*
 PRINT*, ' Segundo maior valor:', Maior2
 PRINT*, 'Total de valor(es) lido(s):', TotM2
 STOP
 END
 PROGRAM L4EXERC11
c Ler e imprimir as matrizes : A mxn, B pxq e C rxs.
c Calcular e imprimir : EXP = A + B * (C * A)T
 INTEGER A(10,10), B(10,10), C(10,10), CxA(10,10), TCxA(10,10),
 * BxTCxA(10,10), Exp(10,10), M, N, P, Q, R, S, Lin, Col,
 * K, MaxInd
 PARAMETER (MaxInd = 10)
 PRINT*, ‘Digite numero de linhas e colunas matriz A(Max:10).’
 READ(*,*) M, N
 IF (( M.GT.MaxInd) .OR. ( N.GT.MaxInd)) THEN
 PRINT*,'Dimensao da matriz invalida. Programa sera cancelado.'
 STOP
 ENDIF
 PRINT*, ‘Digite elementos da matriz A(linha por linha).’
 DO Lin = 1, M
 READ(*,*) (A(Lin, Col), Col = 1, N)
 ENDDO
c ler e defender dimensao da matriz B
 PRINT*, ‘Digite numero de linhas e colunas matriz B(Max:10).’
 READ(*,*) P, Q
 IF (( P.GT.MaxInd) .OR. ( Q.GT.MaxInd)) THEN
 PRINT*,'Dimensao da matriz invalida. Programa sera cancelado.'
 STOP
 ENDIF
 PRINT*, ‘Digite elementos da matriz B(linha por linha).’
 DO Lin = 1, P
 READ(*,*) (B(Lin, Col), Col = 1, Q)
 ENDDO
c ler e defender dimensao da matriz C
 PRINT*, ‘Digite numero de linhas e colunas matriz C(Max:10).’
 READ(*,*) R, S
 IF (( R.GT.MaxInd) .OR. ( S.GT.MaxInd)) THEN
 PRINT*,'Dimensao da matriz invalida. Programa sera cancelado.'
 STOP
 ENDIF
 PRINT*, ‘Digite elementos da matriz C(linha por linha).’
 DO Lin = 1, R
 READ(*,*) (C(Lin, Col), Col = 1, S)
 ENDDO
 PRINT*, 'Linhas e colunas da matriz A:', M, N
 PRINT*, 'Linhas e colunas da matriz B:', P, Q
 PRINT*, 'Linhas e colunas da matriz C:', R, S
 PRINT*
 PRINT*, ' MATRIZ A'
 DO Lin = 1, M
 WRITE(*,15) (A(Lin, Col), Col = 1, N)
 ENDDO
 PRINT*
 PRINT*, ' MATRIZ B'
 DO Lin = 1, P
 WRITE(*,15) (B(Lin, Col), Col = 1, Q)
 ENDDO
 PRINT*
 PRINT*, ' MATRIZ C'
 DO Lin = 1, R
 WRITE(*,15) (C(Lin, Col), Col = 1, S)
 ENDDO
 5 FORMAT(2I2)
 10 FORMAT(10I4)
 15 FORMAT (10(I5, 2X))
 
c Calcular C x A, se s = m ( CxA rxn)
 IF (S .NE. M) THEN
 PRINT*, 'Dimensao de C e A incompativeis para operacao.'
 PRINT*, 'Programa cancelado.'
 STOP
 ENDIF
 DO Lin = 1, R
 DO Col = 1, N
 CxA(Lin,Col) = 0
 DO K = 1, M
 CxA(Lin,Col) = CxA(Lin,Col) + C(Lin,K)*A(K,Col)
 ENDDO
 ENDDO
 ENDDO
 PRINT*
 PRINT*, ' MATRIZ CxA'
 DO Lin = 1, R
 WRITE(*,15) (CxA(Lin, Col), Col = 1, N)
 ENDDO
 
c transposta de CxA (TCxA nxr)
 DO Lin = 1, R
 DO Col = 1, N
 TCxA(Lin,Col) = CxA(Col,Lin)
 ENDDO
 ENDDO
 PRINT*, ' MATRIZ TCXA'
 DO Lin = 1, N
 WRITE(*,15) (TCxA(Lin, Col), Col = 1, R)
 ENDDO
 
c Calcular B * (C * A)T (B*TCxA pxr)
 IF (Q .NE. N) THEN
 PRINT*, 'Dimensao de B e TCxA incompativeis para operacao.'
 PRINT*, 'Programa cancelado.'
 STOP
 ENDIF
 DO Lin = 1, P
 DO Col = 1, R
 BxTCxA(Lin,Col) = 0
 DO K = 1, N
 BxTCxA(Lin,Col) = BxTCxA(Lin,Col) + B(Lin,K)*TCxA(K,Col)
 ENDDO
 ENDDO
 ENDDO
 PRINT*
 PRINT*, ' MATRIZ BxTCXA'
 DO Lin = 1, P
 WRITE(*,15) (BxTCxA(Lin, Col), Col = 1, R)
 ENDDO
 
c calcular Exp = A + BxTCxA (Exp mxn)
 IF ((M .NE. P) .OR. (N .NE. R)) THEN
 PRINT*, 'Dimensao de A e BxTCxA incompativeis para operacao.'
 PRINT*, 'Programa cancelado.'
 ENDIF
 DO Lin = 1, M
 DO Col = 1, N
 Exp(Lin,Col) = A(Lin,Col) + BxTCxA(Lin,Col)
 ENDDO
 ENDDO
 PRINT*
 PRINT*, ' EXP = A + B * (C * A)T'
 DO Lin = 1, M
 WRITE(*,15) (Exp(Lin, Col), Col = 1, N)
 ENDDO
 STOP
 END
 PROGRAM L4EXERC12
c Ler e imprimir uma matriz de reais nxn. A seguir:
c imprimir a soma dos elementos da linha Linha;
c imprimir o maior elemento da coluna Coluna;
c calcular e imprimir o produto dos elementos da diagonal principal;
c imprimir a soma dos elementos da diagonal secundaria;
c imprimir os elementos que estao acima da diagonal principal;
 REAL MatReal (20,20), SomaLinha, MaiorCol, ProdDP, SomaDS
 INTEGER Lin, Col, N, MaxInd, Linha, Coluna
 PARAMETER (MaxInd = 20)
c ler e defender dimensao da matriz
 PRINT*, ‘Digite a dimensao da matriz quadrada(Max:20).’
 READ(*,*) N
 IF (N .GT. MaxInd) THEN
 PRINT*,'Dimensao da matriz invalida. Programa sera cancelado.'
 STOP
 ENDIF
 PRINT*, ‘Digite elementos da matriz(linha por linha).’
 DO Lin = 1, N
 READ(*,*) (MatReal(Lin, Col), Col = 1, N)
 ENDDO
 PRINT*, 'Linhas e colunas da matriz nxn:', N
 PRINT*
 PRINT*, ' Matriz Lida'
 DO Lin = 1, N
 WRITE(*,15) (MatReal(Lin, Col), Col = 1, N)
 ENDDO
 5 FORMAT(I2)
 10 FORMAT(20F5.2)
 15 FORMAT (20(F5.2, 2X))
 
c imprimir a soma dos elementos da linha Linha;
 READ(9,5) Linha
 SomaLinha = 0
 DO Col = 1, N
 SomaLinha = SomaLinha + MatReal(Linha,Col)
 ENDDO
 PRINT*WRITE(*,20) Linha, SomaLinha
 20 FORMAT(' Soma do elementos da linha ', I2, ' :', F7.2)
c imprimir o maior elemento da coluna Coluna;
 READ(9,5) Coluna
 MaiorCol = MatReal(1,Coluna)
 DO Lin = 1, N
 IF (MatReal(Lin,Coluna) .GT. MaiorCol) THEN
 MaiorCol = MatReal(Lin,Coluna)
 ENDIF
 ENDDO
 PRINT*
 WRITE(*,25) Coluna, MaiorCol
 25 FORMAT(' Maior elemento da coluna ',I2, ':', F5.2)
 
c imprimir o produto dos elementos da diagonal principal;
 ProdDP = 1
 DO Lin = 1, N
 ProdDP = ProdDP * MatReal(Lin,Lin)
 ENDDO
 PRINT*
 WRITE(*,30) ProdDP
 30 FORMAT(' Produto dos elementos da diag. princ:', F7.2)
c imprimir a soma dos elementos da diagonal secundaria;
 SomaDs = 0
 DO Lin = 1, N
 SomaDS = SomaDS + MatReal(Lin,N-Lin+1)
 ENDDO
 PRINT*
 WRITE(*,35) SomaDS
 35 FORMAT(' Soma dos elementos da diag. sec.:', F7.2)
 
c imprimir os elementos que estao acima da diagonal principal;
 PRINT*
 PRINT*,' Elementos acima da diagonal principal'
 DO Lin = 1, N
 DO Col = Lin+1, N
 Write(*,40) Lin, Col, MatReal(Lin,Col)
 40 FORMAT(10X, '(',I2,',',I2,')', 5x, F5.2)
 ENDDO
 ENDDO
 STOP
 END
 PROGRAM L4EXERC13
c Ler e imprimir a matricula, o nome (TabAluno(Mat,Nome))
c e a nota de tres prova de uma turma, com no maximo, 30 alunos.
c Calcular e armazenar em TabNotas(Aluno, Nota) a media aritmetica
c de cada aluno e de cada prova. Imprimir matricula, nome, as notas
c e as medias dos alunos, e a media das provas da turma.
 CHARACTER Matric*5, Nome*30, TabAlunos(31,2)*30
 REAL TabNotas(31,4), Notas(3), MedAluno, MedProva, Soma
 INTEGER Alunos, MaxAlu, I, J
 PARAMETER (MaxAlu = 30)
 DATA Alunos/0/
 
 PRINT*, ‘Digite a mtricula do primeiro aluno.’
 READ(*,10) Matric
 10 FORMAT(A5)
 DO WHILE (Matric .NE. ‘00000’)
 PRINT*, ‘Digite nome nas 30 primeiras pos e as 3 notas
 c cada uma delas ocupando 5 posicoes.’
 READ(*, 20) Nome, (Notas(I), I = 1, 3)
 20 FORMAT(A30, 3F5.2)
 Alunos = Alunos + 1
 IF (Alunos .GT. MaxAlu) THEN
 PRINT*,' Num de alunos ultrapassa ', MaxAlu
 PRINT*,' Programa sera encerrado.'
 STOP
 ENDIF
 TabAlunos(Alunos,1) = Matric
 TabAlunos(Alunos,2) = Nome
 Alunos = Alunos + 1
 DO J = 1, 3
 TabNotas(Alunos,J) = Notas(J)
 ENDDO
 PRINT*, ‘Digite a mtricula do proximo aluno(00000-encerra).’
 READ(*,10) Matric
 ENDDO
 TabAlunos(Alunos+1,1) = ' '
 TabAlunos(Alunos+1,2) = 'Medias das provas e geral '
 PRINT*
 PRINT*,'Numero de alunos da turma:', Alunos
 PRINT*
 PRINT*,' Informacoes dos alunos lidas do arquivo.'
 DO I = 1, Alunos
 PRINT*
 WRITE(*,40) TabAlunos(I,1), TabAlunos(I,2),
 * (TabNotas(I,J),J=1,3)
 40 FORMAT(5X, A5, 2x, A30, 2X, 3(F5.2, 2X)) ENDDO
c calcular media dos alunos e armazenar na tabela de notas
 DO I = 1, Alunos
 Soma = 0
 DO J = 1, 3
 Soma = Soma + TabNotas(I,J)
 ENDDO
 MedAluno = Soma/3
 TabNotas(I,4) = MedAluno
 ENDDO
c calcular medias das provas e armazenar na tabela de notas
 DO J = 1, 4
 Soma = 0
 DO I = 1, Alunos
 Soma = Soma + TabNotas(I,J)
 ENDDO
 MedProva = Soma/Alunos
 TabNotas(Alunos+1,J) = MedProva
 ENDDO
c a saida tera o seguinte formato (layout)
c Tabela de alunos: notas e medias
c Mat Nome do aluno Nota1 Nota2 Nota3 Media
cxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx.xx xx.xx xx.xx xx.xx
 PRINT*
 PRINT*
 WRITE(*,50)
 50 FORMAT(22X, 'Tabela de alunos: notas e medias')
 PRINT*
 WRITE(*,60)
 60 FORMAT(' Mat Nome do aluno Nota1 Nota2 No
 *ta3 Media')
 DO I = 1, Alunos+1
 WRITE(*,70) TabAlunos(I,1), TabAlunos(I,2),
 * (TabNotas(I,J), J = 1, 4)
 70 FORMAT(A5, 2X, A30, 2X, 4(F5.2, 2X))
 ENDDO
 STOP
 END
 PROGRAM L4EXERC14
c Ler e imprimir a matricula, o nome (TabAluno(Turma, Mat, Nome))
c e a nota de tres prova de duas turmas, cada turma com no maximo
c 30 alunos. A leitura dos dados de uma turma termina quando for
c lida a matricula 00000. 
c A leitura dos dados termina quando for lida a matricula $$$$$.
c Calcular e armazenar no agregado TabNotas(Turma, Aluno, Nota):
c a media aritmetica de cada aluno;
c a media aritmetica de cada prova de cada turma;
c a media aritmetica de cada turma.
c Imprimir as tabelas TabAluno e TabNotas, turma por turma,
c com mensagens apropriadas. 
 CHARACTER Matric*5, Nome*30, TabAlunos(2,31,2)*30
 REAL TabNotas(2,31,4), Notas(3), MedAluno, MedProva, Soma
 INTEGER Alunos, MaxAlu, I, J, AluTurma(2)
 PARAMETER (MaxAlu = 30)
 READ(*,20) Matric, Nome, (Notas(I), I = 1, 3) 
 20 FORMAT(A5, A30, 3F5.2)
 DO WHILE (Matric .NE. '$$$$$')
 Turma = Turma + 1
 Alunos = 0
 DO WHILE ((Matric .NE. '00000')
 Alunos = Alunos + 1
 IF (Alunos .GT. MaxAlu) THEN
 PRINT*,' Num de alunos ultrapassa ', MaxAlu
 PRINT*,' Programa sera encerrado.'
 STOP
 ENDIF
 TabAlunos(Turma,Alunos,1) = Matric
 TabAlunos(Turma,Alunos,2) = Nome
 DO J = 1, 3
 TabNotas(Turma,Alunos,J) = Notas(J)
 ENDDO
 AluTurma(Turma) = Alunos
 PRINT*, ‘Digite matricula 00000 para encerrar turma.’
 READ(*,20) Matric, Nome, (Notas(I), I = 1, 3)
 ENDDO 
 PRINT*, ‘Digite matricula $$$$$ para encerrar digitacao.’
 READ(*,20) Matric, Nome, (Notas(I), I = 1, 3)
 ENDDO
 TabAlunos(Turma,Alunos+1,1) = ' '
 TabAlunos(Turma,Alunos+1,2) = 'Medias das provas e geral '
 DO K = 1, Turma
 PRINT*
 PRINT*,' Numero de alunos da turma ', K, ':',AluTurma(K)
 PRINT*
 PRINT*,' Informacoes dos alunos lidas do arquivo.'
 DO I = 1, AluTurma(K)
 PRINT*
 WRITE(*,40) TabAlunos(K,I,1), TabAlunos(K,I,2),
 * (TabNotas(K,I,J),J=1,3)
 40 FORMAT(5X, A5, 2x, A30, 2X, 3(F5.2, 2X))
 ENDDO
 PRINT*
 ENDDO
c calcular media dos alunos e armazenar na tabela de notas
 DO K = 1, Turma
 DO I = 1, AluTurma(K)
 Soma = 0
 DO J = 1, 3
 Soma = Soma + TabNotas(K,I,J)
 ENDDO
 MedAluno = Soma/3
 TabNotas(K,I,4) = MedAluno
 ENDDO
 ENDDO
c calcular medias das provas e armazenar na tabela de notas
 DO K = 1, Turma
 DO J = 1, 4
 Soma = 0
 DO I = 1, AluTurma(K)
 Soma = Soma + TabNotas(K,I,J)
 ENDDO
 MedProva = Soma/AluTurma(K)
 TabNotas(K,AluTurma(K)+1,J) = MedProvaENDDO
 ENDDO
c a saida tera o seguinte formato (layout)
c Tabela de alunos: notas e medias
c Turma x
c Mat Nome do aluno Nota1 Nota2 Nota3 Media
cxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx.xx xx.xx xx.xx xx.xx
 PRINT*
 PRINT*
 WRITE(*,50)
 50 FORMAT(22X, 'Tabela de alunos: notas e medias')
 DO K = 1, Turma
 PRINT*
 WRITE(*,60) K
 60 FORMAT(32X,'Turma ', I2)
 PRINT*
 WRITE(*,70)
 70 FORMAT(' Mat Nome do aluno Nota1 Nota2
 * Nota3 Media')
 DO I = 1, AluTurma(K)+1
 WRITE(*,80) TabAlunos(K,I,1), TabAlunos(K,I,2),
 * (TabNotas(K,I,J), J = 1, 4)
 80 FORMAT(A5, 2X, A30, 2X, 4(F5.2, 2X))
 ENDDO
 ENDDO
 STOP
 END

Continue navegando