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
Download

Introdução à Programação 2006/07