Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Capítulo I Lógica Binária 
Neste capítulo são abordados os conceitos básicos de lógica 
binária, a definição de proposição lógica, operadores e 
conectivos lógicos básicos usados em programação, tabelas 
verdade e avaliação de expressões lógicas. 
I. 1 Expressões Lógicas 
Chama-se expressão lógica toda sentença que pode ser 
avaliada, computada ou “resolvida”, e que tenha como 
resultado um valor lógico. Avaliar uma expressão lógica é 
uma função básica porém não menos importante. É nessa 
capacidade básica que todo aparato computacional está 
baseado. As expressões lógicas são utilizadas para fornecer à 
máquina as diretrizes sobre quais instruções “comandos” 
devem ser executadas em um dado momento. Sem a 
capacidade de avaliação de expressões lógicas, os programas 
estariam restritos a uma seqüência linear de operações. Não 
seria, portanto possível implementar algoritmos com diretrizes 
de desvio/seleção, tampouco seria possível construir estruturas 
de repetição. 
 2 
I. 1.1 Valores Lógicos 
Em se tratando de lógica binária tem-se sempre apenas dois 
valores possíveis VERDADEIRO ou FALSO. Nenhum outro 
valor pode ser considerado, não existe talvez, a dúvida e a 
incerteza não podem ser considerados como valores válidos. 
I. 1.2 Relações 
Uma relação é expressa pôr um operador relacional, e 
representa uma comparação entre dois valores de mesmo tipo. 
Os operadores relacionais estão presentes na matemática e são 
velhos conhecidos. 
• = igual a 
• ≠ diferente de 
• > maior que 
• < menor que 
• ≤ menor ou igual a 
• ≥ maior ou igual a 
O resultado de uma relação será sempre um valor lógico 
verdadeiro ou falso 
Exemplo 1 
a) 5 = 5 → Verdadeiro 
b) 6 > 5 → Verdadeiro 
c) X < 7 → ? 
(quanto vale X?) 
d) 6 ≤ 5 → Falso 
e) 4 ≠ 3 → Verdadeiro 
 3
Exemplo 2 
Para X = 5, Y = 6 e Z = 4 podemos afirmar que: 
a) X ≤ Y é o mesmo que 5 ≤ 6 → Verdadeiro 
b) X + Z ≠ Y é o mesmo que 
 5 + 4 ≠ 6 → 9 ≠ 6 → Verdadeiro 
c) Z ≥ X é o mesmo que 4 ≥ 5 → Falso 
I. 1.3 Proposição Lógica Simples 
Uma proposição lógica simples é toda sentença simples que 
pode ser avaliada resultando em um valor lógico válido 
(Verdadeiro ou Falso). Em programação, uma proposição 
lógica simples é geralmente expressa pôr uma relação, 
podendo também ser expressa pelo próprio valor lógico ou por 
uma variável que armazena um valor lógico. Os exemplos de 
relações expressos acima são também exemplos de 
proposições lógicas simples. 
Exemplo 1 
Sejam X = 2, Y = 5, Z = -4, Flag = Falso e Pronto = 
Verdadeiro, as expressões abaixo são proposições lógicas 
simples: 
a) X < 3 → Valor lógico Verdadeiro; 
b) X – Z > Y → Valor lógico Verdadeiro; 
c) Flag ≠ Verdadeiro → Valor lógico Verdadeiro; 
d) Flag = Falso → Valor lógico Falso; 
e) Flag → Valor lógico Falso; 
 4 
f) Pronto = Flag → Valor lógico Falso; 
g) Pronto = Verdadeiro → Valor lógico Verdadeiro; 
h) não Pronto → Valor lógico Falso; 
I. 1.4 Proposição Lógica Composta 
Uma proposição lógica composta é uma sentença ou 
expressão composta por duas ou mais proposições lógicas 
simples, unidas por operadores lógicos. 
Para avaliar o valor de uma proposição lógica composta, é 
necessário primeiro avaliar o valor lógico de cada proposição 
simples, depois então efetuar as operações definidas pelos 
operadores lógicos. 
Ao avaliar uma expressão lógica composta, faz-se 
necessário observar a ordem de precedência dos operadores, 
exatamente como ocorre com expressões matemáticas que 
envolvem operações de adição, subtração, multiplicação, 
divisão, potências. 
Entretanto, assim como nas expressões matemáticas, é 
possível lançar mão de parênteses para indicar a necessidade 
de efetuar uma operação de menor precedência antes de outra 
de maior precedência. 
I. 1.5 Operadores Lógicos 
Nem sempre é possível expressar uma determinada 
situação através de uma proposição lógica simples apenas, 
nesses casos é preciso uma expressão lógica composta de duas 
ou mais proposições simples. A álgebra da lógica binária 
define operadores para a junção de proposições simples em 
 5
expressões de modo a formar proposições lógicas compostas. 
Para os propósitos desse livro, os três operadores abaixo são 
suficientes. 
• e − conjunção 
• ou − disjunção 
• não − negação 
I. 1.5.1 Conjunção – e – ∧ 
A conjunção de duas proposições lógicas simples resulta 
numa proposição lógica composta cujo valor lógico só será 
verdadeiro quando ambas as proposições simples possuírem 
valor lógico verdadeiro. 
Dadas duas proposições lógicas p e q, a conjunção pode ser 
expressa pôr: p e q ou pôr: p ∧ q 
I. 1.5.1.1 Tabela Verdade 
A tabela verdade de um operador, expressa todas os 
resultados possíveis da expressão, tomando pôr base todas as 
combinações dos valores individuais de cada proposição que 
compõe a expressão. 
p q p ∧ q 
V V V 
F V F 
V F F 
F F F 
Tabela 1 - Tabela verdade operador lógico "e" 
 6 
I. 1.5.2 Disjunção – ou – ∨ 
A Disjunção de duas proposições lógicas simples resulta 
numa proposição lógica composta cujo valor lógico será 
verdadeiro sempre que pelo menos uma das proposições 
simples possuírem valor lógico verdadeiro. 
Dadas duas proposições lógicas p e q, a disjunção é 
expressa pôr: p ou q ou pôr: p ∨ q 
I. 1.5.2.1 Tabela Verdade 
p q p ∨ q
V V V
F V V
V F V
F F F
Tabela 2 - Tabela verdade operador lógico "ou" 
 
I. 1.5.3 Negação – não – ~ 
A negação de uma proposição lógica resulta na inversão do 
seu valor lógico, ou seja, a negação do valor lógico 
verdadeiro resulta em falso e vice versa. 
I. 1.5.3.1 Tabela Verdade 
p ~p q ~q
V F V F
F V F V
Tabela 3 - Tabela verdade operador lógico "não" 
 7
I. 1.5.4 Ordem de Prioridade 
Os operadores lógicos podem ser associados de modo a 
formar expressões que representam proposições lógicas 
complexas. 
Da mesma forma que os operadores matemáticos de adição, 
subtração, multiplicação, divisão e potenciação, os operadores 
lógicos também possuem uma ordem de precedência definida. 
Tal como na matemática, para alterar a ordem de avaliação do 
resultado, é necessário fazer uso de parênteses. 
 
Operadores em ordem de precedência
1o negação – não – ∼ 
2o conjunção – e – ∧ 
3o disjunção – ou - ∨ 
Tabela 4 - Ordem de precedência dos operadores lógicos 
Exemplo 1 
Sendo p e q proposições lógicas simples, montar a 
tabela verdade para as expressões: 
a) não p e q; 
p q ~p ~p ∧ q
V V F F 
F V V V 
V F F F 
F F V F 
 8 
b) não (p e q) 
p q (p ∧ q) ~( p ∧ q)
V V V F 
F V F V 
V F F V 
F F F V 
Tabela 5 - Tabela verdade das expressões lógicas a)- não p e q b)- não ( 
p e q ) 
Exemplo 2 
Dados X, Y, Z, Nome, Logic cujos valores são 
respectivamente 3, 6, 2, Maria e Verdadeiro, Observe a 
forma de avaliação e o resultado de cada uma das expressões 
abaixo: 
a) Y-X > Z 
(substituir as letras pelos seus respectivos valores) 
6 - 3 > 2 
(efetuar as operações matemáticas) 
3 > 2 → 
(Verificar o valor lógico) 
Verdadeiro 
b) Logic 
(fazer a substituição e verificar o valor lógico ) 
 Verdadeiro 
 
 9
c) Nome = Maria e Logic ≠ Verdadeiro 
(fazer as substituições) 
Maria = Maria e Verdadeiro ≠ Verdadeiro 
(Verificar o valor lógico) 
 Verdadeiro e Falso → Falso 
 
d) X ≤ Y e não logic 
(fazer as substituições) 
3 ≤ 6 e não Verdadeiro 
(Verificar o valor lógico) 
Verdadeiro e Falso → Falso 
 
e) não ( Z ≥ 2 e Nome = João) 
(fazer as substituições) 
não ( 2 ≥ 2 e Maria = João) 
(Verificar o valor lógico, operador lógico e ) 
não ( Verdadeiro e Falso) 
(Verificar o valor lógico, operador lógico não) 
não Falso → Verdadeiro 
 
f) Z – Y + X≤ 0 ou Z * Y ≥ X * 10 
(fazer as substituições) 
2 – 6 + 3 ≤ 0 ou 2 * 6 ≥ 3 * 10 
 10
(efetuar as operações matemáticas) 
 -1 ≤ 0 ou 12 ≥ 30 
(Verificar o valor lógico, operador lógico ou ) 
 Verdadeiro ou Falso → Verdadeiro 
 
g) ~Logic 
(fazer a substituição do identificador pelo seu valor) 
 ~ Verdadeiro 
(verificar o valor lógico, operador lógico não ) 
 não Verdadeiro → Falso 
 
h) Logic ≠ Verdadeiro 
(Fazer a substituição) 
Verdadeiro ≠ Verdadeiro 
(verificar o valor lógico) 
 Falso 
 
i) X ≥ 3 
(substituir o valor de x) 
3 ≥ 3 
(verificar o valor lógico) 
Verdadeiro 
 
 11
j) X * Z – Y > 0 e não ( Logic ou (Y + 2 ) ÷ 4 = X ) 
(Fazer a substituição) 
3 * 2 – 6 > 0 e não ( Verdadeiro ou ( 6 + 2 ) ÷ 4 = 3 ) 
(efetuar as operações matemáticas segundo a ordem de precedência) 
6 – 6 > 0 e não ( Verdadeiro ou 8 ÷ 4 = 3 ) 
0 > 0 e não ( Verdadeiro ou 2 = 3 ) 
(efetuar as operações lógicas segundo a ordem de precedência) 
0 > 0 e não ( Verdadeiro ou Falso ) 
Falso e não Verdadeiro 
(Verificar o valor lógico da proposição) 
Falso e Falso → Falso 
 
k) Nome = Pedro ou Nome = Maria 
(substituir) 
Maria = Pedro ou Maria = Maria 
(verificar os valores lógicos das proposições simples envolvidas) 
 Falso ou Verdadeiro 
(efetuar a operação lógica e obter o valor da expressão) 
 Verdadeiro 
Exemplo 3 
Dadas as expressões abaixo, montar a respectiva tabela 
verdade. 
 12
a) p e (q ou r) 
p q r (q ou r) p e (q ou r)
V V V V V 
F V V V F 
V F V V V 
F F V V F 
V V F V V 
F V F V F 
V F F F F 
F F F F F 
Tabela 6 - Tabela verdade da expressão lógica - p e (q ou r) 
b) ~r ∨ ~( ~p ∧ s) 
r p s ~r ~p (~p ∧ s) ~(~p ∧ s) ~r ∨ ~(~p ∧ s) 
V V V F F F V V 
F V V V F F V V 
V F V F V V F F 
F F V V V V F V 
V V F F F F V V 
F V F V F F V V 
V F F F V F V V 
F F F V V F V V 
Tabela 7 - Tabela verdade da expressão lógica - ~ r ∨ ~ (~p ∧ s) 
 13
I. Exercícios 
1) Dados X = 2, A = 4, B = 7, C = 2 , D = 9 e Log = Falso. 
Determine os valores lógicos das expressões abaixo; V = 
Verdadeiro, F = Falso. 
a) ~X ≤ 2 ( ) 
b) ( X < C ) ∧ ~ Log ( ) 
c) ( A mod 2 = C ) ( ) 
d) ( D mod 2 ≠ B mod 2) ( ) 
e) ( B + C ≥ D ) ∨ ( A – X > 2) ( ) 
f) A>B ∨ ~( C > B ) ( ) 
g) ~( D >5 ) ∨ ( C ≤ D-B) ( ) 
h) ( B div 2 ≠ D div 2 ) ( ) 
i) (A div 2 = C) ( ) 
j) (D mod A) é par ( ) 
Obs: A operação mod tem como resultado o resto da divisão 
entre dois números inteiros, por exemplo, 5 ÷ 2 é igual a 2 e 
sobra resto 1, portanto 5 mod 2 = 1. 
Obs: A operação div tem como resultado o quociente da 
divisão entre dois números inteiros, por exemplo 11 ÷ 3 é 
igual a 3 e sobra 2, portanto 11 div 3 = 3 e 11 mod 3 = 2. 
 14
2) Dadas as proposições lógicas p, q, r, s, montar a tabela 
verdade para cada uma das expressões abaixo. 
a) p ∨ q ∧ s 
b) p ∨ ~(r ∨ q) 
c) ~p ∧ ~( r ∨ ~s) 
d) ( r ∧ q ) ∨ ~p 
3) Considere as seguintes informações João é pai de Maria, 
Maria é casada com Pedro que é pai de Joaquim, Luiz é 
primo de Joaquim e irmão de Chiquinha que é neta de 
Josefa mulher de João. Discuta as seguintes afirmações. 
a) Chiquinha é sobrinha de Pedro 
b) João é parente de Pedro. 
4) Se for segunda-feira, não for feriado e as condições 
climáticas forem favoráveis então vou trabalhar, senão 
ficarei em casa e dormirei até mais tarde. E aí ? vou ou não 
trabalhar amanhã ? 
5) Um distinto ermitão possui dois animais de estimação, 
uma onça e uma cabra. De certa vez estava ele a beira do 
rio com seus dois animais de estimação e mais um saco de 
milho. Ele necessita atravessar o rio, entretanto o bote é 
muito pequeno para levar tudo de uma vez. Ajude o amigo 
ermitão nessa tão árdua tarefa. Observe que se a cabra 
ficar sozinha junto do milho, ela o comerá. Da mesma 
 15
forma, se a onça ficar sozinha com a cabra, a segunda será 
a refeição da primeira. 
6) Num reino distante, no tempo e no espaço, existia um 
sábio. O rei sentindo-se ameaçado pela sabedoria do 
homem resolveu provar que o mesmo não passava de um 
charlatão e impôs o seguinte teste. O sábio foi colocado 
numa sala com duas portas apenas, uma delas era a saída 
para a liberdade enquanto que a outra era a porta de 
entrada para o recinto dos leões, que por ordem do rei não 
eram alimentados a vários dias. Em cada porta o rei 
colocou um guarda, ordenando a um deles para apenas 
dizer a mais pura verdade e ao outro para mentir e mentir. 
Ao sábio foi dada a oportunidade de efetuar uma única 
pergunta a um dos dois guardas. O sábio sobreviveu ao 
teste e recebeu seu prêmio tornando-se rei. Como ele 
conseguiu tal proeza ? 
 16
Capítulo II Definições 
Neste capítulo são apresentadas algumas definições e a 
simbologia básica necessária para o desenvolvimento dos 
próximos capítulos. Leia cada definição com muita atenção. 
Antes de passar aos próximos capítulos, será interessante 
também que você providencie uma régua/gabarito para a 
construção de fluxogramas. 
II. 1 Problema 
No transcorrer deste livro, um problema é considerado 
como sendo uma situação em que se tem um ponto de partida 
que pode ou não possuir valores iniciais preestabelecidos, e 
um ponto considerado como fim “solução”, o qual pode 
apresentar um, vários ou nenhum resultado específico 
II. 2 Classe de Problemas 
Uma classe de problemas pode ser entendida como as 
várias situações que se resumem num mesmo problema, por 
exemplo, encontrar a solução das seguintes equações: 
a) 3x2 – 4x + 2 = 0 b) x2 –3 = 0 
 17
c) – 2x2 + 3x = 0 d) 4x2 + x –1 = 0 
Estas são na verdade versões diferentes do mesmo 
problema “encontrar as raízes de uma equação do 2o grau”. 
Assim um problema pode ser visto como uma situação 
exemplo de uma classe de problemas. Encontrar a solução de 
um problema em específico pode ser útil, mas muito mais útil 
é encontrar um mecanismo de resolução que nos permita 
solucionar vários ou até mesmo todos os problemas 
pertencentes a uma mesma classe. Um exemplo relacionado às 
equações do 2o é a famosa fórmula de Baskaha1 
 
 
II. 3 Conceito de Valor Literal 
Um literal é um valor posto conhecido e imutável, expresso 
junto ao algoritmo. Pôr exemplo, ao expressarmos B = 
3,1415 x R2, tem-se que B e R são variáveis, enquanto que 
3,1415 e 2 são valores literais. 
Os valores literais são previamente conhecidos e não 
mudam com o desenvolver da solução do problema. 
II. 4 Conceito de Variável 
Na matemática, muitas vezes usa-se letras para representar 
valores, sejam eles conhecidos ou não. Pôr exemplo na 
expressão 2X + 4 = 5, a letra X representa o valor 0,5 que é a 
solução da expressão. 
 
1 Em homenagem a .........matemático que descobriu a fórmula. 
a
cabbx
.2
..42 −±−=
 18
Em termos de programação, variáveis tem o mesmo 
propósito matemático de representar um valor. Este poderá ser 
um dado numérico, um valor lógico (verdadeiro/falso) uma 
letra ou mesmo um texto. 
Para que se possa armazenar uma informação na memória 
da máquina, é necessário que se tenha reservado um espaço 
para tal. Essa reserva de espaço é feita através da declaração 
de variáveis. A declaração de uma variável se dá pela 
definição de um nome e um tipo associado. O espaço 
efetivamente reservado irá variar de acordo com o tipo da 
informação que será representada pela variável. Esse assunto 
será abordado em mais detalhes nos próximos capítulos. 
II. 5 Algoritmo 
Um algoritmo é um método ( uma seqüência de operações ) 
para a resolução de um determinado problema, seja elematemático ou não. O algoritmo representa o modo como se 
processa a solução do problema. Para ser útil o algoritmo deve 
ser passível de ser aplicado todas as vezes que surgir um 
problema semelhante, mesmo que esse problema não envolva 
os mesmos valores do problema anterior, ou seja, um 
algoritmo expressa as operações e a seqüência de execução 
das mesmas, ele trata de uma classe de problemas semelhantes 
e não de um caso em particular. 
Existem várias formas de expressar um algoritmo, com este 
livro você será levado a trabalhar com a linguagem natural, os 
FLUXOGRAMAS e uma pseudo-linguagem de programação 
conhecida como PORTGUÊS ESTRUTURADO. 
 19
II. 6 Programa 
Muitos problemas, dada a sua complexidade, não são 
passíveis de serem solucionados a partir de um único 
algoritmo. Nesses casos, fazemos uso de um programa. 
Chama-se programa, um conjunto de um ou mais 
algoritmos, articulados de forma a proverem solução para uma 
ou mais classes de problemas semelhantes. 
II. 7 Linguagem Natural 
É a linguagem que costumamos usar em nosso dia a dia, os 
algoritmos escritos dessa forma parecem-se com o modo de 
fazer de uma receita de bolo, ou seja, é uma descrição 
seqüencial, passo a passo, do que deve ser feito para resolver o 
problema. 
Seja por exemplo, o ato de trocar uma lâmpada do tipo 
incandescente supostamente queimada. 
1. Acionar o interruptor, se a luz acender não precisa 
trocar senão vai para o passo dois. 
2. Retirar a lâmpada do soquete e verificar as 
condições da mesma, se concluir que o filamento 
está rompido então substitui-la por uma nova senão 
vai para o passo 5 
3. Acionar novamente o interruptor. Se a lâmpada 
acender, informar ao requisitante que o problema foi 
solucionado, senão executar o passo 4 
4. Verificar a existência de energia elétrica na rede. Se 
positivo, informar o requisitante que deve haver 
algum outro problema, senão informar que o serviço 
 20
foi realizado mas que não foi possível testar dada a 
falta de energia. 
5. Informar ao requisitante que o problema é outro pois 
a lâmpada não está queimada. 
II. 8 Fluxograma 
Um fluxograma é a representação gráfica de um algoritmo, 
através de simbologia própria. É uma das ferramentas 
utilizadas para representar uma construção algorítmica que 
expressa a resolução de um problema ou classe de problemas. 
Atualmente muitos autores afirmam que o fluxograma é uma 
ferramenta ultrapassada, mas pessoalmente ainda não conheço 
ferramenta mais indicada para iniciantes em programação 
estruturada. 
II. 8.1 Simbologia para Fluxogramas 
A tabela abaixo apresenta os símbolos adotados neste livro 
para a representação de algoritmos através de fluxogramas. 
Saber identificar o significado de cada símbolo é o primeiro 
passo para tirar proveito dessa ferramenta. 
 _ O símbolo de terminação marca o 
início e o fim de um algoritmo. É 
importante frisar que deve existir apenas 
um início e um fim em cada algoritmo. 
Terminador 
 21
 _ Este símbolo é utilizado para indicar a 
necessidade de entrada de dados pelo 
teclado, o computador deve esperar que o 
usuário digite a informação necessária e 
depois pressione a tecla de entrada. 
 _ O símbolo de fita magnética é utilizado 
