cálculo de médias

Propaganda
Exemplos de programação em
PASCAL
•
•
•
•
Exemplos baseados no cálculo de médias
Revisão das instruções de repetição cíclica
O conceito de acumulador e contador
Utilização de arrays
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• Problema:
Dada uma sequência de 3 valores numéricos, lidos
do teclado, calcular a sua média e escrever o
resultado no écran.
• Variáveis de entrada: seq. de valores {ai: 1≤ i< 3}
• Variável de saída:
media
Luís Almeida - Programação I, 01/02
1
Cálculo da média de uma
sequência de valores
• Solução trivial:
Utilização de 3 variáveis diferentes e
independentes (a1, a2 e a3)
media =
1
⋅ (a1 + a2 + a3)
3
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• Solução trivial:
Utilização de 3 variáveis diferentes e
independentes (a1, a2 e a3)
media =
1
⋅ (a1 + a2 + a3)
3
• Ooops! e se for uma sequência com 100 valores?
Luís Almeida - Programação I, 01/02
2
Cálculo da média de uma
sequência de valores
• Problema mais genérico:
Dada uma sequência de N valores numéricos,
lidos do teclado, calcular a sua média e escrever o
resultado no écran.
• Variáveis de entrada: seq. de valores {ai: 1≤ i<N}
• Variável de saída:
media
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
Solução 1:
Utilização de N variáveis separadas (a1, a2 ... aN) ?!!
media =
1
⋅ (a1 + a2 + ... + aN )
N
• Agora tentem fazer isto com 100 variáveis separadas...
• Programa ilegível, impossível de escrever e corrigir...
Luís Almeida - Programação I, 01/02
3
Cálculo da média de uma
sequência de valores
Solução 2:
E se formos somando à medida que vamos lendo,
repetindo N vezes a soma parcial:
somai = somai-1 + ai
com um valor inicial soma0 = ?
0 (claro!)
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• Ao fim de termos repetido N vezes a soma parcial
teremos todos os valores da sequência lidos e
somados.
1
media =
⋅ soma N
N
• Só necessitamos de 3 variáveis para qualquer N:
N, soma e ai
• Atenção: cada valor da sequência é descartado na
leitura do valor seguinte.
Luís Almeida - Programação I, 01/02
4
Cálculo da média de uma
sequência de valores
• Mas como se constroi:
• Fazendo
soma := 0;
somai = soma i-1 + ai ?
(* repetir para cada ai ** Que tipo de ciclo? ** *)
soma := soma + ai ;
• A variável soma designa-se por acumulador.
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• Problema ainda mais genérico:
Dada uma sequência de valores numéricos positivos
lidos do teclado e terminada com “–1”, calcular a
sua média e escrever o resultado no écran.
• Variáveis de entrada: seq. de valores {ai: 1≤ i<N}
mas com N desconhecido!
• Variável de saída:
media
Luís Almeida - Programação I, 01/02
5
Cálculo da média de uma
sequência de valores
Solução:
Podemos usar o mesmo método mas, para além de
construirmos a soma teremos de contar o número
de elementos da sequência
• Como?
Da mesma forma
num i = num i-1 + 1 (por cada elemento lido)
E o valor inicial num0 ?
0 (claro!)
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• Mas como se constroi:
• Fazendo
num := 0;
num i = num i-1 + 1 ?
(* repetir para cada ai ** Que tipo de ciclo? ** *)
num := num + 1 ;
• A variável num designa-se por contador.
Luís Almeida - Programação I, 01/02
6
Acumuladores e Contadores
• Acumulador
soma := 0;
(* repetir para cada ai *)
soma := soma + ai ;
• Contador
num := 0;
(* repetir para cada ai *)
num := num + 1 ;
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• E não há mesmo maneira de efectuar a média
de um número genérico de elementos
guardando-os individualmente em memória?
• Sim, usando um array !
Luís Almeida - Programação I, 01/02
7
Cálculo da média de uma
sequência de valores
• array
• Conjunto de variáveis independentes, do
mesmo tipo e com o mesmo nome e que são
diferenciadas por um índice numérico do tipo
inteiro.
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• array (declaração)
var
sequencia: array[1..100] of integer;
sequencia
3
9
1
6
... 1
1
2
3
4
...
100
índice
Luís Almeida - Programação I, 01/02
8
Cálculo da média de uma
sequência de valores
• array (utilização)
begin
soma := soma + sequencia[1];
sequencia[2] := 9;
for i := 1 to 100 do
writeln(sequencia[i]);
...
end
Luís Almeida - Programação I, 01/02
Cálculo da média de uma
sequência de valores
• Com a utilização de um array, o cálculo de
uma média pode ser feito com qualquer N (!)
segundo o processo habitual de
leitura à cálculos à escrita
• Leitura do teclado para o array
• Cálculos sobre o array
• Escrita do resultado
Luís Almeida - Programação I, 01/02
9
Download