Você está na página 1de 43

S.I.

LGICA DE PROGRAMAO

Orientaes de estudo:
A principal fonte de consulta e estudo dever ser a bibliografia recomendada, este material
deve ser trabalhado como notas de aula.

Bibliografia Bsica
MANZANO, Jos Augusto. Algoritmos - Lgica para Desenvolvimento de Programao. Rio de
Janeiro: rica, 1996.
WIRTH, Niklaus. Algoritmos e estruturas de dados. ETH Zurich: LTC Editora, 1999.
SALVETTI, Dirceu Douglas. Algoritmos. So Paulo: Pearson/Makron Books, 2004.
KERNIGHAN, Brian W. A linguagem de programao. Porto Alegre: Editora Campus Ltda, 1987.

Bibliografia Complementar
CELES, Waldemar, . Estruturas de Dados. Rio de Janeiro: PUC-RIO, 2002.
BROOKSHEAR, J. Glenn. Cincia da Computao Uma viso abrangente. Porto Alegre: Bookman, 2005.
PUGA, Sandra. Lgica de programao e Estrutura de Dados. : Pearson - Prentice Hall, .
SEBESTA, Robert W. Concepts of Programming Languages. : Addison-Wesley, 1996.

SUMRIO

TPICO

CONTEDO

Pgina

Retomada dos contedos.

03

24

Estrutura de seleo encadeada.

05

25

Estruturas de repetio com teste de incio.

26

Estruturas de repetio com teste de fim.

27

Estruturas de repetio com variveis de controle.

28

Estruturas indexadas: Vetores.

10

29

Operaes com vetores.

10

30

Estruturas indexadas: Matrizes.

12

31

Operaes com matrizes.

14

32

Ordenao

18

33

Mtodo da Bolha.

23

34

Busca

27

35

Busca linear

28

36

Busca binria

30

37

Variveis compostas heterogneas

35

38

Procedimentos

40

39

Funes: Conceitos sobre parmetros

40

40

Parmetro por valor.

41

41

Parmetro por referncia.

42

RETOMADA DOS CONTEDOS

Estruturas de seleo.
- Reviso de comandos (instrues) em portugol (apostila programao
estruturada ou programao modular pag. 2)
- Reviso de operadores lgicos (anexo 01 material do 1 semestre).
- Precedncia de uso dos operadores lgicos.

Operador
.no.
.e.
.ou.
.xou.

Tabela de precedncia dos operadores lgicos.


Operao
Precedncia
Obs. a precedncia pode
variar conforme a anotao
Negao
1
que se utiliza de parnteses de
Conjuno
2
maneira anloga a lgebra
Disjuno inclusiva
3
matemtica.
Disjuno exclusiva
3

EXEMPLOS

01) Dada as expresses:


a)
(B = 2) .xou. (B > 4) .e. (B < 7)

b)
((B = 2) .xou. (B > 4)) .e. (B < 7)

Pela precedncia, avalia-se o valor lgico da


conjuno .e.

Devido a anotao dos parnteses (em


destaque) avalia-se primeiro o valor lgico da
disjuno exclusiva .xou.

Avalia-se o valor lgico da disjuno


exclusiva .xou.

Avalia-se o valor lgico da conjuno .e.

02) Efetue a leitura de trs valores inteiros desconhecidos representados pelas variveis
A, B e C. Somar os valores fornecidos e apresentar o resultado somente se maior que
cinco e no for maior ou igual a 100 e maior que cinco.

Seqncia lgica (entendimento)


1. Obter os valores A, B e C. (variveis A, B, e C)
2. Somar as variveis A, B e C. (varivel D)
3. Verificar se a varivel D no maior ou igual a 100 e se D maior que 5, se sim
apresentar o valor, se no encerrar.

Diagrama de Blocos (fluxograma)


Incio
A, B, C

DA+B+C

.no. D >= 100


.e. D > 5

Fim

Codificao
programa VERIFICAO_INT_5_100
var
A, B, C, D: real
incio
leia A, B, C
DA+B+C
se .no. (D >= 100) .e. (D > 5) ento
escreva D
fim_se
fim

Tpico 24

Estrutura de seleo encadeada.


A tomada de deciso classificada por encadeada quando uma seleo simples
ou compostas ocorre de maneira dependente, ou seja, quando uma deciso depende de
outra para ocorrer.
Exemplos
a) Estrutura de tomada de deciso encadeada com deciso simples.

CODIFICAO EM LPP

se (<condio 1>) ento


se (<condio2>) ento
[ao para condio 1 e condio 2 verdadeiras]
fim_se
fim_se

b) Estrutura de tomada de deciso encadeada com deciso composta.


CODIFICAO EM LPP

se (<condio 1>) ento


se (<condio2>) ento
[ao para condio 1 e condio 2 verdadeiras]
seno
[ao para condio 1 verdadeira e 2 falsa]
fim_se
seno
[ao para condio 1 falsa]
fim_se

Estrutura de deciso por seleo


Estrutura utilizada em situaes em que h um grande nmero de verificaes
lgicas a serem realizadas, tanto em forma seqencial quanto na forma encadeada.
Utilizando-se dos comandos (instrues) caso/seja...faa/seno/fim_caso.
Observando a estrutura sinttica a seguir:

caso <varivel>
seja <opo 1> faa
[ao para condio 1 verdadeira]
seja <opo 2> faa
[ao para condio 2 verdadeira]
seja <opo 3> faa
[ao para condio 3 verdadeira]
seno
[ao para nenhuma condio satisfeita]
fim_caso

Obs.: - As instrues caso/seja...faa/seno/fim_caso so utilizadas na tomada de


deciso seqenciais ou encadeadas utilizando as aes previstas com o operador
relacional igual a.
- Na codificao o comando seno pode ser omitido na estrutura de tomada de
deciso por seleo.

TPTICOS 25 E 26

Estrutura de repetio
Tambm conhecida por lao, malha de repetio ou looping a estrutura de
repetio que basicamente consiste em repetir um trecho de cdigo, sem que seja
necessrio repetir a escrita n vezes.
As estruturas de repetio podem ser divididas em duas categorias:
a) Interativa Necessita da ao do usurio para repetir o processo.
b) Iterativa As aes de repetio so automticas.

Normalmente as estruturas de repetio exigem uma varivel de controle


(principalmente os laos iterativos), assim se faz necessrio criar uma varivel que por
tradio corresponde a letra I.

Estrutura de repetio condicional pr-teste;


Corresponde a estrutura em que o condicional verdadeiro ou condicional falso
ocorre antes das instrues de execuo do programa.

Condicional Verdadeiro

CODIFICAO
N

Condio

enquanto (<condio>) faa


[instrues executadas durante condicional (V)]

S
Instrues executadas
durante condicional (V)

fim_enquanto

Estrutura de repetio com condicional verdadeira

Condicional Falso

CODIFICAO

Condio

at_seja (<condio>) efetue

N
Instrues executadas
durante condicional (F)

[instrues executadas durante condicional (F)]


fim_at_seja

Estrutura de repetio com condicional falso

Estrutura de repetio condicional ps-teste.