para indicar o ato de ler ou gravar uma 
informação em um dispositivo de fita 
magnética. 
Fluxo de dados _ Uma seta indica o sentido do fluxo de 
dados e a seqüência de execução das 
operações que formam o algoritmo. 
 _ Usa-se este símbolo para indicar a 
leitura/gravação de informações em um 
disco rígido. 
 _ Este símbolo representa o monitor de 
vídeo e é usado para indicar a 
apresentação de uma 
mensagem/informação ao usuário. 
Fim de Estrutura _ O conector é utilizado para marcar o 
fim de um estrutura de seleção e/ou 
controle de repetição. 
 _ O símbolo de processo é utilizado para 
indicar a execução de uma ou mais 
operações (processamento de dados) que 
não envolvem entrada e saída de dados. 
Entrada via 
Teclado 
Fita 
Magnética 
 HD 
Saída no 
Video 
 
Processo 
 22
 _ Este símbolo indica a impressão de um 
relatório e/ou conjunto de mensagens e 
informações. 
 _ O símbolo de decisão marca um ponto 
onde é necessário avaliar uma 
determinada condição para então decidir 
pôr um entre dois caminhos a seguir na 
execução do algoritmo. Este símbolo é 
essencial para a construção de estruturas 
de seleção e controle de repetição. 
Tabela 8 - Tabela de símbolos básicos para o desenvolvimento de 
fluxogramas 
II. 9 Português Estruturado 
O PORTUGUÊS ESTRUTURADO é uma pseudo 
linguagem de programação estruturada, seu está diretamente 
ligado ao fato de por não ser uma linguagem de programação 
verdadeira, sua sintaxe pode ser menos rígida e mais 
adaptável. Um algoritmo expresso em português estruturado 
pode facilmente ser implementado em qualquer linguagem de 
programação. 
Como toda linguagem de programação, o Português 
Estruturado consiste de um conjunto de palavras e de um 
conjunto de regras que nos permitem expressar construções 
algorítmicas de modo não ambíguo. Para cada construção 
expressa num fluxograma, existe uma representação expressa 
em Português Estruturado, essas construções serão abordadas 
nos próximos capítulos. 
Saída 
Impressa
Decisã
 23
II. Exercícios 
1) Descreva detalhadamente, passo a passo, como você faz 
para escovar os seus dentes. 
2) Descreva o ato de apontar um lápis. 
3) Descreva como proceder para encontrar as raízes de uma 
equação do segundo grau, utilizando a fórmula 
 
4) Descreva como proceder para calcular a média final de um 
aluno do seu curso. 
5) Descreva como proceder para saber se um determinado 
número é ou não primo. 
6) Descreva como proceder para efetuar uma pesquisa por 
determinado assunto em um site de busca da internet. 
7) Descreva como você faz para escrever os números pares 
menores que 50. 
8) Descreva uma tática para vencer no conhecido jogo da 
velha. 
a
cabbx ⋅
⋅⋅−±−=
2
42
 24
Capítulo III Construindo 
Algoritmos 
Neste capítulo são discutidos os pontos mais críticos na arte 
da construção de algoritmos. É imprescindível que você não 
passe para o próximo capítulo sem antes ter certeza de que 
compreendeu e assimilou os tópicos abordados a seguir. 
III. 1 Passos essenciais 
Para que ser capaz de escrever um algoritmo para uma 
determinada classe de problemas é necessário que primeiro 
saber resolver problemas pertencentes a tal classe. Não é 
possível escrever um algoritmo que represente a seqüência de 
passos necessários à solução de um ou mais problemas 
semelhantes, sem antes ter o domínio da solução. Os passos 
abaixo são essenciais para a resolução de um problema. 
9 Ler e entender o enunciado: Antes de partir para a 
resolução, deve-se ter certeza absoluta de que o problema 
foi compreendido, você sabe exatamente qual é o ponto de 
partida e qual deve ser o ponto de chegada “a solução 
esperada”. Esse é o passo mais importante, portanto não se 
 25
apresse e detenha-se um pouco mais na leitura e 
compreensão do enunciado. 
 
9 Especificação das Entradas, e Saídas: A solução de um 
problema/classe de problemas, passa necessariamente, 
primeiro pela especificação das entradas, essas podem 
apresentar-se na forma de valores conhecidos ou não. Se 
todos valores de entrada são conhecidos, então temos um 
“problema”. por outro lado, se alguns valores iniciais não 
são conhecidos a priori “serão fornecidos posteriormente 
pelo usuário”, então temos uma classe de problema. A 
especificação dos valores iniciais “entradas” é uma questão 
de leitura, interpretação e compreensão do enunciado e do 
problema em si. 
Após a especificação das entradas, é necessário especificar 
os resultados esperados. O que se espera comoresultado 
após a resolução do problema. 
Uma forma simples de encontrar as entradas/saídas é 
responder as perguntas: O que eu tenho? (entradas e valores 
imutáveis); O que eu quero? (resultados esperados/saídas); 
 
9 O Processamento: Antes da construção do algoritmo sob a 
forma de fluxograma, é necessário raciocinar sobre o 
problema e a melhor forma de resolução do mesmo. Você 
só poderá partir para a diagramação do algoritmo após ter 
claro em sua mente, qual é o método de resolução a ser 
empregado e qual a seqüência de operações envolvidas. Na 
maioria das vezes é indicado descrever a seqüência de 
ações antes de partir para a diagramação. 
 26
Aqui a questão é responder a seguinte pergunta: Como 
fazer para transformar o que tenho no que quero? 
 
9 A Construção do Algoritmo: Nesse ponto você já deve 
saber exatamente o que deve ser feito para que o problema 
seja solucionado, caso contrário deverá retornar aos passos 
anteriores. Não siga em frente se não tiver absoluta certeza 
de que sabe o que está fazendo. 
Construir um algoritmo significa expressar de forma clara e 
seqüencial as operações envolvidas na resolução do 
problema/classe de problemas. A resolução do problema é 
subdividida em uma seqüência ordenada de operações 
simples, que ao ser executada na ordem estabelecida, 
produz a solução do mesmo. É mais ou menos como 
escrever o modo de fazer de uma receita de bolo, porém um 
pouco mais detalhadamente. 
 
9 O teste de mesa: O teste de mesa consiste em efetuar 
mentalmente, a execução das operações expressas no 
algoritmo para verificar se elas realmente resultam na 
solução do problema, como era esperado. Geralmente usa-
se uma tabela em que cada coluna representa uma das 
variáveis do algoritmo, é necessário também uma coluna 
para a indicação dos resultados. O algoritmo é seguido 
conforme o descrito, atualizando a tabela a cada operação 
realizada. Ao mesmo tempo em que executa o algoritmo 
passo a passo, você deve analisar os resultados produzidos 
verificando se há ou não progresso em direção ao resultado 
esperado. 
 27
 
A correta execução dos passos acima configura um 
algoritmo para a construção de algoritmos. Vejamos alguns 
exemplos. 
Exemplo 1 
Calcular a área de uma pequena peça retangular de 
madeira, em cm2. 
Entrada: 
1 Peça de madeira retangular; 
Saída: 
1 Área da peça em centímetros quadrados; 
Algorítmo: 
Linguagem Natural 
1 Pegar uma régua, graduada em centímetros; 
2 Pegar um papel para rascunho; 
3 Usando a régua, medir o comprimento do lado 
maior e anotar no rascunho; 
4 Ainda usando a régua, medir o comprimento do 
lado menor e anotar no rascunho; 
5 Calcular a equação Area = LM x Lm, onde Area 
é a área da peça em cm2 e LM e Lm são 
respectivamente Lado Maior e Lado Menor em 
cm. 
6 Informar o resultado 
 28
Exemplo 2 
Dados os valores de referentes as medidas da base (B = 4 
cm) e da altura (H = 3,2 cm) de um triângulo, calcular a sua 
respectiva área em cm2. 
Entrada: 
1 Valor da base (B = 4cm) e da altura (H = 3,2 cm); 
Saída: 
1 Área (A) do triângulo em cm2; 
Algorítmo: 
Linguagem Natural 
1 Início; 
2 Obter os valores da medida da base ( B ) e da 
altura ( H ) 
3 Calcular A = ( B x H ) / 2; 
4 Informar o resultado ( A ) como sendo a área do 
triângulo; 
5 Fim; 
Exemplo 3 
Construir um algoritmo para calcular o volume de um cone, 
cujos valores de raio da base (R) e Altura (H) só serão 
informados pôr ocasião da execução do algoritmo, no entanto 
sabe-se que π = 3,14159 e que o volume de um cone é dado 
pela fórmula V=1/3.B.H, sendo V= Volume, B = Área da 
Base ( B = πR2) e H = Altura. 
 
 29
Entrada: 
1 Raio da base do cone, R – a ser informada; 
2 Altura do cone, H – a ser informada; 
Saída: 
1 Volume do cone, calculado pela fórmula V = 
1/3.B.H; 
Algorítmo: 
Linguagem Natural 
1 Inicio; 
2 Solicitar o valor do raio da base, R; 
3 Solicitar o valor da altura do cone, H; 
4 Calcular a área da base B, usando a fórmula B = 
πR2; 
5 Calcular o volume do cone, fazendo V = 1/3.B.H; 
6 Informar o volume do cone ( V ) em cm3; 
7 Fim; 
III. Exercícios 
1) Suponha que você tem em suas mãos uma lata de leite em 
pó. Com base nos exemplos acima, escreva um algoritmo 
para calcular a quantidade aproximada de chapa em cm2 
necessária para a confecção da respectiva lata. Observe 
que embora as latas de leite em pó, encontradas a venda no 
supermercado, sejam redondas, a chapa será sempre 
retangular e haverão sobras de recorte na confecção do 
 30
fundo e da tampa, essas sobras em geral são descartadas 
como sucata. 
2) Agora desenvolva um algoritmo para calcular o volume da 
lata de leite em pó. 
3) Dado que uma esfera possui raio R=3,4 m, qual será o seu 
volume, sabe-se que Vesfera = 4/3πR3, e que π = 3,14159. 
4) Converter uma temperatura T dada em graus Celsius, para 
Fahrenheit e para Kelvin. Fórmula C/5 = (F-32)/9 = (K-
273)/5. 
5) Um dado automóvel percorre em média 11,5 Km com um 
litro de combustível. Seu dono pretende fazer uma viagem 
de 1240Km, calcule o valor em reais a ser gasto com 
combustível, cada litro custa R$:1,75. É importante 
observar que estes valores podem variar de um dia para 
outro. 
6) Desenvolva um algoritmo para a conversão de valores em 
Reais para Dólares. A cotação do dólar varia todos os dias, 
desse modo não é possível pré-fixar um valor. 
7) Desenvolva um algoritmo para calcular a média final antes 
do exame, para um acadêmico na disciplina de Lógica de 
Programação, sabendo que o curso é semestral com duas 
notas parciais. 
8) Desenvolva um algoritmo para trocar o valor de duas 
variáveis. O algoritmo deve aceitar os dois valores como 
entradas, armazenar cada um deles em uma variável e 
 31
depois permutar esses valores entre si e apresentar o 
resultado. 
9) Desenvolva um algoritmo que aceite como entradas – O 
custo de um produto em R$ e a margem de lucro esperada 
em percentual – calcule e apresente o respectivo valor de 
revenda do produto. 
10) Desenvolva um algoritmo que, uma vez informadas as 
coordenadas de dois pontos (x, y) do plano cartesiano, 
calcule e informe a distância entre eles. 
11) O motorista de um automóvel ao passar pela marca Km 
326 de uma rodovia, verifica que o velocimetro marca 
50Km/h. A partir desse momento o motorista passa a 
acelerar e ao passar pela marca Km 328 está a uma 
velocidade de 120Km/h. Escreva um algoritmo que apartir 
desses dados, calcule e apresente a aceleração média do 
veículo no percurso. 
12) A altura máxima atingida por um objeto lançado 
verticalmente para cima pode ser calculada pelas equações 
da cinemática escalar, considerando que ao atingir o ápice, 
a velocidade do objeto é nula. Escreva o respectivo 
algoritmo de calculo. 
 32
Capítulo IV Algoritmos 
Expressos em Fluxogramas e 
Português Estruturado 
Este capítulo é uma introdução à representação de 
algoritmos através dos FLUXOGRAMAS e/ou do 
PORTGUÊS ESTRUTURADO. São apresentados os 
conceitos básicos de diagramação, um pequeno conjunto de 
palavras reservadas e as regras que constituem o Português 
Estruturado. Também são apresentados alguns conceitos e 
técnicas básicas muito importantes em programação 
estruturada. O estudante não é aconselhado a prosseguir sem 
antes compreender o conteúdo deste capítulo. 
IV. 1 Fluxogramas 
No capitulo III, foi mostrado como expressar um algoritmo 
na forma de passos/operações seqüenciais, neste capítulo o 
objetivo é representar esses passos na forma de um 
fluxograma. No exemplo 2 do capitulo III, foi dado o seguinte 
algoritmo. 
 
 
 33
Inicio
A = ( B x H ) / 2
"Area do triângulo:", A
Fim
B, H
Linguagem Natural 
1 Início;2 Calcular A = ( B x H ) / 2; 
3 Informar o resultado ( A ) como sendo a área do 
triângulo; 
4 Fim; 
Primeiramente observe que os valores da base B e da altura 
H são conhecidos e valem respectivamente 4 cm e 3,2 cm. 
Relembrando a simbologia apresentada no capítulo II monta-
se o respectivo fluxograma. 
 
 
 
 
 
 
 
 
 
 
Fluxograma 1 - Cálculo da área de triângulos 
 
Em primeiro lugar, observe que mesmo sendo conhecido o 
valor da base B e da altura H, esses encontram-se 
representados como entradas via teclado. Isso ocorre porque 
 34
queremos um algoritmo genérico, capaz de calcular a área de 
qualquer triângulo e não de apenas um em específico. Tenha 
sempre em mente que um algoritmo deve essencialmente ser 
genérico, ou seja solucionar toda uma classe de problemas. 
Em segundo, temos um retângulo representando o 
processamento, no caso, a fórmula matemática para o calculo 
da área de um triângulo. 
Em terceiro, vem o símbolo do que representa o monitor de 
vídeo, neste foi colocado um texto entre aspas (“Área do 
triângulo”), seguido de uma virgula e da letra A, o que isso 
significa ? 
Bem a resposta é simples, observe que o que está entre 
aspas é um texto, uma frase explicativa, já a letra A que não 
está entre aspas representa um valor, o valor calculado no 
passo anterior como sendo a área do triângulo. Essa é uma 
regra a ser seguida, toda vez que indicar a apresentação de um 
texto no monitor de vídeo, o texto deve ser delimitado pôr 
aspas, já quando indicar a apresentação de um valor 
representado pôr uma letra ou palavra, não tem aspas. A 
virgula aparece como separador. O separador é necessário 
quando se faz uso de um mesmo símbolo para indicar a 
apresentação de dois ou mais valores. 
Veja agora como fica o exemplo 3 do capitulo anterior, 
para o qual foi apresentado o seguinte algoritmo: 
 
Linguagem Natural 
1 Inicio; 
2 Solicitar o valor do raio da base, R; 
 35
3 Solicitar o valor da altura do cone, H; 
4 Calcular a área da base B, usando a fórmula B = 
πR2; 
5 Calcular o volume do cone, fazendo V = 1/3.B.H; 
6 Informar o volume do cone em cm3; 
7 Fim; 
 
Fluxograma: 
 
 
 
 
 
 
 
 
 
Fluxograma 2 - Cálculo do volume de cones 
IV. Exercícios 
Antes de continuar você precisa exercitar, então pegue a 
sua régua de desenho, lápis, borracha e papel e monte os 
fluxogramas referentes aos algoritmos desenvolvidos para os 
exercícios propostos no capítulo III 
R, H
B = 3,14159 x R 2
V = ( B x H ) / 3
"Volume do cone:", V
Fim
Início
 36
IV. 2 Português Estruturado 
O Português Estruturado é uma linguagem para 
especificação de algoritmos em forma estruturada. Essa 
pseudo linguagem de programação consiste de um conjunto de 
símbolos e palavras reservadas, que são usadas para 
representar os comandos, as operações e as diversas estruturas 
encontradas nas linguagens de programação. Também faz 
parte do Português Estruturado, um conjunto de regras a 
serem observadas. 
IV. 2.1 Tipos Básicos 
Toda linguagem de programação possui um conjunto de 
tipos básicos, esse conjunto define os tipos primitivos aos 
quais cada variável pode ser associada. O tipo de uma variável 
define o tamanho do espaço de memória associado ao seu 
nome, bem como quais são as operações possíveis, logo ficam 
implicitamente definidas quais informações podem ser 
armazenadas numa variável e quais não podem. Pôr exemplo, 
se você definiu uma variável associada ao tipo inteiro, não 
armazenar nela um valor real pois os números reais possuem 
características que os números inteiros não suportam, a virgula 
é um exemplo disso. Além disso o espaço de memória 
necessário para armazenar um número real é maior que o 
espaço reservado para um inteiro. 
 
Os tipos de dados definidos para nossa pseudo linguagem 
serão: 
 37
9 inteiro – variáveis associadas a esse tipo dados, 
armazenam apenas números inteiros e podem ser objeto das 
seguintes operações: 
 
 – inversão de sinal ( menos unário ) 
Mod Resto da divisão ( ex: 5 mod 2 = 1 ) 
Div Quociente da divisão (ex: 5 div 2 = 2 ) 
^ Potência inteira 
√ Radiciação inteira 
÷ Divisão 
* Multiplicação 
+ Adição 
− Subtração 
 
9 Real – uma variável associada ao tipo real permite 
armazenar qualquer valor numérico, porem não pode ser 
usada com as operações mod e div pois essas operações só 
se aplicam a números inteiros. 
 
9 Lógico - O tipo lógico define um tipo de dado que só 
admite dois valores verdadeiro e falso. Sobre um dado do 
tipo lógico podem ser aplicados os operadores vistos no 
capitulo I ( e, ou, não ) e alguns outros que não serão 
abordados neste trabalho. 
 
P
R
I 
O
R
I 
D
A
D
E
 38
9 Caracter – Variáveis associadas a esse tipo definem 
espaços de memória que podem ser usados para armazenar 
caracteres individuais, ou seja letras, dígitos, símbolos. O 
conjunto de caracteres mais usual é conhecido como tabela 
ASCII, veja no final do livro. 
 
9 Frase – O tipo frase define um espaço de memória capaz 
de armazenar uma seqüência de caracteres de modo a 
formar uma frase. Na linguagem PASCAL, o 
correspondente é o tipo string o qual permite um tamanho 
máximo de 255 caracteres, mas pôr enquanto não 
precisamos nos preocupar com o tamanho máximo. 
IV. 2.2 Operadores Matemáticos 
 
 – inversão de sinal ( menos unário ) 
^ Potenciação e 
√ Radiciação 
* Multiplicação e 
/ Divisão 
+ Adição e 
– Subtração 
 
P
R
I 
O
R
I 
D
A
D
E
 39
IV. 2.3 Operadores Relacionais 
 
> Maior que 
< Menor que 
≥ Maior ou igual a 
≤ Menor ou igual a 
≠ Diferente de 
IV. 2.4 Instruções Básicas 
As instruções representam os passos de um algoritmo, e são 
expressas fazendo-se uso do conjunto de palavras reservadas 
da linguagem. 
9 leia ( ) – Representa uma entrada de dados via teclado, 
equivalente ao símbolo: 
 
 
9 escreva ( ) – Representa uma saída de dados/informações 
no monitor de vídeo, é equivalente ao símbolo: 
 
 
9 imprima ( ) – Representa uma saída de dados/informações 
através do dispositivo de impressão, equivalente ao 
símbolo; 
 
 
 40
 
 
9 Principal ( ) – Marca o início do programa 
 
9 ← – A seta representa a atribuição de um valor para uma 
variável 
 
9 { – Abre Chaves, marca o início de um bloco de instruções, 
é necessário sempre que houver mais de uma instrução. 
 
9 } – Fecha Chaves, marca o fim de um bloco de instruções. 
 
9 ; – Separador de instruções; 
IV. 3 Técnicas Estruturadas Básicas 
Antes de começar as escrever algoritmos empregando o 
Português Estruturado, é necessário tomar conhecimento de 
algumas técnicas que foram desenvolvidas para tornar os 
algoritmos legíveis e apresentáveis. Vale a pena frisar que não 
se trata de frescura, é um dos pontos mais críticos. A diferença 
entre um algoritmo comum e um algoritmo ótimo, não reside 
apenas na lógica aplica, mas também na forma estética e 
especialmente na legibilidade do mesmo. 
Quando construir um algoritmo, tenha em mente que não o 
está construindo para você, mas sim para outros. Um bom 
 41
algoritmo é aquele que reúne simplicidade, funcionalidade, 
eficiência e legibilidade. 
 
9 Palavras reservadas - As palavras reservadas, aquelas que 
fazem parte da linguagem, devem ser expressas com letras 
minúsculas em negrito quando impressas pôr computador e 
sublinhadas quando escritas a mão. Palavras reservadas são 
aquelas que fazem parte do Português Estruturado e não 
podem ser usadas como nomes de variáveis. ( leia, 
imprima, escreva, se, então, senão, fim-se, enquanto, 
para, do ...) 
 
