Vous êtes sur la page 1sur 38

Apostila de Algoritmo

SUMRIO
1. O QUE ALGORITMO?.......................................................................................................... 4
1.1. ALGORITMO COMPUTACIONAL..................................................................................................4
1.2. ESTRUTURA DE UM ALGORITMO COMPUTACIONAL.................................................................4
2. TIPOS DE DADOS, VARIVEIS E CONSTANTES.............................................................. 6
2.1. TIPOS DE DADOS PRIMITIVOS.....................................................................................................6
2.1.1. INTEIRO......................................................................................................................................6
2.1.2. REAL..........................................................................................................................................6
2.1.3. CARACTERE................................................................................................................................6
2.1.4. LGICO.......................................................................................................................................6
2.2. VARIVEL.....................................................................................................................................7
2.2.1. REGRAS PARA FORMAO DE NOMES PARA VARIVEIS...........................................................7
2.2.2. DECLARAO DE VARIVEIS.....................................................................................................8
2.3. CONSTANTE..................................................................................................................................9
2.3.1. DECLARAO DE CONSTANTES.................................................................................................9
3. INSTRUES BSICAS........................................................................................................... 9
3.1. ENTRADA DE DADOS (COMANDO DE LEITURA).......................................................................10
3.2. SADA DE DADOS (COMANDO DE ESCRITA)..............................................................................10
3.3. COMANDO DE ATRIBUIO.......................................................................................................12
4. OPERADORES......................................................................................................................... 14
4.1. OPERADORES ARITMTICOS.....................................................................................................14
4.2. OPERADORES RELACIONAIS.....................................................................................................15
4.3. OPERADORES LGICOS.............................................................................................................15
4.3.1. TABELAS VERDADE..................................................................................................................15
4.3.1.1. Tabela Verdade do Operador Lgico E...............................................................................16
4.3.1.2. Tabela Verdade do Operador Lgico OU...........................................................................16
4.3.1.3. Tabela Verdade do Operador Lgico NO........................................................................16
5. ESTRUTURAS DE CONTROLE............................................................................................ 17
5.1. ESTRUTURAS DE SELEO........................................................................................................17
5.1.1. SELEO SIMPLES....................................................................................................................17
5.1.2. SELEO COMPOSTA...............................................................................................................18
5.1.2.1. O Comando Entao..............................................................................................................19
5.1.2.2. O Comando Senao..............................................................................................................19
5.1.3. SELEO DE MLTIPLA ESCOLHA...........................................................................................20
5.2. ESTRUTURAS DE REPETIO....................................................................................................22
5.2.1. ESTRUTURA DE REPETIO PARA............................................................................................22
5.2.2. ESTRUTURA DE REPETIO ENQUANTO..................................................................................23
5.2.3. ESTRUTURA DE REPETIO REPITA.........................................................................................25

6. ESTRUTURAS DE DADOS HOMOGNEAS....................................................................... 26


6.1. VETOR........................................................................................................................................27
6.1.1. DECLARAO DE UM VETOR....................................................................................................27
6.1.2. ACESSANDO UMA POSIO DO VETOR....................................................................................27
6.2. CADEIA.......................................................................................................................................29
6.2.1. LEITURA, ESCRITA E ATRIBUIO DE CADEIAS......................................................................30
6.3. MATRIZ......................................................................................................................................31
6.3.1. DECLARAO DE UMA MATRIZ...............................................................................................32
6.3.2. ACESSANDO UMA POSIO DA MATRIZ..................................................................................32
7. ESTRUTURAS DE DADOS HETEROGNEAS................................................................... 35
7.1. REGISTROS.................................................................................................................................35
7.1.1. DECLARAO DE UM REGISTRO..............................................................................................35
7.1.2. ACESSANDO UM REGISTRO......................................................................................................36
8. REFERNCIAS BIBLIOGRFICAS..................................................................................... 38

1. O QUE ALGORITMO?
uma seqncia de passos que devem ser executados sequencialmente, visando
atingir um objetivo bem definido em um tempo finito.
Os algoritmos so comuns no cotidiano das pessoas, como por exemplo, uma
receita de bolo. Em uma receita, est descrita uma srie de ingredientes necessrios, uma
seqncia de diversos passos - aes - a serem executados para que se consiga fazer
determinado tipo de bolo, que o objetivo definido.
Segundo WIRTH (1978), programas so formulaes concretas de algoritmos
abstratos, ou seja, programar basicamente construir algoritmos.
De acordo com SZWARCFITER & MARKENZON (1994), um algoritmo um
processo sistemtico para a resoluo de um problema.

1.1. ALGORITMO COMPUTACIONAL


o algoritmo que construdo para ser executado por um computador. Por isso,
SZWARCFITER & MARKENZON (1994), afirmam que o desenvolvimento de
algoritmos particularmente importante para problemas a serem solucionados em um
computador, pela prpria natureza do instrumento utilizado.

1.2. ESTRUTURA DE UM ALGORITMO COMPUTACIONAL


Um algoritmo computacional, assim como uma receita culinria, dividido em
duas partes, uma rea de declaraes e outra de instrues a serem executadas.

algoritmo "semnome"
{
rea de declaraes (variveis, constantes e tipos)
}
inicio
{
instrues
}
fimalgoritmo

Na primeira linha do algoritmo, especificado o seu nome, onde o mais


recomendvel colocar um nome que diz respeito ao objetivo final do algoritmo, por
exemplo, se o objetivo calcular a mdia de um aluno, pode-se chamar calcula_media.
A seguir, aparece a rea de declaraes, onde se declaram, todas as variveis e
constantes utilizadas no algoritmo, algo parecido com os ingredientes da receita de bolo.
Entre os comandos incio e fimalgoritmo, so colocadas as instrues que sero
executadas em uma seqncia linear de cima para baixo e da esquerda para direita, isto ,
na mesma ordem em que foram escritas. Observe o exemplo abaixo:

algoritmo "calculaMedia"
{
variveis
}
inicio
{
instruo 1
instruo 2
instruo 3
instruo 4
...
instruo n
}
fimalgoritmo

2. TIPOS DE DADOS, VARIVEIS E CONSTANTES


2.1. TIPOS DE DADOS PRIMITIVOS
Para o bom entendimento dos tipos de dados importante a compreenso do
conceito de informao, que a matria-prima que faz com que seja necessria a existncia
dos computadores, pois so capazes de manipular e armazenar um grande volume de dados
com grande eficincia.
Para se aproximar da forma pela qual o computador manipula as informaes, os
tipos de dados se dividem em quatro, que so inteiro, real, caractere e lgico.

2.1.1. INTEIRO
Toda e qualquer informao numrica que pertena ao conjunto dos nmeros
inteiros, independendo de ser negativo ou positivo.

2.1.2. REAL
Toda e qualquer informao numrica que pertena ao conjunto dos nmeros reais,
fracionrios, independendo de ser negativo ou positivo.

2.1.3. CARACTERE
Toda e qualquer informao composta de apenas um caractere, compreendendo
qualquer smbolo da tabela ASCII.

2.1.4. LGICO
Toda e qualquer informao que pode assumir apenas duas situaes, que so
VERDADEIRO e FALSO.

TIPO DE DADOS
Inteiro
Real
Caractere
Lgico

PODEM CONTER
Nmeros inteiros
Nmeros inteiros e/ou com casas decimais
Qualquer smbolo da tabela ASCII
Verdadeiro (V) ou Falso (F)

2.2. VARIVEL
A memria principal de um computador organizada em uma seqncia de Bytes,
cada um com seu endereo, onde possvel armazenar ou ler valores armazenados.
Para acessar essas posies de memria, criam-se nomes que so associados a estas
posies de memria.
Estes nomes so nomes do qual chamamos de variveis. Ento, uma varivel vai
representar uma posio de memria.
O contedo de uma varivel ser representado pelos valores que podem ser
armazenados na posio de memria correspondente a varivel.

2.2.1. REGRAS PARA FORMAO DE NOMES PARA VARIVEIS


Quando se cria uma varivel necessrio dar um nome a ela. Poder ser qualquer
nome, desde que comtemple as regras descritas a seguir:

1. Deve comear por uma letra.


2. Os demais caracteres devem ser letras, nmeros ou _.
3. Nenhum outro smbolo pode ser utilizado, exceto os previstos em 1 e 2.
4. No pode conter espao e acentos.

A tabela a seguir apresenta alguns exemplos de nomes vlidos e nomes invlidos


para variveis.

NOME
I
Nmero
Numero
Abc123
123abc
Ab!cd
CPF_Cliente
xyz12abc

CERTO/ERRADO
Certo
Errado
Certo
Certo
Errado
Errado
Certo
certo

2.2.2. DECLARAO DE VARIVEIS


Antes que uma varivel possa ser utilizada necessrio fazer uma declarao, onde
so definidos o nome e o tipo da varivel. A sintaxe para a declarao das variveis a
seguinte:

var
nome_varivel: tipo de dado

Observe o exemplo a seguir:

var
matricula: inteiro
teste, trab, conc, prova: real
sexo: caractere
aprovado: logico

Observe a declarao de variveis no contexto de um algoritmo:

algoritmo "calculaMedia"
var
matricula: inteiro
teste, trab, conc, prova: real
sexo: caractere
aprovado: logico
inicio
{
instrues
}
fimalgoritmo

2.3. CONSTANTE
Uma informao constante quando ao contrrio das variveis, no sofre nenhuma
variao no decorrer do algoritmo.

2.3.1. DECLARAO DE CONSTANTES


Antes que uma constante possa ser utilizada necessrio fazer uma declarao,
onde so definidos o nome e o contedo da constante. A sintaxe para a declarao das
constantes a seguinte:

const
nome_constante = valor da constante

Observe o exemplo a seguir:

const
matricula = 5533
sexo = M
aprovacao = VERDADEIRO

Observe a declarao de constantes no contexto de um algoritmo:

algoritmo "calculaMedia"
const
matricula = 5533
sexo = M
aprovacao = VERDADEIRO
var
teste, trab, conc, prova: real
inicio
{
instrues
}
fimalgoritmo

3. INSTRUES BSICAS

10

Aps ter declaradas as variveis, preciso manipula-las. preciso entrar com


dados no programa para gerar os resultados. Para isso, existem comandos de entrada e
sada de dados em um algoritmo.

3.1. ENTRADA DE DADOS (COMANDO DE LEITURA)


A execuo desta instruo realizar a leitura de um valor para uma varivel,
fazendo assim com que o valor digitado pelo usurio seja armazenado na posio de
memria apontado por esta varivel. Sua sintaxe a seguinte:

leia (nome_varivel)

Observe o exemplo a seguir:

leia (matricula)
leia (trab, teste, prova)
leia (conc)
leia (sexo)
leia (aprovado)

3.2. SADA DE DADOS (COMANDO DE ESCRITA)


A execuo desta instruo far com que o valor contido em uma varivel ou uma
mensagem de texto seja impresso no dispositivo de sada. Sua sintaxe a seguinte:

escreva (nome_variavel)
escreva (mensagem de texto)

Observe o exemplo a seguir, com a escrita de contedo de variveis:

escreva (matricula)

11

escreva (trab, teste, prova)


escreva (conc)
escreva (sexo)
escreva (aprovado)

Observe o exemplo a seguir, com a escrita de mensagens de texto:

escreva (Digite a matrcula: )


escreva (Maior de idade)

