Informática, perguntado por dayenefmota4276, 1 ano atrás

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

Respondido por bokomoko
12
Colocando de uma forma visualmente mais agradável

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.





Respondido por thaynnaba
5

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!

Anexos:
Perguntas interessantes