9 Variáveis – Toda variável deve necessariamenteser 
primeiro declarada para depois poder ser utilizada. Essa é 
uma restrição imposta pôr muitas linguagens de 
programação e será adotada nesse livro. Imagine como 
seria possível armazenar um valor na memória, sem antes 
ter requisitado o espaço necessário? Como seria possível se 
referir a um determinado espaço de memória sem lhe ter 
atribuído um nome? Como a máquina poderia identificar as 
operações que podem ser efetuadas sobre o valor 
armazenado num determinado espaço de memória, sem que 
o mesmo tivesse sido associado a um tipo de dado? 
 
9 Nomenclatura de variáveis – O nome de uma variável 
deve começar sempre pôr uma letra maiúscula, sendo as 
demais minúsculas. Quando o nome for composto de duas 
ou mais palavras, a primeira letra de cada palavra deverá 
 42
estar em maiúsculo. Exemplos: Raio, Base, Altura, 
LadoMaior. 
Ao dar nome a uma variável, certifique-se de que o nome 
dado reflete a essência da informação a ser armazenada. 
Nomes tipo X1, X2, X3, A, B, C, ... são essencialmente 
confusos pois não refletem as informações que as variáveis 
armazenam. Um bom nome de variável, é aquele capaz de 
nos fazer compreender imediatamente, sem ser necessário 
analisar o algoritmo, qual é a informação armazenada na 
variável. São bons exemplos: AlturaTriângulo, RaioBase, 
CotaçãoDolar. 
 
9 Sintaxe – A sintaxe diz respeito à forma, o modo correto 
de expressar uma determina ordem/comando ou estrutura. 
Cada comando possui uma maneira correta de escrever a 
qual deve ser respeitada. Algoritmos que não obedecem as 
regras de sintaxe, geralmente apresentam inconsistências 
(erros). 
 
9 Semântica – A semântica diz respeito ao significado, o 
entendimento que se obtêm daquilo que está 
expresso/escrito. Na vida real, nem sempre o que 
escrevemos significa aquilo que queríamos escrever. 
Muitas vezes somos ambíguos, as vezes dizemos “não” 
significando “sim”, outras vezes usamos gírias ou costumes 
que podem nos ser familiares, mas que são completamente 
confusas para outras pessoas. Em termos de programação, 
não pode haver ambigüidades pois a máquina não é capaz 
de raciocinar e interpretar comandos dúbios. Desse modo 
 43
faz-se necessário escrever de forma explicita todas as 
operações a serem efetuadas. 
9 Edentação – É uma técnica que torna clara a hierarquia das 
estruturas/instruções que compõem o algoritmo tornando-o 
de fácil leitura. Em geral a edentação consiste de um 
deslocamento de 3 caracteres para a direita, sempre que se 
inicia um novo bloco de instruções. As instruções 
subordinadas a uma estrutura ou bloco devem ficar três 
casas para a direita, indicando a sua subordinação. Veja os 
exemplos abaixo. 
 
Errado 
 
principal ( ) 
{ 
real Raio, Altura, Base, Volume; 
escreva (“Raio da base : ”); 
leia ( Raio ); 
escreva (“Altura : ”); 
leia ( Altura ); 
Base ← 3,14159 * Raio ^ 2; 
Volume ← ( Base * Altura ) / 2; 
escreva (“Volume : ”, Volume); 
}; 
 
Correto 
 
principal ( ) 
{ 
 real Raio, Altura, Base, Volume;
 
 escreva (“Raio da base : ”); 
 leia ( Raio ); 
 escreva (“Altura : ”); 
 leia ( Altura ); 
 Base ← 3,14159 * Raio ^ 2; 
 Volume ← ( Base * Altura ) / 2; 
 escreva (“Volume : ”, Volume); 
}; 
 
9 Construção do Algoritmo – Observe os algoritmos 
apresentados nesse exemplo. Pôr enquanto, todo e qualquer 
algoritmo que você escrever em Português Estruturado 
deverá iniciar pela palavra chave “principal” seguida de 
parênteses, logo em seguida na próxima linha vem um 
indicador de início de bloco “{”. Nesse ponto devem ser 
 44
efetuadas as declarações de variáveis, observar a edentação. 
Após a declaração das variáveis deixe uma ou mais linhas 
em branco e inicie a escrita do pseudo código que irá 
constituir o algoritmo. 
Observe ainda que as instruções terminam com um ponto e 
virgula, esse é o separador padrão para a maioria das 
linguagens de programação e será adotado em nossa 
pseudo linguagem também. 
 
É hora de aplicar a teoria na prática. Inicie analisando os 
exemplos que seguem. 
Exemplo 1 
Suponha que você tem em suas mãos uma lata de leite em 
pó. Com base nos exemplos acima, escreva um algoritmo para 
calcular a quantidade aproximada de chapa em cm2 necessária 
para a confecção da respectiva lata. 
Entrada: 
1 Medidas do Raio da Base e da Altura da Lata, 
verificadas com uma régua 
Saída: 
1 Quantidade de chapa necessária à confecção da 
lata, essa quantidade é aproximadamente a mesma 
medida da área externa da lata: área lateral + 
fundo + tampa, considerando a lata de leite como 
tendo forma cilíndrica. 
 
 45
Algorítmo: 
Linguagem Natural 
1 Inicio 
2 Medir a altura da lata; 
3 Medir o raio da base ( fundo); 
4 Calcular a área da base ( AreaBase = π.Raio2 ); 
5 Calcular a área lateral ( AreaLateral = 
Altura.2.π.Raio ); 
6 Calcular a área externa 
( AreaExterna = AreaLateral + 2.AreaBase); 
7 Informar o valor de AreaExterna, como sendo a 
quantidade, aproximada, de chapa necessária à 
confecção da lata; 
8 Fim; 
 
Português Estruturado: 
 
 
 
 
 
 
 
 
principal ( ) 
{ 
 real Raio, Altura, AreaLateral, AreaBase, AreaExterna; 
 
 escreva (“Medida da altura da Lata : ”); 
 leia ( Altura ); 
 escreva (“Medida do Raio da Base : ”); 
 leia ( Raio ); 
 AreaBase ← 3,14 * Raio ^ 2; 
 AreaLateral ← Altura * 2 * 3,14 * Raio; 
 AreaExterna ← AreaLateral + 2 * AreaBase; 
 escreva (“Serão necessários ”, AreaExterna, “ cm2 chapa”); 
}; 
 46
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 3 - Quantidade de chapa para montar uma lata de leite em pó 
 
Neste algoritmo foi considerada a área externa da lata, 
como sendo a quantidade aproximada de chapa, necessária 
para a construção da lata. Não foram consideradas as perdas 
relativas ao recorte da tampa e do fundo. Se forem 
considerados os recortes, então a tampa e o fundo passam a ser 
quadrados de lado igual ao diâmetro da base da lata, assim 
AreaBase = (2R)2; 
Inicio
"Altura da Lata : "
H
"Raio da Base : "
R
AB = 3,14 * R ^ 2
AL = H * 2 * 3,14 * R
AExt = AL + 2*AB
"Serão Necessários",
AExt,"cm2 de chapa,
aproximadamente"
Fim
Passo 1 
Passo 2 
Passos 3, 4, 5 
Passo 6 
 47
Exemplo 2 
Agora escreva um algoritmo para calcular a capacidade da 
lata de leite em pó em cm3. 
Entrada: 
1 Medidas do raio e da altura da lata em cm; 
Saída: 
1 Volume da lata em cm3, V = Altura * AreaBase; 
 
Algorítmo: 
Linguagem Natural 
1 Início 
2 Medir a altura da lata; 
3 Medir o raio da base ( fundo); 
4 Calcular a área da base ( AreaBase = π.Raio2 ); 
5 Calcular o volume da lata ( Volume = Altura * 
AreaBase); 
6 Informar o volume calculado, como sendo o 
volume da lata; 
7 Fim; 
 48
Fluxograma: 
 
 
 
 
 
 
 
 
Fluxograma 4 Volume de uma lata de leite em pó 
 
Português Estruturado: 
principal ( ) 
{ 
 real Raio, Altura, AreaLateral, AreaBase, AreaExterna; 
 
 escreva (“Medida da altura da Lata : ”); 
 leia ( Altura ); 
 escreva (“Medida do Raio da Base : ”); 
 leia ( Raio ); 
 AreaBase ← 3,14 * Raio ^ 2; 
 Volume ← Altura * AreaBase; 
 escreva (“O volume é ”, volume, “ cm3 ”); 
}; 
 
Inicio
Altura, Raio
Base = 3,14 * R ^ 2
Volume = Altura * Base
"O volume é :",
Volume,"cm3 "
Fim
Passos 1, 2 
Passos 3, 4 
Passo 5 
 49
IV. Exercícios 
1) Os dois exemplos anteriores são a resolução dos dois 
primeiros exercícios do capítulo anterior. Agora, como 
você já fez os algoritmos para os demais exercícios, será 
fácil transcreve-los para o português estruturado, faça isso 
antes de prosseguir. 
2) Desenvolva um algoritmo para calcular a velocidade finalde um automóvel em MRUV (Movimento Retilíneo 
Uniformemente Variado). Os valores da aceleração, 
velocidade inicial e tempo só serão conhecidos no 
momento do teste. Em um MRUV a velocidade é dada pôr 
Vf = Vi + a.t 
3) Desenvolva um algoritmo para calcular o valor do salário 
líquido de um trabalhador horista. Sabe-se que o número 
de horas trabalhadas e o valor de cada hora variam de mês 
para mês. Sobre o salário bruto é feito um desconto de 
10% referente a contribuição para o INSS. 
4) Desenvolva um algoritmo para decompor um número em 
centenas, dezenas e unidades. Exemplo 2345 = 23 
centenas 4 dezenas e 5 unidades. Dica: use os operadores 
mod e div; 
 
 50
Capítulo V Estruturas de 
Seleção 
Os capítulos anteriores apresentaram como construir 
algoritmos simples e triviais, através deles você iniciou na arte 
da programação estruturada. A partir desse capítulo serão 
apresentadas novas técnicas e recursos para a especificação de 
algoritmos estruturados, com elas você poderá escrever 
algoritmos muito mais poderosos. 
O presente capítulo trata da tomada de decisões, como 
especificar a opção pôr uma entre duas possibilidades. São 
apresentadas as estruturas de seleção simples e compostas. 
Esteja certo de ter dominado os capítulos anteriores antes de 
prosseguir. 
V. 1 Estrutura de Seleção Simples 
Para melhor entender vamos pensar num caso simples: 
após calculada a média final de um acadêmico da disciplina de 
Lógica de Programação, deseja-se saber se ele está aprovado. 
Sabe-se que o mesmo estará aprovado se sua média for maior 
ou igual a 7,0 pontos. Note que será necessário tomar uma 
decisão baseada no fato da média final ser ou não superior a 7. 
 51
Nas linguagens de programação estruturada, existe uma 
estrutura de seleção para especificar que uma determinada 
instrução só será executada se a avaliação de uma certa 
condição lógica ( proposição lógica simples ou composta ) 
resultar em verdadeiro. Essa estrutura é conhecida como 
se...então....fim_se, é uma estrutura simples mas poderosa. 
V. 1.1 Fluxograma 
Em fluxogramas, a estrutura de seleção simples deverá 
sempre ser desenhada conforme mostrado abaixo. As 
instruções a serem executadas estão sempre subordinadas ao 
resultado “VERDADEIRO” da condição lógica testada. O 
resultado “FALSO” não possui instruções subordinadas. 
 
 
 
 
 
 
 
 
 
Fluxograma 5- A estrutura de seleção se...então...fim_se 
 
<condição>
<Instruções a serem executadas
se a condição possuir valor
lógico verdadeiro>
V
F
se 
fim_se 
então 
 52
V. 1.2 Português Estruturado 
A sintaxe básica para a estrutura de seleção simples em 
Português Estruturado pode ter duas variantes, tudo vai 
depender do número de instruções a serem executadas quando 
a avaliação da condição resultar no valor lógico verdadeiro: 
 
Com uma instrução apenas 
 
 
se < condição > então 
 
 < instrução > 
 
fim_se; 
 
Com mais de uma instrução 
 
se < condição > então 
{ 
 < instrução 1 > 
 < instrução 2 > 
 : 
 < instrução n > 
} 
fim_se; 
 
Observe que sempre que houver mais de uma instrução 
subordinada, será necessário inseri-las em um bloco iniciado 
com abre chaves “{” e finalizado com fecha chaves “}”. No 
caso de uma única instrução, o uso de chaves é opcional. 
Exemplo 1 
Retornando ao texto inicial: Sabe-se que o aluno estará 
aprovado se sua média for maior ou igual a 7,0 pontos. Note 
que o caso em questão é especificar uma situação que depende 
de uma sentença com valor lógico VERDADEIRO ou 
FALSO. 
 53
Entrada: 
1 Supondo um curso semestral com duas notas 
parciais, as entradas serão a primeira e a segunda 
nota parcial. 
Saída: 
1 A saída é a informação a respeito da aprovação. 
 
Algorítmo: 
Linguagem Natural 
1 Início 
2 Solicitar as duas notas parciais; 
3 Calcular a soma; 
4 Calcular a média ( MF = Soma / 2 ); 
5 Verificar a situação do acadêmico, e se aprovado 
apresentar uma mensagem indicando tal situação.; 
6 Fim; 
 
Fluxograma: 
 
 
 54
 
 
 
 
 
 
 
 
 
 
Fluxograma 6 - Verificando a aprovação do aluno 
Português Estruturado: 
 
Você deve estar se perguntando e se ele não obteve 
aprovação? Para poder expressar essa situação, é necessário 
ampliar a estrutura de seleção, de modo a incluir uma 
principal ( ) 
{ 
 real Nota1, Nota2, Soma, Media; 
 
 escreva (“1a Parcial : ”); 
 leia ( Nota1 ); 
 escreva(“2a Parcial; : ”); 
 leia ( Nota2 ); 
 Soma ← Nota1 + Nota2; 
 Media ← Soma / 2; 
 se ( Media ≥ 7,0 ) então 
 escreva(“Aprovado”) 
 fim_se; 
}; 
 
Media >= 7
Inicio
"1a e 2a Parcial : "
N1 , N2
Soma = N1 + N2
Media = Soma / 2
"Aprovado"
Fim
V
F
 55
instrução que será executada quando a avaliação da condição 
lógica resultar FALSO. 
V. 2 Estrutura de Seleção Composta 
A estrutura de seleção composta permite especificar a 
necessidade de optar-se pôr uma entre duas situações distintas. 
No exemplo inicial, o algoritmo informa a mensagem 
“Aprovado” quando a média obtida é maior ou igual a 7 
pontos. No entanto queremos agora incluir a mensagem 
“Reprovado” que deverá ser apresentada quando a média 
obtida for menor que 7 pontos. Uma solução possível, seria a 
inclusão de mais uma estrutura de seleção simples, veja 
abaixo. 
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 7 - Verificando se o aluno está “Aprovado” ou “Reprovado”. 
Início
"1a e 2a Parcial"
N1, N2
Soma = N1+N2
Media = Soma / 2
Media >= 7
"Aprovado"
V
F
Media < 7
"Reprovado"
V
F
Fim
 56
Português Estruturado: 
 
 
Embora essa seja uma solução eficaz, não é a mais 
recomendada, num caso como esse podemos lançar mão de 
uma estrutura de seleção composta, a qual além de ser tornar o 
algoritmo menor, aumenta também a sua legibilidade do 
mesmo. 
Uma estrutura de seleção composta difere da estrutura de 
seleção simples, apenas no fato de que ela possui instruções 
subordinadas ao resultado FALSO quando do teste da 
condição lógica. 
V. 2.1 Fluxograma 
A estrutura de seleção composta especifica uma decisão 
tomada segundo o valor de uma proposição lógica 
principal ( ) 
{ 
 real Nota1, Nota2, Soma, Media; 
 
 escreva (“1a Parcial : ”); 
 leia ( Nota1 ); 
 escreva(“2a Parcial; : ”); 
 leia ( Nota2 ); 
 Soma ← Nota1 + Nota2; 
 Media ← Soma / 2; 
 se ( Media ≥ 7,0 ) então 
 escreva (“Aprovado”); 
 fim_se; 
 se ( Media < 7,0 ) então 
 escreva (“Reprovado”); 
 fim_se; 
}; 
 
 57
“<condição>”. Se a avaliação dessa proposição resultar 
verdadeiro, então as instruções a serem executadas são aquelas 
descritas no ramo identificado com a letra V – 
VERDADEIRO, caso contrário “senão” devem ser executadas 
as instruções descritas no ramo identificado com a letra F – 
FALSO. 
 
 
 
 
 
 
 
 
 
 
Fluxograma 8 - Estrutura de seleção composta se...então....senão...fim_se 
Pode-se dizer que a estrutura de seleção simples é um caso 
especial da estrutura composta, onde não foram descritas 
instruções a serem executadas quando a avaliação da condição 
resultar FALSO. 
V. 2.2 Português Estruturado 
A transformação de uma estrutura de seleção simples em 
uma composta, dá-se pura e simplesmente pela adição da 
clausula “senão”, como ilustrado a seguir. 
<condição> V
F
<Instruções a serem
executadas se a condição
possuir valor lógico
verdadeiro>
<Instruções a serem
executadas se a condição
possuir valor lógico
falso>
F
então
se
fim se
senão 
 58
Com uma instrução 
 
se < condição > então 
 < instrução >; 
senão 
 < instrução >; 
fim_se; 
Com mais de uma instruçãose < condição > então 
{ 
 < instruções >; 
} 
senão 
{ 
 < instruções >; 
} 
fim_se;
 
