Buscar

Apostila de Visualg /Portugol

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 68 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 68 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 68 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

UNIVERSIDADE DO ESTADO DE SANTA CATARINA
CENTRO DE CIÊNCIAS TECNOLÓGICAS
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Apostila de VisuAlg
JOINVILLE - SC
2016
ANDRESSA MAYARA UMETSU
CHRISTIAN J. PEREIRA
GABRIEL MAZZOLENI PINTO
JANINE KNIESS
LUCIANA RITA GUEDES
RUI JORGE TRAMONTIN JUNIOR
Apostila de VisuAlg
JOINVILLE - SC
2016
Resumo
O conteúdo presente nesta apostila foi criado com o propósito de ser uma base de auxílio
ao aluno na disciplina de algoritmos, a qual trabalha com a ferramenta VisuAlg. Como a ferra-
menta é direcionada para alunos iniciantes de programação, há uma breve explicação de lógica
de programação agregado aos comandos do VisuAlg. Ao fim de cada capítulo, serão apresen-
tados exemplos para cada assunto abordado, assim como, exercícios de fixação. O material foi
baseado na primeira versão da apostila, a qual foi modificada com adições de definições mais
extensas de estruturas de programação, novos exercícios e novos exemplos.
Palavras-chaves: VisuAlg. Algoritmos.
Sumário
1 Introdução 6
2 VisuAlg 7
2.1 Estrutura Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.1 Tipos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2 Nome de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.3 Seção de Declarações . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Comando de Atribuição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.1 Operadores Aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.2 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.3 Operadores Lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Seção de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Entrada e Saída 16
3.1 Comando de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Comando de Saída . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Exemplos para Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3.1 Área de uma circunferência . . . . . . . . . . . . . . . . . . . . . . . 19
3
3.3.2 Número de vértices de um objeto geométrico . . . . . . . . . . . . . . 20
3.4 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Estruturas de Seleção 22
4.1 Comando Se . . . Entao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.1.1 Estrutura de Seleção Simples . . . . . . . . . . . . . . . . . . . . . . . 22
4.1.2 Estrutura de Seleção Composta . . . . . . . . . . . . . . . . . . . . . 24
4.2 Comando Escolha . . . Caso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3 Exemplos para Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.1 Tipo de Triângulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.2 Identificar se um número é par, positivo ou ano bissexto . . . . . . . . 28
4.4 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5 Estruturas de Repetição 32
5.1 Comando Repita . . . Ate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2 Comando Enquanto . . . Faca . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3 Comando Para . . . Faca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4 Exemplos para Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.4.1 Tabuada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.4.2 Fatorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.5 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6 Vetores e Matrizes 41
6.1 Vetor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.2 Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.3 Exemplos para Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3.1 Vetor de Nomes em Ordem Alfabética . . . . . . . . . . . . . . . . . . 45
4
6.3.2 Matriz de inteiros e diferentes somas de seus elementos . . . . . . . . . 46
6.4 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7 Sub-algoritmos 49
7.0.1 Variável Global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.0.2 Variável Local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.0.3 Parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.2 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2.1 Funções Pré-Definidas . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.3 Exemplos de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.3.1 Ordenar dois números determinando o tipo de ordenação . . . . . . . . 58
7.4 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8 Outros Comandos 63
8.1 Comando Aleatorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.2 Comando Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.3 Comando Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.4 Comando Pausa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.5 Comando Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.6 Comando Cronômetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.7 Comando Limpatela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Capítulo 1
Introdução
Algoritmo é uma sequência de instruções finitas e ordenadas de forma lógica para a
resolução de uma determinada tarefa ou problema. Alguns exemplos de algoritmos cotidianos
são: instruções de montagem; receitas; manuais de uso. Um algoritmo não é a solução do
problema, mas sim um caminho para a solução de um problema. De maneira geral, existem
muitos caminhos que levam a uma solução.
Diariamente são utilizados algoritmos de forma intuitiva e involuntária na execução
tarefas comuns. Por serem atividades simples e dispensam ater-se nas instruções necessárias
para fazê-las, o algoritmo presente nelas acaba passando despercebido.
Os algoritmos são muitos utilizados em soluções computacionais. A programação das
possíveis soluções consiste na codificação precisa desse algoritmo, de acordo com a linguagem
de programação escolhida. Para facilitar a tarefa de programar foram criadas várias linguagens
de programação.
O software VisuAlg tem como objetivo permitir alunos iniciantes em programação, pra-
ticar os algoritmos e os problemas de forma mais simples. O Visualg foi desenvolvido por
Cláudio Morgado de Souza, seu e-mail: pcmorgado@apoioinformatica.com.br. O soft-
ware é de livre uso e distribuição, atualmente está na versão 2.5.
6
Capítulo 2
VisuAlg
O VisuAlg é simples, disponibiliza um ambiente de programação no idioma português
utilizando o "Portugol", português estruturado, limitado a um conjunto de palavras e regras que
definem o que chamamos de sintaxe da linguagem, esta sintaxe será apresentada aos poucos.
As principais características do VisuAlg são:
• Apenas um comando por linha;
• Todas as palavras-chave são sem acentos, cedilha, etc;
• Não distingue maiúsculas e minúsculas no reconhecimento de palavras-chave e nomes de
variáveis (NOME é o mesmo quenome);
• Há possibilidade de uso de comentários, qualquer texto após de "//"é ignorado, até se
atingir o final de sua linha.
2.1 Estrutura Geral
A estrutura geral é a seguinte:
algoritmo ”semnome”
// Função
// Autor:
// Data:
// Seção de Declarações
7
var
inicio
// Seção de Comandos
fimalgoritmo
As palavras algoritmo, na primeira linha, e fimalgoritmo, na última linha, são palavras-
chaves que delimitam o início e fim de um algoritmo. A seção de declarações situa-se após a
palavra-chave var e antes de inicio. Nesta seção do algoritmo ocorrem as declarações das
variáveis, que serão posteriormente utilizadas. A seção de comandos começa após a palavra
inicio e termina em fimalgoritmo. As instruções ou comandos do algoritmo, ficam descritas na
seção de comandos.
A notação utilizada no decorrer da apostila será, palavras entre <> são elementos do
algoritmo a serem substituídos por nomes ou valores definidos pelo programador.
2.2 Variáveis
Variável tem como definição ser tudo aquilo que é sujeito a variações, que é instável
ou inconstante. Em algoritmos, variáveis são palavras que em um dado instante guardam um
determinado conteúdo, e ao decorrer das operações seguintes seu conteúdo pode ser alterado.
Contudo, o conteúdo recebido deve ser sempre do mesmo tipo.
Desse modo devem ser especificados os detalhes das variáveis que serão utilizadas.
Esses detalhes são: tipo do dado e nome.
2.2.1 Tipos de Dados
"Podemos definir um tipo de dados como um conjunto de objetos que tem em co-
mum o mesmo comportamento diante de um conjunto definido de operações"[2]
No VisuAlg há quatro tipos de dados: inteiro, real, cadeia de caracteres e lógico (boole-
ano).
• inteiro: define variáveis numéricas do tipo inteiro, considerando positivos e negativos.
Exemplo: 10, 5, -5, -10;
8
• real: define variáveis numéricas do tipo real, ou seja, com casas decimais. O separador
de decimais é o ponto e não a vírgula. Ex: 10.5, -5.8:
• caractere: define variáveis do tipo cadeia de caracteres, contendo letras, números e sím-
bolos especiais. As aspas caracterizam esse tipo de dado. Ex: "João", "casa", "1", "+";
• logico: define variáveis do tipo booleano, ou seja, só poderá ser representado por um dos
dois valores VERDADEIRO ou FALSO.
2.2.2 Nome de Variáveis
Os nomes das variáveis serão utilizados na manipulação de dados ao decorrer do algo-
ritmo, por isso se aconselha utilizar nomes claros e precisos. [1]
No VisuAlg, para serem válidos os nomes das variáveis, seguem as seguintes regras:
• Possuir como primeiro caractere uma letra ou underline ’_’, os outros caracteres seguintes
podem ser letras, números e underline;
• Nomes de variáveis não podem conter espaços em branco;
• Variáveis diferentes não podem possuir nomes iguais;
• Nomes de variáveis não podem ser iguais a palavras reservadas.
Exemplos:
Identificadores válidos: NOME, Telefone, Idade_FILHO, IdadeFilho, NOTA1, Est_Civil.
Identificadores inválidos: 3Endereco, Estado Civil, algoritmo, numero/complemento.
A seguir todas as palavras reservadas no VisuAlg:
9
Palavras Reservadas
aleatorio div grauprad passo
abs e inicio pausa
algoritmo eco int pi
arccos enquanto interrompa pos
arcsen entao leia procedimento
arctan escolha literal quad
arquivo escreva log radpgrau
asc exp logico raizq
ate faca logn rand
caracter falso maiusc randi
caso fimalgoritmo mensagem repita
compr fimescolha minusc se
copia fimfuncao nao sen
cos fimpara numerico senao
cotan fimprocedimento numpcarac timer
cronometro fimrepita ou tan
debug fimse outrocaso verdadeiro
declare funcao para xou
2.2.3 Seção de Declarações
A seção de declarações de variáveis situa-se após a palavra-chave var. As declarações
possuem a seguinte sintaxe:
var
<variável 1>, <variável 2>,..., <variável n>: <tipo de dado>
Onde, <variável i> é o nome escolhido para uma variável e <tipo de dado> determina
que tipo de valor as n variáveis poderão receber. Os nomes das variáveis são separados por
","vírgulas, e seguidos de “:” dois pontos e finalmente informar o tipo daquela variável ou lista
de variáveis. A seguir um exemplo de declaração:
var
x: inteiro
y, soma: real
nome: caractere
sinal: logico
Ao declarar as variáveis, todas possuem conteúdo inicialmente.
10
Valores Iniciais
inteiro 0
real 0
caractere ” ”
logico FALSO
2.3 Comando de Atribuição
A atribuição é o ato de ”colocar” um dado ou informação em uma variável. A atribuição
de valores a variáveis é feita com o operador <- .
<variável 1> <- <valor>
<variável 1> <- <variável 2>
<variável 1> <- <expressão do mesmo tipo da variável 1>
Do lado esquerdo fica a variável à qual está sendo atribuído o valor, e à sua direita pode-
se colocar qualquer expressão como constantes númericas, variáveis, expressões numéricas,
caracteres. Desde que o valor a ser atribuído tenha tipo igual ao da variável. Exemplo de
atribuição:
x <- 5
y <- 10.5
soma <- x + y
nome <- ”João da Silva”
sinal <-verdadeiro
Assim, são incorretos os seguintes comandos:
2060 <- NumeroConta
NumeroAgencia+digitoControle <- 2345
2.4 Operadores
2.4.1 Operadores Aritméticos
Para a construção de algoritmos que realizam cálculos matemáticos, todas as expressões
aritméticas devem ser linearizadas. Exemplo de linearização:
11
Equação tradicional
base·altura
2{[
2
3
− (5− 3)]+ 1} · 5
Equação computacional
(base · altura)/ 2
((2/3− (5− 3)) + 1) · 5
E como na matemática, algumas operações têm prioridade sobre as outras. A potencia-
ção tem a maior prioridade entre os operadores. A multiplicação e a divisão tem segunda maior
prioridade, sendo assim operadas antes da adição e da subtração. Para alterar as prioridades,
devemos usar os parênteses “()“.
Operadores Aritméticos
Adição +
Subtração −
Multiplicação ∗
Divisão /
Divisão Inteira \ ou div
Exponenciação ˆ ou exp(<base>, <expoente>)
Resto da Divisão % ou mod
Vale ressaltar a representação dos operadores div e mod:
• div ou \ : retorna o resultado inteiro de uma divisão, exemplos:
7 div 4 = 1
5 div 2 = 2
• mod ou % : retorna o resto da divisão inteira de dois números inteiros, exemplos:
7 mod 4 = 3
5 mod 2 = 1
2.4.2 Operadores Relacionais
Os operadores relacionais realizam a comparação entre dois operandos ou duas expres-
sões e resultam em valores lógicos (VERDADEIRO ou FALSO). Exemplos:
12
• 2 é igual a 3?
2 = 3
FALSO.
• 2 + 5 é maior que 4 ?
2 + 5 > 4
VERDADEIRO.
• "A"está antes de "B"na ordem alfabética?
”A” < ”B”
VERDADEIRO.
• 3 é diferente de 3?
3 <> 3
FALSO.
Operadores Relacionais
Maior >
Menor <
Maior ou Igual >=
Menor ou Igual <=
Igual =
Diferente <>
2.4.3 Operadores Lógicos
Os operadores lógicos ou booleanos atuam sobre expressões e resultam em valores
lógicos VERDADEIRO ou FALSO, são eles a conjunção, disjunção, disjunção exclusiva e
negação.[3]
13
Conjunção
A operação de conjunção é relacionada à interseção de conjuntos, em lógica resulta
VERDADEIRO quando ambas as partes forem verdadeiras. Exemplo de conjunção:
(2 + 5 > 4) e (3 <> 3)
VERDADEIRO e FALSO
FALSO
(2 + 5 > 4) e (3 = 3)
VERDADEIRO e VERDADEIRO
VERDADEIRO
Disjunção
A operação de disjunção é relacionada à união de conjuntos, em lógica resulta VERDA-
DEIRO quando uma das partes for verdadeira. Exemplo de disjunção:
(2 + 5 > 4) ou (3 <> 3)
VERDADEIRO ou FALSO
VERDADEIRO
(2 + 5 > 4) ou (3 = 3)
VERDADEIRO ou VERDADEIRO
VERDADEIRO
Disjunção Exclusiva
A operação de disjunção exclusiva resulta VERDADEIRO se e somente se exatamente
um das partes for verdadeira. Exemplo de disjunção exclusiva:
(2 + 5 > 4) xou (3 <> 3)
VERDADEIRO xou FALSO
VERDADEIRO
(2 + 5 > 4) xou (3 = 3)
VERDADEIRO xou VERDADEIROFALSO
Negação
A operação de negação nega uma afirmação, invertendo seu valor: caso seja FALSO,
torna-se VERDADEIRO. Exemplo de Negação:
nao (3 <> 3)
nao FALSO
VERDADEIRO
nao (2 + 5 > 4)
nao VERDADEIRO
FALSO
14
Operadores Lógicos
Conjunção e
Disjunção ou
Disjunção Exclusiva xou
Negação nao
2.5 Seção de Comandos
A seção de Comandos contêm o conjunto de operações e instruções do algoritmo. Esta
seção situa-se entre as palavras-chaves inicio e fimalgoritmo. Todo conjunto de instruções do
algoritmo possui uma estrutura sequencial, ou seja, as instruções são executadas em uma ordem.
inicio
// Seção de Comandos
<instrução 1>
<instrução 2>
...
<instrução n>
fimalgoritmo
Exemplo:
algoritmo ”Exemplo Capitulo 1”
// Função: Mostrar um simples exemplo
// Autor: Autores da Apostila
// Data: 2015
// Seção de Declarações
var
x: inteiro
y, soma: real
nome: caractere
sinal: logico
inicio
// Seção de Comandos
x <- 5 // instrução 1
y <- 10.5 // instrução 2
soma <- x + y // instrução 3
nome <- ”João da Silva” // instrução 4
sinal <-verdadeiro // instrução 5
fimalgoritmo
15
Capítulo 3
Entrada e Saída
Para criar um algoritmo que seja executável dentro de um computador, este algoritmo
deve ser composto de entrada, processamento e saída. A entrada é o meio pelo qual o usuário
pode informar dados. O processamento é onde ocorre a manipulação e cálculos dos dados, para
então chegar a resolução de uma determinada tarefa ou problema. Por fim, a saída retorna o re-
sultado do processamento. A seguir serão descritos os comandos de entrada e saída no VisuAlg,
e nos próximos capítulos serão apresentados comandos que auxiliarão no processamento.
3.1 Comando de Entrada
A entrada é o meio pelo qual o usuário pode informar dados que serão atribuidos a
variáveis e utilizados no processamento. No VisuAlg o comando de entrada é o leia. A sintaxe
deste comando é:
var
<variável 1>, <variável 2>,...,<variável n>: <tipo de dado>
...
leia (<variável 1>, <variável 2>, ..., <variável n>)
Ao utilizar o comando leia, aparecerá uma tela esperando o usuário informar os da-
dos. Toda variável usada no leia deve ser declarada anteriormente. A seguir um exemplo da
utilização do comando leia:
16
algoritmo ”Exemplo de leia”
var
x: inteiro
y, soma: real
nome: caractere
sinal: logico
inicio
// Seção de Comandos
leia ( x ) // valor atribuído a x será de acordo com usuário
leia ( y ) // valor atribuído a y será de acordo com usuário
soma <- x + y // valor atribuído a soma será de acordo com duas entradas
leia ( nome )
leia ( sinal )
fimalgoritmo
Deve estar claro que sempre à direita do comando leia haverá uma ou mais variáveis.
Assim, são incorretos os seguintes comandos:
leia ( NumeroConta + 60 )
leia ( 12345 )
leia ( NomeCliente + Sobrenome )
Caso o usuário informe um dado diferente do esperado, o VisuAlg mostrará uma tela de
erro, avisando que o algoritmo esperava determinado tipo de dado. Por exemplo, utilizando o
exemplo de algoritmo descrito acima, em que há leitura das variáveis x, y, nome e sinal. Caso
o usuário digite um valor real qualquer como 2.3 na primeira linha de entrada de dados, onde x
é do tipo inteiro. Consequentemente, o programa irá parar e avisar sobre erro de inconsistência
entre o tipo informado e o esperado. O único caso em que não ocorrerá erro é a entrada de
dados para tipo lógico, qualquer entrada diferente da palavra VERDADEIRO, será atribuído a
variável lógica o valor FALSO.
3.2 Comando de Saída
A saída de dados é o meio pelo qual o usuário pode visualizar o resultado do processa-
mento do algoritmo. No VisuAlg há dois comandos de saída, são o escreva e o escreval, suas
finalidades são diferentes. As sintaxes destes comandos são:
17
// escreva, mostra as n expressões
escreva ( <expressão 1>, <expressão 2>, ..., <expressão n> )
// escreval, mostra as n expressões e pula uma linha em seguida
escreval ( <expressão 1>, <expressão 2>, ..., <expressão n> )
A <expressão i> é o valor que aparecerá na tela, a qual pode ser um texto, conteúdo
de uma variável ou uma expressão matemática. A saída pode intercalar textos com variáveis.
Exemplo:
algoritmo ”Exemplo do comando escreva”
...
x <- 5
y <- 10.5
nome <- ”João da Silva”
sinal <- verdadeiro
escreva ( nome )
escreva ( sinal )
escreva ( ” O valor de x: ”, x )
escreva ( ” O valor de y: ”, y )
escreva ( ” A soma de ”, x,” e ”, y,” é ”, x + y )
fimalgoritmo
Saída do algoritmo
João da Silva verdadeiro O valor de x: 5 O valor de
y: 10.5 A soma de 5 e 10.5 é 15.5
algoritmo ”Exemplo do comando escreval”
...
x <- 5
y <- 10.5
nome <- ”João da Silva”
sinal <- verdadeiro
escreval ( nome )
escreval ( sinal )
escreval ( ” O valor de x é: ”, x )
escreval ( y,” é o valor de y. ” )
escreval ( ” A soma de ”, x,” e ”, y,” é ”, x + y )
fimalgoritmo
Saída do algoritmo
João da Silva
verdadeiro
O valor de x: 5
10.5 é o valor de y.
A soma de 5 e 10.5 é 15.5
18
Caso sejam desejados espaços em branco antes de escrever um determinado valor, é
possível especificar o número de espaços que se deseja. Por exemplo, o comando escreva (x:5)
escreve o valor da variável x em 5 espaços, alinhado-o à direita. Para variáveis reais, pode-se
também especificar o número de casas decimais que serão exibidas. Por exemplo, considerando
y como uma variável real, o comando escreva (y:6:2) escreve seu valor em 6 espaços colocando
2 casas decimais.
//Espaços em branco
//N, M, Z são número de espaços em branco antes de escrever
escreva (<expressão 1>:<N>, <expressão 2>:<M>, ..., <expressão n>:<Z>)
escreval (<expressão 1>:<N>, <expressão 2>:<M>, ..., <expressão n>:<Z>)
//Casas Decimais
//A, B, C são o número de casas decimais
escreva (<expressão 1>:<N>:<A>, <expressão 2>:<M>:<B>, ..., <expressão n>:<Z>:<C>)
escreval (<expressão 1>:<N>:<A>, <expressão 2>:<M>:<B>, ..., <expressão n>:<Z>:<C>)
3.3 Exemplos para Fixação
Os problemas e suas soluções apresentados abaixo, aplicam os conceitos até aqui estu-
dados.
3.3.1 Área de uma circunferência
[Manzano, 2003, 3.8] Criar um algoritmo que receba o raio e efetue o cálculo da área
de uma circunferência, apresentando a medida da área calculada.
Algoritmo: Primeiramente é necessário conhecer a fórmula para efetuar o cálculo da
área de uma circunferência, sendo esta: A = piR2.
1. Determinar as variáveis que serão utilizadas, A e R do tipo real. No VisuAlg há constante
matemática com valor, chamado de pi
2. Ler um valor para o raio, no caso a variável R;
3. Efetuar o cálculo da área de acordo com a fórmula e atribuir a variável A;
4. Apresentar o valor da variável A.
Algoritmo em VisuAlg:
19
algoritmo ”Area Circunferência”
//Função: Calcular a área de uma circunferência
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
A, R: real
inicio
// Seção de Comandos
escreva (”Informe valor do raio: ” )
leia ( R )
A <- pi * exp (R, 2)
escreva (”Área da cicunferência é: ”, A)
fimalgoritmo
Saída do algoritmo
Informe valor do raio: 2
Área da cicunferência é: 12.5663706143592
Observação: O valor lido em leia( R ), foi uma escolha apenas para ilustração do exem-
plo.
3.3.2 Número de vértices de um objeto geométrico
[Medina e Marco, 2005, 2.5] Sabendo que a relação entre vértices, arestas e faces de
um objeto geométrico é dada pela fórmula: vertices + faces = arestas + 2. Dado o número de
faces e arestas (número inteiro e positivo), calcule o número de vértices de um objeto geométrico
genérico. Ao fim mostre o número de vértices.
Algoritmo: A fórmula para efetuar o cálculo do número de vértices já foi dada no
problema, resta apenas isolar e ter então: vertices = arestas - faces + 2
1. Determinar as váriaveis que serão utilizadas, vertices, faces e arestas do tipo inteiro.
2.Ler os valores de faces e arestas, no caso a variável faces e arestas;
3. Efetuar o cálculo do número de vértices de acordo com a fórmula, e atribuir à variável
vertices;
4. Apresentar o valor da variável vertices.
Algoritmo em VisuAlg:
20
algoritmo ”Número de Vértices”
//Função: Calcular o número de vértices de um objeto geométrico genérico
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
vertices, faces, arestas: inteiro
inicio
// Seção de Comandos
escreva (”Entre com o número de faces do objeto gométrico: ”)
leia ( faces )
escreva (”Entre com o número de arestas do objeto gométrico: ”)
leia ( arestas )
vertices <- arestas - faces + 2
escreva (”O número de vértices do objeto especificado é: ”, vertices)
fimalgoritmo
Saída do algoritmo
Entre com o número de faces do objeto gométrico: 5
Entre com o número de arestas do objeto gométrico: 12
O número de vértices do objeto especificado é: 9
Observação: Os valores para faces e arestas foram escolhidos apenas para ilustração do
exemplo.
3.4 Exercícios de Fixação
1. [Medina e Marco, 2005, 2.5] Faça um algoritmo que calcule a média de quatro números
introduzidos pelo usuário.
2. [Medina e Marco, 2005, 2.5] Faça um algoritmo que receba a temperatura em graus
Celsius e apresente-a em graus Fahrenheit, de acordo com a fórmula ◦F = (1.8 ◦C)+32.
3. Faça um algoritmo 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 do <piloto>
foi <velocidade média> km/h.”
4. Escreva um algoritmo que calcule o número de notas que deve ser dado de troco para um
pagamento efetuado. O algoritmo deve ler o valor a ser pago, e o valor realmente pago.
Supor que o troco seja dado em notas de 50, 20, 10, 5, 2 e 1 real, dando sempre a menor
quantidade de notas.
21
Capítulo 4
Estruturas de Seleção
Os algoritmos vistos até agora possuem um fluxo único de execução, independente das
entradas, todas as instruções são executadas. Mas muitas vezes é preciso determinar sequências
alternativas de ações, ocorrendo um desvio de fluxo. O desvio de fluxo é usado para decidir
se um conjunto de instruções deve, ou não, ser realizado. Essa decisão é feita com o uso de
seleção (condição), que irá fazer a verificação por qual "caminho"o algoritmo vai prosseguir, de
acordo com valor lógico (booleano) da condição, VERDADEIRO ou FALSO. Os operadores
relacionais são usados na construção destas condições.
No Visualg há dois comandos para seleção, são eles o comando se. . . entao . . . fimse e
escolha. . . caso
4.1 Comando Se . . . Entao
O comando de seleção se. . . entao . . . fimse, tem por finalidade fazer comparações de
tal forma que possamos simular uma decisão. Há dois tipos de comandos para estruturas de
seleção, a simples e a composta. Descritas a seguir:
4.1.1 Estrutura de Seleção Simples
No caso do se simples, existe apenas uma alternativa a ser escolhida, ou ela executa a
parte VERDADEIRA ou segue com o fluxo do programa. Apresentando a sua sintaxe:
22
se <condição> entao
<instruções para condição verdadeira>
fimse
A estrutura de seleção simples inicia com a palavra-chave se e termina em fimse. A
<condição> a ser analisada deve ficar entre as palavras se e entao. Se o seu resultado for
VERDADEIRO, todos as instruções até o fimse são executadas. Caso contrário, ou seja, o seu
resultado for FALSO, estes comandos são ignorados e a execução do algoritmo continua a partir
da primeira linha após o fimse. Exemplo de seleção simples:
algoritmo ”Exemplo Seleção Simples”
//Função: Somar x e y, se x e y forem maiores ou iguais a zero
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x: inteiro
y, soma: real
sinal: logico
inicio
// Seção de Comandos
leia ( x , y )
se (x >= 0) e (y >= 0)entao
soma <- x + y
escreva ( soma )
sinal <-verdadeiro
fimse
escreva (”Entradas Válidas?”, sinal)
fimalgoritmo
Saída do algoritmo: Caso 1
10 5
15
Entradas Válidas? VERDADEIRO
Saída do algoritmo: Caso 2
-1 5
Entradas Válidas? FALSO
É importante frisar que sempre à direita do comando deverá parecer uma expressão
lógica. Assim, os seguintes comandos são incorretos:
se x <- y entao // É uma atribuição e não uma expressão lógica
se x + y entao // É uma expressão aritmética e não lógica
Por outro lado, estão corretos os seguintes comandos:
23
se (x > y) e (x > z) ou (y <> z) entao
se nao Achou entao // Correto, se a palavra Achou for uma variável lógica
4.1.2 Estrutura de Seleção Composta
No caso do se composto, existem duas alternativas a serem escolhidas, ou ela executa
a parte VERDADEIRA ou a parte FALSA, dependendo da condição. Apresentando a sua sin-
taxe:
se <condição> entao
<instruções para condição verdadeira>
senao
<instruções para condição falsa>
fimse
A estrutura de seleção composta possui forma muito similar com a simples, sua única
diferença é presença da palavra-chave senao, logo após as instruções para condição verdadeira.
Nesta outra forma do comando, a condição é analisada e se o resultado for VERDADEIRO,
todas as instruções até a palavra senao são executadas, e a execução continua a partir da primeira
linha depois do fimse. Se o resultado for FALSO, estes comandos são ignorados e as instruções
a partir do senao são executadas até a linha fimse. Exemplo de seleção composta:
algoritmo ”Exemplo Seleção Composta”
//Função: Somar x e y, se x e y forem maiores ou iguais a zero
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x: inteiro
y, soma: real
inicio
// Seção de Comandos
leia ( x , y )
se (x >= 0) e (y >= 0)entao
soma <- x + y
escreva ( soma )
senao
escreva (”Entradas Inválidas!”)
fimse
fimalgoritmo
24
Saída do algoritmo: Caso 1
10 5
15
Saída do algoritmo: Caso 2
-1 5
Entradas Inválidas!
4.2 Comando Escolha . . . Caso
Em algumas situações é necessário ter várias soluções ligadas a respostas diferentes,
neste caso a estrutura de seleção simples ou composta não é uma solução prática, isto porque
será necessário escrever muitas linhas de algoritmo. Temos então o comando de alternativa de
múltipla escolha. Uso do comando escolha . . . caso é muito utilizado na construção de menu,
onde o algoritmo necessita executar várias funções e o usuário precisa determinar a operação
que executará. O funcionamento deste comando obedece a seguinte regra:
escolha <opção (inteiro/caractere)>
caso <valor da opção 1.1>, <valor da opção 1.2>,..., <valor da opção 1.n>
<instruções 1>
caso <valor da opção 2.1>, <valor da opção 2.2>,..., <valor da opção 2.n>
<instruções 2>
outrocaso
<instruções 3>
fimescolha
O comando escolha . . . caso inicia com a palavra-chave escolha e termina em fimes-
colha. Na primeira linha fica a opção, uma variável do tipo inteiro ou caractere, tal que o seu
conteúdo é determinado anteriormente. E cada caso verifica se conteúdo é igual a alguma de
suas opções. Se sim, são executadas todas instruções até a linha do próximo caso, e retoma
execução para linha após fimescolha. Se não, significa que o conteúdo da opção é inválida,
onde é utilizado o outrocaso, para tratar esses casos inválidos. Abaixo um exemplo de escolha
. . . caso:
algoritmo ”Exemplo Seleção Composta”
//Função: Mostrar um exemplo de seleção composta
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x: inteiro
y, resultado: real
opcao: caractere
25
inicio
// Seção de Comandos
escreval (”Digite dois valores, e operação que deseja ”+” ou ”-” ” )
leia ( x , y , opcao)
escolha opcao
caso ”+”
resultado <- x + y
escreval ( resultado )
caso ”-”
resultado <- x - y
escreval ( resultado )
outrocaso
escreva (”OpçãoInválida!”)
fimescolha
fimalgoritmo
Saída do algoritmo: Caso 1
Digite dois valores, e operação que deseja ”+” ou
”-”
10 5 +
15
Saída do algoritmo: Caso 2
Digite dois valores, e operação que deseja ”+” ou
”-”
10 5 -
5
Saída do algoritmo: Caso 2
Digite dois valores, e operação que deseja ”+” ou
”-”
10 5 /
Opção Inválida!
4.3 Exemplos para Fixação
Os problemas e suas soluções apresentados abaixo, aplicam os conceitos até aqui estu-
dados.
4.3.1 Tipo de Triângulo
[Manzano, 2003, 4.6] Ler três valores para os lados de um triângulo, considerando
lados como: A, B e C. Verificar se os lados fornecidos formam realmente um triângulo, e se
for esta condição verdadeira, deverá ser indicado qual tipo de triângulo foi formado: isósceles,
escaleno ou equilátero.
26
Algoritmo: Para estabelecer este algoritmo, é necessário em primeiro lugar saber o que
realmente é um triângulo. Triângulo é uma forma geométrica composta por três lados, sendo
que cada lado é menor que a soma dos outros dois lados. Perceba que isto é uma condição, é
triângulo quando A < B + C, quando B < A + C e quando C < A + B. Depois de verificar
que os valores informados forma um triângulo, deve ser analisado qual o tipo de triângulo é
formado: isósceles, escaleno ou equilátero. Um triângulo é isósceles quando possui dois lados
iguais e um diferente, sendo A = B ou A = C ou B = C; é escaleno quando possui todos os
lados diferentes, sendo A <> B e B <> C e é equilátero quando possui todos os lados iguais,
sendo A = B e B = C.
1. Ler três valores para os lados de um triângulo: A, B, C
2. Verificar dados informados formam um triângulo, se sim, verificar qual é o tipo do triân-
gulo;
3. Caso os lados fornecidos não caracterizem um triângulo, avisar a ocorrência;
Algoritmo em VisuAlg:
algoritmo ”Tipo de Triângulo”
//Função: informar se é um triângulo e seu tipo
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
A, B, C: real
inicio
// Seção de Comandos
escreva (”Informe o valor de cada lado do triângulo: ”)
leia ( A, B, C )
se (A < B + C) ou (B < A + C) ou (C < A + B)entao
se (A = B) e (B = C) entao
escreva (”Triângulo Equilátero”)
senao
se (A = B) ou (A = C) ou (C = B)entao
escreva (”Triângulo Isósceles”)
senao
escreva (”Triângulo Escaleno”)
fimse
fimse
senao
escreva (”Os valores não formam um triângulo”)
fimse
fimalgoritmo
27
Saída do algoritmo: Caso 1
3 3 3
Triângulo Equilátero
Saída do algoritmo: Caso 2
3 3 2
Triângulo Esósceles
Saída do algoritmo: Caso 2
5 3 2
Triângulo Escaleno
4.3.2 Identificar se um número é par, positivo ou ano bissexto
[Medina e Marco, 2005, 3.2] Faça um algoritmo capaz de identificar se um número
é par ou ímpar; positivo, negativo ou zero; um ano bissexto - considere que para o ano ser
bissexto basta que seja divisível por 400. Caso contrário, precisa ser divisível por 4 e não ser
divisível por 100. Caso não seja nenhuma das opções anteriores, o algoritmo deve retornar uma
mensagem informando que a operação solicitada não é válida.
Algoritmo: O algoritmo possuirá três funcionalidades diferentes, e executará uma que
o usuário solicitar. A primeira será identificar se o número é par ou ímpar, ou seja, verificar se
o resto da divisão por dois é zero ou não. A segunda será identificar se o número é positivo,
negativo ou igual a zero. E a terceira se é bissexto, de acordo com as considerações feitas na
descrição do problema.
1. Ler um número inteiro;
2. Mostrar opções de funcionalidades ao usuário;
3. Caso 1. mostrar se é par ou ímpar;
4. Caso 2. mostrar se é positivo, negativo ou zero;
5. Caso 3. mostrar se é ano bissexto, ou não.
Algoritmo em VisuAlg:
28
algoritmo ”Menu Identificação”
//Função: Identificar: par ou ímpar; positivo, negativo ou zero; ano bissexto
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
n, opcao: inteiro
inicio
// Seção de Comandos
escreva (”Entre com o valor a ser testado: ”)
leia ( n )
escreva (”Você pretende identificar se o número é: ”)
escreva (”Opção 1: Par ou ímpar: ”)
escreva (”Opção 2: Positivo, negativo ou 0: ”)
escreva (”Opção 3: Ano Bissexto: )
leia ( opcao )
escolha opcao
caso 1
se n mod 2 = 0 entao
escreva (”Número par.”)
senao
escreva (”Número ímpar.”)
caso 2
se n > 0 entao
escreva (”Número positivo.”)
senao
se n < 0 entao
escreva (”Número negativo.”)
senao
escreva (”Número zero.”)
caso 3
se ((n mod 4 = 0) e (n mod 100 <> 0)) ou (n mod 400 = 0)entao
escreva (”Ano bissexto.”)
senao
escreva (”Ano não é bissexto.”)
outrocaso
escreva (”Opção inválida.”)
fimescolha
fimalgoritmo
29
Saída do algoritmo: Caso 1
Entre com o valor a ser testado
10
Você pretende identificar se o número é: Opção 1:
Par ou ímpar:
Opção 2: Positivo, negativo ou 0:
Opção 3: Ano Bissexto:
1
Número par.
Saída do algoritmo: Caso 2
Entre com o valor a ser testado
-10
Você pretende identificar se o número é: Opção 1:
Par ou ímpar:
Opção 2: Positivo, negativo ou 0:
Opção 3: Ano Bissexto:
2
Número negativo.
Saída do algoritmo: Caso 2
Entre com o valor a ser testado
2015
Você pretende identificar se o número é: Opção 1:
Par ou ímpar:
Opção 2: Positivo, negativo ou 0:
Opção 3: Ano Bissexto:
3
Ano não é bissexto.
4.4 Exercícios de Fixação
1. [Manzano, 2003, 4.7] Ler quatro valores referentes a quatro notas escolares de um aluno
e imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da média escolar
for maior ou igual a 7. Se o aluno não foi aprovado, indicar uma mensagem informando
esta condição. Apresentar junto das mensagens o valor da média do aluno para qualquer
condição.
2. [Manzano, 2003, 4.7] Efetuar leitura de quatro números inteiros e apresentar os números
que são divisíveis por 2 e 3.
3. [Manzano, 2003, 4.7] Efetuar leitura de quatro números inteiros e apresentar os números
que são divisíveis por 2 ou 3.
4. Faça um algoritmo que receba o valor do salário de uma pessoa e o valor de um finan-
30
ciamento pretendido. Caso o financiamento seja menor ou igual à 5 vezes o salário da
pessoa, o algoritmo deverá escrever “Financiamento Concedido”, se não, ele deverá es-
crever “Financiamento Negado”. Independente de conceder ou não o financiamento, o
algoritmo escreverá depois a frase: “Obrigado por nos consultar.”
5. Faça um programa que recebe 4 valores, I, A, B, C, onde I é um número inteiro positivo
e A, B e C são quaisquer valores reais. O programa deve escrever os valores lidos e:
• Se I = 1, Escrever A, B e C em ordem crescente;
• Se I = 2, Escrever A, B e C em ordem decrescente;
• Se I = 3, Escrever A, B e C de forma que o maior valor fique entre os outros;
• Se I não for um dos três valores acima, dar uma mensagem indicando isto.
31
Capítulo 5
Estruturas de Repetição
Nos exemplos e exercícios que foram apresentados até agora sempre foi possível resol-
ver os problemas com uma sequência de instruções, onde todas eram necessariamente executa-
das uma única vez. Os algoritmos seguiam, portanto, apenas uma sequência linear de operações.
Veja, por exemplo, um algoritmo para ler os nomes e as notas das provas de três alunos e cal-
cular suas médias. Uma possível solução seria repetir o trecho de código do algoritmo três
vezes. A solução acima é viável apenas para uma turma de poucos alunos; para uma turma de
40 alunos, a codificação da solução seria bem trabalhosa. Nesta seção, será apresentado um
conjunto de estruturas de repetição que permitem que um trecho de um algoritmo seja repetido
um determinado número de vezes, sem que o código correspondente tenha que ser escrito mais
de uma vez. O VisuAlg possui três estruturas de repetição: repita . . . ate; enquanto . . . faca
e para . . . faca. Todas as repetições têmuma característica em comum: o fato de haver uma
verificação de condição, para determinar se a repetição prossegue ou não.
5.1 Comando Repita . . . Ate
Nessa estrutura, todas as instruções da lista são executadas, e no fim uma expressão
lógica é avaliada. Por consequência, este comando executa pelo menos uma vez o conjunto
de instruções antes da verificação. Isto se repete até que a avaliação da condição resulte em
VERDADEIRO, quando então o próximo comando a ser executado é o comando imediatamente
após o ate. Cada repetição do conjunto de instruções também é chamada de iteração. Sua forma
geral é:
32
repita
<instruções>
ate <expressão lógica>
A <expressão lógica> deve ser pensada como uma condição de parada da repetição.
Exemplo:
algoritmo ”Exemplo Repita ...Ate”
//Função: Escrever os números de 1 a 10
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x: inteiro
inicio
// Seção de Comandos
x <- 1
repita
escreva ( x )
x <- x + 1
ate x > 10
fimalgoritmo
Saída do algoritmo
1 2 3 4 5 6 7 8 9 10
No exemplo acima, a variável x controla o número de repetições. Normalmente, a
variável de controle recebe um valor inicial, é incrementada (ou decrementada) de um valor
constante e tem seu valor testado no final da iteração. Ao chegar a um determinado valor, a
repetição é interrompida. A inicialização da variável contadora deve acontecer fora do repita,
antes do seu início.
Toda estrutura repita . . . ate que utiliza como auxílio uma variável de controle deve
conter:
• Inicialização da variável de controle;
• incremento ou decremento da variável de controle, operação escolhida depende da con-
dição;
• condição que testa o valor da variável de controle.
33
5.2 Comando Enquanto . . . Faca
Na estrutura enquanto . . . faca, ao contrário da estrutura apresentada anteriormente, a
avaliação da expressão lógica é realizada no início da estrutura, se ela for VERDADEIRA, a
lista de instruções é executada. Isso se repete até que a condição seja FALSA. Veja a sua forma
geral:
enquanto <expressão lógica> faca
<instruções>
fimenquanto
Na estrutura 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.
Exemplo deste comando a seguir:
algoritmo ”Exemplo Enquanto ...faca”
//Função: Escrever os números de 1 a 10
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x: inteiro
inicio
// Seção de Comandos
x <- 1
enquanto x <= 10 faca
escreva ( x )
x <- x + 1
fimenquanto
fimalgoritmo
Saída do algoritmo
1 2 3 4 5 6 7 8 9 10
5.3 Comando Para . . . Faca
O comando para . . . faca também permite a descrição, dentro de um algoritmo, de uma
estrutura de repetição. Sua forma geral é:
para <variável> de <valor inicial> ate <valor final> passo <incremento> faca
<instruções>
fimpara
34
Na estrutura para . . . faca, a <variável> é uma variável de controle, que é inicializada
com <valor inicial> e no início de cada iteração, seu valor é 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>. A instrução passo pode ser
omitida quando o valor de incremento for igual a 1, pois o valor padrão para <incremento> é
1. Caso o valor de incremento seja diferente deve ser utilizado a instrução passo e o seu valor
de incremento. para. Lembrando que incrementar, pode ser também decrementar com passos
negativos, como -1. Exemplo de algoritmo que implementa para . . . faca:
algoritmo ”Exemplo Para ...faca”
//Função: Escrever os números de 1 a 10
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x: inteiro
inicio
// Seção de Comandos
para x de 1 ate 10 faca
escreva ( x )
fimpara
fimalgoritmo
Saída do algoritmo
1 2 3 4 5 6 7 8 9 10
Um outro exemplo, utilizando especificando um passo diferente:
algoritmo ”Exemplo Para ...faca com passo”
//Função: Escrever os números de 10 a 1
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x: inteiro
inicio
// Seção de Comandos
para x de 10 ate 1 passo -1 faca
escreva ( x )
fimpara
fimalgoritmo
Saída do algoritmo
10 9 8 7 5 4 3 2 1
35
A estrutura para..faca é 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.
Após apresentar as três estruturas de repetições, deve ficar claro que o uso delas pode
ser de forma encadeada, por exemplo: para . . . faca dentro de um enquanto . . . faca.
5.4 Exemplos para Fixação
Os problemas e suas soluções apresentados abaixo, aplicam os conceitos até aqui estu-
dados.
5.4.1 Tabuada
Escreva um algoritmo em Visualg que pergunte ao usuário qual tabuada ele deseja ver.
Mostre a tabuada multiplicando o valor de 0 até 10. Ao final, pergunte se o usuário deseja ver
outra tabuada. Caso a resposta seja “SIM”, repita todo o processo novamente.
Algoritmo: Sabe-se que a tabuada de um número n é o conjunto de produtos 0 até 10 por
este número x. As 11 sucessivas multiplicações deverão ser controladas por um contador. Sendo
assim devem ser criadas variáveis CONTADOR e X. Tal que a variável X será determinada pelo
usuário. Além dessas deverá ser criada uma variável para a confirmação da continuidade da
execução do programa. Este exemplo faz uso do encadeamento de estruturas de repetição.
1. Criar uma variável para ser utilizada como resposta;
2. Ler um valor para a variável X;
3. Efetuar e apresentar a multiplicação do valor X por 0, 1 . . . 10;
4. Repetir os passos 2 e 3 até que a RESP(resposta) do usuário for não.
Algoritmo em VisuAlg:
36
algoritmo ”Tabuada”
//Função: Calcular Tabuada, n vezes de acordo com usuário
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x, contador: inteiro
resp: caractere
inicio
// Seção de Comandos
repita
escreva ( ”Digite a tabuada que deseja ver: ” )
leia ( x )
para contador de 0 ate 10 faca
escreval ( x, ” x ”, contador ,” = ”, contador*x )
fimpara
escreva ( ”Deseja continuar? (digite sim ou não) ” )
leia ( resp )
ate (resp <> ”sim”)
fimalgoritmo
Saída do algoritmo
Digite a tabuada que deseja ver:
2
2 x 0 = 0
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
Deseja continuar? (digite sim ou não)
sim
Digite a tabuada que deseja ver:
5
5 x 0 = 0
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
2 x 10 = 50
Deseja continuar? (digite sim ou não)
não
37
5.4.2 Fatorial
[Manzano, 2003, 5.6] Elaborar o algoritmo, que efetue o cálculo de fatoriais até que o
usuário não deseje mais. Sendo assim, o programa deverá pedir ao usuário a sua continuidade
ou não. E o número da fatorial a ser calculada será informado pelo usuário.
Algoritmo: Sabe-se que fatorial é o produto dos números naturais desde 1 até o inteiro
n. Sendo assim, o cálculo de uma fatorial é conseguido pela multiplicação sucessiva do número
de termos. O número de passos deverá ser controlado por um contador. Sendo assim deve
ser criadas variáveis FATORIAL e CONTADOR. Além dessas deverão ser criadas outras duas
variáveis, sendo uma para a confirmação da continuidade da execução do programa e outrapara
determinar o cálculo do valor da fatorial. Este exemplo faz uso do encadeamento de estruturas
de repetição.
1. Inicializar as variáveis FATORIAL e CONTADOR com 1;
2. Definir as variáveis RESP(resposta) para confirmação e N para receber o limite de valor
para o cálculo da fatorial;
3. Enquanto RESP do usuário for sim, executar os passos 3, 4, 5, 6 e 7;
4. Repetir a execução dos passos 4 e 5 por N vezes;
5. FATORIAL <- FATORIAL * CONTADOR;
6. Incrementar 1 à variável CONTADOR;
7. Apresentar ao final o valor obtido.
Algoritmo em VisuAlg:
algoritmo ”Fatorial”
//Função: Calcular fatorial, n vezes de acordo com usuário
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
contador, fatorial, n: inteiro
resp: caractere
inicio
// Seção de Comandos
resp <- ”sim”
38
enquanto resp = ”sim” faca
fatorial <- 1
escreva ( ”Fatorial de qual número: ” )
leia (n)
para contador de 1 ate n faca
fatorial <- fatorial * contador
fimpara
escreva ( ”Fatorial de ”, n ,”é = ”, fatorial )
escreva ( ”Deseja continuar? ” )
leia ( resp )
fimequanto
fimalgoritmo
Saída do algoritmo
Fatorial de qual número:
4
Fatorial de 4 é = 24
Deseja continuar?
sim
Fatorial de qual número:
6
Fatorial de 6 é = 720
Deseja continuar?
não
5.5 Exercícios de Fixação
1. [Manzano, 2003, 5.7] Elaborar um programa que apresente como resultado o valor de
uma potência de uma base qualquer elevada a um expoente qualquer, ou seja, de Bn, em
que B é o valor da vase e n o valor do expoente.
2. [Manzano, 2003, 5.7] Elaborar um programa que possibilite calcular a área total de uma
residência (sala, cozinha, quartos, etc.). O programa deverá solicitar a entrada do nome,
a largura e o comprimento de um determinado cômodo. Em seguida, deverá apresentar
a área do cômodo lido e também uma mensagem solicitando do usuário a confirmação
de continuar calculando novos cômodos. Caso o usuário responda "NÃO", o programa
deverá apresentar o valor total acumulado da área residencial.
3. [Medina e Ferting, 2005, 4.6] Faça o algoritmo para a resolução do somatório a seguir,
sendo n definido pelo usuário e maior que 5:
n∑
i=5
(
2i2 + 5i+ 1
)
39
4. Escrever um algoritmo que lê um número não determinado de valores para m, todos
inteiros e positivos, um de cada vez. Se m for par, verificar quantos divisores possui e
escrever esta informação. Se m for ímpar e menor do que 12, calcular e escrever o fatorial
de m. Se m for ímpar e maior ou igual à 12, calcular e escrever a soma inteiros de 1 até o
número lido.
40
Capítulo 6
Vetores e Matrizes
Vetores e Matrizes são estruturas de dados que tem como objetivo auxiliar quando há
muitas variáveis do mesmo tipo em um algoritmo. Até agora todas as declarações de variáveis
eram unitárias, pois eram suficiente para os problemas anteriores. Porém, não são adequadas
para resolver um grande número de problemas computacionais. Imagine, por exemplo, cons-
truir um algoritmo, que recebe nome de 500 pessoas e imprime um relatório destes mesmos
nomes, mas ordenados alfabeticamente. Não seria uma tarefa simples, pois teria que definir
500 variáveis do tipo caractere. Para resolver problemas como este, e outros, existem as va-
riáveis indexadas, também chamadas de variáveis compostas. Tais variáveis podem representar
um agrupamento de valores do mesmo tipo (homogêneas). Vetores e Matrizes são variáveis
compostas e serão apresentadas a seguir.
6.1 Vetor
Vetor é uma variável que armazena várias variáveis do mesmo tipo. No problema apre-
sentado anteriormente, pode ser utilizado um vetor de 500 posições para armazenar os nomes
das 500 pessoas. São conhecidas também como variáveis compostas unidimensionais e estáti-
cas. Vetor é definido inicialmente com um tamanho fixo e suas posições são referenciadas por
um único índice, sendo assim seus elementos têm ordinalidade: 1, 2, 3, . . . , N . A sintaxe para
declaração é:
var
<variável> : vetor [<valor inicial..valor final>] de <tipo de dado>
41
Onde, a declaração é parecida com variáveis vistas até agora, deve apenas acrescentar as
informações vetor e a quantidade de elementos do vetor. Essas estruturas são limitadas, por isso
deve ser definido logo na declaração da variável o tamanho do vetor. No VisuAlg a definição do
tamanho é feita entre os colchetes "[]"com valor inicial do índice e valor final do índice entre
dois pontos "..". Exemplo:
var
idades: vetor [1..5] de inteiro
nomes: vetor [1..5] de caractere
A declaração acima corresponde à declaração de 5 variáveis do tipo inteiro e mais 5
do tipo caractere: nomes[1], nomes[2], nomes[3], nomes[4], nomes[5], idades[1], idades[2],
idades[3], idades[4] e idades[5]. Para melhor abstração, os vetores acimas podem ser ilustrados
da seguinte maneira:
1 2 3 4 5
Vetor nomes João Ana Mateus Ricardo Maria
1 2 3 4 5
Vetor idades 15 10 21 54 10
O acesso aos elementos é realizado pela sua posição dentro do vetor. Para atribuir um
valor a um elemento do vetor devemos utilizar o seguinte padrão:
<variável>[<posição>] <- <valor>
Para atribuição de valores aos vetores, a diferença será a necessidade de identificar em
qual posição aquele valor será inserido. Ao especificar uma determinada posição do vetor, será
como acessar uma variável simples. Exemplo:
nomes[1] <- ”João da Silva”
idades[1] <- 35
nomes[3] <- ”Maria Aparecida”
idades[3] <- idades[1]
i <- 2
idades[i] <- 45
As estruturas de repetições auxiliam no acesso dos elementos de um vetor. A seguir um
exemplo de algoritmo que faz implementação de vetor utilizando para . . . faca:
42
algoritmo ”Exemplo Vetores”
//Função: lê um vetor de real com 6 posições, depois imprime o vetor
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
numero: vetor [1..6] de real
i: inteiro
inicio
// Seção de Comandos
para i de 1 ate 6 faca
leia (numero[i])
fimpara
escreva (”Conteúdo do Vetor” )
para i de 1 ate 6 faca
escreva (numero[i])
fimpara
fimalgoritmo
Saída do algoritmo
1 6 5 8 12 1
Conteúdo do Vetor
1 6 5 8 12 1
6.2 Matriz
Matriz é uma variável que armazena várias variáveis do mesmo tipo, como o vetor,
diferenciando apenas por ter até N dimensões. Assim como nos vetores as posições das matrizes
são referenciadas por índices. Neste caso serão N índices, sendo N o número de dimensões da
matriz. É comum trabalhar com matrizes com 2 dimensões, Linhas x Colunas. Logo, seram
utilizados dois índices para referenciar as posições da matriz. A sintaxe para declaração é:
<variável>: vetor [<tamanho 1>,<tamanho 2>, ..., <tamanho n>] de < tipo de dado >
Onde, a declaração é semelhante a de um vetor, a única diferença está nos tamanhos.
Cada <tamanho i> seguido de vírgula representa uma dimensão da matriz, que deve ser descrito
com valor inicial e final. Exemplo:
var
idades: vetor [1..3,1..4] de inteiro
nomes: vetor [1..3,1..3] de caractere
A variável idades foi declarada como uma matriz de inteiros com três linhas e qua-
tro colunas, 3 X 4: idades[1,1]; idades[1,2]; idades[1,3]; idades[1,4]; idades[2,1]; idades[2,2];
43
idades[2,3], idades[2,4]; idades[3,1]; idades[3,2]; idades[3,3]; idades[3,4]; idades[4,1]; ida-
des[4,2]; idades[4,3]; idades[4,4]. Já a variável nomes é uma matriz de caracteres com três
linhas e três colunas, 3 x 3: nomes[1,1]; nomes[1,2]; nomes[1,3]; nomes[2,1]; nomes[2,2];
nomes[2,3]; nomes[3,1]; nomes[3,2]; nomes[3,3]. Para melhor abstração, as matrizes acimas
podem ser ilustradas da seguinte maneira:
1 2 3 4
Matriz idades
1
2
3
15 10 21 54
10 36 44 54
28 12 36 49
1 2 3
Matriz nomes
1
2
3
João Ana Mateus
Maria Luísa Tiago
Gustavo Felipe Bruna
Para atribuir um valor ou acessar um elemento da matriz devemos utilizar o seguinte
padrão:
<variável>[<posição1>,<posição 2>] <- <valor>
Exemplo:
nomes[1,3] <- ”João da Silva”
idades[2,3] <- 35
idades[2,4] <- idades[2,3]
i <- 1
j <- 1
nomes[i,j] <- ”Maria”
Como em vetores, as estruturas de repetições auxiliam no acesso dos elementos da ma-
triz. Geralmente serão utilizadas duas repetições aninhadas, uma para linhas e outra para colu-
nas. No exemplo a seguir foram utilizados vários para . . . faca aninhados:
algoritmo ”Exemplo Matrizes”
//Função: lê um vetor de real com 6 posições, depois imprima o vetor
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
numero: vetor [1..3,1..3] de real
44
linha, coluna: inteiro
inicio
// Seção de Comandos
para linha de 1 ate 3 faca
para coluna de 1 ate 3
leia (numero[linha, coluna])
fimpara
fimpara
escreva ( ”Conteúdo da Matriz”)
para linha de 1 ate 3 faca
para coluna de 1 ate 3
escreva (numero[linha, coluna])
fimpara
escreval
fimpara
fimalgoritmo
Saída do algoritmo
1 2 3 4 5 6 7 8 9
Conteúdo da Matriz
1 2 3
4 5 6
7 8 9
6.3 Exemplos para Fixação
Os problemas e suas soluções apresentados abaixo, aplicam os conceitos até aqui estu-
dados.
6.3.1 Vetor de Nomes em Ordem Alfabética
[Manzano, 2003, 7.1] Criar um programa que efetue a leitura dos nomes de 20 pessoas
e em seguida apresentá-los em ordem alfabética.
Algoritmo Existem vários métodos para obter a ordenação de elementos de um vetor.
Neste problema, será apresentado um método bastante simples, que consiste na comparação de
cada elemento com todos os elementos subsequentes. A ordenaçao considerada é alfabética,
devendo essa ser crescente, ou seja, de A até Z.
1. Definir a variável i do tipo inteira como variável de controle na repetição;
2. Definir a matriz Nome do tipo caractere para 20 elementos;
45
3. Iniciar o programa, fazendo a leitura dos 20 nomes;
4. Comparar o elemento atual com os subsequentes;
5. Caso o elemento seja "maior", realize a operação de troca;
6. Apresentar os 20 nomes ordenados.
Algoritmo em Visualg:
algoritmo ”Vetor em ordem alfabética”
//Função: lê 20 nomes e mostra todos em ordem alfabética
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
Nome: vetor [1..20] de caractere
i, j: inteiro
aux: caractere
inicio
// Seção de Comandos
para i de 1 ate 20 faca
leia (Nome[i])
fimpara
para i de 19 ate 3 faca
para j de i + 1 ate 19
se (Nome[i] > Nome[j] ) entao
aux <- Nome[i]
Nome[i] <- Nome[j]
Nome[j] <- aux
fimse
fimpara
fimpara
para i de 1 ate 20 faca
escreva (Nome[i])
fimpara
fimalgoritmo
6.3.2 Matriz de inteiros e diferentes somas de seus elementos
Faça um algoritmo que leia uma matriz 3 x 3 e que calcule:
1. a soma da linha 3 da matriz;
2. a soma da coluna 2 de matriz;
3. a soma da diagonal principal;
46
4. a soma da diagonal secundária;
5. a soma de todos os elementos da matriz.
Algoritmo em Visualg:
algoritmo ”Matriz Somas”
//Função: Executa somas descritas no enunciado
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
Matriz: vetor [1..3,1..3] de inteiros
i, j, somaLinha, somaColuna, somaDiagPrinc, somaDiagSec, somaTudo : inteiro
inicio
// Seção de Comandos
para i de 1 ate 3 faca
para i de 1 ate 3 faca
escreva (”Digite um valor para a matriz:”)
leia (Matriz[i,j])
somaTudo <- somaTudo + Matriz[i,j]
se (i = 3) entao
somaLinha <- somaLinhas + Matriz[i,j]
fimse
se (j = 2) entao
somaColuna <- somaColuna + Matriz[i,j]
fimse
se (i = j) entao
somaDiagPrinc <- somaDiagPrinc + Matriz[i,j]
fimse
se (j = 4 - i) entao
somaDiagSec<- somaDiagSec + Matriz[i,j]
fimse
fimpara
fimpara
escreva (”Soma dos elementos da linha 3 é”, somaLinha )
escreva (”Soma dos elementos da coluna 2 é”, somaColuna )
escreva (”Soma dos elementos da diagonal principal é”, somaDiagPrinc )
escreva (”Soma dos elementos da diagonal secundária é”, somaDiagSec )
fimalgoritmo
6.4 Exercícios de Fixação
1. [Manzano, 2003, 6.4] Ler 10 elementos de um vetor e apresentá-los.
2. [Medina e Ferting, 2005, 7.5] Faça um algoritmo que determine qual o maior elemento
dentro de um vetor.
47
3. [Manzano, 2003, 6.4] Elaborar um programa que efetue o cálculo de uma tabuada de um
número qualquer e armazene os resultados em vetor A com 10 elementos. Apresentar os
valores armazenados no vetor.
4. [Manzano, 2003, 6.4] Ler dois vetores A e B com 10 elementos cada. Construir um
vetor C, sendo este a junção dos dois outros vetores. Desta forma, C deverá ter o dobro
de elementos, ou seja, 20. Apresentar o vetor C.
5. [Manzano, 2003, 6.4] Ler 20 elementos (valores reais) para temperaturas em graus Cel-
sius. O programa deverá apresentar a menor, a maior e a média das temperaturas lidas.
6. [Medina e Ferting, 2005, 7.5] Faça um algoritmo que determine quantas vogais há em
um vetor de caracteres.
7. [Medina e Ferting, 2005, 7.5] Faça um algoritmo que ordene e mostre em ordem cres-
cente um vetor de 10 elementos.
8. [Medina e Ferting, 2005, 7.5] Faça um algoritmo que encontre o determinante de uma
matriz 2 x 2. O determinante é dado pela diferença entre o produto da diagonal principal
e o da diagonal secundária.
9. [Manzano, 2003, 8.4] Ler duas matrizes A e B, com 5 linhas e 3 colunas. Construir uma
matriz C de mesma dimensão, que é formada pela soma dos elementos da matriz A com
os elementos da matriz B, Apresentar a matriz C.
10. [Manzano, 2003, 8.4] Ler duas vetores A e B, cada um com 7 elementos. Construir uma
matriz C, em que a primeira coluna deverá ser formada pelos elementos da matriz A e a
segunda coluna deverá ser formada pelos elementos da matriz B. Apresentar a matriz C.
11. [Medina e Ferting, 2005, 7.5] Faça um algoritmo que transforme uma matriz M em seu
espelho. Exemplo:

1 2 3
4 5 6
7 8 9
→

1 4 7
2 5 8
3 6 9

48
Capítulo 7
Sub-algoritmos
Sub-algoritmo é um algoritmo que geralmente resolve um pequeno problema, e que está
subordinado a um outro algoritmo, ou seja, realiza tarefas específicas. Ao invés de escrever um
algoritmo grande e complexo, escrevem-se vários algoritmos menores, os quais, não isolada-
mente, mas em conjunto, resolvem o problema proposto. Esta subordinação deve-se ao fato de
que o sub-algoritmo só será executado se for solicitado.
Sub-algoritmo possui início e fim e executa um conjunto pré-definido de instruções
com um local próprio para sua definição possuindo um identificador, ou seja, um nome pelo
qual é chamado em qualquer parte do algoritmo ou de outros sub-algoritmos. Assim o fluxo de
execução do algoritmo começa pelo principal e é desviado para o sub-algoritmo chamado.
Cada sub-algoritmo, pode ter suas próprias variáveis chamadas de variáveis locais, que
existem apenas durante sua chamada.
Na estruturação de algoritmos é conveniente utilizá-los, pois trazem as seguintes vanta-
gens:
• Reutilização de sub-algoritmos já implementados;
• Melhor compreensão e visualização do algoritmo;
• Detecção de erros com maior facilidade;
Sub-algoritmos são declarados no início do algoritmo e podem ser chamados em qual-
quer ponto após sua declaração. Há dois tipos de sub-algoritmos: Função, que retorna um
49
determinado valor, e Procedimento, que não há retorno de valor. O retorno de valores é a saída,
por meio dele o sub-algoritmo pode dar uma "resposta"ou um resultado para quem o chamou.
7.0.1 Variável Global
Variável global é vista e pode ser manipulada pelo programa principal e por todos os
subalgoritmos pertencentes a ele. As variáveis globais são declaradas antes de todos os subal-
goritmos.
var
< declaração de variáveis globais >
< subalgoritmo 1>
< subalgoritmo 2>
...
< subalgoritmo i>
inicio
// Seção de Comandos
fimalgoritmo
A vantagem das variáveis globais é a sua fácil utilização.Mas como todos os subalgo-
ritmos tem acesso e podem alterar o valor destas variáveis, deve ser analisado se o uso delas
não trará um possível resultado indesejado.
É aconselhavél não declarar variáveis globais com o mesmo nome das variáveis da
função.
7.0.2 Variável Local
Variável local é visível e manipulada apenas pelo subalgoritmo em que ela foi declarada.
As variáveis locais são declaradas no início do subalgoritmo que pertence.
var
< declaração de variáveis globais >
< subalgoritmo 1 >
< declaração de variáveis locais do subalgoritmo 1 >
< subalgoritmo 2>
< declaração de variáveis locais do subalgoritmo 2 >
...
< subalgoritmo i>
< declaração de variáveis locais do subalgoritmo i >
inicio
// Seção de Comandos
fimalgoritmo
50
A vantagem de uma variável local é a independência em relação ao resto. Uma alteração
em uma variável local afetará apenas no próprio subalgoritmo onde foi declarada. Garantindo
assim que não terá resultado indesejado em outros subalgoritmos.
7.0.3 Parâmetros
Ao se chamar um subalgoritmo, também é possível passar-lhe determinadas informa-
ções que recebem o nome de parâmetros. Há duas formas de passagem de parâmentros existen-
tes: por valor e por referência.
Passagem de parâmetros por valor
Na passagem de parâmentros por valor, uma cópia da variável é feita durante a chamada
do subalgoritmo.
<subalgoritmo> <nome>(<variável 1>,..., <variável i>:<tipo de dado>)
Passagem de parâmetros por referência
Na passagem de parâmetros por referência, o endereço da variável é passado, em vez da
cópia do valor. O que acontece neste processo é que apesar de ter outro identificador, os valores
manipulados no subalgoritmo estão no mesmo espaço de memória que as variáveis passadas
na chamada do subalgoritmo, assim todas as alterações feitas no interior de um subalgoritmo
refletirão na variável passada pelo parâmetro.
<subalgoritmo> <nome>(var <variável 1>,..., <variável i>:<tipo de dado>)
O que difere da passagem por valor é utilização da palavra-chave var, que simbolizará
a passagem por referência.
7.1 Procedimentos
Procedimentos são subalgoritmos que agrupam um conjunto de comandos, que são exe-
cutados quando o procedimento é chamado. Nenhum procedimento possui tipo de dado de
retorno. A sua criaçao deve ser realizada dentro da secção de variáveis
51
algoritmo ”<nome do algoritmo>”
// Função:
// Autor:
// Data:
//Seção de Declarações
var
<declaração de variáveis globais>
<definição do procedimento >
inicio
// Seção de Comandos
fimalgoritmo
A declaração do procedimento deve estar entre o final da declaração de variáveis e a
linha inicio do programa principal, e possuem a seguinte sintaxe:
procedimento <nome do procedimento> ([var]<parâmetros>: <tipo de dado>)
var
<declaração de variáveis locais>
inicio
<lista de comandos>
fimfuncao
• 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. Exemplo x, y: inteiro; a, b: real. Tal que
var é opcional. retorne, os tipos retornados são: real, inteiro, lógico ou caractere.
• Declaração de variáveis locais: idêntica a declaração de variáveis globais. As variáveis
declaradas localmente tem validade apenas na função.
Exemplo
algoritmo ”Exemplo de Procedimento”
//Função: somar dois valores utilizando função
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
A. B, C, D, cont, aux: inteiro
procedimento Trocar(var x, y: inteiro)
var
aux: inteiro
inicio
aux <- x
52
x <- y
y <- aux
fimprocedimento
inicio
// Seção de Comandos
leia ( A, B, C, D )
escreval (”A = ”, A,” e B = ”), B )
Trocar (A, B)
escreval (”A = ”, A,” e B = ”), B )
escreval (”C = ”, C,” e D = ”), D )
Trocar (C, D)
escreval (”C = ”, C,” e D = ”), D )
fimalgoritmo
Saída do algoritmo
19 5 10 3
A = 19 e B = 5
A = 5 e B = 19
C = 10 e D = 3
C = 3 e D = 10
7.2 Funções
Funções são subalgoritmos que possuem como objetivo retornar apenas um valor ou
uma informação ao algoritmo que lhe chamou. A chamada de uma função é feita através da
citação do seu nome, seguido opcionalmente de seus argumentos iniciais. As funções podem
ser predefinidas pela linguagem, ou criadas pelo programador de acordo com o seu interesse.
Por analogia, na Matemática, escreve-se (ou define-se) uma função por meio de parâ-
metros, a seguir exemplos onde se define as funções f , g e h:
• f(x) = x2 − 3x+ 2, função f foi definida em termos do parâmetro x;
• g(x, y) = x2 + y3, função g foi definida em termos de dois parâmetros x e y;
• h(x, y, z) = x2 + 2y + z2, função h foi definida em termos de três parâmetros x, y e z.
Espera-se que em funções matemáticas a resposta, análogo a retorno, seja um valor do
tipo númerico, o mesmo ocorre com os valores dos parâmetros das funções.
Para saber o valor de retorno das funções para valores em particular dos argumentos,
por exemplo, na função f , basta substituir x por um valor escolhido, como x = 3, este valor
onde aparece o parâmetro x:
53
• f(3) = 32 − 3(3) + 2 = 2, valor de resposta ou retorno é 2;
• g(3, 2) = 32 + 23 = 17, valor de resposta ou retorno é 17;
• h(1, 3, 2) = 12 + 2(3) + 22 = 11, valor de resposta ou retorno é 11;
Voltando para sub-algoritmos, em VisuAlg a criação de uma função deve ser realizada
dentro da seção de variáveis:
algoritmo ”<nome do algoritmo>”
// Função:
// Autor:
// Data:
//Seção de Declarações
var
<declaração de variáveis globais>
<definição da função >
inicio
// Seção de Comandos
fimalgoritmo
A declaração da função deve estar entre o final da declaração de variáveis e a linha inicio
do programa principal, e possui a seguinte sintaxe:
funcao <nome da função> ([var]<parâmetros>: <tipo de dado>) : tipo de retorno>
var
<declaração de variáveis locais>
inicio
<lista de comandos>
retorne <variável ou valor de retorno>
fimfuncao
Cada função tem associada ao seu valor de retorno um tipo de dado explícito.
• 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. Exemplo x, y: inteiro; a, b: real. Tal que
var é opcional.
• Tipo de retorno: Estará associado ao tipo do valor que a função retornará com o comando
retorne, os tipos retornados são: real, inteiro, lógico ou caractere.
• Declaração de variáveis locais: idêntica a declaração de variáveis globais. As variáveis
declaradas localmente tem validade apenas na função.
54
• retorne: comando que executa o encerramento do subprograma, retornando imediata-
mente um único valor. Esta instrução só pode retornar um único valor. O valor que
comando retornará deve ser do mesmo tipo que o especificado no início da função em
tipo de retorno.
Exemplo:
algoritmo ”Exemplo de Função”
//Função: somar dois valores utilizando função
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
x, y, s: real
funcao Somar(valor1, valor2: real) : real
var
soma : real
inicio
soma <- valor1 + valor2
retorne soma
fimfuncao
inicio
// Seção de Comandos
leia ( x, y )
escreval (”Soma = ”, Somar(x, y) )
x <- 3
y <- 4
s <- Somar (y, x)
escreval (”Soma = ”, s )
escreval (”Soma = ”, Somar(5, s) )
fimalgoritmo
Saída do algoritmo
20 15
Soma = 35
Soma = 7
Soma = 12
7.2.1 Funções Pré-Definidas
VisuAlg possui funções pré-definidas, as quais estão descritas abaixo e foram retiradas
do Apoio Informática. http://www.apoioinformatica.inf.br/produtos/visualg. Atalho para es-
tas funções é pressionar (CTRL+J) o visualg mostra uma Lista de funções predefinidas, basta
selecionar a função desejada e dar um Enter, depois é só passar os parâmetros desejados.
55
Funções numéricas, algébricas e trigonométricas
Abs(expressão) - Retorna o valor absoluto de umaexpressão do tipo inteiro ou real. Equivale
ao módulo na álgebra.
ArcCos(expressão) - Retorna o ângulo (em radianos) cujo cosseno é representado por expres-
são.
ArcSen(expressão) - Retorna o ângulo (em radianos) cujo seno é representado por expressão.
ArcTan(expressão) - Retorna o ângulo (em radianos) cuja tangente é representada por expres-
são.
Cos(expressão) - Retorna o cosseno do ângulo (em radianos) representado por expressão.
CoTan(expressão) - Retorna a cotangente do ângulo (em radianos) representado por expressão.
Exp(base, expoente) - Retorna o valor de base elevado a expoente, sendo ambos expressões do
tipo real.
GraupRad(expressão) - Retorna o valor em radianos correspondente ao valor em graus repre-
sentado por expressão.
Int( expressão) - Retorna a parte inteira do valor representado por expressão.
Log( expressão) - Retorna o logaritmo na base 10 do valor representado por expressão.
LogN( expressão) - Retorna o logaritmo neperiano (base e) do valor representado por expres-
são.
Pi - Retorna o valor 3.141592.
Quad( expressão) - Retorna quadrado do valor representado por expressão.
RadpGrau( expressão) - Retorna o valor em graus correspondente ao valor em radianos repre-
sentado por expressão.
RaizQ( expressão) - Retorna a raiz quadrada do valor representado por expressão.
Rand - Retorna um número real gerado aleatoriamente, maior ou igual a zero e menor que um.
RandI( limite) - Retorna um número inteiro gerado aleatoriamente, maior ou igual a zero e
menor que limite.
Sen( expressão) - Retorna o seno do ângulo (em radianos) representado por expressão.
Tan( expressão) - Retorna a tangente do ângulo (em radianos) representado por expressão.
Os valores que estão entre parênteses, representados pelas palavras como expressão,
base e expoente, são os parâmetros, ou como dizem alguns autores, os argumentos que passamos
para a função para que realize seus cálculos e retorne um outro, que usaremos no programa.
Algumas funções, como Pi e Rand, não precisam de parâmetros, mas a maioria tem um ou
56
mais. A seguir temos alguns exemplos que ilustram o uso destas funções.
algoritmo ”Exemplo Funções Pré Definidas”
//Função: Demostrar Funções Pré-Definidas
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
a, b, c: real
inicio
// Seção de Comandos
a <- 2
b <- 9
escreval( a - b )
escreval( abs( a - b ) )
c <- raizq( b )
escreval( ”A área do círculo com raio ”, c , ” é ”, pi * quad(c) )
escreval( ”Um ângulo de 90 graus tem ”, grauprad(90), ” radianos ”
escreval( exp(a, b) )
escreval( int( b / ( a + c ) ) )
fimalgoritmo
Saída do algoritmo
-7
7
A área do círculo com raio 3 é 28.2743338823
Um ângulo de 90 graus tem 1.57079633 radianos
512
1
Funções para manipulação de cadeias de caracteres strings
Asc (s : caracter) : Retorna um inteiro com o código ASCII do primeiro caracter da expressão.
Carac (c : inteiro) : Retorna o caracter cujo código ASCII corresponde à expressão.
Caracpnum (c : caracter) : Retorna o inteiro ou real representado pela expressão.
Compr (c : caracter) : Retorna um inteiro contendo o comprimento (quantidade de caracteres)
da expressão.
Copia (c : caracter ; p, n : inteiro) : Retorna um valor do tipo caracter contendo uma cópia
parcial da expressão, a partir do caracter p, contendo n caracteres. Os caracteres são numerados
da esquerda para a direita, começando de 1.
Maiusc (c : caracter) : Retorna um valor caracter contendo a expressão em maiúsculas.
Minusc (c : caracter) : Retorna um valor caracter contendo a expressão em minúsculas.
Numpcarac (n : inteiro ou real) : Retorna um valor caracter contendo a representação de n
como uma cadeia de caracteres.
Pos (subc, c : caracter) : Retorna um inteiro que indica a posição em que a cadeia subc se
encontra em c, ou zero se subc não estiver contida em c. A seguir temos alguns exemplos que
57
ilustram o uso destas funções.
algoritmo ”Exemplo 2 Funções Pré Definidas”
//Função: Demostrar Funções Pré-Definidas
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
a, b, c: caractere
inicio
// Seção de Comandos
a <- 2
b <- 9
escreval( b + a )
escreval( caracpnum(b) + caracpnum(a) )
escreval( numpcarac(3 + 3) + a )
c <- ”Brasil”
escreval( maiusc(c) )
escreval( compr(c) )
b <- ”O melhor do Brasil”
escreval( pos(c ,b) )
escreval( asc(c) )
b <- carac (65) + carac (66) + carac (67)
fimalgoritmo
Saída do algoritmo
92
11
62
BRASIL
6
13
66
ABC
7.3 Exemplos de Fixação
Os problemas e suas soluções apresentados abaixo, aplicam os conceitos até aqui estu-
dados.
7.3.1 Ordenar dois números determinando o tipo de ordenação
[Medina e Ferting, 2005, 5.5.2.1] Faça um algoritmo que ordene dois valores. A orde-
nação dos números deve estar contida em um subalgoritmo. Um terceiro parâmetro determinará
a ordem (crescente ou decrescente) para a ordenação. Suponha que os dois valores a serem or-
denados, passados como parâmetros para o subalgoritmo, são sempre diferentes. Além disso,
58
considere que o subalgoritmo ordena deve retornar Verdadeiro, caso consiga executar a opera-
ção, e Falso, caso a opção seja inválida.
Algoritmo: Como na descrição do exercício diz que deve retornar uma resposta Verda-
deiro ou Falso conclui-se que será feito o uso de função. A função deverá ordenar dois valores e
retorná-los na ordem pedida. Como os valores podem ser modificados e tais modificações preci-
sam ser mantidas, esses parâmetros devem ser passados por referência. Já o terceiro parâmetro,
identificará o tipo de ordenação, não será modificado na função ordenação. Por isso, o parâme-
tro deve ser passado por valor. Considere a opção 1 como crescente e a 2 como decrescente.
Pode se observar que independente do tipo de ordenação que for escolhido, o código referente
à troca de valores será igual para os dois, assim um procedimento pode fazer esse trabalho de
troca.
1. Inicializar as variáveis v1, v2 do tipo real no programa principal;
2. Definir o procedimento Troca com dois parâmetros de passagem por referência do tipo
real, p1 e p2;
3. Declarar no procedimento Trocar uma variável aux do tipo real que auxiliará na troca;
4. Auxiliar irá guardar valor de p1; p1 receberá o valor de p2 e p2 receberá aux;
5. Definir a funçao Ordenar do tipo lógico, com 3 parâmetros dois por referência e um por
valor, valor1, valor2, opcao;
6. Verificar a opção escolhida;
7. Caso seja 1 verificar se o valor1 é maior que valor2 e então realizar a troca chamando
procedimento Trocar;
8. Caso seja 2 verificar se o valor1 é menor que valor2 e entao realizar a troca chamando
procedimento Trocar;
9. Caso seja uma opção inválida retorne FALSO;
10. Caso tenha realizado um dos casos 1 ou 2, ou seja foi ordenado, retorne VERDADEIRO
11. Programa principal ocorre a leitura de dois valores v1, v2 e tipo de ordenação tp;
59
12. Verifica se foram ordenados os valores de acordo com o da função Ordenar e seus seguin-
tes parâmetros, v1, v2 e tp;
13. Se for VERDADEIRO imprimir os números ordenados;
14. Caso contrário, FALSO, apresentar mensagem "Opção Inválida".
Algoritmo em VisuAlg:
algoritmo ”Ordenar 2 Números”
//Função: Ordenar dois números de acordo com tipo de ordenação
// Autor: Autores da Apostila
// Data: 2015
//Seção de Declarações
var
v1, v2: real
tp: inteiro
procedimento Trocar(var p1, p2: real)
var
aux: inteiro
inicio
aux <- p1
p1 <- p2
p2 <- p1
fimprocedimento
funcao Ordenar(var valor1, valor2: real; opcao: inteiro) : logico
inicio
escolha opcao
caso 1
se (valor1 > valor2) entao
Trocar(valor1, valor2)
fimse
caso 2
se (valor1 < valor2) entao
Trocar(valor1, valor2)
fimse
outrocaso
retorne FALSO
fimescolha
retorne VERDADEIRO
fimfuncao
inicio
// Seção de Comandos
escreva ( ”Entre

Continue navegando