Anda di halaman 1dari 82

Sumrio

Aula 1 Lgica Bsica......................................................................................................................... 5


Lgica:......................................................................................................................................... 5
Algoritmos: ................................................................................................................................. 6
Portugus Estruturado: .............................................................................................................. 6
Lgica booleana:......................................................................................................................... 6
Tabela Verdade: ......................................................................................................................... 7
Exerccios: ................................................................................................................................... 9
Aula 2 Variveis e Constantes ....................................................................................................... 12
Armazenamento de dados na memria: ................................................................................. 12
Definio e utilizao de variveis: .......................................................................................... 12
Constantes:............................................................................................................................... 15
Exerccios: ................................................................................................................................. 17
Aula 3 Tipos de Dados ................................................................................................................... 20
Dados Numricos: .................................................................................................................... 20
Nmeros inteiros:..................................................................................................................... 20
LEIA (ano) ................................................................................................................................. 21
ESCREVA (idade_hoje) .............................................................................................................. 22
Nmeros reais: ......................................................................................................................... 22
Dados Literais: .......................................................................................................................... 22
Dados lgicos:........................................................................................................................... 24
Exerccios: ................................................................................................................................. 25
Aula 4 Tipos de Operadores .......................................................................................................... 28
Operadores:.............................................................................................................................. 28
Operadores aritmticos: .......................................................................................................... 28
Operadores relacionais: ........................................................................................................... 28
Operadores lgicos: ................................................................................................................. 28
Prioridades de Operadores: ..................................................................................................... 28
Lista de Prioridades: ................................................................................................................. 29
Exemplos: ................................................................................................................................. 29
Exerccios: ................................................................................................................................. 30
Aula 5 Estruturas de Controle ....................................................................................................... 33
Estruturas de deciso simples: ................................................................................................. 33
Estruturas de deciso simples encadeada: .............................................................................. 34
Exerccios: ................................................................................................................................. 39
Aula 6 Estruturas de Deciso Composta e Mltipla Escolha ......................................................... 42
Deciso Composta: ................................................................................................................... 42
Pseudocdigo: .......................................................................................................................... 42
Estrutura de deciso composta encadeada: ............................................................................ 43
Exerccios: ................................................................................................................................. 46
Aula 7 Estruturas de Deciso de Mltipla Escolha ........................................................................ 49
Exemplo: ................................................................................................................................... 49
Pseudocdigo ........................................................................................................................... 49
Deciso de mltipla escolha ou deciso encadeada? .............................................................. 50
Deciso encadeada:.................................................................................................................. 52
Mltipla escolha: ...................................................................................................................... 52
Exerccios: ................................................................................................................................. 53
Aula 8 Estruturas de Repetio ..................................................................................................... 55
Estrutura Bsica........................................................................................................................ 56
Tipos de Estruturas de Repetio:............................................................................................ 57
Estrutura de Repetio com Varivel de Controle: .................................................................. 57
Pseudocdigo: .......................................................................................................................... 57
Exemplo: ................................................................................................................................... 59
Repita...at Teste condicional no final: ................................................................................. 62
Exerccios: ................................................................................................................................. 63
Aula 9 Vetores ............................................................................................................................... 66
Estruturas de dados homogneas:........................................................................................... 66
Exemplo: ................................................................................................................................... 66
Vetores: .................................................................................................................................... 67
Declarao de um vetor: .......................................................................................................... 68
Atribuio em Vetores: ............................................................................................................ 68
Ordenao de um vetor: .......................................................................................................... 69
Exemplo: ................................................................................................................................... 73
Exerccios: ................................................................................................................................. 74
Aula 10 Matrizes............................................................................................................................ 77
Como funciona: ........................................................................................................................ 77
Atribuio em matrizes: ........................................................................................................... 79
Soluo: .................................................................................................................................... 79
Exerccios: ................................................................................................................................. 81
Aula 1 Lgica Bsica
Lgica:
Nessa apostila, iremos abordar a lgica de programao. Mas o que exatamente lgica?

Lgica qualquer tipo de pensamento que leva a algum objetivo e, com a lgica da
programao no diferente. Basicamente, a lgica de programao a maneira com que
programamos, ou seja, a maneira como utilizamos sequncias de algoritmos para atingir
determinado resultados.

Para entendermos melhor o que foi dito acima, vamos observar um exemplo de
portugus estruturado, que nada mais que uma descrio em etapas de determinada ao.
Como exemplo, vamos pegar uma ao que realizamos no nosso cotidiano, como tomar um copo
de gua.

Para entendermos o princpio da lgica de programao, precisamos dividir por etapas as


nossas aes e descrev-las:

1. Pegar um copo;
2. Lev-lo a uma torneira;
3. Posicionar o copo na sada de gua;
4. Abrir a torneira;
5. Quando o copo estiver quase cheio, desligar a torneira;
6. Levar o copo at a boca;
7. Beber;
8. Largar o copo na pia;

Como voc pode observar, em todas as nossas aes temos que sequenciar nossos
pensamentos com o intuito de atingir nosso objetivo. O ato de sequenciar nossas aes para
atingir determinado objetivo na computao denominado algoritmo. A lgica de programao
nos permite sequenciar nossos pensamentos de forma a criar algoritmos que sejam prticos e
eficientes.

Porm, precisamos frisar que a lgica de programao no uma coisa simples e que se
aprende de uma hora para outra, mas uma vez que voc adquira a mesma, ela ficar para sempre
com voc. Ento, para aprendermos a programar temos de ler, estudar e principalmente praticar
muito.

Os algoritmos que aprenderemos nesta disciplina so uma forma primitiva de


programao e este conhecimento nos ser muito til quando formos programar em qualquer
linguagem de programao, pois a lgica de criao de algoritmos e de qualquer linguagem de
programao igual.

Os passos que utilizamos nos algoritmos e na programao tm uma srie de instrues


que devem ser seguidas para termos um cdigo correto. Estas instrues so muito mais rgidas
nas linguagens de programao que nos algoritmos, pois necessrio que o computador
compreenda os passos deste cdigo e, para isso, precisamos ter regras mais rgidas. (No
decorrer da apostila abordaremos essas instrues).

Algoritmos:
Como dito anteriormente, os algoritmos so formas de sequenciar nossos pensamentos
com o objetivo de atingir determinado resultado. Esses algoritmos podem ser feitos de vrias
maneiras, uma delas, e a mais fcil para quem est comeando criar algoritmos em linguagem
literal, ou seja, como descrevemos a ao de tomar gua anteriormente.

Portugus Estruturado:
Escrever algoritmos em linguagem literal muito simples, apenas devemos dizer os
passos que temos que realizar para atingir o objetivo, sem qualquer preocupao com a sintaxe
utilizada. Outro exemplo de algoritmo literal o algoritmo para fritar um ovo, onde:

1. Pegar a panela;
2. Colocar leo na panela;
3. Acender o fogo;
4. Quebrar o ovo;
5. Colocar a gema e a clara na panela;
6. Esperar ficar pronto;
7. Retirar o ovo;
8. Apagar o fogo;

No exemplo anterior temos todos os princpios bsicos para um algoritmo, ou seja, o


objetivo, que ter um ovo frito e os passos para atingir esse objetivo. Observe que apenas uma
instruo deste algoritmo no nos leva ao objetivo final e estas instrues devem ser realizadas
seguindo uma sequncia lgica. Por exemplo, no podemos colocar a gema e a clara na panela
antes de quebrar o ovo.

Podemos ainda ter um algoritmo mais detalhado, observe:

1. Pegar a panela da mesa;


2. Colocar a panela em cima da primeira boca do fogo;
3. Pegar o leo no balco;
4. Colocar o leo na panela;
5. Acender a primeira boca do fogo;
6. Quebrar o ovo;
7. Colocar a clara e a gema na panela;
8. Colocar a casca do ovo no lixo;
9. Esperar o ovo ficar frito;
10. Retirar o ovo frito da panela;
11. Colocar o ovo frito no prato;
12. Apagar o fogo;
13. Retirar o leo da panela;
14. Colocar a panela na pia;

Lgica booleana:
A lgica booleana foi criada por George Boole no sculo XIX. Por iniciativa prpria, ele
passou a estudar as operaes matemticas de forma diferente, separando todos os smbolos das
coisas sobre as quais eles operavam, com o intuito de criar um sistema simples e totalmente
simblico. Surge assim a lgica matemtica. A lgica booleana baseada apenas em dois valores,
0 e 1 ou Falso e Verdadeiro, respectivamente. Mas pode ser representada tambm por quaisquer
outros valores desde que eles possuam a mesma relao que Falso e Verdadeiro, sendo um o
oposto do outro.

A lgica booleana possui 3 operadores bsicos, que so:

NOT;
AND;
OR;

NOT: A porta lgica NOT tambm conhecida como inversor por, literalmente, inverter o
nmero de entrada. Se o nmero for um, por exemplo, o valor na sada ser zero, e vice-versa.
Esta operao pode ser vista tambm como inverso ou negao, e seu smbolo indicado por
uma apstrofe aps do valor (X) ou ~ antes do valor.

AND: As operaes realizadas com o operador AND resultam em um valor verdadeiro


apenas quando todos os valores desta operao forem verdadeiros, ou seja, 1. Caso tivermos um
valor falso, o resultado ser falso. O smbolo para o operador AND um asterisco (*).

OR: Com este operador, apenas teremos um retorno falso quando todas as condies
forem falsas. A simbologia para este operador um smbolo de mais (+).

Estes operadores s podem realizar operaes com nmeros binrios e, tanto o operador
AND quanto o operador OR precisam de, no mnimo, dois nmeros binrios para realizar as
operaes. No caso do operador NOT, as operaes podem ser realizadas com apenas um
nmero.

Existem ainda outros operadores padres e, seus comportamentos podem ser observados
nas tabelas abaixo, chamas de tabelas-verdade:

Tabela Verdade:
Veja abaixo um exemplo de tabela da verdade com o operador NOT.
Estas so as tabelas da verdade para os operadores lgicos bsicos, agora veremos os
operadores lgicos que derivados.

Os 3 operadores lgicos bsicos derivam mais 4 operadores lgicos, que so:

NOR
NAND
XOR
XNOR

Vejamos quais so as operaes realizadas por estes operadores.

