Você está na página 1de 68

UNIVERSIDADE DO ESTADO DE SANTA CATARINA

CENTRO DE CINCIAS TECNOLGICAS


DEPARTAMENTO DE CINCIA DA COMPUTAO

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 contedo presente nesta apostila foi criado com o propsito de ser uma base de auxlio
ao aluno na disciplina de algoritmos, a qual trabalha com a ferramenta VisuAlg. Como a ferra-
menta direcionada para alunos iniciantes de programao, h uma breve explicao de lgica
de programao agregado aos comandos do VisuAlg. Ao fim de cada captulo, sero apresen-
tados exemplos para cada assunto abordado, assim como, exerccios de fixao. O material foi
baseado na primeira verso da apostila, a qual foi modificada com adies de definies mais
extensas de estruturas de programao, novos exerccios e novos exemplos.

Palavras-chaves: VisuAlg. Algoritmos.


Sumrio

1 Introduo 6

2 VisuAlg 7

2.1 Estrutura Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.2 Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2.1 Tipos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2.2 Nome de Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2.3 Seo de Declaraes . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3 Comando de Atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.4 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.4.1 Operadores Aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.4.2 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.4.3 Operadores Lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.5 Seo de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 Entrada e Sada 16

3.1 Comando de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.2 Comando de Sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.3 Exemplos para Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.3.1 rea de uma circunferncia . . . . . . . . . . . . . . . . . . . . . . . 19

3
3.3.2 Nmero de vrtices de um objeto geomtrico . . . . . . . . . . . . . . 20

3.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4 Estruturas de Seleo 22

4.1 Comando Se . . . Entao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.1.1 Estrutura de Seleo Simples . . . . . . . . . . . . . . . . . . . . . . . 22

4.1.2 Estrutura de Seleo Composta . . . . . . . . . . . . . . . . . . . . . 24

4.2 Comando Escolha . . . Caso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.3 Exemplos para Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.3.1 Tipo de Tringulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.3.2 Identificar se um nmero par, positivo ou ano bissexto . . . . . . . . 28

4.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5 Estruturas de Repetio 32

5.1 Comando Repita . . . Ate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5.2 Comando Enquanto . . . Faca . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.3 Comando Para . . . Faca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.4 Exemplos para Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.4.1 Tabuada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.4.2 Fatorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5.5 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

6 Vetores e Matrizes 41

6.1 Vetor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

6.2 Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

6.3 Exemplos para Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

6.3.1 Vetor de Nomes em Ordem Alfabtica . . . . . . . . . . . . . . . . . . 45

4
6.3.2 Matriz de inteiros e diferentes somas de seus elementos . . . . . . . . . 46

6.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

7 Sub-algoritmos 49

7.0.1 Varivel Global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

7.0.2 Varivel Local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

7.0.3 Parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

7.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

7.2 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7.2.1 Funes Pr-Definidas . . . . . . . . . . . . . . . . . . . . . . . . . . 55

7.3 Exemplos de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

7.3.1 Ordenar dois nmeros determinando o tipo de ordenao . . . . . . . . 58

7.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Cronmetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

8.7 Comando Limpatela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66


Captulo 1

Introduo

Algoritmo uma sequncia de instrues finitas e ordenadas de forma lgica para a


resoluo de uma determinada tarefa ou problema. Alguns exemplos de algoritmos cotidianos
so: instrues de montagem; receitas; manuais de uso. Um algoritmo no a soluo do
problema, mas sim um caminho para a soluo de um problema. De maneira geral, existem
muitos caminhos que levam a uma soluo.

Diariamente so utilizados algoritmos de forma intuitiva e involuntria na execuo


tarefas comuns. Por serem atividades simples e dispensam ater-se nas instrues necessrias
para faz-las, o algoritmo presente nelas acaba passando despercebido.

Os algoritmos so muitos utilizados em solues computacionais. A programao das


possveis solues consiste na codificao precisa desse algoritmo, de acordo com a linguagem
de programao escolhida. Para facilitar a tarefa de programar foram criadas vrias linguagens
de programao.

O software VisuAlg tem como objetivo permitir alunos iniciantes em programao, pra-
ticar os algoritmos e os problemas de forma mais simples. O Visualg foi desenvolvido por
Cludio Morgado de Souza, seu e-mail: pcmorgado@apoioinformatica.com.br. O soft-
ware de livre uso e distribuio, atualmente est na verso 2.5.

6
Captulo 2

VisuAlg

O VisuAlg simples, disponibiliza um ambiente de programao no idioma portugus


utilizando o "Portugol", portugus 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 caractersticas do VisuAlg so:

Apenas um comando por linha;

Todas as palavras-chave so sem acentos, cedilha, etc;

No distingue maisculas e minsculas no reconhecimento de palavras-chave e nomes de


variveis (NOME o mesmo que nome);

H possibilidade de uso de comentrios, qualquer texto aps de "//" ignorado, at se


atingir o final de sua linha.

2.1 Estrutura Geral

A estrutura geral a seguinte:

algoritmo semnome

// Funo

// Autor:

// Data:

// Seo de Declaraes

7
var

inicio

// Seo de Comandos

fimalgoritmo

As palavras algoritmo, na primeira linha, e fimalgoritmo, na ltima linha, so palavras-


chaves que delimitam o incio e fim de um algoritmo. A seo de declaraes situa-se aps a
palavra-chave var e antes de inicio. Nesta seo do algoritmo ocorrem as declaraes das
variveis, que sero posteriormente utilizadas. A seo de comandos comea aps a palavra
inicio e termina em fimalgoritmo. As instrues ou comandos do algoritmo, ficam descritas na
seo de comandos.

A notao utilizada no decorrer da apostila ser, palavras entre <> so elementos do


algoritmo a serem substitudos por nomes ou valores definidos pelo programador.

2.2 Variveis

Varivel tem como definio ser tudo aquilo que sujeito a variaes, que instvel
ou inconstante. Em algoritmos, variveis so palavras que em um dado instante guardam um
determinado contedo, e ao decorrer das operaes seguintes seu contedo pode ser alterado.
Contudo, o contedo recebido deve ser sempre do mesmo tipo.

Desse modo devem ser especificados os detalhes das variveis que sero utilizadas.
Esses detalhes so: 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 operaes"[2]

No VisuAlg h quatro tipos de dados: inteiro, real, cadeia de caracteres e lgico (boole-
ano).

inteiro: define variveis numricas do tipo inteiro, considerando positivos e negativos.


Exemplo: 10, 5, -5, -10;

8
real: define variveis numricas do tipo real, ou seja, com casas decimais. O separador
de decimais o ponto e no a vrgula. Ex: 10.5, -5.8:

caractere: define variveis do tipo cadeia de caracteres, contendo letras, nmeros e sm-
bolos especiais. As aspas caracterizam esse tipo de dado. Ex: "Joo", "casa", "1", "+";

logico: define variveis do tipo booleano, ou seja, s poder ser representado por um dos
dois valores VERDADEIRO ou FALSO.

2.2.2 Nome de Variveis

Os nomes das variveis sero utilizados na manipulao de dados ao decorrer do algo-


ritmo, por isso se aconselha utilizar nomes claros e precisos. [1]

No VisuAlg, para serem vlidos os nomes das variveis, seguem as seguintes regras:

Possuir como primeiro caractere uma letra ou underline _, os outros caracteres seguintes
podem ser letras, nmeros e underline;

Nomes de variveis no podem conter espaos em branco;

Variveis diferentes no podem possuir nomes iguais;

Nomes de variveis no podem ser iguais a palavras reservadas.

Exemplos:

Identificadores vlidos: NOME, Telefone, Idade_FILHO, IdadeFilho, NOTA1, Est_Civil.

Identificadores invlidos: 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 Seo de Declaraes

A seo de declaraes de variveis situa-se aps a palavra-chave var. As declaraes


possuem a seguinte sintaxe:

var
<varivel 1>, <varivel 2>,..., <varivel n>: <tipo de dado>

Onde, <varivel i> o nome escolhido para uma varivel e <tipo de dado> determina
que tipo de valor as n variveis podero receber. Os nomes das variveis so separados por
","vrgulas, e seguidos de : dois pontos e finalmente informar o tipo daquela varivel ou lista
de variveis. A seguir um exemplo de declarao:

var
x: inteiro
y, soma: real
nome: caractere
sinal: logico

Ao declarar as variveis, todas possuem contedo inicialmente.

10
Valores Iniciais
inteiro 0
real 0
caractere
logico FALSO

2.3 Comando de Atribuio

A atribuio o ato de colocar um dado ou informao em uma varivel. A atribuio


de valores a variveis feita com o operador <- .

<varivel 1> <- <valor>


<varivel 1> <- <varivel 2>
<varivel 1> <- <expresso do mesmo tipo da varivel 1>

Do lado esquerdo fica a varivel qual est sendo atribudo o valor, e sua direita pode-
se colocar qualquer expresso como constantes nmericas, variveis, expresses numricas,
caracteres. Desde que o valor a ser atribudo tenha tipo igual ao da varivel. Exemplo de
atribuio:

x <- 5
y <- 10.5
soma <- x + y
nome <- Joo da Silva
sinal <-verdadeiro

Assim, so incorretos os seguintes comandos:

2060 <- NumeroConta

NumeroAgencia+digitoControle <- 2345

2.4 Operadores

2.4.1 Operadores Aritmticos

Para a construo de algoritmos que realizam clculos matemticos, todas as expresses


aritmticas devem ser linearizadas. Exemplo de linearizao:

11
Equao tradicional Equao computacional
basealtura
2
(base altura)/ 2
 2 