O exemplo 1 pode agora ser modificado, de modo que com 
apenas uma estrutura de seleção, será possível especificar as 
duas situações. Veja a seguir. 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 9 - Verificando a aprovação ou não do aluno 
Media >= 7
Inicio
"1a e 2a Parcial : "
N1, N2
Soma = N1 + N2
Media = Soma / 2
"Aprovado"
Fim
"Reprovado"
VF
principal ( ) 
{ 
 real Nota1, Nota2; 
 real Soma, Media; 
 
 escreva (“1a Parcial : ”); 
 leia ( Nota1 ); 
 escreva(“2a Parcial; : ”); 
 leia ( Nota2 ); 
 Soma ← Nota1 + Nota2; 
 Media ← Soma / 2; 
 se ( Media ≥ 7,0 ) então 
 escreva (“Aprovado”) 
 senão 
 escreva (“Reprovado”); 
 fim_se; 
 59
Apenas recapitulando, observe que quando se tem mais de 
uma instrução em cada clausula, é necessária a inclusão destas 
em um bloco delimitado por “{” e “}”. 
Para ampliar o exemplo, pensemos agora que a atual 
legislação, especifica que todo aluno com índice de freqüência 
inferior a 75% estará automaticamente reprovado. Vamos 
incluir essa condição em nosso algoritmo, fazendo uso de um 
operador lógico “e”. Analise o Fluxograma 10 e depois 
transcreva-o para o Português Estruturado. 
Observe que mesmo que o aluno tenha média maior ou 
igual a 7, estará reprovado se não atingir o percentual de 75 % 
de freqüência. Note também que o operador “e”, resolve sem a 
necessidade de acrescentar mais uma estrutura de seleção. 
 
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
Fluxograma 10 - Verificando a aprovação do aluno ( média e freqüência) 
Media >= 7
e
 Freq >= 75%
Inicio
N1, N2, Freq
Soma = N1 + N2
Media = Soma / 2
"Aprovado"
Fim
"Reprovado"
VF
 60
V. 3 Estruturas de Seleção Aninhadas 
Dizemos que uma estrutura está aninhada, quando a mesma 
é interna a outra, ou seja, a estrutura aparece como uma 
instrução pertencente a um dos ramos de outra estrutura. 
Para melhor entender, considere novamente o exemplo da 
verificação da aprovação do aluno. Vamos incluir duas novas 
proposições: 1- Se o aluno com freqüência igual ou superior a 
75%, não obtiver média suficiente para a aprovação, ele 
poderá pleitear um exame. 2- Só poderão pleitear exame, os 
alunos com freqüência igual ou superior a 75% e média não 
inferior a 4 pontos. Agora nosso problema requer três 
mensagens, a saber: “Aprovado”, “Exame” e “Reprovado”. 
 
Linguagem Natural 
1 Início 
2 Solicitar as duas notas parciais e o percentual de 
freqüência; 
3 Calcular a soma; 
4 Calcular a média ( MF = Soma / 2 ); 
5 Verificar a situação do acadêmico, 
a. se aprovado (Média >=7 e Freqüência >= 75%) 
apresentar a mensagem “Aprovado”; 
b. senão está aprovado, verificar se está reprovado 
(Média <4 ou freqüência < 75%); 
i. se reprovado apresentar a mensagem 
“reprovado”; 
 61
ii. caso contrário, apresentar a mensagem 
“exame”; 
6 fim; 
 
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 11 Verificação da situação de um aluno (aprovado, 
reprovado, exame) 
Obs: Cada estrutura de seleção deve ter seus ramos 
conectados após as instruções, marcando assim o final da 
instrução. Esse conector, em Português Estruturado, é 
representado pela palavra chave fim_se. 
Media >= 7
e
 Freq >= 75%
Inicio
N1, N2, Freq
Soma = N1 + N2
Media = Soma / 2
"Aprovado"
Fim
"Reprovado"
Media < 4
ou
Freq < 75%
"Exame"
VF
VF
Estrutura 
A i h d
Estrutura mãe 
fim_se 
fim_se
 62
A transcrição do fluxograma para o Português Estruturado 
é simples e fácil. Analise o pseudo código a seguir, 
comparando-o com o fluxograma. Para verificar a consistência 
do algoritmo. 1- Considere o conjunto de possibilidades 
(Notas e Freq); 2- execute mentalmente as operações descritas 
verificando se o resultado obtido é correto. 
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Exemplo 1 
Considere três valores A,B,C como sendo o comprimento 
dos lados de um triângulo. Verificar se é realmente possível a 
Principal ( ) 
{ 
 real N1, N2, Soma, Media, Freq; 
 
 escreva (“1a Parcial: ); 
 leia ( N1); 
 escreva (“2a Parcial: ); 
 leia ( N2); 
 escreva (“% Freqüência :”); 
 leia ( Freq ); 
 Soma ← N1 + N2; 
 Media ← Soma / 2; 
 se ( Media ≥ 7 e Freq ≥ 75) então 
 escreva(“Aprovado”); 
 senão 
 se ( Media < 4 ou Freq < 75 ) então 
 escreva (“Reprovado”); 
 senão 
 escreva (“Exame”); 
 fim_se; 
 fim_se; 
}; 
 63
construção de um triângulo com esses valores. Se a construção 
do triângulo for possível, verificar o tipo do mesmo: 
Eqüilátero, Escaleno ou Isósceles 
Entrada: 
1 Os comprimentos dos lados de um triângulo 
A,B,C. 
Saída: 
1 Confirmação ou não da possibilidade de ser um 
triângulo possível. Em caso afirmativo, a 
classificação do mesmo. 
Algorítmo: 
Linguagem Natural 
1 Ler os três valores (As medidas de cada um dos 
lados); 
2 Verificar a possibilidade de construção de um 
triângulo com tais valores, para tal sabe-se que um 
triângulo só é possível quando a soma de 
quaisquer dois de seus lados é sempre maior que o 
terceiro; 
3 Se a construção do triângulo for possível, então 
verificar o tipo do mesmo (Equilátero –Três lados 
iguais, Isósceles – Dois lados iguais, escaleno – 
Os três lados diferentes ); 
 
 64
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 12 Verificando a possibilidade de construção de um triângulo 
e sua respectiva classificação. 
 
 
Inicio
A, B, C
(A+B) > C
e (A+C) > B e
(B+C) > A
A = B e B = C
A = B
ou B = C ou
 A = C
"Impossível"
"Equilátero"
"Isóceles""Escaleno"
Fim
v
F
v
v
F
F
fim_se 
 65
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Exemplo 2 
Em um determinado país, é utilizada a tabela abaixo para 
fins de cálculo do imposto de renda a pagar. 
Ganhos Alíquota 
Até 1.200,00 1% 
De 1.200,01 até 2.000,00 10% 
De 2.000,01 até 3.000,00 15% 
De 3.000,01 acima 20% 
principal ( ) 
{ 
 real A, B, C; 
 
 escreva ( “Lado A: ” ); 
 leia ( A ); 
 escreva ( “Lado B: ” ); 
 leia ( B ); 
 escreva ( “Lado C: ” ); 
 leia ( C ); 
 se ( (A + B > C) e (A + C > B) e (B + C > A) ) então 
 se ( ( A = B )e( B = C ) ) então 
 escreva (“Equilátero”); 
 senão 
 se ( ( A=B ) ou ( A=C ) ou ( B=C ) ) então 
 escreva (“Isósceles”); 
 senão 
 escreva (“Qualquer”); 
 fim_se; 
 fim_se; 
 senão 
 escreva (“Não é triângulo”); 
 fim_se; 
}; 
 66
Montar um fluxograma para resolver o problema de calculo 
do valor do imposto a ser recolhido pôr um cidadão desse 
país, depois escrever o respectivo algoritmo em Português 
Estruturado. 
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 13 - Cálculo da alíquota do Imposto de Renda 
 
Inicio
Ganhos
Ganhos > 1.200,00
Ganhos > 2.000,00
Ganhos > 3.000,00
IR = Ganhos * 1%
IR = Ganhos * 10%
IR = Ganhos * 15% IR = Ganhos * 20%
F V
F V
F V
Fim
"IR a pagar : ",IR
 67
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
principal ( ) 
{ 
 real Ganhos, IR; 
 
 escreva (“Ganhos: ”); 
 leia ( Ganhos ); 
 se ( Ganhos ≤ 1.200,00 ) então 
 IR ← Ganhos /100; 
 senão 
 se (Ganhos ≤ 2.000,00 ) então 
 IR ← (Ganhos * 10)/100; 
 senão 
 se ( Ganhos ≤ 3.000,00 ) então 
 IR ← (Ganhos * 15)/100; 
 senão 
 IR ← (Ganhos * 20)/100; 
 fim_se; 
 fim_se; 
 fim_se; 
 escreva(“IR a pagar: ”, IR); 
}; 
 68
Nos exercícios abaixo, você deve primeiro ler atentamente 
o enunciado e indicar as entradas e as saídas para então 
escrever o algoritmo na forma de passos, usando a linguagem 
natural. Depois monte o fluxograma e pôr ultimo o português 
estruturado. 
1) Desenvolva um algoritmo que solicite três valores 
numéricos, calcule e apresente qual é o menor; 
2) Desenvolva um algoritmo, que dado um número inteiro 
positivo qualquer, apresente como resposta uma das 
seguintes mensagens: 
a) “CASAL” → em se tratando de número par; 
b) “VELA” → em se tratando de número impar; 
c) “INVÁLIDO” → para números menores ou iguais a 
zero; 
Obs: Para saber se o número é par ou impar, use o 
operador mod; 
3) Desenvolva um algoritmo que solicite ao usuário o nome e 
o sexo de uma pessoa e a partir dessas informações, 
apresente a mensagem “Ilmo Senhor” ou “Ilma Senhora” 
conforme o caso, e em seguida do nome da pessoa. O sexo 
deverá constar de “M” ou “m” para masculino e “F” ou “f” 
para feminino, quaisquer outras letras deverão causar a 
apresentação da mensagem “Erro”. 
 69
4) Desenvolver um algoritmo para a ordenação crescente de 
três valores inteiros quaisquer. O algoritmo deve solicitar 
os valores, ordenar e apresentá-los na forma ordenada. 
5) Desenvolva um algoritmo que, a partir do sexo e da altura 
de uma pessoa, calcule e apresente o seu peso ideal. Use as 
formulas: 
a) Para homens ( 72.7 * h ) – 59; 
b) Para mulheres ( 62.1 * h ) – 45; 
6) Desenvolva um algoritmo para calculo das raízes de uma 
equação do 2oGrau, na forma Ax2 + Bx + C = 0. Observar 
que nem sempre uma equação dessa natureza possui raízes 
reais. 
7) Desenvolva um algoritmo que a partir da idade de um 
jogador de futebol faça e apresente a classificação de sua 
categoria. 
Idade em anos Classe
5 a 8 Infantil 
9 a 12 Infanto – Juvenil 
13 a 18 Juvenil 
19 a 35 Amador 
acima de 35 Amador Sênior 
8) Uma empresa produz vários produtos. Cada produto tem 
uma tarifação de ICMS diferente. Desenvolva um 
algoritmo que a partir do valor de uma venda e do código 
do respectivo de tarifação do produto, calcule e apresente 
o valor do ICMS a recolher. 
 70
Código Tarifação
1 17 % 
3, 5 e 7 12 % 
4 e 8 9 % 
10 25 % 
Outro “Código Invalido” 
9) Desenvolva um algoritmo que tenha como entradas: dois 
valores numéricos reais e um símbolo representando a 
operação desejada. O algoritmo deverá efetuar a operação 
solicitada e apresentar o respectivo resultado. 
Símbolo Operação
+ Adição 
- Subtração 
* Multiplicação 
/ Divisão 
10) Para se determinar o número de luminárias necessárias 
para a iluminação de cada cômodo de uma casa, é utilizada 
uma tabela que fornece a potência mínima em Watts pôr 
metro quadrado. Desenvolva um algoritmo que a partir da 
potência das luminárias a serem utilizadas, das medidas do 
cômodo e da sua classificação, calcule e apresente: 
a) A área do cômodo; 
b) A potência total necessária; 
c) O número mínimo de luminárias; 
Cômodo Classe Potência (w/m2) 
Quarto 1 14 
Sala de TV 2 10 
 71
Sala 3 20 
Cozinha 4 22 
Escritório 5 25 
Banheiro 6 18 
Áreas de Lazer 10 15 
 
 72
Estrutura de Seleção Múltipla 
Quando um problema se apresenta de tal forma que se faz 
necessário efetuar uma escolha entre várias possibilidades, 
aninhar estruturas tipo se...então...senão.... pode vir a ser 
extremamente trabalhos. Considere pôr exemplo, um 
algoritmo que a partir de um número entre 1 e 7, apresente 
qual é o nome do respectivo dia da semana. Sua construção 
com estruturas aninhadas requer 6 níveis. Veja abaixo. 
 
Entrada: 
1 Um número de 1 a 7 representando o dia da 
semana 
Saída: 
1 O nome do dia da semana ( 1 = Segunda-feira, 2 = 
Terça-feira, 3 = Quarta-feira, 4 = Quinta-feira, 5 = 
Sexta-feira, 6 = Sábado, 7 = Domingo) 
Algorítmo: 
Linguagem Natural 
1 Solicitar o número que representa o dia; 
2 Verificar se é um dia válido de 1 até 7, se não for 
apresentar mensagem de erro e terminar; 
3 Caso seja um dia válido, verificar e apresentar o 
seu respectivo nome conforme descrito acima; 
4 Fim; 
5 
 73
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 14 - Verificando o nome do dia da semana 
 
Dia ≥ 1 e Dia ≤ 7
"Dia Inválido"
Dia=1
"Seg-Feira" Dia=2
Dia=3
Dia=4
Dia=5
Dia=6
V
"Terc-Feira"
"Qua-Feira"
"Qui-Feira"
"Sex-Feira"
"Sábado" "Domingo"
V
V
V
V
V F
F
F
F
F
V
Fim
Dia
"Dia (1 a 7):"
Início
F
F
 74
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Agora imagine uma situação em que ocorram muito mais 
opções. O aninhamento sucessivo de estruturas se...então... 
principal ( ) 
{ 
 inteiro NumDia; 
 
 escreva (“Dia (1 a 7 ): ”); 
 leia ( NumDia ); 
 se ( NumDia ≥ 1 e NumDia ≤ 7 ) então 
 se ( NumDia = 1 ) então 
 escreva (“Segunda - Feira”); 
 senão 
 se ( NumDia = 2 ) então 
 escreva (“Terça - Feira”); 
 senão 
 se ( NumDia = 3 ) então 
 escreva (“Quarta - Feira”); 
 senão 
 se ( NumDia = 4 ) então 
 escreva (“Quinta - Feira”); 
 senão 
 se ( NumDia = 5 ) então 
 escreva (“Sexta - Feira”); 
 senão 
 se ( NumDia = 6 ) então 
 escreva (“Sábado”); 
 senão 
 escreva (“Domingo”); 
 fim_se; 
 fim_se; 
 fim_se; 
 fim_se; 
 fim_se; 
 fim_se; 
 senão 
 escreva (“Dia inválido”); 
 fim_se; 
}; 
 75
torna-se impraticável. Felizmente pode-se lançar mão de uma 
estrutura especialmente desenvolvida para esses casos, a 
estrutura de seleção múltipla caso...seja. 
A estrutura caso...seja, estabelece a comparação de um 
valor dado (inteiro ou caracter) com cada uma das opções 
expressas, ao encontrar uma que seja igual, serão executadas 
as instruções especificadas em seu respectivo bloco. 
Não há limite para o número de opções, e cada opção pode 
conter de mais de um valor, sendo estes expressos 
seqüencialmente e separados pôr vírgula. Também é permitido 
especificar intervalos. Um intervalo é expresso indicando-se o 
início e o fim do mesmo, separados pôr dois pontos lineares. 
Caso não haja nenhuma opção que case com o valor dado, 
serão executadas as instruções especificadas no bloco de 
instruções padrão. 
Importante observar que essa estrutura trabalha apenas com 
igualdade, não sendo possível expressar casos tais como X ≥ 
6. Outra restrição importante esta no fato de que a variável a 
ser comparada deve ser do tipo inteiro ou do tipo caracter. 
 
 76
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 15 - Estrutura de seleção múltipla - caso .. seja 
Valor a ser 
Comparado
Valor das 
Opções 
Instruções para 
o caso de não 
ter a opção 
<?>
Instruções
Instruções
Intruções
:
:
Instruções
Op 1
Op 2
Op N
 77
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
O objeto de comparação é o valor da variável expressa no 
início da estrutura. Essa variável deve obrigatoriamente ser de 
um tipo enumerado (inteiro ou caracter). Seu valor deverá ser 
comparado seqüencialmente, de cima para baixo, com todos 
os valores ou intervalos de cada opção, havendo uma 
igualdade, devem ser executadas as instruções especificadas 
na opção. 
O comando pare marca o fim de uma opção e determina 
que a próxima instrução a ser executada é a primeira após o 
fim da estrutura, não havendo o comando pare a execução 
prossegue linearmente. 
A clausula não_seja indica quais instruções devem ser 
executadas, caso o valor da variável nãoseja igual a nenhum 
dos valores especificados nas opções. 
caso (< Variável >) seja 
{ 
 < valor(es) ou intervalo(s) > : 
 < instruções > 
 pare; 
 < valor(es) ou intervalo(s) > : 
 < instruções > 
 pare; 
 : 
 : 
 < valor(es) ou intervalo(s) > : 
 < instruções > 
 pare; 
 
 não_seja 
 < instruções > 
};
 78
Exemplo 1 
A partir de um número fornecido pelo usuário, informar 
qual é o dia da semana. Se o respectivo número for menor que 
1-Segunda-feira ou for maior que 7-Domingo, deverá ser 
mostrada uma mensagem de erro. 
Entrada: 
1 Um número de um a sete; 
Saída: 
1 O dia da semana, ou uma mensagem de erro; 
 
Algorítmo: 
Linguagem Natural 
1 Início 
2 Ler o número para o dia da semana; 
3 Determinar se é: 
a. 1 - Segunda-feira; 
b. 2 - Terça-feira; 
c. 3 - Quarta-feira; 
d. 4 - Quinta-feira; 
e. 5 - Sexta-feira; 
f. 6 - Sábado; 
g. 7 - Domingo; 
h. outro valor – “Erro” – Dia inválido; 
4 Fim; 
 79
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 16 - Determinando o nome do dia da semana com a estrutura 
caso..seja 
Dia
1
2
Dia
Início
3
4
5
6
7
Fim
"Segunda - Feira"
"Terça - Feira"
"Quarta - Feira"
"Quinta - Feira"
"Sexta - Feira"
 "Sábado"
"Domingo"
"Dia Inválido"
 80
 
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Exemplo 2 
Dado um número maior ou igual a zero, dizer se é: unidade, 
dezena, centena ou milhar. Números negativos e números 
maiores que 10.000, devem gerar uma mensagem de erro. 
 
principal ( ) 
{ 
 inteiro Dia; 
 
 escreva (“ Dia: ”); 
 leia ( Dia ); 
 caso ( Dia ) seja 
 { 
 1: escreva ( “Segunda-feira” ); 
 pare; 
 2: escreva ( “Terça-feira” ); 
 pare; 
 3: escreva ( “Quarta-feira” ); 
 pare; 
 4: escreva ( “Quinta-feira” ); 
 pare; 
 5: escreva ( “Sexta-feira” ); 
 pare; 
 6: escreva ( “Sábado” ); 
 pare; 
 7: escreva ( “Domingo” ); 
 pare; 
 
 não_seja 
 escreva ( “Dia Inválido”); 
 }; 
}; 
 81
Entrada: 
1 Um número inteiro; 
Saída: 
1 Classificação do número em: 
a. Unidade; 
b. Dezena; 
c. Centena; 
d. Milhar; 
2 Mensagem de erro; 
 
Algorítmo: 
Linguagem Natural 
1 Início; 
2 Solicitar/ler um número inteiro; 
3 Classificar o número, segundo as seguintes 
opções: 
a. De 0 até 9 → Unidade; 
b. De 10 até 99 → Dezena; 
c. De 100 até 999 → centena; 
d. De 1.000 até 9.999 → milhar; 
e. Caso contrário → Erro; 
4 Fim; 
 82
Obs: Nesse caso é necessário especificar um intervalo de 
valores. Algumas linguagens, C por exemplo, não permitem a 
especificação de intervalos numa estrutura de seleção 
múltipla. Já em Pascal isso é perfeitamente possível. Em 
linguagens que não suportam intervalos usa-se uma seqüência 
de se...então...senão... encadeados. 
Fluxograma: Português Estruturado 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 17 - Escolhendo entre - Unidades, Dezena, Centena e milhar 
Num
0..9
10..99
Num
Início
100..999
1000..9999
Fim
"Unidade"
"Dezena"
"Centena"
"Milhar"
"Erro"
principal ( ) 
{ 
 inteiro Num; 
 
 escreva (“Número: ”); 
 leia ( Num ); 
 caso ( Num ) seja 
 { 
 0..9: 
 escreva (“Unidade”); 
 pare; 
 10..99: 
 escreva (“Dezena”); 
 pare; 
 100..999: 
 escreva (“Centena”); 
 pare; 
 1000..9999: 
 escreva (“Milhar”); 
 pare; 
 não_seja: 
 escreva (“Erro”); 
 }; 
}; 
 83
O mesmo resultado, obtido com uma seqüência de 
se...entao..senao encadeados 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
V. Exercícios 
1) Refazer os exercícios 7,8,9,10 fazendo uso da estrutura de 
seleção múltipla caso...seja. 
2) Solicitar o mês e o ano, calcular e apresentar o número de 
dias que o mês tem. Dica, O anos bissextos são múltiplos 
de 4. 
principal ( ) 
{ 
 inteiro Num; 
 
 escreva (“Número: ”); 
 leia ( Num ); 
 se ( Num < 0 ou Num > 9999 ) então 
 escreva(“Erro”); 
 senão 
 se (Num < 9 ) então 
 escreva (“Unidade”); 
 senão 
 se (Num < 99 ) então 
 escreva (“Dezena”); 
 senão 
 se (Num < 999 ) então 
 escreva (“Centena”); 
 senão 
 escreva (“Milhar”); 
 fim_se; 
 fim_se; 
 fim_se; 
 fim_se; 
}; 
 84
Capítulo VI Estruturas de 
Repetição 
Em muitos casos, o algoritmo solução para uma 
determinada classe de problemas, apresenta uma seqüência de 
instruções que devem ser executadas repetidas vezes para que 
o resultado desejado seja produzido. 
Escrever as mesmas instruções repetidas vezes, é 
extremamente improdutivo e em muitos casos impossível. As 
linguagens de programação estruturada definem três estruturas 
de repetição – enquanto <condição> faça, faça <instruções> 
enquanto <condição> e para <indexadores, condição, 
incrementos> faça – essas estruturas de repetição possuem 
uma condição lógica que é avaliada a cada nova interação e 
que define o ponto de parada, ou seja, a interrupção do laço. 
Essas estruturas são o objeto de trabalho deste capitulo. 
VI. 1 A Estrutura faça....enquanto 
Diferentemente da maioria dos livros de lógica de 
programação, não iniciarei pela estrutura enquanto....faça. A 
opção pôr iniciar pela instrução faça...enquanto, reside na 
 85
observação, em sala de aula, de que a lógica inclusa nessa 
estrutura é melhor entendida e compreendida pelos alunos. 
A estrutura faça...enquanto, trabalha da seguinte forma: as 
instruções em seu interior são executadas uma vez, então a 
condição lógica é avaliada, se for verdadeira a execução das 
instruções internas será repetida e a condição novamente 
avaliada, esse processo se repete enquanto a condição for 
avaliada com valor lógico (resultado) VERDADEIRO. No 
momento em que a avaliação da condição resultar em FALSO, 
ocorrerá a ruptura do laço e a execução passará para a 
instrução seguinte. 
Veja abaixo a forma como representar essa estrutura em um 
fluxograma e em português estruturado. 
VI. 1.1 Sintaxe Básica 
Observe a representação abaixo, um pequeno circulo indica 
o início da estrutura. Logo abaixo devem ser especificadas as 
instruções a serem repetidas, essas instruções podem constar 
de entradas/saídas, processamento e/ou outras estruturas. Após 
as instruções, vem a condição lógica que determinará a 
interrupção do laço. 
 
 86
 
 
 
 
 
 
 
 
 
Fluxograma 18 – Sintaxe da estrutura de repetição faça ... enquanto 
Exemplo 1 
Contar de zero até dez, de 1 em 1. 
Entrada: 
1 Não há entrada de dados; 
Saída: 
1 Seqüência de números inteiros, de zero até 10; 
Algorítmo: 
Linguagem Natural 
1 Iniciar um contador em zero; 
2 Mostrar o valor do contador; 
3 Incrementar o contador em um; 
Com uma instrução para repetir 
 
faça 
<instrução a ser executada uma ou 
mais vezes > 
enquanto <condição>; 
 
 
Com várias instruções para repetir 
 
faça 
{ 
<instruções a serem executadas uma 
ou mais vezes > 
} enquanto <condição>; 
<condição>
<Instruções a serem
executadas uma ou mais
vezes>V
F
 87
4 Enquanto o contador for menor ou igual a 10 
voltar ao passo 2, caso contrário prossiga; 
 
Fluxograma Português Estruturado 
 
 
 
 
 
 
 
 
 
Fluxograma 19 - Contando de zero a dez com a estrutura faça..enquanto 
Exemplo 2 
Monte um algoritmo (fluxograma e português estruturado) 
para o seguinte problema. Ler um número N, entre 0 e 10 
descartando qualquer valor fora desse intervalo. Apresentar atabuada do número N, no formato exemplificado: 
 
 
 
 
2 * 0 = 0
2 * 1 = 2 
2 * 2 = 4 
2 * 3 = 6 
: 
: 
2 * 10 = 20 
 
