Baixe o app para aproveitar ainda mais
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
Compartilhar