Implementando somatória/produtório
Uma implementação muito comum na programação aplicada a matemática é o cálculo de somatórias e produtórios
A soma/produto pode ser de elementos discretos dispostos num vetor ou matriz, ou de elementos obtidos de uma expressão matemática.
Elementos discretos
Dada a lista de valores dispostos num vetor: \(V = \begin{bmatrix} 1 & 4 & 3 & 6 \end{bmatrix} \), num rápido cálculo mental, percebemos que a soma dos valores é igual a \(14\) e o produto (multiplicação de todos os elementos) é igual a \(72\)
Considerando cada elemento \(v\) do vetor \(V\):
\[V = \begin{bmatrix} v_1 & v_2 & v_3 & v_4 \end{bmatrix} \]Matemática podemos representar a soma dos elementos como:
\[\sum\limits_{i=1}^{4}{v_i} = v_1 + v_2 + v_3 + v_4 \]E a multiplicação:
\[\prod\limits_{i=1}^{4}{v_i} = v_1 \times v_2 \times v_3 \times v_4 \]Porém ao fazermos a programação devemos seguir uma rotina definida, fazendo a execução passo a passo, poderiamos ter as seguintes etapas para a soma:
\[\underbrace{\underbrace{\underbrace{\underbrace{\color{red}v_1\color{black}}_{0+\color{red}v_1\color{black} \Rightarrow res} + \color{red}v_2\color{black} }_{\color{red}v_1 +v_2\color{black}\Rightarrow res} + \color{red}v_3\color{black} }_{ \color{red}v_1+v_2+v_3\color{black}\Rightarrow res} + \color{red}v_4\color{black}}_{\color{red}v_1+v_2+v_3+v_4\color{black}\Rightarrow res}\]Exemplo
Demonstrando o processo passo-a-passo:
| Operação | Valor final da variável \(res\) |
|---|---|
| \[ \underbrace{\color{red}1}_{\underset{\color{blue}0}{res} +\color{red}1\color{black}\Rightarrow \underset{\color{blue}1}{res}}+4+3+6 \] | \(1\) |
| \[ \underbrace{\color{red}1+4}_{\underset{\color{blue}1}{res} +\color{red}4\color{black}\Rightarrow \underset{\color{blue}5}{res}}+3+6 \] | \(5\) |
| \[ \underbrace{\color{red}1+4+3}_{\underset{\color{blue}5}{res} +\color{red}3\color{black}\Rightarrow \underset{\color{blue}8}{res}}+6 \] | \(8\) |
| \[ \underbrace{\color{red}1+4+3+6}_{\underset{\color{blue}8}{res} +\color{red}6\color{black}\Rightarrow \underset{\color{blue}14}{res}} \] | \(14\) |
Forma genérica:
Podemos escrever a somatória de forma genérica:
\[ res + v_i \Rightarrow res \]Na calculadora, o símbolo \(\Rightarrow\) é equivalente ao da tecla
res + v(i)res
Ou
res:= res + v(i)
Programação
E a programação completa ficaria:
EXPORT somatoria()
BEGIN
PRINT();
LOCAL v := [1, 4, 3, 6];
LOCAL res := 0;
LOCAL i;
FOR i FROM 1 TO 4 DO
res := res + v(i)
END;
PRINT("Resultado: " + res);
END;
Para o caso do produtório, mudam as linhas: de acúmulo do valor da variável res e sua inicialização:
EXPORT somatoria()
BEGIN
PRINT();
LOCAL v := [1, 4, 3, 6];
LOCAL res := 1;
LOCAL i;
FOR i FROM 1 TO 4 DO
res := res * v(i)
END;
PRINT("Resultado: " + res);
END;
Função
Quando se utiliza funções, o processo é o mesmo que para Elementos Discretos, o que muda é que não há um lista, mas sim uma função que irá gerar uma lista, por exemplo, veja a somatória abaixo com sua equivalência:
\[\sum\limits_{i=1}^{10}{(2i)}=2+4+6+8+10+12+14+16+18+20 \]Que na forma de programa ficaria:
EXPORT somatoria()
BEGIN
PRINT();
LOCAL res := 0;
LOCAL i;
FOR i FROM 1 TO 10 DO
res := res + 2*i
END;
PRINT("Resultado: " + res);
END;
Resultando em:
Exemplo 1
Implementação do seguinte produtório:
\[\prod\limits_{i=1}^{5}{(2i)}=2*4*6*8*10\]O programa em PPL:
EXPORT somatoria()
BEGIN
PRINT();
LOCAL res := 1;
LOCAL i;
FOR i FROM 1 TO 5 DO
res := res * 2*i
END;
PRINT("Resultado: " + res);
END;
Exemplo 2
Vamos utilizar agora uma matriz:
\[\begin{bmatrix} 1 & 4 & 3 & 8 \\ 3 & 5 & 1 & 5 \\ 2 & 0 & 1 & 3\end{bmatrix} \]O primeiro programa irá somar todos os elementos da matriz:
EXPORT somatoria()
BEGIN
PRINT();
M1:= [[1, 4, 3, 8], [3, 5, 1, 5], [2, 0, 1, 3]];
LOCAL res := 0;
LOCAL i, j;
FOR i FROM 1 TO 3 DO // Percore as linhas
FOR j FROM 1 TO 4 DO // Percore as colunas
res := res + M1(i, j);
END;
END;
PRINT("Resultado: " + res);
END;
E o segundo, irá somar cada linha, para isso em cada iteração do primeiro laço de repetiçao será necessário iniciar o valor da variável res e foi deslocado o local onde é impresso o resultado
EXPORT somatoria()
BEGIN
PRINT();
M1:= [[1, 4, 3, 8], [3, 5, 1, 5], [2, 0, 1, 3]];
LOCAL res;
LOCAL i, j;
FOR i FROM 1 TO 3 DO // Percore as linhas
res := 0; // Zerando o valor para não interferir no próximo cálculo
FOR j FROM 1 TO 4 DO // Percore as colunas
res := res + M1(i, j);
END;
PRINT("Soma da linha " + i +": " + res);
END;
END;
Atividade
Construa os programas:
- 1. Faça um programa que lê um número real do teclado e utilizando o comando
whilecalcula o fatorial deste número. (ex: 5! é igual a 5 * 4 * 3 * 2 * 1). - 2. Faça um programa para resolver a equação a seguir, sendo que o programa deve implementar a somatória e o produtório obrigatoriamente através de laço de repetição e o fatorial deve ser construído através de uma função, que receba o valor e retorne o resultado. \[V=\frac{\sum\limits_{x=1}^{10}{x!} }{\prod\limits_{x=1}^{10}x} \]