Escreva um algoritmo que solicite ao usuário dois números a e b. Seu programa deve calcular o resto da divisão de a por b e exibir o resultado.
Passo 1
O enunciado pede que eu escreva um algoritmo que solicite ao usuário dois números
e
e que calcule o resto da divisão de
por
, exibindo esse resultado. \n\nInformações que o enunciado dá: \n- O algoritmo deve pedir dois números:
e
. \n- O objetivo é calcular o resto da divisão de
por
e mostrar o resultado. \n\nPerguntas explícitas do enunciado: \n- Como ler
e
do usuário? \n- Como calcular o resto da divisão de
por
? \n- Como tratar casos especiais (por exemplo,
)? \n\nObservação: nesta etapa eu só identifiquei o que o problema solicita e quais dados estão disponíveis. Não comecei a resolver ainda.
Passo 2
O que significa “resto da divisão”? Vou explicar bem devagarinho. \n\nDefinição (no sentido tradicional que usamos em provas): dado um dividendo
e um divisor
(com
), dizemos que
é o resto da divisão de
por
se existir um inteiro
tal que\n
e
Aqui: \n-
é o número que estamos dividindo (dividendo). \n-
é o número pelo qual dividimos (divisor). \n-
é o quociente inteiro. \n-
é o resto, e queremos que seja um número não-negativo menor que o valor absoluto de
(ou seja, menor que
). \n\nPor que usei
? Porque o tamanho do resto deve ser relacionado ao módulo do divisor; é comum exigir
para que o resto seja sempre não-negativo, independente do sinal de
.
Passo 3
Observações importantes e casos especiais que precisamos prever no algoritmo: \n- Se
não faz sentido dividir, então devemos tratar isso explicitamente (mostrar erro ou pedir outro
). \n- O enunciado não deixou claro se
e
serão inteiros. A definição clássica de resto (com
inteiro e
) faz sentido quando
e
são inteiros. Vou assumir que o objetivo é trabalhar com inteiros — se forem números reais o conceito de “resto” normalmente não é usado dessa forma. \n- Existem implementações rápidas em linguagens (operador
ou
), mas o comportamento com sinais varia entre linguagens. Para uma solução segura e que você consegue escrever sem depender de comportamento específico de linguagem, usamos uma estratégia simples e robusta.
Passo 4
Vou apresentar a ideia do método que o algoritmo vai usar (explicando por que funciona) sem ainda mostrar o código final. Método escolhido: reduzir o valor de
por repetições de adição/subtração do valor absoluto de
até que o resto fique na faixa desejada. \n\nPor que isso funciona? \n- Defina
(o valor absoluto do divisor). Queremos um
tal que
e exista um inteiro
com
. \n- Se eu tomar
e while
fizer
, estou diminuindo
somando
várias vezes: isso equivale a subtrair
do dividendo até sobrar um valor menor que
. O número de subtrações aplicadas é exatamente o quociente
. \n- Se
for negativo, posso aumentar
por repetidas adições de
até
ficar não-negativo. Assim garanto
. \n\nEsse procedimento funciona para qualquer inteiro
e qualquer
. É simples de entender, fácil de implementar sem funções especiais, e é exatamente o que a definição de resto pede.
Passo 5
Vou mostrar passo a passo, com um exemplo numérico, para fixar a ideia. \n\nExemplo 1 (ambos positivos):
,
. \n-
. \n- Começo com
. \n- Enquanto
:
. \n Iterações:
. \n- Parei em
porque
. Então resto
. \n- De fato,
. \n\nExemplo 2 (a negativo):
,
. \n-
. \n- Começo com
. \n- Enquanto
:
. \n Iterações:
. \n- Parei em
porque
. Então resto
. \n- De fato,
. \n\nEsses exemplos mostram que o procedimento de somar/subtrair
até que
esteja na faixa
produz o resto conforme a definição.
Passo 6
Detalhes de implementação e cuidados práticos (dicas que você pode anotar para a prova): \n- Primeiro verifique se
. Se for, avise erro: “divisão por zero”. \n- Trabalhe com
porque queremos a faixa de resto relativa ao tamanho do divisor. \n- Inicialize
. \n- Se
, faça um loop que some
a
até
ficar não-negativo. Isso trata casos em que
é negativo. \n- Depois (ou se
já era não-negativo), faça um loop que subtraia
enquanto
. \n- Ao final
estará em
e esse é o resto que você deve imprimir. \n\nComplexidade: esse método pode ser lento se
for muito grande em módulo e
for pequeno (muitos passos). Em linguagens reais, preferimos usar divisão inteira/operador
ou a fórmula
para eficiência. Mas para a prova, a ideia por subtração é conceitualmente simples e sempre correta.
Passo 7
Vou explicar rapidamente a fórmula alternativa (mais eficiente) para você conhecer e reconhecer em provas ou códigos: \n\nFórmula: \n
onde
e
é a função “piso” (ou floor), que retorna o maior inteiro menor ou igual a
. \n\nO significado: dividir
por
, pegar a parte inteira (piso) como quociente
, multiplicar por
e subtrair de
para obter o resto. Isso é muito rápido em termos computacionais. Atenção: a função piso é diferente de truncamento para números negativos; por isso é importante usar
(piso) e não a divisão inteira que trunca para zero em algumas linguagens.
Passo 8
Resumo prático antes do algoritmo final (para você respirar fundo e sentir que dá pra fazer): \n- Trate
. \n- Calcule
. \n- Use o método por repetidas somas/subtrações para garantir
. \n- Ao final, imprima
. \n\nAgora que tudo está explicado e você já viu exemplos passo a passo, vou mostrar o algoritmo final em pseudocódigo (limpo e pronto para implementar). Lembre-se: o código abaixo assume que
e
são inteiros; se forem outros tipos, adapte a verificação.
Resposta
Ler
,
\nSe
então imprimir “Erro: divisão por zero” e terminar\nDefinir
\nDefinir
\nEnquanto
faça
\nEnquanto
faça
\nImprimir