Buscar

Apostila_de_Algoritmos_Visualg

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNITAU 
Universidade de Taubaté 
Prof.. Ms. José de Oliveira Filho Taubaté - SP - 2006 
 
 
 
 
 
 
 
 
 
Apostila de Algoritmos 
Linguagem VisuAlg 
Disciplinas 
Técnicas Computacionais em 
Engenharia I 
e 
Introdução à Computação 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 2 
INTRODUÇÃO 
 
O Objetivo principal do sistema AlgoMais e VisuAlg é fornecer uma ferramenta de apoio 
programação baseado no Português Estruturado, sem reduzir o estudo teórico. Com estas 
ferramentas pretende-se proporcionar uma forma de estimular os alunos a praticar e exercitar o 
desenvolvimento de algoritmos em uma pseudolinguagem conhecida como "Portugol" ou Português 
Estruturado. 
"Portugol" é derivado da aglutinação de Português + Algol. Algol é o nome de uma linguagem de 
programação estruturada usada no final da década de 50. 
Embora o português estruturado seja uma linguagem bastante simplificada, possui todos os 
elementos básicos e uma estrutura semelhante à de uma linguagem típica para programação de 
computadores. Além disso, resolver problemas com português estruturado, pode ser uma tarefa tão 
complexa quanto a de escrever um programa em uma linguagem de programação qualquer. Portanto, 
neste manual, estaremos na verdade procurando desenvolver as habilidades básicas que serão 
necessárias para adquirir-se competência na programação de computadores. 
 
1. Algoritmo não Computacional 
 
Abaixo é apresentado um Algoritmo não computacional cujo objetivo é usar um telefone público. 
 
 
Todo mundo que tem contato com computadores sabe que eles precisam ser programados para 
executar tarefas. Um programa é um conjunto de milhares de instruções que indicam ao computador, 
passo a passo, o que ele tem que fazer. Estes programas são construídos com ferramentas chamadas 
"linguagens de programação". Estas linguagens contêm os comandos que fazem o computador 
escrever algo na tela, realizar cálculos aritméticos, receber uma entrada de dados visto teclado, e 
milhares de outras coisas, mas estes comandos precisam estar em uma ordem lógica e contribuir, 
cada um, para a tarefa em questão. 
 
Provavelmente você já fez o exemplo acima. A este conjunto de instruções poderíamos dar o nome 
de "algoritmo para a fazer uma ligação de um telefone publico". A palavra algoritmo significa: " é 
uma seqüência de instruções ordenadas de forma lógica para a resolução de uma determinada tarefa 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 3 
ou problema. Algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um 
único algoritmo. Algoritmo é um caminho para a solução de um problema, e, em geral, os caminhos 
que levam a uma solução são muitos". Este termo está ligado a ciências da computação, mas na 
realidade pode ser aplicado a qualquer problema cuja solução possa ser decomposta em um grupo 
de instruções. A única diferença no caso é que, em relação ao computador, os comandos têm que ser 
precisos, e cada um deve conter uma tarefa, apenas. 
 
O termo "processamento de dados" é muitas vezes utilizado em conjunto com computadores, pois 
isto é o que eles fazem: processar dados. Daí podemos extrair os dois componentes básicos de um 
algoritmo (de agora em diante, esta palavra será sempre utilizada no contexto da informática): 
dados e código. Dados são os valores (números, nomes, etc.) de que precisamos para resolver o 
problema, e código são os comandos que usaremos para manipular e "processar" os dados. 
 
Exercícios: 
 
Escreva um algoritmo para resolver os seguintes problemas: 
 
A-Escreva um algoritmo para descrever como você faz para ir da sua casa até a faculdade. 
 
B-Três homens querem atravessar um rio. O barco que possuem tem a capacidade máxima de 150 
quilos. Eles pesam 50, 75 e 120 quilos. Como podem atravessar sem afundar o barco? 
 
C-Um homem precisa atravessar um rio com um barco que possui capacidade para carregar apenas 
ele mesmo, e mais uma de suas três cargas, que são: um lobo, um bode e um fardo de alfafa, mais o 
lobo não pode ficar sozinho com o bode e o bode com a alfafa. 
 
Desafio -Dois monges estão perdidos numa mata e estão passando fome. E só existe uma planta que 
podem comer. Mas para comê-la deverá esquentá-la 30 segundos exato senão os matara. Mas para 
marcar o tempo eles só têm 2 ampulhetas um que marca 22 e outra de 14 como que eles 
conseguirão marcar o tempo? 
 
1.1. Linearização de Expressões 
Para a construção de Algoritmos todas as expressões aritméticas devem ser linearizadas, ou seja, 
colocadas em linhas. 
É importante também ressalvar o uso dos operadores correspondentes da aritmética tradicional para 
a computacional. 
 Exemplo: 
 
(2/3+(5-3))+1= 
Tradicional Computacional 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 4 
 
1.2. Operadores Aritméticos 
Operador Sintaxe VisuAlg 
Sintaxe 
AlgoMais 
Adição + + 
Subtração - - 
Multiplicação * * 
Divisão / / 
Divisão Inteiro \ -- 
Potenciação ^ ** 
Modulo (resto da divisão) % -- 
 
1.3. Operadores Relacionais 
Operadores relacionais atuam sobre operandos numéricos e resultam em valores lógicos 
(operadores de comparação entre dois operandos). 
Operador Sintaxe AlgoMais e VisuAlg 
Maior > 
Menor < 
Maior ou igual >= 
Menor ou igual <= 
Igual = 
Diferente <> 
 
1.4. Operadores Lógicos 
Atuam sobre expressões retornando sempre os valores lógicos VERDADEIRO ou FALSOS. 
Sintaxe 
VisuAlg 
Sintaxe 
AlgoMais Função 
E E Retorna verdadeiras se ambas as partes forem 
verdadeiras. 
OU OU Basta que uma das partes seja verdadeira para 
retornar verdadeiro. 
NAO NAO 
Nega uma afirmação, invertendo o seu valor lógico. 
Se for verdadeiro vira falso, se for falso vira 
verdadeiro. 
XOU 
Operador que resulta em VERDADEIRO se os 
operandos forem diferentes, e em FALSO se forem 
iguais. 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 5 
Tabela verdade 
 
A B A E B A OU B NÃO (A) NÃO (B) A XOU B 
V V V V F F F 
V F F V F V V 
F V F V V F V 
F F F F V V F 
Prioridade dos operadores 
 
Operador Prioridade 
Operadores aritméticos 5 
Operadores relacionais 4 
Operadores lógicos 
E 3 
OU 2 
NÃO 1 
1.5. Modularização de Expressões 
Modularização é a divisão da expressão em partes, proporcionando maior compreensão e definindo 
prioridades para a resolução da mesma. 
Como pôde ser observado no exemplo anterior, em expressões computacionais utilizamos somente 
parênteses "( )" para modularização. 
Na informática podemos ter parênteses dentro de parênteses, como seriam os colchetes e as chaves 
na matemática. 
Operador Prioridade 
Potenciação 3 
Multiplicação 2 
Divisão 2 
Adição 1 
Subtração 1 
Exemplos: 
(2 + 2) / 2 = 2 é diferente de 
2 + 2 / 2 = 3 
1.6. Expressões Lógicas 
As expressões compostas de relações sempre retornam um valor lógico. 
Exemplos: 
2+5>4 ? Verdadeiro 3<>3 ? Falso 
De acordo com a necessidade, as expressões podem ser unidas pelos operadores lógicos. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 6 
 
 
Exercícios: 
Escreva as expressões na forma de algoritmo. 
A) 
 
B) 
C) 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 7 
 
D) 
 
 
e) 
 
f) 
 