principal ( ) 
{ 
 inteiro Cont; 
 
 Cont ← 0; 
 faça 
 { 
 escreva ( Cont ); 
 Cont ← Cont + 1; 
 } enquanto ( Cont ≤ 10); 
}; 
Cont <= 10
Cont = Cont + 1
Inicio
Cont = 0
Cont
Fim
F
v
 88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 20 - Calculando e apresentando a tabuada de um número qualquer 
entre 0 e 10. 
 
Exemplo 3 
Calcular o valor de ݔ ൌ ∑ ଵ
௡
ଶ଴
௡ୀଵ ou seja ݔ ൌ
ଵ
ଵ
,
ଵ
ଶ
, … ,
ଵ
௡
, … ,
ଵ
ଶ଴
 
 
Entrada: 
1 Não tem; 
Saída: 
principal ( ) 
{ 
 inteiro N, Cont, Tot; 
 
 escreva (“Tabuada do: ”); 
 faça 
 leia ( N ); 
 enquanto ( (N < 0) ou (N > 10)); 
 
 Cont ← 0; 
 
 faça 
 { 
 Tot ← N * Cont; 
 escreva (N, “ * ”, Cont, “ = ”, Tot); 
 Cont ← Cont + 1; 
 } enquanto ( N < 11); 
};
Inicio
N
N < 0 ou N > 10
V
Cont = 0
Tot = N * Cont
N," * ",Cont," = ", Tot
Cont = Cont + 1
N < 11
V
Fim
 89
1 O valor de x, calculado segundo o somatório dado; 
Fluxograma: Português 
estruturado 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 21 - Calculando um somatório 
Exemplo 4 
Calcular todos os divisores inteiros ( positivos ) de um 
número N qualquer. 
Entrada: 
1 Um número qualquer N – inteiro; 
Saída: 
1 A lista de todos os divisores ( positivos ) de N 
Início
Fim
x <-- 1
n <-- 2
x <-- x+1/n
n <-- n+1
N <= 20
R
"X = ",x
F
principal( ) 
{ 
 inteiro N; 
 real X; 
 
 X ← 1; 
 N ← 2; 
 faça 
 { 
 X ← X + 1/N; 
 N ← N + 1; 
 } 
 enquanto ( N ≤ 20 ); 
 escreva (“X = ”, X); 
}; 
 90
Fluxograma: Português Estruturado 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 22 - Calculando os divisores de um número qualquer inteiro 
Exemplo 5 
Ler uma seqüência de números inteiros positivos, calcular e 
apresentar a média. O final da seqüência é marcado por um 
valor negativo. 
Entrada: 
1 Uma seqüência de números inteiros positivos, um 
número negativo, marca o fim da seqüência. 
principal ( ) 
{ 
 inteiro N, i; 
 
 escreva (“Valor de N:”); 
 leia ( N ); 
 i ← 1; 
 escreva (“Os divisores são:”); 
 faça 
 { 
 se ( (N mod i) = 0) então 
 escreva ( i ); 
 fim_se; 
 } 
 enquanto ( i ≤ N); 
}; 
Início
N
i <-- 1
(N mod i ) = 0
i
i <-- i + 1
i <= N
Fim
v
F
R
F
 91
Saída: 
1 A média dentre todos os valores positivos da 
seqüência. 
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 23 - Calculando a média de uma seqüência de números 
inteiros positivos 
Início
Cont <-- 0
Soma <-- 0
N <-- 0
N > 0
 N > 0
Fim
v
F
Soma <-- Soma + N
Cont <-- Cont + 1
N
F
R
Cont > 0
Media <-- Soma/ContMedia <-- 0
"Media ", Media
VF
 92
Português Estruturado: 
 
principal ( ) 
{ 
 inteiro N, Cont, Soma; 
 real Media; 
 
 Cont ← 0; 
 Soma ← 0; 
 N ← 0; 
 escreva(“Digite uma Seqüência:”); 
 faça 
 { 
 se (N > 0) então 
 { 
 Soma ← Soma + N; 
 Cont ← Cont + 1; 
 } fim_se; 
 leia ( N ); 
 } enquanto ( N>0 ); 
 se (nCont > 0) então 
 Media ← Soma / Cont; 
 Senão 
 Media ← 0; 
 fim_se; 
 escreva(“Média: ”, Media); 
}; 
 
 
VI. Exercícios 
Para cada um dos exercícios abaixo, monte o algoritmo 
primeiro em fluxograma, depois transcreva-o para o português 
estruturado. 
1) Desenvolva um algoritmo que para apresentar no vídeo 
todos os números pares múltiplos de 4 compreendidos 
 93
entre 1 e 500. O algoritmo deverá testar todos os números 
do intervalo. Dica: usar o operador mod. 
2) Desenvolva um algoritmo para verificar se um número 
inteiro positivo é ou não primo. Lembre-se que um 
número é dito primo quando é divisível apenas pôr um e 
pôr ele mesmo. 
3) Desenvolva um algoritmo para calcular o fatorial de um 
número inteiro positivo, fornecido pelo usuário. Números 
negativos deverão gerar uma mensagem de erro. 
4) Desenvolva um algoritmo para calcular e apresentar o 
valor de π com precisão de 0,001, usando a série: 
π = 4 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 +.... 
Para obter a precisão desejada, devemos 
adicionar/subtrair apenas os termos cujo valor absoluto 
seja maior ou igual a 0,001 pois dessa forma a diferença 
entre o valor atual e o novo valor produzido será menor 
que 0,001 ou seja o erro máximo admitido. Dica abs(x) 
retorna o valor absoluto de x. 
5) Para uma turma de 50 alunos, ler as quatro notas 
bimestrais de cada aluno, calcular e apresentar a média, 
seguida de uma das seguintes mensagens: 
a) “Parabéns” se aprovado com média maior que 8 
pontos; 
b) “Aprovado” se a média for maior ou igual a 7,0, mas 
menor que 8,0 pontos; 
 94
c) “Exame” se a média for menor que 7,0, mas igual ou 
superior a 4,0 pontos; 
d) “Reprovado” se a média for inferior a 4,0 pontos; 
6) Desenvolva um algoritmo para calcular a média de idade 
em anos de um grupo de indivíduos. O número de 
indivíduos no grupo é desconhecido, sendo que uma idade 
menor ou igual a zero marca o fim das entradas. 
7) Tem-se um conjunto de dados contendo o nome, a altura e 
o sexo (Masculino – M , Feminino – F) de um grupo de 50 
pessoas. Desenvolva um algoritmo que calcule e apresente 
as seguintes informações: 
a) O nome, o sexo e altura da pessoa mais baixa; 
b) A média de altura das mulheres; 
c) O número de homens; 
8) A uma temperatura de 50oC, um determinado líquido 
evapora 1% de seu volume a cada segundo. Desenvolva 
um algoritmo que a partir do volume inicial, calcule e 
apresente o tempo necessário para que o volume se torne 
inferior a 0,1 mililitro. O tempo deve ser apresentado em 
Horas, minutos e segundos. 
9) A diretoria de uma empresa de mensagens por telefone, 
encomendou uma pesquisa para saber se os seus clientes 
estão ou não satisfeitos com os serviços prestados. 
Desenvolva um algoritmo que calcule e apresente os 
 95
resultados abaixo, sabendo que foram entrevistados 50 
clientes sorteados ao acaso. 
a) O número de clientes que responderam sim; 
b) O número de clientes que responderam não; 
c) A porcentagem de clientes do sexo masculino que se 
dizem satisfeitos; 
d) A porcentagem de clientes do sexo feminino que se 
dizem satisfeitos; 
10) Deseja-se processar os dados de uma pesquisa a respeito 
do consumo mensal de energia elétrica em uma 
determinada cidade. Os dados disponíveis são: 
i) Preço do KWH; 
ii) Número do consumidor; 
iii) Quantidade de KWH consumidos no mês; 
iv) Código de tipo de consumidor ( 1-Residencial, 2-
Comercial, 3-Industrial); 
Desenvolva um algoritmo que aceite a entrada e processe 
os dados da pesquisa, calculando e apresentando os resultados 
abaixo. O algoritmo deverá interpretar a entrada “Número do 
Consumidor = 0” como sendo o marcador de fim dos dados a 
coletados; 
a) O maior consumo industrial; 
 96
 
enquanto ( < condição> ) faça 
< instrução a ser executada 
zero ou mais vezes > 
fim_enquanto 
 
 
enquanto ( < condição> ) faça 
{ 
< instruções a serem 
executadas zero ou mais vezes 
> 
} fim_enquanto 
< Instruções a serem
executadas zero ou mais
vezes>
< condição >
v
F
V
b) O menor consumo residencial; 
c) O total de consumo para cada categoria; 
d) A média de consumo de cada categoria; 
VI. 2 Estrutura Enquanto ... faça 
A estrutura enquanto....faça difere da estrutura 
faça...enquanto, apenas pelo fato da condição ser avaliada 
antes da primeira execução de suas instruções internas.Assim 
se a primeira avaliação da condição resultar falso, as 
instruções não serão executadas nenhuma vez. Isso pode ser 
útil em muitos casos. 
VI. 2.1 Sintaxe Básica 
 
 
 
 
 
 
 
 
Fluxograma 24 - Sintaxe da estrutura de repetição enquanto...faça 
 97
Exemplo 1 
Contar de 0 a 100 de dois em dois, no final apresentar a 
soma de todos os valores da seqüência. 
Entrada: 
1 Não há entradas; 
Saída: 
1 Seqüência de números inteiros, de zero a100, com 
incremento de 2 unidades; 
2 Somatório dos valores da seqüência. 
 
Algorítmo: 
Linguagem Natural 
1 Início; 
2 Inicializar um contador e um acumulador em zero; 
3 Enquanto o contador for menor ou igual a 100; 
a. Apresentar o valor do contador; 
b. Adicionar o valor do contador ao acumulador; 
c. Incrementar o contador em duas unidades; 
4 Apresentar o valor do acumulador 
5 Fim 
 
 98
Fluxograma: Português Estruturado 
 
 
 
 
 
 
 
 
 
 
Fluxograma 25 - Contando de 0 até 100 de dois em dois, calculando o 
somatório 
 
principal ( ) 
{ 
 inteiro Cont, Soma; 
 
 Cont ← 0; 
 Soma ← 0; 
 enquanto ( Cont ≤ 100) faça 
 { 
 escreva ( Cont ); 
 Soma ← Soma + Cont; 
 Cont ← Cont + 2; 
 } fim_enquanto; 
 escreva (“Soma: ”, Soma); 
}; 
Início
Cont = 0
Soma = 0
Cont <= 100
Cont
Soma = Soma + Cont
Cont = Cont + 2
Fim
V
F
R
"Soma:", Soma
 99
Exemplo 2 
Ler um seqüência de números inteiros positivos, cujo final 
é marcado pôr um valor menor ou igual a zero, esse valor deve 
ser desprezado. Apresentar ao final os seguintes resultados: 
a) A soma dos valores; 
b) A média dos valores; 
c) O maior Valor; 
d) O menor Valor; 
 
Entrada: 
1 Seqüência de valores numéricos positivos; 
Saída: 
1 Valores referentes aos itens a), b), c) e d) pedidos; 
 
Algorítmo: 
Linguagem Natural 
1 Inicializar um contador e um acumulador com 
zero; 
2 Solicitar/ler o primeiro valor; 
3 Inicializar os indicadores de Maior e Menor valor 
com o valor obtido no passo anterior; 
4 Repetir os passos abaixo, se e enquanto o ultimo 
valor lido for maior que zero; 
a. Somar o valor lido ao total do acumulador; 
 100
b. Incrementar o contador de valores válidos em 
uma unidade; 
c. Testar se o valor lido é maior que o tido como 
maior valor atual, em caso afirmativo esse 
passa a ser o maior valor atual; 
d. Testar se o valor lido é menor que o tido como 
menor valor atual, em caso afirmativo esse 
passa a ser o menor valor atual 
e. Ler o próximo valor 
5 Testar se o contador indica que a seqüência tinha 
pelo menos um valor positivo. 
a. Em caso afirmativo: calcular a média e 
apresentar os resultados pedidos nos itens (a), 
(b), (c) e (d). 
b. No caso do contador indicar que não houve 
valores positivos, apresentar a mensagem 
“Seqüência Vazia”. 
 101
Início
Soma = 0
Cont = 0
N
N > 0
Soma = Soma + N
Cont = Cont + 1
N
Maior = N
Menor = N
Maior < N
Maior = N
Menor > N
Menor = N
V
F
V
F
v
Fim
Cont > 0
"Sequência
vazia"
Media = Soma / Cont
"Soma: ", Soma,
"Media: ", Media,
"Maior: ", Maior,
"Menor: ", Menor
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 26 - Algoritmo para ler uma seqüência de números positivos e 
calcular - Média, Soma, Maior e Menor valor. 
 102
Português Estruturado: 
 
principal ( ) 
{ 
 inteiro Num, Soma, Cont; 
 inteiro Maior, Menor; 
 real Media; 
 
 Soma ← 0; 
 Cont ← 0; 
 escreva (“Digite a seqüência:”); 
 leia ( Num ); 
 Maior ← Num; 
 Menor ← Num; 
 enquanto ( Num > 0 ) faça 
 { 
 Soma ← Soma + Num; 
 Cont ← Cont + 1; 
 se ( Num > Maior ) então 
 Maior ← Num; 
 fim_se; 
 se ( Num < Menor ) então 
 Menor ← Num; 
 fim_se; 
 leia ( Num ); 
 }fim_enquanto; 
 se ( Cont > 0) então 
 { 
 Media ← Soma / Cont; 
 escreva (“Soma: ”, Soma); 
 escreva (“Média: ”, Media); 
 escreva (“Maior: ”, Maior); 
 escreva (“Menor: ”, Menor); 
 } 
 senão 
 escreva (“Sequência Vazia”); 
 fim_se; 
}; 
 
 103
Exemplo 3 
Verificar se um número qualquer (inteiro positivo) é ou não 
primo. Números negativos não devem ser aceitos. 
Entrada: 
1 Um número inteiro positivo 
Saída: 
1 A informação sobre o fato do número ser ou não 
primo 
 
Algorítmo: 
Linguagem Natural 
1 Início; 
2 Ler um número; 
3 Verificar se o número é negativo, se for voltar ao 
passo 2, caso contrário continua – passo 4; 
4 Um número N é primo se possui apenas dois 
divisores exatos ( 1 e ele mesmo N ), nesse caso 
calcular todos os divisores de N. 
5 Se N possui mais que dois divisores, então não é 
primo. Caso contrário, N é primo 
6 Fim; 
 
Fluxograma: ? 
Português Estruturado: ? 
 104
VI. Exercícios 
11) Desenvolver um algoritmo para apresentar todos os 
múltiplos de 3 compreendidos entre dois extremos (limite 
inferior e limite superior), a serem fornecidos pelo usuário. 
A informação de um limite inferior maior que o limite 
superior, deverá causar a apresentação de uma mensagem 
de erro. 
12) Desenvolver um algoritmo para o balanço de uma conta 
bancária obedecendo aos seguintes pontos. 
a) O saldo atual deve ser solicitado antes de iniciar o 
balanço. 
b) Poderão ser efetuados débitos e créditos; 
c) O algoritmo deverá finalizar quando ocorrer um 
depósito com valor nulo 0,00. 
d) Uma tentativa de débito com saldo insuficiente deverá 
gerar a mensagem “SALDO INSUFICIENTE”. 
13) Desenvolver um algoritmo para calcular e apresentar todos 
os divisores de um número inteiro positivo, fornecido pelo 
usuário. 
14) Desenvolver um algoritmo para calcular e apresentar os 50 
primeiros termos da série de Fibonacci2 : 1, 1, 2, 3, 5, 8, 
13, 21, 34,... . Esta se caracteriza pelo fato de que a partir 
do terceiro termo, cada termo é calculado somando-se os 
dois termos anteriores. 
 
2 Matemático ........................ 
 105
15) Refazer os exercícios de 1 a 10; 
VI. 3 Estrutura para....faça 
A forma adotada neste livro é a mesma suportada pela 
linguagem C, entretanto cabe ressaltar que em outras 
linguagens, PASCAL pôr exemplo, essa estrutura pode 
apresentar variações. 
A estrutura para....faça é uma estrutura de repetição que 
reúne em seu cabeçalho três seções: 1 - a inicialização de 
indexadores; 2 - uma condição lógica que define o ponto de 
ruptura do laço; 3 – o incremento dos indexadores. 
VI. 3.1 Sintaxe Básica 
Fluxograma: 
 
 
 
 
 
 
 
 
Fluxograma 27 - Fluxograma da estrutura de repetição para ... faça 
 
 
 
Inicialização, Condição, Incremento
< instruções a serem
repetidas zero ou mais
vezes>
v
R
F
 106
Português Estruturado: 
para ( <inicialização>; <condição>; <incremento> ) faça 
 < instrução a sere executada zero ou mais vezes >; 
fim_para;
 
para ( <inicialização>; <condição>; <incremento> ) faça 
{ 
 < instrruções a serem executadas zero ou mais vezes >; 
} fim_para; 
 
 
Exemplo 1 
Calcular o fatorial de um número, N inteiro não negativo 
informado pelo usuário. Números negativos devem gerar uma 
mensagem de erro. 
Entrada: 
1 Um número inteiro; 
Saída: 
1 Valor do fatorial do número dado, ou mensagem 
de erro; 
Algorítmo: 
 
 107
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 28 - Fluxograma do algoritmo para calculo do fatorial de um 
número 
Português Estruturado: 
 
 
 
 
 
 
 
 
principal ( ) 
{ 
 inteiro N, Fat,Cont; 
 
 escreva (“Fatorial de: ”); 
 leia ( N ); 
 se ( N < 0 ) então 
 escreva (“Valor inválido”); 
 senão 
 { 
 para (Fat = 1, Cont = 1; Cont ≤ N; Cont ← Cont + 1 ) faça 
 { 
 Fat ← Fat * Cont; 
 } fim_para; 
 escreva ( N, “! = ”, Fat); 
 } fim_se; 
}; 
Inicialização 
Condição 
Incremento 
Início
N
Fat=1, Cont=1; Cont <= N; Cont = Cont+1
Fat = Fat * Cont
N < 0
"Erro"
Fim
"Fatorial :",Fat
Fv
v
F
 108
Início
N = 1; N <= 300; N = N + 1
Fim
N
aux = 2; aux < K; Aux = Aux + 1
N mod Aux = 0
Primo = Falso;
pare;
Primo
Primo = Verdadeiro
K = N div 2;
v
F
v
F
R
FR
F
V
v
Exemplo 2 
Calcular e apresentar todos os números primos entre 1 e 
300; 
Fluxograma: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fluxograma 29 - Fluxograma para calcular e mostrar os números primos 
menores que 300 
 
Comando para 
interromper o laço; 
 109
Observe o comando pare apresentado no fluxograma 
acima, esse comando quando executado, interrompe o laço, 
passando a execução para a primeira instrução após a estrutura 
de repetição; O comando pare pode ser utilizado nas três 
estruturas vistas faça....enquanto, enquanto...faça e 
para....faça. 
Português Estruturado: 
principal ( ) 
{ 
 inteiro N, Aux; 
 lógico Primo; 
 
 para ( N =1; N≤ 300; N ← N + 1) faça 
 { 
 Primo = Verdadeiro; 
 para (Aux = 1; Aux ≤ N/2; Aux ← Aux + 1) faça
 { 
 se ( N mod Aux) então 
 { 
 Primo = Falso; 
 pare; 
 } fim_se; 
 } fim_para; 
 se ( Primo ) então 
 escreve ( N ); 
 fim_se; 
 } fim_para; 
}; 
 
 
No algoritmo acima, a verificação de divisibilidade é 
limitada pelo valor de K que é o quociente de N dividido por 
2. Essa limitação tem o objetivo de eliminar cálculos 
desnecessários, tornando o algoritmo mais eficiente. O valor 
de K poderia também ser calculado como sendo a raiz 
 110
quadrada de N, o que tornaria o algoritmo ainda mais eficiente 
quando da verificação de números grandes. 
O algoritmo apresentado poderia ser ainda melhorado na 
sua eficiência, eliminando-se os testes de divisibilidade pelos 
números pares maiores que dois. 
VI. Exercícios 
1) Desenvolver um algoritmo capaz de calcular mn onde m e 
n são fornecidos pelo usuário. O algoritmo deverá aceitar, 
como entradas validas, apenas números naturais. 
2) Incrementar o algoritmo desenvolvido no exercício 16, de 
modo que m e n possam ser números inteiros positivos 
e/ou negativos. 
3) Dados o primeiro termo e a razão de uma PA (progressão 
Aritmética). Calcular e apresentar os N primeiros termos. 
an = a1 + (n-1).r 
4) Dados o primeiro termo, a razão e o número de termos de 
uma PG (Progressão geométrica). Calcular e apresentar 
cada um dos termos. 
an = a1 . r(n-1) 
5) Refazer os exercícios 11 13 e 14 desse capitulo, utilizando 
a estrutura para...faça. 
 111