NOR: Este operador apenas a negao do operador OR, ou seja, quando tivermos todos
os valores verdadeiros na tabela OR, teremos um resultado falso com esse operador, visto que o
NOT inverte o valor do mesmo.

NAND: Este operador apenas a negao do operador AND, ou seja, uma juno do AND
seguido do NOT. Basta inverter os valores obtidos na tabela verdade do operador AND, visto que
o NOT apenas inverte o valor do mesmo.

XOR: Este operador considerado como OR exclusivo, ou seja, se todos os valores de


entrada forem iguais (1,1 ou 0,0), o valor de sada ser 0, mas se os valores forem diferentes (1,0
ou 0,1), o valor de sada ser 1.

XNOR: Este operador a negao do operador XOR, ou seja, se os valores de sada forem
iguais o valor de sada ser 1, j se os valores de entrada forem diferentes o valor de sada ser 0.

Observe a seguir as tabelas verdade dos operadores acima:

Note que todas as tabelas so muito simples, basta seguir as regras dos operadores vistos
anteriormente. Nas tabelas que vimos at agora utilizamos apenas dois valores e apenas uma
operao. Porm, no precisamos nos limitar isso, e podemos criar tabelas da verdade mais
complexas, com mais operaes e com mais valores.
Exerccios:

1. Cite os operadores bsicos da linguagem booleana:


_________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________

2. Cite o que os nmeros binrios podem representar:


_________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________

3. O que um algoritmo?
_________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________

4. Quais so os 4 operadores lgicos derivados dos operadores bsicos?


_________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________
Aula 2 Variveis e Constantes
Armazenamento de dados na memria:
Na execuo de um algoritmo ou de um programa, para receber dados de entrada,
processar as instrues e fornecer os dados de sada, necessrio que o computador armazene
esses dados e instrues em sua memria, a fim de poder acess-los posteriormente.

Por exemplo, imagine que voc e um amigo desejam calcular o algoritmo da mdia, de
cabea, sem fazer anotaes. Veja os passos descritos a seguir.

1. Voc diz a primeira nota.


2. Seu amigo, ento, guarda esse valor na sua memria humana, enquanto aguarda
a segunda nota.
3. Voc diz a segunda nota.
4. Seu amigo guarda o valor da segunda nota em outro local da memria diferente
do anterior, para no sobrescrever (e acabar esquecendo) a primeira nota.
5. O seu amigo recupera os valores das notas em sua memria, faz o clculo da
mdia e coloca o valor encontrado em um terceiro local de sua memria.
6. Voc pergunta: Qual o valor da mdia?
7. O seu amigo informa o resultado obtido.

De forma similar, o computador precisa guardar os dados e instrues em endereos


especficos de sua memria, durante a execuo de um algoritmo, a fim de no esquecer as
informaes, podendo, assim, process-las eficazmente.

Definio e utilizao de variveis:


Agora voc j sabe que os dados utilizados nos algoritmos so armazenados na memria
do computador para serem posteriormente acessados.
Mas, de que forma conseguimos acessar esses dados? Para acessar os dados, precisamos
descobrir em que posio na memria do computador eles esto armazenados. O conceito de
varivel foi criado para facilitar essa busca.
Vamos compreender de que forma isso funciona?!
Imagine um grande arquivo com vrias gavetas. Para conseguirmos acessar o contedo
dessas gavetas, importante que o armazenamento seja feito de maneira organizada, de forma
que possamos encontrar facilmente o que procuramos. Para isso, seria interessante identificar as
gavetas com nomes e/ou nmeros. Cada gaveta identificada representa, dessa forma, o endereo
do contedo que ela armazena.

Arquivo de gavetas
representando espaos reservados na
memria de um computador.

A figura est representando um


arquivo com 15 gavetas que podem
armazenar os documentos de
diferentes pessoas. Veja que as gavetas
esto numeradas e cada gaveta s
armazena um documento por vez. Cada
nmero corresponde ao endereo da
gaveta. Algumas delas esto, tambm,
marcadas com nomes de pessoas. Essas so as que esto reservadas.

Por exemplo, a gaveta de nmero 01 est reservada para armazenar um documento de


Maria. Ningum alm de Maria poder colocar seus documentos na gaveta 01. Veja que tem
gavetas reservadas tambm para Joo, Slvia, Francisco e Jos. E h gavetas que no foram
reservadas, ou seja, esto livres para serem reservadas quando necessrio (essas gavetas, porm,
s podem ser utilizadas se forem previamente reservadas). Dessa forma, se perguntarmos a Maria
onde ela guarda os seus documentos, ela responder: na gaveta 01 do arquivo. o endereo
dos documentos dela.

O endereo ao qual nos referimos, em algoritmos, corresponde a uma posio na


memria do computador. A essa posio na memria do computador, damos o nome de varivel.

Uma varivel uma posio na memria do computador, que reservada para armazenar
os dados que o algoritmo vai manipular.

Uma varivel precisa ter um nome (ou identificador), um tipo de dado associado a ela
(tipo da varivel) e a informao que ela armazena. O identificador serve para diferenciar a
varivel das demais, por isso deve ser nico para cada varivel.

O processo de criao de uma varivel chamado de declarao da varivel. As variveis


devem ser declaradas no algoritmo antes de serem utilizadas, pois a declarao das variveis
permite que seja reservado um espao na memria para o dado que vai ser armazenado e
utilizado.

Para declarar uma varivel, devemos proceder da seguinte forma:

<nome_da_varivel> : <tipo_da_varivel>

ou:

<lista_de_variveis> : <tipo_da_varivel>

I nota : real

nome da varivel : tipo da varivel

II idade : inteiro

nome da varivel : tipo da varivel

III sexo : caracter

nome da varivel : tipo da varivel


IV frase : literal

nome da varivel : tipo da varivel

V nota1, nota2 : real

lista de variveis : tipo da varivel


Veja, nos exemplos, que declaramos as variveis vazias, isto , sem informaes
associadas a elas (e, ento, fornecemos essas informaes posteriormente, no corpo do
algoritmo). Lembre-se do exemplo das gavetas. Para reservar uma gaveta para uma pessoa, no
era necessrio armazenar o contedo, de imediato, na gaveta. Igualmente, s possvel
armazenar contedo em uma gaveta que j foi previamente reservada. Ou seja, primeiro deve-se
reservar uma gaveta e depois armazenar seu contedo.

Veja, tambm, no exemplo V, que duas ou mais variveis de um mesmo tipo podem ser
declaradas juntas, na mesma linha, separadas por vrgula (lista de variveis).

Uma varivel pode assumir diferentes valores, mas s pode armazenar um valor a cada
instante. Alm disso, o seu contedo pode mudar ao longo na execuo do algoritmo.

Existem algumas regras bsicas para a definio dos nomes (identificadores) das variveis.
Vamos conhec-las.

1. Podem-se utilizar nmeros e letras maisculas ou minsculas.


2. No se devem utilizar caracteres especiais, exceo do caractere sublinhado,
ou underline (_ ).
3. O primeiro caractere deve ser sempre letra ou sublinhado, mas nunca um
nmero.
4. No deve utilizar acentos grficos, til ou cedilha.
5. Alm dos smbolos, no permitido espao em branco.
6. No se devem utilizar as palavras reservadas da linguagem

Comportamento do
VisuAlg durante a tentativa
de nomear uma varivel
com uma palavra reservada.
O termo inicio, no
VisuAlg, utilizado para
comear o algoritmo. Ao
tentar identificar uma
varivel com o nome inicio,
a resposta do programa o
encerramento da execuo
e a linha em que est o erro
realada em vermelho.
Vejamos alguns exemplos de
acertos e erros na
identificao de variveis:
Identificadores vlidos:

a. nome1
b. ano_de_nascimento
c. salario
d. nota_aluno
e. qtd_dias

Identificadores invlidos:

a. 1nome no deve comear por nmero


b. Ano de nascimento no deve ter espao em branco
c. @salrio$ no deve conter caracteres especiais (contm @ e $)
d. Nota*aluno/01 no deve conter caracteres especiais (contm * e /)
e. Fim no devemos utilizar palavras reservadas
f. Remdio no deve utilizar acentos grficos

Constantes:
Alm das variveis, em algoritmos, tambm lidamos com constantes. Trata-se de valores
fixos ou estveis, que so escritos no programa de forma literal.

No VisuAlg, temos constantes numricos, caracteres e lgicos.

So exemplos de constantes numricos:

a. 15
b. 250
c. 38.5

Exemplos de constantes caracteres ou literais:

a. F
b. Maria
c. Avenida So Jos

Exemplos de constantes lgicos:

a. Verdadeiro
b. Falso

Ao atribuir valores s variveis, podemos utilizar outras variveis, expresses ou


constantes. Veja:

var
a : inteiro

b : inteiro
c : inteiro

d : lgico

f : literal

inicio
a <- 2 //atribuio de constante

b <- a + 1 //atribuio de expresso

c <- b //atribuio de varivel

d <- falso //atribuio de constante

f <- Teste //atribuio de constante

fimalgoritmo

Para resolver os exerccios seguir, pea ao seu professor que lhe mostre o aplicativo
VisuAlg (arquivo auxiliar).
Exerccios:

1. Porque importante declarar uma varivel antes de utiliz-la?

_________________________________________________________________________
________________________________________________________________________________
___________________________

2. Porque o identificador de uma varivel deve ser nico?

_________________________________________________________________________
________________________________________________________________________________
___________________________

3. Digite que tipo de varivel cada exemplo:


a. 1997
b. Eduardo
c. 5,187
d. -15

_________________________________________________________________________
________________________________________________________________________________
____________

4. Explique com suas palavras, o que uma constante.


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___
Aula 3 Tipos de Dados

Vamos relembrar o exemplo do arquivo. Vimos que cada gaveta tem um determinado
contedo. Para que possamos acessar esse contedo, a gaveta precisa estar identificada com um
endereo representado por um nome e/ou nmero de identificao.

Imagine agora que, no momento da identificao, seja associado gaveta um


determinado tipo de contedo. A partir desse momento, criada uma regra: essa gaveta s pode
armazenar o tipo de contedo ao qual ela foi associada. Voc viu que, no momento da criao de
uma varivel, associado a ela um tipo de dado. A partir desse momento (de forma similar ao que
ocorre com a gaveta do nosso exemplo), a varivel s pode armazenar o tipo de dado ao qual foi
associada.