3
(5 3) + 1 5 ((2/3 (5 3)) + 1) 5

E como na matemtica, algumas operaes tm prioridade sobre as outras. A potencia-


o tem a maior prioridade entre os operadores. A multiplicao e a diviso tem segunda maior
prioridade, sendo assim operadas antes da adio e da subtrao. Para alterar as prioridades,
devemos usar os parnteses ().

Operadores Aritmticos
Adio +
Subtrao
Multiplicao
Diviso /
Diviso Inteira \ ou div
Exponenciao ou exp(<base>, <expoente>)
Resto da Diviso % ou mod

Vale ressaltar a representao dos operadores div e mod:

div ou \ : retorna o resultado inteiro de uma diviso, exemplos:


7 div 4 = 1
5 div 2 = 2

mod ou % : retorna o resto da diviso inteira de dois nmeros inteiros, exemplos:


7 mod 4 = 3
5 mod 2 = 1

2.4.2 Operadores Relacionais

Os operadores relacionais realizam a comparao entre dois operandos ou duas expres-


ses e resultam em valores lgicos (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 alfabtica?


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 Lgicos

Os operadores lgicos ou booleanos atuam sobre expresses e resultam em valores


lgicos VERDADEIRO ou FALSO, so eles a conjuno, disjuno, disjuno exclusiva e
negao.[3]

13
Conjuno

A operao de conjuno relacionada interseo de conjuntos, em lgica resulta


VERDADEIRO quando ambas as partes forem verdadeiras. Exemplo de conjuno:

(2 + 5 > 4) e (3 <> 3) (2 + 5 > 4) e (3 = 3)


VERDADEIRO e FALSO VERDADEIRO e VERDADEIRO
FALSO VERDADEIRO

Disjuno

A operao de disjuno relacionada unio de conjuntos, em lgica resulta VERDA-


DEIRO quando uma das partes for verdadeira. Exemplo de disjuno:

(2 + 5 > 4) ou (3 <> 3) (2 + 5 > 4) ou (3 = 3)


VERDADEIRO ou FALSO VERDADEIRO ou VERDADEIRO
VERDADEIRO VERDADEIRO

Disjuno Exclusiva

A operao de disjuno exclusiva resulta VERDADEIRO se e somente se exatamente


um das partes for verdadeira. Exemplo de disjuno exclusiva:

(2 + 5 > 4) xou (3 <> 3) (2 + 5 > 4) xou (3 = 3)


VERDADEIRO xou FALSO VERDADEIRO xou VERDADEIRO
VERDADEIRO FALSO

Negao

A operao de negao nega uma afirmao, invertendo seu valor: caso seja FALSO,
torna-se VERDADEIRO. Exemplo de Negao:

nao (3 <> 3) nao (2 + 5 > 4)


nao FALSO nao VERDADEIRO
VERDADEIRO FALSO

14
Operadores Lgicos
Conjuno e
Disjuno ou
Disjuno Exclusiva xou
Negao nao

2.5 Seo de Comandos

A seo de Comandos contm o conjunto de operaes e instrues do algoritmo. Esta


seo situa-se entre as palavras-chaves inicio e fimalgoritmo. Todo conjunto de instrues do
algoritmo possui uma estrutura sequencial, ou seja, as instrues so executadas em uma ordem.

inicio
// Seo de Comandos
<instruo 1>
<instruo 2>
...
<instruo n>
fimalgoritmo

Exemplo:

algoritmo Exemplo Capitulo 1


// Funo: Mostrar um simples exemplo
// Autor: Autores da Apostila
// Data: 2015
// Seo de Declaraes
var
x: inteiro
y, soma: real
nome: caractere
sinal: logico
inicio
// Seo de Comandos
x <- 5 // instruo 1
y <- 10.5 // instruo 2
soma <- x + y // instruo 3
nome <- Joo da Silva // instruo 4
sinal <-verdadeiro // instruo 5
fimalgoritmo

15
Captulo 3

Entrada e Sada

Para criar um algoritmo que seja executvel dentro de um computador, este algoritmo
deve ser composto de entrada, processamento e sada. A entrada o meio pelo qual o usurio
pode informar dados. O processamento onde ocorre a manipulao e clculos dos dados, para
ento chegar a resoluo de uma determinada tarefa ou problema. Por fim, a sada retorna o re-
sultado do processamento. A seguir sero descritos os comandos de entrada e sada no VisuAlg,
e nos prximos captulos sero apresentados comandos que auxiliaro no processamento.

3.1 Comando de Entrada

A entrada o meio pelo qual o usurio pode informar dados que sero atribuidos a
variveis e utilizados no processamento. No VisuAlg o comando de entrada o leia. A sintaxe
deste comando :

var
<varivel 1>, <varivel 2>,...,<varivel n>: <tipo de dado>
...
leia (<varivel 1>, <varivel 2>, ..., <varivel n>)

Ao utilizar o comando leia, aparecer uma tela esperando o usurio informar os da-
dos. Toda varivel usada no leia deve ser declarada anteriormente. A seguir um exemplo da
utilizao do comando leia:

16
algoritmo Exemplo de leia
var
x: inteiro
y, soma: real
nome: caractere
sinal: logico
inicio
// Seo de Comandos
leia ( x ) // valor atribudo a x ser de acordo com usurio
leia ( y ) // valor atribudo a y ser de acordo com usurio
soma <- x + y // valor atribudo 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 variveis.
Assim, so incorretos os seguintes comandos:

leia ( NumeroConta + 60 )
leia ( 12345 )
leia ( NomeCliente + Sobrenome )

Caso o usurio 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 variveis x, y, nome e sinal. Caso
o usurio 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 inconsistncia
entre o tipo informado e o esperado. O nico caso em que no ocorrer erro a entrada de
dados para tipo lgico, qualquer entrada diferente da palavra VERDADEIRO, ser atribudo a
varivel lgica o valor FALSO.

3.2 Comando de Sada

A sada de dados o meio pelo qual o usurio pode visualizar o resultado do processa-
mento do algoritmo. No VisuAlg h dois comandos de sada, so o escreva e o escreval, suas
finalidades so diferentes. As sintaxes destes comandos so:

17
// escreva, mostra as n expresses
escreva ( <expresso 1>, <expresso 2>, ..., <expresso n> )
// escreval, mostra as n expresses e pula uma linha em seguida
escreval ( <expresso 1>, <expresso 2>, ..., <expresso n> )

A <expresso i> o valor que aparecer na tela, a qual pode ser um texto, contedo
de uma varivel ou uma expresso matemtica. A sada pode intercalar textos com variveis.
Exemplo:

algoritmo Exemplo do comando escreva


...
x <- 5
y <- 10.5
nome <- Joo 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

Sada do algoritmo

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

Sada do algoritmo

Joo 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 espaos em branco antes de escrever um determinado valor,
possvel especificar o nmero de espaos que se deseja. Por exemplo, o comando escreva (x:5)
escreve o valor da varivel x em 5 espaos, alinhado-o direita. Para variveis reais, pode-se
tambm especificar o nmero de casas decimais que sero exibidas. Por exemplo, considerando
y como uma varivel real, o comando escreva (y:6:2) escreve seu valor em 6 espaos colocando
2 casas decimais.

//Espaos em branco
//N, M, Z so nmero de espaos em branco antes de escrever
escreva (<expresso 1>:<N>, <expresso 2>:<M>, ..., <expresso n>:<Z>)
escreval (<expresso 1>:<N>, <expresso 2>:<M>, ..., <expresso n>:<Z>)
//Casas Decimais
//A, B, C so o nmero de casas decimais
escreva (<expresso 1>:<N>:<A>, <expresso 2>:<M>:<B>, ..., <expresso n>:<Z>:<C>)
escreval (<expresso 1>:<N>:<A>, <expresso 2>:<M>:<B>, ..., <expresso n>:<Z>:<C>)

3.3 Exemplos para Fixao

Os problemas e suas solues apresentados abaixo, aplicam os conceitos at aqui estu-


dados.

3.3.1 rea de uma circunferncia

[Manzano, 2003, 3.8] Criar um algoritmo que receba o raio e efetue o clculo da rea
de uma circunferncia, apresentando a medida da rea calculada.

Algoritmo: Primeiramente necessrio conhecer a frmula para efetuar o clculo da


rea de uma circunferncia, sendo esta: A = R2 .

1. Determinar as variveis que sero utilizadas, A e R do tipo real. No VisuAlg h constante


matemtica com valor, chamado de pi

2. Ler um valor para o raio, no caso a varivel R;

3. Efetuar o clculo da rea de acordo com a frmula e atribuir a varivel A;

4. Apresentar o valor da varivel A.

Algoritmo em VisuAlg:

19
algoritmo Area Circunferncia
//Funo: Calcular a rea de uma circunferncia
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
A, R: real
inicio
// Seo de Comandos
escreva (Informe valor do raio: )
leia ( R )
A <- pi * exp (R, 2)
escreva (rea da cicunferncia : , A)
fimalgoritmo

Sada do algoritmo

Informe valor do raio: 2


rea da cicunferncia : 12.5663706143592

Observao: O valor lido em leia( R ), foi uma escolha apenas para ilustrao do exem-
plo.

3.3.2 Nmero de vrtices de um objeto geomtrico

[Medina e Marco, 2005, 2.5] Sabendo que a relao entre vrtices, arestas e faces de
um objeto geomtrico dada pela frmula: vertices + faces = arestas + 2. Dado o nmero de
faces e arestas (nmero inteiro e positivo), calcule o nmero de vrtices de um objeto geomtrico
genrico. Ao fim mostre o nmero de vrtices.

Algoritmo: A frmula para efetuar o clculo do nmero de vrtices j foi dada no


problema, resta apenas isolar e ter ento: vertices = arestas - faces + 2

1. Determinar as vriaveis que sero utilizadas, vertices, faces e arestas do tipo inteiro.

2. Ler os valores de faces e arestas, no caso a varivel faces e arestas;

3. Efetuar o clculo do nmero de vrtices de acordo com a frmula, e atribuir varivel


vertices;

4. Apresentar o valor da varivel vertices.

Algoritmo em VisuAlg:

20
algoritmo Nmero de Vrtices
//Funo: Calcular o nmero de vrtices de um objeto geomtrico genrico
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
vertices, faces, arestas: inteiro
inicio
// Seo de Comandos
escreva (Entre com o nmero de faces do objeto gomtrico: )
leia ( faces )
escreva (Entre com o nmero de arestas do objeto gomtrico: )
leia ( arestas )
vertices <- arestas - faces + 2
escreva (O nmero de vrtices do objeto especificado : , vertices)
fimalgoritmo

Sada do algoritmo

Entre com o nmero de faces do objeto gomtrico: 5


Entre com o nmero de arestas do objeto gomtrico: 12
O nmero de vrtices do objeto especificado : 9

Observao: Os valores para faces e arestas foram escolhidos apenas para ilustrao do
exemplo.

3.4 Exerccios de Fixao

1. [Medina e Marco, 2005, 2.5] Faa um algoritmo que calcule a mdia de quatro nmeros
introduzidos pelo usurio.

2. [Medina e Marco, 2005, 2.5] Faa um algoritmo que receba a temperatura em graus
Celsius e apresente-a em graus Fahrenheit, de acordo com a frmula F = (1.8 C) + 32.

3. Faa um algoritmo que leia o nome de um piloto, uma distncia percorrida em km e


o tempo que o piloto levou para percorr-la (em horas). O programa deve calcular a
velocidade mdia em km/h, e exibir a seguinte frase: A velocidade mdia do <piloto>
foi <velocidade mdia> km/h.

4. Escreva um algoritmo que calcule o nmero 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
Captulo 4

Estruturas de Seleo

Os algoritmos vistos at agora possuem um fluxo nico de execuo, independente das


entradas, todas as instrues so executadas. Mas muitas vezes preciso determinar sequncias
alternativas de aes, ocorrendo um desvio de fluxo. O desvio de fluxo usado para decidir
se um conjunto de instrues deve, ou no, ser realizado. Essa deciso feita com o uso de
seleo (condio), que ir fazer a verificao por qual "caminho"o algoritmo vai prosseguir, de
acordo com valor lgico (booleano) da condio, VERDADEIRO ou FALSO. Os operadores
relacionais so usados na construo destas condies.

No Visualg h dois comandos para seleo, so eles o comando se. . . entao . . . fimse e
escolha. . . caso

4.1 Comando Se . . . Entao

O comando de seleo se. . . entao . . . fimse, tem por finalidade fazer comparaes de
tal forma que possamos simular uma deciso. H dois tipos de comandos para estruturas de
seleo, a simples e a composta. Descritas a seguir:

4.1.1 Estrutura de Seleo 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 <condio> entao
<instrues para condio verdadeira>
fimse

A estrutura de seleo simples inicia com a palavra-chave se e termina em fimse. A


<condio> a ser analisada deve ficar entre as palavras se e entao. Se o seu resultado for
VERDADEIRO, todos as instrues at o fimse so executadas. Caso contrrio, ou seja, o seu
resultado for FALSO, estes comandos so ignorados e a execuo do algoritmo continua a partir
da primeira linha aps o fimse. Exemplo de seleo simples:

algoritmo Exemplo Seleo Simples


//Funo: Somar x e y, se x e y forem maiores ou iguais a zero
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x: inteiro
y, soma: real
sinal: logico
inicio
// Seo de Comandos
leia ( x , y )
se (x >= 0) e (y >= 0)entao
soma <- x + y
escreva ( soma )
sinal <-verdadeiro
fimse
escreva (Entradas Vlidas?, sinal)
fimalgoritmo

Sada do algoritmo: Caso 1

10 5
15
Entradas Vlidas? VERDADEIRO

Sada do algoritmo: Caso 2

-1 5
Entradas Vlidas? FALSO

importante frisar que sempre direita do comando dever parecer uma expresso
lgica. Assim, os seguintes comandos so incorretos:

se x <- y entao // uma atribuio e no uma expresso lgica


se x + y entao // uma expresso aritmtica e no lgica

Por outro lado, esto 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 varivel lgica

4.1.2 Estrutura de Seleo Composta

No caso do se composto, existem duas alternativas a serem escolhidas, ou ela executa


a parte VERDADEIRA ou a parte FALSA, dependendo da condio. Apresentando a sua sin-
taxe:

se <condio> entao
<instrues para condio verdadeira>
senao
<instrues para condio falsa>
fimse

A estrutura de seleo composta possui forma muito similar com a simples, sua nica
diferena presena da palavra-chave senao, logo aps as instrues para condio verdadeira.
Nesta outra forma do comando, a condio analisada e se o resultado for VERDADEIRO,
todas as instrues at a palavra senao so executadas, e a execuo continua a partir da primeira
linha depois do fimse. Se o resultado for FALSO, estes comandos so ignorados e as instrues
a partir do senao so executadas at a linha fimse. Exemplo de seleo composta:

algoritmo Exemplo Seleo Composta


//Funo: Somar x e y, se x e y forem maiores ou iguais a zero
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x: inteiro
y, soma: real
inicio
// Seo de Comandos
leia ( x , y )
se (x >= 0) e (y >= 0)entao
soma <- x + y
escreva ( soma )
senao
escreva (Entradas Invlidas!)
fimse
fimalgoritmo

24
Sada do algoritmo: Caso 1

10 5
15

Sada do algoritmo: Caso 2

-1 5
Entradas Invlidas!

4.2 Comando Escolha . . . Caso

Em algumas situaes necessrio ter vrias solues ligadas a respostas diferentes,


neste caso a estrutura de seleo simples ou composta no uma soluo prtica, isto porque
ser necessrio escrever muitas linhas de algoritmo. Temos ento o comando de alternativa de
mltipla escolha. Uso do comando escolha . . . caso muito utilizado na construo de menu,
onde o algoritmo necessita executar vrias funes e o usurio precisa determinar a operao
que executar. O funcionamento deste comando obedece a seguinte regra:

escolha <opo (inteiro/caractere)>


caso <valor da opo 1.1>, <valor da opo 1.2>,..., <valor da opo 1.n>
<instrues 1>
caso <valor da opo 2.1>, <valor da opo 2.2>,..., <valor da opo 2.n>
<instrues 2>
outrocaso
<instrues 3>
fimescolha

O comando escolha . . . caso inicia com a palavra-chave escolha e termina em fimes-


colha. Na primeira linha fica a opo, uma varivel do tipo inteiro ou caractere, tal que o seu
contedo determinado anteriormente. E cada caso verifica se contedo igual a alguma de
suas opes. Se sim, so executadas todas instrues at a linha do prximo caso, e retoma
execuo para linha aps fimescolha. Se no, significa que o contedo da opo invlida,
onde utilizado o outrocaso, para tratar esses casos invlidos. Abaixo um exemplo de escolha
. . . caso:

algoritmo Exemplo Seleo Composta


//Funo: Mostrar um exemplo de seleo composta
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x: inteiro
y, resultado: real
opcao: caractere

25
inicio
// Seo de Comandos
escreval (Digite dois valores, e operao que deseja + ou - )
leia ( x , y , opcao)
escolha opcao
caso +
resultado <- x + y
escreval ( resultado )
caso -
resultado <- x - y
escreval ( resultado )
outrocaso
escreva (Opo Invlida!)
fimescolha
fimalgoritmo

Sada do algoritmo: Caso 1

Digite dois valores, e operao que deseja + ou


-
10 5 +
15

Sada do algoritmo: Caso 2

Digite dois valores, e operao que deseja + ou


-
10 5 -
5

Sada do algoritmo: Caso 2

Digite dois valores, e operao que deseja + ou


-
10 5 /
Opo Invlida!

4.3 Exemplos para Fixao

Os problemas e suas solues apresentados abaixo, aplicam os conceitos at aqui estu-


dados.

4.3.1 Tipo de Tringulo

[Manzano, 2003, 4.6] Ler trs valores para os lados de um tringulo, considerando
lados como: A, B e C. Verificar se os lados fornecidos formam realmente um tringulo, e se
for esta condio verdadeira, dever ser indicado qual tipo de tringulo foi formado: issceles,
escaleno ou equiltero.

26
Algoritmo: Para estabelecer este algoritmo, necessrio em primeiro lugar saber o que
realmente um tringulo. Tringulo uma forma geomtrica composta por trs lados, sendo
que cada lado menor que a soma dos outros dois lados. Perceba que isto uma condio,
tringulo quando A < B + C, quando B < A + C e quando C < A + B. Depois de verificar
que os valores informados forma um tringulo, deve ser analisado qual o tipo de tringulo
formado: issceles, escaleno ou equiltero. Um tringulo issceles 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 equiltero quando possui todos os lados iguais,
sendo A = B e B = C.

1. Ler trs valores para os lados de um tringulo: A, B, C

2. Verificar dados informados formam um tringulo, se sim, verificar qual o tipo do trin-
gulo;

3. Caso os lados fornecidos no caracterizem um tringulo, avisar a ocorrncia;

Algoritmo em VisuAlg:

algoritmo Tipo de Tringulo


//Funo: informar se um tringulo e seu tipo
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
A, B, C: real
inicio
// Seo de Comandos
escreva (Informe o valor de cada lado do tringulo: )
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 (Tringulo Equiltero)
senao
se (A = B) ou (A = C) ou (C = B)entao
escreva (Tringulo Issceles)
senao
escreva (Tringulo Escaleno)
fimse
fimse
senao
escreva (Os valores no formam um tringulo)
fimse
fimalgoritmo

27
Sada do algoritmo: Caso 1

3 3 3
Tringulo Equiltero

Sada do algoritmo: Caso 2

3 3 2
Tringulo Essceles

Sada do algoritmo: Caso 2

5 3 2
Tringulo Escaleno

4.3.2 Identificar se um nmero par, positivo ou ano bissexto

[Medina e Marco, 2005, 3.2] Faa um algoritmo capaz de identificar se um nmero


par ou mpar; positivo, negativo ou zero; um ano bissexto - considere que para o ano ser
bissexto basta que seja divisvel por 400. Caso contrrio, precisa ser divisvel por 4 e no ser
divisvel por 100. Caso no seja nenhuma das opes anteriores, o algoritmo deve retornar uma
mensagem informando que a operao solicitada no vlida.

Algoritmo: O algoritmo possuir trs funcionalidades diferentes, e executar uma que


o usurio solicitar. A primeira ser identificar se o nmero par ou mpar, ou seja, verificar se
o resto da diviso por dois zero ou no. A segunda ser identificar se o nmero positivo,
negativo ou igual a zero. E a terceira se bissexto, de acordo com as consideraes feitas na
descrio do problema.

1. Ler um nmero inteiro;

2. Mostrar opes de funcionalidades ao usurio;

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 no.

Algoritmo em VisuAlg:

28
algoritmo Menu Identificao
//Funo: Identificar: par ou mpar; positivo, negativo ou zero; ano bissexto
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
n, opcao: inteiro
inicio
// Seo de Comandos
escreva (Entre com o valor a ser testado: )
leia ( n )
escreva (Voc pretende identificar se o nmero : )
escreva (Opo 1: Par ou mpar: )
escreva (Opo 2: Positivo, negativo ou 0: )
escreva (Opo 3: Ano Bissexto: )
leia ( opcao )
escolha opcao
caso 1
se n mod 2 = 0 entao
escreva (Nmero par.)
senao
escreva (Nmero mpar.)
caso 2
se n > 0 entao
escreva (Nmero positivo.)
senao
se n < 0 entao
escreva (Nmero negativo.)
senao
escreva (Nmero 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 no bissexto.)
outrocaso
escreva (Opo invlida.)
fimescolha
fimalgoritmo

29
Sada do algoritmo: Caso 1

Entre com o valor a ser testado


10
Voc pretende identificar se o nmero : Opo 1:
Par ou mpar:
Opo 2: Positivo, negativo ou 0:
Opo 3: Ano Bissexto:
1
Nmero par.

Sada do algoritmo: Caso 2

Entre com o valor a ser testado


-10
Voc pretende identificar se o nmero : Opo 1:
Par ou mpar:
Opo 2: Positivo, negativo ou 0:
Opo 3: Ano Bissexto:
2
Nmero negativo.

Sada do algoritmo: Caso 2

Entre com o valor a ser testado


2015
Voc pretende identificar se o nmero : Opo 1:
Par ou mpar:
Opo 2: Positivo, negativo ou 0:
Opo 3: Ano Bissexto:
3
Ano no bissexto.

4.4 Exerccios de Fixao

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 mdia escolar
for maior ou igual a 7. Se o aluno no foi aprovado, indicar uma mensagem informando
esta condio. Apresentar junto das mensagens o valor da mdia do aluno para qualquer
condio.

2. [Manzano, 2003, 4.7] Efetuar leitura de quatro nmeros inteiros e apresentar os nmeros
que so divisveis por 2 e 3.

3. [Manzano, 2003, 4.7] Efetuar leitura de quatro nmeros inteiros e apresentar os nmeros
que so divisveis por 2 ou 3.

4. Faa um algoritmo que receba o valor do salrio de uma pessoa e o valor de um finan-

30
ciamento pretendido. Caso o financiamento seja menor ou igual 5 vezes o salrio da
pessoa, o algoritmo dever escrever Financiamento Concedido, se no, ele dever es-
crever Financiamento Negado. Independente de conceder ou no o financiamento, o
algoritmo escrever depois a frase: Obrigado por nos consultar.

5. Faa um programa que recebe 4 valores, I, A, B, C, onde I um nmero inteiro positivo


e A, B e C so 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 no for um dos trs valores acima, dar uma mensagem indicando isto.

31
Captulo 5

Estruturas de Repetio

Nos exemplos e exerccios que foram apresentados at agora sempre foi possvel resol-
ver os problemas com uma sequncia de instrues, onde todas eram necessariamente executa-
das uma nica vez. Os algoritmos seguiam, portanto, apenas uma sequncia linear de operaes.
Veja, por exemplo, um algoritmo para ler os nomes e as notas das provas de trs alunos e cal-
cular suas mdias. Uma possvel soluo seria repetir o trecho de cdigo do algoritmo trs
vezes. A soluo acima vivel apenas para uma turma de poucos alunos; para uma turma de
40 alunos, a codificao da soluo seria bem trabalhosa. Nesta seo, ser apresentado um
conjunto de estruturas de repetio que permitem que um trecho de um algoritmo seja repetido
um determinado nmero de vezes, sem que o cdigo correspondente tenha que ser escrito mais
de uma vez. O VisuAlg possui trs estruturas de repetio: repita . . . ate; enquanto . . . faca
e para . . . faca. Todas as repeties tm uma caracterstica em comum: o fato de haver uma
verificao de condio, para determinar se a repetio prossegue ou no.

5.1 Comando Repita . . . Ate

Nessa estrutura, todas as instrues da lista so executadas, e no fim uma expresso


lgica avaliada. Por consequncia, este comando executa pelo menos uma vez o conjunto
de instrues antes da verificao. Isto se repete at que a avaliao da condio resulte em
VERDADEIRO, quando ento o prximo comando a ser executado o comando imediatamente
aps o ate. Cada repetio do conjunto de instrues tambm chamada de iterao. Sua forma
geral :

32
repita
<instrues>
ate <expresso lgica>

A <expresso lgica> deve ser pensada como uma condio de parada da repetio.
Exemplo:

algoritmo Exemplo Repita ...Ate


//Funo: Escrever os nmeros de 1 a 10
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x: inteiro
inicio
// Seo de Comandos
x <- 1
repita
escreva ( x )
x <- x + 1
ate x > 10
fimalgoritmo

Sada do algoritmo

1 2 3 4 5 6 7 8 9 10

No exemplo acima, a varivel x controla o nmero de repeties. Normalmente, a


varivel de controle recebe um valor inicial, incrementada (ou decrementada) de um valor
constante e tem seu valor testado no final da iterao. Ao chegar a um determinado valor, a
repetio interrompida. A inicializao da varivel contadora deve acontecer fora do repita,
antes do seu incio.

Toda estrutura repita . . . ate que utiliza como auxlio uma varivel de controle deve
conter:

Inicializao da varivel de controle;

incremento ou decremento da varivel de controle, operao escolhida depende da con-


dio;

condio que testa o valor da varivel de controle.

33
5.2 Comando Enquanto . . . Faca

Na estrutura enquanto . . . faca, ao contrrio da estrutura apresentada anteriormente, a


avaliao da expresso lgica realizada no incio da estrutura, se ela for VERDADEIRA, a
lista de instrues executada. Isso se repete at que a condio seja FALSA. Veja a sua forma
geral:

enquanto <expresso lgica> faca


<instrues>
fimenquanto

Na estrutura enquanto, a expresso avaliada no incio e se o resultado for FALSO


no primeiro teste, a lista de comandos no executada nenhuma vez. Essa diferena faz com
que em determinadas situaes o uso de uma estrutura seja mais vantajoso que o uso da outra.
Exemplo deste comando a seguir:

algoritmo Exemplo Enquanto ...faca


//Funo: Escrever os nmeros de 1 a 10
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x: inteiro
inicio
// Seo de Comandos
x <- 1
enquanto x <= 10 faca
escreva ( x )
x <- x + 1
fimenquanto
fimalgoritmo

Sada do algoritmo

1 2 3 4 5 6 7 8 9 10

5.3 Comando Para . . . Faca

O comando para . . . faca tambm permite a descrio, dentro de um algoritmo, de uma


estrutura de repetio. Sua forma geral :

para <varivel> de <valor inicial> ate <valor final> passo <incremento> faca
<instrues>
fimpara

34
Na estrutura para . . . faca, a <varivel> uma varivel de controle, que inicializada
com <valor inicial> e no incio de cada iterao, seu valor comparado com <valor final>. Se
o valor da varivel for menor ou igual a <valor final>, a lista de comandos executada e aps
ser executado o ltimo comando da lista, a varivel de controle incrementada. Isto repete-se
at que o valor da varivel de controle seja maior que <valor final>. A instruo passo pode ser
omitida quando o valor de incremento for igual a 1, pois o valor padro para <incremento>
1. Caso o valor de incremento seja diferente deve ser utilizado a instruo passo e o seu valor
de incremento. para. Lembrando que incrementar, pode ser tambm decrementar com passos
negativos, como -1. Exemplo de algoritmo que implementa para . . . faca:

algoritmo Exemplo Para ...faca


//Funo: Escrever os nmeros de 1 a 10
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x: inteiro
inicio
// Seo de Comandos
para x de 1 ate 10 faca
escreva ( x )
fimpara
fimalgoritmo

Sada 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


//Funo: Escrever os nmeros de 10 a 1
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x: inteiro
inicio
// Seo de Comandos
para x de 10 ate 1 passo -1 faca
escreva ( x )
fimpara
fimalgoritmo

Sada do algoritmo

10 9 8 7 5 4 3 2 1

35
A estrutura para..faca uma estrutura de repetio mais completa que as anteriores,
pois ela incorpora a inicializao, incremento e teste de valor final da varivel de controle.
preferencialmente utilizada em situaes em que sabe-se previamente o nmero de repeties a
serem feitas. Este nmero de repeties pode ser uma constante ou estar em uma varivel.

Aps apresentar as trs estruturas de repeties, 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 Fixao

Os problemas e suas solues apresentados abaixo, aplicam os conceitos at aqui estu-


dados.

5.4.1 Tabuada

Escreva um algoritmo em Visualg que pergunte ao usurio qual tabuada ele deseja ver.
Mostre a tabuada multiplicando o valor de 0 at 10. Ao final, pergunte se o usurio deseja ver
outra tabuada. Caso a resposta seja SIM, repita todo o processo novamente.

Algoritmo: Sabe-se que a tabuada de um nmero n o conjunto de produtos 0 at 10 por


este nmero x. As 11 sucessivas multiplicaes devero ser controladas por um contador. Sendo
assim devem ser criadas variveis CONTADOR e X. Tal que a varivel X ser determinada pelo
usurio. Alm dessas dever ser criada uma varivel para a confirmao da continuidade da
execuo do programa. Este exemplo faz uso do encadeamento de estruturas de repetio.

1. Criar uma varivel para ser utilizada como resposta;

2. Ler um valor para a varivel X;

3. Efetuar e apresentar a multiplicao do valor X por 0, 1 . . . 10;

4. Repetir os passos 2 e 3 at que a RESP(resposta) do usurio for no.

Algoritmo em VisuAlg:

36
algoritmo Tabuada
//Funo: Calcular Tabuada, n vezes de acordo com usurio
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x, contador: inteiro
resp: caractere
inicio
// Seo 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 no) )
leia ( resp )
ate (resp <> sim)
fimalgoritmo

Sada 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 no)
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 no)
no