Corresponde a estrutura em que o condicional verdadeiro ou condicional falso
ocorre aps as instrues de execuo do programa.
7

Condicional Verdadeiro

Instrues executadas no
perodo em que a condio
permanecer (V)

CODIFICAO
continua
[instrues executadas no perodo em que a condio permanecer (V)]

enquanto_for (<condio>)

Condio

Estrutura de repetio com condicional verdadeira

Condicional Falso

Instrues executadas no
perodo em que a condio
permanecer (F)

CODIFICAO
repita

[instrues executadas no perodo em que a condio permanecer (F)]


Condio

fim_at_seja (<condio>)
S
Estrutura de repetio com condicional falso

Estrutura de repetio condicional seletivo.


Estrutura tambm conhecida como lao de repetio seletivo, lao infinito ou
lao localizado, corresponde estrutura que permite ao programador construir
algoritmos em que se seleciona o local onde a deciso de sada do lao ser
incrementada.
CODIFICAO

Instrues para
ao 1

lao

Condio

[instrues para ao 1]

saia_caso (<condio>)

Instrues para
ao 2

[instrues para ao 2]
fim_lao (<condio>)

TPICO 27
Estrutura de repetio incondicional (lao incremental)
Estrutura de repetio utilizada apenas laos interativos, o lao de repetio
incondicional utiliza-se no diagrama de blocos o smbolo de preparao preparation,
com as variveis de controle, atribuio dos valores de incio, fim e incremento,
separados por vrgula.

varivelincio, m, incremento

Instrues executadas
durante o ciclo de
contagem da varivel de
controle.

CODIFICAO
Para (<varivel>) de (<incio>) at (<fim>) passo (<incremento>) faa
[instrues executadas no perodo do ciclo de contagem da varivel de controle]
fim_para

Obs.: Entende-se por incremento o valor numrico que ser acrescido ou acrescentado a
funo contador.

TPICOS 28 E 29
Estruturas indexadas: Vetores
Tal estrutura corresponde a sua representao matemtica de uma matriz linha,
 ), Pode ser representando pela matriz  = 5 3 7
exemplo  = (5, 3
, 7
Tambm referenciado como arrays unidimensionais a estrutura de dados do tipo
vetor permite o armazenamento do conjunto de elementos de um mesmo tipo, com o
tratamento de matriz de uma dimenso, ou seja, uma coluna e vrias linhas de dados. O
dimensionamento do vetor matriz linha deve ser formado por constantes inteiras e
positivas.
O comando que representa a estrutura de vetor conjunto seguido do intervalo
compreendido entre colchetes.
VARIVEL: conjunto [<dimenso>] de <tipo de dado>

Exemplo 1.1
Pretende-se construir um algoritmo que calcule a mdia aritmtica dos
rendimentos de determinado investimento representados na tabela abaixo.

PERODO
1
2
3
4
5
6

RENDIMENTO EM R$
1250,00
1475,00
1350,00
1250,00
1400,00
1375,00

PERODO
7
8
9
10
11
12

RENDIMENTO EM R$
1300,00
1900,00
1250,00
1500,00
1540,00
1775,00

TRECHO DE CDIGO INDICANDO A VARIVEL VETOR

var
( variveis utilizadas no programa): (tipo da varivel)
PER : conjunto [1..12] de real

No exemplo nota-se que podemos nomear as variveis de forma indexada


denominando-a simplesmente M contendo o elemento a ele relacionado como segue.

10

M[1]
M[2]
M[3]
M[4]
M[5]
M[6]
M[7]
M[8]
M[9]
M[10]
M[11]
M[12]

1250,00
1475,00
1350,00
1250,00
1400,00
1375,00
1300,00
1900,00
1250,00
1500,00
1540,00
1775,00

Note que o nome da varivel indexada M o mesmo para


todos os valores, o que realmente se altera so os endereos ou
ndice da matriz (posio) dos elementos (contedo)
armazenados.
Exemplo M[1] 1250,00, 1 corresponde ao ndice ou
endereo cujo 1250,00 est relacionado.

Obs.: a representao de um vetor tambm pode estar associado a um determinado


conjunto de elementos tal como o conjunto A = { 0, 2, 4, 6, 8, 10, 12, 14}, cujo sua
representao vetorial (matriz linha) pode ser:
Varivel indexada [endereo]
Elemento

A[1]
0

A[2]
2

A[3]
4

A[4]
6

A[5]
8

A[6]
10

A[7] A[8]
12
14

Leitura e escrita de dados de um vetor


Tanto a leitura quanto a escrita de dados de um vetor processada elemento a
elemento, utilizando-se de um lao de repetio incremental (estrutura de repetio
incondicional).
Exemplo de diagrama de blocos e codificao.
incio
SOMA 0

I 1, 12, 1

M[I]

SOMA SOMA + M[I]

MDIA SOMA/12

programa MEDIA_DE_RENDIMENTOS_INVEST01
var
I : inteiro
M : conjunto [1..12] de real
SOMA, MDIA : real
incio
SOMA0
para I de 1 at 8 passo 1 faa
leia M[ I ]
SOMASOMA + M[I]
fim_para
MDIASOMA/12
escreva MDIA
fim

MDIA
PROBLEMA PROPOSTO NO EXEMPLO 1.1

fim
11

TPICO 30
Estruturas indexadas: Matrizes
Semelhantemente ao estudo de vetores as matrizes facilitam o trabalho com
estruturas de dados, entretanto enquanto vetores podem ser descritos como tabelas em
linha (sentido vertical) ou coluna (sentido horizontal), a matriz trabalha duas dimenses
(tabela) com vrias linhas e colunas. Da percebe-se que a quantidade de elementos em
uma matriz exponencialmente maior em relao a um vetor, a fim de facilitar o
processo de soluo lgica utilizando-se de variveis indexadas.
Em uma matriz os elementos so manipulados de forma individual e direta,
assim quando se deseja utilizar um elemento referencia-se por meio dos ndices (linha,
coluna) como segue:
TAB[2,5]
Nome da
varivel
indexada

Elemento
armazenado na linha
2 coluna 5

Outro aspecto importante a ser considerado que as matrizes do tipo vetor


utilizam-se de uma nica estrutura de repetio (pr-teste verdadeiro enquanto, psteste falso repita ou incondicional para), e a matriz com mais de uma dimenso
utiliza-se de um numero de laos relativo ao seu tamanho.
Os comando utilizando em uma matriz bidimensional so semelhantes ao j
estudados em vetores apenas com o incremento da dimenso, assim TAB[1..12,1..8],
corresponde a uma matriz com 12 linhas (de 1 a 12) e 8 colunas (de 1 a 8), podendo ser
armazenados 96 elementos na matriz TAB.
1

1
2
3
4
5
Obedecendo a sintaxe.
6
7
VARIVEL
: conjunto [<dimenso1> : <dimenso2>] de <tipo de dado>
8
Onde:
9
VARIVEL: corresponde a varivel indexada.
10
dimenso1: corresponde ao numero de linhas da matriz.
11
dimenso2: corresponde ao nmero de colunas da matriz.
12
tipo de dado: tipo de dados armazenados em uma matriz, que pode ser real,

inteiro, lgico ou caractere.

12

Leitura e escrita de dados de uma matriz


A leitura de dados de uma matriz bidimensional, assim como na matriz vetor e
realizada individualmente por meio do comando leia seguido do nome da varivel
indexada e dos seus ndices.
leia TAB [I, J]
Portanto analisando os processos de leitura e escrita das variveis I e J nos
diagramas a seguir, percebe-se que quando o contador de coluna (lao de repetio da
varivel J) atingir 8 ele encerrado e ocorre o incremento de mais um no contador de
linha (lao de repetio da varivel I) reinicializando o contador coluna at que seja
utilizado o ultimo elemento matriz.

incio

I 1, 12, 1

J 1, 8, 1

TAB[I, J]

programa LEITURA_MATRIZ
var
TAB : conjunto [1..12, 1..8] de real
I, J: inteiro
incio
para I de 1 at 12 passo 1 faa
para J de 1 at 8 passo 1 faa
leia TAB[I, J]
fim_para
fim_para
fim

fim

incio
I 1, 12, 1

J 1, 8, 1
TAB[I, J]

programa ESCRITA_MATRIZ
var
TAB : conjunto [1..12, 1..8] de real
I, J: inteiro
incio
para I de 1 at 12 passo 1 faa
para J de 1 at 8 passo 1 faa
escreva TAB[I, J]
fim_para
fim_para
fim

fim
13

TPICO 31
Operaes com matrizes
Manipulao dos ndices de uma matriz.
A manipulao dos ndices de uma matriz consiste em uma das maneiras de
variar uma matriz (seja vetor ou n dimensional) utilizando-se como ferramenta a lei
de formao da matriz.
Lembrando que na matriz do tipo vetor temos uma dimenso descrita pela
varivel I e no caso do exemplo da matriz bidimensional temos endereo indexado
referenciado por dois ndices I e J.

Exemplos

Registro
1
2
3
4
5
6
7
8

RENDIMENTO
R$ 1560,00
R$ 1480,00
R$ 2300,00
R$ 2450,00
R$ 1700,00
R$ 1340,00
R$ 2300,00
R$ 2450,00

b) Matriz do tipo bidimensional