Capítulo VII Procedimentos e 
Funções 
Nos capítulos anteriores, foram introduzidos os conceitos 
básicos referentes à construção e expressão de algoritmos. O 
capitulo I introduziu à lógica binária, No capitulo II foram 
apresentadas algumas definições e no capitulo III, a arte da 
programação estruturada foi apresentada e com ela os 
primeiros algoritmos, eles eram muito simples e envolviam 
apenas instruções seqüências. 
No Capitulo IV, foram introduzidas as estruturas de seleção 
simples, composta e múltipla. O capitulo V introduziu, 
também, o PORTUGUÊS ESTRUTURADO como uma 
ferramenta para o desenvolvimento de algoritmos. Também 
foram apresentadas algumas técnicas de programação 
estruturada. Já no capitulo VI foram abordadas as estruturas de 
repetição e controle. 
No capitulo VII, será abordada um técnica de programação 
estruturada, cujo objetivo é reduzir a complexidade da 
programação. O segredo é dividir para conquistar. 
A partir deste capítulo, a representação de algoritmos na 
forma de fluxogramas, é posta de lado para dar lugar de 
preferência ao Português Estruturado. 
 112
VII. 1 Dividir para Conquistar 
O ponto chave da programação estruturada, é a redução da 
complexidade dos algoritmos, através da subdivisão desses. A 
solução de uma classe de problemas é obtida a partir da 
articulação de um conjunto de algoritmos independentes entre 
si. 
Neste livro são abordadas a duas construções mais 
conhecidas: procedimentos e funções. A linguagem C permite 
uma construção conhecida como “macro”, essa construção é 
muito utilizada pôr programadores C experientes. Detalhes 
sobre a construção “macro” e suas aplicações podem ser 
facilmente obtidas na respectiva literatura. 
Cada linguagem de programação possui características 
próprias que definem como um procedimento e/ou função 
deve ser declarado. Para a pseudo linguagem “PORTUGUÊS 
ESTRTURADO”, usada neste livro, será adotada uma sintaxe 
similar à da linguagem C. 
VII. 2 Procedimentos 
Um procedimento constitui-se basicamente de três partes: 
um cabeçalho, um bloco de declarações e um bloco de código, 
ou seja, o algoritmo. 
Os algoritmos que escrevemos até agora, exceto pela falta 
da palavra chave nada, constituíam-se na verdade de 
procedimentos cuja lista de parâmetros era vazia. 
 113
VII. 2.1 Sintaxe Básica 
Como comentado acima, todo procedimento possui um 
cabeçalho, um bloco de declarações e um algoritmo. A 
generalização apresentada na Fluxograma 30 - Sintaxe 
generalizada para a declaração de su-rotinas do tipo 
procedimento, define como uma construção algorítmica do 
tipo procedimento deve ser declarada, ou seja, a sua sintaxe 
básica. 
 
 
 
 
Fluxograma 30 - Sintaxe generalizada para a declaração de su-rotinas do 
tipo procedimento 
 
9 O Cabeçalho – O cabeçalho é constituído pela palavra 
chave nada, seguida pelo nome do procedimento. Após o 
nome do procedimento, entre parênteses, são listados os 
parâmetros. 
• A palavra chave nada identifica a construção como um 
procedimento, pois a mesma não retorna dados como 
seria o caso de uma função; 
• O nome do procedimento, identifica o mesmo de forma 
única. Num mesmo programa não deverão existir dois 
procedimentos como mesmo nome. Muitas linguagens 
permitem a sobrecarga do nome de uma rotina (duas ou 
mais rotinas compartilhando o mesmo nome), mas esse 
é um assunto fora do escopo deste livro. 
nada < Nome do procedimento> ( <lista de parâmetros>) 
{ 
 < Declarações de variáveis > 
 
 < Algoritmo > 
}; Cabeçalho 
 114
• A lista de parâmetros é uma porta de comunicação, que 
estabelecem quais são os valores, necessários à 
execução do algoritmo, que devem ser previamente 
informados. Essa porta de comunicação também pode 
ser usada para reportar os resultados processados pelo 
algoritmo. 
• As características dos parâmetros são: 
i _ Cada parâmetro possui um tipo associado e um 
nome que devem ser especificados. 
ii _ Um parâmetro pode ainda ser classificado em: 
(parâmetro de entrada, parâmetro de entrada e 
saída e parâmetro de saída). A classificação de 
um parâmetro será detalhada no próximo 
tópico. 
9 A Declaração de Variáveis – logo após o cabeçalho, na 
primeira linha após o símbolo { “inicio”, devem ser 
declaradas as variáveis auxiliares ( locais ) necessárias ao 
processamento das informações recebidas como parâmetros 
ou obtidas através de operações de entrada tais como: 
Entradas do usuário via teclado, mouse, scanner, leitor de 
código de barras, etc; Ou informações obtidas de 
dispositivos de armazenamento de massa (HD, Disquetes, 
etc.). 
9 O algoritmo – Após a declaração das variáveis locais 
necessárias, deixa-se uma ou mais linhas em branco, antes 
de iniciar a especificação do algoritmo que representa a 
efetivação do processamento estipuladopara o 
procedimento. 
 115
nada VolumeCilindro ( real Raio, real Altura, real *Volume) 
{ 
 real AreaBase; 
 
 AreaBase ← 3,1415 * Raio ^ 2; 
 Volume ← Altura * AreaBase; 
}; 
Parâmetros de entradas 
Variável Local 
Algoritmo 
Parâmetro de Saída 
Exemplo 1 
Sub-rotina do tipo procedimento cujo objetivo é calcular o 
volume de um cilindro qualquer. Esse procedimento recebe 
como parametros de entrada, os valores do Raio e da Altura do 
cilindro e altera o parâmetro de saída Volume, de modo que o 
mesmo passe a conter o volume do cilindro. 
 
 
 
 
 
 
Fluxograma 31 - Procedimento parametrizado para cálculo do volume de 
um cilindro 
 
Note que na declaração do parâmetro “Volume”, há um 
asterisco posto entre o seu tipo “real” e o seu nome. Como 
será explicado mais adiante, o asterisco diferencia esse 
parâmetro como sendo um parâmetro de saída, ou seja, o 
caminho pelo qual será reportado o resultado do 
processamento efetuado no algoritmo. 
VII. 2.2 Parâmetros 
Como visto anteriormente, a porta de comunicação de um 
procedimento é a sua lista de parâmetros. Cada parâmetro é 
declarado como uma variável e portanto possui um tipo 
associado (inteiro, real, caracter, lógico, etc.). 
 116
A especificação de um parâmetro pode indicar a 
necessidade de se prover uma informação necessária, sem a 
qual o procedimento não pode produzir o resultado esperado. 
A especificação de um parâmetro pode também definir que o 
mesmo representará um resultado produzido pelo 
procedimento, ou ainda as duas coisas. Assim, cada parâmetro 
deve ser classificado com pertencente a uma das classes 
abaixo: 
 
9 Parâmetro de entrada – Um parâmetro é classificado 
como “entrada”, quando o valor pôr ele representado é 
utilizado no processamento sem sofrer alterações que sejam 
relevantes fora do escopo do procedimento3. 
 
 Sintaxe 
 A declaração de um parâmetro de entrada, tem a 
mesma sintaxe da declaração de uma variável normal; 
 ( <Tipo Associado> <Nome> ) 
 No exemplo 1, os parâmetros “Raio” e “Altura” são 
parâmetros de entrada. 
 
9 Parâmetro de saída – Um parâmetro é classificado como 
“saída”, quando representa um valor que só terá 
significado após a execução do algoritmo expresso no 
corpo do procedimento. 
 
 
3 Entende-se como escopo do procedimento, o algoritmo nele especificado. 
 117
 Sintaxe 
 Para indicar que um parâmetro é do tipo saída, inclui-
se um asterisco entre a especificação do tipo associado 
ao parâmetro e o seu respectivo nome; 
 ( <Tipo Associado> * <Nome> ) 
 No exemplo 1, o parâmetro “Volume” é um parâmetro 
de saída 
 
9 Parâmetro de entrada/saída – Um parâmetro é 
classificado como “entrada/saída”, quando representa um 
valor que será inicialmente utilizado como entrada. O valor 
inicial do parâmetro é processado pelo algoritmo e 
transformado de modo a refletir o resultado do 
processamento. Após o término do algoritmo, o valor 
presente no parâmetro pode ser interpretado como 
parte/todo do resultado a ser reportado pelo procedimento. 
 
 Sintaxe 
 A declaração de um parâmetro classificado como 
entrada/saída, tem a mesma sintaxe de um parâmetro 
de saída; 
 ( <Tipo Associado> * <Nome> ) 
 
Para entender melhor a classificação dos parâmetros, é 
preciso primeiro entender como funciona a articulação entre 
os vários procedimentos que compõem um programa. Veja o 
tópico “Chamadas de Procedimentos”. A seguir 
 118
VII. 2.3 Chamadas de Procedimentos 
Os procedimentos podem ser classificados como 
procedimentos de biblioteca padrão e procedimentos definidos 
pelo usuário. Os procedimentos de biblioteca são aqueles que 
figuram como parte das bibliotecas básicas que integram uma 
linguagem e fornecem as operações elementares de 
entrada/saída, são exemplos leia (<lista de variáveis>), 
escreva (<Texto e/ou lista de variáveis> ), etc. Já, os 
procedimentos definidos pelo usuário, são aqueles criados e 
especificados pelo construtor do programa. 
VII. 2.3.1 Sintaxe 
A chamada de um procedimento definido funciona da 
mesma forma que a chamada de um procedimento de 
biblioteca padrão. Basta que se escreva o seu nome, seguido 
pelos respectivos parâmetros entre parênteses. 
<Nome do Procedimento> (<parâmetros enviados>); 
VII. 2.3.2 Associação dos Parâmetros 
Ao enviar um parâmetro, devemos lembrar da sua 
classificação: entrada, entrada/saída ou saída. 
9 Um parâmetro classificado como de “entrada”, configura 
uma associação pôr valor, o que significa que o importante 
é o valor do mesmo. Dessa forma, podemos enviar um 
literal, o valor armazenado em uma variável, ou até mesmo 
o resultado de uma instrução. Veja a seguir: 
 
 119
escreva (“Alo Mundo”); enviando um valor 
literal 
escreva ( 5 ); enviando um valor 
literal 
escreva ( Altura ); enviando o valor 
armazenado numa 
variável 
escreva ( Altura* AreaBase); enviando o resultado de 
uma instrução 
• A associação pôr valor define que o parâmetro 
especificado no cabeçalho do procedimento receberá 
uma cópia do valor enviado no ato da chamada do 
procedimento, dessa forma qualquer alteração feita no 
valor desse parâmetro, estará confinada nos limites do 
procedimento, ou seja, não será refletida no valor 
original. É como uma fotocópia de um documento, se 
rasgar a cópia nada acontece com o original. 
9 Se o parâmetro é classificado como parâmetro de saída, 
então está configurada uma associação pôr referência. 
Nesse tipo de associação espera-se que seja enviada uma 
variável, um local para armazenar o resultado de um 
processamento; o valor contido na variável enviada não é 
relevante pois será simplesmente substituído pelo valor 
produzido no procedimento. O envio de um literal, nesse 
caso será um erro de sintaxe. Veja os dois exemplos 
abaixo. 
leia ( Altura ); correto 
 120
leia ( 5 ); erro de sintaxe, o procedimento leia 
espera um parâmetro associado pôr 
referência (saída) e não um literal; 
• A associação pôr referência define um “apelido ou 
indicador” para a variável enviada como parâmetro, 
desta forma, tem outro nome para a mesma variável. 
Qualquer alteração efetuada sobre o valor armazenado 
num parâmetro associado pôr referência estará na 
verdade sendo efetuada sobre o valor armazenado na 
variável que foi enviada como parâmetro no ato da 
chamada ao procedimento. As modificações efetuadas 
sobre parâmetros de saída, não estão confinadas ao 
procedimento e refletem-se diretamente no valor da 
variável enviada como parâmetro no ato da sua 
chamada. 
 
9 Os parâmetros classificados como entrada/saída também 
configuram uma associação pôr referência, a única 
diferença é que o valor armazenado na variável enviada 
como parâmetro, não será simplesmente descartado, ele 
será inicialmente usado como um parâmetro de entrada, 
sendo substituído pelo resultado do processamento. 
 121
VII. 2.4 Programas 
No capitulo II, “programa” foi definido como sendo um 
conjunto de um ou mais algoritmos, articulados de forma a 
proverem solução para uma ou mais classes de problemas. 
Agora neste capitulo, foi mostrado que cada um desses 
algoritmos é um procedimento. Um programa, pôr mais 
simples que seja, constará sempre com pelo menos um 
procedimento chamado principal. O procedimento nomeado 
“principal”, é o ponto de partida do programa, os demais 
procedimentos serão chamados a partir dele. 
Um procedimento está para outro como uma instrução, que 
pode ser expressa em qualquer parte do algoritmo. A chamada 
de um procedimento é trivial, e embora não tenha sido 
explicitado, estamos fazendo uso delas desde os primeiros 
exercícios. As instruções leia (<variável>) e escreva (< Texto 
e/ou variáveis>), são naverdade chamadas a procedimentos 
incorporados como parte da pseudo linguagem de 
programação. Toda linguagem possui um conjunto de 
bibliotecas de procedimentos e funções padrão, que permitem 
realizar as tarefas básicas de entrada e saída, cálculos 
matemáticos, manipulação de arquivos, etc. 
Para que um procedimento possa ser invocado, é necessário 
que o mesmo seja parte da linguagem, ou esteja definido no 
programa, acima do ponto de chamada. Também é necessário 
prover os parâmetros necessários, conforme a definição no 
cabeçalho do mesmo. 
 
 122
Exemplo 1 
 
 
 
 
 
 
 
 
 
 
 
 
 
Neste exemplo o procedimento chamado VolumeCilindro, 
possui dois parâmetros de entrada “Altura, Raio” e um 
parâmetro de saída “Volume”. Também está ilustrada a 
chamada do mesmo a partir do procedimento principal. 
Observe que os nomes das variáveis no procedimento 
principal não são iguais aos nomes dos parâmetros requeridos 
pelo procedimento “VolumeCilindro”, isso acontece porque, o 
importante não é o nome da variável e sim a forma como o 
parâmetro está associado. Note ainda que a variável “V” não 
recebeu nenhum valor no procedimento “principal”, mas ao 
ter sido enviada como parâmetro associado pôr referência, 
teve seu valor modificado no procedimento 
nada VolumeCilindro ( real Raio, real Altura, real *Volume) 
{ 
 real AreaBase; 
 
 AreaBase ← 3,1415 * Raio ^ 2; 
 Volume ← Altura * AreaBase; 
}; 
 
 
nada principal () 
{ 
 real R, H, V; 
 
 escreva (“Programa volume de CILINDROS ”); 
 escreva(“Raio da Base em cm: ”); 
 leia ( R ); 
 escreva(“Altura em cm: ”); 
 leia ( H ); 
 VolumeCilindro ( R, H, V); 
 Escreva (“O volume é:”, V, “cm3”); 
}; 
Chamada de procedimento 
 123
“VolumeCilindro”. Cabe lembrar que pôr terem sido enviadas 
como parâmetros associados pôr valor, mesmo que o 
procedimento “VolumeCilindro” modificasse os valores 
recebidos em “Raio” e “Altura”, essas alterações não seriam 
refletidas nas variáveis “R “e “H”. 
 
Exemplo 2 
Montar uma calculadora para operar com as quatro 
operações básicas (Adição, Subtração, Multiplicação e 
Divisão). A cada nova conta, são informados os dois valores e 
a operação. 
Entrada: 
1 Dois números quaisquer; 
2 Um símbolo ( +, - , *, /) que indica a operação; 
Saída: 
1 O resultado da operação pedida sobre os valores 
informados; 
Linguagem Natural 
1 Solicitar/Ler dois números reais; 
2 Solicitar/Ler a operação; 
3 Chamar o procedimento de calculo para efetuar a 
operação pedida; 
4 Informar os resultados; 
5 Perguntar se o usuário quer ou não fazer outra 
conta; 
 124
6 Enquanto o usuário responder sim, repetir os 
passos de 1 a 5; 
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*----------------------------------------------------------------------------------- 
 Procedimento para calculo das quatro operções matemáticas básicas 
Parâmetros de entrada : 
 A, B → Operandos; 
 Op → Operador; 
Parametros de saída: 
 R → Resultado da operção 
 Ok → Status de erro; 
----------------------------------------------------------------------------------*/ 
 
nada Calcula ( real A; real B; caracter Op; real *R; logico *Ok ) 
{ 
 Ok ← VERDADEIRO; 
 caso (Op) seja 
 { 
 ‘+’ : 
 R ← A + B; 
 pare; 
 ‘−’ : 
 R ← A - B; 
 pare; 
 ‘*’ : 
 R ← A * B; 
 pare; 
 ‘/’ : 
 se ( B ≠ 0 ) então 
 R ← A / B; 
 senão 
 Ok ← FALSO; 
 fim_se; 
 pare; 
 
 não_seja 
 Ok ← FALSO; 
 }; 
}; 
 125
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*----------------------------------------------------------------------------------- 
 Procedimento principal para comandar o calculo das quatro operções 
matemáticas básicas 
 
Parâmetros de entrada : 
 Nenhum 
Parametros de saída: 
 Nenhum 
----------------------------------------------------------------------------------*/ 
 
nada principal ( ) 
{ 
 real A, B, R; 
 caracter Op, Resp; 
 logico Ok; 
 
 faça 
 { 
 escreva (“A: ”); 
 leia ( A ); 
 escreva (“B: ”); 
 leia ( B ); 
 escreva (“Operação: ”); 
 leia ( Op ); 
 Calcula ( A, B, Result, Ok); 
 se ( Ok ) então 
 escreva ( Result ); 
 senão 
 escreva ( “Erro”); 
 fim_se; 
 escreva (“Continuar (S/N) ?”); 
 leia ( Resp ); 
 } enquanto ( ( Resp = ‘S’ ) ou ( Resp = ‘s’ )); 
}; 
 126
VII. Exercícios 
1) Escrever uma rotina “QuantosDias”, cujos parâmetros 
sejam: Ano, Mês, Dia, N. Após o processamento, N 
deverá representar o número de dias transcorridos, a partir 
de 1o de janeiro de 2000 até a data informada. Lembre-se 
que o mês de fevereiro tem 28 ou 29 dias, dependendo do 
ano ser ou não bissexto. 
 
2) Escreva uma rotina para trocar os valores de duas 
variáveis A e B entre si. 
 
3) Montar um programa, baseado em procedimentos, para 
apresentar a taboada de um número qualquer fornecido 
pelo usuário. 
 
4) Refaça o exemplo 2, de modo que cada uma das operações 
seja efetuada pôr um procedimento em separado. 
 
Escreva um programa para cálculo de áreas de figuras 
geométricas planas regulares. O programa deve possuir um 
menu que ofereça pelo menos 5 opções de figuras diferentes e 
uma opção “sair” para encerrar o programa. Dica: Use a 
estrutura de seleção múltipla para controlar o menu. 
 127
VII. 3 Funções 
Em termos de construções algorítmicas, uma função difere 
de um procedimento pôr 2 aspectos: 1 – Não são admitidos 
parâmetros de “saída” ou “entrada/saída”. 2 – O resultado 
produzido pôr uma função é reportado no próprio nome da 
função. 
Sintaxe: 
 
 
 
 
 
 
9 Tipo do retorno – É o tipo associado ao valor retornado 
pela função, ou seja o valor que a função produziu como 
resultado e que deve ser reportado ao chamador. Uma 
função é como uma expressão matemática, que após ser 
avaliada produz um resultado. 
9 Nome da função – É o nome dado à função, a sua 
identificação; 
9 Lista de parâmetros – A lista de parâmetros tem 
exatamente a mesma constituição usada com 
procedimentos. É aconselhável que a lista de parâmetros 
das funções possuam apenas parâmetros do tipo “entrada”, 
ou seja, associados pôr valor. 
<tipo do retorno> < Nome da função> ( <lista de parâmetros>) 
{ 
 < Declarações de variáveis > 
 
 < Algoritmo > 
 
}< Nome da função>; 
 
No algoritmo deverá aparecer o comando 
retorne (<Dado a ser retornado>) 
 128
9 Retorno – A instrução retorne(<dado>), é de presença 
obrigatória no algoritmo de toda e qualquer função. Essa 
instrução efetiva o término do processamento. O valor 
constante em “dado” é reportado como resultado da função. 
Uma função pode ser vista como uma variável, a diferença 
é que ela não armazena, calcula, o seu valor. Dessa forma, 
funções podem figurar como operandos em expressões 
matemáticas, desde que o tipo de retorno seja numérico. 
Funções também podem figurar como parâmetros associados 
pôr valor (“entrada”) para outras funções e/ou procedimentos. 
Exemplo 1 
Montar um programa para verificar se um numero é par ou 
impar. Tal programa deve possuir uma estrutura de repetição 
para efetuar a verificação de uma seqüência de N números 
inteiros positivos, sendo que o final da seqüência é marcada 
pôr um valor negativo. 
Entrada: 
1 Uma seqüência de números inteiros; 
Saída: 
1 Uma mensagem “Par” ou “Impar” para cada 
número da seqüência, conforme o caso. 
Linguagem Natural 
1 solicitar/Ler um número; 
2 Se o número obtido for positivo, chamar a função 
de verificação éImpar; 
 129
3 Mostra a mensagem “PAR” ou a mensagem 
“IMPAR”, de acordocom o resultado da função 
éImpar; 
4 Repetir os passos 1,2,3 enquanto o número 
fornecido for positivo. 
 
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* -------------------------------------------------------------------- 
função para verificar se um número é par ou impar 
Parâmetro de entrada: 
 N → número a ser verificado; 
Retorno : 
 Verdadeiro caso N seja impar, 
 Falso caso N não seja impar; 