Os algoritmos lidam com o conceito de tipos de dados para diferenciar dados de


naturezas distintas e, assim, saber que operaes podem ser realizadas com eles.

Por exemplo, no faria sentido uma operao de soma entre os dados ana e 5. Assim,
dependendo da natureza dos dados utilizados, algumas operaes podem ou no fazer sentido.
Os tipos de dados que um algoritmo pode manipular so: dados numricos, dados literais e dados
lgicos. Vamos conhecer cada tipo e compreender de que forma cada um deles pode ser
utilizado.

Dados Numricos:
No estudo da matemtica, voc aprendeu que existem diversos conjuntos numricos
(conjunto dos nmeros naturais, inteiros, racionais, irracionais e reais). No estudo dos algoritmos,
lidaremos apenas com os nmeros inteiros e os nmeros reais.

Nmeros inteiros:

Os nmeros inteiros so os nmeros positivos ou negativos que no possuem parte


decimal ou fracionria. Ex.: 15, -487, 0, 27835, -14937, 100. Em algoritmos, os nmeros inteiros
so utilizados geralmente para expressar valores, como quantidades ou idade.

Observe o exemplo abaixo:

Algoritmo que calcula a idade de uma pessoa, dados o ano atual e o ano em que ela
nasceu.

algoritmo "calcula idade"


var
ano_atual : inteiro
ano : inteiro
idade_hoje : inteiro
inicio
ano_atual <- 2013
leia (ano)
idade_hoje <- ano_atual - ano
escreva (idade_hoje)
fimalgoritmo
Os dados de entrada nesse algoritmo so o ano atual e o ano de nascimento digitado pelo
usurio (ano). O dado de sada a idade atual do usurio (idade_hoje). Todos os dados nesse
algoritmo so numricos inteiros. Vamos analisar o cdigo em detalhes.

Na primeira linha do algoritmo, temos:

algoritmo "calcula idade"

Nesta primeira linha, estamos nomeando o algoritmo. Veja que o nome do algoritmo est
entres aspas duplas. Na segunda linha do algoritmo, o termo var indica o campo onde ficaro as
declaraes das variveis. Nas linhas 3, 4 e 5, as variveis so declaradas.

Veja:
Linha 2 - var
Linha 3 - ano_atual: inteiro
Linha 4 - ano: inteiro
Linha 5 - idade_hoje: inteiro

No VisuAlg, a declarao das variveis feita fora do bloco de execuo dos algoritmos. O
bloco de execuo tem seu incio em seguida, na linha 6, indicado pela palavra reservada inicio, e
finalizado com a palavra reservada fimalgoritmo.

Na primeira linha do bloco de execuo, temos a seguinte instruo:

ano_atual <- 2013

O termo ano_atual o nome que foi dado varivel. O smbolo <- (seta para a
esquerda) um smbolo que indica atribuio. Estamos dizendo, portanto, nessa linha de cdigo,
que est sendo atribudo o valor 2013 varivel do tipo inteiro, que foi nomeada ano_atual.

Na linha seguinte do cdigo, temos:

LEIA (ano)

A instruo leia uma solicitao ao usurio para que insira, no programa, alguma
informao. No momento da execuo dessa linha de cdigo, no VisuAlg, uma caixa de dilogo
aparece na tela, com um campo onde o usurio digita a informao pedida (caso
o software esteja configurado para executar em modo DOS, aparecer uma tela escura
semelhante ao DOS e voc digitar a informao nesta tela).

Quando o usurio insere a informao, o programa a recebe e guarda na varivel que foi
previamente reservada (ano). Essa varivel foi criada para armazenar o dado inserido pelo usurio
(o seu ano de nascimento).

Na linha seguinte, temos outra atribuio:

idade_hoje <- ano_atual ano

Este comando indica que estamos armazenando o valor encontrado na operao


ano_atual ano (operao de subtrao) no espao da memria representado pela
varivel idade_hoje.
Nesse momento, o objetivo do algoritmo foi atingido. A ltima instruo exibe na tela o resultado
encontrado:

ESCREVA (idade_hoje)

O comando escreva utilizado para exibir, na tela, alguma informao. atravs dele que
o computador comunica-se com voc, informando o resultado encontrado no algoritmo.

Nmeros reais:
Os nmeros reais so os nmeros positivos ou negativos que englobam nmeros decimais
ou fracionrios. Ex.: 15, -487, 1.78, 0.254, 27835, 100, 8.50. So tambm chamados de pontos
flutuantes, nas linguagens de programao. Valores reais so aplicveis em algoritmos que
manipulam dados que expressam valores fracionrios, como salrio, mdia, preo, porcentagem,
entre outros.

O algoritmo da mdia, que vimos nas duas primeiras aulas, utiliza dados numricos reais.

Observe:

Algoritmo que calcula a mdia do aluno:

algoritmo "calcula mdia"


var
nota1 : real
nota2 : real
media : real
inicio
leia (nota1)
leia (nota2)
media <- (nota1 + nota2)/2
escreva (media)
fimalgoritmo

Note que os dados de entrada (as notas do aluno) e o dado de sada (a mdia) so do tipo
real, pois a nota de um aluno pode assumir valores fracionrios, como 8.5 ou 5.2, por exemplo.

Obs.: as casas decimais, nos nmeros reais, devem ser separadas por ponto (.) e no por
vrgula (,). Por exemplo: use 8.5 e no 8,5.

Dados Literais:
Os dados literais so formados por um nico caractere ou uma sequncia de caracteres,
que podem ser letras (maisculas ou minsculas), nmeros ou smbolos especiais (como #, $, @,
?, &, entre outros). Os nmeros, quando representados como caracteres, no podem ser
utilizados para clculos.

Uma sequncia de caracteres pode ser chamada tambm de cadeia de caracteres


ou string.
Exemplos de dados literais: Fone: 3222-2222, Av. Senador Salgado Filho, N 1550, Joo
Silveira, M, 152, CEP: 59052-250, F.

Nos nossos algoritmos, representaremos todos os dados literais sempre entre aspas
duplas, sejam eles caracteres isolados ou strings, pois essa a conveno utilizada no VisuAlg.

Observe o exemplo abaixo, utilizando uma string (cadeia de caracteres).

algoritmo "literais"
var
nome: literal
sobrenome: literal
inicio

nome<-"Maria"
escreva ("Digite o sobrenome:")

leia (sobrenome)
escreva (nome,"",sobrenome)
fimalgoritmo

Note que utilizaremos a notao literal quando nos referirmos a strings.

Veja outro exemplo, com um caractere isolado:

algoritmo "caractere"
var

sexo: caractere

inicio

sexo<-"F"
escreva (sexo)
fimalgoritmo

Para um caractere isolado, utilizaremos a notao caracter ou caractere e no literal,


como no exemplo anterior.

Execute, tambm, esses dois cdigos no VisuAlg (salve em arquivos separados).


Dados lgicos:
Os dados lgicos so tambm chamados de booleanos, por ter sua origem na
lgebra booleana. Os valores que esses tipos de dados podem assumir so Verdadeiro ou Falso,
podendo apenas representar um desses dois valores.

Um exemplo simples:

algoritmo "logicos"
var
igualdade: logico
inicio
igualdade<-12=10
escreva (igualdade)
fim algoritmo

Veja que utilizamos a notao logico para representar o dado lgico. Sabemos que 12 no
igual a 10. Logo, a sada para esse algoritmo ser FALSO.

Cole o cdigo no editor de textos do VisuAlg e execute. Veja a sada, no simulador de


sada. Agora, no lugar do nmero 12, coloque o nmero 10 (de forma que fique 10=10) e
execute novamente. Observe a nova sada no simulador de sada.
Exerccios:

1. Explique, com suas palavras, o processo de armazenamento de dados na memria


de um computador.
_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________________

2. Cite trs exemplos que demonstrem o processo de declarao de uma varivel:


_________________________________________________________________________
________________________________________________________________________________
______________________________________________________________________________

3. Defina o conceito de constante e cite exemplos de atribuio de valores


constantes s variveis.
_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________
Aula 4 Tipos de Operadores
Operadores:
Estes operadores so empregados com muita frequncia em programao. com o seu
uso (muitas vezes da combinao de vrios deles) que so feitas as tarefas mais comuns de
processamento de dados.

Operadores aritmticos:

Operadores relacionais:

Operadores lgicos:

Prioridades de Operadores:
Prioridade mais alta: * / div mod

Prioridade mais baixa: + -

Obs: Parnteses ganham prioridade.


Ex: Para a expresso 2*(4+2) o resultado ser 12 e no 10, que resultaria de:

2*4+2.
Se houver uma sequncia de operadores de igual prioridade, a execuo ser na ordem
em que aparecerem as operaes.

Ateno: o resultado da expresso 8/ (4*2) ser diferente de 8/4*2. J no caso


de 3*4/2 e 3*(4/2), o resultado ser exatamente o mesmo. Na dvida, recomenda-se empregar
parnteses para forar a ordem de execuo desejada.

Lista de Prioridades:

Prioridade mais alta: NOT

Prioridade mdia: AND

Prioridade mais baixa: OR XOR

Exemplos:
A expresso: (A>2) AND NOT (A>20) equivale a (A>2) AND (NOT (A>20)).

Na expresso (X=0) OR (X>=2) AND (X<=5), ser resolvido primeiro o AND. Assim, a
expresso equivale a (X=0) OR ((X>=2) AND (X<=5)).

OBS: Operaes com precedncia igual normalmente so executadas da esquerda para a


direita, embora o compilador possa, s vezes, rearranjar os operadores para otimizao de
cdigo.

Na dvida, aconselhvel usar parnteses para garantir a prioridade desejada.


Exerccios:

1. Adio e multiplicao so dois tipos de operadores:


___________________________________________________________________
_________________________________________________________________________
_________________________________________________________________________
_________________________________________________________________________
_________________________________________________________________________
__________________________

2. Cite 5 exemplos de operadores lgicos e descreva as suas respectivas funes:


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________

3. Cite 3 exemplos de operadores lgicos e quais as suas funes:


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________________

4. Qual o resultado da seguinte expresso:


4 + ((10x6) - 8 * 4) / 2?
Mostre o desenvolvimento do exerccio.
_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
__________________________________________
Aula 5 Estruturas de Controle
Estruturas de deciso simples:
Nesta aula, voc ver que, muitas vezes, existir a necessidade de estabelecer desvios na
execuo dos comandos. Esses desvios devem ocorrer quando houver uma deciso a ser tomada.
Ou seja, quando houver dois caminhos possveis, o algoritmo ter que decidir qual dos dois
caminhos ir seguir para atingir a soluo do problema. dessa forma que introduzimos as
estruturas de deciso. A estrutura de deciso pode ser simples, encadeada ou composta. Nesta
aula, voc conhecer as estruturas de deciso simples e construir algoritmos utilizando-as.

As estruturas de deciso so tambm denominadas estruturas de seleo ou condicionais.


Nesse tipo de estrutura de controle, h uma deciso a ser tomada, sempre com base em uma
condio especfica, pr-estabelecida. Ou seja, de acordo com uma determinada condio, o
algoritmo decide, entre dois caminhos possveis, qual ele ir executar.
Como j dissemos na apresentao, a estrutura de deciso pode ser simples, encadeada
ou composta. Vamos conhecer cada um desses tipos.

A estrutura de deciso simples executa um comando ou bloco de comandos se a condio


for verdadeira. Se a condio for falsa, a estrutura finalizada sem executar comandos. O
comando bsico que define a estrutura de deciso representado pela palavra reservada SE.

Veja o algoritmo abaixo (em portugus estruturado), sobre o que fazer no sbado pela
manh:

INICIO
acordar

SE fizer sol ENTO

Ir praia

FIM SE

FIM

Veja que, no exemplo, tratamos de uma estrutura simples. Se a condio (fazer sol)
satisfeita, eu vou praia. Caso contrrio, no fao nada (nenhum comando executado, caso a
condio no seja atendida).

A estrutura de deciso obedece seguinte sintaxe:


O termo condio, nessa estrutura, representa uma expresso lgica.

Voc deve recordar que uma expresso lgica s pode assumir dois possveis resultados:
verdadeiro ou falso. Esse resultado, na estrutura de deciso, determina qual caminho o algoritmo
vai escolher. Ou seja, dependendo do resultado da expresso lgica, o algoritmo segue para esse
ou aquele caminho.
Vamos analisar o algoritmo da mdia mais uma vez. S que, dessa vez, com comandos de
desvios.

algoritmo calcula mdia com desvio

var
nota1, nota2 : real
media: real
inicio
escreva (Digite o valor da primeira nota: )
leia (nota1)
escreva (Digite o valor da segunda nota: )
leia (nota2)
media <- (nota1 + nota2)/2
escreval (A mdia =,media)

se media >= 7 entao


escreva (Aluno aprovado!)
fimse
fimalgoritmo

Da mesma forma que o algoritmo tem um incio e um fim, a estrutura de deciso tambm
deve ser devidamente inicializada finalizada. Veja que nos exemplos citados acima, todo
comando SE (IF, em linguagem C) chamado no incio e o comando FIM SE chamado ao final da
execuo dessa estrutura.

Estruturas de deciso simples encadeada:


Vamos ver novamente o algoritmo sobre o que fazer no sbado pela manh:
INICIO
acordar
SE fizer sol ENTO //inicio do primeiro SE

SE tiver dinheiro ENTO //inicio do segundo SE

Ir praia

FIM SE //fim do segundo SE

FIM SE //fim do primeiro SE

FIM

Nota: // significa um comentrio, muito comum para desenvolvedores se lembrarem de


que se refere o cdigo usado.

Antes, tnhamos uma condio para ir praia no sbado pela manh: fazer sol. Agora,
alm do sol, a nossa ida praia depende de outro importante fator: ter dinheiro. Temos, ento,
no s uma, mas duas condies.

Da mesma forma, voc ver, em alguns algoritmos, a necessidade de atender a mais de


uma condio ao mesmo tempo.

Para atender duas ou mais condies simultneas, utilizamos a estrutura de deciso


encadeada, que podemos chamar de SEs encadeados ou SEs aninhados.

Veja como fica a sintaxe de estrutura de deciso simples com selees encadeadas:

Pseudocdigo: Fluxograma:

Inicio
Se <condio> ento
Comando 1
Comando 2
.
.
Comando n
fimse
fimalgoritmo
Observe que cada SE, na estrutura encadeada, tem a sua devida finalizao, ou seja, cada
SE tem o seu respectivo FIM SE. extremamente importante que voc esteja atento a esse
detalhe, pois o compilador sempre associar o FIM SE ao SE que estiver mais prximo. E se voc
se esquecer de finalizar um bloco de comandos de deciso, um erro ser gerado e o seu algoritmo
no ser executado.

Vamos resolver o problema a seguir.

Escreva um algoritmo que solicite ao usurio que coloque os tamanhos de trs lados de
um tringulo e informe se os lados de fato compem um tringulo. Lembre-se de que, em um
tringulo, cada lado menor que a soma dos outros dois lados.

algoritmo triangulo

var
lado1, lado2, lado3 : inteiro
inicio
escreva (Digite o valor do primeiro lado: )
leia (lado1)
escreva (Digite o valor do segundo lado: )
leia (lado2)
escreva (Digite o valor do terceiro lado: )
leia (lado3)

se (lado3<lado1+lado2) entao
se (lado2<lado1+lado3) entao
se (lado1<lado2+lado3) entao
escreva (Os lados formam um tringulo.)
fimse
fimse
fimse
fimalgoritmo

A rea destacada em verde, no algoritmo, mostra a estrutura de deciso encadeada.


Lembre-se da finalizao de cada SE.

Agora, veja bem:

INICIO
Acordar INICIO
SE fizer sol acordar
SE tiver dinheiro SE (fizer sol) E (tiver dinheiro)
Ir praia Ir praia
FIM SE FIM SE
FIM SE FIM
FIM
O que cada um dos algoritmos acima faz?

Observando os algoritmos acima, voc pode concluir que um SE encadeado pode,


algumas vezes, ser equivalente a um SE simples, com a utilizao de duas expresses lgicas
combinadas. Voc se lembra, que os operadores lgicos E, NO e OU so utilizados para combinar
duas ou mais expresses relacionais ou lgicas?

No algoritmo da direita, vemos uma combinao de duas expresses que podem ter por
resultado um valor verdadeiro ou falso. Est fazendo sol? Alm disso, tenho dinheiro? Se as duas
condies forem atendidas, eu vou praia.
Ou seja, utilizamos apenas um comando SE, porm com uma expresso combinada. J no
algoritmo da esquerda, como vimos anteriormente, ocorre o mesmo, porm, utilizamos dois
comandos SE separadamente.

Veja que o cdigo exibido na rea destacada, no algoritmo do tringulo, que resolvemos
h pouco, poderia ser substitudo, sem alteraes no resultado final, pelo seguinte cdigo:

se (lado3<lado1+lado2) e (lado2<lado1+lado3) e (lado1<lado2+lado3) entao

escreva (Os lados formam um tringulo.)

fimse

Na programao, isso comumente chamado de otimizao de cdigo.

Existem, porm, casos de estruturas encadeadas que NO PODEM ser substitudas por
combinaes de expresses lgicas. Isso ocorre quando, aps o teste da primeira condio, h
algum comando ou bloco de comandos, que deve ser executado antes do teste da condio
seguinte. Por exemplo:

SE fizer sol ENTO

Eu vou praia

SE tiver muita gente l ENTO

Eu vou ao clube

FIMSE

FIMSE

No exemplo, no poderamos utilizar a expresso: Se fizer sol E Se tiver muita gente l,


pois s vou at a praia se fizer sol. Mas, s posso saber se tem muita gente l, depois que eu tiver
ido. Ou seja, s posso testar a segunda condio aps a execuo do comando que depende da
primeira.

Vejamos outro exemplo:

Faa um algoritmo para calcular o dobro de um nmero inteiro, caso seja par e, caso o
dobro seja menor do que 10, escrever seu quadrado.

algoritmo quadrado do dobro


var
num, dobro, quadrado : inteiro
inicio
escreval (Digite um nmero:)
leia (num)
se (num % 2 = 0) entao
dobro <- num * 2
escreval (O dobro do nmero digitado : ,dobro)
se (dobro < 10) entao
quadrado <- dobro * dobro
escreval (O quadrado do dobro : ,quadrado)
fimse
fimse
fimalgoritmo

Veja que a segunda condio (dobro<10) s pode ser testada aps a execuo do
comando que determina esse dobro. Este comando depende da primeira condio (o nmero tem
que ser par). Assim, essa estrutura encadeada tambm no pode ser substituda por uma deciso
simples com expresses lgicas combinadas.

O comando escreval, faz com que o VisuAlg quebre as linhas automaticamente.

Para reforar uma tabela com a descrio de tipos de variveis.


Exerccios:

1. O que caracteriza as estruturas de deciso simples?


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
_______

2. Qual a sintaxe dessa estrutura?


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
_______

3. Qual a sintaxe da estrutura de deciso encadeada?


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
_______
Aula 6 Estruturas de Deciso Composta e Mltipla Escolha
Deciso Composta:
Agora que voc j sabe que a estrutura de deciso simples executa um comando ou bloco
de comandos se uma determinada condio for atendida. Se a condio no for atendida, a
estrutura finalizada sem executar comandos.

Ento, a estrutura composta segue do mesmo princpio, com diferena que, quando a
condio no feita, h um desvio para outro comando ou at bloco de comandos.

A estrutura de deciso composta executa um comando ou bloco de comandos quando a


condio feita e outro comando diferente quando a condio proposta no feita.

Agora, voc deve comear a utilizar alm do SE, a palavra reservada SENO. (no VisuAlg
usa-se senao)

Vamos ver um exemplo simples para mostrar o uso do SENO.

Inicio
Acordar
SE fizer sol ENTO
Ir praia
SENO
Ler um livro
FIM SE
FIM
Note que desta vez estamos tratando com uma estrutura composta. Se a condio (fazer
sol) verdadeira eu vou praia. Caso contrrio, (falsa) fao outra coisa: leio um livro. Ou seja, a
condio no sendo verdadeira, logo, eu executo outra atividade.