37
5.4.2 Fatorial

[Manzano, 2003, 5.6] Elaborar o algoritmo, que efetue o clculo de fatoriais at que o
usurio no deseje mais. Sendo assim, o programa dever pedir ao usurio a sua continuidade
ou no. E o nmero da fatorial a ser calculada ser informado pelo usurio.

Algoritmo: Sabe-se que fatorial o produto dos nmeros naturais desde 1 at o inteiro
n. Sendo assim, o clculo de uma fatorial conseguido pela multiplicao sucessiva do nmero
de termos. O nmero de passos dever ser controlado por um contador. Sendo assim deve
ser criadas variveis FATORIAL e CONTADOR. Alm dessas devero ser criadas outras duas
variveis, sendo uma para a confirmao da continuidade da execuo do programa e outra para
determinar o clculo do valor da fatorial. Este exemplo faz uso do encadeamento de estruturas
de repetio.

1. Inicializar as variveis FATORIAL e CONTADOR com 1;

2. Definir as variveis RESP(resposta) para confirmao e N para receber o limite de valor


para o clculo da fatorial;

3. Enquanto RESP do usurio for sim, executar os passos 3, 4, 5, 6 e 7;

4. Repetir a execuo dos passos 4 e 5 por N vezes;

5. FATORIAL <- FATORIAL * CONTADOR;