G) 
Escreva as Expressões da forma convencional. 
A. a+b+(34+e*9)/u-89**(1/2)= 
B. 12+1/((4*a)/45)**(1/2)= 
C. ((a+x)**(2+w)-3a)/2= 
D. (12*x)/(36-9**y)= 
Resolva as expressões lógicas.A. 2>3= 
B. (6<8)ou(3>7)= 
C. não (2<3)= 
D. (5>=6 ou 6<7 ou não(a+5-6=8)= {onde A=5} 
E. (34>9 e 5+u = 34) ou (5=15/3 e 8>12)= {onde u=29} e 8>12)= {onde u=29} 
Resolva as expressões lógicas. 
F. 2>3= 
G. (6<8)ou(3>7)= 
H. não (2<3)= 
I. (5>=6 ou 6<7 ou não(a+5-6=8)= {onde A=5} 
J. (34>9 e 5+u = 34) ou (5=15/3 e 8>12)= {onde u=29} 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 8 
2. PRIMEIROS ELEMENTOS DA LINGUAGEM 
No curso de algoritmos vamos escrever soluções para problemas utilizando o português estruturado. 
Nessa seção vamos conhecer os primeiros elementos que compõem a linguagem e escrever alguns 
algoritmos. 
Estrutura Geral 
Algoritmo VisuAlg AlgoMais 
Algoritmo 
< declaração de variáveis> 
Início 
< lista de Comandos> 
Fim algoritmo 
Algoritmo "tipo algort." 
< declaração de variáveis> 
Início 
< lista de Comandos> 
Fimalgoritmo 
Algoritmo 
< declaração de variáveis> 
< lista de Comandos> 
Fim algoritmo 
Os algoritmos que vamos escrever têm a seguinte forma geral: 
onde: 
A palavra “Algoritmo” e a expressão “Fim algoritmo” fazem parte da sintaxe da linguagem e 
sempre delimitam o início e fim de um algoritmo. 
 
< declaração de Variáveis> descrevemos os tipos de dados que serão usados na lista de comandos. 
Por exemplo, poderíamos definir que fruta é um tipo de dado que pode assumir apenas os valores 
maça, pêra, banana, abacaxi e outras frutas, sobre os quais podemos efetuar as operações de 
comparar, comprar, comer e servir. 
“Início” indica o fim das declarações e o início dos comandos. 
 
OBS: No algoMais não precisa declarar a palavra "Início". 
 
< listas-de-comando> é apenas uma indicação de que entre a palavra “Início” e a expressão “Fim 
algoritmo” podemos escrever uma lista com uma ou mais instruções ou comandos. 
É importante salientar que, quando um algoritmo é “executado” as instruções ou comandos de um 
algoritmo são sempre executados na ordem em que aparecem no mesmo. 
As palavras que fazem parte da sintaxe da linguagem são palavras reservadas, ou seja, não podem 
ser usadas para outro propósito em um algoritmo que não seja aquele previsto nas regras de sintaxe. 
A palavra “Algoritmo”, por exemplo, é uma “palavra reservada”. As palavras reservadas sempre 
aparecerão em negrito e itálico, neste manual. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 9 
3. IDENTIFICADORES 
Tudo que usamos tem um nome, este nome ou rótulo é utilizado para que possamos reconhecer uma 
determinada variável ou constante, por exemplo, se levarmos em conta que todas as mulheres em 
sua estrutura física são todos iguais, pois temos as mesmas características, ficaria muito complicado 
em estabelecer uma relação de conhecimento entre eles, para que haja uma facilidade no 
reconhecimento das pessoas dá-se nomes “diferentes” para elas com o objetivo de buscarmos em 
nossa memória o retrato de uma pessoa na qual estamos comentando, este pode ser um exemplo 
muito bom se não levarmos em conta a possibilidade de existir nomes iguais para pessoas diferentes, 
mas sabemos que isto é quase que impossível e que a partir de um nome igual vários transtornos são 
possíveis. Isto, fortalece a necessidade de identificarmos o espaço que iremos armazenar, 
determinado conteúdo, esta identificação deve ser clara, precisa e deve identificar o conteúdo 
guardado para o usuário. 
Regras para a nomeação de identificadores 
Não podem ter nomes de palavras reservadas; 
Devem possuir como primeiro caractere uma letra ou sublinhado '_'; 
Outros caracteres podem ser letras, números e sublinhado; 
Ter no máximo 127 caracteres; 
Não possuir espaços em branco; 
O VisuAlg e AlgoMais não diferem letras maiúsculas de minúsculas ('NOME' é o mesmo que 
'noMe'). 
 
Exemplos: 
Identificadores válidos: 
NOME, TELEFONE, IDADE_FILHO, NOTA1, Est_Civil 
 
Identificadores INVÁLIDOS: 
3Endereco, Estado Civil, PARA, fim, numero/complemento 
 
4. VARIÁVEIS 
O computador possui uma área de armazenamento conhecida como memória. Todas as informações 
existentes no computador estão ou na memória primária ( memória RAM ), ou na memória 
secundária ( discos, fitas, CD-ROM etc ). Nós iremos trabalhar, neste curso, somente com a 
memória primária, especificamente com as informações armazenadas na RAM ( memória de acesso 
aleatório ). 
A memória do computador pode ser entendida como uma seqüência finita de caixas, que num dado 
momento, guardam algum tipo de informação, como número, uma letra, uma palavra, uma frase etc, 
não importa, basta saber que lá sempre existe alguma informação. 
O computador, para poder trabalhar como alguma destas informações, precisa saber onde, na 
memória, o dado está localizado. Fisicamente, cada caixa, ou cada posição de memória, possui um 
endereço, ou seja, um número, que indica onde cada informação está localizada. este número é 
representado através da notação hexadecimal, tendo o tamanho de quatro, ou mais bytes. Abaixo 
segue alguns exemplos: 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 10 
 
Endereço Físico Informação 
3000: B712 "João" 
2000: 12EC 12345 
3000: 0004 "H" 
 
Como pode ser observado, o endereçamento das posições de memória através de números 
hexadecimais é perfeitamente compreendido pela máquina, mas para nós humanos torna-se uma 
tarefa complicada. Pensando nisto, as linguagens de computador facilitaram o manuseio, por parte 
dos usuários, das posições de memória da máquina, permitindo que, ao invés de trabalhar 
diretamente com o número hexadecimal, fosse possível dar nomes diferentes a cada posição da 
memória. Tais nomes seriam de livre escolha do usuário. Com este recurso, os usuários ficaram 
livres dos endereços físicos ( números hexadecimais ) e passaram a trabalhar com endereços lógicos 
( nomes dados pelos próprios usuários ). Desta forma, o Exemplo acima, poderia ser alterado para 
ter o seguinte aspecto: 
 
Endereço Físico Informação 
Nome : "João" 
número : 12345 
letra : "H" 
 
Como tínhamos falado, os endereços lógicos são como caixas, que num dado instante guardam 
algum tipo de informação. Mas é importante saber que o conteúdo desta caixa não é algo fixo, 
permanente, na verdade, uma caixa pode conter diversas informações, ou seja, como no Exemplo 
acima, a caixa ( Endereço Lógico ) rotulada de "Nome" num dado momento contém a informação 
"João", mas em um outro momento, poderá conter uma outra informação, por Exemplo "Pedro". 
Com isto queremos dizer que o conteúdo de uma destas caixas ( endereço lógico ) podem variar, 
isto é podem sofrer alterações em seu conteúdo. Tendo este conceito em mente, a partir de agora 
iremos chamar de forma genérica, as caixas ou endereços lógicos, de variáveis. 
Desta forma podemos dizer que uma variável é uma posição de memória, representada por um 
Nome simbólico ( atribuído pelo usuário ), a qual contém, num dado instante, uma informação. 
Veja abaixo Simbolicamente: 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 11 
Uma variável pode ser vista como uma caixa identificada por um nome colocado na tampa desta e 
por um valor de uma constante que poderá estar colocado no interior desta caixa. Enquanto o 
nome sempre permanece o mesmo, o conteúdo da caixa, isto é, a constante nela armazenada pode 
ser alterada a qualquer momento. 
4.1. Declaração de Variáveis 
Variáveis são palavras que tem um significado bem específico em um algoritmo. Para que o 
computador possa executar comandos que envolvem variáveis da maneira correta, ele deve 
conhecer os detalhes das variáveis que pretendemos usar. Esses detalhes são: o identificador desta 
variável e o tipo de valores que essa variável irá conter. Precisamos assim, de uma maneira de 
especificaresses detalhes e comunicá-los ao computador. Para isso utilizamos o comando de 
declaração de variáveis que faz parte da nossa linguagem que tem a seguinte forma: 
 Declare <identificador> [,<lista_identificadores>] <tipo_das_variáveis> 
onde: 
<identificador> - é uma lita de palavras que pretendemos empregar como variáveis em nosso 
algoritmo; 
<tipo_das_variáveis> - determina que tipo de valor as variáveis poderão receber. 
Exemplos: 
Algoritmo declare caixa : <Tipo da Variável>; 
AlgoMais declare caixa : <Tipo da Variável>; 
VisuAlg declare caixa : <Tipo da Variável> 
4.2 Tipos de Variáveis 
Todas as Variáveis devem assumir um determinado tipo de informação 
O tipo de dado pode ser: 
Primitivo ? Pré-definido pela linguagem; 
Estáticos ? É uma parte de um tipo já existente; 
Dinâmicos ? Definidos pelo programador. 
Exemplos: 
A : Numerico (PRIMITIVO) 
TIPO NOTA=[1..10] : Numerico (Estático) 
TIPO SEMANA = (Segunda-feira, Terça-feira, Quarta-feira, Quinta-feira, Sexta-feira, 
Sábado, Domingo) (Dinâmico). 
Tipos Primitivos de Dados 
Esses tipos de dados são os mais freqüentes nas linguagens de programação, pois oferecem alguns 
tipos básicos predefinidos, para criação de outros tipos. Cada um desses tipos primitivos tem um 
conjunto de valores restrito, veja abaixo: 
VisuAlg AlgoMais Descrição 
Numerico Numerico Representa valores inteiros e reais (com ponto 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 12 
separador da parte decimal). 
Exemplos: 10, 15.5 
Caracter Caracter 
Um número, uma letra ou qualquer símbolo especial 
entre aspas simples. 
Exemplos: 'a', '=', '#' 
Logico Logico 
Admite somente valores lógicos (Verdadeiro / 
Falso). 
Exemplo: a <- Verdadeiro 
 b <- Falso 
Literal Cadeia Seqüência de caracteres entre aspas duplas. Exemplo: "Esta é uma cadeia de caracteres" 
 
5. SINAL DE ATRIBUIÇÃO 
Quando declaramos uma variável, criamos uma área de armazenamento para os dados, mas ela 
ainda está sem valor. Para que a variável seja útil, deve ter valores colocados por nós. A isto se 
chama "atribuir valores". A atribuição de valores é feita pelo operador de atribuição "<-" (uma seta 
apontando para a esquerda). 
Por exemplo: 
Algoritmo 
Peso <- 78; 
Este comando atribui à variável Peso o valor 78. 
Nome <- "João da Silva" ; 
Este comando atribui à variável Nome o valor "João da Silva". 
AlgoMais Peso <- 78; Nome <- "João da Silva" ; 
VisuAlg Peso <- 78 Nome <- "João da Silva" 
 
É importante lembrar que só se pode atribuir a uns variáveis valores do mesmo tipo da variável. Nos 
exemplos acima, o variável Salário e do tipo numérico; então, o seguinte comando seria inválido: 
Salário <- "Insuficiente" 
Uma variável, como o próprio nome está dizendo, pode ter seu conteúdo (seu valor) mudado 
quantas vezes for necessário durante um programa. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 13 
 
6. COMANDOS DE E/S (ENTRADA/SAÍDA) 
Um programa que faça o seu processamento e não tenha como mostrar seus resultados é inútil. 
Portanto, em algum ponto deve haver a exibição de valores, e todas as linguagens de programação 
têm comandos para este fim. Nos algoritmos usamos o comando Escreva para isto. 
Escreva � Comando de saída que exibe uma informação no monitor. 
Sintaxe: 
Escreva <expressão | variável>[,<lista_de_variáveis>] 
 
Exemplo: Escreva "Este é o valor de X:", X, "e este de Y:", Y 
Nem todos os dados que um programa manipula são gerados por ele. Um programa de caixa 
automático, por exemplo, tem que obter do usuário o número da conta, a senha, a opção de serviço 
desejada, etc. Assim, deve haver um meio para que sejam digitados (ou fornecidos de outra maneira) 
dados para uso do programa. Mais uma vez, todas as linguagens de programação permitem isto, e 
nos algoritmos usamos o comando Leia. A sintaxe deste comando é: 
Leia � Comando de entrada que permite a leitura de variáveis de entrada utilizando o teclado. 
Sintaxe: 
Leia <variavel>[,<lista_de_variáveis>] 
 
Exemplos: Leia num 
 Saída Entrada 
Algoritmo Escreva variável Leia variável 
AlgoMais Escreva variável Leia variável 
VisuAlg Escreva variável Leia variável 
 
7. LINHAS DE COMENTÁRIO 
Os comentários são declarações não compiladas que podem conter qualquer informação textual que 
você queira adicionar ao código-fonte para referência e documentação de seu programa. 
Uma Linha 
São representados por duas barras normais ( // ). Todo o texto que você digitar após as duas barras 
será comentário. 
Ex.: 
// Este método calcula o fatorial de n. 
. 
. 
x <- y; // Inicializa a variável x com o valor de y 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 14 
Múltiplas Linhas 
Para tal, basta colocar o comentário entre chaves { } 
Ex: 
 
ALGORITMO 
{ este algoritmo pega o nome de um aluno, seu código e as suas notas, e verifica se ele passou de 
ano } 
 DECLARE codigo, i, j, nota1, nota2, nota3 NUMERICO { declaração das variáveis numéricas } 
 DECLARE nome CADEIA // declaração das variáveis de cadeia 
. 
FIM ALGORITMO 
 Uma Linha Múltiplas Linhas 
Algoritmo // TEXTO { TEXTO } 
AlgoMais { TEXTO } { TEXTO } 
VisuAlg // TEXTO { TEXTO } 
 
8. ESTRUTURAS SEQÜÊNCIAIS 
Construindo os Primeiros Algoritmos 
Basicamente a construção de um algoritmo se resume às seguintes etapas 
� Entendimento do problema; 
� Definição dos dados que serão necessários para resolvê-lo (as entradas); aí já 
deveremos ter idéia dos tipos de dados que usaremos; 
� Obtenção destes dados; alguns vêm do "exterior" do programa, e outros são 
calculados no próprio programa; 
Processamento em si; 
� Exibição dos resultados. 
A primeira fase é a mais difícil de se "pegar", pois depende um pouco da experiência do 
programador. Entretanto, mesmo nesta fase há técnicas que podem ser aprendidas, e modelos que 
podem ser aplicados. Programação é arte, ciência e técnica, tudo ao mesmo tempo... 
Problema 1 - Cálculo de Média Aritmética 
Enunciado: 
Faça um programa que leia dois valores numéricos, e calcule e exiba a sua média aritmética. 
Etapa 1 
Simples, hein? Dos tempos de escola lembramos que a média aritmética de dois valores é calculada 
como (a+b)/2, e sendo assim a primeira etapa já está pronta. 
Etapa 2 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 15 
Os dados necessários serão os dois valores, que colocaremos em duas variáveis A e B, do tipo 
numérico, e uma terceira variável, que chamaremos Média, que armazenará a média aritmética 
calculada. 
 
Etapa 3 
A obtenção dos dados neste programa é simples e direta. Basta pedir ao usuário que digite os 
valores. 
 
Etapa 4 
O processamento aqui é o cálculo da média, usando o método citado acima, na etapa 1. O resultado 
do cálculo será armazenado na variável Média. 
Etapa 5 
Basta exibir o conteúdo da variável Média. 
Solução: 
Algoritmo 
Declare A,B,Média : Numérico 
Inicio 
Escreva "Programa que calcula a média aritmética de dois valores." 
Escreva "Digite um valor : " 
Leia A 
Escreva "Digite outro valor : " 
Leia B 
Media <- (A+B)/2 
Escreva "A média dos dois valores é : ", Media 
Fim Algoritmo 
Comentários 
Você deve ter notado que colocamos na tela instruções para o usuário usando o comando Escreva. 
Esta é uma boa técnica de programação, mesmo hoje em dia, com o ambiente do Windows, etc. Da 
mesma forma, ao imprimir o resultado, não mostramos simplesmente a média, mas explicamos ao 
usuário o que aquele valor significa. 
Como pode ser analisado no tópico anterior todo programa possui uma estrutura seqüencial 
determinada por um INÍCIO e FIM.Em um algoritmo, estes limites são definidos com as palavras 
Algoritmo e Fim Algoritmo. 
Veja outro Exemplo: 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 16 
Lembrete 
 
Os comandos devem ser 
inseridos linha por linha. 
Não são diferenciadas as 
letras maiúsculas de 
minúsculas. 
As palavras não devem ser 
acentuadas. 
E não deve ser utilizada a letra 
'ç'. 
ALGORITMO 
DECLARE prod :LITERAL 
DECLARE valor_prod, qtd, tot :NUMERICO 
INICIO 
ESCREVA "Digite o produto:" 
LEIA prod 
ESCREVA "Digite o valor unitário do produto:" 
LEIA valor_prod 
ESCREVA "Digite a quantidade:" 
LEIA qtd 
tot<-valor_prod*qtd 
ESCREVA "Total:",qtd,"un. de",prod,"=", tot 
FIM ALGORITMO 
 
Se executássemos esse algoritmo, teríamos o seguinte resultado: 
1º Passo: "Digite o produto:" Uma janela irá aparecer, pedindo para inserir o dado desejado. Vamos 
supor que você digite "Abacaxi" 
2º Passo: "Digite o valor unitário do produto:" Você digita "5.50" 
3º Passo: "Digite a quantidade:" Você digita "10" 
4º Passo: O computador irá executar a operação da antepenúltima linha do algoritmo: atribuir o 
resultado da multiplicação entre valor_prod e qtd à variável tot. 
5º Passo: "Total: 10 un. de Abacaxi = 55.0" 
Exercícios: 
A. Classifique os conteúdo das variáveis abaixo de acordo com seu tipo, assinalando com "N" os 
dados Numericos, com R os lógicos, com L os literais e com C os caracteres. 
( ) 0 ( ) "abc" ( )"João" 
( )5,7 ( ) 1012 ( ) Falso 
( ) -49 ( ) +342 ( ) 569 
( ) "Lucas" ( ) "V" ( ) 0,00001 
( ) Verdadeiro ( ) -545 ( ) " 444 " 
B. Assinale com um X os nomes de variáveis válidos. 
( ) abc ( ) 3abc ( ) a 
( ) 123a ( ) –a ( ) acd1 
( ) -_ad ( ) A&a ( ) 1 
( ) A123 ( ) Aa ( ) guarda-chuva 
( ) AB CDE ( ) etc... ( ) b316 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 17 
C. Para as variáveis declaradas a seguir são dados os seguintes valores. Determine o resultado da 
avaliação das expressões abaixo: 
X, Y e Z - são variáveis numéricas, sendo que: X = 2, Y = 3 e Z = 5 
a) X * Y – Z e) (X + Y) * Z 
 