Nome Endereo bairro Telefone
Linhas de registro

a) Matriz do tipo vetor

1
2
3
4
5
6
7
8

Representada pela instruo:

Representada pela instruo:

REND[I]

CAD[I,J]

Onde a varivel I corresponde ao Onde as variveis I e J correspondem ao


endereo do dado indexado no vetor endereo I linha e J coluna do dado indexado na
REND.
matriz CAD.
Obs: A matriz do tipo vetor exemplo (a) pode ser descrito em uma tabela do tipo coluna ou linha diferentemente da
matriz do tipo bidimensional, exemplo (b), que somente por ser descrita como uma tabela de dupla entrada.

Exemplo 1
Dada uma matriz A do tipo vetor com 20 elementos numricos reais, deseja-se construir
uma nova matriz do mesmo tipo, obedecendo-se a seguinte lei de formao; Se o valor
do ndice da matriz for impar deve-se multiplicar o dado armazenado por cinco, se o

14

ndice da matriz for par deve-se dividir o dado armazenado por 2. Ao final do processo
deve-se apresentar o contedo da nova matriz.

Sada

procedimentos

entrada

Entendimento.
1.
2.
3.
4.
5.
6.
7.
8.

Iniciar o contador do ndice da matriz de origem (matriz A)


Ler os valores associados aos ndices da matriz A.
Iniciar o contador para construo da matriz final (matriz B)
Verificar se os ndices so pares se sim executar ao 5 se no executar ao 6.
Multiplicar o dado armazenado na varivel indexada por cinco
Dividir o dado armazenado na varivel indexada por dois
Iniciar o contador para construo da matriz final (matriz B)
Escrever a matriz B e finalizar o programa.
CODIFICAO

DIAGRAMA DE BLOCOS
incio

programa CONSTRUO_DE_MATRIZ_B
var

I 1, 20, 1

I, R: inteiro
A[I]

A,B: conjunto [1..20] de real


incio
para I de 1 at 20 passo 1 faa

I 1, 20, 1

leia A[I]
RI 2

fim_para

(I div 2)

para I de 1 at 20 passo 1 faa


N

R<>0

B[I]A[I] /2

S
RI 2*(I div 2)
B[I]A[I]

se (R <> 0) ento

B[I]A[I]*5
seno
B[I]A[I]/2
fim_se
B[I]

fim

fim_para
para I de 1 at 20 passo 1 faa
escreva B[I]
fim_para
fim
15

Obs: Os mesmos procedimentos so realizados em uma matriz bidimensional, apenas


duplicando os procedimentos de leitura e escrita em virtude da dimenso da matriz.
Manipulao de elementos de uma matriz.
Outra forma de manipular as matrizes e operando os elementos que compe uma
matriz, seja utilizando-se de operaes fundamentais como da combinao de elementos
entre matrizes sejam ora por elementos correspondentes ora por elementos que atendam
algum requisito de sua lei de formao.

Exemplo 2
Escrever um programa que leia os elementos de duas matrizes A e B do mesmos tipo e
dimenses (3 linhas e 24 colunas) e construa uma terceira matriz (C) somando os
elementos correspondentes das matrizes A e B.

Sada

procedimentos

entrada

Entendimento.
1.
2.
3.
4.
5.
6.
7.
8.

Iniciar os contadores dos ndices I e J da matriz de origem (matriz A)


Ler os valores associados aos ndices da matriz A.
Iniciar os contadores dos ndices I e J da matriz de origem (matriz B)
Ler os valores associados aos ndices da matriz B.
Iniciar o contador para construo da matriz final (matriz C)
Proceder a adio dos elementos que compe as matrizes A e B.
Proceder com a construo da matriz final (C).
Apresentar a matriz final (C).
DIAGRAMA DE BLOCOS
incio

A
I 1, 3, 1

I 1, 3, 1
J 1, 24, 1
J 1, 24, 1
C[I,J]A[I,J]+B[I,J]
A[I,J]

I 1, 3, 1
I 1, 3, 1
J 1, 24, 1
J 1, 24, 1
C[I,J]
B[I,J]

fim

16

CODIFICAO

programa ADIO_DE_MATRIZES
var
I, J: inteiro
A, B, C: conjunto [1..3,1..24] de real
incio
para I de 1 at 3 passo 1 faa
para J de 1 at 24 passo 1 faa
leia A[I,J]
fim_para
fim_para
para I de 1 at 3 passo 1 faa
para J de 1 at 24 passo 1 faa
leia B[I,J]
fim_para
fim_para
para I de 1 at 3 passo 1 faa
para J de 1 at 24 passo 1 faa
C[I,J]A[I,J]+B[I,J]
fim_para
fim_para
para I de 1 at 3 passo 1 faa
para J de 1 at 24 passo 1 faa
escreva C[I,J]
fim_para
fim_para
fim

17