6. Incrementar 1 varivel CONTADOR;

7. Apresentar ao final o valor obtido.

Algoritmo em VisuAlg:

algoritmo Fatorial
//Funo: Calcular fatorial, n vezes de acordo com usurio
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
contador, fatorial, n: inteiro
resp: caractere
inicio
// Seo de Comandos
resp <- sim

38
enquanto resp = sim faca
fatorial <- 1
escreva ( Fatorial de qual nmero: )
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

Sada do algoritmo

Fatorial de qual nmero:


4
Fatorial de 4 = 24
Deseja continuar?
sim
Fatorial de qual nmero:
6
Fatorial de 6 = 720
Deseja continuar?
no

5.5 Exerccios de Fixao

1. [Manzano, 2003, 5.7] Elaborar um programa que apresente como resultado o valor de
uma potncia de uma base qualquer elevada a um expoente qualquer, ou seja, de B n , 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
residncia (sala, cozinha, quartos, etc.). O programa dever solicitar a entrada do nome,
a largura e o comprimento de um determinado cmodo. Em seguida, dever apresentar
a rea do cmodo lido e tambm uma mensagem solicitando do usurio a confirmao
de continuar calculando novos cmodos. Caso o usurio responda "NO", o programa
dever apresentar o valor total acumulado da rea residencial.