b) X * (Y - Z) f) X ** Y – 1 
 
c) X + Y * Z g) (X ** Y) – 1 
 
d) X + (Y * Z) h) X ** (Y - 1) 
 
D. Assinalar os comandos de atribuição considerados inválidos, corrigindo-os quando possível: 
Declare Nome, cor, Teste, Dia: Literal 
 Soma, Num: Numerico 
 X: Lógico 
a) ( ) NOME <- 5 
b) ( ) SOMA <- NUM + 2 * X 
c) ( ) TESTE <- SOMA 
d) ( ) NUM <- SOMA 
e) ( ) COR <- "PRETO" 
f) ( ) X <- X + 1 
g) ( ) NUM <- "*ABC*" 
h) ( ) DIA <- "SEGUNDA" 
i) ( ) SOMA + 2 <- X 
j) ( ) X <- (NOME = COR) 
 
E. Quais os valores armazenados em SOMA, NOME e TUDO, supondo-se que NUM, X, COR, DIA, 
TESTE e COD valem, respectivamente, 5; 2; "AZUL"; "TERÇA"; .F. e .V.? 
 
a) NOME <- DIA 
b) SOMA <- (NUM**2/X) + (X + 1) 
c) TUDO <- NÃO ((TESTE OU COD) E (SOMA < X)) 
F. Observa o seguinte Algoritmo e descreva o que ele faz. 
Primeiro Algoritmo 
Algoritmo 
Declare: NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: NUMERICO; 
NOME : LITERAL 
INICIO 
Leia NOME; 
Leia NOTA1, NOTA2, NOTA3, NOTA4; 
MEDIA <- (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4; 
ESCREVER (NOME, MEDIA) 
FIM Algoritmo. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 18 
G. No seguinte PROGRAMA existe alguns erros? Onde? 
 
ALGORITMO Teste 
 
Declare Maria : Literal 
Declare idade : Numerico 
Declare letra : Caracter 
Declare Maria : Numerico 
 
INICIO 
 
Leia idade 
Escreva idade 
dade=678 
Leia "letra" 
Leia ABC 
Escreva letra 
letra<-A 
 
FIM ALGORITMO 
Problema 1 
Faça um programa que leia três valores numéricos, e calcule e exiba a sua média aritmética. 
Complicou? 
Problema 2 
Realizarei uma viagem de vários dias em meu automóvel, e gostaria de saber a quilometragem 
média por litro de gasolina. Para isto, anotarei a quilometragem no velocímetro ao sair de viagem, 
e depois ao chegar; também vou somar toda a gasolina que comprar para o carro. Você poderia 
fazer um programa que me desse, com estes dados, quantos km fiz, em média, por litro de gasolina? 
Problema 3 
Faça um programa que leia o nome de um piloto, uma distância percorrida em km e o tempo que o 
piloto levou para percorrê-la (em horas). O programa deve calcular a velocidade média em km/h, e 
exibir a seguinte frase: 
A velocidade média de XX foi YY km/h. 
Onde XX é o nome do piloto, e YY é sua velocidade média. 
Problema 4 
Em uma pizzaria, cada tulipa de chopp custa R$0,80 e uma pizza mista grande custa R$10,00 mais 
R$1,50 por tipo de cobertura pedida (queijo, presunto, banana, etc.). Uma turma vai à pizzaria e 
pede uma determinada quantidade de "chopps" e uma pizza grande com uma determinada 
quantidade de coberturas. Faca um programa que calcula e conta e, sabendo quantas pessoas 
estão à mesa, quanto que cada um deve pagar (não esqueça os 10% do garçom)... 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 19 
9. ESTRUTURA CONDICIONAL 
Na vida real tomamos decisões a todo o momento baseado em uma situação existente. Em 
programação chamamos esta situação de condição, e as alternativas possíveis de ações. 
 
 
Por exemplo: "Se tiver R$ 10,00 sobrando irei ao cinema hoje à noite, mas se não tiver ficarei 
vendo TV em casa". 
 
Qual é a condição nesta frase? Fácil, "tiver R$ 10,00 sobrando". Ela é uma expressão lógica, pois a 
pergunta "Tenho R$ 10,00 sobrando?" pode (tem que) ser respondida com "Sim" ou "Não". 
Lembre-se, então: em um algoritmo, toda condição tem que ser uma expressão lógica. Quais são as 
ações possíveis? Fácil, mais uma vez; "irei ao cinema" e "ficarei vendo TV em casa". A primeira só 
será realizada se a resposta à pergunta "Tenho dinheiro suficiente?" for "Sim", enquanto que a 
segunda será realizada caso a resposta seja "Não". Então, em um algoritmo, as ações são um ou 
mais comandos que serão realizados, alguns caso a avaliação da condição resulte em Verdadeiro, 
outros caso ela resulta em Falso. 
Vamos colocar agora a frase do parágrafo anterior em outra forma, mais parecida com o que é um 
programa de computador: 
 
Se "tiver R$ 10,00 sobrando" então 
 "irei ao cinema" 
 senão 
 "ficarei vendo TV em casa". 
 
Veja que grifamos três palavras: Se, então, senão. Elas são muito importantes na estrutura dos 
comandos de decisão. Como próximo passo, vamos generalizar a estrutura que criamos acima: 
 
Se <condição> então 
 <ações (uma ou mais) a serem realizadas se a condição for verdadeira> 
senão 
 <ações (uma ou mais) a serem realizadas se a condição for falsa> 
 
Para terminar a nossa comparação, devemos lembrar que os comandos do algoritmo são sempre 
imperativos, e que o computador só lida com quantidades definidas (ou seja, ele não sabe o que é 
"ter R$ 10,00 sobrando"). Para aproximar mais nossa frase de um algoritmo, poderemos ter a 
seguinte forma: 
 
Se Dinheiro >= 10 então 
 Ir ao Cinema 
senão 
 Ver TV em Casa 
 
Entendeu a transformação? "Dinheiro" faz o papel de uma variável que contém o que eu tenho 
sobrando no momento, e se valor é maior ou igual a 10, então "tenho R$ 10,00 sobrando". Por falar 
nisso, fique sabendo que a técnica (ou arte) de se transformar perguntas do dia-a-dia em quantidades 
definidas que possam ser colocadas em um programa é a chave de se fazer algoritmos. Não se 
preocupe, no entanto: é algo fácil e que pode ser aprendido e desenvolvido.Bom, agora já podemos 
fazer um programa que ajude nosso amigo... 
O que faço esta noite? 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 20 
Faça um programaque peça ao usuário a quantia em dinheiro que tem sobrando e sugira, caso ele 
tenha 10 ou mais reais, que vá ao cinema, e se não tiver, fique em casa vendo TV. 
Algoritmos 
Declare Dinheiro: Numérico 
Início 
Escreva "Serviço Informatizado de Sugestões" 
Escreva "Quanto dinheiro você tem sobrando?" 
Leia Dinheiro 
Se Dinheiro >= 10 então 
 Escreva "Vá ao cinema hoje à noite." 
senão 
 Escreva "Fique em casa vendo TV." 
Fim Se 
Escreva "Obrigado e volte sempre." 
 
Em relação ao que vimos até agora, apenas uma novidade: a expressão fim se ao final do comando 
de decisão. Ela delimita o comando, isto é, mostra onde as ações da parte senão do comando 
terminam. Imagine o comando sem ela; ficaria assim:// Exemplo de um trecho de programa 
INCORRETO 
 
Se Dinheiro >= 10 então 
 Escreva "Vá ao cinema hoje à noite." 
senão 
 Escreva "Fique em casa vendo TV." 
Escreva "Obrigado e volte sempre. 
 
"Neste caso, o computador não saberia se o comando Escreva "Obrigado e volte sempre." faria ou 
não parte do comando de decisão (a endentação, ou seja, o fato de algumas linhas estarem mais 
distantes da margem esquerda que as outras, não quer dizer nada para o computador; fazemos isto 
apenas - e esta é uma dica importante para você - para que o algoritmo fique mais fácil de ler). 
Assim o fim se é fundamental, e todas as linguagens de programação têm algo que cumpra esta 
função. 
A estrutura condicional permite a mudança de caminho em um determinado fluxo devido à 
veracidade de um determinado teste feito no decorrer do desenvolvimento do algoritmo. 
A estrutura "Se" deve ser aplicada nos momentos em que, de acordo com uma determinada 
condição, um processamento deva ser feito. 
Os comandos internos a essa estrutura só serão executados após o teste da condição ter sido feito e 
seu resultado for verdadeiro. Após serem executados os comandos internos a essa estrutura, o 
primeiro comando após o" fim Se" será executado e o algoritmo seguirá a seqüência lógica 
normalmente. 
Estrutura Condicional 
Algoritmo VisuAlg AlgoMais 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 21 
Se <expressão lógica ou 
relacional> Entao 
<lista de comandos 1> 
[Senao 
 <lista de comandos2>] 
Fim Se 
Se <expressão lógica ou 
relacional> Entao 
 <lista de comandos 1> 
[Senao 
 <lista de comandos2>] 
FimSe 
<Se <expressão lógica ou 
relacional>Entao 
 <lista de comandos 1> 
[Senao 
 <lista de comandos2>] 
Fim Se 
 
10. TESTANDO O ALGORITMO 
Um algoritmo depois de ser elaborado pode e deve ser testado. Utilizamos um método conhecido 
como teste de mesa. O teste de mesa é como uma simulação de todos os passos, ou seja, entradas, 
comandos e instruções do algoritmo, a fim de saber se ele chega ao resultado a que se propõe e se a 
lógica está correta. Preenchendo uma tabela com valores para as variáveis e seguindo-se o fluxo de 
execução do algoritmo. A cada comando o valor das variáveis deve ser atualizado, concluído o teste 
de mesa podemos analisar os resultados, obtivemos a resposta correta? Se não, onde estão os erros? 
Sempre que é realizado um teste de mesa, utiliza-se de tabelas para armazenar os valores e 
estados das variáveis do algoritmo. Monitorando as variáveis é fácil determinar a eficiência do 
algoritmo. Uma vez entendido o funcionamento de um teste de mesa, e sabendo aplicá-lo nos 
algoritmos elaborados o aprendizado da lógica computacional se torna muito mais fácil, visto que o 
teste de mesa faz uma simulação do raciocínio estruturado, utilizando a entrada de variáveis e 
seguindo passo a passo a lógica. Caso em algum ponto a lógica esteja falha, o erro é facilmente 
encontrado e facilmente resolvido. 
 Exemplo: 
Para cada variável você deve fazer uma coluna e uma coluna para saída de dados. 
Algoritmo Teste de Mesa 
Algoritmo 
Declare a,b,c: numerico A B C Saída 
início ? ? ? 
a <- 5 5 ? ? 
b <- 15 5 15 ? 
c <- a+b 5 15 20 
escreva c 5 15 20 20 
a <- 10 10 15 20 
b <- 25 10 25 20 
c <- a+b 10 25 35 
escreva c 10 25 35 35 
a <- a-b -15 25 35 
escreva a -15 25 35 -15 
a <- 0 0 25 35 
b <- 0 0 0 35 
c <- 0 0 0 0 
 
Fim Algoritmo 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 22 
 Exercícios: 
Problema 1 
 
Em uma escola, o aluno faz duas provas por período, com as notas variando de 0 a 10. Caso a 
média aritmética das duas notas seja 7 ou mais, ele passa de ano; senão, ele é reprovado. Faça um 
programa que receba as duas notas de um aluno e escreva se ele passou ou não de ano. 
 
Problema 2 
 
Faça um programa que receba o valor do salário de uma pessoa e o valor de um financiamento 
pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salário da pessoa, o programa 
deverá escrever "Financiamento Concedido"; senão, escreverá "Financiamento Negado". 
Independente de conceder ou não o financiamento, o programa escreverá depois a frase "Obrigado 
por nos consultar." 
 
Problema 3 
 
Dois carros percorreram diferentes distâncias em diferentes tempos. Sabendo que a velocidade 
média é a razão entre a distância percorrida e o tempo levado para percorrê-la, faça um programa 
que leias as distâncias que cada carro percorreu e o tempo que cada um levou, e indique o carro 
que teve maior velocidade média. 
 
Problema 4 
 
Faça um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais 
nova, e seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o 
ano atual). 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 23 
11. Estrutura de Repetição 
Nos exemplos e exercícios que vimos até agora sempre foi possível resolver os problemas com uma 
seqüência de instruções onde todas eram necessariamente executadas uma única vez. Os algoritmos 
que escrevemos eram, portanto, apenas uma seqüência linear de operações. Nesta seção veremos 
um conjunto de estruturas sintáticas que nos dão mais flexibilidade para determinar a seqüência de 
execução dos comandos da linguagem. 
 
