Introdução à Programação 2006/07 Algoritmos Cálculo da média de uma sequência Algoritmos: Exercício 1 Pretende-se escrever um programa que, dado um numero indeterminado de números introduzidos pelo teclado, atéque apareça o número zero como indicador de paragem, calcule a média dos números lidos e escreva-a no monitor. a)Efectue a especificação da estrutura de dados e solução do cálculo da média de uma sequência. b)Faça o algoritmo do programa. Introdução à Programação 2006/2007 Especificação Variável de entrada: Numero (número lido) Valor numérico real Variável de saída: Media (média calculada dos números lidos) Valor numérico real representado com 1 casa decimal Variáveis internas: Soma (soma acumulada dos números lidos) Valor numérico real N (contador dos números lidos Valor numérico inteiro positivo ou nulo Solução Media = soma / N (se N ≠ 0) Introdução à Programação 2006/2007 Algoritmo inicial Nome: Cálculo da média de uma sequência de números { Leitura de uma sequencia de números e contagem (Soma ↑, N↑) Se há números para calcular a média Então 1º calculo da média (Soma ↓, N ↓, Media ↑) 2º Escrita da média Senão escrita de uma mensagem de erro } Introdução à Programação 2006/2007 Algoritmo de segundo nível nome: Cálculo da média de uma sequência de números (Soma ↑, N ↑) { Soma=0.0; N = 0; Do { Output (“introduza um número? “); Input (Numero); If (Numero != 0.0 { Soma = Soma + Numero; N = N +1; } } while (Numero != 0.0); } nome: Cálculo da média (Soma ↓, N ↓, Media ↑) { Media = Soma / N } nome: Escrita da média { output (“Média dos números lidos = ”. Media); } nome: Escrita de uma mensagem de erro { output (“Não foi introduzido qualquer número válido”); } Introdução à Programação 2006/2007 Algoritmo final nome: Cálculo da média de uma sequência de números (1ª versão) { /* Leitura da sequência de números, sua soma e contagem */ Soma=0.0; N = 0; do { Output (“introduza um número? “); Input (Numero); If (Numero != 0.0 { Soma = Soma + Numero; N = N +1; } } while (Numero != 0.0); if (N > 0) /* foram lidos números? */ { /* Cálculo de média */ Media = Soma / N; /* Escrita da média */ output (“Média dos números lidos = ”. Media); } else output (“Não foi introduzido qualquer número válido”); } Introdução à Programação 2006/2007 Segunda versão final do Algoritmo nome: Cálculo da média de uma sequência de números (2ª versão) { /* Leitura da sequência de números, sua soma e contagem */ Soma=0.0; N = 0; Output (“introduza um número? “(; Input (Numero); while (Numero != 0.0); { Soma = Soma + Numero; N = N +1; Output (“introduza um número? “(; Input (Numero); } if (N > 0) /* foram lidos números? */ { /* Cálculo de média */ Media = Soma / N; /* Escrita da média */ output (“Média dos números lidos = ”, Media); } else output (“Não foi introduzido qualquer número válido”); } Introdução à Programação 2006/2007 Algoritmos: Exercício 2 Pretende-se um programa que leia números inteiros positivos introduzidos pelo teclado, até que apareça o número zero como indicador de paragem ou até à leitura de um máximo 50 números, e que determine e escreva o maior dos números lidos no monitor. Portanto, pretende-se ignorar eventuais números negativos que forem introduzidos pelo teclado. a)Efectue a especificação da estrutura de dados e solução do problema. b)Faça o algoritmo do programa. Introdução à Programação 2006/2007 Especificação Variável de entrada: Numero (número lido) Valor numérico inteiro positivo Variável de saída: Maior (maior número lidos) Valor numérico inteiro positivo Variável interna: N (contador dos números lidos Valor numérico inteiro positivo ou nulo Introdução à Programação 2006/2007 Algoritmo inicial Nome: Cálculo do maior número de uma sequência de números { Leitura de uma sequencia de números e contagem (Maior ↑, N↑) Se foram lidos números Então escrita do maior número detectado (Maior ↓) Senão escrita de uma mensagem de erro } Introdução à Programação 2006/2007 Algoritmo de segundo nível nome: Cálculo do maior número de uma sequência de números (Maior ↑, N ↑) { /* Leitura da sequência e detecção do maior número lido sua soma e contagem */ N = 0; Maior = 0; do { do { Output (“introduza um número positivo? “); Input (Numero); } while (Numero < 0); If (Numero != 0) { N = N + 1 if (Numero > Maior) Maior = Numero; ) } while ((n < 50) and (Numero != 0)); } nome: escrita do maior número detectado (Maior ↓) { output (“Maior dos números lidos = ”. Maior); } nome: Escrita de uma mensagem de erro { output (“Não foi introduzido qualquer número válido”); } Introdução à Programação 2006/2007 Algoritmo final – 1ª versão nome: Cálculo do maior número de uma sequência de números (1ª versão) { /* Leitura da sequência e detecção do maior número lido */ N = 0; Maior = 0; do { do { Output (“introduza um número positivo? “); Input (Numero); } while (Numero < 0); If (Numero != 0) { N = N + 1 if (Numero > Maior) Maior = Numero; ) } while ((n < 50) and (Numero != 0)); If (N > 0) /* foram lidos números? */ output (“Maior dos números lidos = ”, Maior); else output (“Não foi introduzido qualquer número válido”); } Introdução à Programação 2006/2007 Algoritmo final – 2ª versão nome: Cálculo do maior número de uma sequência de números (1ª versão) { /* Leitura da sequência e detecção do maior número lido */ N = 0; Maior = 0; do { do { output (“introduza um número positivo? “); input (Numero); } while (Numero < 0); if (Numero == 0) break; N = N + 1 if (Numero > Maior) Maior = Numero; ) } while ((n < 50) and (Numero != 0)); If (N > 0) /* foram lidos números? */ output (“Maior dos números lidos = ”, Maior); else output (“Não foi introduzido qualquer número válido”); } Introdução à Programação 2006/2007 Algoritmos: Exercício 3 Possuímos um arquivo com a idade de n pessoas. Queremos calcular o número de pessoas que tem a idade X. O valor de X é lido na primeira linha do arquivo, precedendo os valores da idade das próximas pessoas. ----------------------- formato do arquivo : 18 21 21 ... 15 18 ----------------------onde 18 é X, por ser a primeira posição... Introdução à Programação 2006/2007 Algoritmos: Exercício 3 ALGORITMO inteiro n, X, qtdePessoas; n = 0; qtdePessoas=0; X =0; INICIO leia(X); {primeira posição do arquivo - linha 1} enquanto((leia (n) )== verdadeiro) faça se(X == n) então qtdePessoas = qtdePessoas +1; fim se fim enquanto escreva("A quantidade de pessoas que possuem a mesma idade são ", qtdePessoas); FIM Introdução à Programação 2006/2007 FIM ALGORITMO Algoritmos: Exercício 4 Elabore um diagrama que apresente ao seu final o somatório dos valores pares existentes entre 1 e 500. Introdução à Programação 2006/2007 Algoritmos: Exercício 4 para este exercício considero o contador cont começando em 2 ou seja já é o primeiro par... o próximo par basta somar 2 ao contador... ALGORITMO inteiro soma, cont; soma = 0; INICIO PARA(cont=2 até (cont <= 500), cont = cont + 2) soma = soma + cont; FIM PARA escreva("A soma é ", soma); FIM FIM ALGORITMO Introdução à Programação 2006/2007 Algoritmos: Exercício 4 Outra forma de fazer: ALGORITMO inteiro soma, cont; soma = 0; INICIO enquanto(cont <= 500) faça se ((cont % 2)== 0)então soma = soma + cont; fim se fim enquanto escreva("A soma é ", soma); FIM FIM ALGORITMO Introdução à Programação 2006/2007 Algoritmos: Exercício 5 Escrever um diagrama para gerar e imprimir os N primeiros termos da série de Fibonacci, cujo comportamento é o seguinte: A partir do terceiro (Inclusive) cada termo é obtido somando-se os dois antecessores. Inicie com o numero 1 e 1 Serie: (1 1 2 3 5 8 13 21 34...) FORMULA : Fn = F(n-1) + F(n-2) ou seja: F1 = 1 F2 = 1 F3 = F2 + F1 --> F3 = 2 F4 = F3 + F2 --> F4 = 3 Introdução à Programação 2006/2007 Algoritmos: Exercício 5 ALGORITMO inteiro n, cont, fib_n, fib_n1, fib_n2; fib_n = fib_n1 = fib_n2 = n = cont = 0; {inicialização de variaveis NULAS} INICIO fib_n1 = 1; {inicio da serie : primeiro termo} escreva(fib_n1); {mostra o termo} fib_n2 = 1; {inicio da serie : segundo termo} escreva(" - ", fib_n2); {mostra o termo} cont = 2; {cont começa com dois números contado F1 e F2} escreva("Digite o ultimo termo a encontrar: "); leia(n); {qtde de termos da série: exemplo n = 6, F6 = 8} enquanto(cont <= n) faça fib_n = fib_n1 + fib_n2; escreva(" - ", fib_n); {mostra os termos} fib_n2 = fib_n1; {troca de valores} fib_n1 = fib_n; cont = cont +1; fim enquanto escreva("O Fibonacci de ", n, " é igual a ", fib_n); Introdução à Programação 2006/2007 FIM FIM ALGORITMO + Problemas de Algoritmos Pretende-se o algoritmo de um programa que leia um número inteiro introduzido pelo utilizador e verifique se ele se encontra entre 1 e 10. Pretende-se o algoritmo de um programa que calcule a nota final da disciplina de Introdução à programação de um aluno, de acordo com as regras definidas na ficha de disciplina. Pretende-se o algoritmo de um programa para jogar o jogo do advinha. O computador terá que gerar um número aleatório entre 0 e 100, e o utilizador irá tentar adivinhar o número gerado. Sempre que o utilizador introduzir uma tentativa, o programa deverá informar se é maior, menor ou igual ao número gerado. Quando o utilizador adivinhar, o programa deve informar do número de tentativas efectuadas. Pretende-se um programa para descobrir um número entre 0 e 100, pensado pelo utilizador. Introdução à Programação 2006/2007 Algoritmo do jogo para acertar num número pensado por um colega. Dividir a turma a meio e cada metade tenta resolver uma das partes do jogo. Metade da turma pensa no problema do ponto de vista de quem vai escolher um número e responde às perguntas de um utilizador que tenta acertar no número escolhido. A outra metade pensa no algoritmo para tentar acertar num número entre 1 e 100. No final alteramos as duas soluções para informar o nº de tentativas efectuadas. Introdução à Programação 2006/2007 Algoritmo gerar um número aleatório n, entre 1 e 100 inicializar o numero de tentativas com 0 enquanto tentativas < 10 ou ainda não acertou fazer pedir ao utilizador para digitar um outro número ler o novo número x se x = n o utilizador acertou senão se n>x informar que o número procurado é maior senão informar que o número procurado é menor acrescentar o número de tentativas fim_enquanto se acertou informar que acertou caso contrário revelar o número procurado Introdução à Programação 2006/2007 programa adivinha var n,tentativa,x : integer; acertou : boolean; r : real; begin r:=random; x:=round(r*100); tentativa:=0; acertou:=false; while(not acertou) and (tentativa<10)do write(“digite um número entre 0 e 100”); read(n); if(n=x) acertou:=true else if(x>n) write(“o número é maior que “,n) else write('o número é menor que ', n); tentativa:=tentativa+1; if (acertou) write(“acertou o número') else write(“Perdeu o jogo, o número era : “,x); end Introdução à Programação 2006/2007