TPICO 32
Ordenao
Em geral o processo de ordenao consiste em um rearranjo dos elementos que
compe um determinado conjunto de elementos de acordo com critrios estabelecidos
pela necessidade de resolver um problema organizacional. Exemplos de casos em que
os objetos do problema so ordenados podem ser encontrados em cadastros de clientes
listas de telefone ou mesmo controles financeiros cujo a ordenao facilita a consulta,
manipulao e manuteno dos dados armazenados, assim sendo todo conjunto de
dados armazenado sujeito a procura e alterao necessita de conceitos de ordenao.
Ordenar os elementos de uma matriz corresponde ao de organiz-los de
maneira conveniente as necessidades dos problemas computacionais.
Tal organizao podendo ser numrica, alfabtica ou alfanumrica respeitandose a ordem estabelecida na tabela ASCII. Podendo ser crescente ou decrescente
(numrica), ascendente ou descente (alfabticos, alfanumricos e demais caracteres)
sendo que os caracteres alfabticos so classificados primeiramente os maisculos
depois os minsculos como segue a ordem na tabela.

Imagem fonte: Manzano J.A., 23 edio - pag 22

Para classificar (ordenar) uma matriz seja unidimensional ou n dimensional j


existem um conjunto de tcnicas que facilitam o trabalho do idealizador da soluo
algortmica. Dentre as quais se destacam:
Ordenao por insero (mtodo da insero direta, mtodo da insero direta
com busca binria, mtodo dos incrementos decrescentes shellsort)
Mtodo em que os elementos so conceitualmente divididos em duas seqncias
uma chamada de destino (a1...ai-1) e outra chamada fonte (ai ... an). Em cada passo,
iniciando-se com I = 2 e incrementando-se I de uma em uma unidade, o i-sino

18

elemento da seqncia vai sendo retirado e transferido para a seqncia destino, e


inserido na posio apropriada.
Exemplo:
Chaves iniciais
i=2
i=3
i=4
i=5
i=6
i=7
i=8

44
44
12
12
12
12
06
06

55
55
44
42
42
18
12
12

12
12
55
44
44
42
18
18

42
42
42
55
55
44
42
42

94
94
94
94
94
55
44
44

18
18
18
18
18
94
55
55

06
06
06
06
06
06
94
67

67
67
67
67
67
67
67
94

O mtodo dos incrementos decrescentes shellsort consiste dividir o conjunto


em duas partes ordenando-as separadamente, e repetindo o processo at que a distncia
entre os elementos corresponda a unidade, neste momento realizada por ordenao
simples.
CONJUNTO NO ORDENADO (Chaves iniciais)
44 55 12 42 94 18 06 67

44

A ordenao de distncia 4 produz:


18 06 42 94 55 12 67

06

A ordenao de distncia 2 produz:


18 12 42 44 55 94 67

06

A ordenao de distncia 1 produz:


12 18 42 44 55 67 94

Ordenao por seleo direta (mtodo de seleo direta, mtodo de seleo em


rvore heapsort, mtodo de seleo em rvore marrada theadedheapsort).

Mtodo oposto a insero direta que considera em cada passo somente um nico
elemento sucessor da seqncia fonte e todos os elementos do vetor destino para
encontrar o ponto correto de insero, enquanto a seleo direta considera todos os
elementos do vetor fonte para localizar aquele que apresenta a menor chave a ser
utilizado como sendo o prximo elemento da seqncia destino.

Tais procedimentos baseados nos seguintes princpios:


a) Selecionar o elemento que apresenta a chave de menor valor;
b) Troc-lo com o primeiro elemento da seqncia ai.

19

c) c) Repetir estas operaes, envolvendo apenas n-1 elementos restantes, depois


os n-2 elementos e etc., at restar um s elemento, o maior deles.
Exemplo
Chaves iniciais

44
06
06
06
06
06
06
06

55
55
12
12
12
12
12
12

12
12
55
18
18
18
18
18

42
42
42
42
42
42
42
42

94
94
94
94
94
44
44
44

18
18
18
55
55
55
55
55

06
44
44
44
44
94
94
67

67
67
67
67
67
67
67
94

Ordenao por troca ( mtodo da bolha bubblesort, mtodo da agitao


shakesort, mtodo do pente combsort, mtodo de partio e troca quicksort).

Mtodo em que a permutao direta entre dois elementos (pares de elementos


adjacentes) pertencentes a um conjunto, sendo repetido n vezes at que todos os
elementos pertencentes ao conjunto sejam ordenados. (MTODO DESCRITO COM
MAIOR PROFUNDIDADE NO TPICO SEGUINTE)

Ordenao por intercalao (mtodo de intercalao simples mergsort, mtodo


de intercalao de seqncias naturais).

Mtodo mais adequado para a busca em dispositivos perifricos de memria


seqencial, tal como uma fita magntica. O processo consiste em combinar duas ou
mais seqncias de ordenao para formar uma nica seqncia ordenada atravs da
aplicao de repetidas selees entre os componentes acessveis em cada ocasio. Dada
a caracterstica de acesso vetorial do meio de armazenamento. (merge fuso).

Obedecendo os seguintes procedimentos:

1) Dividir a seqncia a em duas metades, chamadas b e c.


2) Fundir b e c por meio da combinao de elementos isolados para formarem pares
ordenados.
3) Denominar a a seqncia assim obtida,e repetir os passos 1 e 2, desta vez efetuando a
fuso de pares ordenados em qudruplas ordenadas.

20

4) Iterar os passos anteriores, executando a fuso das qudruplas em ctuplas, e assim


prosseguindo duplicando a cada vez o comprimento das subseqncias envolvidas no
processo de fuso, at que toda a seqncia esteja ordenada.

Exemplo

44

55

12

SEQNCIA
42 94 18

06

67

Particionando o conjunto temos as seqncias.


a 44 55 12 42
b 94 18 06 67
A fuso de componentes isolados (que so seqncias ordenadas de comprimento 1) em
pares ordenados resulta na seguinte seqncia.
44

94

18

55

06

12

42

67

Dividindo-se esta seqncia novamente ao meio e efetuando-se a fuso dos pares


ordenados resulta.
06

12

44

94

18

42

55

67

Uma terceira diviso e subseqente operao de fuso produzem finalmente o resultado


desejado.
06

12

18

42

44

55

67

94

Tais categorias divididas em duas classes interna e externa distinguindo-se


por:
Interna: as matrizes so armazenadas na memria interna da mquina, que se caracteriza
por ter acesso aleatrio e rpido, permitindo uma velocidade de acesso e manipulao
muito alta
Externa: arquivos armazenados em memrias externas (discos e fitas), de acesso lento e
de grande capacidade de armazenamento.
Exemplo: ordenao de fichas numeradas.
Estruturar as fichas para formarem um vetor significa coloc-las em frente a um
ordenador, de tal forma que cada ficha seja visvel, permitindo um acesso individual
direto.
Entretanto, estruturar as fichas na forma de um arquivo implica que somente a
ficha do topo de cada pilha visvel. Evidentemente, tal restrio ocasiona srias
21

conseqncias no mtodo a ser utilizado na ordenao. Isso, porm, um fato inevitvel


