Programação de Computadores Viviane Torres da Silva [email protected] http://www.ic.uff.br/~viviane.silva/progIII Vetores Declaração da variável: real nota(30) OU integer param parameter (param=30) real nota(param) Uso: do i = 1, 30 read *, nota(i) enddo OU read *, (nota(i), i = 1, 30) print*, (nota(i), i = 1, 30) nota 1,5 10,0 8,7 5,5 .... Exemplo Faça um programa em Fortran que lê dois vetores inteiros de tamanho 3 e soma cada posição uma a uma armazenando os resultados em outro vetor . program soma vetores implicit none integer vetorA(3), vetorB(3), i, vetorC(3) print *, 'digite os valores dos vetores:' read *, (vetorA(i), i=1,3) , (vetorB(i), i=1,3) do i=1, 3 vetorC (i) = vetorA (i) + vetorB (i) enddo print *, (vetorC(i), i=1,3) end Matrizes Declaração da variável: real notas(30,2) OU P1 P2 real param, param2 parameter (param=30) parameter (param2=2) real nota2(param, param2) 1,5 10,0 8,7 5,5 .... 6,5 8,3 4,0 7,5 Uso: do i = 1, 30 do j = 1, 2 read *, nota(i,j) enddo enddo OU read *, ((nota(i), j=1,2), i = 1,30) Exemplo Faça um programa em Fortran que lê as notas da P1 e P2 de 30 alunos e calcule a média de cada aluno. program x implicit none integer i,j integer param parameter (param=30) character*20 nome(param) real notas(param, 2), media(param) print*, 'entre com os nomes dos alunos:' read*, (nome(i), i=1,param) print*, 'entre com as notas da P1 e P2 de cada aluno:' read*, ((notas(i,j), j=1,2), i=1,param) do i=1,param media(i) = (notas(i,1) + notas(i,2))/2 enddo print*, 'as medias dos alunos são:' do i=1,param print*,'nome aluno: ', nome(i), 'e média: ', media(i) enddo end Subrotina Implementação: subroutine s1(a,b) implicit none real a integer b ... End Chamada: call s1(a,b) Exemplo program ex5 implicit none integer a, b, c a = 1 b = 2 c = 3 call teste(c) print *, a, b, c end subroutine teste(d) implicit none integer a, b, d a = 10 b = 20 d = 30 end a e b são variáveis locais do programa principal e não são alteradas na sub-rotina c é um parâmetro alterado na sub-rotina a e b são variáveis locais da sub-rotina Função Implementação: integer function f1(a) implicit none integer a ... f1 = ... End Declaração e chamada: real raio, volume ... print *, 'Volume da esfera: ', volume(raio) program calculo da media implicit none integer P1, P2 real media character*10 status print *, 'informe a nota da P1 e P2:‘ read *, P1, P2 print *, status( media(P1, P2) ) end real function media(P1, P2) integer P1, P2 media = (P1 + P2)/2 end character*10 function status(valor) real valor if (valor .GE. 6) then status = 'aprovado‘ else if (valor .LT. 4) then status = 'reprovado‘ else status = 'VS' end if end Leitura de arquivo Regra: OPEN (<identificador>,FILE=‘<nome do arquivo>’) READ (<identificador>, *) <dados a serem lidos> CLOSE (<identificador>) Uso: open(1, file='entrada.txt') do i=1,3 read(1,*) nome(i), altura(i), (sangue(i,j), j=1,2) endddo close(1) Nome altura glicose colesterol Joao 70 100 120 Maria 60 80 89 Ana 120 200 250 Exemplo Suponha que um médico tem um arquivo onde armazena informações sobre seus 3 pacientes. Os dados armazenados no arquivo são: nomePaciente, peso, nívelColesterol, nívelGlicose. Escreva um programa que ajude o médico a fazer a seguinte consulta: 1. Nome dos pacientes com nível de colesterol acima de 120 2. Paciente com nível de glicose mais baixo 3. Relatório sobre o paciente A Exemplo arquivo de pacientes: paciente.txt joao 70 100 120 maria 60 80 89 ana 120 200 250 program medico implicit none integer i, j, k, dados(3,3), aux character*10 nome(3), nomePac open(1, file='paciente.txt') do i=1,3 read(1,*) nome(i), (dados(i, j), j = 1, 3) enddo close(1) do i=1, 3 if (dados(i,2) .GT. 120) then print*,'paciente com cholesterol alto:', nome(i) endif enddo aux=dados(1,3) do i=1, 3 if (dados(i,3) .LT. aux) then aux = dados(i,3) endif enddo print*,"pacientes com glicose mais baixo ‚: ",aux print*,"entre com o nome do paciente" read*, nomePac do i=1,3 if(nome(i) print*, print*, print*, endif enddo end .EQ. nomePac) then "peso= ", dados(i,1) "colesterol= ", dados(i,2) "glicose= ", dados(i,3) Exercício 1 Faça um programa em Fortran que leia de um arquivo uma tabela contendo nomes dos funcionários, salário de cada funcionário e a informação se o funcionário está de férias ou não. O programa deve implementar as seguintes opções para o usuário: Informar o salário de um funcionário dado pelo usuário Informar a média salarial (função) Informar a lista de funcionários que estão de férias (subrotina) Informar os nomes dos funcionários que ganham acima da média (subrotina) Exercício 2 Faça um programa em Fortran que leia de um arquivo o relatório dos itens que existem no estoque. São ao todo 20 itens cadastrados. O relatório possui o nome do item, um número identificador para o item, a quantidade no estoque e o preço deste item. Outro relatório é utilizado para armazenar os itens comprados pelos clientes. Cada linha deste relatório armazena o nome do cliente, o número do identificar do item que este cliente comprou e a quantidade que ele comprou deste item. O programa deve implementar as seguintes opções para o usuário: Informar o nome dos itens comprados por um cliente. Informar o valor da compra de um determinado cliente. Cada uma das operações anteriores deve ser implementada utilizando sub-programação.