Observe o exemplo a seguir, com a escrita de contedo de variveis:

escreva (A matrcula , matricula)


escreva (A nota de trabalho , trab)
escreva (A nota de teste , teste)
escreva (A nota de prova , prova)
escreva (A nota de conceito , conc)
escreva (O sexo , sexo)
escreva (A aprovao , aprovado)

Existe ainda uma variao para o comando escreva, que o escreval, que faz com
que o prximo texto impresso na tela venha na linha de baixo. Observe o exemplo a seguir:

escreval (A matrcula , matricula)


escreval (A nota de trabalho , trab)
escreval (A nota de teste , teste)
escreval (A nota de prova , prova)
escreval (A nota de conceito , conc)
escreval (O sexo , sexo)
escreval (A aprovao , aprovado)

Observe os comandos de entrada e sada no contexto de um algoritmo:

algoritmo "calculaMedia"
var
matricula: inteiro
teste, trab, conc, prova: real
sexo: caractere
aprovado: lgico
inicio

12

escreva ("Digite a matrcula: ")


leia (matricula)
escreva ("Digite a notas de trabalho, teste e prova: ")
leia (trab, teste, prova)
escreva ("Digite a nota de conceito: ")
leia (conc)
escreva ("Digite o sexo: ")
leia (sexo)
escreva ("Digite a situao de aprovao: ")
leia (aprovado)
escreval ("A matrcula ", matricula)
escreval ("A nota de trabalho ", trab)
escreval ("A nota de teste ", teste)
escreval ("A nota de prova ", prova)
escreval ("A nota de conceito ", conc)
escreval ("O sexo ", sexo)
escreval ("A aprovao ", aprovado)
fimalgoritmo

3.3. COMANDO DE ATRIBUIO


Um comando de atribuio permite fornecer um valor a certa varivel, onde o tipo
dessa informao deve ser compatvel com o tipo de varivel. Sua sintaxe a seguinte:

varivel <- valor;


varivel <- varivel;

Observe o exemplo a seguir:

matricula <- 4422


teste <- 8.5
trab <- 6
prova <- 9
conc <- 1.75
sexo <- "M"
aprovado <- verdadeiro

Observe o comando de atribuio no contexto de um algoritmo:


algoritmo "calculaMedia"

13

var
matricula: inteiro
teste, trab, conc, prova: real
sexo: caractere
aprovado: logico
inicio
matricula <- 4422
teste <- 8.5
trab <- 6
prova <- 9
conc <- 1.75
sexo <- "M"
aprovado <- verdadeiro
escreval ("A matrcula ", matricula)
escreval ("A nota de trabalho ", trab)
escreval ("A nota de teste ", teste)
escreval ("A nota de prova ", prova)
escreval ("A nota de conceito ", conc)
escreval ("O sexo ", sexo)
escreval ("A aprovao ", aprovado)
fimalgoritmo

Observe os comando de entrada, sada e atribuio no contexto de um algoritmo:

algoritmo "calculaMedia"
var
matricula: inteiro
teste, trab, conc, prova: real
sexo: caractere
aprovado: logico
inicio
matricula <- 4422
sexo <- "M"
escreva ("Digite a notas de trabalho, teste e prova: ")
leia (trab, teste, prova)
escreva ("Digite a nota de conceito: ")
leia (conc)
escreva ("Digite a situao de aprovao: ")
leia (aprovado)
escreval ("A matrcula ", matricula)
escreval ("A nota de trabalho ", trab)
escreval ("A nota de teste ", teste)
escreval ("A nota de prova ", prova)
escreval ("A nota de conceito ", conc)
escreval ("O sexo ", sexo)
escreval ("A aprovao ", aprovado)
fimalgoritmo

14

4. OPERADORES
4.1. OPERADORES ARITMTICOS
Os operadores aritmticos representam um conjunto de smbolos que apresentam as
operaes bsicas da matemtica, permitindo a execuo de operaes aritmticas entre as
variveis. Os operadores aritmticos so:

OPERADOR

+
*

OPERAO
Adio
Subtrao
Multiplicao

OPERADOR

/
div
mod

OPERAO
Diviso
Diviso inteira
Resto da diviso

Observe o exemplo a seguir, que realiza a leitura de 3 notas e calcula e imprime a


mdia:

algoritmo "calculaMedia"
var
nota1, nota2, nota3: real
inicio
escreva ("Digite a primeira nota: ")
leia (nota1)
escreva ("Digite a segunda nota: ")
leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
escreva ("A mdia ", (nota1 + nota2 + nota3)/3)
fimalgoritmo

Observe o exemplo a seguir, que realiza a leitura de 3 notas e calcula, armazena e


imprime a mdia:

algoritmo "calculaMedia"
var
nota1, nota2, nota3, media: real
inicio
escreva ("Digite a primeira nota: ")

15

leia (nota1)
escreva ("Digite a segunda nota: ")
leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
media <- (nota1 + nota2 + nota3)/3
escreva ("A mdia ", media)
fimalgoritmo

4.2. OPERADORES RELACIONAIS


Utiliza-se os operadores relacionais para realizar comparaes entre dois valores de
mesmo tipo de dado. Os operadores relacionais so:

OPERADOR

=
<>
>

NOME
Igual
Diferente
Maior

OPERADOR

<
>=
<=

NOME
Menor
Maior ou igual
Menor ou igual

O exemplo da utilizao de operadores relacionais ser visto nas estruturas de


seleo.

4.3. OPERADORES LGICOS

Os conectivos (operadores lgicos) permitem a construo de expresses


condicionais compostas. Os operadores lgicos so:

SMBOLO
FUNO

4.3.1. TABELAS VERDADE

E
Conjuno

OU
Disjuno

NO
Negao

16