se o nmero de fichas a serem ordenadas for grande o suficiente par ao ocupar uma rea
superior disponvel na mesa utilizada.
A escolha do algoritmo adequado a soluo de um problema especfico tem
impacto direto em seu rendimento, ou seja, conhecer diferentes algoritmos e suas
aplicaes proporciona ao idealizador da soluo um produto final mais eficiente em
termos de rendimento quanto ao tempo de processamento dos dados.
De eficcia incontestvel e de entendimento extremamente simples o mtodo da
bolha se destaca por sua simplicidade, entretanto sua eficincia de velocidade
contestada, pois um mtodo de ordenao lento, mostrando-se til na ordenao de
pequenos conjuntos de dados.

22

TPICO 33
Mtodo da bolha (bubblesort)
Mtodo em que a permutao direta entre dois elementos (pares de elementos
adjacentes) pertencentes a um conjunto, sendo repetido n vezes at que todos os
elementos pertencentes ao conjunto sejam ordenados. Tal mtodo de fcil entendimento
demonstra-se til na ordenao de conjuntos pequenos por se tratar de um mtodo lento
comparativamente aos outros mtodos existentes.
Baseado na propriedade distributiva realiza a permutao dos elementos de uma
matriz at que sejam todos ordenados conforme sua a seqncia estabelecida pelos
endereos de cada uma das variveis.

Exemplo:
Dado um conjunto (tabela)
IDADE DOS ELEITORES
Endereo (I)
Idade
1
65
2
50
3
48
4
33
5
18

Os dados esto armazenados na ordem (65, 50, 48, 38, 18) relacionados
respectivamente aos ndices (1, 2, 3, 4, 5).
A[1]65

A[2]50

A[3]48

A[4]33

A[5]18

Para o processo de troca aplica-se a propriedade distributiva, que consiste em


comparar o elemento armazenado no endereo A[1] com os elementos armazenados na
ordem subseqente at o ultimo elemento, processo que se repetira com o elemento
A[2] at A[n], se a na comparao o elemento for maior que o seu subseqente efetua-se
a troca dos elementos.

Exemplo.
1. comparao

A[1]65

A[2]50

A[3]48

A[4]33

A[5]18

Compara-se os elementos A[1]65 , A[2]50 como A[2] menor que A[1]


efetua-se a troca dos elementos em relao a sua posio de ndice obtendo a nova
seqncia.
A[1]50

A[2]65

A[3]48

A[4]33

A[5]18

23

Repete-se ento o processo agora comparando os elementos [1]50, A[3]48.


2. comparao

A[1]50

A[2]65

A[3]48

A[4]33

A[5]18

E assim sucessivamente at que o elementos A[1] tenha sido comparados a todos


os elementos subseqentes na seqncia.
3. comparao
4. comparao

A[1]48
A[1]33
A[1]18

A[2]65
A[2]65
A[2]65

A[3]50
A[3]50
A[3]50

A[4]33
A[4]48
A[4]48

A[5]18
A[5]18
A[5]33

Conjunto com o menor elemento ocupando o primeiro endereo (I).


Assim o elemento 18 armazenado no endereo A[1] no necessita ser comparado
mais a nenhum elemento, a partir deste momento repete-se todo o processo comparando
o elemento armazenado no endereo A[2] com todos os seus subseqente at que o
conjunto final esteja todo ordenado.
Conjunto ordenado

A[1]18

A[2]33

A[3]48

A[4]50

A[5]65

O mesmo processo ocorre para dados do tipo caractere ou cadeia, visto que eles
obedecem a ordem estabelecida na tabela ASCII. Assim quando comprando um
conjunto composto por estes tipos sabe-se a dimenso ou valor correspondente a sua
ordenao.
Exemplo.
Dado o conjunto (matriz unidimensional)

A = { g, M, f, 21} sua ordenao

ser:
1. comparao

A[1]g

A[2]M

A[3]f

A[4]21

Sendo g maior que M segundo a tabela ASCII, que correspondem a (g=103,


M=77), realizada a troca obtendo a nova seqncia.
2. comparao

A[1]M

A[2]g

A[3]f

A[4]21

Como M menor que f realizada a comparao mas no se realizada nenhuma


troca.
3. comparao

A[1]M

A[2]g

A[3]f

A[4]21

Note que a matriz utilizada tipo cadeia, assim o elemento armazenado no


endereo A[4] tratado como um caractere e sua ordem estabelecida pela tabela
ASCII que corresponder a: (21 = (2 =50, 1 = 49)), da percebe-se que M maior que
21, e efetua-se a troca entre eles obtendo o conjunto.
A[1]21

A[2]g

A[3]f

A[4]M
24

Neste momento repete-se o procedimento partir do endereo 2 A[2],


comparando-o com os elementos subseqentes.

Exemplo de codificao:
Elaborar um programa que leia os dados de 40 registros, processando a ordenao de
maneiras ascendente e apresentando os ordenados em um relatrio.
DIAGRAMA DE BLOCOS.
incio

I 1, 40, 1

DADO[I]

I 1, 39, 1

J I, 40, 1
N

DADO[I] > DADO[J]

S
XDADO[I]
DADO[I]DADO[J]
DADO[J]X

I 1, 40, 1
DADO[I]

fim

25

CDIGO
programa DADOS_ORDENADOS
var
I, J: inteiro
DADO: conjunto [1..40] de cadeia
X: cadeia
incio
{trecho de entrada de dados}
para I de 1 at 40 passo 1 faa
leia DADO[I]
fim_para
{Trecho de processamento de ordenao}
para I de 1 at 39 passo 1 faa
para I de I at 40 passo 1 faa
se (DADO[I] > DADO[J]) ento
XDADO[I]
DADO[I]DADO[J]
DADO[J]X
fim_se
fim_para
fim_para
{Trecho de sada com dados ordenados}
para I de 1 at 40 passo 1 faa
escreva DADO[I]
fim_para
fim

Nota: os trecho entre chaves {} corresponde a comentrios

26

TPICO 34

Pesquisa
Os processos de busca (pesquisa) correspondem a um dos processos mais
utilizados nas solues computacionais, semelhantemente aos processos de ordenao
existem diversos algoritmos j estruturados j planejados, que atendem uma grande
diversidade de problemas, proporcionando ao idealizador da soluo sua utilizao sem
a necessidade da criao de algum algoritmo em especial.
A hiptese bsica da busca consiste em localizar um determinado dado
armazenado em um endereo de memria fixo em uma coleo de dados.

Principais mtodos de pesquisa

Busca linear

Aplica-se principalmente aos casos em que no existem informaes sobre os


dados armazenados na matriz a ser pesquisada, ou seja, no se sabe se ele est ordenado
ou no, exigindo que seja feita uma busca por todo o vetor em que o dado pode estar
armazenado. Sua eficincia corresponde a expresso N/2 (para N = numero de
elementos armazenados no vetor).

Busca binrio

Aplicas aos casos em que esto disponveis mais informaes a cerca do dado a
ser localizado e que o vetor apresenta-se previamente ordenado. Possibilitando uma
significativa melhorar da eficincia quanto ao mtodo de busca linear, correspondendo a
log N (logaritmo de N) arredondado para cima at o nmero inteiro mais prximo.

