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.
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)
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
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 );
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 );
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 );
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.
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
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
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 );
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 );
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 );
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...
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 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.
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
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
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
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); 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.
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.
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
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