3. [Medina e Ferting, 2005, 4.6] Faa o algoritmo para a resoluo do somatrio a seguir,
sendo n definido pelo usurio e maior que 5:

n
X
2i2 + 5i + 1

i=5

39
4. Escrever um algoritmo que l um nmero no determinado de valores para m, todos
inteiros e positivos, um de cada vez. Se m for par, verificar quantos divisores possui e
escrever esta informao. 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
nmero lido.

40
Captulo 6

Vetores e Matrizes

Vetores e Matrizes so estruturas de dados que tem como objetivo auxiliar quando h
muitas variveis do mesmo tipo em um algoritmo. At agora todas as declaraes de variveis
eram unitrias, pois eram suficiente para os problemas anteriores. Porm, no so adequadas
para resolver um grande nmero de problemas computacionais. Imagine, por exemplo, cons-
truir um algoritmo, que recebe nome de 500 pessoas e imprime um relatrio destes mesmos
nomes, mas ordenados alfabeticamente. No seria uma tarefa simples, pois teria que definir
500 variveis do tipo caractere. Para resolver problemas como este, e outros, existem as va-
riveis indexadas, tambm chamadas de variveis compostas. Tais variveis podem representar
um agrupamento de valores do mesmo tipo (homogneas). Vetores e Matrizes so variveis
compostas e sero apresentadas a seguir.

6.1 Vetor

Vetor uma varivel que armazena vrias variveis do mesmo tipo. No problema apre-
sentado anteriormente, pode ser utilizado um vetor de 500 posies para armazenar os nomes
das 500 pessoas. So conhecidas tambm como variveis compostas unidimensionais e estti-
cas. Vetor definido inicialmente com um tamanho fixo e suas posies so referenciadas por
um nico ndice, sendo assim seus elementos tm ordinalidade: 1, 2, 3, . . . , N . A sintaxe para
declarao :

var
<varivel> : vetor [<valor inicial..valor final>] de <tipo de dado>

41
Onde, a declarao parecida com variveis vistas at agora, deve apenas acrescentar as
informaes vetor e a quantidade de elementos do vetor. Essas estruturas so limitadas, por isso
deve ser definido logo na declarao da varivel o tamanho do vetor. No VisuAlg a definio 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 declarao acima corresponde declarao de 5 variveis 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 abstrao, os vetores acimas podem ser ilustrados
da seguinte maneira:

1 2 3 4 5
Vetor nomes Joo Ana Mateus Ricardo Maria

1 2 3 4 5
Vetor idades 15 10 21 54 10

O acesso aos elementos realizado pela sua posio dentro do vetor. Para atribuir um
valor a um elemento do vetor devemos utilizar o seguinte padro:

<varivel>[<posio>] <- <valor>

Para atribuio de valores aos vetores, a diferena ser a necessidade de identificar em


qual posio aquele valor ser inserido. Ao especificar uma determinada posio do vetor, ser
como acessar uma varivel simples. Exemplo:

nomes[1] <- Joo da Silva


idades[1] <- 35
nomes[3] <- Maria Aparecida
idades[3] <- idades[1]
i <- 2
idades[i] <- 45

As estruturas de repeties auxiliam no acesso dos elementos de um vetor. A seguir um


exemplo de algoritmo que faz implementao de vetor utilizando para . . . faca:

42
algoritmo Exemplo Vetores
//Funo: l um vetor de real com 6 posies, depois imprime o vetor
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
numero: vetor [1..6] de real
i: inteiro
inicio
// Seo de Comandos
para i de 1 ate 6 faca
leia (numero[i])
fimpara
escreva (Contedo do Vetor )
para i de 1 ate 6 faca
escreva (numero[i])
fimpara
fimalgoritmo

Sada do algoritmo

1 6 5 8 12 1
Contedo do Vetor
1 6 5 8 12 1

6.2 Matriz

Matriz uma varivel que armazena vrias variveis do mesmo tipo, como o vetor,
diferenciando apenas por ter at N dimenses. Assim como nos vetores as posies das matrizes
so referenciadas por ndices. Neste caso sero N ndices, sendo N o nmero de dimenses da
matriz. comum trabalhar com matrizes com 2 dimenses, Linhas x Colunas. Logo, seram
utilizados dois ndices para referenciar as posies da matriz. A sintaxe para declarao :

<varivel>: vetor [<tamanho 1>,<tamanho 2>, ..., <tamanho n>] de < tipo de dado >

Onde, a declarao semelhante a de um vetor, a nica diferena est nos tamanhos.


Cada <tamanho i> seguido de vrgula representa uma dimenso 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 varivel idades foi declarada como uma matriz de inteiros com trs 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 varivel nomes uma matriz de caracteres com trs
linhas e trs 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 abstrao, as matrizes acimas
podem ser ilustradas da seguinte maneira:

1 2 3 4
1 15 10 21 54
Matriz idades 2 10 36 44 54
3 28 12 36 49

1 2 3
1 Joo Ana Mateus
Matriz nomes 2 Maria Lusa Tiago
3 Gustavo Felipe Bruna

Para atribuir um valor ou acessar um elemento da matriz devemos utilizar o seguinte


padro:

<varivel>[<posio 1>,<posio 2>] <- <valor>

Exemplo:

nomes[1,3] <- Joo 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 repeties auxiliam no acesso dos elementos da ma-


triz. Geralmente sero utilizadas duas repeties aninhadas, uma para linhas e outra para colu-
nas. No exemplo a seguir foram utilizados vrios para . . . faca aninhados:

algoritmo Exemplo Matrizes


//Funo: l um vetor de real com 6 posies, depois imprima o vetor
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
numero: vetor [1..3,1..3] de real

44
linha, coluna: inteiro
inicio
// Seo de Comandos
para linha de 1 ate 3 faca
para coluna de 1 ate 3
leia (numero[linha, coluna])
fimpara
fimpara
escreva ( Contedo da Matriz)
para linha de 1 ate 3 faca
para coluna de 1 ate 3
escreva (numero[linha, coluna])
fimpara
escreval
fimpara
fimalgoritmo

Sada do algoritmo

1 2 3 4 5 6 7 8 9
Contedo da Matriz
1 2 3
4 5 6
7 8 9

6.3 Exemplos para Fixao

Os problemas e suas solues apresentados abaixo, aplicam os conceitos at aqui estu-


dados.

6.3.1 Vetor de Nomes em Ordem Alfabtica

[Manzano, 2003, 7.1] Criar um programa que efetue a leitura dos nomes de 20 pessoas
e em seguida apresent-los em ordem alfabtica.

Algoritmo Existem vrios mtodos para obter a ordenao de elementos de um vetor.


Neste problema, ser apresentado um mtodo bastante simples, que consiste na comparao de
cada elemento com todos os elementos subsequentes. A ordenaao considerada alfabtica,
devendo essa ser crescente, ou seja, de A at Z.

1. Definir a varivel i do tipo inteira como varivel de controle na repetio;

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 operao de troca;

6. Apresentar os 20 nomes ordenados.

Algoritmo em Visualg:

algoritmo Vetor em ordem alfabtica


//Funo: l 20 nomes e mostra todos em ordem alfabtica
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
Nome: vetor [1..20] de caractere
i, j: inteiro
aux: caractere
inicio
// Seo 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

Faa 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 secundria;

5. a soma de todos os elementos da matriz.

Algoritmo em Visualg:

algoritmo Matriz Somas


//Funo: Executa somas descritas no enunciado
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
Matriz: vetor [1..3,1..3] de inteiros
i, j, somaLinha, somaColuna, somaDiagPrinc, somaDiagSec, somaTudo : inteiro
inicio
// Seo 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 secundria , somaDiagSec )
fimalgoritmo

6.4 Exerccios de Fixao

1. [Manzano, 2003, 6.4] Ler 10 elementos de um vetor e apresent-los.

2. [Medina e Ferting, 2005, 7.5] Faa um algoritmo que determine qual o maior elemento
dentro de um vetor.

47
3. [Manzano, 2003, 6.4] Elaborar um programa que efetue o clculo de uma tabuada de um
nmero 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 juno 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 mdia das temperaturas lidas.

6. [Medina e Ferting, 2005, 7.5] Faa um algoritmo que determine quantas vogais h em
um vetor de caracteres.

7. [Medina e Ferting, 2005, 7.5] Faa um algoritmo que ordene e mostre em ordem cres-
cente um vetor de 10 elementos.

8. [Medina e Ferting, 2005, 7.5] Faa um algoritmo que encontre o determinante de uma
matriz 2 x 2. O determinante dado pela diferena entre o produto da diagonal principal
e o da diagonal secundria.

9. [Manzano, 2003, 8.4] Ler duas matrizes A e B, com 5 linhas e 3 colunas. Construir uma
matriz C de mesma dimenso, 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] Faa um algoritmo que transforme uma matriz M em seu
espelho. Exemplo:


1 2 3 1 4 7

4 5 6 2 5 8



7 8 9 3 6 9

48
Captulo 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 especficas. Ao invs de escrever um
algoritmo grande e complexo, escrevem-se vrios algoritmos menores, os quais, no isolada-
mente, mas em conjunto, resolvem o problema proposto. Esta subordinao deve-se ao fato de
que o sub-algoritmo s ser executado se for solicitado.

Sub-algoritmo possui incio e fim e executa um conjunto pr-definido de instrues


com um local prprio para sua definio possuindo um identificador, ou seja, um nome pelo
qual chamado em qualquer parte do algoritmo ou de outros sub-algoritmos. Assim o fluxo de
execuo do algoritmo comea pelo principal e desviado para o sub-algoritmo chamado.

Cada sub-algoritmo, pode ter suas prprias variveis chamadas de variveis locais, que
existem apenas durante sua chamada.

Na estruturao de algoritmos conveniente utiliz-los, pois trazem as seguintes vanta-


gens:

Reutilizao de sub-algoritmos j implementados;

Melhor compreenso e visualizao do algoritmo;

Deteco de erros com maior facilidade;

Sub-algoritmos so declarados no incio do algoritmo e podem ser chamados em qual-


quer ponto aps sua declarao. H dois tipos de sub-algoritmos: Funo, que retorna um

49
determinado valor, e Procedimento, que no h retorno de valor. O retorno de valores a sada,
por meio dele o sub-algoritmo pode dar uma "resposta"ou um resultado para quem o chamou.

7.0.1 Varivel Global

Varivel global vista e pode ser manipulada pelo programa principal e por todos os
subalgoritmos pertencentes a ele. As variveis globais so declaradas antes de todos os subal-
goritmos.

var
< declarao de variveis globais >
< subalgoritmo 1>
< subalgoritmo 2>
...
< subalgoritmo i>
inicio
// Seo de Comandos
fimalgoritmo

A vantagem das variveis globais a sua fcil utilizao. Mas como todos os subalgo-
ritmos tem acesso e podem alterar o valor destas variveis, deve ser analisado se o uso delas
no trar um possvel resultado indesejado.

aconselhavl no declarar variveis globais com o mesmo nome das variveis da


funo.

7.0.2 Varivel Local

Varivel local visvel e manipulada apenas pelo subalgoritmo em que ela foi declarada.
As variveis locais so declaradas no incio do subalgoritmo que pertence.

var
< declarao de variveis globais >
< subalgoritmo 1 >
< declarao de variveis locais do subalgoritmo 1 >
< subalgoritmo 2>
< declarao de variveis locais do subalgoritmo 2 >
...
< subalgoritmo i>
< declarao de variveis locais do subalgoritmo i >
inicio
// Seo de Comandos
fimalgoritmo

50
A vantagem de uma varivel local a independncia em relao ao resto. Uma alterao
em uma varivel local afetar apenas no prprio subalgoritmo onde foi declarada. Garantindo
assim que no ter resultado indesejado em outros subalgoritmos.

7.0.3 Parmetros

Ao se chamar um subalgoritmo, tambm possvel passar-lhe determinadas informa-


es que recebem o nome de parmetros. H duas formas de passagem de parmentros existen-
tes: por valor e por referncia.

Passagem de parmetros por valor

Na passagem de parmentros por valor, uma cpia da varivel feita durante a chamada
do subalgoritmo.

<subalgoritmo> <nome>(<varivel 1>,..., <varivel i>:<tipo de dado>)

Passagem de parmetros por referncia

Na passagem de parmetros por referncia, o endereo da varivel passado, em vez da


cpia do valor. O que acontece neste processo que apesar de ter outro identificador, os valores
manipulados no subalgoritmo esto no mesmo espao de memria que as variveis passadas
na chamada do subalgoritmo, assim todas as alteraes feitas no interior de um subalgoritmo
refletiro na varivel passada pelo parmetro.

<subalgoritmo> <nome>(var <varivel 1>,..., <varivel i>:<tipo de dado>)

O que difere da passagem por valor utilizao da palavra-chave var, que simbolizar
a passagem por referncia.

7.1 Procedimentos

Procedimentos so subalgoritmos que agrupam um conjunto de comandos, que so exe-


cutados quando o procedimento chamado. Nenhum procedimento possui tipo de dado de
retorno. A sua criaao deve ser realizada dentro da seco de variveis

51
algoritmo <nome do algoritmo>
// Funo:
// Autor:
// Data:
//Seo de Declaraes
var
<declarao de variveis globais>
<definio do procedimento >
inicio
// Seo de Comandos
fimalgoritmo

A declarao do procedimento deve estar entre o final da declarao de variveis e a


linha inicio do programa principal, e possuem a seguinte sintaxe:

procedimento <nome do procedimento> ([var]<parmetros>: <tipo de dado>)


var
<declarao de variveis locais>
inicio
<lista de comandos>
fimfuncao

Parmetros: Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de
dados a separao feita com ponto-e-vrgulas. Exemplo x, y: inteiro; a, b: real. Tal que
var opcional. retorne, os tipos retornados so: real, inteiro, lgico ou caractere.

Declarao de variveis locais: idntica a declarao de variveis globais. As variveis


declaradas localmente tem validade apenas na funo.

Exemplo

algoritmo Exemplo de Procedimento


//Funo: somar dois valores utilizando funo
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
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
// Seo 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

Sada 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 Funes