A estrutura de deciso composta obedece seguinte sintaxe:

Pseudocdigo:

inicio
se <condio> ento Fluxograma:
comando 1
comando 2
.
.
comando n
senao
comando 1
comando 2
.
.
comando n
fimse
fim
Veja que, da mesma forma que na estrutura simples, o algoritmo executa um comando ou
bloco de comandos, caso a situao seja verdadeira.
Faremos um algoritmo para calcular a mdia aritmtica de um auno e dizer se o mesmo
foi aprovado ou no.
algoritmo calcula mdia com desvio
var
nota1, nota2, media: real
inicio
escreval (Digite o valor da primeira nota:)
leia (nota1)
escreval (Digite o valor da segunda nota:)
leia (nota2)
media <- (nota1 + nota2) % 2
escreval (A mdia =, media)
se (media >= 7) entao
escreval (Aluno aprovado!) //instruo com condio verdadeira
senao
escreval (Aluno reprovado!) //instruo com condio falsa.
fimse
fimalgoritmo

Contudo, de forma diferente da estrutura simples, a estrutura composta executa outro


comando ou bloco de comandos, quando a condio seja falsa.

Agora, o algoritmo pode executar uma instruo quando a condio (nota >= 7) for
verdadeira e outra instruo quando a condio for falsa.

Estrutura de deciso composta encadeada:


Da mesma forma que na estrutura simples, na estrutura composta tambm podemos
utilizar SE encadeados. Voc sabe que isso ocorre quando h vrias condies a serem testadas.

Agora, observe as duas situaes abaixo:

Situao 01:

Inicio
Acordar
SE fizer sol ENTO
Ir ao shopping
SENO
SE estiver nublado ENTO
Assistir um filme
SENO

Est chovendo.
Ficar em casa e ler um livro
FIM SE
FIM SE
FIM
Situao 02:

INICIO
acordar

SE fizer sol ENTO


Ir ao shopping

SENO

SE tiver dinheiro ENTO


Comprar uma camisa
SENO
Ficar em casa e ler um livro
FIM SE

FIM SE

FIM

fcil perceber que, em ambas as situaes h uma utilizao de estruturas encadeadas.


Mas o que difere a Situao 01 da Situao 02?

Na Situao 01, temos vrias estruturas separadas, com condies que so mutuamente
exclusivas, ou seja, se uma das condies for verdadeira, todas as outras so falsas. Se no fizer
sol, nem estiver nublado, com certeza estar chovendo. H uma ao diferente para cada
condio possvel: ir ao shopping, assistir um filme, ler um livro.

Na Situao 02, h uma estrutura composta inserida em outra estrutura composta. Se


fizer sol, assistirei a um filme. Se no fizer sol, no assistirei a um filme, mas me restam duas
opes possveis: comprar uma camisa se tiver dinheiro, ou ficar em casa e ler um livro, caso no
tenha dinheiro.

Para ilustrar melhor, vamos incrementar um pouco mais o algoritmo da mdia:

algoritmo calcula mdia com desvio composto encadeado

var
nota1, nota2, media: real
inicio
escreva (Digite o valor da primeira nota: )
leia (nota1)
escreva (Digite o valor da segunda nota: )
leia (nota2)
media <- (nota1 + nota2)/2
escreval (A mdia =,media)
se media >= 7 entao
escreval (Aluno aprovado! Parabns!)

senao

se (media<7) e (media>=4) entao


escreval (Aluno em recuperao! Estude),

senao
escreval (Aluno reprovado!)

fimse
fimse
fimalgoritmo

Veja que, no exemplo, temos a situao de excluso mtua. Se a mdia no for maior que
7.0, nem est entre 4.0 e 7.0, s pode ser menor que 4.0.

Nesse caso, ou o aluno aprovado, ou fica em recuperao, ou reprovado.


Exerccios:

1. O que diferencia uma estrutura de deciso composta da estrutura simples?


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________

2. Qual a sintaxe de estrutura de deciso composta?


_________________________________________________________________________
________________________________________________________________________________
______________________________________________________________________________

3. Quais as possveis sintaxes de estrutura de deciso composta encadeada?


_________________________________________________________________________
________________________________________________________________________________
______________________________________________________________________________

4. A partir do que voc responder no exerccio 3, d pelo menos um exemplo.


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________________
Aula 7 Estruturas de Deciso de Mltipla Escolha
Nas estruturas de deciso vimos que nas aulas anteriores, um comando ou bloco de
comandos executado de acordo com uma ou mais condies. Viu que, quando a condio no
verdadeira, a estrutura pode encerrar (estrutura de deciso simples) ou seguir outro caminho
(estrutura de deciso composta).

Existem problemas, porm, em que uma expresso (ou uma varivel) pode assumir
diversos valores e que, cada valor assumido, comandos diferentes so executados. Neste caso, os
valores so mutuamente exclusivos. Nestes casos utilizaremos as estruturas de mltipla escolha.

Imagine que voc quer decidir o que fazer no seu dia de folga:

Exemplo:
VAR
Opo: Inteiro
INICIO
escreval (Digite 1, para ir ao parque)
escreval (Digite 2, para andar de bicicleta)
escreval (Digite 3, para comer pizza)
leia opo
ESCOLHA opo
CASO 1
escreva (Sair de casa s 10 horas da manh.)
CASO 2
escreva (Sair de casa s 4 horas da tarde.)
CASO 3
escreva (Sair de casa s 8 horas da noite.)
OUTROCASO
escreva (J que no escolheu nenhuma das opes, fique em casa assistindo
televiso.)
FIM ESCOLHA
FIM

Para cada, h um comando diferente (neste caso, um horrio diferente para sair de casa).
Isso mostra que os comandos so como dissemos a pouco, mutuamente exclusivos.
Veja que, caso no escolha nenhuma das opes anteriores, h um comando definido por
padro (que, neste caso seria assistir televiso).
A sintaxe da estrutura de mltipla escolha a seguinte:

Pseudocdigo
Fluxograma

Inicio
escolha <opo>

caso <opo 1>

<comandos1>

caso <opo 2>

<comandos2>

caso <opo n>

<comandos>

outrocaso

<comandos_padro>

fimescolha

Fim

A palavra reservada outrocaso pode ser entendida como um desvio, em caso do usurio
escolher uma opo no esteja entre as opes existentes. Sua utilizao opcional. Execute o
algoritmo no VisuAlg.

Para uma melhor fixao, evite copiar e colar o texto da aula. Prefira reescrever o
algoritmo no VisuAlg. Dessa forma, voc ficar mais familiarizado com a sintaxe e, logo, sua
habilidade em utilizar a estrutura ser melhorada.

Deciso de mltipla escolha ou deciso encadeada?


Se voc compreendeu tudo o que vimos at agora sobre as estruturas de deciso, pode
estar se perguntando: Mas, essa estrutura de mltipla escolha no a mesma coisa que uma
estrutura de deciso composta encadeada?.

De fato, elas podem ser similares. Os dois algoritmos abaixo fazem a mesma coisa:

Deciso Encadeada:

algoritmo "Deciso encadeada"

var

opcao: inteiro

inicio

escreval ("O que fazer no final de semana:")

escreval ("Opes: 1 - Parque, 2 - Pizza, 3 - Churrasco, Outro Nmero - Descansar")

leia (opcao)

se opcao = 1 entao
escreval ("No final de semana iremos ao parque!")

senao

se opcao = 2 entao

escreval ("No final de semana comeremos pizza!")

senao

se opcao=3 entao

escreval ("No final de semana iremos a churrascaria!")

senao

escreval ("No final de semana iremos descansar.")

fimse

fimse

fimse

fimalgoritmo

Deciso de Mltipla Escolha:

algoritmo "Mltipla Escolha"

var

opcao: inteiro

inicio

escreval ("O que fazer no final de semana:")

escreval ("Opes: 1 - Parque, 2 - Pizza, 3 - Churrasco, Outro Nmero - Descansar")

leia (opcao)

escolha opcao

caso 1

escreval ("No final de semana iremos ao parque!")

caso 2

escreval ("No final de semana comeremos pizza!")


caso 3

escreval ("No final de semana iremos a churrascaria!")

outrocaso

escreval ("No final de semana iremos descansar.")

fimescolha

fimalgoritmo

Execute os dois algoritmos no VisuAlg e veja que, em ambos os casos, a sada a mesma.

Cada palavra reservada que utilizamos em um algoritmo representa um comando que o


programa vai executar, desde a inicializao do algoritmo, passando pelos comandos bsicos (as
instrues primitivas) e os comandos de cada estrutura de controle, at a finalizao do
algoritmo. Tudo isso so instrues que passamos para que o computador execute.

Sabendo disso, podemos ver que o algoritmo que utiliza a deciso encadeada tem um
nmero maior de instrues. Isso demanda uma quantidade maior de memria e processamento
do computador para executar o algoritmo, o que afeta diretamente o desempenho.

Seria como se voc precisasse caminhar de um ponto a outro, tendo duas opes de
caminho: em uma, voc segue em linha reta e, na outra, voc vai ziguezague. Em qual dessas
opes voc acha que chegaria mais rpido? Em qual chegaria menos cansado?

Em um algoritmo simples, provavelmente, voc no perceber a diferena. Mas, em


programas maiores e mais complexos, fica evidente a queda no desempenho. Por isso, mais
conveniente, nesses casos (de seleo mutuamente exclusiva), utilizar a estrutura de mltipla
escolha.

H, tambm, outra diferena bsica entre as duas estruturas, que pode determinar
quando utilizar uma ou outra:

Deciso encadeada:
Pode testar mais de um valor ao mesmo tempo. Ou seja, podem ser utilizadas expresses
relacionais.

Mltipla escolha:
S pode testar igualdade e s testa um valor por vez, por isso, no pode utilizar
expresses lgicas ou relacionais.
Exerccios:

1. Qual a sintaxe da estrutura de deciso mltipla?


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________

2. Escreva o algoritmo do dia de folga no VisuAlg e execute. Lembre-se de usar a


