Buscar

Ex04 pc pascal solução

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Outros materiais