1 UEM UNIVERSIDADE ESTADUAL DE MARINGÁ 208 Fundamentos da Computação Professor: Dr. Wesley Romão 11 ª Lista de Exercícios 1) Dados três valores a, b e c, correspondentes aos lados de um triângulo. Faça um programa Fortran que leia os lados e informe o tipo de triângulo. Primeiro ordene os em ordem crescente atribuindo os respectivos valores ordenados às variáveis lado1, lado2 e lado3. (Observe que lado1 < lado2 < lado3). Para verificar o tipo de triângulo assuma as seguintes regras: (I). Se lado3 > (lado1 + lado2) então estes valores de lado não correspondem a um triângulo. (II). Se lado3 2 = (lado1 2 + lado2 2 ) então o triângulo é RETÂNGULO. (III). Se lado3 2 < (lado1 2 + lado2 2 ) o triângulo é ACUTÂNGULO. (IV). Se lado3 2 > (lado1 2 + lado2 2 ) o triângulo é OBTUSÂNGULO. 2) Verifique se os programas em Fortran abaixo estão corretos. O primeiro deve retornar a divisão Real por 2 da soma de a,b e c. Se não estiver, explique o(s) erro(s) e corrija o(s). program correto1 integer = soma integer: a, b read a, b, c write(*,*) Entre com os valores de a,b e c, a, b, c soma := a+b+c/2 write(*,*) a,b,c program correto2 Real(*,*) result read a, b, c if a>b and b<c result = a*b + c result = a/b c write(*,*) result 3) Escreva um programa Fortran que calcule a seguinte seqüência: 1 1 / 2 + 1 / 3 1 / 4 + 1 / 5 1 / 6 +... + 1 / 99 1 / 100
2 4) Escreva um programa Fortran que faça a multiplicação e divisão de dois números naturais utilizando apenas as operações de soma e subtração. 5) Quais as respectivas saídas dos programas abaixo para os seguintes valores de a, b e c: a = 1; b = 13 e c = 15? program verifique1 Real m integer a, b, c read(*,*) a, b, c m = a+b+c/3 if (m.lt. 10) write(*,*) 100 write( programa encerrado ) program verifique2; Real m integer a, b, c read(*,*) a, b, c m = a+b+c m = m/3 if (m.lt. 10) write(*,*) 100 write( programa encerrado ) 6) No programa abaixo, são lidos dois valores (x e y), e um valor z é alterado conforme os valores lidos. Indique nas colunas ao lado do programa, em cada um dos pontos de execução indicados pelos números (1, 2, 3, 4 e 5), quais os valores de cada variável para x e y conto x = 0 e y = 2; x = 4 e y = 2; x = 3 e y = 0. Observações: (a) Se o valor ainda não estiver definido, coloque um traço ( ). (b) Para as linhas indicadas pelos números, todos os valores devem ser preenchidos, mesmo que naquele passo alguma variável não tenha sido alterada. 1 2 3 4 5 program depura Real r1, r2, x, y integer z read(*,*) x, y z = 0 r1 = x 2*y r2 = 2*x + 4*y if ((r1 + r2) < 0) then if (x.gt. 0) then if (y.ge. 0) then z = 10 if ((x.lt. 0).and. (y.lt. 0)) then z = 100 if (r1.gt. r2) then z = 1234 z = 1 write(*,*)z x=0; y=2; x= 4; y=2; x=3; y=0 r1 r2 z r1 r2 z r1 r2 z
3 7) Indique, para cada expressão booleana abaixo, se ela retornará um valor.true. ou.false.. (1.gt. 3).or. (.not. (5.le. 8)).and.(6.eq.7).not.((2.ge.5).and.(5.le.8).or.((4 + 3).gt.7)) ((mod(7,4).eq. 3).and. (.not.((20/5).eq. 5)) (23.1.ge. 64/3).or. ( b.eq. a ) 8) Faça um programa Fortran que imprima uma seqüência de caracteres na ordem inversa em que foram recebidos. 9) Simplifique as sentenças abaixo: a) if (x.lt.0) then if (y.lt.0) then if (z.eq.0) then w = x + y + z b) if (x.lt.0) then if (y.lt.0) then x = x + y if (x.eq.11) then x = x y 10) Ao se completar os seguintes laços do DO, quais serão os valores de K, L e M? M = 0 do I = 1,10 K = I do J = 1,5 L = J M = M + 1 11) Em que ordem o seguinte segmento de programa imprimirá as variáveis indexadas de um conjunto tridimensional A? do I = 1,2 do J = 1,2 do K = 1,2 write(*,*) A(I,J,K)
4 12) O que faz o programa a seguir? program EXERCICIO_13 integer I, J, X, N, Y do I=1,7 do J=1,7 X = I N = J Y = 1 do while (N.GT. 0) if (mod(n,2).eq. 0) then! se o número for par N = N/2 X = X*X N = N 1 Y = Y*X write(*,*) I,J,K 13) Na seqüência de frações: 2 / 1, 3 / 2, 5 / 3, 8 / 5, 13 / 8, 21 / 13,... o numerador de cada fração é a soma do numerador e denominador da fração anterior, e o denominador de cada fração é a soma dos denominadores das duas frações anteriores. Usando aritmética real, calcule o valor dos N primeiros termos da seqüência. 14) Escrever parte de um programa para calcular y para qualquer valor de x, como segue: Y = X, se X < 1 Y = 0, se X = 1 Y = X2, se X > 1 15) Escreva parte de um programa para calcular e imprimir os valores do seno e do co seno para ângulos de 0º, 10º, 20º,..., 90º. Sugestão: Para o argumento das funções trigonométricas, use a variável real X.
5 Lembretes: Converta o argumento de grau para radiano, pois as funções seno e co seno têm argumento em radiano e, então, use SIN(X) para calcular o seno e COS(X) para calcular o coseno. 16) Escreva comandos FORTRAN para executar as seguintes instruções. a) Leia valores para a variável X até que não existam mais dados de entrada ou X seja positivo. b) Enquanto N for menor que M, multiplique N por 3. c) Se A está entre 0 e 15, faça K igual a 1; caso contrário, faça K igual a 0. d) Se A está entre 0 e 10, faça K = 1; se A está entre 10 e 50, faça K = 2; caso contrário, faça K = 3. Bom Trabalho! wromao@uem.br