Quando queremos que um trecho de um algoritmo seja repetido num determinado número de vezes, 
utilizamos os comandos de repetição. A nossa linguagem possui três estruturas de repetição: 
Repita..Até, Para..Faça e Enquanto..Faça. 
11.1. Repita..Até 
Nessa estrutura todos os comandos da lista são executados e a expressão é avaliada. Isto se repete 
até que a avaliação da condição resulte em verdadeiro, quanto então o próximo comando a ser 
executado é o comando imediatamente após o até. Cada repetição da lista de comandos também é 
chamada de iteração. 
Essa estrutura também é chamada de laço de repetição. Eis a sua forma geral: 
 
Repita 
 <lista de comandos> 
Até <expressão lógica ou relacional> 
Ex.: Escrever os números de 1 a 10. 
 
ALGORITMO 
 DECLARE I: NUMERICO 
 I<- 1 
 
 REPITA 
 ESCREVA i 
 I<- I + 1 
 ATE I> 10 
FIM ALGORITMO 
 
Obs.: A variável "i" controla o número de repetições do laço. Normalmente a variável de controle 
do laço recebe um valor inicial, é incrementada de um valor constante no laço e tem seu valor 
testado em algum ponto do laço. Ao chegar a um determinado valor o laço é interrompido. A 
inicialização da variável contadora deve acontecer fora do laço, antes do seu início. 
Existem diversas maneiras de implementar o mesmo laço, mas todo laço com variável de controle 
deve conter: 
 
 a) inicialização 
 b) incremento(i=i+1) ou decremento(i=i-1) 
 c) teste de valor final 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 24 
 
 Veja um outro exemplo: Escreva os números de 10 a 1. 
 
