Programação I Engenharia Informática e Engenharia Civil, 1º Ano, 2º Semestre, Turno da tarde, Ano Lectivo 2009. Serie de Problemas 1 (Algoritmos e suas características) Resolva os problemas usando descrição narrativa, fluxograma e o pseúdo-código. 1. Elabore um Algoritmo que peça dois números ao utilizador, e apresente o resultado da sua adição. Esses exercícios podem-se resolver de diferente forma, não há uma forma rígida e sistemática de resolver esses problemas. Resolução1: Descrição arrativa Pseudo-código • • • • • Pedir dois números ao utilizador Ler os dois números Efectuar a soma dos dois números Apresentar o resultado Terminar o algoritmo. Fluxograma inicio Escrever(“insira os dois números”) Ler(Numero1, Numero2) Soma ← Numero1 + Numero2 Escrever(Soma) Fim Programa Soma_umeros Numero1, Numero2: Real; Soma: Real; Inicio Escrever(“insira os dois numeros”); Ler(Numero1, Numero2); Soma = Numero1 + Numero2; Escrever(Soma); Fim 2. Elabore um Algoritmo para converter um valor dado em horas e minutos, num formato apenas em minutos. a) Não validar o valor da hora e do minuto. b) Validar o valor da hora e do minuto. Resolução a) Não validar o valor da hora e do minuto essa alínea assume-se que o utilizador irá inserir os parâmetros de entrada de forma correcta. Descrição arrativa • • • • Ler o valor da hora e do minuto Efectuar a conversão para minutos Apresentar o valor em minutos Terminar o algoritmo Pseudo-código Programa Converte_para_minutos hora, minuto : inteiro; ValorMinuto: inteiro; Inicio Ler(hora, minuto); ValorMinuto = hora x 60 + minuto; Escrever(ValorMinuto); Fim b) Validar o valor da hora e do minuto Resolução: essa alínea vai se fazer uma simples validação dos parâmetros de entrada, por exemplo verificar se o utilizador ñ vai inserir um valor da hora negativo. Fluxograma Descrição arrativa • • • • • Fluxograma Ler o valor da hora e do minuto Validar o valor da hora e do minuto Efectuar a conversão para minutos Apresentar o valor em minutos Terminar o algoritmo inicio Ler(hora, minuto) Sim hora < 0 ou minuto < 0 ? Não ValorMinuto ← hora x 60 + minuto Escrever(ValorMinuto) Fim Pseudo-código Programa Converte_para_minutos hora, minuto : inteiro; ValorMinuto: inteiro; Inicio Ler(hora, minuto); Se ( hora < 0 e minuto < 0) Terminar o algoritmo; Se não ValorMinuto = hora x 60 + minuto; Escrever(ValorMinuto); Fim 3. Elabore um Algoritmo que dados dois lados de um triângulo rectângulo calcule a respectiva hipotenusa. a) Não validar o valor dos lados do triângulo. Resolução: Descrição arrativa Ler o valor dos dois catetos Efectuar o cálculo da hipotenusa usando o teorema de Pitágoras Apresentar o valor da hipotenusa Terminar o algoritmo Fluxograma Pseudo-código Programa Calcula_Hipotenusa oposto,adjacente : real; hipotenusa: real; Inicio Ler(oposto,adjacente); hipotenusa = (oposto^2+adjacente^2)^(1/2); Escrever(hipotenusa); Fim b) Validar o valor dos lados do triângulo. Resolução: Descrição arrativa • • • • • Ler o valor dos dois catetos Validar o valor dos catetos, ou seja, verificar se os catetos são negativos Efectuar o cálculo da hipotenusa usando o teorema de Pitágoras Apresentar o valor da hipotenusa Terminar o algoritmo Fluxograma Pseudo-código Programa Calcula_Hipotenusa oposto,adjacente : real; hipotenusa: real; Inicio Ler(oposto,adjacente); Se (oposto < 0 e adjacente < 0) Terminar algoritmo. Se não hipotenusa = (oposto^2+adjacente^2)^(1/2); Escrever(hipotenusa); Fim 4. Elabore um algoritmo que dados dois números inteiros, determina se eles são múltiplos entre si. Resolução1: Descrição arrativa • • • • Ler os dois números N1 e N2 Calcular o resto da divisão entre eles Se o resto for igual a zero, escrever “os números N1 e N2 são múltiplos entre si” Se não, escrever “os números N1 e N2 não são múltiplos entre si” Fluxograma Pseudo-código Programa multiplos N1, N2 : inteiro; Resto: inteiro; Inicio Ler(N1 ,N2); Resto = N1 % N2; Se (Resto == 0) Escrever (“N1 e N2 são múltiplos entre si”); Se não Escrever (“N1 e N2 não são múltiplos entre si”);; Fim Resolução2: inicio Ler(N1,N2) sim não N1 > N2 ? Resto = N1 % N2 sim Resto = N2 % N1 Resto == 0 ? Escrever(“N1 e N2 são multipos entre si”) não Escrever(“N1 e N2 não são multipos entre si”) Fim 5. Elabore um algoritmo que dado um número inteiro, determina se esse número é par. (Obs: não validar o parâmetro de entrada). inicio Ler(numero) resto = numero % 2 sim Resto == 0 ? “O numero é par” não “O numero não é par” Fim 6. Elabore um algoritmo que dado um número inteiro, determina se esse número é impar. (Obs: não validar o parâmetro de entrada).