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.
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.
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;
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.
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.
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.
NOR
NAND
XOR
XNOR
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.
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.
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:
3. O que um algoritmo?
_________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________
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.
Arquivo de gavetas
representando espaos reservados na
memria de um computador.
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.
<nome_da_varivel> : <tipo_da_varivel>
ou:
<lista_de_variveis> : <tipo_da_varivel>
I nota : real
II idade : inteiro
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.
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:
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.
a. 15
b. 250
c. 38.5
a. F
b. Maria
c. Avenida So Jos
a. Verdadeiro
b. Falso
var
a : inteiro
b : inteiro
c : inteiro
d : lgico
f : literal
inicio
a <- 2 //atribuio de constante
fimalgoritmo
Para resolver os exerccios seguir, pea ao seu professor que lhe mostre o aplicativo
VisuAlg (arquivo auxiliar).
Exerccios:
_________________________________________________________________________
________________________________________________________________________________
___________________________
_________________________________________________________________________
________________________________________________________________________________
___________________________
_________________________________________________________________________
________________________________________________________________________________
____________
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.
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:
Algoritmo que calcula a idade de uma pessoa, dados o ano atual e o ano em que ela
nasceu.
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.
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.
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).
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:
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.
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.
algoritmo "literais"
var
nome: literal
sobrenome: literal
inicio
nome<-"Maria"
escreva ("Digite o sobrenome:")
leia (sobrenome)
escreva (nome,"",sobrenome)
fimalgoritmo
algoritmo "caractere"
var
sexo: caractere
inicio
sexo<-"F"
escreva (sexo)
fimalgoritmo
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.
Operadores aritmticos:
Operadores relacionais:
Operadores lgicos:
Prioridades de Operadores:
Prioridade mais alta: * / div mod
2*4+2.
Se houver uma sequncia de operadores de igual prioridade, a execuo ser na ordem
em que aparecerem as operaes.
Lista de Prioridades:
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)).
Veja o algoritmo abaixo (em portugus estruturado), sobre o que fazer no sbado pela
manh:
INICIO
acordar
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).
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.
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)
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.
Ir praia
FIM
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.
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.
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
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?
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:
fimse
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:
Eu vou praia
Eu vou ao clube
FIMSE
FIMSE
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.
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.
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.
Agora, voc deve comear a utilizar alm do SE, a palavra reservada SENO. (no VisuAlg
usa-se senao)
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.
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
Agora, o algoritmo pode executar uma instruo quando a condio (nota >= 7) for
verdadeira e outra instruo quando a condio for falsa.
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
SENO
FIM SE
FIM
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.
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
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.
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>
<comandos1>
<comandos2>
<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.
De fato, elas podem ser similares. Os dois algoritmos abaixo fazem a mesma coisa:
Deciso Encadeada:
var
opcao: inteiro
inicio
leia (opcao)
se opcao = 1 entao
escreval ("No final de semana iremos ao parque!")
senao
se opcao = 2 entao
senao
se opcao=3 entao
senao
fimse
fimse
fimse
fimalgoritmo
var
opcao: inteiro
inicio
leia (opcao)
escolha opcao
caso 1
caso 2
outrocaso
fimescolha
fimalgoritmo
Execute os dois algoritmos no VisuAlg e veja que, em ambos os casos, a sada a mesma.
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?
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:
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.
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.
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.
Vamos rever o nosso exemplo da mdia, s que desta vez usando a estrutura de repetio
com varivel de controle.
Exemplo:
var
inicio
leia (nota1)
leia (nota2)
fimpara
fimalgoritmo
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).
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.
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.
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.
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.
Pseudocdigo:
<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.
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.
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.
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
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.
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)
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:
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.
Exemplos:
i <- 5
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.
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 > B, ento:
Quando h uma quantidade maior de elementos a serem ordenados, h a necessidade de
tcnicas especficas de ordenao. Vamos conhecer uma delas.
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.
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.
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 //duas estruturas de repetio, pois dois nmeros ser comparados
para j de 1 ate 5 faca
fimalgoritmo
Exerccios:
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.
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:
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:
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).
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.
Exemplos:
i <- 2
j <- 1
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:
var
inicio
fimpara
fimpara
fimpara
fimalgoritmo
Exerccios:
3. Execute tambm, o algoritmo dos grupos, que vimos no comeo desta aula.
_________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
___________________________________________________________________________