ALGORITMODECLARE i :NUMERICO 
 i <- 10 
 REPITA 
 ESCREVA i 
 i <- i - 1 
 ATE i = 0 
FIM ALGORITMO 
11.2 Enquanto..Faca 
Na estrutura Enquanto..faca, a expressão lógica é avaliada e, se ela for verdadeira, a lista de 
comandos é executada. Isso se repete até que a condição seja falsa. Veja a sua forma geral: 
 
Enquanto <expressão lógica ou relacional> Faca 
<lista de comandos> 
Fim Enquanto 
A estrutura enquanto...faca também é uma estrutura de repetição, semelhante a repita. A diferença 
básica entre as duas estruturas é a posição onde é testada a expressão. No repita, a condição é 
avaliada após a execução dos comandos, o que garante que os comandos serão executados pelo 
menos uma vez. No enquanto, a expressão é avaliada no início e se o resultado for falso no primeiro 
teste a lista de comandos não é executada nenhuma vez. Essa diferença faz com que em 
determinadas situações o uso de uma estrutura seja mais vantajoso que o uso da outra. O exemplo a 
seguir, onde são mostradas soluções para um problema, utilizando as duas estruturas, ilustram essa 
diferença: 
 
Problema: Faça um algoritmo que leia diversos números positivos e escreva, para cada um, o 
número recebido. 
ALGORITMO 
 DECLARE i :NUMERICO 
 LEIA i 
 ENQUANTO i >=0 FACA 
 ESCREVA i 
 LEIA i 
 FIM ENQUANTO 
FIM ALGORITMO 
ALGORITMO 
 DECLARE i :NUMERICO 
 REPITA 
 LEIA i 
 SE i >=0 ENTAO 
 ESCREVA i 
 FIM SE 
 ATE i<0 
FIM ALGORITMO 
Neste algoritmo, se o primeiro valor for negativo, o algoritmo não deve escrever nada. Para que isso 
ocorra um teste do valor deve ser feito antes da escrita. Como no Repita o teste é feito ao final, um 
outro teste deve ser colocado no início do laço, o que faz com que, a cada iteração, dois testes sejam 
feitos. Isto não ocorre no Enquanto, onde o teste é feito no início, não sendo, portanto, necessário 
um teste adicional. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 25 
11.3 Para..Faca 
Forma geral: 
Para <variável de controle> De <valor inicial> Ate<valor final> [Passo<incremento>] Faca 
 <lista de comandos> 
Fim Para 
 
Na estrutura Para, a variável de controle é inicializada com <valor inicial> e no início de cada 
iteração o valor da variável de controle é comparado com <valor final>. Se o valor da variável for 
menor ou igual a <valor final>, a lista de comandos é executada e após ser executado o último 
comando da lista, a variável de controle é incrementada. Isto repete-se até que o valor da variável de 
controle seja maior que <valor final>, quando então é executado o comando imediatamente após a 
palavra Fim. A condição Passo não é obrigatória, mas se precisar incrementar a variável de controle 
você deve utilizar, por exemplo, você quer que a variável de controle pule em Dois em Dois a 
sintaxe ficaria assim: 
 
 
PARA i DE 1 ATE 1000 PASSO 2 FACA 
 <lista de comandos> 
FIM PARA 
 
A estrutura Para é uma estrutura de repetição mais completa que as anteriores, pois ela incorpora a 
inicialização, incremento e teste de valor final da variável de controle. É preferencialmente utilizada 
em situações em que sabe-se previamente o número de repetições a serem feitas. Este número de 
repetições pode ser uma constante ou estar em uma variável. 
A seguir serão apresentados alguns problemas utilizando estruturas de repetição e desenvolvidas 
algumas soluções para os mesmos. 
 
Problema 1: 
Faça um algoritmo que leia 5 números e escreva todos os que forem positivos. 
 
Solução: 
Neste problema, a mesma ação é repetida 5 vezes. Em cada uma delas um número é lido e, se for 
positivo, é escrito. Como o número de repetições é definido (5), pode-se utilizar a estrutura para. 
Uma possível solução para o algoritmo é a seguinte: 
 
Lembrete 
 
No AlgoMais a estrutura Para 
apenas incrementa. 
ALGORITMO 
 DECLARE i,numero :NUMERICO 
 PARA i DE 1 ATE 5 PASSO 1 FACA 
 LEIA numero 
 SE numero>0 ENTAO 
 ESCREVA numero 
 FIM SE 
 FIM PARA 
FIM ALGORITMO 
 
 
Neste algoritmo são utilizadas duas variáveis, cada uma com uma função bem definida. A variável i 
é usada para controlar o número de repetições e a variável número é utilizada para armazenar cada 
um dos valores lidos. Ao escrever um algoritmo é importante ter bem clara a função de cada 
variável. Como serão lidos 5 números diferentes, a leitura do número deve ser feita dentro do laço. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 26 
 
Problema 2: 
Faça um algoritmo que leia um número N e escreva todos os números de 1 a N. 
 
Solução: 
Neste problema, é lido um número N, e são escritos todos os números de 1 a N. Para isso deve ser 
utilizado uma estrutura de repetição. Como o número de repetições é conhecido (está na variável N) 
pode-se utilizar a estrutura Para. Uma possível solução para o problema é a seguinte: 
 
 
ALGORITMO 
 DECLARE i,numero :NUMERICO 
 LEIA numero 
 PARA i DE 1 ATE numero FACA 
 ESCREVA i 
 FIM PARA 
FIM ALGORITMO 
 
 
Vale observar que, como nesse algoritmo é lido apenas um número, a leitura do mesmo deve ser 
feita fora da estrutura de repetição. 
 
Estrutura de Repetição 
VisuAlg AlgoMais 
Repita 
 
< lista de comandos> 
Ate <expressão lógica ou relacional> 
Repita 
 
< lista de comandos> 
Ate <expressão lógica ou relacional> 
Enquanto <expressão lógica ou relacional> 
Faca 
<lista de comandos> 
FimEnquanto 
Enquanto <expressão lógica ou relacional> 
Faca 
<lista de comandos> 
Fim 
Para <variável de controle> De <valor inicial> 
Ate <valor final> [Passo<incremento>] Faca 
<lista de comandos> 
FimPara 
Para <variável de controle> De <valor inicial> 
Ate <valor final>[Passo<incremento>] Faca 
< lista de comandos> 
Fim 
 Exercícios Algoritmos com Repetição 
 
1. Implementar um algoritmo capaz de encontrar o maior dentre 5 números inteiros quaisquer. 
Suponha todos serem distintos. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 27 
2. Escrever um algoritmo que calcule a média obtida por uma turma de "n" alunos na primeira 
prova do semestre. 
3. Escrever um algoritmo que, dada uma seqüência de valores inteiros e positivos, determine qual e 
o menor valor desta seqüência e a média aritmética dos valores pares. O valor 0 (zero) indica o 
término dos dados de entrada (finalizador). 
 
4. Escrever um algoritmo que leia o nome, sexo, altura e peso de um grupo de 50 pessoas e informe: 
- média das alturas dos homens e dos pesos das mulheres; 
- nome do homem mais alto e da mulher mais gorda; 
5. Escrever um algoritmo que lê 5 valores para a, um de cada vez, e conta quantos destes valores 
são negativos, escrevendo esta informação. 
6. Escrever um algoritmo que lê um número desconhecido de valores, um de cada vez, e conta 
quantos deles estão em cada um dos intervalos [0,25], (25,50], (50,75], (75,100]. 
7. A série de Fibonacci tem como dados os dois primeiros termos da série que são respectivamente 
0 e 1. A partir deles os demais termos são construídos pela seguinte regra: 
 
Escrever um algoritmo que gera os 10 primeiros termos da série de Fibonacci e calcula e escreve a 
soma destes termos. 
8. Escrever um algoritmo que lê 2 conjuntos de 4 valores a, b, c, d, um conjunto por vez e os 
escreve assim como foram lidos. Em seguida, ordene-os em ordem decrescente e crescente e os 
escreva novamente. 
9. Escrever um algoritmo que lê 10 valores para n, um de cada vez, todos inteiros e positivos, e 
para cada n lido, escreva a tabuada de 1 até n de n. 
1 x n = n 
2 x n = 2n 
. . . 
. . . 
n x n =n2 
10. Escrever um algoritmo que lê um número não determinado de pares de valores m,n , todos 
inteiros e positivos, um par de cada vez, e calcula e escreve a soma dos n inteiros consecutivos a 
partir de m inclusive. 
Aplicação em problemas reais 
1. Num frigorífico existem 90 bois. Cada boi traz preso no seu pescoço um cartão contendo um 
número de identificação e seu peso. Implementar um algoritmo que escreva o número e o peso do 
boi mais gordo e do boi mais magro (não é necessário armazenar os dados de todos os bois). 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 28 
2. Foi feita uma pesquisa de audiência de TV em várias casas de uma certa cidade, num 
determinado dia. Para cada casa visitada, o entrevistador (munido de um "notebook") escolhia 
num menu qual o canal que estava sendo assistido (Cultura, SBT, Globo, Record, MTV, TVA, 
Manchete, Bandeirantes) e o número de pessoas que estavam assistindo TV. Se o TV estivesse 
desligado, nada era anotado, ou seja, esta casa não entrava na pesquisa. Implementar uma versão 
do algoritmo que o entrevistador está usando no seu "notebook", e que: 
 
a) leia um número indeterminado de dados, terminando quando o entrevistador escolher a opção 
Fim 
b) calcule e escreva a percentagem de audiência para cada emissora. 
c) identifique a maior e a menor audiência da pesquisa. 
 
