Física Computacional
2011-2
I N T R O D U Ç Ã O À L Ó G I C A D E P R O G R A M A Ç Ã O
P R O F . L U Í S F E R N A N D O D E O L I V E I R A
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO INSTITUTO DE FÍSICA ARMANDO DIAS TAVARES
Controles de Execução de Repetição
Os comando que exercem o controle de repetição
podem ser classificados em repetição condicionada
ou repetição sequencial.
Este comandos já foram apresentados nas primeiras
aulas:
enquanto
(
teste
), fazer
/ fim enquanto
fazer
/ enquanto
(
teste
)
repetir
/ até que
(
teste
)
para
variável
de
valor inicial
até
valor final
com passo
valor
,
fazer
/ fim para
Controles de Execução de Repetição
O controle de repetição condicional
enquanto
(
teste
),
fazer
/
fim enquanto
tem a característica de repetir
um bloco de instruções enquanto o resultado de
teste
for
verdadeiro
.
Uma das possibilidades deste tipo de controle é a de
nunca entrar no bloco de instruções de repetição.
Se
teste
for
falso
logo de cara, o controle de repetição
falha e o bloco não é executado.
Controles de Execução de Repetição
O controle de repetição condicional
fazer
/
enquanto
(
teste
) tem a característica de repetir um bloco de
instruções enquanto o resultado de
teste
for
verdadeiro
como no comando anterior.
Diferente do comando anterior, o bloco de instruções
é executado pelo menos uma vez, pois o
teste
só é
avaliado no final do comando.
Controles de Execução de Repetição
O controle de repetição condicional
repetir
/
até que
(
teste
) tem a característica de repetir um bloco de
instruções enquanto o resultado de
teste
for
falso
diferente dos comandos anteriores.
Dito de outra forma, este controle repete o bloco de
instruções até que
teste
se torne
verdadeiro
.
O bloco de instruções é executado pelo menos uma
vez, pois o
teste
só é avaliado no final do comando
como em
fazer
/
enquanto
(
teste
).
Controles de Execução de Repetição
O controle de repetição sequencial
para
variável
de
inicio
até
fim
passo
valor
, fazer
/
fim para
para difere
dos demais comandos por ter o número de iterações
predefinido.
O parâmetro
variável
deve ser substituído pela
variável contadora, isto é, a variável numérica que irá
identificar as iterações.
Os valores
inicio
e
fim
correspondem aos valores
limítrofes para as contagens.
O valor
passo
é usado para incrementar a contagem
com valores diferentes da unidade.
Controles de Execução
Por exemplo, uma repetição sequencial iniciando
com valor
1
e terminando com
10
de
1 em 1
usando
uma variável contadora identificada pelo rótulo
cont
:
para cont de 1 até 10 passo 1, fazer {bloco de instruções}
fim para
O passo a passo da repetição ocorre da seguinte
forma:
A variável contadora
cont
recebe o valor inicial
1
;
O bloco de instruções é executado;
Ao terminar a execução do bloco, depara-se com a instrução
fim para;
Controles de Execução
Neste ponto, retornamos para o comando de repetição e se
atualiza o valor da variável contadora
cont
usando o valor de
passo, neste caso,
1
;
Compara-se o valor atualizado da variável contadora
cont
(que
é
2
) com o valor final de contagem (que é
10
);
Se o valor atualizado da variável contadora
cont
não for
superior ao valor final de contagem (
10
), então o comando de
repetição executa novamente o bloco de instruções;
2 é menor que 10, logo o bloco será executado
O processo se repete até que a variável contadora
cont
assuma
o valor
11
;
Quando isto acontecer, o comando de repetição se encerra.
Controles de Execução
Resumindo:
O processo de contagem também pode ser
decrescente, basta que o valor de passo seja negativo.
9
continicio bloco de instruções contcont+passo
cont≤fim V
Controles de Execução
O comando de repetição sequencial é muito útil para
a implementação de operações matemáticas como
somatório e produtório:
y 0 {inicializa a variável y com valor 0}
para i de 1 até N, fazer
ler x {lê um valor de x de cada vez} y y + x {atualiza o valor de y}
fim para
escrever y {apresenta o resultado do somatório}
10
Desenvolvimento de algoritmos
Usando o exemplo das médias das provas:
{declaração da variáveis e constantes}
declare prova numérico {nota de prova} declare teste numérico {nota de teste}
declare atividade numérico {nota de atividade} declare mpro numérico {média das provas} declare mtes numérico {média dos testes}
declare matv numérico {média das atividades} declare mpar numérico {média parcial}
declare pf numérico {nota prova final} declare mf numérico {média final} declare i numérico {contador}
Desenvolvimento de algoritmos
declare aprov literal constante (“Aprovar”) declare reprov literal constante (“Reprovar”)
{calcular média das provas}
mpro 0 {inicializa mpro com 0} para i de 1 até 3, fazer
escrever “Entre com nota da prova P”, i ler prova
mpro mpro+prova fim para
mpro mpro/3 {calcula a média das provas} {calcular média dos testes}
mtes 0 {inicializa mtes com 0} para i de 1 até 3, fazer {continua}
Controles de Execução
{continuação}
escrever “Entre com nota do teste T”, i ler teste
mtes mtes+teste fim para
mtes mtes/3 {calcula a média dos testes}
{calcular média das atividades}
matv 0 {inicializa matv com 0} para i de 1 até 7, fazer
escrever “Entre com nota da atividade A”, i ler atividade
matv matv+atividade fim para {continua}
Desenvolvimento de algoritmos
{continuação}
matv matv/7 {calcula a média das atividades}
{calcular média parcial}
mpar (3*mpro+2*(mtes+matv))/7 {média parcial}
{avaliar a situação do aluno...}
se (mpar>=7), então {aprovação direta}
escrever “Média: ”, mpar, “ Situação: ”, aprov
senão se (mpar<4), então {reprovação direta} escrever “Média: ”, mpar, “ Situação: ”, reprov senão {caso a ser estudado...}
ler pf
mf 0,5*(mpar+pf) {continua}
Controles de Execução
{continuação}
se (mf>=5), então {aprovado em média final}
escrever “Média: ”, mf, “ Situação: ”, aprov
senão {reprovado em média final}
escrever “Média: ”, mf, “ Situação: ”, reprov fim se
fim se
Controles de Execução
Digamos que um pesquisador queira verificar o valor médio
(media
i) de uma sequência de medidas (dado
i) conforme ele
for inserindo os dados experimentais.
Vamos assumir inicialmente um único dado (n=1).
A média para um único dado é o próprio valor do dado:
soma1 = dado1
media1 = soma1/1 = dado1
Se forem dois valores (n=2):
soma2 = dado1+dado2
media2 = soma2/2 = (dado1+dado2)/2 = (soma1+dado2)/2 = (1*media1+dado2)/2
Controles de Execução
Se forem três dados (n=3)
soma3 = dado1+dado2+dado3
media3 = soma3/3 = (dado1+dado2+dado3)/3 =
= (soma2+dado3)/3 = (2*media2+dado3)/3
Se forem quatro dados (n=4)
soma4 = dado1+dado2+dado3+dado4
media4 = soma4/4 = (dado1+dado2+dado3+dado4)/4 = = (soma3+dado4)/4 = (3*media3+dado4)/4
Se forem M dados (n=M)
somaM = dado1+dado2+...+dadoM
mediaM = somaM/M = (dado1+dado2+...+dadoM)/M =
= (somaM-1+dado4)/4 = [(M-1)*mediaM-1+dadoM]/M
Controles de Execução
Generalizando,
mediai = [(i-1)*mediai-1+dadoi]/i
Esta expressão tem uma forma recursiva: a informação atual é
uma composição da informação anterior mais um novo dado:
media = [(i-1)*media+dado]/i
Se o número de dados é conhecido de antemão, podemos usar
um controle de repetição sequencial.
Senão, usaremos um controle de repetição condicional. O
critério de parada da repetição deverá ser definido. Um
exemplo: se todas as medidas são sempre positivas, então, um
indicador de fim poderia ser a inserção de um número
negativo.
Controles de Execução
Uma versão preliminar do
algoritmo...
{versão com controle de repetição sequencial}
declare dado numérico {dado}
declare media numérico {média dos dados} declare n numérico {total de dados} declare i numérico {contador}
escrever “Entre total de dados:” ler n
para i de 1 até n, fazer
escrever “Entre com o dado ”, i ler dado
media ((i-1)*media+dado)/i
escrever “Média: ”, media fim para
Controles de Execução
{versão com controle de repetição condicional enquanto-fazer}
declare dado numérico {dado}
declare media numérico {média dos dados} declare i numérico {contador}
escrever “Para interromper, entre com um número negativo” i 1
escrever “Entre com dado ”, i ler dado
enquanto (dado>=0), fazer
media ((i-1)*media+dado)/i escrever “Média: ”, media
{continua}
Controles de Execução
{continuação} i i+1
escrever “Entre com dado ”, i ler dado
fim enquanto
Controles de Execução
{versão com controle de repetição condicional fazer-enquanto}
declare dado numérico {dado}
declare media numérico {média dos dados} declare i numérico {contador}
escrever “Para interromper, entre com um número negativo” i 1
fazer
escrever “Entre com dado ”, i ler dado
se (dado>=0), então
media ((i-1)*media+dado)/i {continua}
Controles de Execução
{continuação}
escrever “Média: ”, media i i+1
fim se
enquanto (dado>=0)
Controles de Execução
{versão com controle de repetição condicional repetir-até}
declare dado numérico {dado}
declare media numérico {média dos dados} declare i numérico {contador}
escrever “Para interromper, entre com um número negativo” i 1
repetir
escrever “Entre com dado ”, i ler dado
se (dado>=0), então
media ((i-1)*media+dado)/i {continua}
Controles de Execução
{continuação}
escrever “Média: ”, media i i+1
fim se
até (dado<0)