Busca em tabelas

A busca em tabela tambm denominada busca em vetor, corresponde a busca


realizada partir de uma chave estruturada, tal como cadeias de caracteres (strings)
ou palavras, sua principal condio corresponde a verificao se todos os elementos da
cadeia correspondam ao operador estruturado.

Busca direta em cadeias

A busca direta em cadeia de caracteres caracteriza-se por ser realizada em uma


vetor s de N elementos e um vetor p de M elementos, onde 0 < M =< N, seu algoritmo
consiste em localizar a primeira ocorrncia de p em s. Como, em geral os itens so
caracteres, s poder ser visto como um texto, e p como um padro (de caracteres) ou
palavra.
Atualmente os dois mtodos mais eficientes de busca em cadeias correspondem
aos mtodos de Hnuth-Norris-Pratt (KMP), e o mtodo Boyer-Moore.
Que consistem na comparao de um novo padro aproveitando informaes
valiosas que podem ser descartadas em cada uma das passagens de verificao, assim,
27

aps a identificao do incio (mtodo KMP) ou fim (mtodo BM) do padro com os
caracteres a prxima comparao ter um nmero substancialmente menor de
comparaes a realizar.
Estudaremos com maior profundidade os algoritmos de Busca Linear (pesquisa
linear) e o mtodo de busca binria (pesquisa binria).

TPICO 35
Pesquisa linear
Consiste em um dos mtodos mais simples de busca, tal processo de busca
compara elemento por elemento at que seja encontrada a varivel buscada ou at que
seja extinta a possibilidade do dado buscado pertencer ao vetor pesquisado. (obs.: por
conveno adota-se a varivel buscada por PESQ.
Este mtodo considerado lento, entretanto eficiente quando se tratando de
conjuntos desordenados.

Exemplo 01 - procedimentos
Dada a matriz bidimensional abaixo, quando pretendido localizar cos, o processo de
busca realizar os seguintes procedimentos.
32
3/2
Tang
-1

90
Sen
0
Tang
1

0
1
0
tang
sen

cos
64
sen
0
1
cos

1
sen
1
cos
9
tang

1 - Verifica-se se o elemento armazenado no primeiro endereo A[1,1] (A[1, 1]32)


corresponde a varivel pesquisada (PESQ), se a varivel corresponder ao elemento
encerra-se a estrutura de pesquisa, como 32 no corresponde a cos o contador
incrementado permitindo que o prximo endereo seja verificado.
2 - O processo de verificao e incremento repetido at que seja encontrada a
varivel pesquisada.
(A[4,5]cos) comparado a varivel pesquisada cos, como cos = cos,
ento o algoritmo se encerra.
Exemplo 02 diagrama de blocos e codificao.
Elaborar um programa que leia 20 nomes armazenados em uma matriz e que coincidam
com o nome de entrada da pesquisa, apresentado o resultado em vdeo, caso o nome
28

pesquisado no seja encontrado, deve-se informar por meio de uma mensagem em vdeo
que o nome pesquisa no foi localizado e encerrar o programa.

DIAGRAMA DE BLOCOS

incio
I 1, 20, 1
NOMES[I]

Entre com nome


a ser pesquisado

PESQ
I1
F .F.

I<=20
.e.
ACHA = .F.

S
N

S
PESQ = NOME[I]

ACHA .V.

II+1

ACHA = V

PESQ NO
LOCALIZADO

PESQ
LOCALIZADO

fim

29

CDIGO
Programa PESQUISA_NOME
var
I: inteiro
NOMES: cadeia [1..20] de cadeia
ACHA: lgico
PESQ: cadeia
incio
para I de 1 at 20 passo 1 faa
leia NOMES [I]
fim_para
escreva Entre com nome a ser pesquisado
leia PESQ
I 1
F .F.
enquanto (I<=20) .e. (ACHA = .Falso.) faa
se (PESQ = NOME[I]) ento
ACHA .Verdadeiro.
seno
II+1
fim_se
fim_enquanto
se (ACHA = Verdadeiro.) ento
escreva PESQ LOCALIZADO
seno
escreva PESQ NO LOCALIZADO
fim_se
fim

Bloco de instrues da pesquisa seqencial.

TPICO 36

Pesquisa binria

Mtodo mais eficiente que a pesquisa binria que se exige do vetor que esteja
previamente ordenado, condio que permitira os seguintes procedimentos:

1 Verifica-se se o elemento pesquisado (varivel PESQ) corresponde ao elemento


central do vetor, se sim so realizadas as instrues condicionadas localizao da
varivel pesquisada, se no o mtodo divide o vetor em duas partes e verifica a
possibilidade da varivel pesquisada estar posicionada na primeira ou segunda parte do
vetor.

30

2 Neste ponto o algoritmo exclui da pesquisa a parte do vetor que no tem a


informao, repetindo o processo anterior na regio do vetor onde h possibilidade que
esteja o dado pesquisado. Caso seja a informao seja encontrada o algoritmo se
encerra-se caso contrario o procedimento se repetira at que hajam apenas dois
elementos a serem comparados com a varivel pesquisada.

Exemplo 01 procedimento

Seja dado o vetor ao lado, os procedimentos de busca binria


para localizar o nome FERNANDO varivel pesquisada
PESQ. Correspondem a:
NOTA: fundamental lembrar que a pesquisa binria somente
pode ser realizada quando o vetor j est ordenado, e que sua
ordenao obedece ao padro estabelecido na tabela ASCII, ou
seja, no exemplo em questo se verifica que corresponde a um
vetor do tipo cadeia e obedece a ordem alfabtica.

INDICE
1
2
3
4
5
6
7
8
9

NOMES
ALICE
BERNARDO
FERDINANDO
LUIZ
MARCOS
PEDRO
RENATO
TADEU
WILSON

1 Verifica-se qual o elemento central do vetor, usando o seguinte procedimento.

(MEIO( COMEO + FIM ) div 2) ).

partir da temos que o elemento central corresponder ao elemento


V[5]MARCOS.
Se o elemento pesquisa corresponde a BERNARDO B na tabela ASCII
corresponde a posio 66 enquanto M corresponde a 77, assim a segunda parte do
vetor pesquisado ser descartada e o procedimento se repetir.

1. PARTE
INDICE
NOME
1
ALICE
2
BERNARDO
3
FERDINANDO
4
LUIZ

ELEMENTO CENTRAL
INDICE
NOME
5
MARCOS

2. PARTE
INDICE
NOME
6
PEDRO
7
RENATO
8
TADEU
9
WILSON

2 Repete-se o processo descartando a segunda parte.


1. PARTE
INDICE
NOME
1
ALICE
2
BERNARDO

ELEMENTO CENTRAL
INDICE
NOME
3
FERDINANDO

2. PARTE
INDICE
NOME
4
LUIZ
5
MARCOS
31

B corresponde a 66 e F 70, descartando a 2. parte e repetindo o processo. temos

3 Repete-se o processo descartando a segunda parte.


1. PARTE
INDICE
NOME
1
ALICE

ELEMENTO CENTRAL
INDICE
NOME
2
BERNARDO