3. Deseja-se fazer um levantamento a respeito da ausência de alunos à segunda prova de I.C.C. 
para cada uma das 14 turmas existentes. Para cada turma é fornecido um conjunto de valores, 
sendo que os dois primeiros valores do conjunto correspondem à identificação da turma (A, B, 
C, ...) e ao número de alunos matriculados, e os demais valores deste conjunto correspondem ao 
número de matrícula do aluno e à letra A ou P, para o caso de o aluno estar ausente ou presente, 
respectivamente. Implementar um algoritmo que: 
a. para cada turma, calcule a porcentagem de ausência e escreva a identificação da turma e a 
porcentagem calculada; 
b. determine e escreva quantas turmas tiveram porcentagem de ausência superior a 5%. 
4. Foi feita uma pesquisa para determinar o índice de mortalidade infantil em um certo período. 
Implementar um algoritmo que: 
a) leia inicialmente o número de crianças nascidas no período; 
b) leia, em seguida, um número indeterminado de linhas contendo, cada uma, o sexo de uma 
criança morta (masc, fem) e o número de meses de vida da criança. A última linha (que identificará 
o final da entrada de dados) conterá a palavra 'VAZIO' no lugar do sexo. 
c) determine e imprima: 
c1) a porcentagem de crianças mortas no período; 
c2) a porcentagem de crianças do sexo masc. mortas no período; 
c3) a porcentagem de crianças que viveram 24 meses ou menos no 
período. 
 
5. Implementar um algoritmo para calcular o número de dias decorridos entre duas datas 
(considerar também a ocorrência de anos bissextos), sabendo que: 
* cada par de datas é lida numa linha, a última linha contém o número do dia negativo (indicando 
que terminou o cálculo); 
* a primeira data lida é sempre a mais antiga. 
 
* O ano será digitado com 4 dígitos. 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 29 
12. VARIÁVEIS COMPOSTAS HOMOGÊNEAS 
Vimos, no início deste curso, ser possível dar um Nome para uma posição de memória, sendo que a 
esta será associado um valor qualquer. Pois bem, acontece que, muitas vezes, esta forma de 
definição, ou melhor dizendo, de alocação de memória, não é suficiente para resolver certos 
problemas computacionais. Imagine por Exemplo, como faríamos para construir um algoritmo, para 
ler o Nome de N Pessoas e que imprimisse um relatório destes mesmos nomes, mas ordenados 
alfabeticamente? Não seria uma tarefa simples, haja visto não ser possível determinar quantos 
nomes seriam lidos, mesmo que soubéssemos o número de pessoas, digamos 1.000 pessoas, 
teríamos que definir 1.000 variáveis do tipo STRING, como é mostrado abaixo: 
 
ALGORITMO "loucura" 
 
DECLARE nome1, nome2, nome3, nome4, nome5, nome6, nome7 ,...., nome999, nome1000: 
Literal 
 LEIA nome1,nome2,...,nome1000 
 . 
 . 
 . 
FIM ALGORITMO 
Considere o tamanho do algoritmo, e o trabalho braçal necessário para construí-lo. Isto só com 
1.000 Nomes, imagine agora 1.000.000 de pessoas. A construção deste algoritmo começaria a ficar 
inviável na pratica. Para resolver problemas como este, e outros, foi criado um novo conceito para 
alocação de memória sendo, desta forma, também criado uma nova maneira de definirem variáveis, 
a qual foi denominada de variável indexada. 
Uma variável indexada corresponde a uma seqüência de posições de memória, a qual daremos 
único Nome, sendo que cada uma destas pode ser acessada através do que conhecemos por índice. 
O índice corresponde a um valor numérico ( exceto NUMERICO ), ou a um valor caractere ( exceto 
CADEIA ). Cada uma das posições de memória de uma variável indexada pode receber valores no 
decorrer do algoritmo como se fosse uma variável comum, a única diferença reside na Sintaxe de 
utilização desta variável. 
12.1 Variáveis Indexadas Unidimensionais (Vetores) 
Também conhecida por "Vetor". Uma variável unidimensional, como o próprio Nome já indica, 
possui apenas uma dimensão, sendo possível definir variáveis com quaisquer tipo de dados. 
 
Declaração de Vetores 
Sintaxe: 
DECLARE <identificador> VETOR [<tamanho>] <tipo (numerico, logico, caracter ou cadeia)> 
Ex.: DECLARE idades VETOR [5] : NUMERICO 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 30 
Atribuindo Valores a Elementos do Vetor 
Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padrão: 
 
Sintaxe: 
< identificador>[<posição>] ← <valor> 
 
Ex.: idades[3] <- x 
 idades[1] <- 2 
 idades[i] <- i**2 
Problema 1: 
Escrever um algoritmo que lê um vetor V(6) e o escreve. Conte, a seguir, quantos valores de V são 
negativos e escreva esta informação. 
Solução: 
Neste problema, a mesma ação é repetida 6 vezes e mostra os valores lidos, logo seguir pede para 
dizer quantos desses números são negativos. Para isso deve ser utilizada uma estrutura de repetição 
para receber os valores lidos e uma condição para contar quantos numero são negativos. Uma 
possível solução para o algoritmo é a seguinte: 
ALGORITMO 
 DECLARE vet VETOR [6] :NUMERICO 
 DECLARE i, conta_neg :NUMERICO 
 conta_neg <- 0 
 PARA i DE 1 ATE 6 FACA 
 LEIA vet[i] 
 SE vet[i]<0 >ENTAO 
 conta_neg <- conta_neg + 1 
 FIM SE 
 FIM PARA 
 PARA i DE 1 ATE 6 FACA 
 ESCREVA vet[i] 
 FIM PARA 
 ESCREVA "Total de números negativos: ", conta_neg 
FIM ALGORITMO 
12.2 Variáveis Indexadas Bidimensionais (Matrizes) 
Também conhecida por "Matriz". Uma variável Bidimensional, como o próprio Nome já indica, 
possui duas dimensões, sendo ser possível definir variáveis com quaisquer tipo de dados válidos no 
AlgoMais. 
 a(1,1) a(1,2) 
A = a(2,1) a(2,2) 
 a(3,1) a(3,2) 
Matriz A 3x2 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 31 
Declaração de Matrizes 
DECLARE <identificador> VETOR [<dimensão 1>][<dimensão 2>] <tipo> 
 
Ex.: DECLARE A VETOR [3][2] NUMERICO 
Atribuindo Valores a Elementos da Matriz 
< identificador>[<posição 1>][<posição 2>] <- <valor> 
Ex.: A[3][1] <- x 
 A[1][1] <- 0 
 A[i][j] <- 14 
 
Problema 1: 
Escreva um algoritmo que lê uma matriz M(3,3) e calcula as somas: 
 
 a) da linha 3 de M. 
b) da coluna 2 de M. 
c) da diagonal principal. 
d) da diagonal secundária. 
e) de todos os elementos da matriz. 
Solução: 
Neste problema, temosuma matriz quadrada de ordem três por três sendo 3x3 = 9 ações que são 
repetida, logo seguir pede para dizer a soma da linha três M[3][quantidade de colunas], soma da 
coluna dois M[quantidade de linhas] [2], diagonal principal onde os índices da coluna e linha 
sempre são iguais, soma da diagonal secundária onde o índice da coluna vai ser a ordem da matriz 
quadrada mais um e menos o índice da linha e a soma de todos os elementos da matriz. Para isso 
deve ser utilizada uma estrutura de repetição para receber os valores lidos e algumas condições para 
verificar as questões pedidas. Uma possível solução para o algoritmo é a seguinte: 
 
 
 
ALGORITMO 
 DECLARE matriz VETOR[3][3] : NUMERICO; 
 DECLARE i, j, somaLinha3, somaColuna2, somaDiagPrinc, somaDiagSecu, somaTudo : 
NUMERICO 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 32 
Inicio 
 somaLinha3 <- 0 
 somaColuna2 <- 0 
 somaDiagPrinc <- 0 
 somaDiagSecu <- 0 
 somaTudo <- 0 
 PARA i DE 1 ATE 3 FACA 
 PARA j DE 1 ATE 3 FACA 
 LEIA matriz[i][j] 
 somaTudo <- matriz[i][j] + somaTudo 
 SE i=3 ENTAO 
 somaLinha3 <- matriz[i][j]+ somaLinha3 
 FIM SE 
 SE j=2 ENTAO 
 somaColuna2 <- matriz[i][j]+ somaColuna2 
 FIM SE 
 SE i=j ENTAO 
 somaDiagPrinc <- matriz[i][j]+ somaSomaDiagPrinc 
 FIM SE 
 SE j=4-i ENTAO 
 somaDiagSecu <- matriz[i][j]+ somaDiagSecu 
 FIM SE 
 FIM PARA 
 FIM PARA 
 PARA i DE 1 ATE 3 FACA 
 PARA j DE 1 ATE 3 FACA 
 ESCREVA matriz[i][j] 
 FIM PARA 
 FIM PARA 
 ESCREVA "Soma de todos os elementos é ", somaTudo 
 ESCREVA "Soma dos elementos da linha 3 é ", somaLinha3 
 ESCREVA "Soma dos elementos da coluna 2 é ", somaColuna2 
 ESCREVA "Soma dos elementos da diagonal principal é ", somaDiagPrinc 
 ESCREVA "Soma dos elementos da diagonal secundária é ", somaDiagSecu 
FIM ALGORITMO 
 
Variáveis Compostas Homogêneas 
VisuAlg AlgoMais 
variável [10] : <Tipo da Variável> variável Vetor [5] <Tipo da Variável>; 
variável [5,5] : <Tipo da Variável> variável Vetor [5][5] <Tipo da Variável>; 
Exercicios 
1. Implementar um algoritmo que leia 150 notas de provas e os respectivos nomes dos indivíduos 
(até 30 caracteres) e: 
 
* calcule a média das notas; 
* calcule quantas notas estão acima e abaixo da média (não considerar notas iguais à média); 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 33 
* quantas pessoas possuem a maior e a menor das notas, e quais são elas (isto é, seus nomes). 
2. Implementar um algoritmo para corrigir provas de múltipla escolha. Cada prova tem 10 
questões e cada questão vale 1 ponto. O primeiro conjunto de dados a ser lido será o gabarito para 
a correção da prova. Os outros dados serão os números dos alunos e suas respectivas respostas, e 
o último número, do aluno fictício, 9999, indicando que não há mais alunos. O programa deve 
calcular e imprimir: 
 
a) para cada aluno, seu número e sua nota; 
b) a porcentagem de aprovação, sabendo-se que a nota mínima de aprovação é 6; 
c) a nota que teve a maior freqüência absoluta, ou seja, a nota que apareceu mais vezes (supondo a 
inexistência de empates). 
Dicas: use o esquema de estruturas abaixo: 
 
 
3. Uma pesquisa sobre algumas características físicas da população de uma determinada região 
coletou os seguintes dados, referentes a cada habitante, para serem analisados: 
- sexo (masculino, feminino) 
- cor dos olhos (azuis, verdes, castanhos) 
- cor dos cabelos (louros, castanhos, pretos) 
- idade em anos. 
 