Funes so subalgoritmos que possuem como objetivo retornar apenas um valor ou


uma informao ao algoritmo que lhe chamou. A chamada de uma funo feita atravs da
citao do seu nome, seguido opcionalmente de seus argumentos iniciais. As funes podem
ser predefinidas pela linguagem, ou criadas pelo programador de acordo com o seu interesse.

Por analogia, na Matemtica, escreve-se (ou define-se) uma funo por meio de par-
metros, a seguir exemplos onde se define as funes f , g e h:

f (x) = x2 3x + 2, funo f foi definida em termos do parmetro x;

g(x, y) = x2 + y 3 , funo g foi definida em termos de dois parmetros x e y;

h(x, y, z) = x2 + 2y + z 2 , funo h foi definida em termos de trs parmetros x, y e z.

Espera-se que em funes matemticas a resposta, anlogo a retorno, seja um valor do


tipo nmerico, o mesmo ocorre com os valores dos parmetros das funes.

Para saber o valor de retorno das funes para valores em particular dos argumentos,
por exemplo, na funo f , basta substituir x por um valor escolhido, como x = 3, este valor
onde aparece o parmetro 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 criao de uma funo deve ser realizada
dentro da seo de variveis:

algoritmo <nome do algoritmo>


// Funo:
// Autor:
// Data:
//Seo de Declaraes
var
<declarao de variveis globais>
<definio da funo >
inicio
// Seo de Comandos
fimalgoritmo

A declarao da funo deve estar entre o final da declarao de variveis e a linha inicio
do programa principal, e possui a seguinte sintaxe:

funcao <nome da funo> ([var]<parmetros>: <tipo de dado>) : tipo de retorno>


var
<declarao de variveis locais>
inicio
<lista de comandos>
retorne <varivel ou valor de retorno>
fimfuncao

Cada funo tem associada ao seu valor de retorno um tipo de dado explcito.

Parmetros: Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de
dados a separao feita com ponto-e-vrgulas. Exemplo x, y: inteiro; a, b: real. Tal que
var opcional.

Tipo de retorno: Estar associado ao tipo do valor que a funo retornar com o comando
retorne, os tipos retornados so: real, inteiro, lgico ou caractere.

Declarao de variveis locais: idntica a declarao de variveis globais. As variveis


declaradas localmente tem validade apenas na funo.

54
retorne: comando que executa o encerramento do subprograma, retornando imediata-
mente um nico valor. Esta instruo s pode retornar um nico valor. O valor que
comando retornar deve ser do mesmo tipo que o especificado no incio da funo em
tipo de retorno.

Exemplo:

algoritmo Exemplo de Funo


//Funo: somar dois valores utilizando funo
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
x, y, s: real

funcao Somar(valor1, valor2: real) : real


var
soma : real
inicio
soma <- valor1 + valor2
retorne soma
fimfuncao

inicio
// Seo 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

Sada do algoritmo

20 15
Soma = 35
Soma = 7
Soma = 12

7.2.1 Funes Pr-Definidas

VisuAlg possui funes pr-definidas, as quais esto descritas abaixo e foram retiradas
do Apoio Informtica. http://www.apoioinformatica.inf.br/produtos/visualg. Atalho para es-
tas funes pressionar (CTRL+J) o visualg mostra uma Lista de funes predefinidas, basta
selecionar a funo desejada e dar um Enter, depois s passar os parmetros desejados.

55
Funes numricas, algbricas e trigonomtricas

Abs(expresso) - Retorna o valor absoluto de uma expresso do tipo inteiro ou real. Equivale
ao mdulo na lgebra.
ArcCos(expresso) - Retorna o ngulo (em radianos) cujo cosseno representado por expres-
so.
ArcSen(expresso) - Retorna o ngulo (em radianos) cujo seno representado por expresso.
ArcTan(expresso) - Retorna o ngulo (em radianos) cuja tangente representada por expres-
so.
Cos(expresso) - Retorna o cosseno do ngulo (em radianos) representado por expresso.
CoTan(expresso) - Retorna a cotangente do ngulo (em radianos) representado por expresso.
Exp(base, expoente) - Retorna o valor de base elevado a expoente, sendo ambos expresses do
tipo real.
GraupRad(expresso) - Retorna o valor em radianos correspondente ao valor em graus repre-
sentado por expresso.
Int( expresso) - Retorna a parte inteira do valor representado por expresso.
Log( expresso) - Retorna o logaritmo na base 10 do valor representado por expresso.
LogN( expresso) - Retorna o logaritmo neperiano (base e) do valor representado por expres-
so.
Pi - Retorna o valor 3.141592.
Quad( expresso) - Retorna quadrado do valor representado por expresso.
RadpGrau( expresso) - Retorna o valor em graus correspondente ao valor em radianos repre-
sentado por expresso.
RaizQ( expresso) - Retorna a raiz quadrada do valor representado por expresso.
Rand - Retorna um nmero real gerado aleatoriamente, maior ou igual a zero e menor que um.
RandI( limite) - Retorna um nmero inteiro gerado aleatoriamente, maior ou igual a zero e
menor que limite.
Sen( expresso) - Retorna o seno do ngulo (em radianos) representado por expresso.
Tan( expresso) - Retorna a tangente do ngulo (em radianos) representado por expresso.
Os valores que esto entre parnteses, representados pelas palavras como expresso,
base e expoente, so os parmetros, ou como dizem alguns autores, os argumentos que passamos
para a funo para que realize seus clculos e retorne um outro, que usaremos no programa.
Algumas funes, como Pi e Rand, no precisam de parmetros, mas a maioria tem um ou

56
mais. A seguir temos alguns exemplos que ilustram o uso destas funes.

algoritmo Exemplo Funes Pr Definidas