2. PARTE
INDICE
NOME
3
FERDINANDO

Momento em que o dado pesquisado localizado e ocorrem as instrues


condicionadas ao valor verdade verdadeiro.

Exemplo 02 digrama de blocos e codificao

Elaborar um programa que leia 20 nomes armazenados em uma matriz


verificando pelo processo de busca binrio (entende-se que a matriz est previamente
ordenada) e que coincidam com o nome de entrada da pesquisa, apresentando em vdeo
o resultado, caso o nome pesquisado no seja encontrado, deve-se informar por meio de
uma mensagem em vdeo que o nome pesquisa no foi localizado e encerrar o
programa.

32

DIAGRAMA DE BLOCOS

incio

I 1, 20, 1

NOMES[I]
Entre com nome
a ser pesquisado

PESQ
COMEO1
FIM20
ACHA.F.

COMEO=<FINAL
.e. ACHA=.F.

S
MEIO ( COMEO + FINAL ) DIV 2
N

N
COMEO MEIO + 1

PESQ = NOME[MEIO]

ACHA .V.

PESQ < NOME[MEIO]

FINAL MEIO - 1

ACHA = V

PESQ NO
LOCALIZADO

PESQ
LOCALIZADO

fim

33

CDIGO
Programa PESQUISA_BINRIA
var
NOME: conjunto [1..20] de cadeia
I, COMEO, FINAL, MEIO: inteiro
PESQ: cadeia
ACHA: lgico
Incio
para I de 1 at 20 passo 1 faa
leia NOME[I]
fim_para
escreva Entre com nome a ser pesquisado
leia PESQ
COMEO1
FIM20
ACHA.F.

enquanto (COMEO =< FINAL) .e. (ACHA = .Falso.) faa


MEIO ( COMEO + FINAL ) div 2
se (PESQ = NOME [MEIO] ) ento
ACHA . Verdadeiro.
seno
se ( PESQ < NOME [MEIO] ) ento
FINAL MEIO 1
seno
COMEO MEIO + 1
fim_se
fim_se
fim_enquanto
se (ACHA = .Verdadeiro.) ento
escreva PESQ, LOCALIZADO
seno
escreva PESQ, NO LOCALIZADO
fim_se
fim

34

TPICO 37
Variveis compostas heterogneas
Os dados combinados em um determinado registro levam o nome de variveis
heterogneas (dados derivados) por se tratar de uma coleo de dados de diferentes tipos
primitivos (real, inteiro, caractere, cadeia e lgico), reunidos em uma mesma estrutura.
Exemplo 01:
Pretende-se combinar os elementos (dados) encontrados em um cadastro de clientes,
que correspondem a:
NOME:
ENDEREO:
CDIGO POSTAL:
CLIENTE PESSOA FISICA OU JURDICA:
COMPRAS DO 1 MS:
COMPRAS DO 2 MS:
COMPRAS DO 3 MS:

deve conter dados do tipo cadeia


deve conter dados do tipo cadeia
deve conter dados do tipo cadeia
deve conter dados do tipo caractere
deve conter dados do tipo real
deve conter dados do tipo real
deve conter dados do tipo real

Note que existem trs grandes tipos de dados relacionados a um mesmo cliente: (cadeia,
caractere, e real), a combinao dos diferentes tipos de dados em um nico registro corresponde
a um conjunto de dados heterogneo.

Atribuio de registro (varivel heterognea)


Sua atribuio deve ser feita antes da atribuio das variveis a serem manipuladas pelo
sistema, usando a sintaxe:
tipo
<identificador> = registro
<lista dos campos e seus
tipos>
fim_registro

Exemplo 02:
tipo
<CAD_CLIENTES> = registro
NOME: cadeia
ENDEREO: cadeia
CDIGO POSTAL: cadeia
FISICO/JURCIO: caractere
COMP01: real
COMP02: real
COMP03: real
fim_regitro
var
CREDITO: cad_clientes
35

Leitura e escrita de um registro


Tanto a leitura quanto a escrita de um registro podem ser realizadas de duas maneiras a
1. campo a campo, sendo indicado o nome da varivel do tipo de registro e seu campo
separados por um caractere . ponto. A 2 indicando apenas o nome do registro antecedido
pelos comandos leia ou escreva, neste caso todos os campos sero manipulados pelo
comando.

Exemplo 03

programa CREDITO_DE_ CLIENTES


tipo
<CAD_CLIENTES> = registro
NOME: cadeia
ENDEREO: cadeia
CDIGO POSTAL: cadeia
FISICO/JURCIO: caractere
COMP01: real
COMP02: real
COMP03: real
fim_registro
var
CREDITO: cad_clientes
incio
leia CREDITO. NOME
leia CREDITO.ENDEREO
leia CREDITO.CDIGO_POSTAL
leia CREDITO.FISICO/JURCIO
leia CREDITO.COMP01
leia CREDITO. COMP02
leia CREDITO. COMP03
escreva CREDITO. NOME
escreva CREDITO.ENDEREO
escreva CREDITO.CDIGO_POSTAL
escreva CREDITO.FISICO/JURCIO
escreva CREDITO.COMP01
escreva CREDITO.COMP02
escreva CREDITO.COMP03
fim

Observe que com este


procedimento algum campo que
no seja necessrio pode ser
suprimido ou utilizado em outro
momento, assim a referncia de
cada um dos campos
individualmente possibilita maior
liberdade ao desenvolvedor da
soluo tecnolgica.

Exemplo 04
incio
leia CREDITO
escreva CREDITO
fim

Trecho de cdigo do registro todo no


discriminando os dados.
Adote a entrada de dados como sendo a mesma
do exemplo anterior.
36

Estrutura de registro matriz


Uma maneira conveniente combinar os elementos de registro com matrizes do tipo vetor,
reduzindo drasticamente o trabalho de elaborao do cdigo.
Exemplo
Em um registro bancrio, contendo os dados abaixo.

TIPOS DE DADOS
cadeia

NOME:
CLIENTE ESPECIAL:

SIM

lgico

NO

cadeia

ENDEREO:

cadeia

CPF:

JAN

FEV

NOVIMENTAO FINANCEIRA
MAR
ABR
MAI

real
JUN

Codificao

tipo
CAD_CLIENTE = registro
NOME, ENDEREO, CPF : cadeia
CLIENTE_ESPECIAL
: lgico
MOV_FINANC
: conjunto [1..6] de real
fim_registro
var
CLIENTE : cad_cliente
I : inteiro
incio
leia CLIENTE.NOME
leia CLIENTE.ENDEREO
leia CLIENTE.CPF
para I de 1 at 6 passo 1 faa
leia CLIENTE.MOV_FINANC[I]
fim_para
{bloco de execues}
escreva CLIENTE.NOME
escreva CLIENTE.ENDEREO
escreva CLIENTE.CPF
para I de 1 at 6 passo 1 faa
escreva CLIENTE.MOV_FINANC[I]
fim_para
37