Para cada habitante, foi perfurado um cartão com esses dados, e o último cartão, que não 
corresponde a ninguém, conterá o valor da idade igual a -1. Implementar um algoritmo que 
determine e escreva: 
 
a) a maior idade dos habitantes; 
b) porcentagem de indivíduos do sexo feminino cuja idade esteja entre 18 e 35 anos, inclusive, e 
que tenham olhos verdes e cabelos louros (Tá bom assim?). 
 
4. Implementar um algoritmo para multiplicar duas matrizes de números inteiros. A multiplicação 
só é possível se o número de colunas da matriz A for igual ao número de linhas da matriz B. 
Suponha um tamanho máximo igual a uma matriz 5x5, sendo que o usuário entrará com o tamanho 
e os valores de cada uma das matrizes a serem multiplicadas. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 34 
 
13 SUBALGORITMOS 
São trechos de algoritmos que efetuam um ou mais cálculos determinados. Ao invés de escrever-se 
um algoritmo grande, escrevem-se vários algoritmos menores, os quais, não isoladamente, mas em 
conjunto, resolvem o problema proposto. É conveniente utilizá-los quando uma determinada tarefa 
é efetuada em diversos lugares no mesmo algoritmo. Ao invés de escrever-se um trecho diversas 
vezes, escreve-se um sub-algoritmo e chama-se-o diversas vezes. 
- Eles reduzem o tamanho do algoritmo. 
- Facilitam a compreensão e visualização do algoritmo. 
- São declarados no início do algoritmo e podem ser chamados em qualquer ponto após sua 
declaração. 
- Eles podem ser Funções que retorna algum valor ou Subrotina que não retorna Nada. 
13.1 Funções 
Uma função é um instrumento (Estático) que tem como objetivo retornar um valor ou uma 
informação. A chamada de uma função é feita através da citação do seu nome seguido 
opcionalmente de seu argumento inicial entre parênteses. As funções podem ser predefinidas pela 
linguagem ou criadas pelo programador de acordo com o seu interesse. 
13.1.1 Criando Funções 
A criação de uma Função em AlgoMais deve ser declarada, com os demais objetos, no início do 
programa. Este tipo de subalgoritmo sempre retornam um e apenas um valor ao algoritmo que lhe 
chamou. Cada função tem associada ao seu valor de retorno um tipo explícito. Da mesma maneira 
com que os parâmetros são fixos para todas as chamada o retorno também é fixo. 
 Veja como tem que ficar seu algoritmo principal: 
ALGORITMO 
 <Declaração das variáveis globais> 
 <Definição da função> 
 <Lista de comandos> 
FIM ALGORITMO 
Sintaxe da Função 
Funcao <identificador> (<parâmetros>) <tipo de retorno> 
 <Declaração de variáveis locais> 
 <Lista de comandos> 
Fim 
 
 Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. Entre tipos de dados a 
separação é feita com ponto-e-vírgulas ';'. 
 Tipo de retorno da função: numerico, logico ou cadeia. 
 Declaração de variáveis locais: idêntica a declaração de variáveis globais. As variáveis 
declaradas localmente tem validade dentro do escopo da função. 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 35 
Exemplo: 
ALGORITMO 
 DECLARE a,b NUMERICO 
 
 FUNCAO FSoma(x,y NUMERICO) NUMERICO 
 DECLARE rx, ry, total NUMERICO 
 rx<-x 
 ry<-y 
 total<-rx+ry 
 FSoma<-total 
 FIM 
 
 LEIA a 
 LEIA b 
 soma<-FSoma(a,b) 
 ESCREVA "Soma das vaiáveis é ", soma 
FIM ALGORITMO 
Cuidados e Bugs 
 Sempre declare as variáveis 
globais antes da função. 
 A função sempre fica dentro do 
escopo Algoritmo e Fim Algoritmo. 
 Procure não Declarar variáveis 
globais com o mesmo nome das 
variáveis da função. 
 Comandos de Repetição Não 
Funciona dentro da função. 
 
 Obs: São problemas do Software 
AlgoMais e VisuAlg não suporta 
Fuções. 
 
Veja como faz falta os comandos de repetição. Aqui tem um exemplo de um Algoritmo com o 
Subalgoritmo Função sem os Comandos de repetição, pois eles não funcionam no AlgoMais.Esse Algoritmo recebe Cinco valores e mostra qual é o valor maior. 
 
ALGORITMO 
 DECLARE v VETOR [5] NUMERICO 
 DECLARE i,maior NUMERICO 
 
 FUNCAO FMaior (vet VETOR [5] NUMERICO) NUMERICO 
 DECLARE RMaior,a NUMERICO 
 RMaior<-vet[1] 
 a<-2 
 SE RMaior<=vet[a] ENTAO 
 RMaior<-vet[a] 
 FIM SE 
 a<-a+1 
 SE RMaior<=vet[a] ENTAO 
 RMaior<-vet[a] 
 FIM SE 
 a<-a+1 
 SE RMaior<=vet[a] ENTAO 
 RMaior<-vet[a] 
 FIM SE 
 a<-a+1 
 SE RMaior<=vet[a] ENTAO 
 RMaior<-vet[a] 
 FIM SE 
 FMaior<-RMaior 
 FIM 
 
 PARA i DE 1 ATE 5 FACA 
 LEIA v[i] 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 36 
 ESCREVA v[i] 
 FIM 
 maior<-FMaior(v) 
 ESCREVA "Maior elemento é ", maior 
FIM ALGORITMO 
13.1.2 Funções Pré-Definidas 
FUNÇÃO OPERAÇÃO 
QUOCIENTE(X,Y) Retorna o quociente da divisão inteira de x por y. 
RESTO(X,Y) Retorna o resto da divisão inteira de x por y. 
TRUNCA(X) Elimina as casas decimais. 
MODULO(X) Valor absoluto de x. 
RAIZ(X) Raiz quadrada de x. 
Funções para trabalhar com (somente) variáveis do tipo CADEIA: 
TAMANHO(cadeia) Retorna o número de caracteres de uma cadeia. 
CONCATENA(cadeia1,cadeia2,...) Faz a concatenação da cadeia1 com a cadeia2. 
SUBCADEIA(cadeia, INICIO, 
FIM) 
Copia uma variável que contenha um texto, basta colocar a 
cadeia que deseja copiar, o início da cadeia de caracteres que vai 
copiar e o fim da cadeia de caracteres. 
Exemplos com o uso de funções pré-definidas. 
O ALGORITMO TERIA COMO RESULTADO... 
ALGORITMO 
 ESCREVA Quociente(23,5) 
 ESCREVA Resto(23,5) 
 ESCREVA Trunca(7.48) 
 ESCREVA Modulo(-30) 
 ESCREVA Raiz(25) 
FIM ALGORITMO 
4.0 
3.0 
7.0 
30.0 
5.0 
ALGORITMO 
 DECLARE nome CADEIA 
 nome<-Concatena("João", " da Silva") 
 ESCREVA nome 
 ESCREVA Subcadeia("curso de algoritmos",10,19) 
 ESCREVA Tamanho("curso de algoritmos") FIM 
ALGORITMO 
João da Silva 
algoritmos 
19.0 
13.2 Sub-rotinas 
Sintaxe: 
 
Sub-rotina <identificador do nome da sub-rotina> ( [REF] <Parâmetros> ) 
 <Declaração de variáveis locais> 
 <Lista de comandos> 
Fim 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 37 
Parâmetros: de um mesmo tipo de dado são separados por vírgula, entre os tipos de dado são 
separados por ponto e vírgula ( ; ). 
Passagem de parâmetros por referência: utiliza-se a construção Ref antes dos identificadores para 
indicar a passagem por referência. Os identificadores são separados por vírgula. 
Declaração de variáveis locais: idêntica a declaração de variáveis globais. As variáveis declaradas 
localmente tem validade dentro do escopo da sub-rotina. 
 
Exemplo: Sub-rotina Troca (Ref I, J numerico) 
 
 
Digita cinco valores e coloca em ordem decrescente 
 
 Algoritmo SEM sub-rotina Algoritmo COM sub-rotina 
 
ALGORITMO 
 DECLARE A,B,C,D,CONT,AUX 
NUMERICO 
 CONT <- 0 
 LEIA A,B,C,D 
 REPITA 
 SE D>A ENTAO 
 AUX<-D 
 D<-A 
 A<-AUX 
 FIM SE 
 SE D>B ENTAO 
 AUX<-D 
 D<-B 
 B<-AUX 
 FIM SE 
 SE D>C ENTAO 
 AUX<-D 
 D<-C 
 C<-AUX 
 FIM SE 
 SE C>A ENTAO 
 AUX<-C 
 C<-A 
 A<-AUX 
 FIM SE 
 SE C>B ENTAO 
 AUX<-B 
 B<-C 
 C<-AUX 
 FIM SE 
 SE B>A ENTAO 
 AUX<-B 
 B<-A 
 A<-AUX 
 FIM SE 
 CONT<-CONT+1 
 ATE CONT=5 
 ESCREVA A,B,C,D 
FIM ALGORITMO 
ALGORITMO 
 DECLARE A,B,C,D,CONT NUMERICO 
 
 SUBROTINA TROCA(ref x, y numerico) 
 DECLARE Aux NUMERICO 
 Aux <- x 
 x<- y 
 y <- Aux 
 FIM 
 
 CONT <- 0 
 LEIA A,B,C,D 
 REPITA 
 SE D>A ENTAO 
 TROCA(D,A) 
 FIM SE 
 SE D>B ENTAO 
 TROCA(D,B) 
 FIM SE 
 SE D>C ENTAO 
 TROCA(D,C) 
 FIM SE 
 SE C>A ENTAO 
 TROCA(C,A) 
 FIM SE 
 SE C>B ENTAO 
 TROCA(C,B) 
 FIM SE 
 SE B>A ENTAO 
 TROCA(B,A) 
 FIM SE 
 CONT<-CONT+1 
 ATE cont=5 
 ESCREVA A, " ",B," ",C," ",D 
FIM ALGORITMO 
 
 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 38 
 
 Exercícios: 