sintaxe de estrutura mltipla.
_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
_____________________________
Aula 8 Estruturas de Repetio
Estrutura Bsica
Voc j sabe que alguns algoritmos precisam executar instrues com base em uma
condio pr-estabelecida. Nas estruturas de deciso que vimos nas aulas anteriores, se uma
condio verdadeira, um comando ou grupo de comandos executado. Depois disso, a
estrutura finalizada. Ou h o caminho alternativo, caso a condio no seja atendida.

Nas estruturas de repetio, condies tambm so testadas. Mas, o que, de fato,


caracteriza essa estrutura que um conjunto de aes executado de forma repetida enquanto a
condio permanece vlida ou no.
Por exemplo, se algum lhe solicita que faa um algoritmo que escreva cinco vezes a
frase: Ol, bom dia!, de que forma voc faria?
Com o que aprendemos at aqui, seria da seguinte forma:

algoritmo repete frase


inicio
escreval (Ol, bom dia!)
escreval (Ol, bom dia!)
escreval (Ol, bom dia!)
escreval (Ol, bom dia!)
escreval (Ol, bom dia!)
fimalgoritmo

Simples, no? Mas e se mudssemos o nmero de repeties? Se, ao invs de cinco vezes
tivssemos que escrever essa mesma frase cem vezes? Ou mil vezes?

Seria extremamente cansativo para voc ficar digitando tantas vezes o mesmo comando.
Para o computador tambm no seria interessante. J que quando o mesmo comando repetido,
h um aumento considervel na demanda por processamento e memria.

justamente a que entra a utilizao das estruturas de repetio.


O mesmo algoritmo ficaria da seguinte maneira:

algoritmo repete frase


var
contador: inteiro
inicio
para contador de 1 ate 5 passo 1 faca
escreval (Ol, bom dia!)
fimpara
fimalgoritmo

No algoritmo acima, criamos uma varivel de controle (contador) que que determinam
quantas vezes o comando escreval ser executado. A repetio s para quando a condio no for
atendida, ou seja, quando o contador for maior que cinco.

Repetio ou looping um conjunto de aes que so executadas repetidamente.


O objetivo das estruturas de repetio executar uma srie de instrues em looping,
enquanto (ou at que) uma dada condio analisada seja verdadeira.

Tipos de Estruturas de Repetio:


As estruturas de repetio podem funcionar de diferentes formas, de acordo com a
necessidade do algoritmo que voc vai criar. Assim como nas estruturas de deciso, h uma
classificao para as estruturas de repetio:

1. Repetio com teste de condio no incio (comandos ENQUANTO...FAA)


repete as instrues enquanto a condio for verdadeira.

2. Repetio com varivel de controle (comando PARA) repete as instrues sob


controle de um contador que percorre valores, de acordo com limites iniciais e finais pr-
estabelecidos.

3. Repetio com teste da condio no final (comandos REPITA...AT) repete as


instrues at que a condio seja verdadeira.
Nesta aula, especificamente, nos ateremos estrutura de repetio com varivel de
controle.

Estrutura de Repetio com Varivel de Controle:


Na repetio com varivel de controle, a quantidade de execues do comando que ir
repetir conhecida previamente. Para isso, precisamos de uma varivel que funcione como um
contador para que as repeties possam cessar no momento em que a contagem chegar ao fim.
Existe tambm, um valor de incremento, que define de quantas em quantas unidades a repetio
ir ser executada.

No exemplo dado no comeo desta aula (que escreve a mesma frase cinco vezes),
utilizamos esse tipo de estrutura de repetio.

A sintaxe a seguinte:

Pseudocdigo:
para <varivel inteiro> de <valor inicial> ate <valor final> passo <valor de incremento>
faa
<instrues>

Fimpara

OU
para <varivel inteiro> de <valor inicial> ate <valor final> faa
<instrues>

Fimpara
Fluxograma: Veja a seguir algumas consideraes sobre a sintaxe da estrutura.

A
varivel de controle
deve ser uma varivel
numrica do tipo
inteiro, pois servir de
contador e ter seu
valor incrementado a
cada passo.
O valor
inicial corresponde ao
valor de inicializao da
varivel antes da
primeira repetio.
O valor
final corresponde ao
valor mximo que a
varivel pode alcanar.
O valor
inicial, o valor final e o
valor de incremento
podem ser variveis ou
constantes.
Se o valor de incremento no for definido, instantaneamente o programa assume
o valor = 1.
O valor de incremento no pode ser nulo.
Pode ser atribudo um valor negativo ao valor de incremento, caso se deseje que
o lao seja percorrido em ordem inversa. Nesse caso, o valor inicial e o valor final devem ser
invertidos, tambm, para evitar erros na execuo. Ou seja, se o valor de incremento for negativo,
o valor inicial deve ser maior que o valor final.

Essa estrutura de repetio obedece a seguinte ordem:

1. declarada uma varivel de controle numrica do tipo inteiro (que ser o


contador), antes da execuo da estrutura de repetio.
2. So definidos um valor inicial e um valor final para essa varivel (que vai definir a
quantidade de repeties).
3. atribudo o valor inicial varivel.
4. O valor que est armazenado na varivel comparado com o valor final.
5. Se o valor da varivel for menor ou igual ao valor final, as instrues contidas na
estrutura so executadas.
6. O valor da varivel incrementado de acordo com o que foi definido no
comando passo.
7. Isso se repete at que o valor armazenado na varivel seja maior que o valor final.
Quando isso ocorre, a estrutura termina e o algoritmo segue aps o comando fimpara.

Vamos rever o nosso exemplo da mdia, s que desta vez usando a estrutura de repetio
com varivel de controle.
Exemplo:

Calculando a mdia entre duas notas para 50 alunos:

algoritmo calcula mdia com repetio

var

nota1, nota2, media : real //declarao das variveis

contador : inteiro //declarao de varivel de controle

inicio

para contador de 1 ate 50 passo 1 faca

escreval (Digite as notas do aluno , contador,:)

escreval (Primeira nota:)

leia (nota1)

escreval (Segunda nota:)

leia (nota2)

media <- (nota1+nota2)/2

escreval (O aluno ,contador, teve mdia igual a: ,media)

fimpara

fimalgoritmo

Como na estrutura sequencial, declaramos as variveis para as notas e a mdia. Em


seguida, declaramos uma varivel inteira, que ser o contador.

Definimos, depois, os valores inicial e final (de 1 a 50, que a quantidade de alunos) e o
valor de incremento (1, pois o lao percorrer um a um, os alunos).

Os comandos do para so executados em loop at que seja satisfeito o nmero 50 na


varivel contadora, e assim, quando exibida a mdia do ltimo aluno, a estrutura termina.

Enquanto, faa Teste condicional no comeo do algoritmo:


Antes, fizemos o clculo de mdio dos 50 alunos utilizando as estruturas com varivel de
controle, com os comandos PARA...FAA. Agora, veremos esse mesmo algoritmo de forma
diferente:

algoritmo
var
nota1, nota2, media: real //declarao das variveis do alg.
contador: inteiro //declarao do contador
inicio
enquanto contador < 5 faca //inicio da estrutura de repetio
escreval (Digite as notas do aluno ,contador,:)
escreval (Primeira nota:)
leia (nota1)
escreval (Segunda nota:)
leia (nota2)
media <- (nota1+nota2)/2
escreval (O aluno ,contador, teve mdia igual a:, media)
contador <- contador + 1
fimenquanto
fimalgoritmo

Veja que o algoritmo acima, utilizando o comando ENQUANTO, faz a mesma coisa que o
algoritmo que vimos na aula anterior, com os comandos PARA...FAA.

No algoritmo da mdia, sabemos previamente a quantidade de repeties, que equivale


ao nmero de alunos da turma. Por isso, esse algoritmo pode ser resolvido com qualquer uma das
duas estruturas de repetio: o PARA ou o ENQUANTO.

Voc sabe que o comando PARA define o valor de incremento do contador antes do incio
da execuo. Essa definio no feita na sintaxe do comando ENQUANTO. Por isso, de
extrema importncia que voc se lembre de incrementar o contador, antes de finalizar a
estrutura.
Veja que antes do comando fim enquanto, temos a seguinte expresso.

contador <- contador + 1

Voc declarou, no incio do algoritmo, a varivel contador, do tipo inteiro, mas no


atribuiu a ela valor algum. Sabemos que, quando no atribumos valor a uma varivel do tipo
inteiro, o valor default assumido 0. Portanto, o valor do contador, antes do incio da execuo
da estrutura de repetio, igual a 0.

A cada repetio, o valor do contador deve ser incrementado em 1. isso que o algoritmo
faz quando chega linha contador <- contador + 1.
Incio 0 contador <- contador + 1
Primeira execuo contador = 0 contador = 0 + 1
Segunda execuo contador = 1 contador = 1 + 1
Terceira execuo contador = 2 contador = 2 + 1
Quarta execuo contador = 3 contador = 3 + 1
Quinta execuo contador = 4 contador = 4 + 1
Fim da execuo contador = 5 contador atingiu valor limite
Veja que, a cada repetio, o valor da expresso de incremento (contador + 1)
armazenado na varivel contador. Dessa forma, a cada repetio, essa varivel assume um novo
valor. E assim, quando o contador chegar em 5 ir terminar a execuo, j que foi definido para
que a condio mxima sendo menor que 5.

Outra diferena importante entre os comandos PARA e ENQUANTO que o comando


ENQUANTO pode ser utilizado em situaes que no podem ser resolvidas com varivel de
controle. So situaes em que no se sabe previamente a quantidade de repeties da estrutura.

O comando ENQUANTO testa uma condio e, enquanto essa condio for verdadeira, as
instrues da estrutura de repetio so executadas. No momento em que a condio deixar de
ser verdadeira, a estrutura encerrar.

Como no podemos prever qual ser o momento em que o usurio ir digitar um nmero
negativo, no h como saber previamente a quantidade de repeties.

O comando ENQUANTO utilizado em estruturas de repetio em que no sabemos


previamente a quantidade de repeties do comando ou grupo de comandos da estrutura.

Observe a sintaxe desta estrutura:

Pseudocdigo:

enquanto <condio> faca

<instrues>

fimenquanto

Fluxograma:

Ateno: se houver alguma situao em que seja possvel a condio ser sempre
verdadeira, as instrues da estrutura executaro para sempre. o que chamamos de loop
infinito. importante que voc
tenha o cuidado de evitar
situaes como essa.

