Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação de Computadores Prof. Eduardo Chaves Faria Solução do 4o Exercício 1 – A função Func inverte o número N recebido como entrada. Assim, a saída do algoritmo será igual ao valor obtido com os algarismos de X invertidos, mais um. Por exemplo, se X = 5342, o valor de Y será igual a 2435 +1 = 2436. 2 – { Números amigos compreendidos entre 1 e 1.000.000 } Algoritmo declare X, Y { candidatos a números amigos } numérico X ← 1 repita Y ← X + 1 { procura os amigos de X } repita se SomaDivisores( X ) = Y e X = SomaDivisores( Y ) então escreva X, Y fim se Y ← Y + 1 se Y > 1.000.000 então interrompa fim se fim repita X ← X + 1 se X > 999.999 então interrompa fim se fim repita fim algoritmo { determina a soma dos divisores próprios de um número} função numérica SomaDivisores( N ) declare N { entrada: número inteiro positivo } D { possível divisor de N } numérico SomaDivisores ← 0 D ← 1 repita se D ≥ N então interrompa fim se se Resto( N,D ) = 0 então SomaDivisores ← SomaDivisores + D fim se D ← D + 1 fim repita fim função Observação: A solução apresentada não é nada eficiente. A função SomaDivisores é chamada 2 x 102 x 102 x 102 x 1012121212 vezes, e tomando o no N médio igual a 500.000, o teste de um possível divisor dentro da função é feito 1010101018181818 vezes. As seguintes modificações tornariam o algoritmo bem mais eficiente: - Alterar a função para testar possíveis divisores até a raiz quadrada do número; - No programa, chamar a função para calcular a soma dos divisores de X fora da repetição mais interna, pois dentro dela o valor de X não se altera. 3 – { determina e escreve os números abundantes contidos em um dado intervalo } Algoritmo declare A, B { números inteiros que definem o intervalo – fornecidos como entrada } K { número do intervalo candidato a abundante } numérico leia A, B K ← A repita se K > B então interrompa fim se se Abundante( K ) então escreva K fim se K ← K + 1 fim repita fim algoritmo { Verifica se um dado número é Abundante } função lógica Abundante( N ) declare N { entrada: número candidato a abundante } D { possível divisor } SomaDiv { soma dos divisores } numérico SomaDiv ← 1 + N D ← 2 repita se D > N / 2 então interrompa fim se se Resto( N, D ) = 0 então SomaDiv ← SomaDiv + D fim se D ← D + 1 fim repita se SomaDiv > 2 x N então Abundante ← verdadeiro senão Abundante ← falso fim se fim função 4 – { Escreve os números de 4 algarismos com a seguinte propriedade: o quadrado da soma do valor } { dos 2 primeiros algarismos com o valor dos 2 útimos algarismos é igual ao próprio número } Algoritmo declare Numero numérico Numero ← 1000 repita se Propriedade( Numero ) então escreva Numero fim se Numero ← Numero + 1 se Numero = 10.000 então interrompa fim se fim repita fim algoritmo função lógica Propriedade( N ) declare N { entrada: número de quatro algarismos } R { número formado pelos dois últimos algarismos de N } Q { número formado pelos dois primeiros algarismos de N } numérico R ← Resto( N, 100 ) Q ← Quociente( N, 100 ) se ( R + Q )2 = N então Propriedade ← verdadeiro senão Propriedade ← falso fim se fim função 5– { Tabula a função Y = F(x) + G(x) para valores em um dado intervalo } Algoritmo declare a, b { intervalo de variação da incógnita } i { incremento de variação da incógnita } X { valor da incógnita } Y { valor da função de X que está sendo tabulada } numérico leia a, b, i X ← a repita Y ← F(X) + G(X) escreva X, Y X ← X + i se X > b então interrompa fim se fim repita fim algoritmo função numérica F( X ) declare X numérico { entrada: valor da incógnita } se X ≥ 0 então F ← X2 – 3 x X – 1 senão F ← X + 2 fim se fim função função numérica G( X ) declare X numérico { entrada: valor da incógnita } se F(X) > 0 então G ← X2 – 1 senão G ← F(X) fim se fim função Obs: Caso as funções estejam no programa, a função numérica F(X) deve ser declarada obrigatoriamente antes da função G(X). Isto porque durante a compilação, ao ser analisada a função G(X), a função F(X) já deve ser conhecida (ceclarada). Caso as funções estejam em uma unit a ordem não faz diferença. 6 – { Realiza uma das quatro operações aritméticas básicas na base binária } Algoritmo declare Operacao literal { código da operação a ser realizada - add, sub, mult, div } declare OP1, OP2 numérico { operandos - números inteiros em binário } Defina funções Binário( D ) e Decimal( B ) leia Operacao, OP1, OP2 se Operacao = “add” então Resultado ← Binario( Decimal(OP1) + Decimal(OP2) ) senão se Operacao = “sub” então Resultado ← Binario( Decimal(OP1) – Decimal(OP2) ) senão se Operacao = “mult” então Resultado ← Binario( Decimal(OP1) x Decimal(OP2) ) senão se Operacao = “div” então Resultado ← Binario( Decimal(OP1) / Decimal(OP2) ) fim se fim se fim se fim se escreva Resultado fim algoritmo { Conversão de um número binário para um decimal} função numérica Decimal( B ) declare B { entrada: número binário a ser transformado } Expoente { expoente da base } Bit { dígito binário } numérico Expoente ← 0 Decimal ← 0 repita se B = 0 então interrompa fim se Bit ← Resto(B, 10) { separa o dígito mais à direita } Decimal ← Decimal + Bit x 2 Expoente { acumula o valor da base binária } Expoente ← Expoente + 1 B ← Quociente( B, 10 ) fim repita fim função { Conversão de um número decimal para binário } função numérica Binario( D ) declare D { entrada: número decimal a ser transformado } Expoente { expoente da base } Bit { dígito decimal } numérico Expoente ← 0 Binario ← 0 repita se D = 0 então interrompa fim se Det ← Resto( D, 2 ) { obtém o binário mais à direita } Binario ← Binario + Det x 10 Expoente { a potência de dez posiciona o bit à esquerda } Expoente ← Expoente + 1 D ← Quociente( D, 2 ) fim repita fim função
Compartilhar