fim
Exemplo:
Desenvolver um programa que leia uma tabela de cargos e salrios. Em seguida, o programa
deve solicitar que seja fornecido o cdigo de um determinado cargo. Esse cdigo deve estar
entre 1 e 17. O operador do programa pode fazer quantas consultas desejar. Sendo o cdigo
vlido, o programa deve apresentar o cargo e o salrio associado ao cargo selecionado. Caso
seja invlido, deve avisar o operador dessa ocorrncia. Para inserir dados no sistema dos
cdigos de cargo/salrios, observe a tabela seguinte:
TABELA DE CARGOS E SALRIOS
Cd. Cargo
Salrio h.
01
Anal. de cargos e salrios
9,00
02
Auxiliar contbil
6,25
03
Chefe de cobrana
8,04
04
Chefe de expedio
8,58
05
Contador
15,60
06
Gerente regional
22,90
07
Escriturrio
5,00
08
Faxineiro
3,20
09
Gerente administrativo
10,30
10
Gerente comercial
10,40
11
Gerente de pessoal
10,29
12
Gerente de treinamento
10,68
13
Gerente financeiro
10,54
14
Contnuo
2,46
15
Operador de computador
6,05
16
Programador
9,10
17
Secretria
7,31

38

programa TABELA_DE_SALRIOS
tipo
REG_DADOS = registro
CDIGO : inteiro
CARGO : cadeia
SALRIO : real
fim_registro
var
TABELA: conjunto [1..17] de reg_dados
I, CODPESQ : inteiro
RESP: caractere
ACHA: lgico
incio
para I de 1 at 17 passo 1 faa
TABELA [I].CDIGO I
escreva Cdigo .....:, TABELA[I].CDIGO
escreva Cargo .......:, leia TABELA[I].CARGO
escreva Salrio......:, leia TABELA[I].SALRIO
fim_para
RESP SIM
enquanto (RESP = SIM) faa
escreva Qual cdigo 1 a 17
leia CODPESQ
I1
ACHA .Falso.
enquanto (I =< 17) .e. (ACHA = .Falso.) faa
se (CODPESQ = TABELA[I].CDIGO) ento
ACHA .Verdadeiro.
seno
II+1
fim_se
fim_enquanto
se (ACHA = .Verdadeiro.) ento
escreva Cdigo:........, TABELA[I].CDIGO
escreva Cargo: ........., TABELA[I].CARGO
escreva Salrio: ......., TABELA[I].SALRIO
seno
escreva Cargo Inexistente
fim_se
escreva Deseja continuar pesquisa? Responda [S]im ou [N]o:
leia RESP
fim_enquanto
fim
(fonte: Manzano, Algoritmos, pag 205 23 ed.)

39

TPICO 38
Procedimentos
Um mdulo de procedimentos ou sub-rotina corresponde a um bloco de programa que se
referencia por um rtulo permitindo que um programa principal chame suas funes nos
processos a serem realizados, permitindo ao idealizador de soluo tecnolgica modulada em
rotinas e sub-rotinas. Sua diagramao em portugus estruturado e seu diagrama de blocos
obedecem s seguintes sintaxes.
CODIFICAO
programa <rtulo do programa>
procedimento <sub-rotina>
var
<variveis>
incio
<instrues>
fim
incio
<sub_rotina>
fim
Obs: O cdigo da sub-rotina deve ser escrito antes de sua chamada no trecho de chamada da
sub-rotina, assim, a chamada da sub-rotina deve ser representada em portugus estruturado de
forma sublinhada, estando esta forma associado ao indicada do smbolo processo
predefinido.

TPICO 39
Funes
Uma funo corresponde a um bloco de programa semelhante o procedimento (subrotina), contendo inicio, fim e identificada por um rtulo que permite o programa principal
chamar suas execues. A diferena entre procedimento e funo que a funo corresponde a
uma estrutura de abstrao que sua principal caracterstica operacional na capacidade de sempre
retornar um contedo de resposta, ou seja, a funo retorna um valor que retorna no prprio
rtulo da funo podendo ocorrer em operaes de processamento (lgico ou matemtico) e de
sada, enquanto os procedimentos no retornam contedos, a no ser com o uso de
procedimentos de passagem de parmetro por valor ou por referncia.

40

CDIGO
programa CALC_FAT_V3
funo FATORIAL (N : inteiro) : inteiro
var
I, FAT : inteiro
incio
FAT 1
para I de 1 at N passo 1 faa
FAT FAT * I
fim_para
FATORIAL FAT
fim
var
LIMITE : inteiro
incio
escreva Qual fatorial:
leia LIMITE
escreva FATORIAL(LIMITE)
fim
Obs.: Por se tratar de uma estrutura que retorna um valor fundamental que seja indicado o tipo
de dado da funo.

TPICO 40
Passagens de parmetros
O processo de passagem de parmetros permite estabelecer uma linha de comunicao
entre os contedos dos trechos de sub-rotinas (parmetros/funes), e dos trechos de programa
que chamam essas sub-rotinas. Tal comunicao que ocorre entre o trecho de programa
chamador e o trecho de programa chamado, podendo o parmetro ser considerado real (quando
declarado no trecho do programa que chama a sub-rotina) ou formal (quando declarado no
trecho da sub-rotina). Tais processos de passagem de parmetros chamam-se:

Passagem de parmetro real quando o trecho de programa chama uma sub-rotina, ao


fazer a operao de passagem, realiza uma abstrao.

Passagem de parmetro formal quando a sub-rotina chamada recebe a passagem de


parmetro, este formaliza a operao de abstrao a ela transferida.

Passagem de parmetro por valor


Dizemos que ocorreu uma passagem de parmetro por valor quando o parmetro formal
da sub-rotina recebe o parmetro real do trecho de programa chamador um determinado
contedo, assumindo o papel de varivel local da sub-rotina. Assim qualquer modificao no
41

contedo do parmetro formal no altera o valor do contedo do parmetro real, ou seja, o


processamento realizado e armazenado na prpria sub-rotina.

CODIFICAO
programa CALC_FAT_V1
procedimento FATORIAL (N : inteiro)
var
I, FAT: inteiro
incio
FAT 1
para I de 1 at N passo 1 faa
FAT FAT * I
fim_para
escreva FAT
fim
var
LIMITE : inteiro
incio
escreva Qual fatorial: leia LIMITE
FATORIAL (LIMITE)
fim

TPICO 41

Passagem de parmetro por referncia


Dizemos que ocorreu uma passagem de parmetro por referncia quando o parmetro
real do programa chamador recebe o contedo do parmetro formal da sub-rotina, portanto dado
certo processamento dentro da sub-rotina, o parmetro formal reflete a alterao de seu
contedo no parmetro real. Assim qualquer modificao no contedo do parmetro formal
implicar em alterao imediata do contedo do parmetro real correspondente.

42

CODIFICAO
programa CALC_FAT_V2
procedimento FATORIAL (N : inteiro; var FAT: inteiro)
var
I: inteiro
incio
para I de 1 at N passo 1 faa
FAT FAT * I
fim_para
fim
var
LIMITE, RESP : inteiro
incio
RESP1
escreva Qual fatorial:
leia LIMITE
FATORIAL (LIMITE, RESP)
escreva RESP
fim

43