Quer ver um exemplo de


algoritmo que resulta
em loop infinito? Retorne ao
algoritmo da mdia e tente
execut-lo no VisuAlg removendo
a linha em que o contador
incrementado (contador <-
contador + 1). Veja o que acontece.

Como o contador no est sendo incrementado ter sempre o valor inicial (zero). Dessa
forma, a condio (contador < 5) ser sempre verdadeira, causando, portanto, a situao
de loop infinito.

Repita...at Teste condicional no final:


Veremos novamente, o algoritmo da mdia:

algoritmo media com repita...at


var
Nota1, nota2, media : real //declarao de variveis do algoritmo
contador: inteiro //declarao do contador
inicio
contador <- 1 //atribuio de valor ao contador
repita //incio da estrutura de repetio
escreval (Digite as notas do aluno ,contador, :)
escreval (Primeira nota:)
leia (nota1)
escreval (Segunda nota:)
leia (nota2)
media <- (nota1 + nota2)/2
escreval (O aluno ,contador, teve mdia igual a:, media)
contador <- contador + 1
ate contador > 50
fimalgoritmo

Na estrutura REPITA...AT, a repetio continua enquanto a condio (contador > 50) for
falsa. E cessa quando essa condio se tornar verdadeira.

Veja que o problema da mdia pde ser resolvido com qualquer uma das estruturas de
repetio, alterando-se somente a sintaxe.
Apesar disso, nem sempre um problema, em algoritmos, poder ser solucionado com
qualquer uma das estruturas. Sempre haver uma das estruturas que se enquadre melhor na
soluo de determinado problema.

Ao contrrio do ENQUANTO, o teste da condio verifica, na estrutura REPITA...AT, se a


condio falsa. O looping termina quando a condio verdadeira. Alm disso, a estrutura
REPITA...AT sempre executa, pelo menos uma vez, os comandos, pois o teste da condio
realizado no final.
Exerccios:

1. Qual a sintaxe da estrutura de repetio?


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________

2. Qual o objetivo das estruturas de repetio?


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
_______

3. Explique a sintaxe da estrutura ENQUANTO...FAA.


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________
Aula 9 Vetores
Nas aulas anteriores, estudamos as estruturas de controle. Voc viu que tais estruturas
so utilizadas para definir o fluxo de execuo dos comandos nos algoritmos. Viu tambm as
estruturas sequenciais, com comandos bsicos e ordem simples na execuo desses comandos; as
estruturas de deciso, que estabelecem desvios na execuo dos comandos, de acordo com
condies especficas; e as estruturas de repetio, em que determinados comandos so
executados em lao.

At agora, na execuo dos comandos com as estruturas de controle, utilizamos tipos de


dados bsicos, com variveis simples: real, inteiro, literal, caractere e lgico. Nesta aula, voc ver
que h situaes em que os tipos de dados bsicos no so suficientes para resolver os problemas
que se apresentam.

Em muitos momentos, precisaremos, para atingir a soluo de tais problemas, utilizar o


que chamamos de estruturas de dados homogneas. Voc entender o conceito dessas
estruturas e ver que, utilizando-as, podemos armazenar diversos dados de um mesmo tipo em
uma nica varivel. Voc estudar a utilidade dessas estruturas e as classificaremos em vetores
(unidimensionais) e matrizes (bidimensionais), contemplando a sintaxe e a construo de
algoritmos utilizando as duas estruturas.

Estruturas de dados homogneas:


Ao longo da nossa disciplina, voc viu que uma varivel um espao na memria que
reservado para armazenar determinados tipos de dados. At agora, porm, ns trabalhamos
apenas com os tipos de dados bsicos (reais, inteiros, caracteres, literais e lgicos) e variveis
simples para armazenar esses dados.

No entanto, nem sempre os tipos de dados bsicos so suficientes para representar as


estruturas de dados necessrias para resolver os problemas que se apresentam.

Imagine, por exemplo, que voc quer escrever um programa que solicita ao usurio a
entrada dos nomes de 50 alunos de uma turma de sua escola. Parece simples, no? E . Basta
voc utilizar uma das estruturas de repetio que vimos nas aulas anteriores.

Exemplo:
algoritmo 50 nomes
var
nome: literal //conhecido como caractere em algumas linguagens
contador: inteiro
inicio
escreval (Digite os nomes dos alunos:)
para contador de 1 ate 50 passo 1 faca
escreval (Aluno,contador,:)
leia (nome)
escreval (Aluno, contador,: ,nome)
fimpara
fimalgoritmo

O algoritmo acima solicita que o usurio digite os nomes e l um a um, conforme o


usurio os digita. Neste caso, precisamos apenas de uma varivel inteira que servir como
contador e uma varivel do tipo literal (tambm conhecida como caractere) para armazenar o
nome que ser digitado.

O nome digitado, armazenado na varivel, exibido ao usurio, e a varivel liberada


para armazenar o prximo nome. Se voc solicitar ao programa que exiba o contedo da varivel
nome, ver que somente o ltimo nome digitado ser exibido, j que, da maneira como foi escrito
o algoritmo, impossvel exibir os nomes anteriores.

Mas, se quisermos que todos os nomes digitados sejam exibidos em uma lista,
imediatamente aps a digitao dos mesmos? Como fazer isso?

Para que os nomes dos alunos do nosso exemplo sejam exibidos em uma lista, eles
precisam primeiro, ser acessados. E para ser acessados, necessrio que todos eles estejam
armazenados nessa lista. Para esse fim, existem as estruturas de dados homogneas.

Estruturas de dados homogneas so estruturas que permitem armazenar conjuntos de


dados de um mesmo tipo (da vem o nome homogneas) em uma nica varivel.

As estruturas de dados homogneas so classificadas em dois tipos:

1. Os vetores (ou arrays), estruturas que armazenam os dados em uma nica linha e
vrias colunas (dizemos que so unidimensionais).
2. As matrizes, estruturas que armazenam os dados em forma de tabela, com vrias
linhas e vrias colunas (so bidimensionais).

Vetores:
Voltando ao nosso exemplo, como exibir os nomes dos alunos em uma lista, utilizando as
estruturas de dados homogneas? Antes de resolver esse problema, vamos analisar o passo a
passo dessa situao.

Primeiro, devemos inserir no programa esses dados. Ou seja, devemos escrever, um a um,
os nomes dos alunos, armazenando-os em uma lista. Em seguida, solicitamos que o programa
exiba a lista dos alunos. Os dados armazenados so, ento, acessados e, em seguida, exibidos.

Se tentssemos resolver esse problema com o que aprendemos at aqui, teramos que
declarar 50 variveis literais para armazenar os 50 nomes e depois teramos que instruir o
computador a ler, uma a uma, cada varivel. Algo similar ao trecho de programa abaixo:

leia (nome1,nome2,nome3,...nome50)

escreva (nome1,nome2,nome3,...nome50)

No precisa dizer que a soluo acima seria invivel, no mesmo? Na realidade, a


soluo ideal para o problema pode ser encontrada se utilizarmos uma varivel composta
unidimensional, ou seja, um vetor.
Declarao de um vetor:
Assim como as variveis simples, os vetores precisam ser declarados antes de serem
utilizados. A declarao de um vetor, porm, um pouco diferente da declarao de uma varivel
comum, pois se trata de uma varivel indexada. como se estivssemos declarando diversas
variveis dentro de uma s, diferenciada por um ndice.

Essas variveis correspondem aos elementos do vetor (em nosso exemplo, os nomes
dos alunos). J o ndice um valor numrico do tipo inteiro, que sempre comea em 1 e
corresponde posio de cada elemento no vetor.

Exemplo de um vetor:

O exemplo representa um vetor de 5 elementos. Os nmeros de 1 a 5 representam os


ndices, que so posies de cada elemento no vetor, por exemplo, o elemento Gustavo ocupa
a posio 3 do vetor.

Ao declarar um vetor, o seu tamanho deve ser informado. O tamanho de um vetor a


quantidade de dados que ser armazenada na varivel. Na tabela acima, o tamanho do vetor 5.
No nosso exemplo (dos nomes dos alunos), o tamanho do vetor 50, pois queremos armazenar
os nomes de 50 alunos distintos.

A sintaxe de declarao de um vetor fica da seguinte forma:

<identificador> : vetor [tamanho] de [tipo]

Tamanho = [Vi..Vf], onde: Vi = valor inicial e Vf = valor final

No exemplo dos nomes:

nomes: vetor [1..50] de literal

No nosso exemplo, ao invs de declararmos diversas variveis (nomes1, nomes2...,


nomes50), estamos declarando diversos elementos (os nomes) em uma varivel.

Atribuio em Vetores:
Assim como as variveis comuns, os elementos de um vetor tambm podem ser
inicializados, ou seja, ter seus valores atribudos no momento da declarao.

Ao atribuir valores a um elemento do vetor, deve ser obedecida a seguinte sintaxe:

<identificador>[posio] <- <valor>

Exemplos:

Nomes [3] <- Eduardo Carvalho de Almeida

i <- 5

Nomes [i] <- Maria Alice da Silva


Agora que voc j conheceu os conceitos e a sintaxe dos vetores, vamos resolver nosso
problema.

Ao digitar os nomes dos alunos, utilizamos uma estrutura de repetio. Fizemos isso, voc
sabe, porque se trata de uma execuo em loop. Para exibir os dados, teremos que utilizar outra
estrutura de repetio, pois a exibio tambm feita em loop. Ou seja, o vetor exibir os dados
um aps o outro, at que todos sejam exibidos.

Veja a soluo a seguir:

algoritmo nomes dos alunos


var
nomes: vetor[1..50]de literal //declaramos aqui, o vetor (o tamanho fica nos nmeros
entre colchetes)
contador: inteiro //declarao da varivel contador
inicio
escreval (Digite os nomes dos alunos:)
para contador de 1 ate 50 passo 1 faca //inicio da primeira estrutura de repetio
escreval (Aluno ,contador, :)
leia (nomes[contador]) //os dados so armazenados um a um, no vetor
fimpara
para contador de 1 ate 50 passo 1 faca //inicio da segunda estrutura de repetio
escreval (nomes[contador]) //os dados so exibidos
fimpara //fim da segunda estrutura de repetio
fimalgoritmo

