Programação de Computadores Viviane Torres da Silva [email protected] http://www.ic.uff.br/~viviane.silva/progIII Estruturas de repetição DO <variável>=<valor inicial>,<valor final>,<incremento> <bloco de comandos> END DO Valor inicial Valor final A <variável> inicia com <valor inicial> incremento e a cada repetição é incrementada de <incremento>. processamento Para cada repetição o <bloco de comandos> é executado, enquanto a <variável> for menor ou igual que <valor final>. O incremento é opcional. A sua ausência significa incremento = 1. O incremento pode ser negativo. Exemplo program impares implicit none integer impar do impar = 1, 100, 2 print *, impar end do end Exercício 1 Faça um programa que soma todos os números em um intervalo informado pelo usuário. Ex: intervalo de 2 a 6 soma=2+3+4+5+6=20 program somar dentro de um intervalo implicit none integer soma, x, y, i print *, 'entre com o intervalo:' read *, x, y soma = 0 do i = x, y, 1 soma = soma + i end do print *, soma end Exercício 2 Faça um programa que informe todos os números divisíveis por 2 entre um intervalo dado pelo usuário. Ex: intervalo: 2 a 11 Resultado: 2, 4, 6, 8, 10 Exercício 3 Faça um programa que calcule o fatorial de um número (lembrete: 0! = 1 e n! = n * (n-1)!) program somar dentro de um intervalo implicit none integer fatorial, x, i print *, 'entre com o número:' read *, x fatorial = 1 if (x .EQ. 0) then print *, 'fatorial de ', x, ' ‚ ', fatorial else do i = 1, x, 1 fatorial = fatorial * i end do print *, 'fatorial de ', x, ' ‚ ', fatorial end if end Exercício 4 Faça um programa que some a idade de todos os alunos de uma turma. O usuário deve informar o número de alunos da turma e em seguida a idade de todos estes alunos. Parte II Repetição condicional I DO WHILE (<condição>) <bloco de comandos> END DO falso Testa se a <condição> é verdadeira Se for verdadeira, executa <bloco de comandos> Se for falsa, termina condição verdade bloco de comando Exemplo Soma de números inseridos pelo usuário enquanto ele não digitar 0. Exemplo program somador implicit none integer n, soma soma = 0 print *, 'Informe um número (zero para sair):' read *, n do while (n .NE. 0) soma = soma + n print *, 'Informe um número (zero para sair):' read *, n end do print *, 'Soma: ', soma end Repetição condicional II Às vezes se deseja fazer a verificação no final do processamento. Ou seja, o bloco de comandos é sempre executado ao menos 1 vez. bloco de comando verdade falso condição LOGICAL repete repete = .TRUE. DO WHILE (repete) <bloco de comandos> repete = <condição> END DO Exercício 1 (repetição condicional) 1) 2) Faça um programa que: some a idade de todos os alunos de uma turma. informe a média das idades. Dica: Quando não existirem mais alunos o usuário deve informar idade = 0. Exercício 2 (repetição contável) Faça um programa que informe se um determinado número fornecido pelo usuário é primo. program imprimePrimo implicit none integer i, j logical primo primo = .true. print *, "insira um numero:" read *, j do i=2,j-1,1 if (mod(j,i) .eq. 0) then primo = .false. endif enddo if (primo) then print*, j ," eh primo" endif end Exercício 3 (repetição contável) Faça um programa que calcule todos os números primos entre 1 e 20. program imprimePrimo implicit none integer i, j logical primo primo = .true. do j= 1, 20, 1 do i=2,j-1,1 if (mod(j,i) .eq. 0) then primo = .false. endif enddo if (primo) then print*, j ," eh primo" endif primo = .true. enddo read* end Exercício 4 (repetição contável) Faça um programa que calcule todos os números primos entre um intervalo dado pelo usuário. Exemplo: primos entre 10 e 20 11, 13, 17, 19 Exercício 5 (repetição contável) program imprimePrimo implicit none integer x, y, i, j logical primo primo = .true. print *, "insira dois numeros:" read *, x, y do j= x, y, 1 do i=2,j-1,1 if (mod(j,i) .eq. 0) then primo = .false. endif enddo if (primo) then print*, j ," eh primo" endif primo = .true. enddo end Exercício 6 (repetição contável + condicional) Faça um programa que calcule todos os números primos de 10 em 10 até o usuário informar que deseja parar digitando 0. Ao final o programa deve imprimir qual foi o intervalo observado. Exemplo de saída 1, 2, 3, 5, 7 “Se desejar parar digite 0”. 11, 13, 17, 19 “Se desejar parar digite 0”. (imagine que o usuário digitou 0) “Foram calculados os primos de 1 a 20. program imprimePrimo implicit none integer x, y, i, j, s logical primo, repetir primo = .true. repetir = .true. x=1 y=10 do while (repetir) do j=x,y,1 do i=2,j-1,1 if (mod(j,i) .eq. 0) then primo = .false. endif enddo if (primo) then print*, j endif primo = .true. enddo print *, "deseja continuar?" read *, s if (s .eq. 0) then repetir = .false. print*, 'terminou' else x=x+10 y=y+10 endif enddo Exercício 3 (repetição contável + condicional)