----------------------------------------------------------------------*/ 
 
logico éImpar ( inteiro N ); 
{ 
 se ( N mod 2 ≠ 0 ) então 
 retorne( VERDADEIRO ); 
 fim_se; 
 retorne( FALSO ); 
}éImpar; 
 130
 
 
 
 
 
/*-------------------------------------------------------------------- 
Procedimento principal 
Descrição: 
 Lê uma sequência de números, informando um a 
um se é PAR ou IMPAR. Um número não positivo finaliza o 
programa. 
--------------------------------------------------------------------*/ 
 
nada principal () 
{ 
 inteiro Numero; 
 
 faça 
 { 
 escreva (“Digite um número”); 
 leia( Numero ); 
 se ( Numero > 0 ) então 
 se ( éImpar (Numero) ) então 
 escreva(“IMPAR”); 
 senão 
 escreva(“PAR”); 
 fim_se; 
 fim_se; 
 }enquanto ( Numero > 0); 
}principal; 
 131
Exemplo 2 
Montar um programa calculadora com as operações 
Adição e Subtração. O programa deve possuir, além do 
procedimento principal, funções para cálculo das operações 
suportadas; Um procedimento para solicitação/leitura dos 
operandos, processamento da operação pedida através da 
chamada às respectivas funções e apresentação dos resultados. 
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*-------------------------------------------------------------------- 
Função para efetuar a operação de ADIÇÃO; 
Parametros de entrada: 
 NumA, NumB → valores reais a serem somados; 
Retorno: 
 O resultado da operação NumA + NumB 
----------------------------------------------------------------------*/ 
 
real Soma ( real NumA; real NumB) 
{ 
 retorne ( NumA + NumB ); 
};// Soma 
/*-------------------------------------------------------------------- 
Função para efetuar a operação de SUBTRAÇÃO; 
Parametros de entrada: 
 NumA, NumB → valores reais a serem subtraídos; 
Retorno: 
 O resultado da operação NumA - NumB 
----------------------------------------------------------------------*/ 
 
real Subtração ( real NumA; real NumB) 
{ 
 retorne ( NumA - NumB ); 
};// Subtração 
 132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*-------------------------------------------------------------------- 
Procedimento de controle; 
Descrição 
 Este procedimento controla a interação com o usuário e 
comanda a execução das operações solicitadas. 
----------------------------------------------------------------------*/ 
 
nada Calculadora ( ) 
{ 
 real N1, N2; 
 Carcacter Op, Resp; 
 
 faça 
 { 
 escreva ( “A: ”); 
 leia ( N1 ); 
 escreva ( “B: ”); 
 leia ( N2 ); 
 escreva ( “Operação: ”); 
 leia ( Op ); 
 caso ( Op ) seja 
 { 
 ‘+’ : 
 escreva ( Soma (N1, N2 ) ); 
 ‘-’ : 
 retorne ( Subtração ( N1, N2 ); 
 
 não_seja 
 escreva(“Operação Não Suportada”); 
 }; //caso 
 escreva (“Nova conta (S/N):”); 
 leia ( Resp ); 
 } enquanto ( Resp ≠ ‘N’ e Resp ≠ ‘n’); 
}; // Subtração 
 133
VII. Exercícios 
5) Amplie o exemplo 2, de modo a suportar também as 
operações de multiplicação, divisão e exponenciação. 
Lembre-se que divisão pôr zero não existe; 
 
6) Refaça o exercício 3, utilizando funções. 
 
7) Monte um programa de cálculo para as grandezas físicas 
do movimento retilíneo e uniforme “MRU”. O programa 
deve considerar todas as possibilidades de incógnitas que 
envolvam as seguintes equações: 
a) Vf = Vi + a.Δt 
b) ΔE = Vi.t + ½.a.Δt2 
 
8) Escreva uma função que: 1- receba como parâmetros, as 
coordenadas (x, y) de dois pontos quaisquer do plano 
cartesiano; 2 – Calcule e retorne a respectiva distância 
entre eles. d2 = (X2-X1)2 + (Y2-Y1)2. 
 
9) Escreva uma função que receba como parâmetro um 
número inteiro N, a função deverá retornar: -1 caso o 
 134
número seja negativo caso contrário deverá retornar um 
valor correspondente a N! (Fatorial de N). 
 
10) Escreva uma função capaz de calcular o máximo divisor 
comum (MDC) entre dois números inteiros. 
 
11) Escreva uma função para calcular o mínimo múltiplo 
comum (MMC) entre dois números inteiros. 
 
12) Escreva uma função que, dado um número inteiro N, 
calcule e retorne a soma dos divisores desse número, 
exceto ele próprio. 
 
 
 
 
 
 135
Capítulo VIII Estruturas de 
Dados Homogêneas 
Os capítulos anteriores tiveram como ênfase a apresentação 
e o detalhamento das construções algorítmicas utilizadas na 
programação estruturada: comandos seqüenciais, estruturas de 
seleção, estruturas de repetição e controle, procedimentos e 
funções. 
A partir deste capítulo, a ênfase passa a ser as estruturas de 
armazenamento de dados/informações. As primeiras estruturas 
a serem abordadas são as estruturas homogêneas ( Vetores e 
Matrizes). Ao contrário das variáveis vistas até o momento, 
variáveis declaradas como sendo estruturas homogêneas, 
permitem o armazenamento de vários valores de um mesmo 
tipo. Esses valores são armazenados seqüencialmente, sendo 
que o acesso e a manipulação individual de cada valor é 
realizada pela indicação da sua posição “índice” dentro da 
estrutura. 
 136
VIII. 1 O que é um Vetor ? 
Um vetor pode ser visto como sendo uma coleção 
enumerada de elementos de um mesmo tipo. Em se tratando 
de programação de computadores, a declaração de uma 
variável como sendo um vetor, indica a reserva de uma 
quantidade de memória contígua, para o armazenamento de 
um ou mais elementos de um determinado tipo. 
VIII. 1.1 Vetores Unidimensionais 
Um vetor unidimensional, é uma estrutura matricial 
composta de uma única linha e várias colunas. Cada elemento 
da matriz tem capacidade para armazenar um valor do tipo 
especificado na declaração do vetor. A figura abaixo ilustra 
graficamente um vetor com capacidade para 10 números 
inteiros. 
Índices 0 1 2 3 4 5 6 7 8 9 
Valor armazenado 23 45 12 3 0 -2 6 87 10 -6 
 
VIII. 1.1.1 Sintaxe Básica 
A declaração de uma variável, como sendo um vetor 
unidimensional, é simples como mostrado a baixo: 
<Tipo> <Nome da variável> [<número de elementos>]; 
 
Exemplos: 
 137
9 inteiro iVetor[10]; →Um vetor com dez 
elementos do tipo 
inteiro; 
9 real rVetor [50]; →Um vetor com 
capacidade para 
armazenar cinqüenta 
valores numéricos 
reais; 
9 caracter cVetor [35]; →Um vetor com 
capacidade para 
armazenar 35 
caracteres; 
VIII. 1.1.2 Acesso aos Elementos 
O acesso aos elementos individuais dos vetores 
unidimensionais é efetuado através da indicação do índice do 
elemento dentro do vetor. O primeiro elemento tem índice 
zero (0), o segundo tem índice um (1), o terceiro dois (2) e 
assim sucessivamente, sendo que o elemento N estará, 
portanto na posição de índice N-1. 
 
Exemplos: 
Considerando duais variáveis vetoriais unidimensionais 
VetA e VetB, ambas com capacidade para 10 números 
inteiros, temos: 
 
9 VetA ← VetB; →Não é permitido. 
 138
Variáveis vetoriais não podem ser atribuídas diretamente. 
A cópia deve ser realizada elemento a elemento. Para tal 
consideraremos que a biblioteca padrão de nossa pseudo 
linguagem possua procedimentos de cópia de vetores cujos 
elementos sejam de um dos tipos básicos. 
Estes procedimentos têm os seguintes cabeçalhos:• CopiaVetInt (inteiro VetOrig[]; inteiro VetDest[]; 
inteiro N ) 
i _ A declaração – inteiro VetOrig[] – indica que 
“VetOrig” é um parâmetro do tipo vetor de inteiros, 
com qualquer número de elementos. O mesmo 
ocorre com “VetDest”. 
Obs: Parâmetros vetoriais, sempre serão 
associados pôr referência. 
ii _ O parâmetro “N” identifica/informa qual é o 
número de elementos de “VetOrig” e “VetDest”; 
iii _ O procedimento CopiaVetInt, realiza a cópia dos 
elementos de “VetOrig” para “VetDest”; 
iv _ No exemplo, o correto seria: CopiaVetInt (VetA, VetB, 
10); 
v _ O vetor destino VetDest passado como parâmetro 
deve necessariamente ter tamanho igual ou superior 
ao passado como origem VetOrig para que a copia 
possa ser efetuada com sucesso. 
 
• CopiaVetReal ( real VetOrig[]; real VetDest[]; inteiro 
N ) 
 139
• CopiaVetCar ( caracter VetOrig[]; caracter VetDest[]; 
inteiro N ); 
i _ Como atividade, escreva o corpo dos três 
procedimentos de cópia de vetores citados acima. 
 
Outros comandos: 
9 VetA [ 0 ] ← VetB [ 0 ]; 
Indica a atribuição do valor armazenado no primeiro 
elemento de VetB, para o primeiro elemento de VetA. 
 
9 VetB [ 10 ] ← VetA [ 4 ]; 
Erro, os índices de um vetor começam em 0 (zero), logo 
o ultimo elemento de VetB está na posição 9, dado que 
VetB tem 10 elementos. A instrução indica uma 
atribuição para o 11o elemento de VetB, mas esse vetor 
tem apenas 10 e não 11 elementos. 
 
9 VetA [ 4 ] ≥ VetA [ 5 ] 
Comparação entre dois elementos do mesmo vetor; 
9 VetA [ i ] ← VetB [ j ]; 
Indica a atribuição do valor armazenado na posição j de 
VetB, para a posição i de VetA. É importante lembrar 
que tanto i como j devem ser variáveis inteiras e seus 
respectivos valores devem figurar entre 0 e 9, pois os 
vetores VetA e VetB possuem 10 elementos cada. 
 
 140
9 leia ( VetB [ 7 ] ); 
Indica a operação de entrada/ armazenamento de um 
valor inteiro para o oitavo elemento de VetB; 
• A entrada de valores para os elementos de um 
vetor, deve ser feita elemento a elemento. Não é 
possível especificar a leitura de todos os elementos 
de um vetor, numa única instrução. 
i _ Como atividade, escreva um procedimento para 
leitura e preenchimento de um vetor com N 
elementos do tipo inteiro. 
 
9 leia ( VetB ); 
Erro, não está indicado qual é o elemento do vetor que 
irá receber o valor; 
 
9 leia ( VetB[i] ); 
Indica a operação de entrada/armazenamento de um 
valor inteiro para posição i de VetB. A variável i deve 
ser do tipo inteiro, e seu valor deve estar entre zero e 9, 
pois VetB possui 10 elementos. 
 
9 escreva ( VetA ); 
Erro, não foi especificado qual é o elemento de VetA 
que deve ser apresentado no vídeo. A apresentação dos 
elementos de um vetor, deve ser efetuada elemento a 
elemento. Para apresentar todos os elementos de um 
vetor, é necessária uma estrutura de repetição. 
 141
 
i _ Como atividade, escreva um procedimento para 
apresentar todos os caracteres armazenados 
num vetor com N elementos. 
VIII. 1.2 Vetores Bidimensionais – Matrizes 
As estruturas matriciais bidimensionais, possuem a mesma 
definição dos vetores unidimensionais, diferindo apenas no 
fato de que tem-se não apenas um índice, mas um par de 
índices (linha, coluna), para identificar cada elemento da 
matriz; A figura abaixo ilustra uma construção matricial com 
5 linhas e 6 colunas de inteiros; 
 Colunas
0 1 2 3 4 5 
L
i
n
h
a
s
 
0 -49 45 5 3 65 -654 
1 67 32 6 2 2 3 
2 89 -53 5 0 765 1 
3 100 1 6 0 2 0 
4 -345 0 9 -23 1 857 
 
VIII. 1.2.1 Sintaxe Básica 
A declaração de uma variável, como sendo uma matriz 
bidimensional, é simples como mostrado a baixo: 
<Tipo> <Nome da variável> [<número de linhas>][<número de 
colunas>]; 
 142
Exemplos: 
9 inteiro iMat[5][10]; 
Uma matriz de números inteiros, com cinco linhas e dez 
colunas; 
 
9 real rMat [10][5]; 
Uma matriz com capacidade para armazenar cinqüenta 
valores numéricos reais; Dez linhas e cinco colunas. 
 
VIII. 1.2.2 Acesso aos Elementos 
O acesso aos elementos de uma construção matricial 
bidimensional, é realizado de forma semelhante aos vetores 
unidimensionais, diferindo apenas no fato de ser necessário 
informar dois valores de índice em vez de um. 
 
Exemplos: 
Considere a matriz iMat do exemplo dado acima, abaixo 
são dadas operações exemplo, válidas e inválidas. 
9 leia( iMat ); 
Operação inválida, a leitura de uma matriz deve ser 
realizada elemento a elemento; 
 
9 leia( iMat [ 1 ] [ 0 ] ); 
 143
Operação válida. Indica a leitura “entrada” de um valor 
para a 2a linha 1a coluna; 
 
9 escreva ( iMat [ 4 ] [ 9 ] ); 
Operação válida. Indica a apresentação, no vídeo, do 
valor armazenado na 5a linha e 10a coluna; 
 
9 iMAt [ 2 ] [ 8 ] ← 5; 
Operação válida. Indica a atribuição do valor 5 para o 
elemento a2,8 da matriz ( 3a linha e 9a coluna); 
 
9 iMat [ 0 ] [ 10 ] ← 9; 
Operação inválida. Indica a atribuição do valor 5 para a 
posição 1a linha e 11a coluna, entretanto a matriz iMat 
tem apenas 10 colunas; 
 
Exemplo 1 
Montar uma rotina para realizar a leitura de um vetor 
unidimensional com N elementos; 
 
 144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Comentários: 
 iVet é um parâmetro do tipo vetor/matriz 
unidimensional com qualquer número de elementos. Todo 
parâmetro matricial é associado pôr referência, portanto não é 
necessário antepor o ‘*’ ao nome da variável; 
 N é um parâmetro associado pôr valor e representa o 
tamanho do vetor; 
 Na estrutura para...faça, observe que a condição de 
prosseguimento é i < N e não i ≤ N, isso porque as posições 
são enumeradas a partir de 0 e não de 1; 
/*-------------------------------------------------------------------- 
Procedimento: Leitura de Vetor; 
Parâmetros: 
 iVet[ ] → Vetor de números inteiros; 
 N → Tamanho do vetor; 
Descrição: 
 Este procedimento realiza a leitura de um vetor 
unidimensional de inteiros, com N elementos; 
----------------------------------------------------------------------*/ 
 
nada LeVetInt (inteiro iVet [ ]; inteiro N) 
{ 
 inteiro i; 
 
 para( i ← 0; i < N; i ← i + 1) faça 
 { 
 escreva ( i, “o elemento: ”); 
 leia ( iVet[ i ]); 
 }fim_para; 
}; // LeVetInt 
 145
Exemplo 2 
Escrever uma rotina para somar duas matrizes 
bidimensionais de inteiros; 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Comentários: 
 i, j são variáveis locais auxiliares, são usadas para 
percorrer as linhas e as colunas das matrizes. O primeiro laço 
percorre linha pôr linha, enquanto que o laço mais interno 
percorre os elementos de cada linha, ou seja, as colunas. 
 
/*-------------------------------------------------------------------- 
Procedimento: Soma de Matrizes Bidimensionais; 
Parâmetros: 
 iMatA[ ][ ], iMatB → Matrizes a serem somadas; 
 iMatC [ ][ ] → Matriz Soma iMatA + iMatB 
 M,N → Dimensões das Matrizes; 
Descrição: 
 Este procedimento realiza a soma de matrizes bidimensionais 
com M linhas e N colunas, o resultado é armazenado em iMatC; 
----------------------------------------------------------------------*/ 
 
nada SomaMatInt ( inteiro iMatA [ ][ ]; inteiro iMatB [ ][ ]; 
inteiro iMatC [ ][ ]; inteiro M; inteiro N) 
{ 
 inteiro i, j; 
 
 para ( i ← 0; i < M; i ← i + 1) faça //percorre as linhas 
 { 
 para ( j ← 0; j < N; j ← j + 1) faça //percorre as colunas 
 { 
 iMatC[ i ][ j ] ← iMatA[ i ][ j ] + iMatB[ i ][ j ]; 
 }fim_para; 
 }fim_para; 
}; // SomaMatInt 
 146
VIII. Exercícios 
1) Escreva uma rotina para montar a matriz transposta, de 
uma matriz dada. 
 
2) Escreva uma rotina (procedimento ou função) para efetuar 
oproduto de duas matrizes AM1,N1 e BM2,N2. Lembre-se 
que A x B só será possível se N1 = M2. 
 
3) Escreva uma rotina para efetuar a diferença entre duas 
matrizes de ordem M x N. 
 
4) Escreva um programa para trabalhar com matrizes 2x2 e 
3x3. O programa deve interrogar o usuário sobre a ordem 
da matriz e qual a opção desejada (Soma, Diferença, 
Produto, transposta), então deverá solicitar a entrada dos 
dados necessários, efetuar a operação pedida e apresentar 
os resultados. A leitura / apresentação dos elementos das 
matrizes, deve ser feita de modo a identificar claramente a 
posição de cada elemento na matriz. 
 
5) Escreva um programa que solicite ao usuário a entrada de 
20 números inteiros armazenando esses num vetor. A 
seguir inverter o vetor e apresentar os vinte valores na 
nova ordem. 
 147
6) Escreva um programa que solicite ao usuário a entrada de 
uma seqüência de caracteres, armazenando-os num vetor 
de 100 posições. A seguir permitir ao usuário consultar o 
número de vezes que um dado caracter aparece na 
seqüência. Deve ser permitido, ao usuário, efetuar quantas 
consultas desejar. 
 
7) Dada a rotina abaixo, simule uma chamada com um vetor 
de 10 posições e faça o teste de mesa. Você deve montar 
uma representação gráfica do vetor e efetuar sobre ele as 
operações indicadas na rotina. Depois explique com suas 
palavras: O que faz a rotina ? Qual é o princípio utilizado 
nesse algoritmo? Qual o melhor nome para essa rotina? 
 
 
 
 
 
 
 
 
 
nada XXXXXX ( inteiro iVet [ ]; inteiro N) 
{ 
 inteiro i, j, Aux; 
 
 para ( i ← 0; i < N-1; i ← i + 1) faça 
 { 
 para ( j← i + 1; j < N; j ← j + 1) faça 
 { 
 se ( iVet [ i ] > iVet [ j ] ) então 
 { 
 Aux ← iVet [ i ]; 
 iVet [ i ] ← iVet [ j ]; 
 iVet [ j ] ← Aux; 
 }fim_se; 
 }fim_para; 
 }fim_para; 
 
};//XXXXXX 
 148
Capítulo IX Ordenação e Pesquisa 
em Vetores 
Os vetores unidimensionais são estruturas de dados que nos 
permitem escrever algoritmos poderosos e aprimorados para o 
tratamento das informações armazenadas. Entre os pontos 
mais interessantes, destacam-se a ordenação e a pesquisa. 
Embora esse seja um tema para um livro de estruturas de 
dados, farei aqui uma pequena introdução dos conceitos de 
ordenação e pesquisa de dados armazenados em estruturas do 
tipo vetor. 
Neste capítulo você terá um primeiro contato com as 
técnicas de ordenação e pesquisa. Inicialmente é tratada a 
pesquisa seqüencial, aplicada sobre dados não ordenados. Em 
seguida é apresentado o método de ordenação conhecido como 
bolha e posteriormente o método de pesquisa binária. 
 
 149
IX. 1 Pesquisa Seqüencial 
Considere um vetor contendo 10 números inteiros, como o 
representado na figura abaixo: 
Índices 0 1 2 3 4 5 6 7 8 9 
Valor armazenado 23 45 12 3 0 -2 6 87 10 -6 
 
Observe que o valor “0” encontra-se na 5ª posição (índice 
4), nós seres humanos inteligentes podemos chegar a essa 
conclusão facilmente, bastando para tal olharmos o vetor 
como um todo. Mas imagine que esse vetor não tivesse apenas 
10 elementos mas sim 10.000, dessa forma não seria assim tão 
simples verificar em qual posição um determinado valor se 
encontra, dado que não somos capazes de observar, com 
clareza, uma tal quantidade de números de uma só vez. 
Em termos computacionais é um pouco mais crítico, o 
computador só é capaz de comparar o valor procurado com 
uma posição do vetor pôr vez, assim é necessário efetuar uma 
varredura, iniciando em uma das extremidades do vetor e 
percorrendo-o em direção à outra extremidade, comparando o 
valor procurado com o valor armazenado, até encontra-lo em 
uma dada posição. Pôr outro lado, se percorrer todo o vetor, 
de uma extremidade até a outra, sem encontrar o valor 
procurado, é porque o mesmo está presente no vetor. Esse tipo 
de varredura é conhecido como Pesquisa Seqüencial. 
A função dada abaixo tem pôr objetivo verificar, através de 
uma pesquisa seqüencial, se um determinado valor procurado 
encontra-se ou não presente num determinado vetor. Discuta-a 
com seus colegas de estudo. 
 150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Embora a pesquisa seqüencial seja eficaz, ela não é nada 