//Funo: Demostrar Funes Pr-Definidas
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
a, b, c: real
inicio
// Seo de Comandos
a <- 2
b <- 9
escreval( a - b )
escreval( abs( a - b ) )
c <- raizq( b )
escreval( A rea do crculo 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

Sada do algoritmo

-7
7
A rea do crculo com raio 3 28.2743338823
Um ngulo de 90 graus tem 1.57079633 radianos
512
1

Funes para manipulao de cadeias de caracteres strings

Asc (s : caracter) : Retorna um inteiro com o cdigo ASCII do primeiro caracter da expresso.
Carac (c : inteiro) : Retorna o caracter cujo cdigo ASCII corresponde expresso.
Caracpnum (c : caracter) : Retorna o inteiro ou real representado pela expresso.
Compr (c : caracter) : Retorna um inteiro contendo o comprimento (quantidade de caracteres)
da expresso.
Copia (c : caracter ; p, n : inteiro) : Retorna um valor do tipo caracter contendo uma cpia
parcial da expresso, a partir do caracter p, contendo n caracteres. Os caracteres so numerados
da esquerda para a direita, comeando de 1.
Maiusc (c : caracter) : Retorna um valor caracter contendo a expresso em maisculas.
Minusc (c : caracter) : Retorna um valor caracter contendo a expresso em minsculas.
Numpcarac (n : inteiro ou real) : Retorna um valor caracter contendo a representao de n
como uma cadeia de caracteres.
Pos (subc, c : caracter) : Retorna um inteiro que indica a posio em que a cadeia subc se
encontra em c, ou zero se subc no estiver contida em c. A seguir temos alguns exemplos que

57
ilustram o uso destas funes.

algoritmo Exemplo 2 Funes Pr Definidas


//Funo: Demostrar Funes Pr-Definidas
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
var
a, b, c: caractere
inicio
// Seo 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

Sada do algoritmo

92
11
62
BRASIL
6
13
66
ABC

7.3 Exemplos de Fixao

Os problemas e suas solues apresentados abaixo, aplicam os conceitos at aqui estu-


dados.

7.3.1 Ordenar dois nmeros determinando o tipo de ordenao

[Medina e Ferting, 2005, 5.5.2.1] Faa um algoritmo que ordene dois valores. A orde-
nao dos nmeros deve estar contida em um subalgoritmo. Um terceiro parmetro determinar
a ordem (crescente ou decrescente) para a ordenao. Suponha que os dois valores a serem or-
denados, passados como parmetros para o subalgoritmo, so sempre diferentes. Alm disso,

58
considere que o subalgoritmo ordena deve retornar Verdadeiro, caso consiga executar a opera-
o, e Falso, caso a opo seja invlida.

Algoritmo: Como na descrio do exerccio diz que deve retornar uma resposta Verda-
deiro ou Falso conclui-se que ser feito o uso de funo. A funo dever ordenar dois valores e
retorn-los na ordem pedida. Como os valores podem ser modificados e tais modificaes preci-
sam ser mantidas, esses parmetros devem ser passados por referncia. J o terceiro parmetro,
identificar o tipo de ordenao, no ser modificado na funo ordenao. Por isso, o parme-
tro deve ser passado por valor. Considere a opo 1 como crescente e a 2 como decrescente.
Pode se observar que independente do tipo de ordenao que for escolhido, o cdigo referente
troca de valores ser igual para os dois, assim um procedimento pode fazer esse trabalho de
troca.

1. Inicializar as variveis v1, v2 do tipo real no programa principal;

2. Definir o procedimento Troca com dois parmetros de passagem por referncia do tipo
real, p1 e p2;

3. Declarar no procedimento Trocar uma varivel 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 funao Ordenar do tipo lgico, com 3 parmetros dois por referncia e um por
valor, valor1, valor2, opcao;

6. Verificar a opo escolhida;

7. Caso seja 1 verificar se o valor1 maior que valor2 e ento 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 opo invlida 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 ordenao tp;

59
12. Verifica se foram ordenados os valores de acordo com o da funo Ordenar e seus seguin-
tes parmetros, v1, v2 e tp;

13. Se for VERDADEIRO imprimir os nmeros ordenados;

14. Caso contrrio, FALSO, apresentar mensagem "Opo Invlida".

Algoritmo em VisuAlg:

algoritmo Ordenar 2 Nmeros


//Funo: Ordenar dois nmeros de acordo com tipo de ordenao
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
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
// Seo de Comandos
escreva ( Entre com dois valores a serem ordenados:
leia (v1, v2)
escreva ( Entre com tipo de ordenao: 1 - Crescente; 2 - Decrescente
leia (tp)
se (Ordenar(v1, v2, tp)) entao
escreva ( Nmeros ordenados: , v1, v2)
senao

60
escreva ( Opo Invlida)
fimse
fimalgoritmo

Sada do algoritmo

5 4 1
Nmeros ordenados 4 5

7.4 Exerccios de Fixao

1. [Manzano, 2003, 13.4] Elaborar um programa que efetue a leitura de um nmero inteiro
e apresente uma mensagem informando se o nmero par ou mpar, utilizando subalgo-
ritmos..

2. [Medina e Ferting, 2005, 5.6] Faa um procedimento que calcule e mostre o n-simo
termo da srie de Fibonacci.

3. [Manzano, 2003, 13.4] Desenvolva um algoritmo que utilize uma funo para calcular
o valor de uma potncia de um nmero qualquer. Ou seja, ao informar para a funo
o nmero e a sua potncia, dever ser retornar o seu resultado. Por exemplo, se for
mencionado no programa principal a funo Potencia(2, 3), dever ser retornar o valor 8.

4. [Medina e Ferting, 2005, 5.6] Faa um algoritmo que calcule a soma dos N primeiros
nmeros primos, sendo N definido pelo usurio no programa principal. O algoritmo
ainda dever ter os subalgoritmos SomaPrimos e Primos, sendo que o primeiro ser
responsvel pela soma dos nmeros que forem primos e o segundo ser responsvel por
verificar se o nmero em questo primo ou no.

5. [Manzano, 2003, 13.4] Um determinado estabelecimento far uma venda com descontos
nos produtos A e B, Se forem comprados apenas os produtos A ou apenas os produtos B,
o desconto ser de 10%. Caso sejam comprados os produtos A e B, o desconto ser de
15%. Custo da unidade de cada produto dado, respectivamente, para os produtos A e B
como sendo de R$10 e R$20. Elaborar um programa que por meio de um subalgoritmo
calcule e apresente o valor da despesa ddo fregus na compra dos produtos. Lembre-se
que o fregus poder levar mais de uma unidade de um determinado produto.

61
6. [Medina e Ferting, 2005, 5.6] Um desafio feito aos enxadristas iniciantes chamado
de "8 Rainhas". Nesse desafio, necessrio posicionar 8 rainhas dentro do tabuleiro, de
forma que nenhuma possa "atacar"a outra. Como uma rainha se move na horizontal, ver-
tical e diagonal, significa que cada nova rainha no pode estar em linha com outra rainha
existente no tabuleiro.

Faa uma funo que receba uma matriz representando um tabuleiro de xadrez e uma
posio (linha, coluna) para a rainha ser colocada. Se a posio for vlida para o desafio
"8 Rainhas", rainha deve ser colocada e retonar VERDADEIRO. Caso contrrio, deve re-
tornar FALSO e no colocar a rainha na posio solicitada. Considere que as outras casa
contm e que as casas onde as rainhas esto posicionadas contm R.

62
Captulo 8

Outros Comandos

O VisuAlg implementa outros comandos com o intuito principal de ajudar o seu uso
como ferramenta de ensino. As descries dos comandos mostradas a seguir foram retiradas do
Apoio Informtica. www.apoioinformatica.inf.br/produtos/visualg

8.1 Comando Aleatorio

Com o uso do comando aleatorio do VisuAlg, sempre que um comando leia for encon-
trado, a digitao de valores numricos e/ou caracteres substituda por uma gerao aleatria.
Este comando tem as seguintes sintaxes:

aleatorio on
A palavra-chave on opcional. O intervalo de valores gerados de 0 a 100 inclusive. Para a
gerao de dados do tipo caractere, no h uma faixa pr-estabelecida: os dados gerados sero
sempre strings de 5 letras maisculas.

aleatorio < valor 1 > [, <valor 2>]


Ativa a gerao de dados numricos aleatrios estabelecendo uma faixa de valores mnimos e
mximos. Se apenas < valor 1 > for fornecido, a faixa ser de 0 a <valor1> inclusive; caso
contrrio, a faixa ser de <valor 1> a <valor 2> inclusive. Se <valor 2> for menor que <valor
1>, o VisuAlg os trocar para que a faixa fique correta. Importante: <valor 1> e <valor 2>
devem ser constantes numricas, e no expresses.

aleatorio off

Desativa a gerao de valores aleatrios. A palavra-chave off obrigatria.

63
8.2 Comando Arquivo

Muitas vezes necessrio repetir os testes de um programa com uma srie igual de
dados. Para casos como este, o VisuAlg permite o armazenamento de dados em um arquivo
texto, obtendo deles os dados ao executar os comandos leia. Esta caracterstica funciona da
seguinte maneira:

Somente um comando arquivo pode ser empregado em cada programa, e ele dever estar
na seo de declaraes

Se no existir o arquivo com nome especificado, o VisuAlg far uma leitura de dados
atravs da digitao, armazenando os dados lidos neste arquivo, na ordem em que forem
fornecidos.

Se o arquivo existir, o VisuAlg obter os dados deste arquivo at chegar ao seu fim. Da
em diante, far as leituras de dados atravs da digitao.

Caso no seja fornecido um caminho, o VisuAlg ir procurar este arquivo na pasta de


trabalho corrente (geralmente, a pasta onde o programa VISUALG.EXE est). Este
comando no prev uma extenso padro; portanto, a especificao do nome do arquivo
deve ser completa, inclusive com sua extenso (por exemplo, .txt, .dat, etc.).

sintaxe do comando :

arquivo <nome do arquivo>


<nome do arquivo> uma constante caractere (entre aspas duplas) com o nome do
arquivo e sua extenso. Veja o exemplo a seguir:

algoritmo Exemplo lendo do Arquivo


//Funo: Demostrar uso de arquivo
// Autor: Autores da Apostila
// Data: 2015
//Seo de Declaraes
arquivo teste.txt
var
i, x: real
inicio
// Seo de Comandos
para x de 1 ate 5 passo -1 faca
leia ( x )
fimpara
fimalgoritmo

64
8.3 Comando Timer

O comando timer insere um atraso (que pode ser especificado) antes da execuo de
cada linha. Alm disso, reala em fundo azul o comando que est sendo executado, da mesma
forma que na execuo passo a passo. Sua sintaxe a seguinte:

timer on - ativa o timer. O valor de atraso padro inserido 500, que equivale a meio
segundo.

timer <tempo-de-atraso> - ativa o timer estabelecendo seu tempo de atraso em milis-


segundos. O argumento <tempo-de-atraso> deve ser uma constante inteira com valor entre 0 e
10000.

timer off - desativa o timer.

Ao longo do algoritmo, pode haver vrios comandos timer. Todos eles devem estar na
seo de comandos. Uma vez ativado, o atraso na execuo dos comandos ser mantido at se
chegar ao final do pseudocdigo ou at ser encontrado um comando timer off.

8.4 Comando Pausa

Sua sintaxe simplesmente:

pausa

Este comando insere uma interrupo (breakpoints) incondicional. Quando ele en-
contrado, o VisuAlg para a execuo e espera alguma ao do programador. Neste momento,
possvel:

analisar os valores das variveis ou das sadas produzidas at o momento;

executar o algoritmo passo a passo (com F8);

termin-lo (com Ctrl-F2).

65
8.5 Comando Debug

A sua sintaxe :

debug <expresso lgica>

Se a avaliao de <expresso-lgica> resultar em valor VERDADEIRO, a execuo ser


interrompida como no comando pausa. Dessa forma, possvel a insero de um breakpoint
condicional no pseudocdigo.

8.6 Comando Cronmetro

O Comando cronometro on ativa e cronometro off desativa o cronmetro interno do


VisuAlg. Quando o comando cronometro on encontrado, o VisuAlg imprime na sada-padro
a informao "Cronmetro iniciado.", e comea a contar o tempo em milissegundos. Quando
o comando cronometro off encontrado, o VisuAlg imprime na sada-padro a informao
"Cronmetro terminado. Tempo decorrido: xx segundo(s) e xx ms". Este comando til na
anlise de desempenho de algoritmos (ordenao, busca, etc.). Sua sintaxe :

cronometro on

cronometro off

8.7 Comando Limpatela

Este comando simplesmente limpa a tela DOS do Visualg (a simulao da tela do com-
putador). Ele no afeta a "tela"que existe na parte inferior direita da janela principal do Visualg.
Sua sintaxe :

limpatela

66
Referncias Bibliogrficas

[1] Jos Augusto N. G. Manzano and Jayr F. Oliveira. Livros Algoritmos e Programao:
Teoria e Prtica. rica, 21. ed. edition, 2002.

[2] M. Medina and C. Ferting. Livros Algoritmos e Programao: Teoria e Prtica. Novatec,
2. ed. edition, 2006.

[3] Cludio M. Souza. VisuAlg, 2016. Available online at http://www.


apoioinformatica.inf.br/produtos/visualg.

67

Você também pode gostar