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 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: i< 3} Variável de saída: media
Solução trivial: Utilização de 3 variáveis diferentes e independentes (a, a2 e a3) media = (a+ a2 + a3) 3 Solução trivial: Utilização de 3 variáveis diferentes e independentes (a, a2 e a3) media = (a+ a2 + a3) 3 Ooops! e se for uma sequência com 00 valores? 2
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: i<n} Variável de saída: media Solução : Utilização de N variáveis separadas (a, a2... an)?!! media = + N ( a+ a2 +... an ) Agora tentem fazer isto com 00 variáveis separadas... Programa ilegível, impossível de escrever e corrigir... 3
Solução 2: E se formos somando à medida que vamos lendo, repetindo N vezes a soma parcial: soma i = soma i- + ai com um valor inicial soma 0 =? 0 (claro!) Ao fim de termos repetido N vezes a soma parcial teremos todos os valores da sequência lidos e somados. 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. 4
Mas como se constroi: soma i = soma i- + ai? Fazendo soma := 0; (* repetir para cada ai ** Que tipo de ciclo? ** *) soma := soma + ai ; A variável soma designa-se por acumulador. Problema ainda mais genérico: Dada uma numéricos positivos lidos do teclado e terminada com, calcular a sua média e escrever o resultado no écran. Variáveis de entrada: seq. de valores {ai: i<n} mas com N desconhecido! Variável de saída: media 5
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- + (por cada elemento lido) E o valor inicial num 0? 0 (claro!) Mas como se constroi: num i = num i- +? Fazendo num := 0; (* repetir para cada ai ** Que tipo de ciclo? ** *) num := num + ; A variável num designa-se por contador. 6
Acumuladores e Contadores Acumulador soma := 0; (* repetir para cada ai *) soma := soma + ai ; Contador num := 0; (* repetir para cada ai *) num := num + ; 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! 7
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. array (declaração) var sequencia: array[..00] of integer; sequencia 3 9 6... 2 3 4... 00 índice 8
array (utilização) begin soma := soma + sequencia[]; sequencia[2] := 9; for i := to 00 do writeln(sequencia[i]);... end 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 9