Aula Teórica 5: Programação Imperativa
Aula Teórica 5: Programação Imperativa
Aula Teórica 5: Programação Imperativa
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Elementos de <strong>Programação</strong> (LEGI)<br />
<strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong><br />
António Ravara<br />
Secção de Lógica e Computação, Departamento de Matemática<br />
Instituto Superior Técnico<br />
Notas baseadas na bibliografia básica da cadeira<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.1
Programa imperativo<br />
Programas em Mathematica são funções<br />
Introdução<br />
Um programa imperativo é uma sequência de ordens<br />
Ideia base: calcula-se uma função com o auxílio de<br />
memória<br />
guardam-se em variáveis os valores dos dados<br />
iniciais, de cálculos intermédios e dos resultados.<br />
Chama-se estado à memória usada<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.2
Conceitos centrais<br />
Programas: funções sobre estado<br />
Um programa imperativo (dito comando) é uma função<br />
que manipula (lê e escreve) estado<br />
Estado é uma associação de valores às variáveis<br />
usadas num programa<br />
Exemplo<br />
O valor da expressão x + 1 no estado E é E(x) + 1<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.3
Funções de estado<br />
Comandos<br />
A programação imperativa baseia-se em 5 funções base<br />
sobre o estado, ou comandos<br />
2 comandos simples, ou atómicos:<br />
vazio e atribuição<br />
3 comandos de composição:<br />
sequencial, alternativa e iterativa<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.4
Comando vazio<br />
Comandos Simples<br />
Sintaxe: NULL (é uma constante)<br />
Comporta-se como a função identidade<br />
não faz nada (nem altera o estado)<br />
Comando atribuição<br />
Sintaxe: var = expr<br />
Comporta-se como a função substituição<br />
altera o valor da variável com o resultado da<br />
avaliação da expressão (alterando então o estado)<br />
Exemplo: x = x + 1 incrementa em uma unidade o<br />
valor da variável x (x ←− E(x) + 1)<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.5
Composição sequencial<br />
Sejam C1 e C2 comandos arbitrários<br />
Sintaxe: C1;C2<br />
Comandos Compostos — 1<br />
Comporta-se como a função composta<br />
o estado final resulta da execução de C2 no estado<br />
obtido pela execução de C1 (a partir do estado inicial)<br />
(C1;C2)(E) = C2(C1(E))<br />
Nota: o comando C1; não tem resultado visível porque é<br />
abreviatura de C1; NULL<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.6
Composição alternativa<br />
Comandos Compostos — 2<br />
Seja expb uma expressão booleana, e sejam exp1 e expb2<br />
expressões arbitrárias (que, em particular, podem ser<br />
comandos).<br />
Sintaxe: IF[expb,expr1,expb2]<br />
Comporta-se como uma função definida por casos<br />
se expb é avaliada como verdadeira, executa expr1,<br />
senão executa expb2<br />
Exemplo: IF[x > 1, PRIMEQ[x], “x não é natural”]<br />
Nota: o comando IF[expb,expr] é abreviatura de<br />
IF[expb,expr,NULL]<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.7
Composição iterativa<br />
Comandos Compostos — 3<br />
Seja expb uma expressão booleana e exp uma expressão<br />
arbitrária (que, em particular, pode ser um comando).<br />
Sintaxe WHILE[expb,expr]<br />
Comporta-se como um ponto fixo (diz-se um ciclo)<br />
enquanto expb for verdadeira, executa expr<br />
Exemplo: WHILE[x > 1,x = x − 1]<br />
(quantas vezes é executado o corpo do ciclo?)<br />
Nota: se expb é falsa na primeira avaliação, exp nunca é<br />
executada (exemplo: WHILE[1 == 0, 1]); se expb nunca se<br />
torna falsa, o ciclo não termina (exemplo:<br />
WHILE[1 == 1, 1])<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.8
A função factorial<br />
Algoritmo imperativo:<br />
Exemplo 1<br />
Acumulam-se as multiplica numa var auxiliar e usa-se<br />
outra para indicar o proximo factorial a calcular<br />
Programa:<br />
facti = Function[n,<br />
If[n = 2,<br />
r=r*i;<br />
i=i-1<br />
];r<br />
]<br />
]<br />
Elementos de <strong>Programação</strong> (LEGI) <strong>Aula</strong> <strong>Teórica</strong> 5: <strong>Programação</strong> <strong>Imperativa</strong> – p.9
Lista de naturais primos<br />
Exemplo 2<br />
Dado um natural n, pretende-se calcular todos os<br />
primos menores ou iguais a ele<br />
Programa:<br />
primosaten = Function[n,<br />
If[n < 2,{},<br />
r={2};<br />
If[n == 2,r,<br />
i=3;<br />
While[i