O que o algoritmo abaixo faz? DECLARE m, calc, i NUMÉRICO LEIA m ENQUANTO (m > 0) FAÇA INÍCIO calc <— 0 SE (RESTO (m/2) = 0) ENTÃO INÍCIO PARA i <— 1 ATÉ m FAÇA INÍCIO SE (RESTO (m/i) = 0) ENTÃO calc <— calc + 1 FIM ESCREVA calc FIM SENÃO INÍCIO PARA i <— 1 ATÉ m-1 FAÇA INÍCIO calc <— calc + i FIM ESCREVA calc FIM LEIA m FIM FIM_ALGORITMO.
Soluções para a tarefa
DECLARE m, calc, i NUMÉRICO // declarou variáveis
LEIA m // leu um valor numérico
ENQUANTO (m > 0) FAÇA // enquanto o usuario digitar ≠ 0
INÍCIO
calc <— 0 // zera
SE (RESTO (m/2) = 0) ENTÃO // o número é par ?
INÍCIO // sim
PARA i <— 1 ATÉ m FAÇA // aqui podia ser otimizado
INÍCIO
SE (RESTO (m/i) = 0) ENTÃO calc <— calc + 1
FIM
ESCREVA calc
FIM
SENÃO
INÍCIO
PARA i <— 1 ATÉ m-1 FAÇA
INÍCIO
calc <— calc + i
FIM
ESCREVA calc
FIM
LEIA m
FIM
FIM_ALGORITMO
Então analisando o algoritmo temos que o primeiro teste é se o número é par ou não.
Se o número for par o algoritmo conta quantos divisores o número tem. No loop ele testa se (resto( m/i) = 0 ele conta um divisor porém ele vai até m. Não precisa. basta ir até m/2 pois depois da metade do número não há mais divisores.
Se o número for ímpar, o algoritmo vai fazer outro cálculo. Somará os números até o par anterior ao número.
Depois de feito esses cálculos, o resultado é exibido e um novo número é solicitado ao usuário. Se o usuário digitar 0, o programa sai do loop "enquanto" e termina
Observe que a notação da função resto() está meio estranha. Normalmente a função resto() aceita dois argumentos. O dividendo e o divisor. Porém, na chamada é sempre resto(m/2) ou resto(m/i). Embora faça sentido para um humano, normalmente numa linguagem de programação real, a divisão seria feita primeiro e depois o resultado resultaria num parametro só passado para a função. Seria bom verificar com seu professor. O mais usual seria uma chamada assim resto( m , 2) e resto( m, i). Verifique.
Organizando o referido algorítimo, temos que:
DECLARE m, calc, i NUMÉRICO // declarou variáveis
LEIA m // leu um valor numérico
ENQUANTO (m > 0) FAÇA // enquanto o usuario digitar ≠ 0
INÍCIO
calc <— 0 // zera
SE (RESTO (m/2) = 0) ENTÃO // o número é par ?
INÍCIO // sim
PARA i <— 1 ATÉ m FAÇA // aqui podia ser otimizado
INÍCIO
SE (RESTO (m/i) = 0) ENTÃO calc <— calc + 1
FIM
ESCREVA calc
FIM
SENÃO
INÍCIO
PARA i <— 1 ATÉ m-1 FAÇA
INÍCIO
calc <— calc + i
FIM
ESCREVA calc
FIM
LEIA m
FIM
FIM_ALGORITMO
Assim, temos que da análise dele podemo notar que é o primeiro testa para saber se o número é par ou não.
Assim, temos que se o número for par o algoritmo conta quantos divisores o número tem. No loop ele testa se (resto( m/i) = 0 ele conta um divisor porém ele vai até m. Não precisa. basta ir até m/2 pois depois da metade do número não há mais divisores.
Importante notar que se o número for ímpar, outro cálculo será feito. Por fim, o número encontrado no cálculo será mostrado para o usuário.
você pode ler mais em: https://brainly.com.br/tarefa/3394811
espero ter ajudado!