Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Plano
Programao em baixo nvel de abstrao
Em alto nvel
Em mdio nvel
Exemplo: percorrer um array alterando
valores
Programao em Baixo
Nvel de Abstrao
Modelo da Mquina (Processador)
Linguagem de programao:
Linguagem de mquina (ou cdigo de mquina)
Linguagem prxima:
Linguagem de montagem (em ingls, Assembly)
Modelo de espao de dados
Modelo de memria, com endereos e contedos
Memria
Como uma tabela
Coluna 1: endereos
Coluna 2: contedos
armazenados
86
725
90
122
...
...
Operaes em
Memria
Leitura do contedo
de uma posio a
partir do endereo
ctd_e (x)
Endereo
Contedo
ctd_e
90
86
725
90
122
...
...
Operaes em
Memria
Endereo
Contedo
a_ctd_e
33
86
725
33
122
...
...
Metfora
A memria como um tabuleiro
de cartas de baralho
Os endereos das posies
no tabuleiro so os valores
das cartas pretas
Os dados comuns so cartas
vermelhas
Cartas pretas tambm podem
ocupar posies, mas tm um
significado diferenciado
Programao em Alto
Nvel de Abstrao
Espao de dados
Variveis, com nomes e
contedos
Operaes
ctd_n(x)
a_ctd_n(x,y)
Programao em Mdio
Nvel de Abstrao
Linguagens de programao: C
Espao de dados
Nomes
Endereos
No aparecem como valores constantes
Podem ser valores de variveis especiais (ponteiros)
Contedos
Metfora
Um tabuleiro em que os endereos esto
presentes, mas que no olhamos
diretamente.
Endereos tambm esto presentes, mas
eles tm uma correspondncia estreita com
os nomes.
Nome
Operaes
ctd_e(x)
end_n
a_ctd_e(x,y)
ctd_n(x)
a_ctd_n(x,y)
end_n(x)
Endereo
Exemplo: Percorrer
Array Alterando Valores
Programa preenche array de 6 posies, inicializando-o com os valores AC
(s de copas), 2C, 3C, 4C, 5C, 6C
Duas variveis
Contador, para gerar os valores ascendentes a serem preenchidos
Ponteiro, para percorrer o array
Trs verses
Baixo nvel, notao prpria
Mdio nvel, notao prpria
Mdio nvel, notao da linguagem C
Inicializao de Variveis
a_ctd_e(10P,AC)
a_ctd_e(JE,3P)
Aes no Lao
a_ctd_e(ctd_e(JE),ctd_e(10P))
a_ctd_e(10P,soma(ctd_e(10P),1))
a_ctd_e(JE,soma(ctd_e(JE),1))
Finalizao do Lao
a_ctd_e(ctd_e(JE),ctd_e(10P))
a_ctd_e(10P,soma(ctd_e(10P),1))
a_ctd_e(JE,soma(ctd_e(JE),1))
if ctd_e(JE) <= 8 voltar 3 instrues
a_ctd_e(10P,AC)
a_ctd_e(JE,3P)
a_ctd_e(ctd_e(JE),ctd_e(10P))
a_ctd_e(10P,soma(ctd_e(10P),1))
a_ctd_e(JE,soma(ctd_e(JE),1))
if ctd_e(JE) <= 8 voltar 3 instrues
Variveis
O array declarado com 6 posies, nomeado "a"
O contador declarado, nomeado "c"
O ponteiro declarado, nomeado "p"
a_ctd_n(c,AC)
a_ctd_n(p,end_n(a))
Aes no Lao
a_ctd_e(ctd_n(p),ctd_n(c))
a_ctd_n(c,ctd_n(c)+1)
a_ctd_n(p,ctd_n(p)+1)
Finalizao do Lao
while(ctd_n(p)<=end_n(a)+5)
;; declaraes omitidas
a_ctd_e(JE,3P)
do {
a_ctd_e(ctd_n(p),ctd_n(c))
a_ctd_e(ctd_e(JE),ctd_e(10P))
a_ctd_n(c,ctd_n(c)+1)
a_ctd_e(10P,soma(ctd_e(10P),1))
a_ctd_n(p,ctd_n(p)+1)
a_ctd_e(JE,soma(ctd_e(JE),1))
} while(ctd_n(p)<=end_n(a)+5)
ctd_e(ctd_n(x))
..=.. *x ..
a_ctd_e(ctd_n(x),..)
*x=..
ctd_n(x)
..=.. x ..
a_ctd_n(x,..)
x=..
end_n(x)
..=.. &x ..
Verso em C
carta a[6]; //ou:
carta *a
carta c;
carta *p;
;; declaraes omitidas
do {
do {
*p=c;
a_ctd_e(ctd_n(p),ctd_n(c))
c=c+1;
a_ctd_n(c,ctd_n(c)+1)
p=p+1;
a_ctd_n(p,ctd_n(p)+1)
} while(p<=&a+5)
} while(ctd_n(p)<=end_n(a)+5)
Exerccios