Tabela verdade o conjunto de todas as possibilidades combinatrias entre os


valores de diversas variveis lgicas, as quais se encontram em apenas duas situaes, e
um conjunto de operadores lgicos.

4.3.1.1. Tabela Verdade do Operador Lgico E

condio 1
V
V
F
F

condio 2
V
F
V
F

(condio 1) E (condio 2)
V
F
F
F

4.3.1.2. Tabela Verdade do Operador Lgico OU


condio 1
V
V
F
F

condio 2
V
F
V
F

(condio 1) OU (condio 2)
V
V
V
F

4.3.1.3. Tabela Verdade do Operador Lgico NO


condio 1
V
F

NO (condio 1)
F
V

Observe os exemplos abaixo:

EXPRESSO
(i >= 10) E (j < 4)
(num < 0) OU (NO (fim))
((n >= 0.0) E (n <= 10.0) OU (i <= 10.0))

VALOR DE
i=4
num = 3
n = 10.5

VALOR DE
j=5
fim = falso
i=4

AVALIAO
F
V
V

17

5. ESTRUTURAS DE CONTROLE
Na criao de algoritmos, utiliza-se os conceitos de bloco lgico, entrada e sada de
dados, variveis, constantes, atribuies, operadores lgicos, relacionais e aritmticos, bem
como comandos que traduzam estes conceitos de forma a representar o conjunto de aes.
Para que esse conjunto de aes se torne vivel, deve existir uma perfeita relao
lgica intrnseca ao modo pelos quais essas aes so executadas, ao modo pelo qual
regido o fluxo de execuo.
Atravs das estruturas bsicas de controle do fluxo de execuo (seleo e
repetio) e da combinao delas, pode-se criar um algoritmo para solucionar qualquer
problema.
Estruturas de controle so instrues especiais permitem controlar a seqncia de
execuo de um algoritmo de acordo com o resultado de testes, em forma de expresses
condicionais, usados por essas instrues.

5.1. ESTRUTURAS DE SELEO


Uma estrutura de seleo permite a escolha de um grupo de aes e estruturas a ser
executado quando determinadas condies, representadas por expresses lgicas, so ou
no satisfeitas.

5.1.1. SELEO SIMPLES


Na seleo simples h uma condio, que uma expresso lgica, que, quando
inspecionada, pode gerar um resultado falso ou verdadeiro.
Se o resultado da condio for verdadeiro, as instrues contidas no comando
ento so executadas, caso contrrio, encerra a estrutura (fimse) sem executar nenhum
comando. Sua sintaxe a seguinte:

se <condio> entao
{instrues}

18

fimse
Observe o exemplo a seguir, com uma estrutura de seleo simples, que se o valor
da varivel idade for igual ou maior do que 18, imprime a mensagem Maior de idade e se
for menor do que 18, no executa nada:

se idade >= 18 entao


escreva (Maior de idade)
fimse
Observe o exemplo a seguir, com a estrutura de seleo simples no contexto de um
algoritmo que realiza a leitura de uma idade e imprime se maior de idade se for igual ou
maior do que 18:

algoritmo "verificaIdade"
var
idade: inteiro
inicio
escreva ("Digite a idade: ")
leia (idade)
se idade >= 18 entao
escreva ("Maior de idade")
fimse
fimalgoritmo
5.1.2. SELEO COMPOSTA
Similar a seleo simples, s que neste tipo de seleo, quando o resultado da
condio for falso, ao invs de encerrar a estrutura, executa as instrues contidas no
comando senao. Sua sintaxe a seguinte:

se <condio> entao
{instrues}
seno
{instrues}
fimse

19

Observe o exemplo a seguir, com uma estrutura de seleo composta, que se o valor
da varivel idade for igual ou maior do que 18, imprime a mensagem Maior de idade e se
for menor do que 18, imprime a mensagem Menor de idade:

se idade >= 18 entao


escreva (Maior de idade)
senao
escreva (Menor de idade)
fimse
Observe o exemplo a seguir, com a estrutura de seleo simples no contexto de um
algoritmo que realiza a leitura de uma idade e imprime se maior de idade se for igual ou
maior do que 18 ou menor de idade se for menor do que 18:

algoritmo "verificaIdade"
var
idade: inteiro
inicio
escreva ("Digite a idade: ")
leia (idade)
se idade >= 18 entao
escreva ("Maior de idade")
senao
escreva ("Menor de idade")
fimse
fimalgoritmo
5.1.2.1. O Comando Entao
Destina-se a receber uma ou mais instrues, que sero executadas caso o resultado
do teste seja verdadeiro.

5.1.2.2. O Comando Senao


Destina-se a receber uma ou mais instrues, que sero executadas caso o resultado
do teste seja falso.

20

5.1.3. SELEO DE MLTIPLA ESCOLHA


Quando a execuo de um algoritmo atinge o incio da estrutura escolha, vo sendo
feitas comparaes entre o contedo da varivel utilizada e os valores listados em cada
comando caso.
Se o contedo da varivel for idntico a algum dos valores dos comandos casos,
sero executadas as instrues correspondentes. Em seguida, passa-se execuo da
instruo seguinte estrutura (aps a palavra fimescolha), se houver alguma.
Se o contedo da varivel no for idntico a qualquer dos valores dos comandos
casos e a parte outrocaso (opcional) tiver sido utilizada, passa-se a execuo das instrues
desta parte, caso contrrio, passa-se diretamente a execuo da instruo aps a estrutura
(aps a palavra fimescolha), se houver alguma. Sua sintaxe a seguinte:

escolha <varivel>
caso lista de valores 1
{ instrues }
caso lista de valores 2
{ instrues }
caso lista de valores 3
{ instrues }
...
caso lista de valores n
{ instrues }
outrocaso
{ instrues }
fimescolha
Observe o exemplo a seguir, com uma estrutura de seleo de mltipla escolha, que
verifica se existe algum comando caso com valor igual a da varivel dia, caso exista, ele
imprime o nome do dia da semana correspondente ao nmero, caso no exista, ele imprime
a mensagem Dia invlido:

escolha dia
caso 1
escreva ("Domingo")
caso 2
escreva ("Segunda-feira")
caso 3

21

escreva ("Tera-feira")
caso 4
escreva ("Quarta-feira")
caso 5
escreva ("Quinta-feira")
caso 6
escreva ("Sexta-feira")
caso 7
escreva ("Sbado")
outrocaso
escreva ("Dia invlido")
fimescolha
Observe o exemplo a seguir, com a estrutura de seleo de mltipla escolha no
contexto de um algoritmo que realiza a leitura de um nmero e imprime o nome do dia da
semana correspondente ao nmero lido ou imprime a mensagem Dia invlido, caso o
nmero esteja fora do intervalo de 1 e 7:

algoritmo "verificaDia"
var
dia: inteiro
inicio
escreva ("Digite o nmero do dia da semana: ")
leia (dia)
escolha dia
caso 1
escreva ("Domingo")
caso 2
escreva ("Segunda-feira")
caso 3
escreva ("Tera-feira")
caso 4
escreva ("Quarta-feira")
caso 5
escreva ("Quinta-feira")
caso 6
escreva ("Sexta-feira")
caso 7
escreva ("Sbado")
outrocaso
escreva ("Dia invlido")
fimescolha
fimalgoritmo

22

5.2. ESTRUTURAS DE REPETIO


Quando se constri um algoritmo para calcular uma mdia bimestral, por exemplo,
deve-se levar em considerao que essa mdia no ser calculada para um aluno apenas,
pois uma escola um universo muito grande.
Para solucionar este tipo de problema s executar o algoritmo todo para cada
aluno, ou seja, se existirem 500 alunos, o algoritmo ser executado 500 vezes. Pode ser
uma soluo simples, mas invivel.
Uma outra forma de resolver esse problema seria executar 500 vezes, somente as
instrues que calculam a mdia bimestral ao invs de executar o algoritmo todo. Para isso,
basta inserir as instrues dentro de uma estrutura de repetio. Existem trs tipos de
estrutura de repetio: para, enquanto e repita.

5.2.1. ESTRUTURA DE REPETIO PARA


A estrutura de repetio para repete a execuo de um bloco de instrues ou de
uma nica instruo um nmero definido de vezes, pois esta estrutura possui limites fixos.
A estrutura para composta por partes, sendo elas: atribuio do valor inicial, teste
para interrupo da repetio e valor do incremento. Sua sintaxe a seguinte:

para <varivel> de vi ate vf passo faca


{
instrues que sero executadas vrias vezes
}
fimpara
Onde varivel ser o ndice da repetio, que determinar que a estrutura de
repetio ter incio e fim, vi ser o valor inicial do ndice, vf ser o valor final do ndice e
passo ser a definio se o ndice ser crescente ou decrescente, no entanto, se for
crescente, no necessrio colocar o passo 1.
Observe o exemplo a seguir, que ir ler as 3 notas e calcular, armazenr e imprime a
mdia de 10 alunos.

23

para i de 1 ate 10 faca


escreva ("Digite a primeira nota: ")
leia (nota1)
escreva ("Digite a segunda nota: ")
leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
media <- (nota1 + nota2 + nota3)/3
escreval ("A mdia ", media)
fimpara
Observe o exemplo a seguir, com a estrutura de repetio para no contexto de um
algoritmo que realiza a leitura das 3 notas e calcula, armazena e imprime a mdia de 10
alunos:

algoritmo "calculaMedia"
var
i: inteiro
nota1, nota2, nota3, media: real
inicio
para i de 1 ate 10 faca
escreva ("Digite a primeira nota: ")
leia (nota1)
escreva ("Digite a segunda nota: ")
leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
media <- (nota1 + nota2 + nota3)/3
escreval ("A mdia ", media)
fimpara
fimalgoritmo
5.2.2. ESTRUTURA DE REPETIO ENQUANTO
Consiste em uma estrutura de controle de repetio que permite executar diversas
vezes um mesmo trecho do algoritmo, verificando sempre, antes de cada execuo se
permitido repetir o mesmo trecho.
Para que essa repetio se realize, utiliza-se a estrutura enquanto, que permite que
um bloco de instrues ou mesmo uma nica instruo seja repetida enquanto uma
determinada condio seja verdadeira.

24

Quando o resultado da condio for falso, a estrutura abandonada. Se j da


primeira vez o resultado for falso, as instrues no sero executadas nenhuma vez. Sua
sintaxe a seguinte:

enquanto <condio> faca


{
instrues que sero executadas vrias vezes
}
fimenquanto
Observe o exemplo a seguir, que ir ler as 3 notas e calcular, armazenr e imprime a
mdia de 10 alunos.

i <- 1
enquanto i <= 10 faca
escreva ("Digite a primeira nota: ")
leia (nota1)
escreva ("Digite a segunda nota: ")
leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
media <- (nota1 + nota2 + nota3)/3
escreval ("A mdia ", media)
i <- i + 1
fimenquanto
Observe o exemplo a seguir, com a estrutura de repetio para no contexto de um
algoritmo que realiza a leitura das 3 notas e calcula, armazena e imprime a mdia de 10
alunos:

algoritmo "calculaMedia"
var
i: inteiro
nota1, nota2, nota3, media: real
inicio
i <- 1
enquanto i <= 10 faca
escreva ("Digite a primeira nota: ")
leia (nota1)

25

escreva ("Digite a segunda nota: ")


leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
media <- (nota1 + nota2 + nota3)/3
escreval ("A mdia ", media)
i <- i + 1
fimenquanto
fimalgoritmo
Afim de assegurar o trmino da repetio necessrio que a avaliao da expresso
condicional torne-se falso. Para isso, alguma instruo da parte repetitiva deve permitir a
alterao do contedo da varivel utilizada na montagem da expresso condicional.
necessrio ainda que o contedo desta mesma varivel seja adequadamente inicializada.
Isto deve ser feito antes de ser atingido o incio da estrutura. Esta parte do algoritmo
chamada de etapa de inicializao da estrutura de controle.

5.2.3. ESTRUTURA DE REPETIO REPITA


Para realizar a repetio com teste condicional no final, utiliza-se a estrutura
repita, que permite que um bloco de instrues ou at mesmo uma nica instruo seja
repetida at que uma determinada condio seja verdadeira.
Se observada a sintaxe desta estrutura, percebe-se que o bloco de instrues ou uma
nica instruo executada pelo menos uma vez, independente da validade da condio.
Isto ocorre, por que o teste condicional feito aps a execuo das instrues. Sua sintaxe
a seguinte:

repita
{
instrues
}
ate <condio>
Observe o exemplo a seguir, que ir ler as 3 notas e calcular, armazenr e imprime a
mdia de 10 alunos.

26

i <- 1
repita
escreva ("Digite a primeira nota: ")
leia (nota1)
escreva ("Digite a segunda nota: ")
leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
media <- (nota1 + nota2 + nota3)/3
escreval ("A mdia ", media)
i <- i + 1
ate i > 10
Observe o exemplo a seguir, com a estrutura de repetio para no contexto de um
algoritmo que realiza a leitura das 3 notas e calcula, armazena e imprime a mdia de 10
alunos:

algoritmo "calculaMedia"
var
i: inteiro
nota1, nota2, nota3, media: real
inicio
i <- 1
repita
escreva ("Digite a primeira nota: ")
leia (nota1)
escreva ("Digite a segunda nota: ")
leia (nota2)
escreva ("Digite a terceira nota: ")
leia (nota3)
media <- (nota1 + nota2 + nota3)/3
escreval ("A mdia ", media)
i <- i + 1
ate i > 10
fimalgoritmo

6. ESTRUTURAS DE DADOS HOMOGNEAS


Uma estrutura de dados Homognea uma estrutura que tem a capacidade de
armazenar vrios dados em uma mesma varivel, sendo que todos esses dados devem ser
de um mesmo tipo primitivo de dados.

27

6.1. VETOR
uma varivel com capacidade para armazenar diversos valores sendo todos eles
de um mesmo tipo de dado. Para ter acesso a cada um dos valores, usamos um ndice que
permite selecionar qual dos valores ser utilizado.

6.1.1. DECLARAO DE UM VETOR


Para se declarar uma varivel como um vetor, deve-se criar um nome, a palavra
reservada vetor, as posies inicial e final, que definiro a quantidade de posies e o tipo
dos valores que sero armazenados no vetor.

var
nome_varivel: vetor [pi..pf] de tipo_dado
Onde nome_varivel o nome do vetor, vetor a declarao de que um vetor, pi
o ndice da primeira posio, pf o ndice da ltima posio e tipo_dado o tipo de
dados de todas as posies do vetor.
Observe o exemplo a seguir, com a declaro de um vetor com 5 posies que iro
armazenar nmeros inteiros:

var
n: vetor [1..5] de inteiro
6.1.2. ACESSANDO UMA POSIO DO VETOR
Para leitura de valores em vetores, deve-se colocar no comando leia o nome da
varivel, seguida da posio do vetor entre colchetes.
Observe o exemplo a seguir:

28

leia(n[1])
leia(n[2])
leia(n[3])
leia(n[4])
leia(n[5])
Para impresso de valores de vetores, deve-se colocar no comando escreva o nome
da varivel, seguida da posio do vetor entre colchetes.
Observe o exemplo a seguir:

escreva (n[1])
escreva (n[2])
escreva (n[3])
escreva (n[4])
escreva (n[5])
Para atribuio de valores em vetores, deve-se colocar o nome da varivel, seguida
da posio do vetor entre colchetes recebendo o valor.
Observe o exemplo a seguir:

n[1] <- 38
n[2] <- 17
n[3] <- 26
n[4] <- 23
n[5] <- 3

Observe o exemplo a seguir, com a utilizao de vetor no contexto de um algoritmo


que realiza a leitura de 5 valores e armazena em um vetor e que imprime todos os valores
do vetor:

algoritmo "utilizacaoVetor"
var
n: vetor [1..5] de inteiro
inicio
escreva ("Digite um valor para a posio 1 do vetor: ")
leia(n[1])
escreva ("Digite um valor para a posio 2 do vetor: ")

29

leia(n[2])
escreva ("Digite um valor para a posio 3 do vetor: ")
leia(n[3])
escreva ("Digite um valor para a posio 4 do vetor: ")
leia(n[4])
escreva ("Digite um valor para a posio 5 do vetor: ")
leia(n[5])
escreval ("O valor da posio 1 ", n[1])
escreval ("O valor da posio 2 ", n[2])
escreval ("O valor da posio 3 ", n[3])
escreval ("O valor da posio 4 ", n[4])
escreval ("O valor da posio 5 ", n[5])
fimalgoritmo
Observe o exemplo a seguir, com a utilizao de vetor no contexto de um algoritmo
que realiza a leitura de 5 valores e armazena em um vetor e que imprime todos os valores
do vetor, utilizando estrutura de repetio:

algoritmo "utilizacaoVetor"
var
n: vetor [1..5] de inteiro
i: inteiro
inicio
para i de 1 ate 5 faca
escreva ("Digite um valor para a posio ", i, " do vetor: ")
leia(n[i])
fimpara
para i de 1 ate 5 faca
escreval ("O valor da posio ", i, " ", n[i])
fimpara
fimalgoritmo
6.2. CADEIA
Como nos algoritmos reais necessrio lidar com a leitura de nomes e endereos de
pessoas, por exemplo, conveniente utilizar algum tipo de dado especfico para
armazenamento de seqncias de caracteres.
possvel, ento, criar dois novos tipos de dados para essa finalidade:

30

cadeia
cadeia[n]
Onde n um nmero que indica quantos caracteres sero armazenados. Observe a
sintaxe a seguir:

var
nome_varivel: cadeia
Onde nome_varivel uma varivel do tipo cadeia de caracteres, com capacidade
para armazenar qualquer quantidade de caracteres que for necessrio. Observe a sintaxe a
seguir:

var
nome_varivel: cadeia[n]
Cria uma varivel do tipo cadeia de caracteres com capacidade para armazenar a
quantidade de caracteres definida por n.
Observe o exemplo a seguir, com a declaro de uma varivel que ir armazenar o
nome de uma pessoa com at 30 caracteres e outra que ir armazenar o endereo com a
quantidade mxima de caractere indefinida:

var
nome: cadeia[30]
endereco: cadeia
6.2.1. LEITURA, ESCRITA E ATRIBUIO DE CADEIAS
Para leitura de valores em cadeias, deve-se colocar no comando leia o nome da
cadeia. Observe o exemplo a seguir:

leia(nome)
leia(endereco)

31

Para impresso de valores de cadeias, deve-se colocar no comando escreva o nome


da cadeia. Observe o exemplo a seguir:

escreva (nome)
escreva (endereco)
Para atribuio de valores em cadeias, deve-se colocar o nome da cadeia recebendo
o valor. Observe o exemplo a seguir:

nome <- Gabriel Duarte


endereco <- Jardim Primavera, DC

Observe o exemplo a seguir, com a utilizao de cadeias no contexto de um


algoritmo que realiza a leitura do nome e endereo de uma pessoa e que imprime esses
valores:

algoritmo "utilizacaoCadeia"
var
nome: cadeia[30]
endereco: cadeia
inicio
escreva ("Digite o nome: ")
leia (nome)
escreva ("Digite o endereo: ")
leia (endereco)
escreval ("O nome ", nome)
escreval ("O endereo ", endereco)
fimalgoritmo
6.3. MATRIZ
Assim como os vetores, uma varivel com capacidade para armazenar diversos
valores sendo todos eles de um mesmo tipo de dado, mas nas matrizes para cada posio
existe uma nova diviso em novas posies.

32

necessrio declarar a quantidade de posies que represento as linhas da matriz


e a quantidade de posies que representaro a quantidade de colunas.
Para ter acesso a cada um dos valores, usam-se dois ndices, um que permite
selecionar a linha da matriz e outro que permite acessar valores daquela linha.

6.3.1. DECLARAO DE UMA MATRIZ


Para se declarar uma varivel como uma matriz, deve-se criar um nome, a palavra
reservada vetor, as posies inicial e final da linha, vrgula, as posies inicial e final da
coluna e o tipo dos valores que sero armazenados na matriz.

var
nome_varivel: vetor [pi..pf, pi..pf] de tipo_dado
Onde nome_varivel o nome da matriz, vetor a declarao de que um vetor
que ser uma matriz, pi o ndice da primeira posio, pf o ndice da ltima posio da
linha e da coluna e tipo_dado o tipo de dados de todas as posies da matriz.
Observe o exemplo a seguir, com a declaro de uma matriz 3x2, ou seja, uma
matriz com 3 linhas e 2 colunas, tendo no total 6 posies que iro armazenar nmeros
inteiros:

var
n: vetor [1..3, 1..2] de inteiro
6.3.2. ACESSANDO UMA POSIO DA MATRIZ
Para leitura de valores em matrizes, deve-se colocar no comando leia o nome da
varivel, seguida da posio da linha e da coluna separada por vrgula e entre colchetes.
Observe o exemplo a seguir:

leia(n[1, 1])
leia(n[1, 2])

33

leia(n[2, 1])
leia(n[2, 2])
leia(n[3, 1])
leia(n[3, 2])
Para impresso de valores de matrizes, deve-se colocar no comando escreva o nome
da varivel, seguida da posio da linha e da coluna separada por vrgula e entre colchetes.
Observe o exemplo a seguir:

escreva (n[1, 1])


escreva (n[1, 2])
escreva (n[2, 1])
escreva (n[2, 2])
escreva (n[3, 1])
escreva (n[3, 2])
Para atribuio de valores em matrizes, deve-se colocar o nome da varivel, seguida
da posio da linha e da coluna separada por vrgula e entre colchetes recebendo o valor.
Observe o exemplo a seguir:

n[1, 1] <- 38
n[1, 2] <- 17
n[2, 1] <- 26
n[2, 2] <- 23
n[3, 1] <- 3
n[3, 2] <- 42

Observe o exemplo a seguir, com a utilizao de matriz no contexto de um


algoritmo que realiza a leitura de valores e armazena em uma matriz 3x2 e que imprime
todos os valores da matriz:

algoritmo "utilizacaoMatriz"
var
n: vetor[1..3, 1..2] de inteiro
inicio
escreva ("Digite o valor para a posio 1,1 da matriz: ")
leia (n[1, 1])

34

escreva ("Digite o valor para a posio 1,2 da matriz: ")