Perceba que h uma estrutura de repetio para armazenar os dados e outra para exibi-
los. Execute o algoritmo no VisuAlg. Utilizando a tecla F8 para o passo a passo.

Ordenao de um vetor:
Ao escrever algoritmos com vetores, haver momentos em que voc sentir a
necessidade de ordenar os seus elementos.

Voc j deve ter visto ou utilizado algum programa de computador que tem
funcionalidades que classificam palavras em ordem alfabtica ou nmeros em ordem crescente.

A ordenao um tipo de funcionalidade bastante til e necessria a alguns programas de


computador.

Essa ordenao realizada por meio de comparaes entre os elementos do vetor.

A > B, ento:
Quando h uma quantidade maior de elementos a serem ordenados, h a necessidade de
tcnicas especficas de ordenao. Vamos conhecer uma delas.

Veja bem a tabela a seguir:

Os nmeros 01 a 05 na primeira linha da tabela representam as posies na memria (os


ndices do vetor) de cada elemento. Na linha de baixo, esto os elementos, fora de ordem.

Para ordenar os elementos, necessrio fazer a comparao entre todos eles, da seguinte
maneira: primeiro, comparamos o nmero do ndice 01 com cada um dos outros.

O menor colocado na posio 01. Depois, realizada a comparao do segundo


elemento com os restantes e assim por diante.

Porm, como cada elemento ocupa um espao na memria, precisamos reservar um


espao auxiliar (uma varivel temporria) para armazenar um dos elementos da comparao,
quando eles tiverem que trocar de posio.

O passo a passo da troca de valores ocorre da seguinte forma:

I - Criamos uma varivel auxiliar e comparamos o nmero do primeiro ndice com todos os
demais, at encontrar o menor, armazenando-o na primeira posio.
II - Como houve troca de posies entre os elementos, realizamos a comparao entre o
primeiro elemento (que agora o 2) com os demais, at achar um menor.

III Ao encontrar um nmero menor (1), realizamos a troca de posies entre os dois,
da mesma forma que a troca anterior, utilizando a varivel auxiliar.

IV J temos o nmero menor. Agora, fazemos as comparaes entre o nmero que est
na segunda posio e os demais, at encontrar o segundo menor e trocarmos os dois de posio.

V Procedemos troca de posies.


VI - Com o primeiro e o segundo nmeros definidos, fazemos as comparaes entre o
terceiro nmero e os restantes, trocando sempre as posies, a fim de que os menores fiquem
nas primeiras posies.

Comparamos e trocamos o 12 com o 8.

Comparamos e trocamos o 8 com o 5.

Novamente trocamos o 12 com o 8. A ordenao est completa.


Consegue perceber o princpio desse tipo de ordenao? Vamos ver o funcionamento
desse algoritmo em pseudocdigo:

Exemplo:

algoritmo ordenao
var
i:inteiro //contador1
j:inteiro //contador2
num: vetor[1..5]de inteiro //declarao do vetor que ser ordenado
temp: inteiro

inicio

para i de 1 ate 5 faca


escreval (Numero ,i, ?) //solicita a entrada dos nmeros
leia (num[i])
fimpara

para i de 1 ate 5 faca //duas estruturas de repetio, pois dois nmeros ser comparados
para j de 1 ate 5 faca

se num[i]<num[j] entao //compara dois nmeros


temp <- num[j] //coloca o maior na varivel temporria
num[j] <- num [i] //coloca o menor no lugar do maior
num[i] <- temp //coloca o maior que estava na varivel temporria, no lugar em que antes
tinha o menor.
fimse
fimpara
fimpara

para i de 1 ate 5 faca


escreva (num[i]) //exibe os nmeros ordenados
fimpara

fimalgoritmo
Exerccios:

1. De que forma declarado um vetor? Exemplifique com uma sintaxe.


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________

2. O que o tamanho de um vetor? Explique pra que serve a indexao.


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________

3. Para que serve a varivel temporria (usada como temp no exemplo) nos
mtodos de ordenao?
_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________
Aula 10 Matrizes
Como funciona:
Vimos na aula anterior, que nem sempre os tipos de dados bsicos so suficientes para
representar as estruturas de dados necessrias para resolver os problemas que se apresentam.

Viu a necessidade de, em algumas situaes, exibir dados em listas. E, para atender a essa
necessidade, conhecemos os vetores, como estruturas de dados unidimensionais, com variveis
indexadas referenciadas por um nico ndice.

Voc aprendeu que, armazenando os dados em um vetor e acessando-o, em seguida,


podemos exibir suas informaes em uma lista.

Porm, os vetores lidam com apenas uma dimenso. Ou seja, se fssemos representar o
vetor atravs de uma tabela, essa s teria uma linha com vrias colunas, ou vice-versa. Como
podemos ver na tabela abaixo, que vimos h pouco no estudo sobre vetores.

Veja:

Os elementos do vetor, na tabela, so os nomes dos alunos Paulo, Jssica, Mrcio, Viviane
e Leonardo. Dessa forma, os elementos e seus ndices so:

nomes[1] <- Paulo


nomes[2] <- Jssica
nomes[3] <- Mrcio
nomes[4] <- Viviane
nomes[5] <- Leonardo

Agora, imagine que o professor de determinada disciplina passou um trabalho a ser feito
em dupla e quer organizar os
nomes das duplas. Veja a
tabela abaixo:

Os elementos dos grupos, segundo a tabela, so os seguintes:

Componentes [1,1] <- Paulo (componente 1 do grupo 1)


Componentes [2,1] <- Jssica (componente 2 do grupo 1)
Componentes [1,2] <- Mrcio (componente 1 do grupo 2)
Componentes [2,2] <- Viviane (componente 2 do grupo 2)
Componentes [1,3] <- Leonardo (componente 1 do grupo 3)
Componentes [2,3] <- Pedro (componente 2 do grupo 3)

Temos, portanto, 3 grupos, cada um com 2 componentes. Ftima, por exemplo, o


componente 1 do grupo 2. Estamos tratando, portanto, de uma matriz.
Portanto, uma matriz uma estrutura de dados homognea de duas (ou mais) dimenses.
Uma matriz utiliza variveis indexadas de mais de um ndice.

Agora, passaremos isso aos algoritmos.

Primeiramente, vamos conheces a sintaxe de uma matriz.

<identificador> : vetor [<tamanho1>, <tamanho2>] de <tipo>


Tamanho1 = tamanho da linha da matriz
Tamanho1 = tamanho da coluna da matriz

O exemplo fica ento:

componentes : vetor [1..3,1..2] de literal


1..3 = 3 linhas (3 grupos)
1..2 = 2 colunas (2 componentes por grupo)

Observe que a matriz, no VisuAlg, um vetor com duas dimenses, ou seja, com dois
ndices. Dessa forma, sua declarao feita de forma semelhante declarao do vetor, com a
nica diferena de que devemos informar o tamanho da segunda dimenso. A dimenso 1, no
caso, referente aos grupos (1..3) e a dimenso 2 referente aos nomes dos alunos de cada
grupo (1..2).

Vamos ver o algoritmo, abaixo:

algoritmo matriz grupos


var
componente : vetor[1..3,1..2]de literal //declarao da matriz
cont1, cont2: inteiro //declarao dos contadores
inicio

para cont1 de 1 ate 3 faca


para cont2 de 1 ate 2 faca
escreval (Digite o nome do componente,cont2, do grupo ,cont1, :)
leia (componente [cont1, cont2]) //recebe os dados
fimpara
fimpara //estrutura para exibir os dados recebidos e armazenados

para cont1 de 1 ate 3 faca


escreval (Grupo ,cont1,:) //mostra o nome do grupo
para cont2 de 1 ate 2 faca
escreval (componente[cont1, cont2])
fimpara
fimpara
fimalgoritmo
Observe que declaramos, alm do vetor, dois contadores. Fizemos isso, porque temos
dois ndices (um para contar os grupos e outro para contar os componentes de cada grupo). Se
tivssemos trs ndices, teramos que declarar trs contadores, e assim por diante.

Voc sabe que, para percorrer os elementos do vetor, precisamos fazer isso ndice a
ndice. Por isso, precisamos do contador e de uma estrutura de repetio para armazenar os
dados e outra para exibi-los.
Com as matrizes ocorre o mesmo. Porm, como temos dois ndices, utilizamos duas
estruturas de repetio, uma dentro da outra, para receber os dados, e mais duas para exibi-los.
Se tivssemos trs ndices, teramos que utilizar trs estruturas de repetio para cada uma
dessas atividades.

Atribuio em matrizes:
Assim como com os vetores, os elementos de uma matriz tambm podem ser
inicializados, ou seja, ter seus valores atribudos no momento da declarao.

Ao atribuir valores a um elemento da matriz, fazemos de modo similar aos vetores:

<identificador>[posio] <- <valor>

Exemplos:

componentes[2,3] <- Jos

i <- 2

j <- 1

componentes [i,j] <- Joo

Soluo:
Vamos ver um exemplo de como ficaria um algoritmo de Matriz para declararmos dois
grupos de uma Copa do Mundo, por exemplo.

Veja seguir:

algoritmo "Exemplo de Matriz - Copa do Mundo"

var

componente : vetor[1..2,1..4]de literal //declarao da matriz

cont1, cont2: inteiro //declarao dos contadores

inicio

escreval ("Exemplo de Matriz - Copa do Mundo")

para cont1 de 1 ate 2 faca

para cont2 de 1 ate 4 faca

escreval ("Digite o Nome do Pas ",cont2," do grupo ",cont1," : ")


leia (componente [cont1, cont2]) //recebe os dados

fimpara

fimpara //estrutura para exibir os dados recebidos e armazenados

para cont1 de 1 ate 2 faca

escreval ("Grupo ",cont1,":") //mostra o nome do grupo

para cont2 de 1 ate 4 faca

escreval (componente[cont1, cont2])

fimpara

fimpara

fimalgoritmo
Exerccios:

1. De que forma declarada uma matriz? Explique sua sintaxe e exemplifique.


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________________

2. Analise o algoritmo do exerccio resolvido e o implemente no VisuAlg.


_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________________

3. Execute tambm, o algoritmo dos grupos, que vimos no comeo desta aula.
_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________________

Anda mungkin juga menyukai