29.08.2013 Views

Aula Teórica 5: Programação Imperativa

Aula Teórica 5: Programação Imperativa

Aula Teórica 5: Programação Imperativa

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!