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 , assim em linguagem PPL:

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 while calcula 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} \]