leia (n[1, 2])
escreva ("Digite o valor para a posio 2,1 da matriz: ")
leia (n[2, 1])
escreva ("Digite o valor para a posio 2,2 da matriz: ")
leia (n[2, 2])
escreva ("Digite o valor para a posio 3,1 da matriz: ")
leia (n[3, 1])
escreva ("Digite o valor para a posio 3,2 da matriz: ")
leia (n[3, 2])
escreval ("O valor da posio 1,1 ", n[1, 1])
escreval ("O valor da posio 1,2 ", n[1, 2])
escreval ("O valor da posio 2,1 ", n[2, 1])
escreval ("O valor da posio 2,2 ", n[2, 2])
escreval ("O valor da posio 3,1 ", n[3, 1])
escreval ("O valor da posio 3,2 ", n[3, 2])
fimalgoritmo
Observe o exemplo a seguir, com a utilizao de matriz no contexto de um
algoritmo que realiza a leitura de valores e armazena em uma matriz 3x2 e que imprime
todos os valores da matriz, utilizando estrutura de repetio:

algoritmo "utilizacaoMatriz"
var
n: vetor[1..3, 1..2] de inteiro
i, j: inteiro
inicio
para i de 1 ate 3 faca
para j de 1 ate 2 faca
escreva ("Digite o valor para a posio ", i, ",", j, " da matriz: ")
leia (n[i, j])
fimpara
fimpara
para i de 1 ate 3 faca
para j de 1 ate 2 faca
escreval ("O valor da posio ", i, ",", j, " ", n[i, j])
fimpara
fimpara
fimalgoritmo

35

7. ESTRUTURAS DE DADOS HETEROGNEAS


Uma estrutura de dados Heterognea uma estrutura que tem a capacidade de
armazenar vrios dados em uma mesma varivel, onde esses dados podem ser de tipos
primitivos de dados diferentes.

7.1. REGISTROS
comum a necessidade, nos algoritmos, de representar dados sobre pessoas ou
empresas, por exemplo. Observamos que estes dados so de naturezas distintas, tais como
cadeia[30] para o nome de uma pessoa e inteiro para o nmero de dependentes de uma
pessoa.
Para isto, cria-se uma estrutura de dados heterognea, isto , uma estrutura formada
por dados de diferentes tipos. Esta estrutura chamada de registro e formada por campos,
onde cada campo corresponde a um tipo de dados. Para criar uma varivel com tipos de
dados registro conveniente criarmos primeiramente um novo tipo de dado para servir de
modelo para a criao de variveis. Em seguida, criamos as variveis necessrias ao
funcionamento do algoritmo.
Com este novo tipo de dados usa-se a palavra tipo para a criao de novos tipos de
dados e a palavra registro para indicar que um tipo de dados um registro.

7.1.1. DECLARAO DE UM REGISTRO


tipo
cadastro = registro
cpf: inteiro
nome: cadeia[30]
email: cadeia[25]
telefone: inteiro
fimregistro
var
pessoa: cadastro

36

Onde tipo, define a criao de um novo tipo de dados, cadastro, o nome do novo
tipo de dados, registro, indica que este tipo de dados um registro, cpf, nome, email e
telefone, so os nomes dos campos, inteiro e cadeia, so os tipos de dados dos campos,
fimregistro, indica o fim da declarao e pessoa uma varivel do tipo registro e formada
por quatro campos, que so aqueles definidos na declarao de cadastro.
Observao: tipos de dados no tem endereo de memria e a varivel tem
endereo de memria.
A manipulao de entrada e sada para variveis de tipo registro somente pode ser
feita por campo, isto , no se pode ler ou escrever os dados de um registro de uma s vez.
Usaremos um ponto para permitir o acesso a cada campo de um registro. Observe os
exemplos abaixo:

7.1.2. ACESSANDO UM REGISTRO

leia (pessoa.cpf)
leia (pessoa.nome)
escreva (pessoa.telefone)
Combinao de registros

tipo
tendereco = registro
rua: cadeia[20]
numero: inteiro
complemento: cadeia[30]
bairro: cadeia[25]
fim-registro
cadastro = registro
cpf: inteiro
nome: cadeia[30]
e_mail: cadeia[50]
telefone: inteiro
endereco: tendereco
fim-registro
var
pessoa: cadastro

37

Como atribuir o valor 123 para nmero do endereo do registro cadastro?

cadastro.endereco.numero <- 123


Para criar um vetor ou uma tabela de registros:

var
pessoa: vetor [1 .. 100] de cadastro
Como armazenar 987 no campo nmero do endereo do 17 registro de pessoa?

pessoa[17].endereco.numero <- 987


Construir um algoritmo para cadastrar em um vetor a matrcula, nome e endereo
de 100 alunos de uma escola, utilizando registro.

algoritmo cadastramento
tipo
cadastro = registro
matricula: inteiro
nome: cadeia[30]
endereco: cadeia[35]
fim-registro
var
aluno: vetor [1 .. 100] de cadastro
i: inteiro
incio
para i de 1 ate 100 faca
escreva (digite a matrcula)
leia (aluno[i].matricula)
escreva (digite o nome)
leia (aluno[i].nome)
escreva (digite o endereo)
leia (aluno[i].endereco)
fimpara
fimalgoritmo

38

8. REFERNCIAS BIBLIOGRFICAS
FORBELLONE & EBERSPCHER, Andr Luiz Villar & Henri Frederico. Lgica de
Programao - A Construo de Algoritmos e Estrutura de Dados. So Paulo: Makron
Books, 1996.
GUIMARES & LAGES, ngelo de Moura & Newton Alberto de Castilho. Algoritmos e
Estruturas de Dados. Rio de Janeiro: LTC, 1994.
SALVETTI & BARBOSA, Dirceu Douglas & Lisbete Madsen. Algoritmos. So Paulo:
Pearson Makron Books, 1998.
SZWARCFITER & MARKENZON, Jayme Luiz & Lilian. Estruturas de Dados e seus
Algoritmos. Rio de Janeiro: LTC, 1994.