1. Escrever um algoritmo que lê uma matriz M( 6, 8 ) e a escreve. Utilize um subalgoritmo do tipo 
função para obter o maior elemento da linha 4 de M. Escreva o valor do maior elemento da linha 4 
de M. Utilize um subalgoritmo do tipo procedimento para inverter os valores da linha 2 de M. 
Inverter, aqui, quer dizer, trocar o 1o com o último, o 2o com o penúltimo, e assim por diante, até o 
4o com o 5o. Escreva a matriz modificada. Utilize um subalgoritmo do tipo procedimento para trocar 
a linha 1 com a linha 5 de M. Escreva a matriz modificada. 
Utilize também procedimentos para a leitura e para a escrita da matriz. 
2. Escrever um algoritmo para calcular a soma de dois valores inteiros. Utilizar um subalgoritmo de 
função que receba dois valores e retorne sua soma. 
3. Escrever um algoritmo para determinar o maior de dois valores inteiros. Utilizar um subalgoritmo 
de função que receba dois valores e retorne o maior. 
4. Escrever um algoritmo para determinar se um determinado número inteiro é par ou ímpar. Utilizar 
um subalgoritmo de função que retorna um valor lógico para indicar se o valor recebido é par ou 
não. 
5. Escrever um algoritmo que leia um número inteiro e calcula a soma de todos os números ímpares 
compreendidos entre 1 e o valor lido. Utilizar um subalgoritmo de função que receba o valor lido e 
retorna a soma dos ímpares. Dentro deste subalgoritmo deve ser utilizado o subalgoritmo da questão 
anterior. 
6. Escrever um subalgoritmo (com algoritmo principal) para elevar um número qualquer a uma 
potência. São fornecidos o número e a potência. 
7. Escrever um subalgoritmo (com algoritmo principal) para calcular a soma e o produto de dois 
valores inteiros. Fazer 2 soluções: uma com função e outra com procedimento. 
8. Escreva um algoritmo que lê um número não determinado de valores m, todos inteiros e positivos, 
um valor de cada vez, e, se m<10 utiliza um subalgoritmo do tipo função que calcula o fatorial de m, 
e caso contrário, utiliza um subalgoritmo do tipo função para obter o número de divisores de m. 
Escrever cada m lido e seu fatorial ou seu número de divisores com uma mensagem adequada". Neste 
caso, temos um programa principal e dois subalgoritmos. 
9. Escrever um algoritmo que lê um vetor V(10) e o escreve. Utilize uma função para obter o maior 
elemento de V. Escreva o maior elemento encontrado com a mensagem: "E o MAIOR do VETOR". 
10. Escrever um algoritmo que lê uma matriz M(6,6) e a escreve. Utilize uma função para obter a 
posição do menor elemento da diagonal principal de M. Escrever o menor elemento e sua posição na 
diagonal. 
11. Escreva um algoritmo que lê um número não determinado de conjuntos de 3 valores a, b, c, não 
negativos, um conjunto de cada vez, e, para cada conjunto lido, calcula as médias aritmética, 
geométrica, harmônica e ponderada com peso 2 para o menor valor, 3.5 para o valor intermediário e 
4.5 para o maior valor. Para cada conjunto lido escrever os valores lidos e as médias calculadas. 
Faça procedimentos para ordenação e cálculo das médias (por exemplo, Procedimento Ordena e 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNOTONET 39 
Procedimento Medias). 
12. Faca uma subrotina chamada remove para eliminar um elemento de um vetor. A subrotina deve 
receber por parâmetro a posição (índice) do elemento a ser eliminado, o tamanho do vetor e o nome 
do vetor. 
13. Faca uma subrotina chamada insere para inserir um elemento (número) em um vetor. A subrotina 
deve receber por parâmetro o número a ser inserido, a posição (índice) a ser inserido, o tamanho do 
vetor e o nome do vetor. 
 
14. FUNÇÕES DEFINIDAS RECURSIVAMENTE 
Um algoritmo que para resolver um problema divide-o em subprogramas mais simples, cujas 
soluções requerem a aplicação dele mesmo, é chamado recursivo, seja de forma direta ou indireta. 
Em geral, uma rotina recursiva R pode ser expressa como uma composição formada por um 
conjunto de comandos C (que não contém chamadas a R) e uma chamada (recursiva) à rotina R: 
 
 
Entretanto, pode-se ter também uma forma indireta de recursão, na qual as rotinas são conectadas 
através de uma cadeia de chamadas recursivas que acaba retornando a primeira que foi chamada: 
 
 
Para que esteja bem definida, um função recursiva deve possuir as seguintes propriedades: 
(1) Deve haver certos argumentos, chamando valores básicos, para os quais a função não se refere a 
ela mesma. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 40 
(2) Sempre que a função se refere a ela mesma o argumento deve estar relacionado a um valor 
básico e/ou a um valor anterior. 
Vejamos um exemplo clássico para esclarecermos o conceito: calculo do fatorial de um número. A 
definição de fatorial é: 
F(n) = 1 se n = 0 ou n = 1; 
F(n) = n.F(n-1), se n>1. 
onde n é um numero inteiro positivo. Uma propriedade (facilmente verificável) dos fatoriais é que: 
n! = n . (n-1)! 
Esta propriedade é chamada de propriedade recursiva: o fatorial de um numero pode ser calculado 
através do fatorial de seu antecessor. Ora, podemos utilizar esta propriedade para escrevermos uma 
rotina recursiva para o calculo de fatorial. Veja: 
F(4) = 4.F(4-1) 
 
F(3) = 3.F(3-1) 
 
F(2) = 2.F(2-1) 
 
F(1) = 1.F(1-1) 
 
F(0) = 1 imagina a função subindo, pois encontrou F(0) = 1 
 
F(1) = 1.1 
 
F(2) = 2.1 
 
F(3) = 3.2 
 
F(4) = 4.6 
 
resposta é 24. 
 
Qual é a lógica neste problema? 
4x3x2x1=24 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 41 
Se fosse nº 6 qual seria a resposta? 
6x5x4x3x2x1=720 
Vamos passar isso para o Computador 
Os algoritmos recursivos têm em geral a forma seguinte: 
• caso de base (base de recursão), onde o problema é resolvido diretamente (sem chamada 
recursiva) 
• caso geral, onde o problema é resolvido com uma chamada recursiva 
• caso geral onde o tamanho do problema é menor a cada chamada 
 Esquematicamente, os algoritmos recursivos têm a seguinte forma: 
 se "condicao para o caso de base" 
entao resolucao direta para o caso de base 
senao uma ou mais chamadas recursivas 
fim se 
Um algoritmo recursivo pode ter um ou mais casos de base e um ou mais casos gerais. E para que o 
algoritmo termine, as chamadas recursivas devem convergir em direção ao caso de base, senão o 
algoritmo não terminará jamais. Convergir significa ter uma parte menor do problema para ser 
resolvido. 
F(4) = 4.F(4-1) 
 F(3) = 3.F(3-1) 
 F(2) = 2.F(2-1) 
 F(1) = 1.F(1-1) 
 F(0) = 1 ------------ Caso Base 
 F(1) = 1.1 
 F(2) = 2.1 
 F(3) = 3.2 
F(4) = 4.6 
Algoritmo // AlgoMais 
Declare A, Fatorial numérico 
 
 Funcao Fat (x numerico) numérico 
 se x=0 
 entao fat<-1 
 senao Fat <- x * Fat (x-1) 
 fim se 
 Fim 
 
Leia A 
Fatorial <- Fat (A) 
Escreva "Fatorial ", A, " é ", Fatorial 
Fim Algoritmo 
 
Vantagens da Recursão 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 42 
Simplifica a solução de alguns problemas; 
Geralmente, um código com recursão é mais conciso; 
Caso não seja usada, em alguns problemas, é necessário manter o controle das variáveis 
manualmente (book keeping). 
 
Desvantagens da Recursão 
 
Funções recursivas são mais lentas que funções iterativas, pois muitas chamadas consecutivas a 
funções são feitas; 
Erros de implementação podem levar a estouro de pilha. Isto é, caso não seja indicada uma 
condição de parada, ou se esta condição nunca for satisfeita, entre outros. 
Exercicíos 
1. Escrever um algoritmo, utilizando um subalgoritmo recursivo, para calcular a soma dos 'n' 
primeiros inteiros positivos, sendo 'n' um valor fornecido pelo usuário. 
 
2. Escrever um algoritmo, utilizando um subalgoritmo recursivo, para calcular o fatorial de um 
valor inteiro qualquer. 
3. Escrever um algoritmo, utilizando um subalgoritmo recursivo, que eleve um número inteiro 
qualquer a uma potência. Devem ser fornecidos o número e a potência. 
4. Escrever um algoritmo, utilizando um subalgoritmo recursivo, que calcule a soma dos valores 
contidos em um vetor de 25 posições com valores inteiros. 
5. Faça uma função recursiva que receba um vetor de 100 posições e retorne o somatório dos 
elementos pares (ou ímpares) do vetor. 
6. Escrever um algoritmo, utilizando um subalgoritmo recursivo, para calcular o N-esimo termo da 
série de Fibonacci. 
7. Escrever um algoritmo, utilizando um subalgoritmo recursivo, que leia um valor inteiro qualquer 
e realize uma pesquisa em um vetor de 100 posições. No algoritmo principal deve ser informado se 
o valor lido está ou não contido no vetor. Caso ele esteja, também deve ser informada a sua 
posição. 
8. Escrever um subalgoritmo recursivo para encontrar o menor valor contido em um vetor de 100 
posições contendo valores inteiros. 
9. Faça uma função recursiva que receba dois números a e b , a < b, e retorne a soma dos números 
ímpares entre a e b. 
10. Faça uma função recursiva que receba 3 números a, b e c, sendo a < b, e retorne a soma dos 
divisores de c entre a e b. 
.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 
ELABORADO POR BRUNO TONET 43 
Referências 
http://www.apoioinformatica.inf.br/ 
http://www.consiste.dimap.ufrn.br/~david/ 
http://www.inf.pucrs.br/%7Eegidio/algo1/ 
http://dein.ucs.br/Disciplinas/sis218-algoritmos/2003-2/sis218d/cronog_algo.html 
http://www.inf.ufpr.br/info/ 
http://www.angelfire.com/bc/fontini/algoritm.html 
apostila de lógica de programação “criação de algoritmos e programas” professor renato da costa

Outros materiais