eficiente e só é indicada para casos em que os valores 
armazenados não estão ordenados. Suponha pôr exemplo um 
vetor de 10000 elementos, ordenado de forma crescente. 
Suponha também que o valor procurado está na posição 6743, 
serão necessárias 6744 comparações para a rotina poder 
concluir que o referido valor objeto da pesquisa está 
armazenado nessa posição. Agora pense e responda: Quantas 
comparações seriam necessárias para concluir que o valor 
procurado não está presente no vetor? 
/*------------------------------------------------------------------------------------ 
Função: PesquisaSequencial; 
Parâmetros: 
 iVet → Vetor de números inteiros, contendo os valores sobre os 
quais será efetuada a pesquisa; 
 N → Número de elementos do vetor; 
 VlrPesq → Valor objeto da pesquisa; 
Retorno: 
 Um valor de 0 até N-1, indicando a posição no vetor onde o valor 
procurado foi encontrado. 
 -1, Indica que o valor procurado não está presente no vetor. 
-------------------------------------------------------------------------------------*/ 
 
inteiro PesquisaSequencial (inteiro iVet [], inteiro N, inteiro VlrPesq ) 
{ 
 inteiro i; 
 
 para (i ← 0; i < N; i ← i + 1) faça 
 { 
 se ( iVet[ i ] = VlrPesq ) então 
 retorne ( i ); // Encontrado 
 fim_se; 
 }fim_para; 
 retorne ( -1 ); //Não encontrado 
}; // PesquisaSequencial 
 151
IX. 2 Ordenação 
A necessidade de ordenar os valores armazenados em um 
vetor, pode surgir pôr vários fatores, seja para a geração de um 
relatório, ou mesmo para a finalidade de agilizar pesquisas. 
Nesse ultimo caso, a ordenação se justifica quando o conjunto 
de dados é grande e a pesquisa será repetida diversas vezes 
sobre o mesmo conjunto, pois como veremos mais adiante, 
neste capítulo, a aplicação da pesquisa seqüencial é mais 
eficiente quando os dados estão ordenados. Veremos também 
a técnica de pesquisa conhecida como pesquisa binária, que é 
muito mais eficiente que a pesquisa seqüencial. 
Dentre os vários métodos de ordenação, escolhi o mais 
simples que é o método conhecido como BOLHA. Segundo 
esse método, para uma ordenação crescente, procedemos 
segundo o algoritmo abaixo: 
Linguagem Natural 
1 Pegue o primeiro elemento e compare com o segundo, 
troque-os de posição, se necessário, de tal forma que 
fiquem em ordem crescente (o menor primeiro, depois o 
maior). Repita o processo, agora com o segundo e o 
terceiro elemento. E assim sucessivamente até chegar 
aos dois últimos elementos. Nesse ponto o ultimo 
elemento do vetor é o maior de todos os elementos e 
portanto encontra-se ordenado. 
2 Repita todo o processo descrito acima, N-1 vezes (N é o 
número de elementos do vetor). Observando que a cada 
novo ciclo será necessário fazer uma comparação a 
menos, pois a ultima posição comparada no ciclo 
anterior, não mais precisa ser comparada, uma vez que 
 152
armazena o maior valor encontrado no respectivo ciclo 
de comparações. 
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Monte uma representação gráfica para um vetor com 10 
números inteiros desordenados. Depois faça o teste de mesa 
(execução passo a passo) do algoritmo acima e verifique se o 
mesmo realmente funciona. 
/*----------------------------------------------------------------------------- 
Procedimento: OrdBolha; 
Parâmetros: 
 iVet → Vetor de números inteiros, a ser ordenado 
 N → Número de elementos do vetor; 
Descrição: 
 Efetua a ordenação de um vetor de números inteiros com N 
elementos,através do método de ordenação conhecido como 
BOLHA. 
------------------------------------------------------------------------------*/ 
 
nada OrdBolha (inteiro iVet [ ], inteiro N) 
{ 
 inteiro i, j, k, AuxTroca; 
 
 para (i ← 1; i < N; i ← i + 1 ) faça 
 { 
 k ← N – i; 
 para ( j ← 0; j < K; j ← j + 1 ) faça 
 { 
 se ( iVet[ j ] > iVet[ j + 1] ) então 
 { 
 AuxTroca ← iVet [ j ]; 
 iVet [ j ] ← iVet [ j + 1 ]; 
 iVet [ j +1 ] ← AuxTroca; 
 }fim_se; 
 }fim_para; 
 }fim_para; 
}; // OrdBolha 
 153
IX. 3 Pesquisa Seqüencial com Dados 
Ordenados 
Uma pesquisa seqüencial sobre dados desordenados só 
pode concluir que o valor procurado não está presente após 
varrer todo o conjunto (vetor). Entretanto se os dados 
estiverem em ordem, é possível melhorar seu desempenho de 
forma substancial. Analise o algoritmo proposto abaixo: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*-------------------------------------------------------------------------------------
Função: PesqSequencialOrd; 
Parâmetros: 
 iVet → Vetor de números inteiros, contendo os valores sobre os 
quais será efetuada a pesquisa; 
 N → Número de elementos do vetor; 
 VlrPesq → Valor objeto da pesquisa; 
Retorno: 
 Um valor de 0 até N-1, indicando a posição no vetor onde o valor 
procurado foi encontrado. 
 -1, Indica que o valor procurado não está presente no vetor. 
-------------------------------------------------------------------------------------*/
inteiro PesqSequencialOrd (inteiro iVet [], inteiro N, inteiro VlrPesq ) 
{ 
 inteiro i; 
 
 para (i ← 0; i < N; i ← i + 1) faça 
 { 
 se ( iVet[ i ] = VlrPesq ) então 
 retorne ( i ); // Encontrado 
 senão 
 se ( iVet [ i ] > VlrPesq ) então 
 retorne (-1); // Não Encontrado 
 fim_se; 
 fim_se; 
 }fim_para; 
 retorne ( -1 ); //Não encontrado 
}; // PesqSequencialOrd 
Quando encontramos um valor 
maior que o procurado, concluímos 
que o mesmo não está presente, 
pois deste ponto em diante os 
valores serão cada vez maiores, 
dado que o vetor está em ordem 
crescente 
 154
IX. 4 Pesquisa Binária 
A pesquisa binária é um método de pesquisa muito 
eficiente se comparado ao método seqüencial, mas só pode ser 
aplicado sobre vetores ordenados. O nome pesquisa binária 
faz referência ao fato do ponto chave do algoritmo ser 
justamente a divisão sucessiva do vetor em duas partes. 
Para melhor compreender o algoritmo, vamos trabalhar 
com um exemplo, considere que inicialmente queremos 
encontrar a posição em que o número 34 está armazenado no 
vetor abaixo. 
Vet 
Índices 0 1 2 3 4 5 6 7 8 9 
Valor 2 12 34 45 48 52 53 60 61 80 
 
1 Inicialmente atribuir para “inicio,” o índice da primeira 
posição do vetor “zero” e para “fim”, o índice a ultima 
posição “nove”. 
2 Dividir o vetor em duas partes iguais, tomando a posição 
meio como alvo da comparação – meio ← (fim + inicio) 
div 2 – logo a posição 4 será considerada como a 
posição “meio” do vetor; 
a. Comparar o valor procurado “34” com o valor 
armazenado na posição tida como meio do vetor ( 
vet[4] = 34 ??? ), neste exemplo vet[4] é 48 
i. Se forem iguais encontrou, logo retornar o índice 
da posição “meio”, fim da pesquisa – não é o caso 
deste exemplo; 
ii. Se não encontrou, então verificar se o valor 
procurado for maior que o valor armazenado na 
 155
posição “meio” ( 34 > vet [meio] ??? ), se for 
descartar a parte inferior do vetor, tomando como 
alvo da pesquisa, somente a parte superior do 
vetor, as posições que estão acima da posição 
“meio” ( inicio ← meio +1). 
iii. Pôr outro lado se o valor procurado for menor que 
o valor da posição tida como meio ( 34 < Vet 
[Meio] ??? ), descartar a parte superior do vetor, e 
prosseguir a pesquisa na parte inferior. Nesse caso 
o fim “lógico” do vetor passa a ser a posição 
“meio – 1” (fim ← meio – 1) 
3 repetir o passo 2 com a parte do vetor atualmente 
considerada para a pesquisa. Esse passo deverá ser 
repetido enquanto o inicio lógico do vetor for menor ou 
igual ao fim lógico do vetor (“inicio” <= “fim” ???). Se 
o inicio se tornar maior que o fim, significará que a 
pesquisa está esgotada e que o valor procurado não se 
encontra armazenado no vetor, retornar (-1) indicando 
tal situação. 
Obs: O valor de retorno –1 não pode ser interpretado como 
uma posição válida para o vetor, uma vez que o índice de um 
vetor começa sempre em zero. Esse é um artifício conhecido 
como valor impossível, e é muito utilizado para a indicação de 
falha. 
 
Ao executarmos o passo 2 no 2º ciclo teremos: inicio = 0 e 
fim = 3, portanto meio = 1. Na posição 1 do vetor, temos o 
valor 12, comparando com o valor procurado 34, concluímos 
que devemos descartar a parte inferior do vetor ( inicio ← 
 156
meio + 1), logo inicio = 2. Comparando inicio e fim conclui-se 
que é necessário repetir o passo 2 novamente pois ( 2 < 3). 
No terceiro ciclo, teremos inicio = 2 e fim = 3, calculando 
meio temos meio = 2 e comparando o valor de Vet na posição 
meio ( Vet[meio] ) com o valor procurado 34 temos uma 
igualdade – Vet[meio] = 34 – logo retornamos o valor 2 que é 
a posição onde o valor 34 está armazenado. 
 
Se estivéssemos procurando pelo valor 35 ao invés de 34, 
concluiríamos que deveríamos descartar a parte inferior do 
vetor, fazendo inicio = meio + 1, e voltaríamos a repetir no 
passo 2 no 4º ciclo, pois “inicio” ainda é menor ou igual a 
“fim”. 
No 4º ciclo teríamos inicio = 3 e fim = 3, portanto meio = 
3. O valor armazenado na posição 3 é 45, como 45 > 35 seria 
descartada a parte superior do vetor fazendo-se fim = meio –1, 
nesse ponto o “fim lógico” do vetor se tornou menor que o 
“inicio lógico” tal fato indica que o valor procurado não está 
presente no vetor e o valor de retorno deve ser –1. 
 
 
 
 
 157
Português Estruturado: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*---------------------------------------------------------------------------------- 
Procedimento: LeituraGrupos; 
Parâmetros: 
 Vet → Um vetor ordenado sobre o qual será realizada a pesquisa; 
 N → O número de elementos do vetor; 
 Pesq → O valor objeto da pesquisa; 
Retorno: 
 Fracasso: –1 → indicando que o valor procurado não está 
armazenado no vetor; 
 Sucesso: Um valor de 0 até N-1, indicando a posição do vetor 
onde o valor procurado está 
armazenado 
---------------------------------------------------------------------------------*/ 
inteiro leituraGrupos (inteiro Vet[ ], inteiro N, inteiro Pesq ) 
{ 
 inteiro Inicio, Fim, Meio; 
 
 Inico ← 0; 
 Fim ← N-1; 
 enquanto ( Inicio <= Fim ) faça 
 { 
 Meio ← (Inicio + Fim ) div 2; 
 se ( Vet [ Meio ] = Pesq ) então 
 retorne ( Meio ); // Encontrado ( Sucesso ) 
 senão 
 se ( Vet [ Meio ] > Pesq ) então 
 Inicio ← Meio + 1; 
 senão 
 Fim ← Meio –1; 
 fim_se; 
 fim_se; 
 }; //fim_enquanto 
 retorne ( -1 ); // Não encontrado ( Fracasso ) 
}; 
 158
 
Capítulo X Estruturas de 
Dados Heterogêneas 
No capítulo VIII você trabalhou com as estruturas de dados 
homogêneas. Tais estruturas possibilitam o armazenamento de 
vários valores de um mesmo tipo numa distribuição contígua 
de forma matricial. 
Embora os vetores e matrizes sejam de grande ajuda, as 
vezes se faz necessário agrupar, num mesmo conjunto de 
dados, informações de vários tipos diferentes mas que só 
possuem um significado quando estão juntas. Pôr exemplo, os 
dados referentes a um cliente ( Nome, Idade, Sexo, Estado 
Civil, RG, CPF, Renda, etc). 
A estrutura de dados heterogênea “registro” é, muitas 
vezes, apontada como a principal estrutura de dados de uma 
linguagem, com ela é possível definiragrupamentos de dados 
de tipos diferentes numa estrutura simples e fácil de 
manipular. Neste capitulo, você terá a oportunidade de 
conhecer a sintaxe de declaração e manipulação dessas 
estruturas. 
 159
X. 1 Tipos de Dados do Usuário 
O mecanismo de definição de tipos permite ao 
programador definir novos tipos de dados, tendo sempre como 
base os tipos básicos preestabelecidos pela linguagem. 
No PORTUGUÊS ESTRUTURADO, a definição de um 
novo tipo deve ser estabelecida acima de todos os 
procedimentos e funções, é o bloco de definições. A 
declaração de um novo tipo é simples, observe a sintaxe 
básica: 
 
define_tipo <tipo base> <Nome do Novo Tipo>; 
Exemplo 1 
 
 
 
 
 
 
 
 
 
 
 
 
define_tipo inteiro TpiVet10 [10]; 
 
nada principal () 
{ 
 TpiVet10 Vetor; 
 inteiro i; 
 
 para ( i ← 0; i ≤ 10; i ← i + 1) faça 
 { 
 escreva ( i,“o número:”); 
 leia ( Vetor[i] ); 
 } fim_para; 
} principal; 
É o mesmo que: 
inteiro Vetor[10]; 
Define TpiVet10 como sendo 
um identificador de tipo para 
um vetor de inteiros com 
capacidade para 10 elementos 
 160
Neste exemplo, foi estabelecido que TpiVet10 é um novo 
tipo de dado. Toda e qualquer variável pertencente a esse tipo 
de dado, é uma matriz unidimensional (vetor) de inteiros com, 
capacidade para 10 elementos. 
A definição de tipos é uma técnica utilizada para melhorar 
a legibilidade e a manutenibilidade de um programa. Essa 
técnica também nos ajuda a gerenciar a complexidade na 
especificação de variáveis locais em procedimentos e funções. 
X. 1.2 Tipos Estruturados Heterogêneos 
A agregação de diferentes dados em uma estrutura de 
dados, possibilita um mecanismo para armazenar e manipular 
informações complexas, aquelas que compõem de mais de um 
dado. O cadastro de um cliente, pôr exemplo: Nome, 
Sobrenome, Data de Nascimento, Sexo, Idade, Endereço, 
telefone, CPF, RG, etc. 
A composição de vários dados de tipos diferentes em um 
conjunto único, define um novo tipo de dado conhecido como 
tipo definido pelo usuário. Cada novo agrupamento de dados 
forma um novo tipo de dados estruturado heterogêneo, uma 
nova estrutura de dados heterogênea. Quando bem utilizada, 
essa é uma ferramenta muito poderosa. 
Antes de poder declarar uma variável como sendo um 
conjunto de dados estruturado, será necessário estabelecer um 
identificador de tipo para a estrutura. Essa definição de tipo 
será necessária sempre que se desejar fazer uso de uma 
estrutura de dados cujo tipo ainda não tenha sido definido. 
A definição de um tipo estruturado heterogêneo, exige uma 
sintaxe apropriada que é apresentada abaixo. 
 161
X. 1.2.1 Sintaxe Básica 
define_tipo registro <Nome do Tipo> 
{ 
 <tipo> <Campo 1>; 
 <tipo> <Campo 2>; 
 : 
 <tipo> <Campo N>; 
}; 
A palavra chave registro indica que o tipo que está sendo 
definido é um tipo estruturado, uma estrutura de dados heterogênea, 
ou seja, pode ser composta pôr vários campos de tipos diferentes. 
Os campos que compõem a estrutura e seus respectivos tipos são 
elencados no bloco após o nome do novo tipo estruturado. 
X. 1.2.2 Acesso aos elementos 
Para acessar os campos internos de uma variável 
estruturada do tipo “registro”, é necessário indicar o nome do 
campo, um ponto é usado como separador entre o nome da 
variável e o nome do campo a ser acessado. Veja o exemplo: 
define_tipo registro TpCadCliente { 
 inteiro Código; 
 frase Nome; 
 inteiro Idade; 
 caracter Sexo 
}; 
 162
Sendo “Reg” e “AuxReg” duas variáveis do tipo 
TpCadCliente, os exemplos abaixo representam operações 
válidas: 
9 Reg ← AuxReg; 
Atribuição de todos os valores armazenados em AuxReg 
para os seus correspondentes em Reg. A partir dessa 
instrução as duas variáveis possuem os mesmos dados; 
 
9 leia( Reg.Código ); 
Indica a entrada de um valor inteiro para ser armazenado 
no campo “Código” da variável “Reg”; 
 
9 escreva (Reg.Nome); 
Indica a apresentação, no vídeo, do dado armazenado no 
campo “Nome” da variável “Reg”; 
 
9 Reg.Sexo ← ‘M’; 
Indica a atribuição do literal ‘M’ ao campo “Sexo” da 
variável “Reg”. 
 
Exemplo 1 
Construir um programa capaz de aceitar a entrada de uma 
lista com 10 grupos de informações. Cada grupo de 
informação é composto pôr (Nome, Sexo, Idade). Ordenar pôr 
idade de forma decrescente e apresentar a lista na nova ordem. 
 163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*Definição dos tipos necessários */ 
 
/*O tipo TpGrupo define o agrupamento individual das 
informações*/ 
 
define_tipo registro TpGrupo 
{ 
 frase Nome; 
 caracter Sexo; 
 inteiro Idade; 
}; 
 
/*-------------------------------------------------------------------- 
Procedimento: LeituraGrupos; 
Parâmetros: 
 Lista → Lista para armazenar os grupos de dados; 
Descrição: 
 Este procedimento procede a leitura de 10 grupos de 
informação do tipo TpGrupo, Os valores informados pelo 
usuário irão preencher o vetor “Lista” passado como 
parâmetro 
----------------------------------------------------------------------*/ 
 
nada leituraGrupos (TpLista Lista[ ] ) 
{ 
 inteiro i; 
 
 para (i ← 0; i < 10; i ← i + 1) faça 
 { 
 escreva (“Nome: ”); 
 leia ( Lista[ i ].Nome ); 
 escreva (“Sexo: ”); 
 leia ( Lista[ i ].Sexo ); 
 escreva (“Idade: ”); 
 leia ( Lista[ i ].Idade); 
 }fim_para; 
};//leituraCrupos; 
 164
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*-------------------------------------------------------------------- 
Procedimento: OrdenaLista; 
Parâmetros: 
 Lista → vetor que armazena os grupos de dados; 
Descrição: 
 Este procedimento efetua a ordenação decrescente do vetor 
“Lista”, pelo campo “Idade”, através do metodo de ordenação 
BOLHA 
----------------------------------------------------------------------*/ 
nada OrdenaLista (TpLista Lista[ ] ) 
{ 
 inteiro i, j; 
 TpGrupo Aux; 
 
 para ( i ← 0; i < N-1; i ← i + 1) faça 
 { 
 para ( j← i + 1; j < N; j ← j + 1) faça 
 { 
 se ( Lista [ i ].Idade < Lista [ j ].Idade ) então 
 { 
 Aux ← Lista [ i ]; 
 Lista [ i ] ← Lista [ j ]; 
 Lista [ j ] ← Aux; 
 }fim_se; 
 }fim_para; 
 }fim_para; 
 
};//OrdenaLista 
 165
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*-------------------------------------------------------------------- 
Procedimento: ApresentaGrupos; 
Parâmetros: 
 Lista → Vetor que armazena os grupos de dados; 
Descrição: 
 Este procedimento apresenta todos os 10 grupos de dados 
armazenados na Lista. 
----------------------------------------------------------------------*/ 
 
nada ApresentaGrupos (TpLista Lista[ ] ) 
{ 
 inteiro i; 
 
 escreva ( “Nome Sexo Idade ” ); 
 para (i ← 0; i < 10; i ← i + 1) faça 
 { 
 escreva ( Lista[ i ].Nome, Lista[ i ].Sexo, Lista[ i 
].Idade ); 
 }fim_para; 
} //A C
/*-------------------------------------------------------------------- 
Procedimento: principal; 
Parâmetros: 
 nenhum; 
Descrição: 
 Este procedimento representa a rotina principal e é 
responsável por efetuar as chamadas de procedimentos 
necessárias ao desenvolvimento das ações indicadas no 
enunciado do problema. 
----------------------------------------------------------------------*/ 
 
nada principal ( ) 
{ 
 TpLista Lst; 
 
 LeituraGrupos ( Lst ); 
 OrdenaGrupos ( Lst ); 
 ApresentaGrupos ( Lst ); 
}; //principal 
 166
X. Exercícios 
1) Escreva um programa “Endereços” que seja capaz de 
armazenar os seguintes dados deaté 100 clientes: Nome, 
Endereço (Rua, Nº, Apto nº/Casa, Bairro), Telefone, Sexo, 
Idade. O programa deve possuir as características abaixo: 
a) Um menu de opções; 
b) Opção inserir um cliente (observar número máximo); 
c) Opção Pesquisar pelo nome; 
d) Opção Remover um cliente; 
e) Opção Listar todos de um determinado sexo; 
f) Opção Listar todos de uma determinada faixa etária; 
g) Opção Listar todos de um determinado sexo e faixa 
etária.

Mais conteúdos dessa disciplina