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
Elementos de Informação
Um algoritmo é uma sequência de ações dispostas
numa lógica tal que ao final da aplicação do
algoritmo, a solução do problema é encontrada.
Por vezes, um algoritmo precisa manipular
informações.
Por exemplo, no algoritmo da troca de lâmpadas, o
estado da lâmpada é uma informação.
Elementos de Informação
Ao dizermos “a lâmpada está boa” ou “a lâmpada não
acende”, estamos elaborando uma informação.
“boa”, “ruim”, “acende”, “não acende” não significam
nada isoladamente, mas, combinados aos termos
“lâmpada é” ou “lâmpada está”, se tornam
significantes.
Na computação, os termos “boa”, “ruim”, “acende”,
“não acende” são valores constantes.
Elementos de Informação
O estado da lâmpada testada poderia ser identificado
pelo signo (significante, símbolo) estado.
Então, quando escrevemos no algoritmo a expressão
estado “boa”, estamos informando algo
significante, ou seja, construindo uma informação, dizendo que o estado da lâmpada é boa.
O signo estado pode assumir qualquer uma das
possibilidades (“boa”, “ruim”, “acende”, “não
acende”)
Elementos de Informação
Então, o signo estado é uma variável que pode
assumir diferentes valores constantes.
estado “boa” ou estado “ruim”
estado “acende” ou estado “não acende”
Quando o conteúdo de um signo não varia (não
muda), o signo é dito ser um dado constante ou simplesmente uma constante.
Por exemplo, o signo pi cujo conteúdo seja o valor do
número é uma constante.
Elementos de Informação
Neste sentido, não faz sentido o conteúdo de pi
mudar ao longo de um algoritmo.
Por exemplo, no cálculo do perímetro de um círculo,
poderíamos usar a constante pi e duas variáveis:
perímetro e raio.
pi 3,1415927
perímetro 2*pi*raio
Elementos de Informação
Vale observar a regra que estamos usando para a
atribuição de um valor a uma variável ou um dado constante (o uso do símbolo ).
Quando atribuímos um valor constante a uma
variável ou a uma constante, dizemos que estamos
inicializando a variável ou a constante.
Ao inicializarmos uma constante, o conteúdo da
constante não pode mais mudar.
Elementos de Informação
Ao inicializarmos uma variável, garantimos
condições iniciais dentro de uma lógica e admitimos que seu conteúdo seja alterado.
Resumindo:
Uma constante é um elemento de informação cujo valor, uma vez definido através da operação de atribuição, não pode mais ser alterado.
Uma variável é um elemento de informação cujo valor inicial, definido através da operação de atribuição, pode ser alterado ao longo do algoritmo, segundo uma lógica.
Elementos de Informação
Toda informação deve ter uma natureza, isto é, ser
uma informação numérica, uma informação literal
ou uma informação lógica.
Uma informação numérica corresponde aos valores
numéricos (números) que podem ser inteiros, reais ou complexos.
Uma informação literal corresponde a uma
sequência de caracteres (chamada de string).
Elementos de Informação
Uma informação lógica corresponde aos valores de
um conjunto binário formado pelos valores lógicos constantes FALSO e VERDADEIRO.
No algoritmo, toda constante e toda variável deve ser
declarada e a declaração deve discriminar a natureza do conteúdo que será atribuído a elas. Exemplo:
declare pi numérico constante declare perímetro numérico declare raio numérico
declare estado literal
Elementos de Informação
Uma vez definida a natureza (o tipo) da constante ou
da variável, estas não poderão conter valores diferentes do tipo definido, ou seja
uma constante numérica e uma variável numérica só podem
armazenar valores numéricos.
uma constante literal e uma variável literal só podem
armazenar valores literais.
uma constante lógica e uma variável lógica só podem
armazenar valores lógicos.
Elementos de Informação
As constantes e as variáveis devem sempre ser
identificadas por um rótulo, um nome, uma
identidade, que as diferenciarão de outras constantes e variáveis.
Por exemplo, pi é o nome da constante numérica (o
rótulo, o identificador) que receberá o valor . Raio e
perímetro são identificadores das variáveis que
receberão os valores do raio da circunferência e o perímetro calculado respectivamente.
Elementos de Informação
Existe uma regra para a formação dos identificadores
de constantes e variáveis.
Um identificador sempre começa com uma letra
(maiúsculo ou minúsculo) seguida de outras letras
ou números ou uma mistura de ambos.
13
identificador letra
letra número
Elementos de Informação
Exemplo: raio, x5, Estado, a15b20, XYZ.
O padrão que será adotado em FisComp para a
declaração de variáveis e constantes seguirá a seguinte formatação:
A palavra chave “declare” sublinhado O identificador
O tipo da informação sublinhado (numérico, literal ou lógico) O classificador de “constante” sublinhado (se for o caso)
E, sendo uma constante, o valor deverá vir entre parênteses
Elementos de Informação
Exemplo:
declare raio numérico declare estado lógico
declare pi numérico constante (3,1415927) declare extensão literal constante (“.txt”) declare gravidade numérico constante (9,78)
15
declaração de variáveis e constantes
declare identificador tipo
constante (valor) ,
Expressões Aritméticas
A manipulação das informações numéricas
(constantes e variáveis) se dá através de expressões aritméticas.
O resultado de uma expressão aritmética é um
número.
Essas expressões aritméticas se caracterizam por
utilizarem operadores aritméticos, tais como soma,
subtração, multiplicação, divisão e potenciação.
Expressões Aritméticas
Cada um deste operadores é identificado pelos
símbolos: Soma: „+‟ Subtração: „-‟ Multiplicação: „*‟ Divisão: „/‟ Potenciação: „**‟ 17
Expressões Aritméticas
Numa expressão que misture vários operadores, os
operandos devem ser tratados segundo uma ordem
de precedência (importância, prioridade):
1. Potenciação (maior prioridade) 2. Multiplicação e Divisão
3. Soma e Subtração (menor prioridade)
Assim como na matemática, o uso de parênteses
altera a ordem de precedência, impondo que os termos entre parênteses sejam tratados antes.
Expressões Aritméticas
Agora, diferente da matemática, em um algoritmo,
não se usa colchetes „[ ]‟ nem chaves „{ }‟.
Estes são substituídos por outros parênteses. Por
exemplo:
z a*((x+b*y)+((x+y)*(x-y)))**c
A expressão matemática equivalente seria:
z = a{(x+by)+[(x+y)(x-y)]}c
Expressões Aritméticas
Então, a ordem de precedência dos operadores
aritméticos será:
1. Parênteses (maior prioridade) 2. Potenciação
3. Multiplicação e Divisão
4. Soma e Subtração (menor prioridade)
Quando a expressão aritmética envolve operadores
de mesma precedência, a regra é operá-los da esquerda para a direita.
Expressões Relacionais
Os operadores relacionais testam, como o nome diz,
a relação entre os operandos em termos de: “igual a”, “diferente de”, “maior que”, “maior ou igual a”,
“menor que”, “menor ou igual a”.
Os símbolos dos operadores relacionais são:
Igualdade: „=‟ Diferença: „≠‟
Maior e Maior ou igual: „>‟ e „≥‟ Menor e Menor ou igual: „<‟ e „≤‟
Expressões Relacionais
Alguns exemplos: resultado de „5>4‟: VERDADEIRO resultado de „5>5‟: FALSO resultado de „5≥5‟: VERDADEIRO resultado de „5≤5‟: VERDADEIRO resultado de „5<4‟: FALSO resultado de „4=5‟: FALSO resultado de „4≠5‟: VERDADEIRO 22Expressões Relacionais
Os operandos das expressões relacionais podem ser
expressões aritméticas:
resultado de „2+2=4‟: VERDADEIRO
resultado de „2**2≠-8/2‟: VERDADEIRO resultado de „3*(5-2)<(14/(5+2))*3‟: FALSO
Os operadores relacionais também podem ser
aplicados aos dados literais segundo um conjunto de regras estabelecido como senso comum.
Expressões Relacionais
Ao se comparar dois dados literais, se todos os
caracteres que compõem ambos os dados são idênticos, seguem a mesma ordem e possuem o
mesmo número de caracteres, então os dados literais são ditos serem “iguais”.
Exemplo:
resultado de “asdf”=“asdf”: VERDADEIRO resultado de “asdf”=“afds”: FALSO
resultado de “asdf”=“asd”: FALSO resultado de “asdf”=“Asdf”: FALSO
Expressões Relacionais
Qualquer caso diferente disso, os dados literais são
considerados diferentes entre si.
Sendo diferentes, os dados literais ainda podem ser
comparados segundo o senso de “maior” e “menor”.
Quando se compara dois caracteres diferentes, o
sentido de maior ou menor depende dos índices
correspondentes dos mesmos caracteres na tabela de caracteres (por exemplo, ASCII).
Expressões Relacionais
Expressões Relacionais
Então, por exemplo, se comparamos os caracteres
“a” e “b”, diremos que “a” é menor que “b” pois o índice do caractere “a” é menor que o índice do caractere “b”.
Um raciocínio simples é a localização dos caracteres
dentro do alfabeto.
Como o “a” vem antes do “b”, então dizemos que “a”
é “menor” que “b”.
Expressões Relacionais
Mas, ao compararmos o caractere “a” com o
caractere “A”, este último raciocínio falha.
Então, o melhor mesmo é verificar o índice de cada
caractere, inclusive os caracteres numéricos e os
especiais, para saber quando um caractere vem antes do outro.
Expressões Relacionais
E se dois dados literais seguem uma mesma
sequência inicial e diferem a partir de um
determinado ponto, o resultado da comparação
dependerá da comparação destes dois caracteres que diferem.
Por exemplo, “abcd” e “abce”. Do “a” até o “c”, ambas
as sequências são idênticas. Diferem no quarto
caractere (“d” na primeira e “e” na segunda). Como “d” vem antes de “e”, o resultado seria que o primeiro dado é menor que o segundo.
Expressões Relacionais
Resumindo, a comparação entre dados literais segue
a comparação dos índices de cada caractere numa tabela de caracteres adotada.
Exemplos: “a”>”b”: FALSO “b”>”a”: VERDADEIRO “A”≤“A”: VERDADEIRO “A”<“a”: VERDADEIRO “porteiro”<“porteira”: FALSO “trabalhador”<“trabalhadora”: VERDADEIRO 30
Expressões Lógicas
As expressões lógicas são expressões que combinam
resultados lógicos, ou seja, FALSO ou
VERDADEIRO.
Estas expressões lógicas se caracterizam pelo uso de
operadores lógicos que são: e (conjunção), ou
(disjunção) e não (negação).
Este operadores devem ser sublinhados para
diferenciá-los de outros elementos do algoritmo.
Expressões Lógicas
A combinação dos operandos lógicos segundo um
operador lógico gera uma tabela de possibilidades chamada de tabela verdade.
Considerando A e B variáveis lógicas:
32 A B A e B F F F F V F V F F V V V A B A ou B F F F F V V V F V V V V A não A F V V F
Expressões Lógicas
Como o resultado de uma expressão relacional é um
valor lógico, diferentes resultados lógicos podem ser combinados com os operadores lógicos gerando
expressões lógicas.
Por exemplo:
(5>2) e (0,5>0) gera (V) e (V) cujo resultado é VERDADEIRO. (“A”>“B”) ou (4<6) gera (F) ou (V) que gera VERDADEIRO.
Comandos (Ações)
Além dos operadores e das expressões, todo
algoritmo utiliza comandos que efetivamente executam parte da solução lógica elaborada.
Os comandos mais comuns são: de atribuição (que já
foi comentado), de leitura e de escrita.
O comando de atribuição utiliza o operador de
atribuição () e copia o resultado gerado no termo da direita do operador no termo da esquerda.
Comandos (Ações)
Se o termo a direita do operador de atribuição é uma
expressão aritmética, relacional ou lógica, é
necessário que a expressão seja resolvida antes da execução do comando de atribuição.
O tipo da variável que recebe o resultado deve ser
coerente com o tipo do resultado.
Por exemplo:
a(“a”>”b”) e (5>2) equivale a a(F) e (V) que gera a(F). x 5*y-z**3
Comandos (Ações)
Os comandos de leitura e escrita permitem que as
variáveis declaradas no algoritmo recebam valores definidos fora do contexto do algoritmo.
O comando de leitura usa a palavra ler que deve ser
sublinhada, por exemplo: ler x.
O comando de escrita usa a palavra escrever que
também deve ser sublinhada: escrever “olá”.
Comandos (Ações)
Os comandos de leitura e escrita podem tratar várias
variáveis simultaneamente, por exemplo:
ler x, y, z
escrever “Hoje são”, dia, “/”, mês, “/”, ano
Os elementos da lista de variáveis são separados por
vírgulas.
Não há restrição para o caso de se mandar escrever
algo que precise ser processado ainda.
Comandos (Ações)
Por exemplo:
declare a numérico ler a
escrever a**2
Deve ser óbvio que, antes do comando escrever ser
executado, devemos calcular a**2 a partir do valor de
a fornecido no comando ler.