Lista de Exercícios – Repetição (Contável e Condicional) Prof: Yuri Frota 1) Interpretar e traduzir para Fortran a sequência de comandos em Português a seguir: Programa { escrita dos termos de Fibonacci menores que L } leia o valor L {Processamento dos dois primeiros termos} Atribua o valor 1 ao termo1 se ele for menor do que L então escreva-o fim se Atribua o valor 1 ao termo2 se ele for menor do que L então escreva-o fim se {Processamento dos termos restantes} enquanto novo termo1 mais termo2 for menor ou igual a L faça Calcule o novo termo somando os 2 anteriores escreva o termo Atribua termo2 a termo1 Atribua termo a termo2 fim enquanto Fim algoritmo. 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| program algoritmo c escrita dos termos de Fibonacci integer L,v1, t1, t2 c Le o valor de L print *,'L?' read *, L c Os dois primeiros termos da são 1 e 1 v1 = 1 c Processamento dos dois primeiros termos t1 = v1 if (t1 .lt. L) then print *, t1 end if t2 = v1 if (t2 .lt. L) then print *, t2 end if c Processamento dos termos restantes do while (t1+ t2 .le. L) v1 = t1 + t2 print *, v1 t1 = t2 t2 = v1 end do end 2) Faça um programa em Fortran que: a) Escreva um programa que permita que o usuário indique um número de inteiros “n” a serem lidos (entre 1 e 30). Após a leitura dos “n” números, escreva na tela a média, a soma, o produto, o menor valor e o maior valor. 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| c calcula média, a soma, o produto, o menor valor e o maior valor program ex2a integer v, max, min, n, soma, prod, i c Le a quantidade de inteiros print *, 'Entre c/ o número de inteiros' read *, n if (n .lt. 1 .or. n .gt. 30) then print *, 'Quantidade de inteiros invalida' stop end if soma = 0 prod = 1 do i=1,n,1 c Le os valor print *, 'Entre c/ um valor' read *, v c calcula cada um dos calculos if (i .eq. 1) then min = v max = v else if (v .lt. min ) then min = v else if (v .gt. max) then max = v end if end if end if soma = soma + v prod = prod * v end do c escreve na tela cada um dos calculos print *, 'media: ', float(soma) / n print *, 'soma: ', soma print *, 'produto: ', prod print *, 'menor: ', min print *, 'maior: ', max end b) Faça um programa para construir a tabela de multiplicação de números de 1 a 10 (ex.: 1 x 1 = 1, 1 x 2 = 2, ….,2 x 1 = 2, 2 x 2 = 4, …., etc.). 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| program tabela integer x, y print *, 'Tabela de multiplicação de números de 1 a 10' do x=1,10,1 do y=1,10,1 print *, x, ' x ', y, ' = ', x*y end do end do end c) gerar os cinqüenta primeiros termos da série: 1 + N, 5 * N, 9 + N, 13 * N, ..., onde N é um valor lido. 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| program ex6f integer i, n, v c Le N print *, 'Entre c/ um inteiro' read *, n v = 1 do i=1,50,1 if (mod(i,2) .eq. 0) then print *, v*n else print *, v+n end if v = v + 4 end do end d) determinar todos os números de 3 algarismos, cujas somas dos cubos dos algarismos sejam iguais ao próprio número. Exemplo: 153 = 1**3 + 5**3 + 3**3 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| program ex6g integer i, j, z do i=1,9,1 do j=0,9,1 do z=0,9,1 if (i**3 + j**3 + z**3 .eq. i*100+j*10+z) then print *, i,j,z end if end do end do end do end e) determinar todos os números de 4 algarismos que possam ser separados em dois números de dois algarismos que somados e elevando-se a soma ao quadrado obtenha-se o próprio número. Exemplo: 3025 = (30 + 25) = 55, e 55**2 = 3025. 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| program ex6h integer i, p1, p2 do i=1000,9999,1 p1 = i/100 p2 = MOD(i,100) if ((p1 + p2)**2 .EQ. i ) then print *, i endif end do end 3) Escreva um programa para gerar dois valores aleatórios inteiros “x” e “y” entre 1 e 10 (para gerar o número aleatório, vamos usar o comando “rand” da seguinte forma: x = rand(0)*10 e y = rand(0)*10 ). Após isso, deve-se gerar a seguinte mensagem: “quanto é x multiplicado por y ?”, substituindo os números gerados por “x” e “y”. Depois da mensagem, deve ser lida uma resposta do teclado e deve ser exibido uma mensagem indicando acerto ou erro. A função deve usar um comando “do while” para implementar um laço que obrigue o usuário a acertar pelo menos três vezes a resposta antes de sair. Ao final devem ser indicado o número de tentativas, de acertos e de erros. 1 6 11 16 21 26 31 36 41 46 51 56 61 |----|----|----|----|----|----|----|----|----|----|----|----| program rand integer x, y, z, r, w r = 0 w = 0 do while (r .lt. 3) x = rand(1)*10 y = rand(1)*10 print *, 'quanto é ',x,' multiplicado por', y,' ?' read *, z if (z .eq. x*y) then r = r +1 print *, ‘ACERTOU!’ else w = w + 1 print *, ‘ERROU!’ end if end do print *, 'N. De tentativas: ',r+w print *, 'N. Acertos: ', r,' N. De erros: ', w end