Beruflich Dokumente
Kultur Dokumente
Algoritmos e Programao
1 Edio
2009
Copyright 2009. Todos os direitos reservados desta edio SECRETARIA DE EDUCAO A DISTNCIA
(SEAD/UECE). Nenhuma parte deste material poder ser reproduzida, transmitida e gravada, por qualquer
meio eletrnico, por fotocpia e outros, sem a prvia autorizao, por escrito, dos autores.
INFORMAES TCNICAS
Autores
Ricardo Reis Pereira
Jerffeson Teixeira de Souza
Jeandro de Mesquita Bezerra
Design instrucional
Antonio Germano Magalhes Junior
Igor Lima Rodrigues
Pedro Luiz Furquim Jeangros
Projeto grfico
Pedro Luiz Furquim Jeangros
Igor Lima Rodrigues
Marcos Paulo Rodrigues Nobre
Ilustrao
Marcos Paulo Rodrigues Nobre
Diagramao
Francisco Jos da Silva Saraiva
Capa
Marcos Paulo Rodrigues Nobre
PRESIDENTE DA REPBLICA
Luiz Incio Lula da Silva
MINISTRO DA EDUCAO
Fernando Haddad
SECRETRIO DE EDUCAO A DISTNCIA
Carlos Eduardo Bielschowsky
DIRETOR DO DEPARTAMENTO DE POLTICAS EM EDUCAO A DISTNCIA DPEAD
Hlio Chaves Filho
SISTEMA UNIVERSIDADE ABERTA DO BRASIL
Celso Costa
GOVERNO DO ESTADO DO CEAR
GOVERNADOR
Cid Ferreira Gomes
UNIVERSIDADE ESTADUAL DO CEAR
REITOR
Francisco de Assis Moura Araripe
VICE-REITOR
Antnio de Oliveira Gomes Neto
PR-REITORA DE GRADUAO
Josefa Lineuda da Costa Murta
SECRETARIA DE EDUCAO A DISTNCIA - SEaD
COORDENADOR DA SECRETARIA DE EDUCAO A DISTNCIA
Antnio Germano Magalhes Jnior
COORDENADOR GERAL UAB/UECE
Francisco Fbio Castelo Branco
COORDENADORA ADJUNTA UAB/UECE
Josete de Oliveira Castelo Branco Sales
COORDENADOR DO CURSO DE LICENCIATURA EM INFORMTICA
Jorge Luiz de Castro e Silva
COORDENADOR DE TUTORIA E DOCNCIA DA LICENCIATURA EM INFORMTICA
Andr Ribeiro Cardoso
Fundamentos .....................................................................................................................7
1. FUNDAMENTOS................................................................................................................9
1.1. A IDIA DE ALGORITMO ..........................................................................................9
1.2.CONSTRUO DE ALGORITMOS .............................................................................11
1.3.EXECUO DE ALGORITMOS ...................................................................................13
2. ENTRADA E SADA ............................................................................................................14
2.1. DISPOSITIVOS DE E/S ................................................................................................14
2.2. ENTRADA PADRO...................................................................................................14
2.3. SADA PADRO .........................................................................................................14
3. VARIVEIS ..........................................................................................................................15
3.1. A MEMRIA PRINCIPAL E AS VARIVEIS ..................................................................15
3.2. OS TIPOS DE VARIVEIS ...........................................................................................17
3.3. A DECLARAO DE VARIVEIS ................................................................................20
3.4. ENTRADA E SADA COM VARIVEIS ........................................................................20
Fundamentos
UNIDADE
O objetivo desta unidade apresentar o conceito de algoritmos e suas
formas bsicas de representao: texto, uxograma e pseudocdigo. Outros
fatores importantes so: entradas e sada, seguidas de outros fundamentos
como variveis.
1. FUNDAMENTOS
1.1. A IDIA DE ALGORITMO
Para realizar uma viagem primordial fazer o seu planejamento. De
onde se partir e qual o destino? Que meios de transporte sero usados, qual
o custo e tempo que cada um leva? So necessrias novas roupas? Se mais de
um lugar foi visitado no percurso quanto tempo se ficar e o que se visitar
em cada um deles? Onde se ficar em cada lugar, em um hotel, uma pousada
ou um albergue? Tendo-se essas informaes (entre outras) pode-se coloclas em papel para estimar o custo total e ver a viabilidade da viagem. Mas
se imprevistos acontecerem? Uma lista de planos alternativos poder evitar
muitas dores de cabea.
Partir de uma receita para se preparar alguma coisa rotina comum
em culinria. Quem escreve tais receitas lista o que necessrio, tanto em
ingredientes quanto em utenslios alm, claro, nas etapas que devem ser
seguidas. Seguir a risca, entretanto, pode s vezes ser invivel por que algum
ingrediente poder no estar disponvel (um alternativo poder ser usado). A
boa receita deve prever as faltas potenciais para sua realizao e documentlas
Montar um novo equipamento, que acabou de chegar pelos correios
numa grande caixa, pode no ser uma tarefa muito fcil principalmente
quando as instrues de montagem no so bem documentadas ou fracamente
ilustradas. Boas instrues vm em passos escritos em blocos separados e ao
lado de gravuras legveis e de fcil compreenso. Em muitos casos o fabricante
fornece, para auxiliar seus clientes, uma listagem das ferramentas apropriadas
(quando necessrias). Bicicletas, mveis e alguns brinquedos ilustram bem esta
situao.
Pessoas que tem pouco tempo a perder precisam de uma agenda (e s
vezes tambm uma secretria) para darem conta de todas as suas obrigaes. As
tarefas ou compromissos so listados por data e hora. Imprevistos obviamente
podem acontecer e desta forma requerem decises tais como cancelamento
de algumas etapas ou remarcao para outro dia. Executivos e homens de
negcio conhecem bem a necessidade do agendamento.
As situaes descritas ilustram a idia de algoritmo. Um algoritmo um
conjunto de passos finitos que devem ser seguidos para que certo objetivo seja
alcanado. Algoritmos tm natureza terica e correspondem a planejamentos
estruturados (e preferencialmente otimizados) de algo que se deseja realizar,
como fazer uma viagem, preparar um prato especial, montar uma bicicleta
ou solucionar as pendncias de uma empresa. Para cumprir um algoritmo
decises precisam ser tomadas, aes precisam ser realizadas e recursos
restritos precisam ser gerenciados. O processo de realizao de um algoritmo
conhecido como execuo do algoritmo.
ALGORITMOS E PROGRAMAO
10
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
11
PALAVRAS
RESERVADAS:
programao
PASCAL,
um programador no pode
utilizar uma varivel com o
nome read pois esta palavra
reservada para a leitura de
variveis. Ela uma "palavra
As regras de sintaxe de um algoritmo tratam-se das restries prestabelecidas para possibilitar a criao de pseudocdigos. Neste texto so
definidas vrias regras de sintaxe e mantidas at o final. bom lembrar que tais
regras no so universais, mas que em qualquer apresentao de metodologia
algortmica, um conjunto de regras de sintaxe se mostrar necessrio para
garantir conciso e clareza dos algoritmos.
12
ALGORITMOS E PROGRAMAO
1
2
3
4
ALGORITMOS E PROGRAMAO
13
2. ENTRADA E SADA
2.1. DISPOSITIVOS DE E/S
Dispositivos de entrada e sada, ou simplesmente E/S, so todos e
quaisquer hardwares responsveis pelo fornecimento ou leitura de informaes
do/para o computador. A forma mais tradicional de entrada de dados ainda
a alfanumrica e feita atravs de teclados. Devido sua grande importncia,
definiremos neste texto os teclados como sendo a entrada padro dos
programas. Similarmente a mais tradicional sada de dados visual e ocorre
via monitores (naturalmente associados s placas de vdeo). Definiremos a
associao monitor/placa de vdeo como sendo a sada padro.
14
ALGORITMOS E PROGRAMAO
3. VARIVEIS
3.1. A MEMRIA PRINCIPAL E AS VARIVEIS
A memria principal a memria voltil do computador, ou seja, s
armazenar alguma informao enquanto corrente eltrica cruzar seus circuitos
(A memria projetada para manter informaes, mesmo com o equipamento
desligado, a memria secundria, como por exemplo, os discos rgidos). Na
memria principal sero colocados os programas para que sejam executados.
Estes por sua vez precisaro de memria adicional para realizar suas tarefas.
Nos computadores modernos muitos programas podem estar em execuo ao
ALGORITMOS E PROGRAMAO
15
16
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
17
18
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
19
20
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
21
25 32 <ENTER>
Confirmao nica
22
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
23
http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
http://armorgames.com/play/2205/light-bot
24
ALGORITMOS E PROGRAMAO
Elementos Construtivos
UNIDADE
O objetivo desta unidade apresentar os elementos essenciais para a
construo de algoritmos.
1. OPERADORES
Variveis so vinculaes com a memria real do computador e
funcionam como meros armazenadores temporrios de informao digital.
Entretanto, para a construo de algoritmos funcionais, deve ser possvel
tambm operar entre si tais variveis. Operar neste contexto pode significar
tanto alterar o contedo de uma varivel quanto associar duas ou mais destas
numa expresso vlida para se obter um novo valor (por exemplo, x+y envolve
duas variveis numa operao de soma cujo resultado um novo valor).
Operadores so objetos de construo de algoritmos, de simbologia
prpria e semntica bem definida, destinados s operaes com ou entre
variveis. Por exemplo, na expresso, a+b, o smbolo + um operador e sua
semntica a execuo da soma entre os valores nas variveis a e b.
Operadores podem ser unrios ou binrios, ou seja, podem ou operar
um ou dois operandos respectivamente. O exemplo mais comum de operador
unrio o de mudana de sinal. A sintaxe -x, onde o sinal de menos o
operador, x a varivel e o valor retornado o valor na varivel (numrica)
com sinal invertido. Outro exemplo de operador unrio valor absoluto.
A sintaxe |x|, onde as duas barras verticais representam o operador, x
a varivel e o valor retornado o mdulo do valor na varivel (numrica).
Operadores aritmticos so exemplos de operadores binrios. Na expresso,
a*b, o asterisco denota um operador binrio operando as variveis a e b e cuja
semntica a multiplicao numrica. Nesta expresso o valor retornando o
produto entre o contedo existente nessas variveis.
Operadores podem ser infixos, prfixos ou psfixos. Esta classificao
refere-se posio relativa dos operadores nas expresses em que aparecem.
Por exemplo, em, a+b, o operador de adio, +, infixo, ou seja, disposto
entre seus operandos. Na expresso de mudana de sinal, -a, o operador
pr-fixo, ou seja, disposto antes do operando. Na expresso de clculo de
um fatorial, x!, o operador ps-fixo, ou seja, disposto depois do operando.
Usualmente a maioria dos operadores binrios usada infixamente e dos unrios
pr-fixamente. H situaes em que operadores tradicionalmente infixos so
utilizados como pr ou ps-fixao. Em notao polonesa inversa (PEREIRA;
2006), por exemplo, a expresso, AB+, legal e denota a soma das variveis
A e B com operador de adio ps-fixado. Esta notao conveniente aos
computadores no que diz respeito a avaliao de expresses (teis no projeto
de compiladores, por exemplo).
27
1.1. A ATRIBUIO
O operador de atribuio o elemento de construo de algoritmos
que expressa mais genuinamente a essncia da mquina de von Neuman
(FERNANDEZ; 2009). Este operador o responsvel pela modificao do
contedo das clulas de memria (variveis) alocadas. Cada atribuio
corresponde a uma ao da CPU que envia dados de seus registradores para
uma clula de memria alvo e cujo valor s se modificar novamente por outra
atribuio.
A Arquitetura de von Neuman (de John von Neuman),
uma arquitetura de computador que se caracteriza pela
possibilidade de uma mquina digital armazenar seus
programas no mesmo espao
de memria que os dados,
podendo
assim
manipular
28
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
29
*
/
div
mod
abs
Descrio
Soma de valores numricos
Subtrao de valores numricos
Multiplicao de valores Numricos
Diviso entre valores reais
Diviso entre valores inteiros
Resto de diviso entre valores inteiros
Mdulo de valor numrico
30
ALGORITMOS E PROGRAMAO
Operadores
=
>
<
Nomes
Igual a
Maior que
Menor que
Maior ou igual a
Menor ou igual a
Diferente de
100
y
c
< a+b
Operadores
Nomes
Conjuno
Disjuno
Disjuno Exclusiva
Negao
bra de Boole) trata das estruturas algbricas construdas a partir das operaes
lgicas E, OU e NO, bem
como das operaes soma,
produto e complemento em
teoria de conjuntos. comu-
X Y
B (A B)
(A B C) (A C)
31
AB
AB
AB
F
V
V
F
F
V
F
F
V
F
V
V
F
V
1.5. EXPRESSES
Expresses podem ser constitudas pela associao de diversas variveis
de tipos no necessariamente compatveis, mas que se arranjem de forma lgica
e avalivel. Uma vez definidas tais expresses, a avaliao implica num processo
sistemtico que finaliza num valor final cujo tipo depender da expresso.
Por exemplo, na expresso, x+1 > y-p*p, resolvem-se primeiramente as
expresses aritmticas em cada lado do operador relacional para depois fazer
a comparao que resultar num valor lgico. Este procedimento de escolha
de quem operar primeiro numa expresso segue na verdade dois conjuntos
de regras de operadores. So eles o de precedncia de operadores e de
associatividade de operadores. Os analisaremos a seguir.
32
abs
+, (unrios)
*, /, mod, div
+, - (binrios)
ALGORITMOS E PROGRAMAO
33
Componentes aritmticas;
Componentes relacionais;
Componentes lgicas
2. ESTRUTURAS DE CONTROLE
Existem dois mecanismos construtivos que qualquer mtodo de
elaborao de algoritmos deve possuir: deciso e repetio. O conjunto
de componentes de cdigo que se associam para representar um processo
de deciso ou de repetio denominado estrutura de controle. Sem tais
estruturas no seria possvel a construo de algoritmos.
34
ALGORITMOS E PROGRAMAO
2.1. DECISO
Um processo de deciso consiste na escolha entre dois ou mais blocos
de pseudocdigo para execuo. Apenas um, entre os blocos existentes,
selecionado e assim tem seu contedo executado.
Uma deciso o resultado da avaliao de uma expresso booleana.
Adiante so estudados diferentes tipos de estruturas de deciso.
ALGORITMOS E PROGRAMAO
35
Outro exemplo:
declare
a: inteiro
leia a
se (a mod 2 = 0) ento
escreva o nmero par
escreva m da execuo!
36
ALGORITMOS E PROGRAMAO
37
38
ALGORITMOS E PROGRAMAO
bloco executado. Uma prtica bastante comum o uso da sesso seno para
imprimir mensagens de erro. Veja o exemplo:
declare
n: inteiro
leia n
caso (n) seja
1: escreva
2: escreva
3: escreva
seno
escreva
Ol mundo!
Hello world!
Hallo Welt!
Opo invlida!!
ALGORITMOS E PROGRAMAO
39
declare
op: caractere
x, y: inteiro
escreva fornecer valores:
leia x, y
escreva forcecer opo : + - * /
op tecla
caso op seja
+: escreva Soma: , x+y
-: escreva Subtrao: , x-y
*: escreva Multiplicao: , x*y
/: se (b0) ento
escreva x/y
seno
escreva diviso por zero!
seno escreva Opo invlida!!
40
ALGORITMOS E PROGRAMAO
declare
peso, altura, imc: real
escreva Fornecer peso e altura:
leia peso, altura
imc peso /(altura*altura)
se (imc<20) ento
escreva Voc est magro!
seno
se (imc>25) ento
escreva Voc est gordo!
seno
escreva Voc est num bom peso!
ALGORITMOS E PROGRAMAO
41
42
ALGORITMOS E PROGRAMAO
declare
a, b, c: inteiro
leia a, b, c
se (a<b+c b<a+c c<a+b) ento
se (a=b a=c) ento
escreva Eqiltero!
seno
se (a=b a=c b=c) ento
escreva Issceles!
seno
escreva Escaleno!
seno
escreva O tringulo no existe!
2.2. REPETIO
As estruturas de deciso permitem a modelagem de apenas parte dos
problemas resolvidos por algoritmos. As estruturas de controle de repetio
estendem largamente esta capacidade de modelagem. Elas fornecem meios de
repetio de execuo de blocos de cdigos especficos. A associao entre
capacidades de deciso e repetio constitui prtica comum na construo de
algoritmos.
Uma estrutura de controle de repetio encapsula apenas um bloco de
cdigo e o repete mediante um critrio que notavelmente muda durante o
processo (Naturalmente este bloco pode conter internamente outros blocos
com nvel de indentao acima e que tambm tero execuo repetida). Cada
repetio conhecida como iterao. Estruturas de repetio so comumente
chamadas de laos ou loops. A seguir so estudadas as principais estruturas de
laos utilizadas na construo de algoritmos.
43
As mudanas nesta nova verso em relao a anterior foram: removeuse a palavra chave at e no seu lugar colocou-se uma vrgula; aps o limite
superior marcou-se uma nova vrgula seguindo-a com o valor do passo; por
fim a palavra chave faa. O exemplo dos nmeros pares pode ser reescrito da
seguinte forma:
44
ALGORITMOS E PROGRAMAO
declare
i: inteiro
para i 2, 100, 2 faa
escreva i
45
46
ALGORITMOS E PROGRAMAO
Neste algoritmo o lao possui passo igual a 7 e limite inferior igual a 0. Isso
faz com que o contador assuma apenas valores divisveis por 7 e obviamente
reduza o nmero de iteraes a um stimo do total no algoritmo anterior.
Como o valor do contador j divisvel por 7 em todas as iteraes, ento
o aumento do valor em cnt fica condicionado apenas a no divisibilidade do
valor em n por 3. Por essa razo a expresso booleana se reduz a um nico
teste relacional.
ALGORITMOS E PROGRAMAO
47
declare
x: inteiro
x 0
enquanto (x<20) faa
escreva x,
x x + 2
48
ALGORITMOS E PROGRAMAO
declare
x: inteiro
x 0
repita
escreva x,
x x + 2
at (x>20)
49
Valor de i
4 5 6 7
7 6 5 4
8 9 10
3 2 1
50
ALGORITMOS E PROGRAMAO
Se pare for executado dentro de um lao sem aninhamento com
outros laos, mesmo que esteja encapsulado por alguma estrutura de deciso,
apenas tal lao ser suspenso, mas o algoritmo no necessariamente.
ALGORITMOS E PROGRAMAO
51
(IV)
O valor em b verificado para ver se o valor corrente no
contador n primo. Se for (ver expresso booleana formada apenas por b) ele
impresso na sada padro.
Neste ltimo exemplo, utilizando-se limite inferior igual a 3 e passo igual
a 2 no lao para, testam-se apenas valores mpares (o nico primo par 2)
aumentando-se a velocidade do algoritmo.
52
ALGORITMOS E PROGRAMAO
PEREIRA, SILVIO DO LAGO. Estruturas de Dados Fundamentais: Conceitos e Aplicaes. 9 Edio. Editora rica 2006. ISBN: 8571943702 .
FERNANDEZ, M; Corts, M. Introduo Computao. 1 Edio. Fortaleza. RDS
Editora, 2009.
http://armorgames.com/play/2205/light-bot
ALGORITMOS E PROGRAMAO
53
Variveis Indexadas
UNIDADE
O objetivo desta unidade apresentar a estrutura matriz, a qual utilizada
para manipulao de variveis com capacidade de armazenar na memria
mais de um valor ao mesmo tempo. Para manipular as variveis utiliza-se o
mecanismo de indexao.
1. MATRIZES
1.1. INTRODUO A MATRIZES E VETORES
Uma varivel escalar uma entidade abstrata que se refere a uma
clula de memria e que possui um tipo relacionado, uma faixa restrita de
representao e a capacidade de armazenar um nico valor. H, entretanto, a
possibilidade de definir variveis com capacidade de guardar mais de um valor
ao mesmo tempo. Tais variveis so denominadas matrizes.
Naturalmente os valores armazenados por matrizes no compartilham
a mesma clula de memria: de fato mais de uma clula estar presente na
definio de matrizes. Cada uma destas clulas funciona como uma varivel
escalar independente o que faz das matrizes aglomerados de variveis escalares.
Todas essas variveis constituintes so do mesmo tipo de forma que podemos
ter, por exemplo, matrizes de inteiros, lgicos ou de reais, mas nunca a mistura
deles. Denomina-se tipo base o tipo de dados comum a todos os aglomerados
da matriz.
Uma varivel matriz, assim como todas as demais, possui apenas um
nome. Ento como manipular cada uma das variveis escalares (clulas) que
a constitui? O mecanismo para se referenciar cada uma das clulas de uma
matriz denominado indexao. Assim, por exemplo, se M uma matriz dos
primeiros dez mpares ento M[1] = 1, M[2] = 3, M[3] = 5 e assim por diante:
aqui os colchetes retratam hospedeiros dos ndices que neste caso vo de um
a dez acessando independentemente cada valor em M. O vetor M ainda pode
ser descrito desta forma: M[k]=2k-1, com o ndice k no intervalo {1..10}.
Matrizes podem contar com um ou mais ndices. Cada ndice de uma
matriz est associado a uma dimenso da matriz. Assim matrizes unidimensionais
precisam de um ndice, bidimensionais de dois e assim por diante. As matrizes
na matemtica se confundem com as matrizes bidimensionais aqui descritas.
Matrizes unidimensionais so comumente denominadas de vetores.
Os vetores representam a forma de matriz mais comumente empregada em
algoritmos.
O total de aglomerados de um vetor representa o comprimento do
vetor. O tamanho de um vetor a memria total que ele ocupa, ou seja,
seu comprimento multiplicado pelo tamanho em bytes do tipo base. Assim,
por exemplo, se H um vetor formado de 5 inteiros de 2-bytes, ento o
comprimento de H 5, seu tipo base inteiro, e seu tamanho vale 10-bytes.
ALGORITMOS E PROGRAMAO
57
-7
-9
78
14|
-5|
25|
14
11
78
25
Segue um exemplo:
58
ALGORITMOS E PROGRAMAO
declare
M[20], i: inteiro
para i 1 at 20 faa
M[i] i*i
ALGORITMOS E PROGRAMAO
59
Um exemplo de aplicao:
declare
M[10], i, imax: inteiro
M {12, -9, 33, 8, -23, 17, 6, -5, 31, 2}
imax 1
para i 2 at 10 faa
se (M[i] > M[imax]) ento
imax i
escreva M[imax]
60
ALGORITMOS E PROGRAMAO
declare
M[10], i, j, t, x: inteiro
M {-12, 9, 30, 18, 13, 7, -6, 5, 31, 1}
//Ordenao por seleo:
para i 1 at 9 faa
t i
para j i+1 at 10 faa
se (M[j] < M[t]) ento
t j
x M[t]
M[t] M[i]
M[i] x
// Impresso:
para i 1 at 10 faa
escreva M[i]
-6
13
18
30
31
61
62
ALGORITMOS E PROGRAMAO
Neste algoritmo o usurio fornece uma cadeia via entrada padro e depois
ela simplesmente reimpressa na sada padro. Esta uma forma conveniente
de entrada para leia haja vista que pouco processamento adicional necessrio
(no esquea que a entrada padro gera uma cadeia de caracteres). Cada
caractere digitado convenientemente colocado no vetor. A confirmao de
entrada (ENTER no teclado) concatena adicionalmente o nulo cadeia.
Se o comando escreva deve imprimir uma cadeia de caracteres, ento
ele far impresso caractere por caractere at que um nulo (no impresso)
encontrado. Exemplo:
declare
S[100]: caractere
S ol mundo!
escreva S
ALGORITMOS E PROGRAMAO
63
Este algoritmo recebe uma cadeia via entrada padro e a escreve de trs
para frente. A idia medir primeiramente o comprimento da cadeia usando
a varivel t cujo valor inicial zero. Com o fim do primeiro lao (enquanto) t
conter o comprimento da cadeia e um lao por contagem (para) poder fazer
o trajeto reverso do vetor a fim de imprimi-lo de trs para frente.
64
ALGORITMOS E PROGRAMAO
declare
X[], n, i: inteiro
leia n
alocar X[n]
para i 1 at n faa
X[i] 2*i-1
limpar X
65
66
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
67
Segue um exemplo:
declare
X[3,3]: real
i, j: inteiro
para i 1 at 3 faa
para j 1 at 3 faa
leia X[i, j]
68
ALGORITMOS E PROGRAMAO
ALGORITMOS E PROGRAMAO
69
http://www.academicearth.org/lectures/array
http://www.academicearth.org/lectures/multi-dimensional-arrays
70
ALGORITMOS E PROGRAMAO
Programao Modular
UNIDADE
O objetivo desta unidade apresentar o conceito de programao modular,
isto , como dividir um programa em subprogramas.
1. MODULARIZAO
1.1. O QUE MODULARIZAR?
H dois importantes nveis de abstrao em computao: abstrao de
dados e abstrao de processos. A abstrao de dados explora como diferentes
tipos de informaes podem ser representados e ainda quais as restries de
operabilidade entre eles. A abstrao de processos trata da simplificao do
processo de execuo de uma dada aplicao pela diviso deste em partes
menores (sub-processos) que podem ser testadas separadamente.
A modularizao est estreitamente ligada abstrao de processos.
Modularizar significa dividir um programa em subprogramas cujos
funcionamentos podem ser testados separadamente. Os subprogramas so
nada mais que abstraes com alguma sintaxe adicional (em nvel de cdigo).
73
Para que seja executada, uma funo precisa ser chamada. Uma
chamada de funo realizada pela invocao de seu nome juntamente com
valores para seus parmetros. Para executar uma dada funo secundria,
ela deve ser chamada de dentro da funo principal ou ento de dentro de
outra funo secundria. Cada funo de um algoritmo deve ser chamada pelo
menos uma vez em algum lugar daquele algoritmo. Se uma dada funo nunca
chamada ela pode ser removida do projeto. A execuo de uma aplicao
nada mais que a execuo de sua funo principal.
Quando uma aplicao inicia sua execuo diz-se que a funo principal
recebe o controle de fluxo ou simplesmente que recebe o controle. Se a
funo principal chama uma funo secundria ento esta funo receber o
controle do fluxo enquanto estiver executando e o devolver a funo principal
quando sua execuo se encerrar. De modo geral quando uma funo A, seja
ela principal ou no, chama outra funo B ocorre repassagem provisria
do controle de fluxo de A para B e depois seu retorno para A quando B se
encerra. Sistematicamente o controle migra de funo para funo durante
toda execuo. Em algum momento cada uma das funes do projeto manter
o controle. Se uma mesma funo for chamada vrias vezes ela manter o
controle em momentos diferentes. Apenas uma, entre as vrias funes, se
existirem, ter o controle durante a execuo da aplicao. (Uma aplicao
dever conter pelo menos a funo principal).
Funes podem retornar valores. O retorno (ou sada) de uma funo
pode ser, por exemplo, um nmero, um caractere ou um booleano. A ao
de retorno de uma funo sumria, ou seja, quando invocada a funo
automaticamente se encerra devolvendo o controle funo chamadora. Para
provocar o retorno usa-se a palavra chave retorne seguida do valor que se
deve retornar. Veja o exemplo a seguir:
soma (x, y: inteiro)
declare
s: inteiro
s x + y
retorne s
principal()
declare
a, b, c: inteiro
leia a, b
c soma(a,b)
escreva c
74
ALGORITMOS E PROGRAMAO
75
76
ALGORITMOS E PROGRAMAO
func _ 1 ()
declarar
x: inteiro
y: booleano
// corpo da funo func _ 1()
func _ 2 ()
declarar
x: real
y: booleano
// corpo da funo func _ 2()
ALGORITMOS E PROGRAMAO
77
declare
x: inteiro
proc ()
declare
x: inteiro
x 23
principal()
x 35
proc()
escreva x
Caso esta funo seja utilizada o valor impresso na sada padro ser 5
e no 6 simplesmente por que quem incremente em uma unidade k e no j.
Como k e j no se relacionam a funo no se comporta como desejado.
Para resolver o problema apresentamos outro modelo de passagem de
argumento conhecido como passagem por referncia. Uma referncia por
definio um apelido de varivel que pode ser manipulada como se fosse
a prpria varivel que ela apelidou. Por exemplo, se r uma referncia da
78
ALGORITMOS E PROGRAMAO
Nesta nova verso k deixa de ser uma varivel de tipo inteiro e tornase uma referncia para valor inteiro. Assim quando j repassado como
argumento, ento k torna-se provisoriamente uma referncia para ele. A adio
de uma unidade referencia k na funo inc() afeta de fato a varivel j. O valor
impresso na funo principal ento 6.
79
80
ALGORITMOS E PROGRAMAO
1.6. RECURSIVIDADE
Recursividade a tcnica que permite a uma funo (ou procedimento)
fazer, no corpo de seu cdigo, uma chamada a si prpria. Para ilustrar a
recursividade apresentamos a seguir duas verses de funes para clculo de
fatorial: uma no-recursiva (iterativa) e outra recursiva.
//verso iterativa
fat(n: inteiro)
declare
res: inteiro
enquanto (n>0) faa
res res * n
n n - 1
retorne res
// verso recursiva
fat(n: inteiro)
se (n<2) ento
retorne 1
seno
retorne n*fat(n-1)
ALGORITMOS E PROGRAMAO
81
82
ALGORITMOS E PROGRAMAO
vamos mover esse disco maior para B, essa torre no poder conter nenhum
outro disco. Sendo assim, precisamos mover todos os discos de A, com exceo
do maior, da torre A para a torre C, para podermos posteriormente mover o
disco maior de A para B. Depois disso, basta mover os discos que esto em
C para B. Veja que, para movermos os discos de A para C, estamos resolvendo
o mesmo problema original da Torre de Hanoi, dessa vez tendo como origem
a torre A e como destino a torre C, e desconsiderando o disco maior. Logo,
podemos usar essa caracterstica pra gerar uma soluo recursiva, como se
segue:
hanoi(n: inteiro, A, B, C: <tipo _ torre>)
se (n>0) ento
hanoi(n 1, A, C, B);
move disco de A para B
hanoi(n 1, C, B, A);
ALGORITMOS E PROGRAMAO
83
84
ALGORITMOS E PROGRAMAO
http://www.lsd.ic.unicamp.br/projetos/e-lane/introPascal/aula9.html
http://www.inf.pucrs.br/~pinho/LaproI/Funcoes/AulaDeFuncoes.htm
ALGORITMOS E PROGRAMAO
85