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