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
A execução de um algoritmo segue um sentido
natural que parte da primeira instrução e termina
com a última.
Este tipo de execução é dito ser linear.
Mas impõe uma rigidez no algoritmo que pode não
contemplar a descrição de uma solução mais
complexa.
Controles de Execução
Assim como na vida cotidiana, muitas vezes devemos
decidir o que fazer em função de uma situação:
Se tem café, então tomo o café e saio para o trabalho.
Senão, saio para tomar café na padaria e sigo para o
trabalho.
Além disso, não é rara as situações onde devemos
repetir um mesmo conjunto de ações seja um
número definido de vezes ou até que uma condição
seja satisfeita.
Controles de Execução
Para cada livro em minha estante: retirar da prateleira,
tirar a poeira do livro e colocá-lo na caixa.
Enquanto a lâmpada não acender, trocá-la.
Assim, veremos como organizar estes tipos de
comando dentro de um algoritmo para que
soluções mais complexas possam ser
desenvolvidas.
Controles de Execução Condicional
Os comandos que exercem o controle de execução
condicional em algoritmo (comandos de seleção) se
resumem ao seguinte comando de seleção simples:
se (avaliação condicional), então
{ bloco correspondente ao resultado da } { avaliação condicional como VERDADEIRO }
senão
{ bloco correspondente ao resultado da } { avaliação condicional como FALSO }
fim se
Controles de Execução Condicional
A partir desta estrutura básica, podemos criar
cenários muito mais complexos, por exemplo,
comandos de seleção aninhados:
se (teste1), então se (teste2), então
se ...
senão ... fim se senão ... fim se senão ... fim se
Controles de Execução Condicional
Ou comandos de seleção encadeados:
se (teste1), então
senão se (teste 2), então ... senão se (teste 3), então ... senão ...
fim se
Existem diferenças lógicas nas aplicações dos
comandos de seleção aninhados e encadeados.
Controles de Execução Condicional
Se você observar com cuidado, no comando de
seleção aninhado, a estrutura completa do comando
de seleção simples está presente em cada um dos
blocos da estrutura.
Veja o exemplo seguinte e acompanhe a lógica.
Controles de Execução Condicional
se (condição A verdadeira), então
se (condição B verdadeira), então
se (condição C verdadeira), então
{ bloco 1 }
senão
{ bloco 2 }
fim se { teste C }
senão
se (condição D verdadeira), então
{ bloco 3 }
senão
Controles de Execução Condicional
{ bloco 4 }
fim se { teste D }
fim se { teste B }
senão
se (condição E verdadeira), então
{ bloco 5 }
senão
{ bloco 6}
fim se { teste E }
fim se { teste A }
Controles de Execução Condicional
O bloco 1 só é executado se e somente se as condições
A e B e C forem VERDADEIRAS, ou seja,
se (A é VERDADE e B é VERDADE e C é VERDADE),
então executar bloco 1.
O bloco 2 só é executado se e somente se as
condições A e B forem VERDADEIRAS e C FALSA,
ou seja,
se (A é VERDADE e B é VERDADE e C é FALSO), então
executar bloco 2.
Controles de Execução Condicional
O bloco 3 só é executado se e somente se as
condições A e D forem VERDADEIRAS e B FALSA,
ou seja,
se (A é VERDADE e B é FALSO e D é VERDADE), então
executar bloco 3.
O bloco 4 só é executado se e somente se as
condições B e D forem FALSAS e A VERDADEIRA,
ou seja,
se (A é VERDADE e B é FALSO e D é FALSO), então
executar bloco 4.
Controles de Execução Condicional
O bloco 5 só é executado se e somente se a condição
A for FALSA e E for VERDADEIRA, ou seja,
se (A é FALSO e E é VERDADE), então executar bloco 5.
O bloco 6 só é executado se e somente se as
condições A e E forem FALSAS, ou seja,
Controles de Execução Condicional
As combinações de condição podem ser visualizadas
da seguinte forma:
14 A B E C D
bloco 6 bloco 5
Desenvolvimento de algoritmos
Com esta introdução, já podemos olhar para um
problema, elaborar uma solução e desenvolver
algoritmos simples.
O desenvolvimento envolve:
analizar o problema
elaborar solução preliminar (método) identificar entradas e saídas
identificar variáveis
escrever algoritmo preliminar (normalmente pouco
estruturado)
Desenvolvimento de algoritmos
aplicar repetidamente refinamentos no algoritmo formatar algoritmo segundo padrão estabelecido gerar algoritmo final
Desenvolvimento de algoritmos
Vamos ver alguns exemplos:
Digamos que um aluno precisa calcular as raízes reais de um
polinômio de segundo grau. O método para a determinação de raízes, neste caso, é direto e usa o método chamado Método de Báscara. Neste método, os coeficientes de cada termos são
combinados de forma conveniente para gerar um parâmetro chamado delta de Báscara. Dependendo do valor do parâmetro delta, sabemos se o polinômio de segundo grau possui duas
raízes reais distintas, duas raízes reais idênticas ou nenhuma raiz real.
Desenvolvimento de algoritmos
Primeiro, vamos definir a expressão algébrica do polinômio de
segundo grau:
ax2+bx+c = 0
O parâmetro delta () é calculado segundo a expressão:
= b2-4ac
O valor de é aplicado na expressão algébrica que determina
as raízes. A expressão é única, mas os resultados dependem do valor de .
Desenvolvimento de algoritmos
A expressão das raízes é:
x1=(-b+)/(2a)
e
x2=(-b-)/(2a)
Olhando novamente o parâmetro , percebemos que se o
termo b2 é maior que 4ac, então é maior que zero e temos
duas raízes distintas. Se b2 é igual a 4ac, então é zero e as
raízes são idênticas. Por fim, se b2 é menor que 4ac, então a
função raiz quadrada gerará um resultado complexo e é dito que o polinômio não tem raízes reais.
Desenvolvimento de algoritmos
Portanto:
b2-4ac
se (>0), então
x1 (-b+)/(2a) x2 (-b-)/(2a)
escrever “As raízes são:”, x1, “e”, x2, “.”
senão se (=0), então
x1 -b/(2a)
escrever “A raiz dupla vale”, x1, “.”
senão
escrever “O polinômio não tem raízes reais.”
fim se
Desenvolvimento de algoritmos
Bem, diante desta solução preliminar (algoritmo), podemos
determinar quem são os dados de entrada e de saída, se temos constantes, quem são as variáveis e as naturezas dos dados que compõem o algoritmo.
De cara, tudo depende de termos os coeficientes do polinômio
de segundo grau: a, b e c.
Então, estes são os dados de entrada.
A saída corresponde às raízes x1 e x2 e a sentença que esclarece
o caso encontrado: “as raízes são” ou “a raiz dupla é” ou “não tem raízes reais.”
Os dados a, b, c, delta, x1 e x2 são variáveis numéricas e as
sentenças são constantes literais.
Desenvolvimento de algoritmos
O parâmetro não pode ser usado no algoritmo final na forma
de letra grega. Logo, substituímos pelo nome dela, que será seu identificador: delta.
Mesma coisa para a operação de radiciação, . Como não
podemos usar este caractere, substituiremos pela expressão
“rad()” ou usaremos a operação aritmética de potenciação: delta**0,5.
Vamos tentar fazer o algoritmo todo documentado.
Desenvolvimento de algoritmos
Algoritmo Raízes Reais de Polinômio de Segundo
Grau
Data: 29/08/2011 Autor:
Propósito: calcular as raízes reais de um polinômio de segundo
grau caso elas existam.
Método: aplicar o método de Báscara para determinação das
raízes reais. Primeiro se calcula o valor do parâmetro ( =b2-4ac) e depois se avalia o resultado. Se for maior que zero, então o polinômio tem duas raízes. Se for igual a zero, o polinômio tem raiz dupla. Se for negativo, o polinômio não tem raiz real. As raízes reais são calculadas usando a expressão
Desenvolvimento de algoritmos
x=(-b)/(2a).
Entradas e Saídas:
Entradas: a, b e c {coeficientes do polinômio}
Saídas: x1 e x2 {raízes reais}
Observações, Requisitos, Restrições: nenhum.
algoritmo
declare a, b, c numéricos {coeficiente do polinômio} declare x1, x2 numérico {raízes reais}
declare delta numérico {coeficiente de Báscara}
escrever “Escreva os coeficientes do polinômio (a, b, c):” ler a, b, c
Desenvolvimento de algoritmos
delta b*b – 4*a*c se (delta>0), então
x1 (-b+delta**0,5)/(2*a) x2 (-b-delta**0,5)/(2*a)
escrever “As raízes são:”, x1, “e”, x2, “.” senão se (delta=0), então
x1 -b/(2*a)
escrever “A raiz dupla vale”, x1, “.” senão
escrever “O polinômio não tem raízes reais.” fim se
fim algoritmo
Desenvolvimento de algoritmos
Digamos que uma escola queira otimizar o processo de
aprovação dos alunos segundo as notas de uma disciplina. O mecanismo de aprovação funciona segundo a seguinte regra:
se o aluno tiver média parcial igual ou superior a 7,0, ele é
aprovado;
se o aluno tiver média parcial abaixo de 4,0, ele é reprovado.
Falhando estes dois casos, o aluno deverá realizar a prova final
e a regra adotada é a seguinte:
se a média final for igual ou superior a 5,0, ele é aprovado;
caso contrário, ele é reprovado.
O aluno é avaliado em três provas teóricas (P1, P2 e P3), três
testes de laboratório (T1, T2 e T3) e em 7 atividades práticas de laboratório.
Desenvolvimento de algoritmos
A média parcial (mpar) é uma ponderação das médias das
provas (mpro), dos testes (mtes) e das atividades práticas (matv).
A média das provas, dos testes e das atividades são médias
aritméticas.
Os pesos da média parcial são distribuídos da seguinte forma:
3 para média das provas;
2 para média dos testes;
2 para média das atividades.
A média final (mf) é a média aritmética entre média parcial e a
nota da prova final (pf).
Desenvolvimento de algoritmos
Expressando na forma aritmética:
mpro = (P1+P2+P3)/3
mtes = (T1+T2+T3)/3
matv = (A1+A2+A3+A4+A5+A6+A7)/7
mpar = (3mpro+2mtes+2matv)/7
mf = (mpar+pf)/2
Então, o método como um todo fica o seguinte:
calcula-se a médias das provas, a média dos testes e a média das
atividades;
calcula-se a média parcial;
se média parcial maior ou igual a 7, então aluno passou;
Desenvolvimento de algoritmos
senão, calcular média final com nota da prova final;
se média final for maior ou igual a 5, então aluno está aprovado;
senão, aluno está reprovado.
Neste panorama, é fácil identificar os dados de entrada: notas
das três provas, notas dos três testes e notas das atividades práticas.
A saída também é fácil identificar: aluno aprovado ou
reprovado, além da média de aprovação ou reprovação.
Aprovado ou reprovado podem ser constantes literais.
As notas das provas, testes e atividades, as médias e a nota da
prova final são variáveis.
Como elas representam números, então são variáveis
numéricas.
Desenvolvimento de algoritmos
A versão preliminar do algoritmo fica:
declare p1, p2, p3 numéricos {notas das provas} declare t1, t2, t3 numéricos {notas dos testes}
declare a1, a2, a3, a4, a5, a6, a7 numéricos {atividades} 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 aprov literal constante (“Aprovar”) declare reprov literal constante (“Reprovar”)
Desenvolvimento de algoritmos
{entrada de dados}
escrever “Entre com as notas das provas (P1, P2 e P3):” ler p1, p2, p3
escrever “Entre com as notas dos testes (T1, T2 e T3):” ler t1, t2, t3
escrever “Entre com as notas das atividades (A1 até A7):” ler a1, a2, a3, a4, a5, a6, a7
{cálculo das médias}
mpro (p1+p2+p3)/3 {média das provas} mtes (t1+t2+t3)/3 {média dos testes}
matv (a1+a2+a3+a4+a5+a6+a7)/7 {média das atividades} mpar (3*mpro+2*(mtes+matv))/7 {média parcial}
{continua}
Desenvolvimento de algoritmos
{continuação}
se (mpar>=7), então
escrever “Média: ”, mpar, “ Situação: ”, aprov {aprovação direta} senão se (mpar<4), então
escrever “Média: ”, mpar, “ Situação: ”, reprov {reprovação direta} senão {caso a ser estudado, nota entre 4,0 e 7,0}
ler pf
mf 0,5*(mpar+pf) se (mf>=5), então
escrever “Média: ”, mf, “ Situação: ”, aprov {aprovado em média final} senão
escrever “Média: ”, mf, “ Situação: ”, reprov {reprovado em média final} fim se
fim se