1. Implemente uma função que calcule e retorne a somatória de \mathbf{0} até \mathbf{n} de forma iterativa, com uso do while:
\sum_{i=0}^{n} i
Lembre-se de usar variáveis contadoras (i) e acumuladoras.

Passo 1

O enunciado pede que eu implemente uma função que calcule e retorne a somatória de 0 até n de forma iterativa, usando um laço do tipo \texttt{while}. Ou seja, a função deve computar
\sum_{i=0}^{n} i.
Informações fornecidas e condições assumidas:
  • A entrada é um número inteiro n.
  • Vou assumir que n é um inteiro não-negativo ( n\ge 0), porque somatória até valores negativos não faz sentido neste contexto (se necessário, poderia tratar esse caso separadamente).
  • A implementação pedida é iterativa, com uso de variáveis contadoras (por exemplo, i) e acumuladoras (por exemplo, s ou \texttt{total}), e deve usar \texttt{while}.

Passo 2

O que significa a notação \displaystyle \sum_{i=0}^{n} i?
  • Esse símbolo soma todos os valores de i começando em i=0 e indo até i=n.
  • Ou seja, explicitamente é a soma 0 + 1 + 2 + \dots + n.
  • Na notação, i é o índice (variável que percorre os termos) e n é o limite superior da soma.
Exemplo concreto para entender: se n=5, então
\sum_{i=0}^{5} i = 0+1+2+3+4+5 = 15.

Passo 3

Ideia da solução iterativa (intuição):
  • Vou manter uma variável acumuladora, que vou chamar de \texttt{total} (representa o valor parcial da soma).
  • Vou manter uma variável contadora, que vou chamar de \texttt{i}, que começa em 0 e vai até n.
  • Enquanto \texttt{i} for menor ou igual a n (condição do \texttt{while}), eu adiciono o valor de \texttt{i} à \texttt{total} e incremento \texttt{i} em 1.
  • Quando o laço terminar, \texttt{total} conterá \sum_{i=0}^{n} i.
Escrevendo em linguagem “quase natural”:
  1. Inicialize \texttt{total} \leftarrow 0.
  2. Inicialize \texttt{i} \leftarrow 0.
  3. Enquanto \texttt{i} \le n:
    • \texttt{total} \leftarrow \texttt{total} + \texttt{i}.
    • \texttt{i} \leftarrow \texttt{i} + 1.
  4. Retorne \texttt{total}.

Passo 4

Por que esse laço funciona? (invariante de laço — explicação simples)
  • Defino a invariante: no começo de cada iteração (antes de executar o corpo), \texttt{total} contém a soma de todos os inteiros de 0 até \texttt{i}-1, isto é, \texttt{total} = \sum_{j=0}^{\texttt{i}-1} j.
  • Inicialização: antes da primeira iteração temos \texttt{i}=0 e \texttt{total}=0. A soma vazia \sum_{j=0}^{-1} j é 0, então a invariante vale.
  • Manutenção: suponha que antes de uma iteração a invariante valha. No corpo do laço fazemos \texttt{total} \leftarrow \texttt{total} + \texttt{i} e depois \texttt{i}\leftarrow \texttt{i}+1. Assim, depois dessas duas operações temos \texttt{total} = \sum_{j=0}^{\texttt{i}-1} j + \texttt{i} = \sum_{j=0}^{(\texttt{i}+0)} j,e a nova \texttt{i} é a antiga \texttt{i}+1, então a invariante continua válida (agora com o novo valor de \texttt{i}).
  • Término: o laço pára quando \texttt{i}=n+1. Pela invariante, nesse ponto \texttt{total} = \sum_{j=0}^{n} j,que é justamente o que queremos devolver.

Passo 5

Traço de execução (exemplo numérico) para n=5 — isso te ajuda a sentir o laço funcionando:
  • Inicialmente: \texttt{total}=0,\\ \texttt{i}=0.
  • Iteração 1: adiciona 0 \texttt{total}=0,\\ \texttt{i}=1.
  • Iteração 2: adiciona 1 \texttt{total}=1,\\ \texttt{i}=2.
  • Iteração 3: adiciona 2 \texttt{total}=3,\\ \texttt{i}=3.
  • Iteração 4: adiciona 3 \texttt{total}=6,\\ \texttt{i}=4.
  • Iteração 5: adiciona 4 \texttt{total}=10,\\ \texttt{i}=5.
  • Iteração 6: adiciona 5 \texttt{total}=15,\\ \texttt{i}=6.
  • Agora \texttt{i}=6>5, o laço termina e retornamos \texttt{total}=15, que é \sum_{i=0}^{5} i.

Passo 6

Detalhes de implementação práticos (boas práticas rápidas):
  • Verificar se n é inteiro não-negativo pode evitar resultados inesperados. Em uma prova, se não pedirem tratamento de entrada, normalmente assume-se n inteiro e n\ge 0.
  • Nomeie as variáveis de forma clara: \texttt{total} ou \texttt{acc} para acumulador; \texttt{i} para contador.
  • Complexidade: esse método faz aproximadamente n+1 iterações, então custo linear \mathcal{O}(n). Existe uma fórmula fechada \displaystyle \sum_{i=0}^{n} i = \frac{n(n+1)}{2} que é \mathcal{O}(1), mas a questão pediu explicitamente um método iterativo com \texttt{while}, então usamos o laço.

Passo 7

Implementação em código (linha a linha com explicação):
  • Linha 1: defino a função que recebe n.
  • Linha 2: (opcional) checo se n é inteiro não-negativo.
  • Linha 3: inicializo \texttt{total} \leftarrow 0.
  • Linha 4: inicializo \texttt{i} \leftarrow 0.
  • Linhas seguintes: faço o laço \texttt{while i <= n}: acumulo e incremento.
  • Última linha: retorno \texttt{total}.

Resposta

def soma_ate(n):
if not isinstance(n, int) or n < 0:
raise ValueError(“n deve ser um inteiro não-negativo”)
total = 0
i = 0
while i <= n:
total += i
i += 1
return total