Você está na página 1de 148

Lgica de

~
Programacao
,
Faculdade Educacional da Lapa (org.)

Curitiba
2016

Livro _logica_programacao.indb 1

05/04/2016 08:59:29

Ficha Catalogrfica elaborada pela Fael. Bibliotecria Cassiana Souza CRB9/1501

Direitos desta edio reservados Fael.


proibida a reproduo total ou parcial desta obra sem autorizao expressa da Fael.

fael
Direo de Produo
Coordenao Editorial
Reviso
Projeto Grfico
Capa

Raquel Andrade Lorenz


FabriCO
Sandro Niemicz
Katia Cristina Santos Mendes

Imagem capa

Shutterstock

Diagramao

Katia Cristina Santos Mendes

Reviso

Livro _logica_programacao.indb 2

Fernando Santos de Moraes Sarmento

Patricia Rucker De Bassi

05/04/2016 08:59:31

Sumrio

1. Fundamentos da Lgica para Programao|7


2. Formas de representao de um algoritmo | 21
3. Tipos de dados: variveis e constantes | 35
4. Operadores e expresses|45
5. Estrutura de seleo simples e composta | 55
6. Estrutura de seleo encadeada | 69
7. Estrutura de repetio com teste no incio | 87
8. Estrutura de repetio com teste no final | 99
9. Estrutura de repetio com varivel de controle | 111
10. Estruturas de Dados | 129
11. Modularizao | 137
Referncias | 147

Livro _logica_programacao.indb 3

05/04/2016 08:59:32

Livro _logica_programacao.indb 4

05/04/2016 08:59:32

Apresentao

Prezado aluno,
A arte e cincia de programar computadores algo fascinante.
Podemos definir esta atividade como emprestar um pouco de nossa
inteligncia ao computador. Quando o computador trabalha
como se nossa inteligncia emprestada a ele estivesse trabalhando. E
para isto precisamos aprender como se comunicar com ele.
O conhecimento lgico essencial para qualquer pessoa que
deseja iniciar a carreira na rea de desenvolvimento de sistemas,
independente do paradigma da linguagem ou do sistema que iremos desenvolver. E este conceito bastante necessrio na lgica de
programao para obtermos retorno til destas mquinas maravilhosas que so os computadores.

Livro _logica_programacao.indb 5

05/04/2016 08:59:33

A lgica de programao aborda como se escreve um programa de computador, isto , como se escreve um algoritmo. Um algoritmo nada mais
do que um manual de instruo, uma receita, uma sequencia lgica de aes
que devem ser realizadas para se atingir um objetivo. Quando o algoritmo
aplicado na rea da computao ele faz parte da lgica de programao.
Nesta disciplina iremos aprender como se escreve um algoritmo, isto , como
organizar nosso pensamento para dizer ao computador o que fazer. Durante esta
disciplina iremos tambm aprimorar a forma de escrever os algoritmos, utilizando
a lgica de programao para entender o melhor jeito de escrev-los. Nosso objetivo final que o computador interprete corretamente nosso algoritmo e retorne
a resposta correta do problema a ser resolvido. Por isso as atividades prticas so
imprescindveis para aprimorarmos a lgica de programao.
Para isto veremos os conceitos bsicos de logica de programao e as
formas mais utilizadas para a representao de algoritmos. Abordaremos os
operadores lgico-matemticos e relacionais necessrios para a construo de
expresses. Iniciaremos a construo de algoritmos sequenciais, aprendendo
os comandos bsicos de entrada e sada de dados.
Os comandos de seleo sero apresentados a seguir, abordando os desvios condicionais simples, composto e encadeado. Conheceremos tambm os
diferentes comandos de repetio e suas aplicabilidades.
Iremos entender como criar e manipular estruturas de dados simples
como vetores e registros. E por fim vamos aprender a criar funes e como
melhor utiliz-las.
Em suma, vamos aprender um mtodo para nos comunicar com a
mquina da melhor forma buscando t-la cada vez mais como aliada na soluo
de problemas que auxiliem o ser humano tanto social como economicamente.
Bons estudos!
Patricia Rucker de Bassi
Coordenadora dos Cursos de Tecnologia em Anlise e Desenvolvimento de
Sistemas e Tecnologia em Gesto de TI

Livro _logica_programacao.indb 6

05/04/2016 08:59:33

1
Fundamentos da
Lgica para Programao

Introduo
Sem dvida, o computador uma das maiores invenes do
homem e tem se mostrado uma ferramenta verstil, rpida e segura
para a manipulao de informaes.
Para muitos essa inveno responsvel pela intensificao
da mecanizao e descobertas cientficas na vida moderna. Esta afirmao d um carter autnomo ao computador, como se o mesmo
fizesse tudo sozinho. Entretanto cabe esclarecer que o computador
uma grande ferramenta de trabalho, servindo de auxlio para as
mais diversas atividades. Porm esta mquina no criativa e nem
inteligente, na verdade, apenas reproduz o que lhe ordenado por
meio de seus programas de computador.
Os programas de computador so construdos para resolver
algum problema especfico e a soluo adotada sempre uma soluo

Livro _logica_programacao.indb 7

05/04/2016 08:59:34

Lgica de programao

lgica. E essa soluo formalizada em um algoritmo, que podemos entender


como uma receita de bolo a ser adotada para a soluo do problema. A Lgica
para Programao ento o passo inicial para a construo de um programa
de computador.
Por tratar de questes relacionadas ao raciocnio natural do ser humano,
esta aula no apresenta pr-requisitos formais, entretanto cabe ressaltar que
ser pr-requisito para as demais aulas deste caderno. Para voc alcanar o
objetivo proposto, ser necessrio apenas disciplinar o seu modo de pensar,
evitando extrapolar os limites de abstrao, ou seja, focar apenas o problema
a ser resolvido, uma vez que esse material dar a voc embasamento terico
para compreender como o pensamento lgico pode ser representado e reproduzido em um algoritmo computacional.
Esperamos que, ao final desta aula, voc seja capaz de:
22

entender como a lgica formal e matemtica aplicada na Programao de Computadores;

22

compreender a importncia da construo de algoritmos computacionais.

Por isso, nesta aula, temos trs questes a serem respondidas: o que a
Lgica? Como a Lgica aplicada Programao de Computadores? O que
um Algoritmo? Vamos comear explicando os princpios bsicos do pensamento lgico.

1.1 O que Lgica?


No h consenso quanto definio da Lgica. Alguns autores a definem como o estudo dos processos vlidos e gerais pelos quais atingimos a
verdade, outros como a cincia das leis do pensamento, ou somente como o
estudo dos princpios da inferncia vlida. Esta pluralidade de definies nos
d conta da diversidade de estudos que so abrangidos pela Lgica.
No seria cabvel discutir sobre lgica sem lanar mo da Filosofia.
Mesmo no querendo aprofundar no mrito filosfico, necessrio revisar as
bases filosficas da lgica a fim de compreender a sua origem e funo.
8

Livro _logica_programacao.indb 8

05/04/2016 08:59:34

Fundamentos da Lgica para Programao

A Lgica foi criada por Aristteles, no sculo IV a.C., como uma cincia autnoma que se dedica ao estudo dos atos do pensamento conceito,
juzo, raciocnio, demonstrao do ponto de vista da sua estrutura ou forma
Lgica, sem ter em conta qualquer contedo material. por esta razo que
essa Lgica Aristotlica tambm conhecida por Lgica Formal.
Em contraposio a esse conceito de Lgica Formal, surgiu um outro o
de Lgica Material para designar o estudo do raciocnio no que ele depende
quanto ao seu contedo ou matria.
Essa distino entre Lgica Formal e Lgica Material nos permite perceber porque: tendo em conta a sua forma, o raciocnio correto ou incorreto
(vlido ou invlido). Mas se atendermos sua matria, a concluso pode ser
verdadeira ou falsa.
Para exemplificar, tomemos como exemplo as seguintes sentenas de
raciocnio lgico:
I. nenhum homem sabe danar;
II. este danarino homem;
III. logo, este danarino no sabe danar.
Este raciocnio formalmente correto, uma vez que a concluso est corretamente deduzida. Mas a concluso falsa, uma vez que falsa a primeira
proposio (Nenhum homem sabe danar). Estamos perante um raciocnio
que tem validade formal, mas no tem validade material. Logo temos que
concluir que falso.
Desde a sua criao o estudo da Lgica tem registrado enormes aperfeioamentos, sobretudo a partir de meados do sculo XIX. costume dividir-se a sua histria em trs perodos: Perodo Clssico, Perodo Moderno e Perodo Contemporneo.
A Lgica Matemtica (desenvolvida no Perodo Moderno) exerceu
uma influncia decisiva em muitos domnios, principalmente na Eletrnica,
Ciberntica, Informtica e Inteligncia Artificial.
Mesmo com essa multiplicidade de conceitos, a Lgica pode ser vista
como uma cincia que procura encontrar as leis em relao s quais o nosso
pensamento deve obedecer para que possa ser considerado vlido.
9

Livro _logica_programacao.indb 9

05/04/2016 08:59:34

Lgica de programao

No contexto da informtica, a Lgica de Programao a tcnica de


encadear pensamentos para atingir determinado objetivo previamente definido. Ou seja, a tcnica que nos permite expressar o que deve ser feito e em
que ordem para que a soluo seja alcanada.

1.2 A Lgica no dia-a-dia


Sempre que pensamos estamos exercitando a nossa lgica ou ilgica
(no-lgica). Toda vez que falamos tambm estamos fazendo uso da lgica
uma vez que a fala apenas uma representao do que pensamos.
Quantas e quantas vezes, em um quotidiano e rotineiro dilogo, produzimos afirmaes do gnero: Isso lgico!, ...no tem lgica alguma. ou
No vejo lgica nisso!.
Saber o que lgico, ou saber identificar uma estrutura lgica, em um
contexto lingstico, algo que nos transmitido por meio da nossa educao.
Alm dessa lgica lingstica, aplicamos outros tipos de raciocnio lgico
em nosso dia-a-dia. Um bom exemplo seria pensar o porqu no colocamos
nossa mo em uma superfcie quente. Parece lgico, no?! Nosso crebro rapidamente processa sentenas lgicas como:
I.

a pele humana no suporta altas temperaturas (ou algo mais simples como queimei minha pele no ltimo contato com uma superfcie quente);

II. a minha mo coberta de pele;


III. logo, a minha mo no suporta altas temperaturas.
Esse tipo de pensamento lgico se repete vrias e vrias vezes ao dia. E
graas Lgica nos mantemos longe de problemas.
Isso deixa claro que ns pensamos de forma lgica o tempo todo.
No entanto, temos uma grande dificuldade em formalizar este raciocnio
lgico. Um exemplo disso so aquelas situaes nas quais temos de explicar a algum algo a ser feito. Muitas vezes, j fizemos essa mesma tarefa
inmeras vezes e, para ns, ela extremamente lgica. Porm encontramos dificuldades em organizar e relatar o conjunto de passos que devero
10

Livro _logica_programacao.indb 10

05/04/2016 08:59:34

Fundamentos da Lgica para Programao

ser realizados. Isso acontece porque no somos acostumados a formalizar


nosso pensamento.
Para o computador, a descrio de cada passo e seu correto encadeamento fundamental para que o programa funcione corretamente e que a
soluo seja alcanada. Por isso costuma-se dizer que o computador nunca
erra, so as pessoas que erram. Nesse caso, so as pessoas que formalizaram a
sua Lgica de Programao de maneira incorreta.
Nesse momento de nossos estudos, voc j deve ter percebido que a
Lgica para Programao no algo difcil ou impossvel, uma vez que apenas uma tcnica para dizer ao computador o que deve ser feito para atingir a
soluo de um determinado problema.

1.3 Algoritmos
A construo de algoritmos o primeiro passo para a Programao de
Computadores. uma das tarefas mais complexas da programao de computadores, mas tambm uma das mais desafiadoras e empolgantes.
Um algoritmo pode ser definido como uma seqncia de passos que visa
a atingir um objetivo definido. Assim podemos dizer que um algoritmo a
organizao do pensamento para a soluo de um problema, portanto uma
representao da lgica.
Um algoritmo, na Linguagem da Programao de computadores, representa uma seqncia de instrues que o computador deve seguir a fim de
atingir um objetivo definido. Cada instruo , na verdade, uma informao
que indica ao computador o que deve ser feito. J o programa consiste na codificao precisa do algoritmo em uma linguagem de programao especfica.
importante lembrar que a ordem na qual as instrues sero executadas de fundamental importncia para a efetividade da soluo algortmica.
Para entendermos melhor, imaginemos como problema a ser resolvido o preparo de uma carne assada. bvio que a sua soluo envolve, entre outras
tarefas menores, limpar a carne, temper-la e lev-la ao forno. Mas tambm
obvio que se a ordem dessas instrues for alterada certamente no iremos
atingir a soluo para o problema. Imagine se levssemos a carne ao forno e a
temperssemos somente depois!
11

Livro _logica_programacao.indb 11

05/04/2016 08:59:34

Lgica de programao

O algoritmo no a soluo do problema, mas uma forma de solucion-lo. Assim, para um mesmo problema, podemos criar diferentes algoritmos
usando diferentes abordagens. Em outras palavras, podemos usar diferentes
seqncias de instrues para resolver o mesmo problema. Em alguns casos,
at mesmo diferentes instrues. Quase sempre existe mais do que uma
maneira de resolver um problema, e essa escolha nossa. Qual ser ento a
melhor das escolhas?
Dados dois ou mais algoritmos para resolver o mesmo problema, sensato escolher aquele que obtm uma soluo no menor tempo possvel e que
utiliza o menor espao para a representao dos dados do problema.
Apesar de sua nomenclatura pouco usual, usamos algoritmos em vrias
situaes cotidianas. Um exemplo comum so as receitas culinrias. Em uma
receita culinria descrevemos todos os ingredientes que faro parte do prato,
suas quantidades, a ordem em que sero usadas, suas transformaes (modo
de preparo) at o preparo completo do prato. Dessa forma possvel garantir
que a aplicao correta do algoritmo resulte no prato desejado.
importante esclarecer desde j que um algoritmo independe da linguagem de programao que ser utilizada. Na verdade, uma vez que o algoritmo
seja desenvolvido de forma correta, poder ser implementado em diferentes
linguagens de programao sem maiores alteraes.
A construo de um algoritmo deve observar todos os passos necessrios
execuo da atividade e evitar que passos desnecessrios sejam executados
ou que passos interdependentes sejam executados fora de ordem.
Durante sua construo, um algoritmo constantemente revisto a fim
de identificar novas situaes ou excees a serem tratadas.
Quando temos um problema e precisamos construir um algoritmo para
resolv-lo, devemos passar pelas seguintes etapas:
a.

definir o problema;

b. realizar um estudo da situao atual e verificar qual(is) a(s) forma(s)


de resolver o problema;
c.

terminada a fase de estudo, descrever o algoritmo que dever, a


princpio, resolver o problema;
12

Livro _logica_programacao.indb 12

05/04/2016 08:59:34

Fundamentos da Lgica para Programao

d. analisar junto aos usurios se o problema ser resolvido. Se a soluo


no foi encontrada, ou surgirem excees a serem tratadas, dever
ser retornado para a fase de estudo para descobrir onde est a falha.
A fim de entender como um algoritmo construdo, vamos analisar a
construo de um algoritmo para o seguinte problema clssico, discutido por
vrios autores, inclusive em Forbellone e Eberspcher (2005, p. 4), por ser
um problema cotidiano e que no exige conhecimentos especficos: trocar
uma lmpada queimada. A partir desse exemplo, ser possvel evidenciar o
processo de encadeamento de idias at a soluo final do problema.
Inicialmente, poderamos construir o seguinte algoritmo bsico para
solucionar o problema proposto:
I.

pegue uma escada;

II. posicione-a embaixo da lmpada;


III. busque uma lmpada nova;
IV. suba na escada;
V. retire a lmpada velha;
VI. coloque a lmpada nova.
Se examinarmos esse algoritmo, veremos que ele permite solucionar o problema da troca de uma lmpada queimada. Entretanto, se considerarmos as situaes nas quais o algoritmo poder ser aplicado, perceberemos que o mesmo no ir
tratar a situao em que a lmpada no esteja queimada. Na verdade, mesmo que a
lmpada esteja funcionando, esse algoritmo ir troc-la por uma nova.
Para solucionar esse problema, necessrio alterar o algoritmo de modo
que a lmpada seja testada antes de efetuar a troca. Para isso, basta ligar o
interruptor e verificar se a lmpada est funcionando ou no. Intuitivamente,
faramos a seguinte alterao no algoritmo:
I.

pegue uma escada;

II. posicione-a embaixo da lmpada;


III. busque uma lmpada nova;
IV. ligue o interruptor;
13

Livro _logica_programacao.indb 13

05/04/2016 08:59:34

Lgica de programao

V. se a lmpada no acender, ento:


f.

suba na escada;

g. retire a lmpada velha;


h. coloque a lmpada nova.
primeira vista, o algoritmo agora est correto. Ao introduzirmos um
teste seletivo, uma condio, no passo V, impomos que os passos a, b e c s
devero ser executados se o resultado do teste for verdadeiro. Nesse caso, se
a lmpada no acender. Os testes seletivos nos permitem tratar as excees e
garantir que determinados passos no sejam executados em vo, otimizando
o algoritmo.
Esse mesmo algoritmo, apesar de funcional, ainda pode ser otimizado.
Se o reexaminarmos, perceberemos que, no caso de a lmpada no estar queimada, teremos executado os passos I, II e III em vo.
Para tratar essa situao, bastaria reposicionar os passos I, II e III para
que ocorram somente aps o teste seletivo, uma vez que s sero teis caso
a lmpada tenha de ser realmente trocada, ou seja, que ela esteja queimada.
Desse modo, o algoritmo seria novamente alterado, ficando:
ligue o interruptor;
se a lmpada no acender, ento:
a) pegue uma escada;
b) posicione-a embaixo da lmpada;
c) busque uma lmpada nova;
d) suba na escada;
e) retire a lmpada velha;
f ) coloque a lmpada nova.
Apesar de parecer completo, ou seja, permitindo solucionar o problema
da troca da lmpada queimada, este algoritmo no leva em considerao a
possibilidade de a nova lmpada no funcionar. Pois, nesse caso, seria necessrio repetir os passos e e f. Da surge a seguinte questo: pode ser que a outra
14

Livro _logica_programacao.indb 14

05/04/2016 08:59:34

Fundamentos da Lgica para Programao

lmpada tambm no funcione, sendo necessrio repetir mais uma vez esta
seqncia de passos. Ento, quando deveremos parar de repetir?
Para toda repetio em um algoritmo devemos estabelecer uma condio de parada, ou seja, um limite para a quantidade de vezes em que os passos
devero ser repetidos. Caso no seja estabelecido esta condio de parada
ocorre o que chamamos de lao infinito mais conhecido por sua designao
em ingls loop infinito no qual os passos se repetem indefinidamente.
No caso do nosso algoritmo, uma condio de parada adequada seria repetir
enquanto a lmpada no acender. Assim o algoritmo ficaria da seguinte forma:
VIII. ligue o interruptor;
IX. se a lmpada no acender, ento:
a.

pegue uma escada;

b. posicione-a embaixo da lmpada;


c.

busque uma lmpada nova;

d. suba na escada;
e.

retire a lmpada velha;

f.

coloque a lmpada nova;

g. enquanto a lmpada no acender:


1. retire a lmpada;
2. coloque outra lmpada.
O passo g apresenta o que chamamos de fluxo repetitivo no qual um
conjunto de passos pode se repetir n vezes.
Reflita

No se aprende algoritmos copiando ou estudando outros


algoritmos j feitos. Para aprender algoritmos, necessrio constru-los e test-los.

15

Livro _logica_programacao.indb 15

05/04/2016 08:59:34

Lgica de programao

1.4 Construindo algoritmos


Antes de construir um algoritmo, necessrio entender o modelo de
processamento geral de um programa de computador. Este modelo representado na figura 1.
Figura 1. Modelo geral de processamento de um programa de computador

ENTRADAS
PROCESSAMENTO
SADA
Resultados do
Dados iniciais
Regras do
processamento ou
para a resoluo
problema
do problema
soluo para o problema
Exemplo: Multiplicao de dois nmeros inteiros
A = 25
RESULTADO = A*B
75
B=3

Todo programa fundamentalmente opera sobre um conjunto de entrada


que representa os dados iniciais necessrios resoluo do problema. Essas
entradas so ento processadas a partir de um conjunto de regras j definidas
e, ao final, o programa gera um conjunto de sadas que representa o resultado
do processamento.
Assim, antes de iniciar a construo de um algoritmo, recomendado
seguir os seguintes passos:
1. identificao do problema: determinar o que se quer resolver ou
qual objetivo a ser atingido. Esse passo fundamental para a resoluo do problema, pois no h como dizer ao computador o que
fazer para resolver o problema se nem sequer sabemos defini-lo;
2. identificao dos dados de entrada: determinar as informaes
necessrias para os clculos que se seguiro;
3. identificao dos dados de sada: nesse passo so definidas as
informaes que devero ser geradas como resultado do processa 16

Livro _logica_programacao.indb 16

05/04/2016 08:59:35

Fundamentos da Lgica para Programao

mento. neste passo que devemos definir inclusive o formato da


sada como, por exemplo, se ser em tela ou na forma de relatrio
impresso;
4. identificao das regras e limitaes do problema ou das limitaes do agente executante: nesse passo devemos identificar claramente quais sero as regras a serem aplicadas na soluo. tambm
nesse passo que devemos definir as limitaes para o problema,
uma vez que o algoritmo pode ter de cobrir apenas parte de um
problema mais geral. Ainda possvel que seja necessrio definir
as limitaes do agente executante, como, por exemplo, definir as
limitaes em funo de pouca memria RAM do computador em
que o programa ir rodar;
5. definio dos processamentos a serem executados a fim de
transformar as entradas em sadas: nesse ponto deve ser
determinada a seqncia de aes ou instrues que leve soluo
do problema, respeitando-se as regras j definidas;
6. construo do algoritmo: utilizando uma das formas de representao de algoritmos que iremos estudar nas prximas aulas;
7. teste da soluo: execuo de todas as aes do algoritmo, seguindo
o fluxo estabelecido para verificar se ele est realmente gerando os
resultados esperados ou detectar possveis erros em sua descrio.
Ao seguir esses passos, garantiremos que o algoritmo desenvolvido ser
executado corretamente pelo computador.

Resumindo
Nesta aula, foram discutidos os princpios da programao para computadores. Foi apresentado o conceito de Lgica para Programao que , em
essncia, uma extenso da lgica matemtica.
Um dos conceitos mais importantes discutidos o conceito de algoritmo. por meio do algoritmo que informamos ao computador o que dever
ser feito. Vale lembrar que o encadeamento das instrues que compem o
algoritmo de fundamental importncia para seu correto funcionamento.
17

Livro _logica_programacao.indb 17

05/04/2016 08:59:35

Lgica de programao

Atividades
1. Leve em considerao os estudos que realizamos nesta aula e marque
com V (Verdadeiro) ou F (Falso) as alternativas a seguir.
() A lgica para programao torna o computador capaz de realizar
tarefas de forma autnoma e criativa, sem a necessidade da interferncia humana.
() Um algoritmo representa uma seqncia lgica de instrues.
() Cada instruo em um algoritmo faz com que o computador execute uma ou um conjunto de tarefas especficas.
() Para todo problema somente possvel criar um nico algoritmo
correto.
() Uma vez que um algoritmo criado, no deve mais ser modificado.
() Antes de iniciar a construo de um algoritmo, preciso definir a
linguagem de programao a ser usada.
2. Comente a importncia dos dados de entrada, do processamento e dos
dados de sada para a construo de algoritmos.

Comentrio das atividades


Na atividade 1, caso voc tenha lido com ateno o material desta aula,
percebeu que a primeira alternativa obviamente falsa, uma vez que a lgica para
programao permite apenas determinar a seqncia de passos a ser seguida para
a soluo de um problema. Alm disso, como foi discutido, o computador apenas
segue essas instrues sem alteraes, no demonstrando comportamento criativo
ou autnomo. A segunda opo verdadeira, visto que o algoritmo descreve uma
seqncia ordenada ou lgica das tarefas que o computador deve desempenhar. A
terceira opo tambm verdadeira, pois uma instruo representa uma ou um
conjunto de tarefas especficas que o computador dever desempenhar. A quarta
opo falsa, uma vez que um problema pode apresentar diferentes solues que
daro origem a diferentes algoritmos. A quinta opo falsa, pois um algoritmo
deve sempre ser reexaminado a fim de identificar erros ou situaes inesperadas e,
uma vez identificado algum desses casos, o algoritmo dever ser modificado a fim
18

Livro _logica_programacao.indb 18

05/04/2016 08:59:35

Fundamentos da Lgica para Programao

de tratar a situao levantada. A sexta e ltima opo falsa, pois um algoritmo


independe da linguagem de programao que ser mais tarde utilizada.
Para realizar a atividade 2, com base no que foi discutido nesta aula,
voc deve saber que de fundamental importncia identificar corretamente
os dados de entrada, o processamento e os dados de sada de um algoritmo.
Sem conhecer os dados de entrada, corremos o risco de no possuir dados suficientes para uma soluo do problema. Alm disso correremos o risco de desconsiderar algum detalhe importante sobre o problema que pode ser revelado
por algum dado de entrada ignorado. J os processamentos a serem realizados
sobre os dados de entrada so igualmente importantes. Eles nos diro o que
fazer ao longo do algoritmo. Alm disso, com os resultados dos processamentos, j poderemos predizer alguns dos dados de sada do algoritmo. Os dados
de sada so importantes, pois representam o resultado final do algoritmo e
esto diretamente associados medida de eficcia do algoritmo. Se conhecermos os dados de sadas, saberemos o que se quer do algoritmo.
Ao realizar as atividades com sucesso, voc teve oportunidade de alcanar os objetivos propostos para esta aula de entender como a Lgica Formal e
Matemtica aplicada na Programao de Computadores e de compreender
a importncia da construo de algoritmos computacionais.

Na prxima aula
Dando continuidade ao estudo da Lgica para Programao, estudaremos como a lgica de programao, em sua forma algortmica, pode ser
representada. Estudaremos os mtodos mais utilizados na prtica: Descrio
Narrativa, Fluxograma e Pseudocdigo.

19

Livro _logica_programacao.indb 19

05/04/2016 08:59:35

Lgica de programao

20

Livro _logica_programacao.indb 20

05/04/2016 08:59:35

2
Formas de
representao
de um algoritmo

Introduo
Com o passar do tempo e de estudos dos algoritmos, foram
desenvolvidas inmeras formas de se representar um algoritmo de
modo a facilitar o seu entendimento e, mais tarde, a sua traduo
para uma linguagem de programao especfica. Entre as formas
de representao de algoritmos mais conhecidas, podemos citar a
Descrio Narrativa, o Fluxograma Convencional e o Pseudocdigo
- tambm conhecido como Linguagem Estruturada ou Portugol.
Essas trs formas sero objeto de estudo desta aula.
Uma representao clara e fcil de ser seguida facilita o desenvolvimento, depurao (correo de erros) e subseqente transformao do algoritmo em um programa de computador.

Livro _logica_programacao.indb 21

05/04/2016 08:59:36

Lgica de programao

Uma vez que esta aula trata da representao de um algoritmo necessrio que voc tenha entendido o conceito de algoritmo apresentado na aula
anterior. Caso haja dvidas, recorra ao material e entre em contato com a
web-tutoria.
Esperamos que, ao final desta aula, voc seja capaz de:
22

representar um algoritmo usando Descrio Narrativa;

22

representar um algoritmo usando Fluxograma;

22

representar um algoritmo usando Pseudocdigo.

2.1 Formas de representao


O domnio das formas de representao de algoritmos de fundamental importncia tanto para Analistas de Sistemas que so responsveis por
mapear as necessidades dos clientes para a forma algortmica, quanto para
Programadores, que iro transformar os algoritmos em programas.
Na Linguagem Narrativa, os algoritmos so expressos diretamente em
linguagem natural no portugus, por exemplo. J o Fluxograma (ou Diagrama de Fluxo) uma representao grfica que emprega formas geomtricas padronizadas para indicar as diversas aes e decises que devem ser executadas para resolver o problema. O Pseudocdigo emprega uma linguagem
intermediria entre a linguagem natural e uma linguagem de programao
para descrever os algoritmos.
No existe consenso entre os especialistas sobre qual a melhor maneira
de representar um algoritmo. Atualmente a maneira mais comum de representar algoritmos por meio de pseudocdigo. Essa forma de representao
tem a vantagem de que o algoritmo pode ser escrito de uma forma que est
prxima de uma linguagem de programao de computadores, facilitando
a criao do programa.
Existem outras formas de representao conhecidas, porm pouco utilizadas, como o Diagrama de Chapin ou Nassi-Shneiderman (N-S), que apresenta a soluo do problema por meio de um diagrama de quadros com uma
viso hierrquica e estruturada. Essa forma no muito utilizada devido sua
dificuldade em representar a recursividade.
22

Livro _logica_programacao.indb 22

05/04/2016 08:59:36

Formas de representao de um algoritmo

2.2 Descrio Narrativa


Nessa forma de representao, os algoritmos so expressos diretamente
em linguagem natural.
Esta forma de representao a mesma utilizada em algoritmos no-computacionais, como receitas culinrias. Dessa forma as instrues so descritas livremente, entretanto devemos tomar alguns cuidados para manter a
clareza do algoritmo.
Para escrever um algoritmo, precisamos descrever a seqncia de instrues, de maneira simples e objetiva. Para isso devemos obedecer algumas
regras bsicas:
22

usar somente um verbo por frase;

22

imaginar que voc est desenvolvendo um algoritmo para pessoas


que no trabalham com informtica;

22

usar frases curtas e simples;

22

ser objetivo;

22

procurar usar palavras que no tenham sentido dbio.

Um exemplo de representao de um algoritmo usando Descrio Narrativa para o problema de clculo da mdia de um aluno ficaria:
1. obter as notas da primeira, segunda e terceira provas;
2. calcular a mdia aritmtica entre as trs notas;
3. se a mdia for maior ou igual que 7,00, o aluno foi aprovado,
seno, foi reprovado.
No entanto, na prtica, essa representao pouco usada porque o uso
da linguagem natural d muitas vezes oportunidade a ms interpretaes,
ambigidades e imprecises. Por esse motivo, no daremos maior ateno a
este tipo de representao.

2.3 Fluxograma
Essa a forma grfica de representar um algoritmo mais conhecida e
utilizada. O fluxograma nos permite mostrar graficamente a lgica de um
algoritmo, enfatizando passos individuais e o fluxo de execuo.
23

Livro _logica_programacao.indb 23

05/04/2016 08:59:36

Lgica de programao

intermediria descrio narrativa e ao pseudocdigo, pois menos


imprecisa que a primeira e, no entanto, no se preocupa com detalhes de implementao do programa como a segunda, como, por exemplo, o tipo de variveis utilizadas.
Para muitos autores, o fluxograma a forma universal de representao,
pois se utiliza de figuras geomtricas padronizadas para ilustrar os passos a
serem seguidos para a resoluo de problemas. E o ideal que um algoritmo
seja entendido da mesma forma por diferentes pessoas que o utilizarem.
Para que um fluxograma seja interpretado corretamente, necessrio entender sua sintaxe e sua semntica. Sobre sintaxe de um fluxograma,
devemos entender como a correta utilizao dos seus smbolos grficos e das
expresses que podem ser escritas no seu interior. J a semntica diz respeito
ao significado de cada smbolo, ou seja, como interpret-lo corretamente.
Com isso possvel entender e simular o algoritmo representado.
A interpretao de um fluxograma, via de regra, se d de cima para baixo
e da esquerda para a direita. importante seguir essa regra, pois garante que
o fluxo de instrues seja entendido corretamente.
Por se tratar de uma representao grfica, o fluxograma no se mostra
adequado para a representao de algoritmos maiores e/ou mais complexos.
Nesses casos, comum o uso do pseudocdigo como forma de representao.

2.3.1 Simbologia bsica de um fluxograma


Estes so alguns dos smbolos mais conhecidos e utilizados ao longo dos
anos pelos profissionais da rea de informtica para a descrio de algoritmos
usando fluxograma e so descritos na norma internacional ISO 5807/1985.
Inicio

Terminador
Varivel

Entrada Manual

Smbolo utilizado como ponto para indicar o incio e/ou


fim do fluxo de um programa. importante salientar que um programa
deve possuir apenas um terminador de INCIO e outro de FIM.
Utilizado para ler os dados necessrios ao programa. Usado para
representar dados, independente do tipo de mdia, que sejam
fornecidos manualmente, em tempo de processamento. Permite representar a entrada de dados via teclado, mouse, leitor de
cdigo de barras ou qualquer outro dispositivo de entrada.

24

Livro _logica_programacao.indb 24

05/04/2016 08:59:36

Formas de representao de um algoritmo

Dados

Utilizado para representar dados tanto de entrada quanto de sada


j definidos no prprio programa, como valores de constantes.

Dados
Condio
SIM

NO

Deciso
Doc

Documento

Indica a deciso que deve ser tomada, indicando a possibilidade


de desvios para diversos outros pontos do fluxo, dependendo do
resultado de comparao de uma condio estabelecida. Essa estrutura permite controlar o fluxo de instrues em um fluxograma.
Utilizado para representar a utilizao de algum documento
especfico contendo dados necessrios ao algoritmo.

Dados

Dados Armazenados
Varivel ou
mensagem

Exibio
Operaes

Preparao

Referncia
de Pgina

Referncia fora
da Pgina

Usado para indicar dados que esto ou devero ser armazenados pelo algoritmo.

utilizado quando se deseja que os dados sejam impressos. Representa um dispositivo de sada como o monitor ou a impressora.

Refere-se a um determinado grupo de operaes no includas da diagramao.

Utilizado quando preciso particionar o diagrama. Quando ocorrer mais de uma partio, colocada uma letra ou nmero dentro
do smbolo de conexo para identificar os pares de ligao.

Especfico para indicar conexo do fluxo em outra pgina.

25

Livro _logica_programacao.indb 25

05/04/2016 08:59:36

Lgica de programao

Seta de orientao de fluxo


Processo

Processamento

Permite indicar o sentido do fluxo de dados. Serve exclusivamente para conectar os smbolos ou blocos existentes.
Smbolo ou bloco que se utiliza para indicar clculos (algoritmos) a efetuar, atribuies de valores ou qualquer manipulao
de dados que tenha um bloco especfico para sua descrio.

2.3.2 Construindo um fluxograma


Para entendermos como um fluxograma criado para representar um
algoritmo, vamos discutir passo-a-passo a criao de um fluxograma para
representar um algoritmo que permita calcular a mdia final de um aluno
considerando que todo aluno realiza trs provas no semestre. O aluno
considerado aprovado se a sua mdia for igual ou superior a 7,00, seno
considerado reprovado.
Antes de iniciarmos a construo do fluxograma, devemos formalizar o
algoritmo para solucionar o problema, de acordo com o que estudamos na
primeira aula.
evidente que este um problema de pouca complexidade e que envolve
poucas regras. Para resolver esse problema, fica claro que precisaremos conhecer as trs notas do aluno, que devero ser informadas pelo usurio e, em
seguida, calcular a mdia por meio do clculo de mdia aritmtica simples
para a qual devemos aplicar a frmula mdia = (nota1+nota2+nota3)/3. Aps
o clculo da mdia, necessrio testar se o seu valor igual ou superior ao
valor 7,00 e, nesse caso, dever ser listada a mensagem Aprovado. Em caso
contrrio, dever ser listada a mensagem Reprovado. Agora que conhecemos o algoritmo, possvel represent-lo como um fluxograma.
Inicialmente a forma mnima de um fluxograma dada pela juno de
seus terminadores de incio e fim. Na verdade, essa construo mnima executa absolutamente nada. Os smbolos de INICIO e FIM, na verdade, no
representam instrues de fato, mas so marcadores essenciais que permitem
a correta interpretao do fluxograma.
26

Livro _logica_programacao.indb 26

05/04/2016 08:59:37

Formas de representao de um algoritmo

Entretanto, para nosso algoritmo, ser necessrio ler os dados de entrada,


nesse caso, as trs notas do aluno. Com isso, necessrio expandir o nosso fluxograma. Por motivos didticos, para cada varivel foi utilizado um smbolo
de entrada manual. Na prtica, entretanto, comum a utilizao de apenas
um smbolo contendo todas as variveis a serem lidas.
De posse do valor de cada uma das trs notas, possvel processar a
mdia do aluno. Vamos representar esse processamento utilizando o smbolo
de processo, como mostra a figura 1. Em um fluxograma, devemos sempre
representar a atribuio de valor a uma varivel por meio do smbolo ,
na forma varivel valor. Em um fluxograma, a expresso varivel = valor
representa o teste se o valor da varivel igual ao valor informado do lado
direito da expresso e no uma atribuio.
Figura 1. Exemplo de algoritmo representado nas trs formas mais comuns
Clculo da Mdia de dois nmeros inteiros positivos mdia = ( a + b)/2
Linguagem
Narrativa
Incio de Programa
Leia os valores a e b
Se a e b forem maior do que zero

Calcula o valor da mdia a
partir da frmula [mdia =
(a + b)/2]

Imprime o valor da mdia
Seno

Imprime Os valores devem
ser positivos
Fim do programa

Pseudocdigo

Fluxograma
Inicio

Incio de Programa

Leia a

Leia a,b
Se a > 0 e b > 0 ento

Leia b
a>0 e b>0
SIM

NO

Mdia = (a+b)/2
Os valores
devem ser
positivos

mdia

Calcula o valor da mdia a


partir da mdia = (a + b)/2

Imprime o valor da mdia

Seno

Imprime Os valores devem


ser positivos

Fim se
Fim do programa

Fim

2.4 Pseudocdigo
Esse nome uma aluso posterior implementao em uma Linguagem
de Programao, ou seja, quando formos programar em uma linguagem de
programao especfica.
27

Livro _logica_programacao.indb 27

05/04/2016 08:59:37

Lgica de programao

O pseudocdigo um cdigo de escrita em que se utilizam termos


convencionais para indicar as instrues do programa. Esses termos so
geralmente uma mistura de palavras da nossa linguagem natural com palavras e notaes tpicas das linguagens de programao.
A utilizao de pseudocdigo permite ao programador expressar
as suas idias sem ter de se preocupar com a sintaxe da linguagem de
programao. Para isso, so utilizadas primitivas (comandos genricos)
que podem ser facilmente traduzidos para uma linguagem de programao especfica.
Uma grande vantagem da utilizao de pseudocdigo o fato de permitir ao programador expressar as suas idias sem ter de se preocupar com
a sintaxe da Linguagem de Programao. Por outro lado, esse tipo de representao o que mais se aproxima da codificao final em uma Linguagem
de Programao e, por isso, a mais utilizada na prtica.

Sntese da aula
Nesta aula, foram discutidos conceitos sobre as formas mais comuns de
representao de um algoritmo computacional.
Esperamos que, a partir do que foi estudado nesta aula, voc seja
capaz de concluir que h diversas formas de representao de algoritmos
que diferem entre si pela quantidade de detalhes de implementao que
fornecem ou, inversamente, pelo grau de abstrao que possibilitam em
relao implementao do algoritmo em termos de uma linguagem de
programao especfica.
Das principais formas de representao de algoritmos, destacam-se: a
descrio narrativa, o fluxograma convencional e o pseudocdigo. Dessas
trs, a mais utilizada na prtica o pseudocdigo, principalmente por sua
proximidade com o produto final o programa codificado em uma Linguagem de Programao o que diminui o tempo de desenvolvimento e reduz
custos. Alm disso, o pseudocdigo permite adicionar detalhes especficos
da linguagem a ser utilizada.
28

Livro _logica_programacao.indb 28

05/04/2016 08:59:37

Formas de representao de um algoritmo

Atividades
Para as atividades 1, 2 e 3, considere a seguinte questo: elabore um
algoritmo para um programa que permita ler vrios nmeros inteiros a partir
do teclado e, aps a leitura de cada nmero individual, dever ser apresentada
uma mensagem indicando se o nmero informado positivo, negativo ou
nulo. O programa dever encerrar quando o valor nulo for informado.
1. Represente o algoritmo na forma de Descrio Narrativa.
2. Represente o algoritmo na forma de um Fluxograma.
3. Represente o algoritmo na forma de Pseudocdigo.
4. Sobre a Descrio Narrativa, incorreto afirmar que:
a.

utiliza a linguagem natural para descrever o algoritmo;

b. pouco utilizada na prtica;


c.

e m funo de usar a linguagem natural, pode dar margem a


ambigidades, tornando o algoritmo pouco claro;

d. p
ossui regras fixas que garantem que um mesmo algoritmo sempre ser representado da mesma forma, mesmo que por pessoas
diferentes;
e.

evemos utilizar frases curtas e simples na descrio dos passos


d
de um algoritmo.

5. Sobre a forma de representao de algoritmos usando Fluxograma,


incorreto afirmar que:
a) uma representao grfica dos passos a serem seguidos;
b) os smbolos utilizados em um fluxograma so internacionalmente
definidos para garantir que um mesmo fluxograma seja corretamente interpretado, no importa onde tenha sido criado;
c) a interpretao de um fluxograma, via de regra, se d de baixo para
cima e da direita para a esquerda;
d) um programa deve possuir apenas um terminador de INCIO e
outro de FIM;
29

Livro _logica_programacao.indb 29

05/04/2016 08:59:37

Lgica de programao

e) por se tratar de uma representao grfica, o fluxograma no se


mostra adequado para a representao de algoritmos maiores e/
ou mais complexos.
6. Sobre o algoritmo em pseudocdigo apresentado a seguir, correto
afirmar que:
ALGORITIMO A6;
VAR X: Inteiro;
INICIO
REPITA
LEIA (X);
SE (X < 0) ENTAO

IMPRIMA (O valor informado deve ser positivo)

SENAO

IMPRIMA (X*X);
FIM SE
ATE (X <= 0)
FIM

a) o pseudocdigo a forma de representao menos utilizada na prtica;


b) para esse algoritmo, caso o usurio informe um valor negativo,
ser emitida a mensagem O valor informado deve ser positivo e
um novo valor ser lido;
c) esse algoritmo no utiliza uma estrutura de deciso;
d) esse algoritmo no utiliza uma estrutura de repetio;
e) esse algoritmo imprime o quadrado de vrios nmeros informados pelo usurio at que seja informado um valor negativo
ou nulo.

30

Livro _logica_programacao.indb 30

05/04/2016 08:59:37

Formas de representao de um algoritmo

Comentrio das atividades


Para resolver a atividade 1, com base no que foi estudado, existem vrias
formas, visto que a Descrio Narrativa no obedece a nenhuma regra, apenas
sendo uma adaptao da linguagem natural. Uma possvel resposta para essa
questo :
Repetir at que seja lido um nmero nulo
Ler nmero
Se o nmero for maior do que zero

imprimir Positivo

Seno se o nmero for menor do que zero

imprimir Negativo

Seno se o nmero for igual a zero

imprimir Nulo
Encerrar o programa

Podemos ainda melhorar essa primeira soluo, suprimindo o teste se


o nmero for igual a zero, afinal, se o valor j no for maior e nem menor
do que zero s poder ser o prprio zero. Com isso diminuiremos a quantidade de tarefas que o computador ter de executar. Dessa forma, teramos o
seguinte algoritmo:
Repetir at que seja lido um nmero nulo
Ler nmero
Se o nmero for maior do que zero

imprimir Positivo

Seno se o nmero for menor do que zero

imprimir Negativo
Seno
imprimir Nulo
Encerrar o programa

31

Livro _logica_programacao.indb 31

05/04/2016 08:59:37

Lgica de programao

Para resolver a atividade 2, tivemos de representar uma estrutura de


repetio que permita ler N valores at que um valor nulo seja informado.
E para cada valor devemos realizar testes condicionais para determinar qual
mensagem deve ser escrita e para onde deve ser desviado o fluxo de instrues.
Uma resposta possvel para essa questo o seguinte fluxograma:
Inicio

N>0
NO

SIM
Positivo

NO
N<0

NO

SIM
Positivo

Nulo

N=0
SIM
Fim

J na atividade 3, em pseudocdigo, uma soluo possvel para esse


problema :
ALGORITIMO A3;
VAR N: Inteiro;
INICIO

32

Livro _logica_programacao.indb 32

05/04/2016 08:59:37

Formas de representao de um algoritmo


REPITA
LEIA (N);
SE (N > 0) ENTAO

IMPRIMA (Positivo)

SENAO

SE (N < 0) ENTAO

IMPRIMA (Negativo)
SENAO
IMPRIMA (Nulo)
FIM SE
FIM SE
ATE (N = 0)
FIM

Na atividade 4, de acordo com o que foi estudado sobre Descrio Narrativa, voc deve ter reconhecido como opo incorreta a opo (d), pois
nesse tipo de representao no existem regras fixas e, por usar a linguagem
natural, duas pessoas distintas podero usar termos diferentes para descrever um mesmo passo do algoritmo. A opo (a) correta, pois a Descrio
Narrativa utiliza a linguagem natural para descrever o conjunto de passos
do algoritmo. A opo (b), por sua vez, tambm correta, pois esse tipo de
representao pouco usado na prtica. A opo (c) correta e levanta um
dos principais problemas com esse tipo de representao, que a possibilidade de ambigidade, pois caso um passo seja ambguo, pode dar margem a
entendimentos distintos do algoritmo. Por ltimo, a opo (e) tambm est
correta, pois devemos utilizar frases curtas e simples a fim de manter a clareza
e facilitar a interpretao do algoritmo.
Considerando o que foi estudado nesta aula sobre fluxograma, voc deve
ter reconhecido como opo incorreta para a atividade 5 a opo (c), pois a
interpretao de um fluxograma deve ser sempre realizada de cima para baixo
e da esquerda para a direita. Voc deveria ter reconhecido ainda a opo (a)
como correta, pois o fluxograma exatamente uma representao grfica dos
33

Livro _logica_programacao.indb 33

05/04/2016 08:59:37

Lgica de programao

passos de um algoritmo. A opo (b) tambm est correta, pois a norma internacional ISO 5807/1985 define a simbologia a ser adotada na construo de
um fluxograma e, com isso, um mesmo fluxograma ser corretamente interpretado, no importa onde tenha sido criado. A opo (d) correta, uma vez
que o algoritmo representado s pode ter um incio e um fim no fluxograma.
E, por fim, a opo (e) tambm deveria ser considerada correta, pois o maior
problema com o uso de fluxograma ou de qualquer ferramenta de representao grfica que no so adequadas para situaes mais complexas que gerem
algoritmos com uma elevada quantidade de passos.
De acordo com o que voc estudou sobre Pseudocdigo, deve ter ficado
claro que a opo correta para a atividade 6 a opo (e), pois, seguindo o
fluxo do pseudocdigo, percebemos que a leitura e teste da varivel X encontram-se no bloco de instrues do comando REPITA. Assim esses passos
devero ser executados at que a condio (X <= 0) seja verdadeira. Deveria
ter ficado claro tambm que a opo (a) est incorreta, pois esse tipo de representao o mais usado na prtica, pois a forma que mais se aproxima da
codificao final em uma linguagem de programao. A opo (b) est incorreta e sua avaliao depende da ateno ao teste condicional para a instruo
REPITA... AT. Nela, caso o valor seja negativo ou nulo, o fluxo desviado
para o final do algoritmo. As opes (c) e (d) so obviamente incorretas, uma
vez que o algoritmo apresenta as instrues SE..ENTAO e REPITA..AT
que so estruturas de deciso e repetio, respectivamente.
As atividades lhe deram a oportunidade de representar um algoritmo
usando Descrio Narrativa, Fluxograma e Pseudocdigo, que foram os objetivos fixados para esta aula.

Na prxima aula
Estudaremos como os dados so armazenados e representados pelo computador. Esse conhecimento de fundamental importncia para a atividade
de Programao de Computadores.

34

Livro _logica_programacao.indb 34

05/04/2016 08:59:37

3
Tipos de dados:
variveis e constantes

Introduo
Para a execuo de qualquer tipo de programa, o computador necessita armazenar dados de natureza diversa. Esses dados so
armazenados na memria do computador.
Todas as informaes existentes no computador esto ou
na memria primria (memria RAM), ou na memria secundria
(discos, fitas, CD-ROM, etc). Ns iremos trabalhar, neste caderno,
somente com a memria primria, especificamente com as informaes armazenadas na RAM (memria de acesso aleatrio).
Para atingir os objetivos desta aula, desejvel que voc possua
conhecimento, ainda que bsico, sobre arquitetura de computadores
principalmente no que diz respeito memria RAM. Pesquise sobre
o assunto!

Livro _logica_programacao.indb 35

05/04/2016 08:59:38

Lgica de programao

Esperamos que, ao final desta aula, voc seja capaz de:


22

entender os conceitos de varivel e de constante e suas utilizaes;

22

utilizar adequadamente cada tipo de dado disponvel.

3.1 Manipulao das informaes


Na verdade, toda operao realizada por um computador baseada na
manipulao das informaes contidas em sua memria. De uma maneira
geral, essas informaes podem ser classificadas em dois tipos:
22

as instrues, usadas para determinar o funcionamento da mquina


e a maneira como os dados devem ser tratados. As instrues so
especficas para cada arquitetura de computador, pois esto diretamente relacionadas s caractersticas do hardware particular
como, por exemplo, o conjunto de instrues de cada processador;

22

os dados propriamente ditos, que correspondem s informaes


que devero ser processadas pelo computador.

22

A memria do computador pode ser entendida como uma seqncia


finita de gavetas que, em dado momento, guarda algum tipo de informao, como um nmero, uma letra, uma palavra, uma frase, etc.

O computador, para poder trabalhar com alguma dessas informaes, seja


para ler seu contedo ou alter-lo, precisa saber exatamente onde, na memria,
o dado est localizado. Fisicamente, cada gaveta, ou cada posio de memria
esse o termo tcnico correto possui um endereo, ou seja, um nmero,
que indica o seu endereo na memria, em outras palavras, onde cada informao est localizada. Esse nmero normalmente representado usando notao hexadecimal, tendo o tamanho de quatro, ou mais bytes dependendo da
arquitetura do computador. So exemplos de endereos fsicos:
End. Fsico

Contedo

7000:A210

Paulo Srgio

3000:12BC

345

4100:0006

99.834
36

Livro _logica_programacao.indb 36

05/04/2016 08:59:38

Tipos de dados: variveis e constantes

O endereamento das posies de memria por meio de nmeros hexadecimais perfeitamente compreendido pela mquina, mas para ns humanos torna-se uma tarefa complicada.
Para resolver esse problema, as linguagens de computador facilitam
o manuseio, por parte dos programadores, das posies de memria da
mquina, permitindo que, ao invs de trabalhar diretamente com os nmeros hexadecimais, seja possvel atribuir nomes diferentes a cada posio de
memria. Alm disso, tais nomes so de livre escolha do programador. Com
esse recurso, os usurios ficaram livres dos endereos em hexadecimal e passam a trabalhar com endereos lgicos. Como o contedo de cada gaveta
(endereo lgico) pode variar, ou seja, mudar de valor ao longo da execuo
do programa, convencionou-se chamar de varivel a referncia a cada gaveta.
Assim, para o exemplo de endereos fsicos mostrados anteriormente,
poderamos rotular a posio de memria 7000:A210 como nome e, com
isso, sempre que precisssemos do valor dessa posio de memria, bastaria
referenciar a varivel nome. Assim ficaria o exemplo anterior:
End. Fsico

End. Lgico (varivel)

Contedo

7000:A210

nome

Paulo Srgio

3000:12BC

valor

345

4100:0006

total

99.834

Basicamente, uma varivel possui trs atributos: um nome (ou rtulo),


um tipo de dado associado mesma e um valor que representa a informao
por ela apontada. Uma vez definidos, o nome e o tipo de uma varivel no
podem ser alterados no decorrer de um programa.
Cada Linguagem de Programao define as suas regras para a criao de
identificadores de variveis. Todavia a maioria delas concorda que um identificador de varivel deve ser formado por uma letra ou ento por uma letra seguida
de uma ou mais letras ou dgitos. Como regra, as Linguagens de Programao
no permitem o uso de espaos em branco ou de qualquer outro caractere que
no seja letra ou dgito, na formao de um identificador de varivel.
Devemos sempre definir um nome significativo para as variveis em um
programa. Com isso muitas vezes possvel ter uma idia do contedo e
37

Livro _logica_programacao.indb 37

05/04/2016 08:59:38

Lgica de programao

propsito de uma varivel mesmo sem inspecion-la. Um erro comum de


programadores iniciantes a utilizao de nomes de variveis como simples
letras, como a, b, c, x, y. Isso torna o programa difcil de ler e compreender.
Em alguns casos, nem mesmo o seu autor entende!
Algumas linguagens permitem o uso do caractere _ (underline) para
separar as palavras em um identificador. Assim possvel criar uma varivel
com o rtulo Nome_do_Cliente.
Existem alguns dados que no sofrem alterao em seu valor do incio ao fim do programa. A esse tipo de informao convencionou-se chamar de constante. Conforme o seu tipo, a constante classificada como
sendo numrica, lgica e literal.
As constantes so muito utilizadas na programao principalmente em
situaes nas quais temos de referenciar um mesmo valor vrias vezes ao
longo do programa. Para esses casos, podemos definir um nome de constante
e atribuir-lhe um valor. A partir da basta referenciar o nome da constante e
implicitamente estaremos nos referenciando ao seu valor. A principal vantagem dessa abordagem a possibilidade de alterar o valor da constante apenas
em sua definio e essa alterao ser automaticamente refletida em qualquer
outro local do programa em que a sua referncia usada. Em casos como
esse, sem o uso de constantes, ser necessrio alterar o valor em cada linha do
programa onde ele foi usado.
Um conceito importante sobre variveis diz respeito sua localidade ou
escopo. Uma varivel declarada no programa principal passa a ser visvel em
todo o programa e, por isso, so chamadas de variveis globais. J uma varivel
declarada dentro de uma funo ou procedimento, dita como local, indicando que s ser visvel e conhecida dentro desse procedimento ou funo.
Outro atributo caracterstico de uma varivel o tipo de dado que ela pode
armazenar. Esse atributo define a natureza das informaes contidas na varivel.

3.2 Tipos de dados


Os dados so classificados de acordo com o tipo de informao neles
contida. Essa classificao no se aplica a nenhuma linguagem de programa 38

Livro _logica_programacao.indb 38

05/04/2016 08:59:38

Tipos de dados: variveis e constantes

o especfica; pelo contrrio, ela sintetiza os padres utilizados na maioria


das linguagens. Na verdade, essa classificao necessria para determinar a
poro de memria que ser necessria para armazenar o dado. Alm disso
essa classificao garante que a interpretao do contedo da posio de
memria seja feita de forma adequada.

3.2.1 Dados Numricos


Nessa classificao, esto todos os dados que faam referncia a valores. Para o computador, existem diferentes formas de representar um valor,
dependendo das suas caractersticas. Por exemplo, para armazenar um valor
real que possui casas decimais aps a vrgula necessrio um espao bem
maior de memria. J um valor inteiro ocupa bem menos espao.
Os dados numricos possuem uma subclassificao que os define de
acordo com a sua grandeza de representao. Entre as principais subclasses temos:
22

inteiro os nmeros inteiros so aqueles que no possuem casas


decimais nem so nmeros fracionrios, e podem ser positivos,
negativos ou zero. Exemplos de nmeros inteiros so 55 (inteiro
positivo), 0 (zero inteiro) e -98 (inteiro negativo);

22

real os dados do tipo real so aqueles que possuem parte decimal


ou so nmeros fracionrios, e podem ser positivos, negativos ou
zero. Exemplos de dados do tipo real so 3.2 (real positivo), 0.00
(zero real) e -19.76 (real negativo).

Na implementao particular de cada linguagem, esses tipos de dados


numricos so expandidos, dando origem a novos tipos de dados. Normalmente, esses novos tipos permitem representar valores maiores ou menores a
fim de permitir um melhor uso do espao de memria disponvel para execuo do programa. A Linguagem de Programao C, por exemplo, apresenta
para os nmeros inteiros os tipos integer (inteiro tradicional) usado para
representar nmeros entre 32768 at +32767 e ocupa dois bytes na memria;
char (caractere que, na verdade, um inteiro pequeno) usado para representar nmeros entre 0 e 255; word usado para representar nmeros inteiros
positivos entre 0 e 65535 e ocupa dois bytes na memria; ShortInt usado
para representar valores inteiros entre -128 e +128 e ocupa um byte na mem 39

Livro _logica_programacao.indb 39

05/04/2016 08:59:38

Lgica de programao

ria; e LongInt usado para representar nmeros inteiros entre 2.147.483.648


at 2.147.483.648 e ocupa quatro bytes na memria. Existem diferentes tipos
para os valores reais tambm.

3.2.2 Dados literais (string)


Uma informao do tipo literal representa um conjunto de caracteres
que pode ser formado por letras, dgitos ou smbolos especiais.
O computador representa cada letra, dgito e smbolo especial como
um valor inteiro que varia de 0 a 255. Assim cada caractere tratado
internamente por esse valor. A correspondncia de valores para os caracteres fornecida por uma padronizao internacional conhecida como
Tabela ASCII.
A Tabela ASCII ISO 8859-1, tambm chamada Latim I, uma das
Tabelas ASCII estendidas, orientada especificamente para alguns idiomas
europeus ocidentais.
A correta visualizao dos caracteres dessa tabela depende de vrios fatores tcnicos, inclusive da fonte utilizada. Em computadores atualizados, provavelmente, ser possvel uma visualizao adequada sem problemas.
Observe que nem todos os nmeros da tabela correspondem a grafemas.
Cabe ressaltar que os valores de 0 a 31, 127 e 255 so reservados para funes
especiais de processamento e no representam caracteres imprimveis.
Figura 1 Tabela ASCII.
0
1
2
3
4
5
6
7
8
9
10
11

32 ?
33 !
34 "
35 #
36 $
37 %
38 &
39 '
40 (
41 )
42 *
43 +

64 @
65 A
66 B
67 C
68 D
69 E
70 F
71 G
72 H
73 I
74 J
75 K

96 `
97 a
98 b
99 c
100 d
101 e
102 f
103 g
104 h
105 i
106 j
107 k

128
129
130
131
132
133
134
135
136
137
138
139

160
161
162
163
164
165
166
167
168
169
170
171

192
193
194
195
196
197
198
199
200
201
202
203

224
225
226
227
228
229
230
231
232
233
234
235

40

Livro _logica_programacao.indb 40

05/04/2016 08:59:38

Tipos de dados: variveis e constantes


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

44 ,
45 46 .
47 /
48 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
57 9
58 :
59 ;
60 <
61 =

76 L
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z
91 [
92 \
93 ]

108 l
109 m
110 n
111 o
112 p
113 q
114 r
115 s
116 t
117 u
118 v
119 w
120 x
121 y
122 z
123 {
124 |
125 }

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189

30

62 >

94 ^

126 ~

158

190

222

31

63 ?

95 _

127

159

191

223

204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221

236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254+

255

Fonte: <http://www.abusar.org>.
Essa conveno foi padronizada para possibilitar a migrao de programas entre mquinas diferentes.
Cabe salientar que o comprimento de um dado do tipo literal dado
pelo nmero de caracteres nele contido. Logo, para armazenarmos um tipo
de dado literal precisamos reservar um espao contguo de memria igual ao
comprimento do mesmo, destinando um byte para cada caractere de informao. O literal Programao, por exemplo, possui comprimento igual a 11,
ou seja, possui 11 caracteres.

3.2.3 Dados lgicos


Um dado do tipo lgico s possui dois valores possveis: verdadeiro ou
falso. Dessa forma poderamos pensar em armazenar uma informao desse
tipo em apenas um nico bit. Todavia a menor poro de memria que se
pode acessar o byte (oito bits). Assim uma informao do tipo lgico armazenada em um byte de memria.
41

Livro _logica_programacao.indb 41

05/04/2016 08:59:38

Lgica de programao

De certa forma, se por um lado isso pode parecer como um desperdcio de memria, por outro simplifica bastante a arquitetura de memria dos
computadores. Alm disso isso no to relevante, uma vez que, na prtica,
o nmero de ocorrncias de dados do tipo lgico bastante inferior ao de
ocorrncias de dados do tipo literal ou numrico.

Sntese da aula
Nesta aula, discutimos como o computador armazena e manipula as
informaes na memria do computador.
A memria dos computadores composta por posies numeradas e
ordenadamente organizadas em bytes. Cada tipo de dado requer uma quantidade diferente de bytes para armazenar a sua informao na memria. Essa
quantidade pode tambm variar em funo do tipo de computador ou Linguagem de Programao considerada.
Uma varivel uma entidade dotada de um nome para diferenci-la das
demais e permitir encontrar a sua posio da memria, e um tipo de dado,
que define o tipo de informao que ela capaz de guardar.
Uma vez definidos, o nome e o tipo de uma varivel no podem ser
alterados no decorrer de um programa. Por outro lado, a informao til da
varivel passvel de modificao durante o decorrer do programa, de acordo
com o fluxo de execuo do mesmo.
J um dado constante no sofre alterao no seu valor durante a execuo do programa.

Atividades
1. Com base no que foi estudado nesta aula, escolha a alternativa que apresenta, respectivamente, os tipos de dados mais adequados para variveis que devero armazenar os seguintes contedos: idade, temperatura,
nome da cidade, nmero da carteira de identidade, notas de um aluno.
a) Inteiro, real, caractere, caractere, vetor de real.
b) Inteiro, inteiro, caractere, caractere, vetor de inteiro.
42

Livro _logica_programacao.indb 42

05/04/2016 08:59:38

Tipos de dados: variveis e constantes

c) Inteiro, real, inteiro, caractere, vetor de real.


d) Inteiro, real, real, caractere, vetor de inteiro.
e) Inteiro, real, caractere, real, vetor de real.

Comentrio das atividades


Na atividade 1, aps analisar os contedos a serem armazenados voc
deve ter concludo que a opo correta a opo (a), pois ela apresenta para
o contedo idade o tipo inteiro (afinal costumamos utilizar valores inteiros
positivos para a contar a passagem dos anos no usamos 3,4 anos de
idade); para o contedo temperatura devemos usar casas decimais, logo o
tipo mais indicado o real; para o nome da cidade precisamos de um literal
ou caractere; para o nmero da carteira de identidade, na verdade, poderamos usar um tipo caractere (isso permitiria armazenar os caracteres de
formatao, como ponto e hfen) ou como inteiro (sem formatao); j para
as notas de um aluno, uma nota normalmente expressa como um valor
real e como ser mais de uma nota (notas). Tomando como base essas justificativas, voc deveria considerar as demais opes como incorretas, pelos
seguintes motivos: a opo (b) apresenta inadequao para o contedo temperatura e para as notas do aluno; a opo (c) apresenta inadequao para o
nome da cidade; a opo (d) apresenta inadequaes para o nome da cidade
e as notas do aluno; e a opo (e) apresenta inadequaes para o nmero da
carteira de identidade.
Ao realizar a atividade proposta com sucesso, voc alcanou os objetivos
desta aula de entender os conceitos de varivel e de constante e suas utilizaes e de utilizar adequadamente cada tipo de dado disponvel.

Na prxima aula
Estudaremos os principais operadores e como podem ser usados na
composio de expresses. Sero estudados os operadores mais gerais e que
so implementados na maioria das Linguagens de Programao, nomeadamente: aritmticos, lgicos, de atribuio e de concatenao.

43

Livro _logica_programacao.indb 43

05/04/2016 08:59:38

Lgica de programao

44

Livro _logica_programacao.indb 44

05/04/2016 08:59:38

4
Operadores e
expresses
Introduo
Operadores so elementos funcionais que atuam sobre termos e produzem um determinado resultado.
Os operadores so, na prtica, instrues especiais pelas
quais incrementamos, decrementamos, comparamos e avaliamos
dados dentro de um programa de computador. Podemos classificar
os operadores em trs classes:
22

operadores aritmticos;

22

operadores relacionais;

22

operadores lgicos.

Com o uso de operadores possvel construir expresses, assim


como na matemtica. A complexidade de uma expresso determinada pela quantidade de operadores e termos (variveis ou valores constantes).

Livro _logica_programacao.indb 45

05/04/2016 08:59:39

Lgica de programao

De acordo com o nmero de termos sobre os quais os operadores atuam,


podemos classific-los em:
22

binrios: quando atuam sobre dois termos. Os operadores aritmticos bsicos (adio, subtrao, diviso e multiplicao), por exemplo;

22

unrios: quando atuam sobre um nico termo. O sinal de negativo


(-) na frente de um nmero, cuja funo inverter seu sinal, por
exemplo.

No h pr-requisitos formais para esta aula, uma vez que trata de operaes bsicas, pois pressupomos que voc possua conhecimentos sobre Teoria
de Conjuntos e Matemtica Fundamental.
Esperamos que, ao final desta aula, voc seja capaz de:
22

reconhecer os principais operadores da Lgica para Programao,


utilizando-os;

22

construir corretamente expresses aritmticas e lgicas, avaliando-as.

4.1 Operadores aritmticos


Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio, subtrao, multiplicao e diviso, grande parte das
linguagens de programao tambm disponibilizam o operador para a operao de exponenciao. Os smbolos para os operadores aritmticos so os
listados a seguir.
OPERAO

SMBOLO

Adio

Subtrao

Multiplicao

Diviso

Exponenciao

^ (depende da linguagem utilizada)

Resto da diviso inteira

MOD ou % (depende da linguagem utilizada)

Quociente da diviso inteira

DIV
46

Livro _logica_programacao.indb 46

05/04/2016 08:59:39

Operadores e expresses

Esses operadores so comumente utilizados para a formao de expresses aritmticas. A avaliao da expresso o que resulta no clculo do seu
resultado depende da ordem na qual os operadores so processados. Para
garantir que sempre seja obedecida uma mesma ordem, definida uma hierarquia para a avaliao dos operadores. Essa hierarquia herdada da prpria
matemtica. Segundo esta hierarquia:
1. em primeiro lugar, devem ser processadas as expresses entre parnteses;
2. em seguida, a operao de exponenciao;
3. ento devem ser processadas as operaes de Multiplicao e Diviso (o que aparecer primeiro);
4. por ltimo, devem ser processadas as operaes de Adio e Subtrao (o que aparecer primeiro).
Essa hierarquia garante a correta interpretao de uma expresso aritmtica.
importante salientar que, na maioria das Linguagens de Programao, o tipo de dado resultante depende dos tipos de dados dos termos.
A seguir apresentada uma listagem com os tipos de dados resultantes
de cada operador.
OPERADOR
A+B

AB

A*B

Tipo de Dado de A
Inteiro
Real
Inteiro
Real
Inteiro
Real
Inteiro
Real
Inteiro
Real
Inteiro
Real

Tipo de Dado de B
Inteiro
Real
Real
Inteiro
Inteiro
Real
Real
Inteiro
Inteiro
Real
Real
Inteiro

Tipo Resultante
Inteiro
Real
Real
Real
Inteiro
Real
Real
Real
Inteiro
Real
Real
Real

47

Livro _logica_programacao.indb 47

05/04/2016 08:59:39

Lgica de programao

OPERADOR
A/B

A DIV B
A MOD B

Tipo de Dado de A
Inteiro
Real
Inteiro
Real
Inteiro
Inteiro
Inteiro
Inteiro

Tipo de Dado de B
Inteiro
Real
Real
Inteiro
Inteiro
Inteiro
Inteiro
Inteiro

Tipo Resultante
Real
Real
Real
Real
Inteiro
Inteiro
Inteiro
Inteiro

4.2 Operadores relacionais


Os operadores relacionais so utilizados para comparar dados em um
programa. Os valores a serem comparados podem estar armazenados em
constantes, variveis, valores numricos ou literais.
Os operadores relacionais so:
OPERAO

SMBOLO

Igual a

Diferente de

<> ou != ou =/= (depende da linguagem)

Maior que

>

Menor que

<

Maior ou igual a

>=

Menor ou igual a

<=

Esses operadores sempre retornam valores lgicos (verdadeiro ou falso).


Se os termos forem numricos, a comparao feita com base no seu valor.
Se os termos forem texto (literais), a comparao feita lexicograficamente,
ou seja, seguindo a ordem alfabtica. Se os termos forem lgicos, apenas
esto disponveis os operadores de igualdade e a diferena.
Para estabelecer prioridades no que diz respeito a qual operao executar
primeiro, devemos utilizar os parnteses.
48

Livro _logica_programacao.indb 48

05/04/2016 08:59:39

Operadores e expresses

Vale ressaltar que no eficaz comparar valores do tipo real com os operadores de igualdade em virtude de a representao em ponto flutuante ser
inexata em alguns casos.
Apesar de algebricamente correta, a expresso (1.0 / 3.0) + (1.0 / 3.0) +
(1.0 / 3.0) = 1 avaliada como falsa devido ao fato de 1.0 / 3.0 ter como resultado um valor que contm nmero infinito de casas decimais (3.3333333...).
O computador apenas capaz de utilizar um nmero finito de casas decimais
e, portanto, feito um arredondamento do valor de 1/3 em cada ocorrncia.
Para evitar os erros causados pela representao inexata de valores reais,
deve-se evitar utilizar as comparaes de igualdade com nmeros reais.

4.3 Operadores lgicos


Os operadores lgicos servem para combinar resultados de expresses,
retornando se o resultado final verdadeiro ou falso.
Esse tipo de operador amplamente usado na composio de expresses lgicas que so muito utilizadas nas estruturas de deciso e repetio
em um programa.
Os operadores lgicos so:
E (do ingls AND) uma expresso desse tipo verdadeira se todas as
condies forem verdadeiras;
OU (do ingls OR) uma expresso desse tipo verdadeira se uma ou
todas as condies forem verdadeiras;
NO (do ingls NOT) uma expresso desse tipo inverte o valor da
expresso ou condio, se verdadeira inverte para falsa e vice-versa.
Os operadores lgicos e relacionais so elementos de fundamental
importncia na elaborao de um programa. Em todos os programas so
utilizadas expresses relacionais e lgicas para a tomada de decises e conseqente desvio do fluxo do programa.
O resultado de uma operao lgica vai depender dos valores dos termos submetidos. A seguir apresentada uma listagem com os tipos de dados
resultantes de cada operador.
49

Livro _logica_programacao.indb 49

05/04/2016 08:59:40

Lgica de programao

OPERADOR

Tipo de
Dado de A

Tipo de
Dado de B

Tipo Resultante

AeB

verdadeiro

verdadeiro

verdadeiro

AeB

verdadeiro

falso

falso

AeB

falso

verdadeiro

falso

AeB

falso

falso

falso

A ou B

verdadeiro

verdadeiro

verdadeiro

A ou B

verdadeiro

falso

verdadeiro

A ou B

falso

verdadeiro

verdadeiro

A ou B

falso

falso

falso

no A

verdadeiro

-----

falso

no A

falso

-----

verdadeiro

4.4 Operador de concatenao


Esse operador usado para concatenar, em outras palavras, juntar dois
valores ou variveis do tipo texto (literal). Normalmente utilizamos esse tipo
de operador para compor mensagens ao longo do programa.
Na maioria das Linguagens de Programao, o smbolo usado para a concatenao o mesmo da adio. Assim a expresso Programar+ fcil teria
como resultado o literal Programar fcil. comum utilizar a concatenao
em expresses envolvendo variveis. Caso a varivel seja do tipo literal, esse
operador pode ser usado diretamente; caso contrrio, ser necessrio algum tipo
de converso a fim de torn-lo um literal. Na verdade, a maioria das linguagens
de programao traz funes para esse propsito.

4.5 Operador de atribuio


O operador de atribuio usado para definir o valor de uma varivel.
Na prtica, para executar essa operao, o computador preenche a posio de
50

Livro _logica_programacao.indb 50

05/04/2016 08:59:40

Operadores e expresses

memria apontada pela varivel com o valor posicionado do lado direito do


operador de atribuio.
A expresso custo <- 23 implica em atribuir o valor 23 varivel chamada custo. comum o uso de expresses aritmticas ou relacionais no lado
direito desse operador. Nesses casos, o valor resultante da expresso transferido para a varivel.
importante ressaltar que o termo do lado esquerdo do operador de
atribuio deve sempre ser um identificador de varivel, de outra forma no
haver onde armazenar o valor posicionado no lado direito.

4.6 Expresses
O conceito de expresso, em termos computacionais, est intimamente
ligado ao conceito de expresso (ou frmula) usado na matemtica, na qual
um conjunto de variveis e constantes numricas relaciona-se por meio de
operadores aritmticos compondo uma frmula que, uma vez avaliada,
resulta em um valor final.
O conceito de expresso aplicado computao assume um sentido
mais amplo: uma expresso uma combinao de variveis, constantes e operadores (aritmticos, relacionais ou lgicos) e que, uma vez avaliada, resulta
em um valor.
Expresses aritmticas so aquelas cujo resultado da avaliao do tipo
numrico, seja ele inteiro ou real. Somente o uso de operadores aritmticos e
variveis numricas so permitidos em expresses desse tipo.
Expresses lgicas so aquelas cujo resultado da avaliao um valor
lgico (verdadeiro ou falso). Na formao de expresses lgicas, permitido
tanto o uso de operadores lgicos quanto relacionais.

Sntese da aula
Nesta aula, foram apresentados e discutidos os principais Operadores
Aritmticos, Relacionais e Lgicos usados na Programao para Computadores. Foi discutida ainda a construo e a avaliao de expresses que utilizam
esses operadores.
51

Livro _logica_programacao.indb 51

05/04/2016 08:59:40

Lgica de programao

Atividades
1. Das alternativas apresentadas a seguir, indique aquela que representa um
operador unrio.
a) Maior do que [ >]
b) Resto da diviso inteira [ % ]
c) Negao [NOT ]
d) Multiplicao [ * ]
e) OU lgico [ OU ]
2. Das alternativas apresentadas abaixo, indique aquela que no devolve um
valor lgico. Considere os seguintes valores para as variveis Media7,
PaisBrasil, Nota7.25, Valorverdadeiro e Opcao=a.
a) ((Nota >= Media) E (Opcao=b))
b) (((Nota + 1) > Media) OU (NAO Valor))
c) (((Media*2)-1) % 2)
d) (((Media DIV 7) = 1) OU (Nota >= Media))
e) (((Nota - Media) > 3) = Valor)
3. Considere a seguinte expresso ((((A % 5) > 5) OU (B/C >= 1)) E
((NAO ((A<50) E (B <> C))) OU (C=5))) e determine o valor para essa
expresso lgica, tendo os valores 23, 5 e 5 como valores das variveis A,
B e C, respectivamente.

Comentrio das atividades


Na atividade 1, com base no que voc estudou, deve ter ficado claro
que a opo correta a opo (c), pois a operao lgica de negao inverte o
valor lgico do nico termo sobre o qual opera. A opo (a) incorreta, pois
o operador maior que um operador binrio, pois compara dois valores,
retornando verdadeiro se o valor do lado esquerdo for maior do que o lado
direito. A opo (b) tambm incorreta, pois o operador de resto da diviso
52

Livro _logica_programacao.indb 52

05/04/2016 08:59:40

Operadores e expresses

inteira tambm um operador binrio. A opo (d) incorreta, pois apresenta a operao aritmtica de multiplicao que tambm binria. E, por
fim, a opo (e) tambm apresenta um operador binrio, pois o operador
lgico OU opera sobre dois termos lgicos.
Para voc responder a atividade 2, deve ter considerado a hierarquia
das operaes e os valores das variveis. Da bastou usar de substituio
para avaliar o resultado de cada expresso. Seguindo essa abordagem, voc
deve ter chegado concluso de que a nica alternativa que no devolve
um valor lgico a opo (c), pois, se substituirmos os valores das variveis e executarmos as operaes, teremos: (((Media*2)-1) MOD 2)
(((7*2)-1) MOD 2) ((14 1) MOD 2) (13 MOD 2) 1. Ou
seja, o resultado um valor inteiro. Se analisarmos as outras expresses
da mesma maneira, veremos que todas resultam em um valor lgico: a
opo (a) retorna ((Nota >= Media) E (Opcao=b)) ((7.25 >= 7) E
(a=b)) (verdadeiro E falso) falso; a opo (b) retorna (((Nota
+ 1) > Media) OU (NAO Valor)) (((7.25 + 1) > 7) OU (NAO verdadeiro)) ((8.25 > 7) OU falso) verdadeiro OU falso verdadeiro;
a opo (d) retorna (((Media DIV 7) = 1) OU (Nota >= Media)) (((7
DIV 7) = 1) OU (7.25 >= 7)) ((1 = 1) OU (verdadeiro)) (verdadeiro OU verdadeiro verdadeiro; e a opo (e) retorna (((Nota Media) > 3) = Valor) (((7.25 - 7) > 3) = verdadeiro) ((0.25 > 3) =
verdadeiro) falso = verdadeiro falso.
Na atividade 3, se voc utilizou a tcnica de substituio dos valores das
variveis e a resoluo de cada operao respeitando a hierarquia entre elas,
voc concluiu que ((((A MOD 5) > 5) OU (B/C >= 1)) E ((NAO ((A<50) E
(B <> C))) OU (C=5))) ((((23 MOD 5) > 5) OU (5/5 >= 1)) E ((NAO
((23<50) E (5 <> 5))) OU (5=5))) (((3 > 5) OU (1 >= 1)) E ((NAO (verdadeiro E falso)) OU verdadeiro)) ((falso OU verdadeiro) E ((NAO falso)
OU verdadeiro)) (verdadeiro E (verdadeiro OU verdadeiro)) (verdadeiro E verdadeiro) verdadeiro. Logo o valor para essa expresso lgica
verdadeiro.
Ao realizar as atividades propostas, checando-as com os comentrios e
obtendo sucesso, voc est apto a reconhecer os principais Operadores da
Lgica para Programao, utilizando-os, e construir corretamente expresses
aritmticas e lgicas, avaliando-as. Parabns!
53

Livro _logica_programacao.indb 53

05/04/2016 08:59:40

Lgica de programao

Na prxima aula
Estudaremos, na prxima aula, a Estrutura de Arquivo. Na prtica, esse
tipo de estrutura muito utilizado para o armazenamento e manipulao de
grandes conjuntos de dados.

54

Livro _logica_programacao.indb 54

05/04/2016 08:59:40

5
Estrutura de seleo
simples
e composta
Introduo
Aprendemos a desenvolver algoritmos seqenciais, ou seja,
pseudocdigos nos quais todas as instrues so executadas seqencialmente, sem interrupes, desvios ou retornos.
Como vimos, j possvel resolver alguns tipos de problemas
(poucos) com a estrutura puramente seqencial. Mas apenas com
comandos de leitura, escrita e atribuio ficamos bastante limitados para resolver problemas de maior complexidade. Isso porque,
no mundo real, deparamo-nos seguidamente com situaes em que
devemos tomar decises e, com base nessas decises, optar por diferentes caminhos para soluo de um problema.
Pelas caractersticas especficas da disciplina, o contedo
para o aprendizado de cada novo contedo cumulativo. Ou seja,
para a perfeita compreenso de cada nova aula, voc deve ter absorvido adequadamente o contedo visto nas aulas anteriores. Assim,
para compreenso de desvio condicional simples e composto, deve
estar bem assimilado o contedo das aulas anteriores.

Livro _logica_programacao.indb 55

05/04/2016 08:59:41

Lgica de programao

Esperamos que, ao final desta aula, voc seja capaz de:


22

compreender o uso do desvio condicional simples;

22

entender a aplicabilidade do desvio condicional composto.

Nesta aula, voc aprender a fazer desvios dentro do algoritmo,


de forma a poder decidir o rumo que o pseudocdigo seguir durante
sua execuo.

5.1 Desvio condicional simples


O desvio condicional simples (ou estrutura de seleo simples, ou
apenas se simples) uma estrutura de seleo que, com base em um teste
lgico, permite optar pela execuo ou no de um determinado trecho do
cdigo.
Analise a sintaxe e a representao por meio de fluxograma dessa estrutura na figura seguinte.
Quadro 1 Sintaxe e fluxograma do desvio condicional simples.
SINTAXE EM PSEUDOCDIGO

FLUXOGRAMA

Por exemplo, imagine o problema de clculo da mdia de notas de


um aluno, apresentado na aula anterior. Se voc desejasse que o algoritmo
exibisse uma mensagem parabenizando pela aprovao (apenas em caso de
aprovao), isso no seria possvel apenas com os comandos l utilizados.
Contudo, utilizando o desvio condicional simples, essa uma tarefa
extremamente fcil. Vejamos como ficaria o pseudocdigo no Portugol para
resolver esse problema com a incluso dessa nova estrutura de seleo.
56

Livro _logica_programacao.indb 56

05/04/2016 08:59:46

Estrutura de seleo simples e composta

Figura 1 Exemplo de desvio condicional simples.

O \n inserido dentro do literal


serve para inserir uma quebra de
linha. Assim, o texto logo aps
este comando ser escrito na
linha seguinte

Executando esse algoritmo, poderemos verificar que a mensagem Parabns! Voc foi aprovado!!, s ser exibida se a mdia calculada atender a condio proposta no desvio condicional, ou seja, se a mdia obtida for maior ou
igual a seis. Caso a mdia seja inferior a seis, a seqncia de instrues contida
no desvio condicional no ser executada, prosseguindo a execuo do algoritmo aps o fimse.
Vejamos mais um exemplo. Suponhamos que voc precise desenvolver
um algoritmo que solicite a digitao do nome e idade de uma pessoa e, aps
isso, caso a idade seja maior ou igual 18 anos, exiba uma mensagem informando que a pessoa (citar o nome) j atingiu a maioridade.
Como resolveramos esse problema? Muito simples. Necessitaremos de
uma varivel do tipo texto para armazenar o nome, e uma do tipo inteiro
para armazenar a idade informada. O algoritmo deve ento solicitar esses
dados ao usurio e, aps armazenados nas respectivas variveis, deve realizar
um desvio condicional testando se a idade maior ou igual a 18. Se for, deve
escrever o nome contido na varivel do tipo texto, acompanhado de um texto
57

Livro _logica_programacao.indb 57

05/04/2016 08:59:46

Lgica de programao

adicional (literal), informando que atingiu a maioridade. Caso contrrio, o


algoritmo deve finalizar.
Segue um exemplo da implementao. Veja na figura.
Figura 2 Exemplo de desvio condicional simples.

5.2 Desvio condicional composto


Como voc pde observar, no desvio condicional simples avaliada uma
condio e, caso ela seja verdadeira, executada a lista de comando internos dessa estrutura. Caso o resultado da avaliao seja falso, ignorada a
seqncia de comandos e o algoritmo prossegue normalmente a execuo das
instrues existentes aps esse desvio condicional (aps o fimse). Ou seja, a
execuo dos comandos internos estrutura condicional simples podem ou
no ser executados.
No desvio condicional composto (ou estrutura condicional composta,
ou se composto), temos a possibilidade de dar duas opes de execuo: uma
se a condio for verdadeira e outra se a condio for falsa. Logo sempre ser
obrigatoriamente executado um dos conjuntos de instrues da estrutura.
Analise a sintaxe a seguir e voc poder entender melhor esse conceito.
58

Livro _logica_programacao.indb 58

05/04/2016 08:59:49

Estrutura de seleo simples e composta

Quadro 2

Sintaxe e fluxograma do desvio condicional composto.

SINTAXE EM
PSEUDOCDIGO

FLUXOGRAMA

Dessa forma, no desvio condicional composto, se a condio for verdadeira, ento ser executado somente o primeiro bloco de comandos da estrutura.
Seno, ser executado apenas o segundo bloco de comandos. Aps a execuo
de um dos blocos de comandos, o algoritmo prosseguir sua execuo normal a
partir da primeira linha de instrues logo aps o fimse. Simples, no ?
Vamos incrementar um pouco mais o nosso algoritmo para clculo da
mdia, convertendo o desvio condicional simples em composto, de forma que
o algoritmo informe a aprovao ou o no atingimento de mdia por parte do
aluno. Vejamos como ficaria o pseudocdigo na figura seguinte.
Figura 3 Exemplo de desvio condicional composto.
Se o contedo da varivel media
for maior ou igual a 6,ser
executada esta linha de comando.
Se o contedo da
varivel media
for menor do que 6,
ser executada esta
linha de comando.

Resultado da
execuo do
algoritmo.

59

Livro _logica_programacao.indb 59

05/04/2016 08:59:50

Lgica de programao

Agora j possvel desenvolver algoritmos para solucionar problemas


um pouco mais complexos, que exijam diferentes aes, conforme avaliaes
realizadas sobre os dados no decorrer do programa.
Vamos exercitar mais um pouco, acompanhando o raciocnio para resolver os problemas a seguir.
Problema um: implementar um algoritmo que solicite a digitao de
um valor inteiro, e informe se esse valor par ou mpar.
Figura 4 Exemplo de desvio condicional composto.
Declarao de uma varivel para
armazenamento do valor informado
Mensagem de
orientao ao usurio
Armazenamento do
nmero digitado na
varivel valor
O desvio condicional testa
Resultado de execuo se o contedo da varivel valor
divisvel por 2. Se for,
do algoritmo, inserindo
informa que ele par, seno,
como exemplo o
informa que ele mpar
nmero 128

Problema dois: implementar um algoritmo que solicite a digitao


de dois nmeros e, aps isso, se so iguais ou se um deles maior do que
o outro.
Figura 5 Exemplo de desvio condicional simples.

60

Livro _logica_programacao.indb 60

05/04/2016 08:59:50

Estrutura de seleo simples e composta

Problema trs: implementar um algoritmo que permita jogar Par ou


mpar contra o computador, seguindo as seguintes regras:
22

o computador solicita a entrada de um nmero inteiro pelo usurio


e, aps isso, informa um nmero aleatrio de 0 a 5;

22

o computador vencer sempre que a soma dos nmeros informados


por ele e pelo usurio resultarem em um nmero par;

22

o jogador humano vencer sempre que a soma dos nmeros informados por ele e pelo computador resultarem em um nmero mpar;

22

aps o lanamento dos dois nmeros, o algoritmo deve realizar os


clculos e informar o vencedor.

Figura 6 Exemplo de desvio condicional composto.

61

Livro _logica_programacao.indb 61

05/04/2016 08:59:50

Lgica de programao

Claro como a gua? No? Ento vamos explicar cada linha do bloco
principal para que no fique nenhuma dvida.
Iniciamos com a declarao de trs variveis. Uma para armazenar o
valor informado pelo jogador humano, outra para o nmero do computador,
e uma terceira para armazenar a soma dos dois primeiros.
inteiro humano , computador , total
As duas linhas seguintes apresentam uma mensagem na tela solicitando
que o jogador humano informe um nmero inteiro, armazenando-o na varivel humano.
escrever Digite um nmero inteiro:
ler humano
Aps isso, a vez de o computador escolher seu lanamento, que realizado de forma aleatria. Para isso, vamos utilizar duas funes predefinidas
no portugol:
22

aleatorio() funo utilizada para gerar um nmero aleatrio do tipo


Real, compreendido entre 0.0 e 1.0 (inclusive). Como uma funo
sem argumento, nada deve ser informado entre os parnteses que a
compe. Como a funo gerar nmeros Reais compreendidos no
intervalo de 0.0 a 1.0 (ex.: 0.0, 0.01, 0.2, 0.5, 0.9, 1.0) e necessitamos
de valores de 0 a 5, multiplicaremos o resultado da chamada da funo
aleatorio() por 5, uma vez que o menor nmero possvel 0.0, que
multiplicado por 5 continuaria sendo 0.0, e o maior nmero possvel
1.0, o qual multiplicado por 5 resulta em 5.0. Dessa forma, o conjunto
exemplificado anteriormente teria sua representao multiplicada por
5 (ex.: 0.0, 0.05, 1.0, 2.5, 4.5, 5.0);

22

int() funo utilizada para retornar parte inteira de um nmero


Real. uma funo que necessita de um argumento, ou seja, o valor
a ser convertido deve ser passado entre os parnteses dessa funo.
Fazendo isso com o nmero gerado aleatoriamente pelo o computador, teramos apenas a parte inteira do exemplo anterior (ex.: 0, 0,
1, 2, 4, 5), ou seja, nmeros inteiros entre 0 e 5, como solicitado no
enunciado do problema.
62

Livro _logica_programacao.indb 62

05/04/2016 08:59:50

Estrutura de seleo simples e composta

Utilizando essas duas funes existentes no Portugol IDE (tambm existentes na grande maioria das linguagens de programao), podemos atribuir
um valor inteiro de 0 a 5, escolhido ao acaso (aleatoriamente) pelo computador.
Figura 7 Instrues para gerar um valor aleatrio entre 0 e 5.
2

computador < int ( aleatorio

( ) * 5 )

1
3
1 Gera um valor aleatrio de 0.0 a 1.0
2 Converte o resultado da funo aleatria para valores de 0.0 a 5.0
3 Retorna apenas a parte inteira, obtendo valores inteiros de 0 a 5

Nas linhas seguintes, o algoritmo exibe o nmero aleatrio gerado e


armazenado na varivel computador; atribui varivel total o resultado da
soma do contedo da varivel humano com a varivel computador e exibe
em tela o contedo atual da varivel total, respectivamente.
escrever Eu escolhi , computador
total <- humano + computador
escrever \nO total , total
Bom... Agora basta verificar se o contedo da varivel total par ou
mpar para definir quem ganhou o jogo e qual a mensagem que deve ser
exibida na tela. Isso feito de forma bem simples, dentro de um desvio condicional composto no qual a condio verificar se o resto da diviso (%) do
valor contido em total por 2 0. Se o resto for 0, significa que o valor par.
Seno, s poder ser mpar. Temos ento:
se total % 2 = 0 entao
escrever \nPAR Ganhei! a superioridade da
mquina!!
senao
escrever \nMPAR Parabns! Voc ganhou.
fimse
63

Livro _logica_programacao.indb 63

05/04/2016 08:59:51

Lgica de programao

Pois . A explicao muito mais extensa do que a real dificuldade do


problema. Mas, certamente, voc deve ter compreendido bem o funcionamento das estruturas de seleo simples e composta. No deixe de realizar as
atividades propostas para uma melhor fixao desse contedo.

Sintese da Aula
Nesta aula, compreendemos a diferena bsica entre as estruturas de
seleo simples e compostas. A simples permite uma opo de desvio dentro
do pseudocdigo, caso a sua condio lgica seja verdadeira. J a composta
abre uma possibilidade adicional, permitindo dois caminhos diferentes, no
caso de validao ou no da sua condio lgica.

Atividades
1. Na seleo simples, uma instruo ou um conjunto de instrues
executado somente se o teste condicional especificado retornar o valor
verdadeiro. Por outro lado, na seleo composta, se o teste for verdadeiro, um trecho do algoritmo executado e, se falso, outro trecho ser
executado. Adicionalmente, uma instruo de seleo pode ser inserida
dentro da outra, formando uma estrutura de seleo encadeada. Nesse
contexto, analise o algoritmo a seguir e assinale a alternativa que indica
o que ser escrito como sada em tela.
inicio
inteiro x<-4,y<-2,z<- -3
real resultado
resultado <- (x%2)*z^3
se resultado < 0 entao
escrever CONDIO 1
senao
se resultado > 0 entao

64

Livro _logica_programacao.indb 64

05/04/2016 08:59:51

Estrutura de seleo simples e composta

escrever CONDIO 2

senao

escrever CONDIO 3

fimSe

fim

fimSe

a) Condio 1
b) Condio 2
c) Condio 3
d) Nenhuma das alternativas anteriores
2. Quando algoritmos so criados, algumas vezes h necessidade de
controlar a ordem em que as instrues devero ser executadas pelo
computador de modo a solucionar um problema. Para permitir que
o fluxo de execuo seja controlado, devemos utilizar as estruturas de
controle. Sobre fluxo de execuo, leia as afirmativas a seguir e assinale a
alternativa correta.
I. Na estrutura seqencial, os comandos de um algoritmo so
executados em uma seqncia pr-estabelecida, ou seja, cada
comando executado somente aps o trmino do comando anterior.
II. Na estrutura de deciso (desvio condicional), so comuns situaes em que uma instruo, ou conjunto de instrues, devam ser
executados sempre para situaes verdadeiras e falsas.
III. Na estrutura de repetio, uma seqncia de comandos dever ser
executada obrigatoriamente uma ou vrias vezes de acordo com
uma condio.
a) Somente as afirmativas I e II so verdadeiras.
b) Somente a afirmativa II falsa.
65

Livro _logica_programacao.indb 65

05/04/2016 08:59:51

Lgica de programao

c) Somente a afirmativa III verdadeira.


d) Somente as afirmativas II e III so falsas.
3. Qual a diferena bsica entre os desvios condicionais simples e compostos?
Elabore uma resposta com cinco a dez linhas.
4. Tudo o que feito por um desvio condicional composto pode ser representado utilizando desvios condicionais simples? Elabore uma resposta
com cinco a dez linhas.

Comentrio das Atividades


Todas as atividades aqui apresentadas contemplam, em conjunto, os
objetivos inicialmente propostos de compreender o uso do desvio condicional simples e entender a aplicabilidade do desvio condicional composto. A
resposta para a atividade um a alternativa (c). Para resolver essa atividade,
necessrio interpretar o algoritmo. Inicialmente, so definidas trs variveis
do tipo inteiro, onde x=4, y=2 e z=3. Na terceira linha, declarada uma
varivel do tipo real com o nome resultado (que armazenar o resultado do
processamento). Na quarta linha, a varivel resultado recebe o resultado da
equao (x % 2) * z ^ 3. Conhecendo os valores de x e z, podemos reescrever
a equao para (4 % 2) * 3 ^ 3. Agora, para encontrar o resultado, devem-se
realizar as operaes aritmticas da expresso obedecendo a suas prioridades.
Primeiro calcula-se 4 % 2 (o resto da diviso de 4 por 2), que igual a 0
(zero). Na seqncia, a operao 3 ^ 3 (3 elevado a 3), que igual a 27.
Por fim, a multiplicao 0 * 27, que igual a 0 (zero). Assim a varivel resultado recebe o valor 0 (zero). Na quinta linha, verifica-se se resultado menor
que 0 (zero), o que falso. Assim, segue para a linha sete e oito, em que se
verifica se a varivel resultado tem valor maior que 0 (zero), o que tambm
falso. Segue a execuo do algoritmo para a linha 10 e 11, escrevendo em tela
CONDIO 3. Com isso, temos que a resposta correta a alternativa (c).
Essa reposta pode ser verificada colocando o algoritmo no Portugol.
Para a atividade dois, a resposta a alternativa (d). Isso porque a afirmativa (I) verdadeira, pois como o prprio nome diz, estrutura seqencial
obedece a uma seqncia linear de execuo. J na afirmativa (II), sabemos
66

Livro _logica_programacao.indb 66

05/04/2016 08:59:51

Estrutura de seleo simples e composta

que um teste condicional baseado em lgica convencional e, portanto, deve


resultar em um valor verdadeiro ou falso. Repare que nessa afirmativa no
especificado qual o tipo de desvio condicional, ou seja, a afirmao generaliza para todos os tipos. Contudo, na seleo simples, uma instruo ou um
conjunto de instrues executado somente se o teste condicional especificado retornar o valor verdadeiro. Adicionalmente, na seleo composta, as
instrues contidas nos desvios condicionais devem ser executadas sempre
para situaes verdadeiras ou falsas. O que torna a afirmativa (II) incorreta.
A afirmativa (III) tambm falsa, pois uma seqncia de comandos pode ser
executada nenhuma, uma ou vrias vezes,
Na atividade trs, o desvio condicional simples (ou apenas se simples),
uma estrutura de seleo que, com base em um teste lgico, permite optar pela
execuo (se a condio for verdadeira) ou no de um determinado trecho do
cdigo (opo nica), enquanto que, no desvio condicional composto (ou se
composto), temos a possibilidade de dar duas opes de execuo: uma, se
a condio for verdadeira; e outra, se a condio for falsa. Logo sempre ser
obrigatoriamente executado um dos conjuntos de instrues da estrutura.
Por fim, na atividade quatro, podemos realizar todas as operaes feitas
por um desvio condicional compostos mediante utilizao de duas estruturas
de desvio simples, diferindo apenas no gasto computacional, que superior
com a utilizao de desvio simples nesses casos. Voc deve observar que, uma
vez que no desvio composto a anlise da condio feita uma nica vez para
toda a estrutura, ao substituir um desvio composto por dois desvios simples,
a condio passar a ser avaliada em cada uma das duas estruturas isoladas.

Na prxima Aula
E ento? No est to difcil, no mesmo? Agora que voc j domina as
estruturas de seleo simples e compostas, poder verificar como aumenta seu
poder quando trabalharmos com essas estruturas encadeadas (ou aninhadas),
permitindo criar estruturas de deciso muito mais complexas e teis. No se
esquea de revisar esta aula e de dar uma boa olhada no material da prxima
para facilitar o aprendizado. At l!

67

Livro _logica_programacao.indb 67

05/04/2016 08:59:51

Lgica de programao

68

Livro _logica_programacao.indb 68

05/04/2016 08:59:51

6
Estrutura de seleo
encadeada
Introduo
Estamos quase concluindo as estruturas de seleo. S falta
conhecermos a estrutura de seleo encadeada e, por fim, dar uma
espiada na estrutura de seleo com mltipla escolha.
Aps esta aula, voc j ter conhecimento para desenvolver
algoritmos com um grau de complexidade maior, e poderemos
avanar para outro tipo de estruturas de grande importncia ao
desenvolvimento de sistemas.
Comecemos conversando um pouco sobre a tcnica de seleo encadeada.
Entendimento das estruturas de seleo simples e compostas essencial para a compreenso das estruturas de seleo encadeada e das estruturas de seleo com mltipla escolha. Se ainda tiver
dvidas, retome seu material e estude! No siga em frente sem esse
entendimento.

Livro _logica_programacao.indb 69

05/04/2016 08:59:52

Lgica de programao

Esperamos que, ao final desta aula, voc seja capaz de:


22

compreender a aplicabilidade das estruturas de seleo encadeadas;

22

entender a lgica para implementao de uma estrutura de seleo


com mltipla escolha.

6.1 Estrutura de seleo encadeada


A estrutura de seleo encadeada, tambm conhecida como desvio condicional encadeado, se encadeado ou se aninhado, nada mais do que uma
estrutura lgica composta por duas ou mais estruturas de desvio condicional
(simples ou compostas), uma dentro da outra.
Lembra do problema dois da aula anterior (aula trs)? Como no
havamosexplicado ainda o se aninhado, resolvemos com trs se simples.
Mas ser que essa era a melhor forma de resolver esse problema? Veja e analise
o exemplo a seguir, dessa vez resolvido com estrutura condicional encadeada
(se encadeado).
Figura 1 Exemplo de desvio condicional encadeado.

70

Livro _logica_programacao.indb 70

05/04/2016 08:59:53

Estrutura de seleo encadeada

Se prestar ateno, notar que h claramente duas estruturas condicionas compostas. Uma mais externa (1) e a outra dentro do espao reservado s
instrues que sero executadas no bloco do seno (2).
Se voc comparou com algoritmo da aula anterior, j deve ter notado
uma diferena na execuo: enquanto no primeiro algoritmo, com trs
estruturas de se simples, mesmo que os valores fossem iguais, o que
seria verificado no primeiro teste, seriam realizados os outros dois testes.
Ou seja, independentemente da execuo do contedo de um dos desvios condicionais, os outros dois teriam seus testes executados, mesmo
sabendo que o resultado para eles seria falso, o que representa desperdcio
de recursos computacionais e conseqente aumento do tempo de execuo do algoritmo.
Em contrapartida, no exemplo que utiliza a estrutura encadeada, assim
que um dos trs testes seja validado, a estrutura condicional encadeada encerra
ignorando os demais. Assim, na melhor das hipteses, s ser realizado um
teste e, na pior, sero realizados dois testes; enquanto que, com o uso de trs
estruturas simples, teramos sempre a realizao dos trs testes.
Vejamos outro exemplo. Suponhamos que temos de desenvolver um
algoritmo para classificar um grupo de atletas para uma competio de natao. Assim os competidores teriam de ser classificados conforme sua faixa
etria, em diferentes categorias, conforme segue:
22

infantil I = de 5 a 7 anos

22

infantil II = de 8 a 10 anos

22

juvenil I = de 11 a 13 anos

22

juvenil II = de 14 a 17 anos

22

adulto = maiores de 18 anos (idade mxima para participar = 22 anos)

A estrutura resultante do nosso exemplo o que chamamos de estrutura


de deciso encadeada homognea, pois pode ser facilmente identificado, de
forma visual, um padro na sua construo.
Analise bem o pseudocdigo, testando com diversos valores para a varivel idade, de forma a compreender a lgica e o funcionamento do mesmo.
71

Livro _logica_programacao.indb 71

05/04/2016 08:59:53

Lgica de programao

Figura 2 Exemplo de desvio condicional encadeado homogneo.

Assim como temos as estruturas de deciso encadeadas homogneas,


existem tambm as heterogneas estruturas nas quais no possvel visualizar um padro. Veja o exemplo a seguir.
22

Problema: implementar um algoritmo que solicite ao usurio a


idade, o sexo e se tem ou no disponibilidade para viajar a trabalho. Inicialmente, o algoritmo deve testar se a pessoa tem mais de
dezoito anos. Em caso positivo, se a pessoa for do sexo masculino,
dever exibir uma informao na tela avisando que a pessoa ser
alocada na filial 1 e, se tiver disponibilidade para viajar, trabalhar
como representante comercial. Se no tiver disponibilidade para
72

Livro _logica_programacao.indb 72

05/04/2016 08:59:53

Estrutura de seleo encadeada

viajar, deve ser informada sua funo como assistente administrativo. Se for do sexo feminino e com disponibilidade para viajar,
o algoritmo deve informar a funo de gerente de divulgao. Se
no apresentar disponibilidade para viagens, atuar como assistente
administrativo. No caso dos homens, se forem casados, s podero
atuar como representantes comerciais regionalmente. Caso contrrio, podero atuar nacionalmente. Caso a idade seja inferior a 18
anos e superior ou igual a 14 anos, a pessoa s estar apta para
o programa de estgio em vendas (para o sexo masculino) ou em
divulgao (para o sexo feminino). No caso do estagirio de sexo
masculino, eventualmente poder realizar viagens regionais.
Muita informao junta? V se acostumando! Um dos requisitos para
um bom analista e desenvolvedor a boa capacidade de interpretao. Isso
fundamental para poder realizar a implementao de um sistema da forma
adequada.
Inicialmente, voc deve identificar os dados de entrada necessrios para o
funcionamento do algoritmo. Nesse caso so a idade, o sexo, a disponibilidade
para viajar e o estado civil. Ou seja, uma varivel do tipo inteiro que denominaremos de idade e trs variveis do tipo texto, que nomearemos como sexo, disp
e estCiv.
Agora basta seguir as instrues dadas no texto do problema, atentando
para cumprir todos os requisitos necessrios. No final, voc dever ter alguma
coisa semelhante com o pseudocdigo a seguir, o qual, como voc poder
observar, no apresenta um padro visual. Isso o caracteriza como uma estrutura de deciso encadeada heterognea.
Figura 3 Exemplo de desvio condicional encadeado heterogneo.
// Exemplo 12 Estrutura heterognea
inicio

texto sexo , disp , estciv

escrever Digite a idade:

inteiro idade
ler idade

73

Livro _logica_programacao.indb 73

05/04/2016 08:59:54

Lgica de programao

escrever Digite o sexo (M/F):


ler sexo

escrever Tem disponibilidade para viajar (S/N):


ler disp

escrever Digite o estado civil(C/S):


ler estciv

se idade >= 18 entao


se sexo = M ou sexo = m entao

escrever \nAlocao: Filial I

se disp = s ou disp = S entao

escrever \nFuno: representante comercial


se estciv = s ou estciv = S entao

escrever \nAtuao: Regional

escrever \nAtuao: Nacional

senao

fimse

escrever \nFuno: Assistente administrativo

senao

fimse

escrever \nAlocao: Filial II

senao

Se disp = s ou disp = S entao

escrever \nFuno: Gerente de divulgao

escrever \nFuno: Assistente administrativo

senao

fimse

fimse

se idade >= 14 entao

senao

escrever \nAlocao: Filial I

74

Livro _logica_programacao.indb 74

05/04/2016 08:59:54

Estrutura de seleo encadeada



se sexo = M ou sexo = m entao
escrever \nFuno: Estagirio de vendas
se disp = s ou disp = S entao
escrever \nPoder realizar viagens regionais
fimse

senao
escrever \nFuno: Estagiria de divulgao

fimse

senao

escrever \nIdade insuficiente para ingresso

fimse
fimse
fim

Para concluir esta aula, temos ainda mais uma estrutura bastante til em
determinadas situaes. Trata-se da estrutura de deciso de mltipla escolha.
Segundo Forbellone e Eberspcher (2005), quando temos um conjunto
de elementos discretos que necessita ser testado e aes diferentes so associadas
a esses valores, estamos diante de uma estrutura de deciso encadeada homognea do tipo se-senao-se. Como essa situao bastante comum no desenvolvimento de algoritmos que dependem de alternativas (desvios condicionais),
usa-se uma estrutura especfica para esses casos, a seleo de mltipla escolha.
A sintaxe dessa estrutura pode ser representada da seguinte forma:
escolhe <expresso_0>

caso <Expresso_1o>,. . .,<Expresso_1n>:
<instrues>

. . . . . . . . . . .

caso <Expresso_no>,. . .,<Expresso_nn>,:
<instrues>
defeito:
<instrues>
fimescolhe

75

Livro _logica_programacao.indb 75

05/04/2016 08:59:54

Lgica de programao

Veja um exemplo simples no Portugol.


Figura 4 Exemplo de desvio condicional com seleo de mltipla escolha.

Nesse exemplo, voc pode verificar que, com base no contedo da varivel
sexo, a estrutura de seleo com mltiplas escolhas ir comparando o contedo
da varivel com o valor apresentado nas opes (caso). Se combinar com alguns
dos valores, ser executado o respectivo bloco de comandos. Se no houver
nenhuma equivalncia entre as opes apresentadas, ser executado o bloco de
comandos padro (default), no Portugol denominado defeito.
Saiba mais

No desvio condicional com seleo de mltipla escolha, a


opo default (padro) opcional. Ou seja, no obrigatria na estrutura da funo. Se utilizada, sempre que nenhum
dos casos for satisfeito, a estrutura escolhe...caso executar
as instrues padro (defeito). Se no existir essa condio e
no for satisfeito nenhum dos casos da estrutura, o pseudocdigo sair dela sem realizar nenhuma das aes e continuar a
execuo normal do restante do pseudocdigo.

76

Livro _logica_programacao.indb 76

05/04/2016 08:59:54

Estrutura de seleo encadeada

Vejamos mais um exemplo. J vimos uma estrutura condicional encadeada homognea, quando implementamos o pseudocdigo para distribuir
atletas em determinadas categorias, para uma competio de natao. Lembra? Pois bem... Implementemos, agora, a soluo para esse mesmo problema,
s que dessa vez utilizando a estrutura com mltiplas escolhas.
Figura 5 Exemplo de desvio condicional com seleo de mltipla escolha.
// Exemplo 14 Competio de Natao
inicio
inteiro idade
escrever Informe a idade:
ler idade
escolhe idade
caso 18 , 19 , 20 , 21 , 22:

escrever Adulto
caso 14 , 15 , 16 , 17:

escrever Juvenil II
caso 11 , 12 , 13:

escrever Juvenil I
caso 8 , 9 , 10:

escrever Infantil II
caso 5 , 6 , 7:

escrever Infantil I
defeito :

se idade > 22 entao
escrever Idade acima da permitida

senao
escrever idade abaixo da permitida

fimse
fimescolhe
fim

Analise esse pseudocdigo, comparando com o implementado utilizando a estrutura de deciso encadeada homognea vista anteriormente.
Repare que os dois pseudocdigos possuem a mesma funcionalidade, apesar
de ter estruturas to diferentes.
77

Livro _logica_programacao.indb 77

05/04/2016 08:59:54

Lgica de programao

Efetue testes com o pseudocdigo, alterando os valores iniciais da varivel


idade, de forma a compreender perfeitamente seu funcionamento. Com isso
encerramos mais uma aula, finalizando a apresentao das estruturas de seleo.

Sntese da aula
Esta aula apresentou detalhadamente a estrutura de seleo encadeada
(ou aninhada), mostrando sua flexibilidade, a ponto de permitir a implementao de complexas estruturas de deciso.
Vimos que, a partir da conjugao de estruturas mais simples, como a
da seleo simples e da seleo composta, possvel incrementar o poderio
lgico de um algoritmo para a soluo de diversos tipos de problemas do
mundo real.
Aps a estrutura de deciso encadeada, foi apresentada a estrutura de
deciso com mltiplas escolhas, que permite substituir estruturas de deciso
encadeadas do tipo homogneo, possibilitando uma fcil implementao e
maior clareza para a compreenso do algoritmo.

Atividades
1. Durante a construo de algoritmos, so comuns situaes em que uma
instruo, ou conjunto de instrues, deva ser executada somente para
uma determinada situao. Em outros casos mais complexos, dependendo
de uma condio previamente estabelecida, caso essa seja verdadeira, um
conjunto de comandos dever ser executado e, caso seja falsa, outro conjunto
ser executado. Sobre desvio condicional, analise o algoritmo a seguir.
1 incio
2
texto nome
3
inteiro sexo, idade
4
escrever Entre com seus dados\n
5
escrever Nome: \n
6
ler nome

78

Livro _logica_programacao.indb 78

05/04/2016 08:59:54

Estrutura de seleo encadeada


7
8
9
10

escrever Sexo:\n<1> Masculino\n<2> Feminino


ler sexo
escrever Idade:\n
ler idade

11

se sexo=/=1 e sexo =/=2 entao

12

escrever Sexo indefinido!\n

13 senao
14
se idade>0 entao
15

se sexo = 1 e idade<18 entao

16
escrever \Bem vindo,nome,\nVoc menor de idade
17 senao
18
se sexo =1 entao
19
escrever \Bem vindo,nome,\nVoc maior de idade
20 senao
21
se sexo = 2 e idade<18 entao
22
escrever \Bem vinda,nome,\nVoc menor de idade.
23 senao
24
escrever \Bem vinda,nome,\nVoc maior de idade.
25 fimSe
26 fimSe
27 fimSe
28 senao
29
escrever Voc deve entrar com idade maior que zero!
30 fimSe
31 fimSe
32 fim

Note que as linhas 11 e 15 esto em destaque. Isso porque essas linhas


podem ser substitudas por outros testes sem mudar o funcionamento do
algoritmo. Nesse sentido, assinale a nica alternativa em que trocando-se
as linhas destacadas do algoritmo pelas indicadas na alternativa mantm
o algoritmo inalterado.
a) LINHA 11: se sexo < 1 e sexo > 2 entao
79

Livro _logica_programacao.indb 79

05/04/2016 08:59:54

Lgica de programao

LINHA 15: se sexo = 1 e idade > 0 e idade < 18 entao

b) LINHA 11: se sexo < 1 ou sexo > 2 entao



LINHA 15: se sexo =/= 2 e idade > 0 ou idade < 18 entao
c) LINHA 11: se sexo < 1 e sexo > 2 entao

LINHA 15: se sexo = 1 e idade > 0 ou idade < 18 entao
d) LINHA 11: se sexo < 1 ou sexo > 2 entao

LINHA 15: se sexo =/= 2 e idade > 0 e idade < 18 entao
2. Analise o algoritmo a seguir, que tenta descrever o funcionamento de
uma calculadora e, em seguida, leia as afirmativas e assinale a alternativa
correta.
inicio
real res, n1, n2
texto opcao
escrever \nDigite a operacao desejada:
ler opcao
escrever Digite o primeiro operando:
ler n1
esrever Digite o segundo operando:
ler n2
escolhe opcao
caso +:
escrever n1+n2
caso :
escrever n1n2
caso *:
escrever n1*n2
caso /:
escrever n1/n2
defeito:
escrever Opco invlida.
fimescolhe
fim

80

Livro _logica_programacao.indb 80

05/04/2016 08:59:54

Estrutura de seleo encadeada

I. O algoritmo calcula as quatro operaes aritmticas bsicas (adio,


subtrao, multiplicao e diviso), desde que o usurio entre com
uma operao vlida (+, , *, /) e dois nmeros reais em seguida.
II. O algoritmo sempre escreve Opo invlida ao terminar sua
execuo.
III. O algoritmo no executar, devido s expresses dos CASOS serem
textos ao invs de inteiros.
IV. Sem usar a varivel res, o algoritmo no realiza a operao aritmtica.
a) Somente I est correta.
b) Somente I, II e III esto corretas.
c) Somente I e II esto incorretas.
d) Somente III e IV esto incorretas.
3. Implemente um algoritmo que solicite a entrada de um nmero inteiro e:
22

caso esse nmero seja maior do que zero, deve ser avaliado se ele
par, em caso positivo, algoritmo deve informar isso e calcular e
exibir o quadrado do nmero. Se o nmero for mpar, essa situao
deve ser informada, e o algoritmo deve incrementar o contedo da
varivel em uma unidade, exibindo o resultado;

22

caso o nmero seja igual a zero, deve ser emitida uma mensagem
informando que o valor digitado nulo; e, se o valor for negativo,
isso deve ser informado ao usurio.

4. Justifique o motivo pelo qual no vivel a utilizao de estrutura


condicional com mltiplas escolhas para resolver problemas que, com
estrutura de seleo encadeada, resultariam em um tipo de estrutura
heterognea.
Os objetivos desta aula foram alcanados se voc tiver acertado as atividades propostas. Para o objetivo de compreender a aplicabilidade das
estruturas de seleo encadeadas, propusemos as atividades um e trs;
para o objetivo de entender a lgica para implementao de uma estrutura de seleo com mltipla escolha, propusemos as atividades dois e
quatro. Verifique os resultados.
81

Livro _logica_programacao.indb 81

05/04/2016 08:59:54

Lgica de programao

Na atividade um, a resposta a alternativa (d). O que se procura


nessa atividade encontrar outros dois testes condicionais que podem
substituir os expressos nas linhas 11 (se sexo=/=1 e sexo=/= 2 entao) e 15
(se sexo=1 e idade<18 entao), sem mudar o funcionamento do algoritmo.
A alternativa (a) apresenta como possibilidade para a linha 11 se sexo < 1
e sexo > 2 entao, o que contraditrio, afinal s ser verdadeiro esse teste
quando sexo for menor que 1 e maior e 2, contudo no existe um nmero
que possa ser menor que 1 e maior que 2 ao mesmo tempo e, assim, no
expressa a idia original da linha 11 (que pode ser lida como: se sexo diferente de 1 e de 2 ento), o que invalida essa alternativa.
Na alternativa (b), a opo para a linha 11 (se sexo < 1 ou sexo > 2
entao) vlida porque a varivel sexo do tipo inteiro e, sendo assim, no
pode assumir valores no intervalo numrico ]1,2[. Nesse caso, s entrar
se sexo for diferente de 1 e 2. Contudo a opo da linha 15 (se sexo =/=
2 e idade > 0 ou idade < 18 entao) na alternativa (b) invlida porque o
teste idade > 0 ou idade < 18 ir aceitar qualquer valor inteiro. Afinal, 20,
por exemplo, maior que 0 (verdadeiro para o primeiro teste condicional)
e no menor que 18 (falso para o segundo teste condicional). Com isso,
verificando-se na tabela dos operadores lgicos da aula dois, v-se que
VERDADEIRO ou FALSO igual a VERDADEIRO. Contudo, o valor
20 falso no teste condicional original da linha 15. Na alternativa (c), a
opo para a linha 11 invlida como vimos na alternativa (a). A opo
da linha 15 da alternativa (c) invlida tambm pelos mesmos motivos
expostos na opo da linha 15 da alternativa (b).
Na alternativa (d), j sabemos que a opo da linha 11 vlida, como
argumentado na explicao da opo da linha 11 da alternativa (b). Na
opo da linha 15 da alternativa (d), a primeira parte (sexo=/=2) est correta, porque, repare nas linhas 11 e 13, s executar a linha 15 se o valor
de sexo for igual a 1 ou 2. Com isso, se o teste verifica se sexo diferente
de 2, ele s pode ser 1 (o que confere com a original). A segunda parte
tambm vlida porque na linha 14 verifica se idade maior que 0 (zero)
fazendo executar a linha 15 somente se idade for maior que 0 (zero).
Assim idade > 0 sempre verdadeiro, dependendo somente de idade <
18. Verificando na tabela dos operadores lgicos, o operador E s verdadeiro quando se tem VERDADEIRO e VERDADEIRO. Resumindo,
82

Livro _logica_programacao.indb 82

05/04/2016 08:59:54

Estrutura de seleo encadeada

s entrar se for satisfeita se a condio idade < 18 for verdadeira, o que


confere com a original.
Na atividade dois, a resposta correta a alternativa (a). Nessa atividade, voc encontra um algoritmo que utiliza a estrutura de seleo mltipla escolhe...caso. O algoritmo executar determinada operao aritmtica
de acordo com a opo digitada pelo usurio. A assertiva I diz que o algoritmo executar alguma expresso aritmtica, somente se o usurio digitar
no momento que lhe for sugerido uma das operaes: +, , * ou /. Depois
de ler dois nmeros reais digitados pelo usurio, o algoritmo imprimir o
resultado da operao em um dos casos definidos na estrutura de seleo
mltipla. J se no momento da leitura da varivel opo o usurio digitar
uma operao que no seja a definida anteriormente, o algoritmo imprimir na tela: Opo invlida. Portanto essa assertiva verdadeira. Com
relao assertiva II, conforme definido na estrutura defeito da seleo
mltipla, a mesma s ser executada caso nenhuma das definies de caso
seja satisfeita.
Portanto, ao entrar com uma operao aritmtica vlida (+, , * ou /),
o algoritmo no apresentar a mensagem Opo invlida, pois o mesmo
no ser executado. Devido a essa caracterstica do defeito, a assertiva
falsa. Com relao assertiva III, diferente das estruturas discutidas anteriormente, na estrutura escolhe...caso o teste condicional no retorna um
valor lgico, mas sim um valor inteiro, real ou caractere. Podemos observar
que o algoritmo no apresentar erros e executar normalmente, mesmo
comparando a varivel opcao com os caracteres +,, * e /.
Portanto a assertiva falsa, pois a mesma afirma que o algoritmo
no executar devido s expresses casos no serem inteiras. Finalmente,
com relao assertiva IV, a varivel res no foi utilizada em nenhum
momento no algoritmo, ela foi apenas declarada no incio do algoritmo.
Portanto, se retirarmos essa declarao, o funcionamento do algoritmo no
ser afetado de forma alguma. Podemos ento definir que a assertiva falsa,
pois a mesma tenta afirmar que sem a varivel em questo o algoritmo no
realiza a operao aritmtica.
A atividade trs resulta em um pseudocdigo semelhante ao seguinte, o
qual respeita as condies propostas no enunciado:
83

Livro _logica_programacao.indb 83

05/04/2016 08:59:54

Lgica de programao

Em resposta atividade quatro, pode-se concluir que a estrutura de seleo com mltiplas opes no vivel, em geral, para representao de estruturas encadeadas heterogneas por no apresentarem um padro lgico linear,
como o caso da atividade dois. Para representao mediante uma estrutura
de mltipla escolha (escolhe...caso), devemos ter um conjunto de elementos
discretos que necessita ser testado, para o qual aes diferentes devem ser
associadas a esses elementos.

Referncia
FORBELLONE, Andr Luiz Villar; EBERSPCHER, Henri Frederico.
Lgica de programao: a construo de algoritmos e estruturas de dados.
So Paulo: Pearson Prentice Hall, 2005.
84

Livro _logica_programacao.indb 84

05/04/2016 08:59:55

Estrutura de seleo encadeada

Na prxima aula
Na aula seguinte, conheceremos mais uma poderosa estrutura lgica de
programao que permitir executarmos diversas vezes um determinado trecho do pseudocdigo. a estrutura de repetio com teste no incio.
Como sempre, no custa lembrar, recomendamos que voc revise os
conceitos e tcnicas vistos at agora, e realize uma leitura prvia do contedo
da prxima aula.

85

Livro _logica_programacao.indb 85

05/04/2016 08:59:55

Lgica de programao

86

Livro _logica_programacao.indb 86

05/04/2016 08:59:55

7
Estrutura de repetio
com teste no incio

Introduo
Vamos agora conhecer mais um conjunto de estruturas de
extrema importncia para o desenvolvimento de sistemas realmente
teis. As estruturas de repetio.
Essas estruturas, tambm conhecidas como laos de repetio ou
loops, permitem que um bloco de instrues permanea sendo executado repetidamente, at que uma determinada situao seja alcanada,
momento no qual o lao interrompido, encerrando o algoritmo ou
continuando a execuo dos comandos existentes aps o lao.
Para que voc consiga acompanhar de forma satisfatria esta
aula, necessrio que domine as estruturas de programao seqencial e de desvio condicional estudadas at o presente momento.
Tambm a tranqilidade e a segurana na construo de expresses
lgico-matemticas para a correta compreenso e desenvolvimento
das estruturas que comearemos a estudar a partir desta aula sero

Livro _logica_programacao.indb 87

05/04/2016 08:59:56

Lgica de programao

fundamentais. Nosso estudo exige conhecimento cumulativo, por isso no


deixe lacunas para trs!
Esperamos que, ao final desta aula, voc seja capaz de:
22

compreender a utilidade dos laos de repetio na soluo de problemas;

22

aplicar as estruturas de repetio com teste no incio adequadamente, na construo de algoritmos.

7.1 Estruturas de repetio


Todos os pseudocdigos que estudamos e implementamos at agora,
durante nossas aulas, eram lineares, seqenciais, podendo ter desvios na sua
execuo, mas sempre avanando em direo ao fim do algoritmo, nunca
retornando para executar novamente algum comando anterior. Ou seja,
todos eles solucionavam o problema proposto apenas uma vez, tendo que
ser reiniciados para nova utilizao. Isso, como voc j deve ter notado, no
algo muito prtico.
Pense, por exemplo, no algoritmo para calcular a mdia das notas de um
aluno. Pois ... Para um nico aluno funciona muito bem. Contudo, se tivssemos que usar esse algoritmo para calcular a mdia de uma turma com 50
alunos, certamente no seria uma tarefa muito prtica. Uma sada, no muito
inteligente, seria repetir o trecho do programa quantas vezes fosse necessrio,
ou seja, no caso das mdias, o pseudocdigo teria o trecho que solicita as
notas, calcula e exibe a mdia, repetido 50 vezes.
aqui que entram em cena as estruturas de repetio. Comecemos ento
a compreender suas estruturas e lgica de funcionamento.

7.1.1 Repetio com teste no incio (enquanto ... faz)


O lao de repetio com teste no incio uma estrutura que executa a
repetio de um determinado trecho do cdigo desde que permitido por uma
verificao anterior.
Essa estrutura com teste no incio denominada de enquanto e permite
a repetio de um trecho de cdigo enquanto uma determinada condio for
verdadeira. Sua sintaxe representada na figura seguinte.
88

Livro _logica_programacao.indb 88

05/04/2016 08:59:56

Estrutura de repetio com teste no incio

Quadro 1 Sintaxe e fluxograma do loop com teste no incio.


SINTAXE EM PSEUDOCDIGO

FLUXOGRAMA

Vejamos agora um pequeno exemplo do uso dessa estrutura. O algoritmo seguinte realiza a exibio em tela dos nmeros de 1 a 10 em ordem
crescente, utilizando o lao de repetio enquanto.
criada uma varivel i do tipo inteiro, a qual a cada execuo do lao
incrementada em 1. Ou seja, a cada execuo, a varivel recebe o seu valor atual
mais um (i i +1). Essa varivel costuma ser denominada de contador, haja
vista que sua funo justamente contar a quantidade de iteraes realizadas
ou a quantidade de vezes que uma determinada situao ocorre. A condio
imposta na primeira linha do enquanto garante a finitude do lao, pois no
momento em que a varivel i no satisfaa mais a condio, no ser mais
permitida a execuo das instrues contidas no loop, saindo da estrutura de
repetio e continuando a execuo dos comandos seguintes do pseudocdigo.
Figura 1 Exemplo de loop com teste no incio.

89

Livro _logica_programacao.indb 89

05/04/2016 08:59:56

Lgica de programao

Vamos agora implementar o algoritmo para calcular a mdia da nota de


duas provas para uma turma de 50 alunos. Se voc compreendeu o funcionamento do exemplo anterior, j deve ter uma boa idia de como elaborar esse
algoritmo.
Figura 2 Exemplo de loop com teste no incio.
// Exemplo 16 Clculo da mdia 50 alunos
inicio

real nota1 , nota2

inteiro i <- 1

enquanto i <= 50 faz
escrever Aluno , i , \n
escrever Digite a primeira nota:
ler nota1
escrever Digite a segunda nota:
ler nota2
escrever Mdia = , ( nota1 + nota2 ) / 2 , \n\n
i <- i + 1

fimenquanto
fim

Muito bem. Mas creio que, aps analisar o cdigo anterior, voc j deva
ter se perguntado:

Mas... e se eu no quiser as mdias dos 50 alunos? Se quiser parar antes dos cinqenta ou se
quiser calcular para um nmero maior?

Realmente o algoritmo proposto est bem rgido nesse aspecto. Ele s
serve para calcular a mdia de 50 alunos. Nem mais, nem menos (a no ser
que voc force o encerramento do programa). Mas basta uma pequena alterao para resolver esses problemas. Vejamos.
90

Livro _logica_programacao.indb 90

05/04/2016 08:59:56

Estrutura de repetio com teste no incio

Figura 3 Exemplo de loop com teste no incio.

Com a alterao realizada no pseudocdigo, o nosso contador i perdeu a


funo de definir o momento de encerramento do lao e passou a servir unicamente para indicar o nmero do aluno para o qual foi realizado o clculo
da mdia. Ele permanece com a funo de contador, mas no influencia mais
a execuo ou no do loop.
Dessa forma, o controle de execuo do lao passou para o usurio, o
qual gerencia essa estrutura por meio da varivel continua. Enquanto o usu 91

Livro _logica_programacao.indb 91

05/04/2016 09:00:01

Lgica de programao

rio permanecer inserindo o valor s para essa varivel, o lao continua em


execuo. Quando for digitado um caractere diferente, o loop ser encerrado.
Assim a varivel continua o que denominamos de critrio de parada do
nosso lao.
Voc tambm pode especificar previamente, durante a execuo do algoritmo, a quantidade de vezes que o lao ser repetido. Vejamos um exemplo
disso em um algoritmo implementado para retornar a mdia de n nmeros
digitados pelo usurio. O algoritmo deve solicitar ao usurio quantos nmeros sero digitados para o clculo. Aps isso, deve entrar no lao, solicitar a
entrada dos n valores e, aps a leitura de todos, calcular a mdia. Aqui entra
mais um conceito: acumulador. Assim como o contador serve para contar a
quantidade de vezes que um lao, ou um determinado evento dentro dele,
executado, o acumulador visa a realizar o armazenamento cumulativo de
valores dentro de uma varivel (como, por exemplo, um somatrio).
Assim, dentro do lao, alm do contador que controlar o nmero de
execues do loop, teremos um acumulador, o qual ir somando todos os
valores digitados para, aps o encerramento do lao, ser dividido pela quantidade de valores digitados obtendo, dessa forma, a mdia.
O seu algoritmo deve ficar parecido com o exemplo a seguir.
Figura 4 Exemplo de loop com teste no incio.
// Exemplo 18 Clculo da mdia com acumulador
inicio
real valor , acum <- 0
inteiro cont <- 1 , n
escrever Quantos nmeros deseja digitar?
ler n
enquanto cont <= n faz
escrever Digite o valor , cont , :
ler valor

acum <- acum + valor

cont <- cont + 1
fimenquanto

92

Livro _logica_programacao.indb 92

05/04/2016 09:00:01

Estrutura de repetio com teste no incio





fim

fimenquanto
cont <- cont 1
escrever \nA soma dos , cont , nmeros : , acum
escrever \nA mdia dos nmeros : , acum / cont

Para fixarmos melhor a estrutura de repetio com teste no incio, vamos


desenvolver um ltimo algoritmo que sirva para listar todos os nmeros pares
de 0 a 100, informando tambm a quantidade, o somatrio e a mdia deles.
Figura 5 Exemplo de loop com teste no incio.

Com esse exemplo, conclumos mais uma aula da nossa disciplina de


lgica para programao. Revise bem os conceitos e exemplos dados de forma
a dirimir qualquer dvida. Sobretudo no custa lembrar que voc deve treinar muito o desenvolvimento de algoritmos, pois s possvel aprender a
desenvolv-los colocando a mo na massa, construindo e testando algorit 93

Livro _logica_programacao.indb 93

05/04/2016 09:00:01

Lgica de programao

mos. No se iluda em querer aprender apenas compreendendo o funcionamento de algoritmos prontos. Crie problemas e solucione-os com algoritmos
desenvolvidos por voc. Use a criatividade!

Sntese da aula
Nesta aula, vimos a estrutura de repetio com teste no incio enquanto...
faz, a qual nos permite repetir blocos de instrues nenhuma, uma ou diversas vezes. Ou seja, o bloco de comando permanecer sendo executado repetidamente, enquanto a condio lgica da estrutura estiver retornando um
valor verdadeiro. Esse tipo de estrutura extremamente til, pois, geralmente, para solucionarmos problemas por meio computadorizado, necessria a r epetio de determinados processos, o que no era tecnicamente vivel
com as estruturas seqenciais e de desvio condicional (estruturas de seleo
simples, composta e encadeada).

Atividades
1. Dado o algoritmo a seguir, que faz uso do lao de repetio enquanto,
qual ser o valor exibido na tela aps sua execuo?
inicio

inteiro x , resultado

resultado < 0

x < 5

enquanto ( x > 0 ) faz

resultado < x * 2

x < x 1

fim

resultado < resultado 2

fimenquanto

escrever resultado

94

Livro _logica_programacao.indb 94

05/04/2016 09:00:01

Estrutura de repetio com teste no incio

a) 2

c) 0

b) 2

d) 1

2. As estruturas de repeties (tambm conhecidas por lao ou loop)


permitem executar uma instruo ou um bloco de instrues repetidas
vezes de forma automatizada. Contudo devemos controlar quando
iniciar e interromper o processamento das instrues. Leia as afirmativas
e assinale a alternativa correta sobre estruturas de repetio.
I. A condio de parada de um lao definida com uso de expresses
lgicas ou relacionais.
II. Um lao no termina sua execuo quando no possvel atingir
sua condio de parada.
III. Em todos os tipos de estruturas de repeties necessrio ter
conhecimento exato de quantas vezes sero repetidas as instrues.
a) Somente I falsa.
b) Somente II falsa.
c) Somente III falsa.
d) Todas as afirmativas so verdadeiras.
3. Implemente um algoritmo que use a estrutura enquanto...faz para solicitar a entrada de uma quantidade indeterminada de valores inteiros
maiores que zero. Quando o usurio informar que no deseja inserir
mais nenhum nmero, o algoritmo deve exibir a soma de todos os
valores digitados, a quantidade de valores pares, a quantidade de valores
mpares e a mdia geral de todos os valores inseridos. S aps isso ele
deve ser encerrado.
Obs.: a condio de parada valor=0, ou seja, quando o usurio digitar
0 para a varivel valor, o lao deve encerrar.
4. O que so acumuladores e contadores? Discorra sobre eles em um texto
de cinco a dez linhas.
95

Livro _logica_programacao.indb 95

05/04/2016 09:00:01

Lgica de programao

Comentrio das Atividades


As atividades propostas visaram ao alcance dos objetivos desta aula, quais
sejam: compreender a utilidade dos laos de repetio na soluo de problemas e aplicar as estruturas de repetio com teste no incio adequadamente,
na construo de algoritmos. Observe os resultados que voc deve ter obtido.
Na atividade um, deve ser assinalada a alternativa (c), pois a durante a
execuo do algoritmo dado, a varivel resultado sempre recebe o dobro de x e,
depois, recebe o seu valor atual menos dois. Assim, como o x decrementado
em 1 a cada execuo do lao, no momento em que x = 1, resultado = 2 * x 2.
Logo resultado = 0.
Para a atividade dois, a alternativa (c) a resposta correta, porque a primeira afirmao verdadeira, visto que as expresses lgicas ou relacionais so
usadas para determinar o fim de um loop (lao de repetio). A segunda afirmao tambm verdadeira, visto que, enquanto a condio de parada no for
alcanada, o loop (lao de repetio) executar o bloco de instrues indefinidamente. Por fim, a terceira afirmao est incorreta, j que nem sempre se
tem o conhecimento exato de quando o lao de repetio ir parar, pois muitas
situaes podem ocorrer dentro de um bloco de instruo mudando os rumos
da expresso lgica ou relacional a fim de que continue a executar o bloco de
instrues indefinidamente.
O algoritmo solicitado na atividade trs, pode ficar parecido com o
seguinte:
inicio

inteiro valor , cont <- 0 , acum <- 0 , par <- 0 , imp <- 0
escrever \nDigite um valor:
ler valor

enquanto valor =/= 0 faz


se valor % 2 = 0 entao

senao

par <- par + 1


imp <- imp + 1
fimse
96

Livro _logica_programacao.indb 96

05/04/2016 09:00:01

Estrutura de repetio com teste no incio

fim

acum <- acum + valor


cont <- cont + 1
escrever \nDigite um valor:
ler valor
fimenquanto
escrever \nQuantidade de pares: , par
escrever \nQuantidade de mpares: , imp
escrever \nTotal dos valores digitados: , acum
escrever \nMdia geral: , acum \ cont

Realize uma anlise desse cdigo comparando-o com o que voc desenvolveu e, para uma melhor compreenso, implemente-o no Portugol para
verificar sua funcionalidade.
Finalmente, na atividade quatro, um contador nada mais do que uma
varivel utilizada para contar a quantidade de execues de um lao, ou a
quantidade de vezes que uma determinada situao acontece. Pode ser utilizada de muitas formas, mas sempre procurando contar as ocorrncias de
algum evento dentro do lao. O acumulador, por outro lado, uma varivel
que armazena valores de forma cumulativa. O acumulador pode, por exemplo, realizar o somatrio de valores a cada execuo do lao.

Na prxima aula
Verificaremos duas variaes de lao de repetio. Dessa vez com o teste
sendo realizado no final, e no no incio, como o caso do enquanto...faz.
Vamos adiantar uma espiada nesse contedo para chegar no dia da aula j
com uma boa base de conhecimento? Ento, mos obra!

97

Livro _logica_programacao.indb 97

05/04/2016 09:00:02

Lgica de programao

98

Livro _logica_programacao.indb 98

05/04/2016 09:00:02

8
Estrutura de repetio
com teste no final
Introduo
J trabalhamos com estruturas de repetio com teste no incio. Nesse tipo de estrutura, o teste realizado antes de entrar no
bloco de instrues e, assim, as instrues podem ser executadas
nenhuma, uma ou diversas vezes. S executar os comandos se a
condio for satisfeita.
As estruturas que estudaremos agora tm, como peculiaridade, a execuo do teste aps o bloco de instrues. Ou seja, como
o teste realizado aps a execuo dos comandos contidos no lao,
isso garante que essas instrues sero realizadas ao menos uma vez
antes de encerrar o loop. Logo esse tipo de estrutura executa as suas
instrues internas uma ou diversas vezes.
vital a perfeita compreenso do funcionamento das estruturas de repetio estudadas na aula anterior, pois as que abordaremos
nesta aula so variaes dessas, com alteraes na sua estrutura lgica.
Dessa forma, revise as estruturas de repetio para no ter dificuldades
na compreenso de sua aplicabilidade com teste no final.

Livro _logica_programacao.indb 93

05/04/2016 09:00:03

Lgica de programao

Esperamos que, ao final desta aula, voc seja capaz de:


22

diferenciar a aplicabilidade das estruturas de repetio com teste no


incio das estruturas de repetio da aplicabilidade com teste no final;

22

entender a funcionalidade de cada uma das estruturas de repetio


com teste no final.

8.1 Estrutura de repetio com


teste no final (faz ... enquanto)
J vimos o funcionamento do lao enquanto...faz, no qual o teste realizado no incio da estrutura. Agora veremos uma estrutura que faz justamente
o contrrio: o lao de repetio faz...enquanto. Vejamos a sua sintaxe.
Quadro 1 Sintaxe e fluxograma de estrutura de repetio faz...enquanto.
SINTAXE EM PSEUDOCDIGO

FLUXOGRAMA

O faz...enquanto permanece em looping at que a condio seja falsa.


Vejamos a seguir um pequeno exemplo do funcionamento desse tipo de lao.
Nesse exemplo, o pseudocdigo solicita inicialmente que o usurio entre
com o nmero correspondente a um ms do ano. Aps a digitao e confirmao pelo usurio, ser executado o bloco de instrues nesse caso, um
bloco de desvio condicional com mltiplas escolhas.
S depois da execuo dos comandos internos do lao que a condio
ser testada e, enquanto ela retornar um valor verdadeiro, o lao permanecer
em execuo. Somente quando for digitado um valor que no satisfaa a condio imposta (um valor que retorne falso) que o lao encerrar.
94

Livro _logica_programacao.indb 94

05/04/2016 09:00:03

Estrutura de repetio com teste no final

Analise o pseudocdigo com ateno, realizando sua execuo mentalmente com diversos valores diferentes para a varivel mes, de forma que possa
compreender bem o seu funcionamento.
Figura 1 Exemplo de estrutura de repetio faz...enquanto.

95

Livro _logica_programacao.indb 95

05/04/2016 09:00:03

Lgica de programao

8.2 Estrutura de repetio com


teste no final (repete...ate)
Outra estrutura bastante semelhante a anterior, tambm com a condicional definida no final da estrutura, a repete...ate. A sua diferena bsica
em relao ao faz...enquanto que ela encerra a execuo do lao apenas
quando a condio for verdadeira. Vejamos ento sua sintaxe.
Quadro 2 Sintaxe de estrutura de repetio repete...ate e representao em fluxograma.

SINTAXE EM
PSEUDOCDIGO

FLUXOGRAMA

Compare o fluxograma dessa estrutura com o do faz ... enquanto para


identificar a diferena de funcionalidade.
Veja um pequeno exemplo, no qual o pseudocdigo apresenta na tela os
nmeros de 1 a 10, utilizando essa estrutura.
Figura 2 Exemplo de estrutura de repetio repete ... ate.

96

Livro _logica_programacao.indb 96

05/04/2016 09:00:03

Estrutura de repetio com teste no final

Voc pde notar, nesse exemplo, que o lao s encerra sua execuo
quando a sua condio retorna um valor verdadeiro; nesse caso, quando a
varivel i igual a dez.
Vamos exercitar um pouco? Tente resolver o seguinte problema e s depois
de ter a sua verso do algoritmo funcionando confira com o pseudocdigo aqui
apresentado para poder comparar detalhes e diferenas das implementaes.
22

Problema: desenvolva um jogo no qual o computador escolhe um


nmero inteiro positivo entre 0 (zero) e 100 (cem) de forma aleatria (j utilizamos antes essa funo). Aps determinar o nmero
(sem exibi-lo ao usurio), o computador solicitar que voc permanea chutando valores at acertar o nmero oculto. A cada
tentativa do usurio, o computador deve informar se o nmero
oculto maior ou menor do que o informado pelo jogador. O jogo
terminar no momento em que o nmero for localizado, quando
ento o computador dever encerrar o lao, informando o nmero
oculto e a quantidade de tentativas necessrias para encontr-lo.

Figura 3 Exemplo de estrutura de repetio repete ... ate.

97

Livro _logica_programacao.indb 97

05/04/2016 09:00:04

Lgica de programao

Fcil, no verdade? E se no desejssemos que o jogo encerrasse ao ser


encontrado o nmero? Pois bem. Se quisermos permitir que o jogador decida
se quer parar de jogar ou tentar uma nova rodada do jogo, necessrio realizar uns pequenos ajustes no pseudocdigo. Pense um pouco antes de conferir
o algoritmo pronto para ver se voc consegue adequar o cdigo anterior para
permitir essa funcionalidade.
Figura 4 Exemplo de estrutura de repetio repete ... ate.

98

Livro _logica_programacao.indb 98

05/04/2016 09:00:04

Estrutura de repetio com teste no final

Pronto! Analise esse cdigo e compare com o anterior para verificar


quais foram as alteraes implementadas.
Com isso, estamos encerrando o contedo desta aula e nos aproximando
do final da nossa disciplina. No deixe de executar as atividades do caderno e
de acessar o material complementar disponibilizado pelos professores.

Sntese da aula
As estruturas de repetio com teste no final apresentam uma variante
estrutura de repetio com teste no incio, tendo como principal diferena o
fato de que a estrutura com teste no incio pode ser executada nenhuma, uma
ou diversas vezes. J as estruturas com teste no final tm seu bloco de instrues executadas ao menos uma vez, independentemente do valor do seu teste
lgico (condio). Assim esse tipo de estrutura executado uma ou diversas
vezes, mas nunca nenhuma vez.

Atividades
1. As estruturas de repetio possuem caractersticas particulares em
sua construo e forma de execuo. Considerando que h estruturas
que permitem a repetio nenhuma, uma ou vrias vezes, analise o
algoritmo a seguir sabendo que, sem modificar o tipo da estrutura de
repetio, desejo efetuar uma pequena alterao para que o lao repita
nenhuma vez. Assinale a alternativa mais adequada.
inicio
inteiro numero, contador
repete
escrever Introduza um numero:
ler numero
contador <- contador + 1
ate contador > 5
fim

a) Bastaria iniciar a varivel contador com valor 6.


99

Livro _logica_programacao.indb 99

05/04/2016 09:00:04

Lgica de programao

b) Apenas necessrio modificar o teste condicional para contador < 5


em vez de contador > 5.
c) possvel realizar a modificao adequadamente movendo a linha
contador <- contador + 1 para o incio do bloco, logo abaixo de
repete.
d) No possvel fazer a modificao deseja, j que a estrutura em
questo sempre executa o bloco pelo menos uma vez.
2. A funo bsica de um caixa de supermercado apenas somar os preos
dos produtos desejados para compra pelo cliente. Diante disso, um algoritmo bsico para a soma dos produtos que o cliente comprar pode ser
dado pelo algoritmo a seguir:
inicio
inteiro opcao, quantidade
real total < 0.0
repete
escrever Produto 1 - R$ 10,00\n
escrever Produto 2 - R$ 25,00\n
escrever Produto 3 - R$ 50,00\n
escrever Escolha um nmero de produto ou 0 para
sair:
ler opcao
escolhe opcao
caso 0:
escrever Total da compra:, total
caso 1:
ler quantidade
total < total + quantidade * 10.0
caso 2:
ler quantidade
total < total + quantidade * 25.0
caso 3:
ler quantidade
total < total + quantidade * 50.0
fimescolhe
ate (opcao = 0)
fim

100

Livro _logica_programacao.indb 100

05/04/2016 09:00:04

Estrutura de repetio com teste no final

Diante do algoritmo, se forem entrados os valores 2, 5, 3, 1, 0, respectivamente, teremos a sada final mostrada pelo Portugol da seguinte
forma:
a) total da compra: 275.0;
b) o algoritmo no executar devido inexistncia da clusula defeito
na sintaxe do algoritmo escolhe...caso;
c) total da compra: 175.0;
d) o algoritmo entrar em uma repetio infinita.
3. Quando algoritmos so criados, algumas vezes h necessidade de
controlar a ordem em que as instrues devero ser executadas pelo
computador de modo a solucionar um problema. Para permitir que
o fluxo de execuo seja controlado, devemos utilizar as estruturas de
controle. Sobre fluxo de execuo, leia as afirmativas a seguir e assinale a
alternativa correta.
I. Na estrutura seqencial, os comandos de um algoritmo so
executados em uma seqncia pr-estabelecida, ou seja, cada
comando executado somente aps o trmino do comando
anterior.
II. Na estrutura de deciso (desvio condicional), so comuns situaes em que uma instruo, ou conjunto de instrues, devam ser
executados sempre para situaes verdadeiras e falsas.
III. Em todas as estruturas de repetio, uma sequncia de comandos
dever ser executada obrigatoriamente uma ou vrias vezes, de
acordo com uma condio.
a) Somente as afirmativas I e II so verdadeiras.
b) Somente a afirmativa II falsa.
c) Somente a afirmativa III verdadeira.
d) Somente as afirmativas II e III so falsas.
4. Um algoritmo para selecionar o maior nmero entre N digitados, at o
usurio digitar zero, poderia ser definido como:
101

Livro _logica_programacao.indb 101

05/04/2016 09:00:04

Lgica de programao

inicio
inteiro maior <- 1
inteiro numeros
repete
escrever Digite um numero (zero para sair):
ler numeros
se numeros > maior entao
maior <- numeros
fimse
ate maior = 0
escrever O maior numero digitado foi: , maior
fim

Dado o algoritmo anterior, o que est errado em relao ao que foi proposto?
a) O Nmero maior no ser calculado de forma correta, pois o mesmo
sempre estar com o valor zero.
b) A varivel nmero no armazena o valor digitado pelo usurio.
c) O lao de repetio encerra aps a leitura do nmero 1, no do zero.
d) O lao de repetio ficar repetindo, pois nunca ser atendida a
condio de parada.

Comentrio das Atividades


Ao resolver a atividade um voc alcanou o objetivo da aula de diferenciar a aplicabilidade das estruturas de repetio com teste no incio das
estruturas de repetio com a aplicabilidade de teste no final.
Para a atividade um, a resposta correta a alternativa (d). Segundo a
proposta da atividade, de modificar o algoritmo para que no seja executado
o bloco interno ao lao sem que seja modificada a estrutura de repetio,
podemos refletir que modificar a varivel contador para 6 no impede de
executar pelo menos uma vez o bloco de instrues do lao. Modificar o teste
condicional para contador < 5 tambm no impede a execuo do bloco de
instrues do lao, j que o teste da estrutura repete...at sempre realizado
aps a execuo. Modificar a posio do incremento da varivel contador
102

Livro _logica_programacao.indb 102

05/04/2016 09:00:04

Estrutura de repetio com teste no final

dentro do bloco interno de instrues tambm no evita a execuo do bloco.


Portanto a alternativa (d) a correta, j que a modificao desejada no
possvel sem que se modifique a estrutura de repetio.
As atividades dois, trs e quatro ajudaram voc a atingir o segundo objetivo: entender a funcionalidade das estruturas de repetio com teste no final.
Na atividade dois, a alternativa correta a (c). Para resolver essa atividade,
necessrio analisar o algoritmo. No prprio enunciado so apresentados os
valores que devero ser entrados, na ordem em que foram apresentados: 2, 5,
3, 1, 0. O algoritmo iniciar execuo e logo solicitar que o primeiro valor seja
entrado na linha 9, que representa a opo selecionada. Como o primeiro dado
entrado 2, a estrutura de seleo mltipla desviar a execuo do algoritmo
para a linha 16 (caso 2). Na seqncia (linha 17), pedido ao usurio que entre
com o segundo valor (5, de acordo com o enunciado), que ser atribudo
varivel quantidade. Na linha 18, a varivel total receber o resultado do processamento de total + quantidade * 25. Total nesse momento 0.0 (zero), como
atribudo na linha 3 e quantidade igual a 5. Reescrevendo, total vai receber o
resultado do processamento de 0 + 5 * 25 que igual a 125. Em seguida, por
causa do lao de repetio repete...at, parte do algoritmo ser repetida. solicitado ao usurio a entrada do terceiro dado (3, de acordo com o enunciado). A
estrutura de seleo mltipla desviar a execuo do algoritmo para a linha 19
(caso 3). Na seqncia (linha 20), pedido ao usurio que entre com o quarto
valor (1), de acordo com o enunciado, que ser atribudo varivel quantidade.
Na linha 21 a varivel total vai receber o resultado do processamento de total +
quantidade * 50. Sabendo que total igual a 125 e quantidade igual a 1, podemos reescrever para 125 + 1 * 50, que igual a 175. Em seguida, por causa do
lao de repetio repete...at, parte do algoritmo ser repetida. solicitado ao
usurio a entrada do ltimo dado (0). A estrutura de seleo mltipla desviar
a execuo do algoritmo para a linha 11 (caso 0). impresso em tela Total da
compra: 175.0 (lembrando que total uma varivel real) e sair finalizando o
algoritmo.
Para a atividade trs, a resposta a alternativa (d). Isso porque a afirmativa ( I ) verdadeira, pois como o prprio nome diz, estrutura seqencial
obedece a uma seqncia linear de execuo. J na afirmativa (II), sabemos
que um teste condicional baseado em lgica convencional e, portanto, deve
resultar em um valor verdadeiro ou falso. Lembre-se dos tipos de desvios con 103

Livro _logica_programacao.indb 103

05/04/2016 09:00:04

Lgica de programao

dicionais: seleo simples, composta e encadeada. Repare que nessa afirmativa no especificada qual o tipo de desvio condicional, ou seja, a afirmao
generaliza para todos os tipos. Contudo, na seleo simples, uma instruo ou
um conjunto de instrues executado somente se o teste condicional especificado retornar o valor verdadeiro. Adicionalmente, na seleo composta,
as instrues contidas nos desvios condicionais devem ser executadas sempre
para situaes verdadeiras ou falsas. Isso torna a afirmativa (II) incorreta. A
afirmativa (III) tambm falsa, pois uma seqncia de comandos pode ser
executada nenhuma, uma ou vrias vezes.
Para a atividade quatro, a alternativa a ser assinalada a (d), uma vez
que a varivel maior j inicia com um valor diferente de zero e, em nenhum
momento na execuo do algoritmo ela poder assumir o valor zero, pois o
desvio condicional dentro do bloco do lao de repetio no permite essa
atribuio. A varivel que deveria servir para encerrar o lao seria a nmeros,
pois ela que recebe o valor digitado pelo usurio, enquanto a maior sempre
ir armazenar o maior valor digitado.

Na prxima aula
Encerraremos a disciplina abordando mais uma estrutura de repetio:
estrutura de repetio com varivel de controle. Realize uma leitura prvia
desse contedo para uma melhor compreenso.

104

Livro _logica_programacao.indb 104

05/04/2016 09:00:04

9
Estrutura de repetio
com varivel de controle

Introduo
Nesta aula, iremos conhecer as estruturas de repetio com
varivel de controle. Como voc poder verificar, um tipo de estrutura muito utilizado na programao devido sua versatilidade.
fundamental o conhecimento e domnio de todas as estruturas lgicas abordadas nesta disciplina para voc poder entender
perfeitamente o funcionamento desse tipo de lao de repetio. Esse
conhecimento tambm ajudar voc a identificar a estrutura mais
adequada a ser utilizada em cada situao.
Esperamos que, ao final desta aula, voc seja capaz de:

Livro _logica_programacao.indb 111

22

entender a lgica de funcionamento da estrutura de repetio com varivel de controle;

22

saber quando aplicar esta estrutura para a correta construo de um algoritmo.

05/04/2016 09:00:05

Lgica de programao

Lembre-se de exercitar bastante esse e os demais conceitos e tcnicas


vistos durante a disciplina, pois a clara compreenso de todos eles, bem como
saber utiliz-los de forma adequada na soluo de problemas, vital para a
correta compreenso das disciplinas vinculadas ao desenvolvimento de sistemas que surgiro no decorrer do curso.

9.1 Repetio com varivel de controle


Nas estruturas de repetio que vimos at agora, ocorrem situaes nas
quais difcil determinar o nmero de vezes em que o bloco de instrues
ser executado. Sabe-se que ele ser executado enquanto uma condio for
satisfeita (enquanto) ou at o momento em que uma condio seja satisfeita
(repete).
O lao de repetio com varivel de controle, tambm conhecido como
para, difere dos anteriores, pois sempre repete a execuo do bloco de instrues um nmero predeterminado de vezes, uma vez que essa estrutura
no prev uma condio (como o caso das estruturas de repetio vistas
anteriormente), possuindo limites fixos de incio e fim do lao de repetio
(FORBELONE; EBERSPCHER, 2005).
Vejamos, a seguir, a sintaxe e representao por meio de fluxograma
dessa estrutura de repetio.
Quadro 1 Sintaxe e fluxograma do lao de repetio para.
SINTAXE EM
PSEUDOCDIGO

112

Livro _logica_programacao.indb 112

05/04/2016 09:00:05

Estrutura de repetio com varivel de controle

FLUXOGRAMA

Agora podemos dar uma olhada em um pequeno algoritmo que, usando


o lao de repetio para, lista dez nmeros inteiros seqenciais.
Figura 1 Exemplo de estrutura de repetio para.

Repare que criada uma varivel de controle do tipo inteiro, nesse


exemplo nomeada como contador e, dentro da primeira linha do lao, ela
inicializada com o valor 0 (zero). Nessa estrutura voc pode inicializar a varivel de controle com o valor necessrio para o incio das instrues do lao.
A seguir, definido o valor final da varivel (9) e o valor do incremento automtico (passo 1 opcional). Assim, cada vez que o algoritmo chegar ao final
da estrutura (comando proximo), o valor da varivel ser automaticamente
incrementado no valor estipulado em passo. Se no for definido o passo, ser
automaticamente assumido passo 1.
O pseudocdigo seguinte apresenta um exemplo de lao para com
decremento, para o qual foi necessrio inicializar a varivel de controle com
um valor maior (9) que o valor final (0) e definir o passo com uma unidade
negativa (-1).
113

Livro _logica_programacao.indb 113

05/04/2016 09:00:06

Lgica de programao

Figura 2 Exemplo de estrutura de repetio para.

Como exemplo, vamos implementar um algoritmo que exiba a tabuada


de um nmero inteiro informado pelo usurio, usando a estrutura de repetio para dentro de um lao repete, de forma que o programa s encerre
quando solicitado pelo usurio.
Figura 3 Exemplo de estruturas de repetio para e repete.

114

Livro _logica_programacao.indb 114

05/04/2016 09:00:06

Estrutura de repetio com varivel de controle

J que estamos relembrando a matemtica bsica do ensino mdio,


vamos avanar mais um pouco. Dada a definio de fatorial a seguir, implemente um algoritmo que calcule o fatorial de um nmero informado pelo
usurio, utilizando a estrutura para.
Saiba mais

O fatorial de um nmero inteiro no-negativo n o produto de


todos os inteiros positivos menores ou iguais a n. representado matematicamente por n! (fatorial de n).
Exemplo:
Calcular o fatorial de 5 (5!):
5! = 5 * 4 * 3 * 2 * 1 = 120.
Aps a implementao, o algoritmo resultante poderia ser algo do tipo:
Figura 4 Exemplo de estrutura de repetio para.

Bastante simples, no mesmo? Contudo, nessa altura da disciplina,


voc j deve estar bem familiarizado com o uso de todas as estruturas estudadas. Lanando mo do que viu at agora, construa um algoritmo que calcule
o fatorial de um nmero informado pelo usurio, controlando a entrada do
nmero, de forma a garantir que seja um nmero vlido para o clculo. O
algoritmo deve tambm exibir o clculo que foi executado (ex. 3 * 2 * 1 = 6),
115

Livro _logica_programacao.indb 115

05/04/2016 09:00:07

Lgica de programao

exibindo aps o clculo, uma mensagem informando o valor obtido e, finalmente, o algoritmo deve permanecer solicitando novos valores para clculo
enquanto o usurio no optar por encerrar a execuo.
Implemente a sua verso para esse pseudocdigo e, depois disso, analise
o algoritmo apresentado aqui comparando as funcionalidades utilizadas.
Figura 5 Exemplo de estruturas de repetio.

Vamos agora construir um algoritmo que execute a leitura das notas de


duas provas de uma turma de alunos, cujo quantitativo ser informado pelo
usurio. Aps a leitura das notas de cada aluno, o algoritmo deve calcular
e exibir a mdia final, informando se o aluno foi aprovado (mdia igual ou
superior a seis), ou se foi reprovado (mdia inferior a seis). No final dos clculos referentes turma, o algoritmo deve informar a mdia geral da turma
juntamente com a maior e a menor mdias individuais. O algoritmo deve,
116

Livro _logica_programacao.indb 116

05/04/2016 09:00:08

Estrutura de repetio com varivel de controle

no final, solicitar se o usurio deseja continuar calculando mdias para outra


turma e, caso seja digitado n (no), deve ser encerrada a execuo.
Construa o algoritmo necessrio para essa atividade e, aps desenvolver
o seu, compare com o apresentado a seguir, analisando as estruturas e a lgica
utilizada em ambos.
Figura 6 Pseudocdigo para clculo de mdias.

117

Livro _logica_programacao.indb 117

05/04/2016 09:00:09

Lgica de programao

No deixe de revisar qualquer parte do contedo em que voc tenha ainda


alguma dvida, questionando os professores para uma melhor compreenso.
Execute os exerccios propostos nas atividades desta aula e no portal
educacional. Use a criatividade e desenvolva algoritmos para solucionar problemas do seu cotidiano. Essa uma boa maneira de exercitar o contedo.

Sntese da aula
A estrutura de repetio com varivel de controle ou para, como mais
conhecida.
Nas estruturas anteriores, enquanto e repete, frequentemente difcil
determinar o nmero de vezes que um bloco de instrues ir ser executado.
Esse tipo de lao de repetio (para) difere dos anteriores, pois possui um
nmero pr-determinado de execues do seu bloco de instrues.

Atividades
1. A seguir, exibido o fluxograma que representa um algoritmo para imprimir
na tela a tabuada de multiplicao dos inteiros de 1 at 10. Sabendo que
tambm possvel representar um algoritmo por meio de pseudocdigo,
assinale o algoritmo desenvolvido para o Portugol que melhor representa o
fluxograma.
118

Livro _logica_programacao.indb 118

05/04/2016 09:00:10

Estrutura de repetio com varivel de controle

a) inicio

inteiro contador1 <- 0


inteiro contador2 <- 0
escrever Tabuada de Somar
enquanto contador1 <= 10 faz
contador2 <- 1
enquanto contador2 <= 10 faz
escrever \n\t,contador1,*,contad
or2,=, contador1 *contador2

119

Livro _logica_programacao.indb 119

05/04/2016 09:00:10

Lgica de programao

contador2 <- contador2 + 1


fimenquanto
escrever \n\n
contador1 <- contador1 + 1
fimenquanto
fim

b) inicio


inteiro contador1

inteiro contador2

contador1 <- 0

contador2 <- 0

escrever Tabuada de Somar

contador1 <- 1
repete
contador2 <- 1
enquanto contador2 <= 10 faz
escrever \n\t,contador1,*,contador2,=
,contador1*contador2
contador2 <- contador2 + 1
fimenquanto
escrever \n\n
contador1 <- contador1 + 1
ate contador1 >= 10
fim

c) inicio


inteiro contador1, contador2

escrever Tabuada de Somar

para contador1 de 1 ate 10 passo 1
para contador2 de 1 ate 10 passo 1

escrever \n\t,contador1,*,contador2,=,c
ontador1*contador2

120

Livro _logica_programacao.indb 120

05/04/2016 09:00:10

Estrutura de repetio com varivel de controle


proximo
escrever \n\n
proximo
fim

d) inicio


inteiro contador1

inteiro contador2

contador1 <- 0

contador2 <- 0

escrever Tabuada de Somar

contador1 <- 1
repete
contador2 <- 1
repete
escrever \n\t,contador1,*,contador2,=
,contador1*contador2
contador2 <- contador2 + 1
ate contador2 <= 10
escrever \n\n
contador1 <- contador1 + 1
ate contador1 >= 10
fim

2. Sabemos que as estruturas de repetio so utilizadas quando necessitamos repetir um bloco de instrues nenhuma, uma ou diversas vezes.
Considerando os trs modelos de estruturas: enquanto, para e repita...
at, assinale (V) ou (F) para as assertivas a seguir.
I. A estrutura enquanto a mais apropriada para utilizar quando h
a possibilidade de nenhuma vez ser executado o bloco interno do
lao.
II. Ao utilizar para, o bloco interno do lao executado N vezes,
onde N um valor numrico. Para isso o valor de N deve ser
121

Livro _logica_programacao.indb 121

05/04/2016 09:00:10

Lgica de programao

previamente conhecido e jamais modificado durante o lao de


repetio.
III. O bloco interno do lao repita...at sempre executado pelo menos
uma vez.
IV. Repita...at um modelo de lao que no possui expresso relacional em sua estrutura.
V. Enquanto a estrutura utilizada sempre que o bloco interno do
lao executado pelo menos uma vez.
A sequncia correta :
a) F, F, V, V, V
b) F, V, F, F, V
c) V, F, V, F, F
d) V, F, V, V, F
3. Fatorial o produto dos inteiros consecutivos de 1 at um dado nmero
natural n. Seu smbolo n!. O fatorial de 5 dado por: 5! = 1 * 2 * 3 *
4 * 5 = 120. Por definio, fatorial de 0 1 (0! = 1). Considerando que
voc possui mais de uma forma de construir uma estrutura de repetio,
analise atentamente os algoritmos seguintes e assinale a alternativa mais
adequada questo.

122

Livro _logica_programacao.indb 122

05/04/2016 09:00:10

Estrutura de repetio com varivel de controle

a) Somente o algoritmo II est errado.


b) Somente o algoritmo II e III esto corretos.
c) Somente o algoritmo I est correto.
d) Todos os algoritmos esto corretos.
4. Associe os itens a seguir e assinale a alternativa em que todas as associaes esto corretas.
a) (((Nota + 1) > Media) OU (NO Valor))
123

Livro _logica_programacao.indb 123

05/04/2016 09:00:10

Lgica de programao

b) SE Valor < 415.00 ENTAO


ESCREVER Menor que Salrio Mnimo

FIMSE
c) SE NOTA < 6 ENTAO

ESCREVER Reprovado

SENAO

ESCREVER APROVADO

FIMSE
d) ((3 % 2) * (2^4)) + (10 / 5)
e) PARA contador DE 0 ATE 9 PASSO 1

ESCREVER contador , \t

PROXIMO
f ) N <- 6
g) ENQUANTO contador < 10 FAZ

ESCREVER contador , \t

contador <- contador + 1

FIMENQUANTO
I. uma operao de atribuio.
II. Lao de repetio com teste condicional realizado no incio.
III. Desvio condicional composto.
IV. Expresso aritmtica.
V. Desvio condicional simples.
VI. Lao de repetio com iterao pr-definida.
VII.

Expresso lgica.
124

Livro _logica_programacao.indb 124

05/04/2016 09:00:10

Estrutura de repetio com varivel de controle

A seqncia correta :
a) aV; bIV; cIII; dVII; eVI; fII; gI
b) aVII; bV; cIII; dIV; eVI; fI; gII
c) aVII; bVI; cIV; dV; eIII; fI; gII
d) aV; bIV; cVI; dIII; eI; fII; g VII

Comentrio das atividades


Confira as respostas das atividades para ver se voc atingiu os objetivos
de entender a lgica de funcionamento da estrutura de repetio com varivel
de controle e de saber quando aplicar esta estrutura para a correta construo
de um algoritmo.
Para a atividade um, a resposta correta a alternativa (c). Como consta
no enunciado da atividade, o fluxograma descreve que ser exibida na tela a
tabuada de multiplicao de 1 at 10. Analisando os algoritmos, necessrio
identificar a existncia de duas estruturas de repeties que computem cada
uma das variveis de 1 at 10. Com isso, podemos eliminar o algoritmo (a),
pois sua iterao inicia com 0. J o algoritmo (b) parte corretamente de 1,
mas no processa a tabuada de 10. Portanto tambm est errado. O algoritmo
(d) alm de no exibir a tabuada de 10, apenas exibe a multiplicao por 1
de cada uma dos nmeros de 1 at 9, no chega a processar o nmero 10. J
o algoritmo (c), que faz uso da estrutura de repetio para processa corretamente o clculo da tabuada de 1 at 10.
Na atividade dois, a alternativa correta a (c). A atividade consiste em
assinalar verdadeiro ou falso s afirmaes. Na afirmativa I, h a afirmao de
que a estrutura de repetio enquanto mais apropriada para ser utilizada
quando existe a possibilidade de que o bloco interno ao lao seja executado
nenhuma vez. Essa afirmao verdadeira pelo fato de que o teste condicional
do enquanto realizado antes da execuo do bloco de instrues. A opo II
aborda a estrutura de repetio para e afirma que o lao executa as instrues
N vezes e que tambm N deve ser previamente conhecido. Porm tambm
afirma que N jamais deve ser modificado. O que invalida essa opo, pois N
125

Livro _logica_programacao.indb 125

05/04/2016 09:00:10

Lgica de programao

pode ser uma varivel e ter seu valor modificado internamente no lao. Na
opo III, a afirmativa verdadeira pelo fato de o lao de repetio repita...at
somente executar o teste condicional no fim de sua estrutura. Assim sempre
ser executado pelo menos uma vez, como pode ser observado na pgina 117
em Algoritmo III. A opo IV afirma que o lao de repetio do tipo repita...
at no possui uma expresso relacional em sua estrutura. Essa afirmao
obviamente falsa, pois a condio de parada dessa estrutura definida por
uma expresso relacional. Na opo V, ocorre a afirmao de que enquanto
a estrutura utilizada sempre que se deseja executar as instrues internas ao
lao pelo menos uma vez. Essa afirmao no verdadeira, pois, como j afirmado anteriormente, a estrutura enquanto realiza o teste condicional antes
de executar suas instrues internas. Portanto no a estrutura indicada para
este tipo de situao, j que pode nem executar as instrues internas.
Para a atividade trs, a alternativa correta a (d). A atividade I exige
a anlise de trs algoritmos para verificar se possuem a mesma funcionalidade. Observe que os algoritmos possuem a mesma instruo interna, alm
da instruo necessria sua estrutura (incremento de varivel do teste condicional). Com isso, pode-se atentar apenas aos limites e passo de cada uma
das estruturas. Todas possuem o mesmo passo, 1. Note tambm que todos
possuem o mesmo ponto de partida, 1. Com isso necessrio verificar o
ponto de parada de cada um dos algoritmos. O Algoritmo I possui a condio
de sada quando a varivel cont for maior que num, que o valor do qual se
busca o fatorial. Portanto o Algoritmo I possui os limites 1 e num para seu
lao de repetio. O Algoritmo II utiliza a estrutura enquanto. Observe a
diferena dessa estrutura para a utilizada no Algoritmo I, para...faa. O lao
repetir as instrues internas enquanto a varivel cont, que parte de 1, no
for maior do que a varivel num. Portanto o lao de repetio do Algoritmo
II tambm possui seu trmino em num. Com isso, seus limites so 1 e num
para seu lao de repetio. O Algoritmo III utiliza a estrutura de repetio
repita...at. Note que tambm possui o ponto de sada em 1 e incrementa a
varivel do teste condicional cont at que seja maior que num. Observe que
esse tipo de lao possui seu teste condicional no fim de sua estrutura. Com
isso, a varivel cont obtm um valor maior que num e logo sai do lao sem
que seja repetida a instruo. Portanto sua ltima repetio dada at o valor
de num. Com isso, seus limites tambm so de 1 e num. Para comprovar essa
atividade, recomendvel que utilize o Portugol.
126

Livro _logica_programacao.indb 126

05/04/2016 09:00:10

Estrutura de repetio com varivel de controle

Para a atividade quatro, a alternativa correta a (b). A expresso


((Nota + 1) > Media) OU (NO Valor)) retorna um valor verdadeiro ou
falso, o que a caracteriza como uma expresso lgica. Portanto a alternativa
(a) est relacionada a VII. J a segunda propositura (b) claramente um desvio condicional simples, portanto a alternativa (b) est relacionada a V. A
opo (c) uma estrutura de seleo composta, portanto, est relacionada
a III. A expresso da opo (d) retorna um valor numrico, portanto est
relacionada a IV. Na opo (e) bem visvel uma estrutura de repetio com
iterao pr-definida, portanto est relacionada a VI. A operao existente na
opo (f) uma atribuio, portanto est relacionada a I. Na opo (g) bem
evidente uma estrutura de repetio com teste realizado no incio, portanto
est relacionada a II.

Referncia
FORBELLONE, Andr Luiz Villar; EBERSPCHER, Henri Frederico.
Lgica de programao: a construo de algoritmos e estruturas de dados.
So Paulo: Pearson Prentice Hall, 2005.

127

Livro _logica_programacao.indb 127

05/04/2016 09:00:10

Lgica de programao

128

Livro _logica_programacao.indb 128

05/04/2016 09:00:10

10
Estruturas de Dados

Existem tipos especiais de varivel que permitem manipular


mais de um tipo de dados ao mesmo tempo.
Essa funcionalidade facilita a manipulao de grandes
conjuntos de dados, alm de diminuir a complexidade do programa
e as possibilidades de erros.
Entre os tipos mais comuns, implementados na maioria das
linguagens de programao, esto os vetores e registros.

Livro _logica_programacao.indb 129

05/04/2016 09:00:11

Lgica de programao

10.1 Variveis unidimensionais (vetores)


e multidimensionais matrizes
Esse tipo de varivel contm vrios valores do mesmo tipo bsico. Assim
possvel utilizar um vetor ou matriz de inteiros, por exemplo.
Na verdade, um vetor uma coleo de elementos do tipo especfico e
com tamanho pr-definido (o nmero de elementos do vetor deve ser definido pelo programador na declarao dessa estrutura).
O vetor uma coleo unidimensional e o acesso a cada elemento dado
por um ndice que representa a posio do elemento no vetor. Na maioria das
representaes de vetores, o acesso representado pelo nome da varivel do tipo
vetor seguido de um valor inteiro entre colchetes, representando o ndice.
A sintaxe para declarao desse tipo de varivel depende da linguagem de
programao que a implementa. No caso da linguagem Pascal, a declarao
notas: array[1..10] of integer usada para definir a varivel notas como sendo
do tipo vetor de inteiros, contendo 10 elementos desse tipo. J na linguagem C,
essa mesma varivel definida a partir da declarao int notas[10]. No caso do
Pascal, a declarao notas[1] permite acessar o valor do primeiro elemento do
vetor, enquanto notas[10], o ltimo. J na linguagem C, um vetor indexado
a partir do ndice zero. Com isso, para acessar o primeiro elemento de um vetor
em C, usada a declarao notas[0] e notas[9] para o ltimo.
Ao indexar um vetor, estamos tratando de um item individual, como se
fosse uma varivel isolada.
J uma varivel do tipo matriz pode ser vista como um vetor de vetores,
em que cada vetor representa uma dimenso. Por isso essa estrutura dita
multidimensional.
O tipo de matriz mais utilizado o bidimensional, em que so declaradas apenas duas dimenses. Porm a maioria das linguagens no impem
qualquer tipo de restrio quantidade de dimenses. Assim possvel criar
matrizes tridimensionais ou at n-dimensionais.
Um exemplo de declarao de matriz em C seria int notas[2][5]. Nesse
caso, declarada uma matriz bidimensional, em que a primeira dimenso possui dois elementos, e a segunda possui cinco elementos. No total, sero reservados em memria espao suficiente para representar 2x5=10 valores inteiros.
130

Livro _logica_programacao.indb 130

05/04/2016 09:00:11

Estruturas de Dados

De forma similar aos vetores, o acesso a cada elemento da matriz deve ser
realizado a partir do nome da varivel seguida de um valor inteiro para servir
de ndice para cada dimenso.

10.2 Registros
So estruturas heterogneas compostas de elementos de tipos diferentes.
Cada elemento que faz parte do registro chamado de campo. Inclusive,
cada campo pode ser do tipo registro tambm.
Esse tipo de estrutura permite organizar melhor os dados a serem manipulados, principalmente por permitir agregar dados de uma mesma natureza.
Para entendermos melhor isso, imaginemos um programa que manipule os
seguintes dados sobre os alunos de um curso: o nome do aluno, a idade e o
nmero do seu CPF. Sem o uso de registros, normalmente, cada um desses
dados sobre o aluno seria manipulado em variveis diferentes. Mesmo utilizando o conceito de vetor, ainda assim seria necessrio manipular trs vetores
diferentes. Isso torna a atividade de programao bastante complexa.
Com o uso de registro possvel agregar esses dados em uma estrutura
do tipo registro e declarar um nico vetor desse tipo. Para exemplificar, podemos examinar o seguinte trecho de cdigo na linguagem C:
struct TAluno {

char nome[80];

char cpf[11];


} ;

int idade;

struct TAluno alunos[10];


Aqui usaremos uma notao mais genrica, independente da linguagem
de programao a ser usada. Usando essa notao, teramos a seguinte declarao do mesmo registro:
TIPO TAluno = REGISTRO

nome: CARACTERE;
131

Livro _logica_programacao.indb 131

05/04/2016 09:00:11

Lgica de programao

idade: INTEIRO;

cpf: CARACTERE;

FIM REGISTRO
Nesse trecho de cdigo definida a estrutura do tipo registro chamada
TAluno. Essa estrutura agrega os campos char nome[80] usados para representar um literal com at 80 caracteres que armazena o nome do aluno, int
idade usado para armazenar a idade do aluno, e char cpf[11] usado para
representar um literal de at 11 caracteres que armazena o CPF do aluno. Em
seguida, declarado um vetor com 10 elementos do tipo TAluno.
A vantagem dessa abordagem que o acesso ao elemento alunos[0],
por exemplo, retorna um registro do tipo TAluno contendo todos os seus
campos de uma nica vez. Assim cada campo pode ser facilmente acessado
individualmente por sua descrio como alunos[0].nome, alunos[0].idade
ou alunos[0].cpf.
Um bom programador deve dominar o uso dessas estruturas a fim de
diminuir a complexidade na manipulao dos dados em um programa.

Sntese da aula
Nesta aula discutimos estruturas de dados compostas - vetores, matrizes
e registros. Estes conceitos sero de grande importncia para solucionar problemas mais complexos do dia-a-dia da programao de computadores.
Cada uma destas estruturas tem sua prpria forma de declarao e acesso
permitindo facilidades para o programador quando propem a soluo algortmica para o problema a ser resolvido usando o computador.

Atividades
1. Sobre o uso de variveis e constantes em um algoritmo incorreto
afirmar que:
a) toda informao manipulada diretamente pelo computador armazenada na memria principal (RAM) e as variveis representam
referncias a posies dessa memria;
132

Livro _logica_programacao.indb 132

05/04/2016 09:00:11

Estruturas de Dados

b) o valor de uma varivel no pode ser alterado ao longo do programa,


mantendo o mesmo valor at o encerramento do programa;
c) o tipo de dado implica na forma como os dados so representados
na memria;
d) os vetores e matrizes s podem manipular dados de um mesmo
tipo de dado;
e) um dado constante no sofre alterao no seu valor durante a
execuo do programa.
2. Com base no que foi estudado nesta aula, escolha a alternativa que apresenta, respectivamente, os tipos de dados mais adequados para variveis
que devero armazenar os seguintes contedos: idade, temperatura,
nome da cidade, nmero da carteira de identidade, notas de um aluno.
a) Inteiro, real, caractere, caractere, vetor de real.
b) Inteiro, inteiro, caractere, caractere, vetor de inteiro.
c) Inteiro, real, inteiro, caractere, vetor de real.
d) Inteiro, real, real, caractere, vetor de inteiro.
e) Inteiro, real, caractere, real, vetor de real.
3. Comente o uso de variveis e constantes em um algoritmo.
4. Comente as vantagens do uso do tipo de dados Registro.

Comentrio das atividades


Na atividade 1, de acordo com o que voc estudou sobre variveis e
constantes, deve reconhecer a opo (b) como a opo incorreta. Essa opo
apresenta o conceito contrrio de varivel. Voc deveria saber que o valor de
uma varivel pode ser alterado a qualquer momento da execuo de um. programa. E exatamente essa variao de seu valor que d nome a esse tipo de
dado. A opo (a) est correta, pois as variveis servem de apontador para as
posies da memria RAM, onde esto os dados a serem manipulados pelo
programa. A opo (c) tambm apresenta um conceito correto sobre tipo de
dado, pois baseado no tipo do dado que o computador saber como tratar
a posio de memria apontada pela varivel. A opo (d) est correta, inclusive por esse motivo que vetores e matrizes so considerados estruturas de
133

Livro _logica_programacao.indb 133

05/04/2016 09:00:11

Lgica de programao

dados homogneos por tratar de dados do mesmo tipo. Por fim, a opo (e)
tambm est correta ao trazer a definio de um dado constante.
Na atividade 2, aps analisar os contedos a serem armazenados voc
deve ter concludo que a opo correta a opo (a), pois ela apresenta para
o contedo idade o tipo inteiro (afinal costumamos utilizar valores inteiros
positivos para a contar a passagem dos anos no usamos 3,4 anos de
idade); para o contedo temperatura devemos usar casas decimais, logo o
tipo mais indicado o real; para o nome da cidade precisamos de um literal
ou caractere; para o nmero da carteira de identidade, na verdade, poderamos usar um tipo caractere (isso permitiria armazenar os caracteres de
formatao, como ponto e hfen) ou como inteiro (sem formatao); j para
as notas de um aluno, uma nota normalmente expressa como um valor
real e como ser mais de uma nota (notas), o tipo de dado mais adequado
a esse caso um vetor de real, o que permitiria manipular todas as notas de
um aluno a partir de uma mesma varivel. Tomando como base essas justificativas, voc deveria considerar as demais opes como incorretas, pelos
seguintes motivos: a opo (b) apresenta inadequao para o contedo temperatura e para as notas do aluno; a opo (c) apresenta inadequao para o
nome da cidade; a opo (d) apresenta inadequaes para o nome da cidade
e as notas do aluno; e a opo (e) apresenta inadequaes para o nmero da
carteira de identidade.
Para solucionar a atividade 3, voc j deve saber que o uso de variveis
permite ao programador manipular de forma mais fcil os dados que esto
armazenados na memria. Sem o auxlio de variveis, toda vez que fosse
necessrio algum dado da memria seria necessrio enderear a posio de
memria usando seu endereo fsico em notao hexadecimal. As variveis
levam esse nome em funo do seu comportamento, em que o valor de uma
varivel (na verdade, o contedo da posio de memria por ela referenciada) pode ser alterado vrias vezes ao longo da execuo de um programa.
J um dado do tipo constante no tem o seu valor alterado do incio ao fim
do programa.
Ao realizar as atividades propostas com sucesso, voc alcanou os objetivos desta aula de entender os conceitos de varivel e de constante e suas
utilizaes e de utilizar adequadamente cada tipo de dado disponvel.
134

Livro _logica_programacao.indb 134

05/04/2016 09:00:11

Estruturas de Dados

Na prxima aula
Estudaremos a Tcnica de Modularizao, que permite dividir um problema complexo em problemas menores e, com isso, diminuir o tempo de
criao do algoritmo e otimizar a sua soluo. Nessa aula, ser apresentado o
conceito de funo e procedimento e como essas instrues especiais devem
ser utilizadas.

135

Livro _logica_programacao.indb 135

05/04/2016 09:00:11

Lgica de programao

136

Livro _logica_programacao.indb 136

05/04/2016 09:00:11

11
Modularizao
Introduo
At aqui temos discutido a construo de algoritmos como
uma soluo linear que aborda um problema na sua forma geral e
define um conjunto de instrues a serem executadas para alcanar
uma soluo. Todavia, at o momento, no consideramos a complexidade do problema ou o tamanho (quantidade de instrues) que
um algoritmo pode ter.
Nos vrios exemplos mostrados nesse caderno, abordamos,
por motivos didticos, algoritmos e problemas simples. Porm, na
vida prtica, encontramos problemas de complexidade muito mais
elevada e que exigem solues algortmicas mais robustas e, conseqentemente, maiores.
No cotidiano de um programador, comum a construo de
algoritmos que envolvam centenas ou milhares de instrues. Fica
bvio, para esses casos, que a representao de um algoritmo nessa

Livro _logica_programacao.indb 137

05/04/2016 09:00:12

Lgica de programao

escala usando fluxograma fica invivel e, mesmo usando pseudocdigo, teremos dificuldade em gerenciar um conjunto to grande de instrues.
Nesta aula, fundamental que voc j domine a criao de algoritmos
e como represent-los na forma de pseudocdigo, pois nesta aula so apresentados e comentados exemplos nessa forma. Alm disso, necessrio que
voc tenha apreendido o conceito de variveis. Portanto retome o contedo
j estudado nas aulas anteriores se ainda houver dvidas!
Esperamos que, ao final desta aula, voc seja capaz de:
22

entender os principais conceitos relacionados ao uso de funes e


procedimentos;

22

criar de forma correta funes em seus algoritmos, utilizando-as;

22

criar de forma correta procedimentos em seus algoritmos, utilizando-os.

11.1 Modularizao
Uma soluo para problemas complexos a sua diviso sucessiva em
problemas menores a fim de obter uma soluo de custo mnimo. Essa idia
conhecida como Dividir para Conquistar o princpio bsico da tcnica de
anlise estruturada, chamada de Modularizao. Nessa tcnica, o problema
maior dividido em problemas menores, chamados de mdulos.
O segredo de uma boa modularizao est em identificarmos claramente
que mdulos devem existir no sistema. Devemos atribuir uma nica funo
bem definida a cada mdulo, minimizar as ligaes entre os mdulos e maximizar a coeso interna de cada mdulo.
Essa tcnica apresenta inmeras vantagens para a programao. Vejamos.
1. Facilita a verificao de erros: pois , em princpio, simples identificar o mdulo responsvel pelo erro, reduzindo-se assim o tempo
gasto na identificao de erros.
2. Permite testar os mdulos individualmente, em vez de se testar apenas o programa completo, o que reduz a complexidade do teste e
permite comear a testar antes de se ter completado o programa.
138

Livro _logica_programacao.indb 138

05/04/2016 09:00:12

Modularizao

3. Permite fazer a manuteno do programa (correo de erros,


melhoramentos etc.) mdulo a mdulo e no no programa todo,
o que reduz a probabilidade de essa manuteno ter conseqncias
imprevistas em outras partes do programa.
4. Permite o desenvolvimento independente dos mdulos, o que
simplifica o trabalho em equipe, pois cada elemento ou cada sub-equipe tem a seu encargo apenas alguns mdulos do programa.
5. Permite a reutilizao do cdigo desenvolvido, ou seja, que mdulos individuais sejam utilizados para formar outro programa.
Um programador assume, ao longo do desenvolvimento de um programa, dois papis distintos: por um lado fabricante, pois sua responsabilidade desenvolver mdulos; por outro utilizador, pois far com certeza
uso de outros mdulos, desenvolvidos por outros programadores ou por ele
prprio no passado.
A modularizao em um algoritmo expressa por meio das unidades
atmicas: funes e procedimentos. Uma funo representa um conjunto
de instrues, com interface bem definida, que efetua um dado clculo
e, na maioria dos casos, devolve um valor. J um procedimento tambm
representa um conjunto de instrues, com interface bem definida, que
faz qualquer coisa, porm sem devolver valor algum. Algumas linguagens
de programao, como a linguagem C ou Java, no fazem distino entre
procedimento e funo e trata todo o processo de modularizao somente
com o uso de funes.

11.2 Funes e procedimentos


As funes e os procedimentos permitem isolar trechos de cdigo com
objetivos bem definidos e torn-los reutilizveis onde quer que seja necessrio.
Uma vez definida, uma funo ou um procedimento podem ser utilizados sem
que seja necessrio conhecer o seu funcionamento interno. Funes e procedimentos podem ser vistos como caixas pretas: uma vez definidas (e corretas),
devem ser usadas sem preocupaes quanto ao seu funcionamento interno.
Na prtica, o uso de funes e procedimentos permite estender as funcionalidades de uma linguagem. Por exemplo, podemos definir uma funo
139

Livro _logica_programacao.indb 139

05/04/2016 09:00:12

Lgica de programao

que receba um valor inteiro e retorne um literal contendo esse valor com um
nmero especfico de zeros esquerda. A partir de sua definio, poderamos
fazer uso dessa funo sempre que necessrio, sem ter de repetir o seu cdigo.
A seguir mostrado um algoritmo, representado em pseudocdigo, que
demonstra o uso de funes e procedimentos.
ALGORITMO Funcao_Procedimento;

CONST MAX = 99;

VAR Valor1, Valor2: Inteiro;


FUNCAO MAIOR (A, B: Inteiro)
SE (A>B) ENTAO

RETORNA (VERDADEIRO);
SENAO

RETORNA (FALSO);
FIM SE
FIM FUNCAO

PROCEDIMENTO VERIFICA (VALOR: inteiro)


SE (VALOR > MAX) ENTAO

IMPRIMA O valor excede o valor limite.

FIM SE
FIM PROCEDIMENTO
INICIO
LEIA Valor1;
LEIA Valor2;
SE MAIOR(Valor1, Valor2) ENTAO

IMPRIMA (Valor1 + maior do que + Valor2);

VERIFICA (Valor1);

SENAO

IMPRIMA (Valor2 + maior do que + Valor1);

VERIFICA (Valor2);

140

Livro _logica_programacao.indb 140

05/04/2016 09:00:12

Modularizao
FIM SE
FIM

Nesse exemplo, temos a declarao da funo MAIOR que verifica qual


o maior valor entre dois valores inteiros passados como parmetro da funo.
declarado ainda o PROCEDIMENTO VERIFICA, que testa se um valor
inteiro passado como parmetro inferior a um valor mximo definido pela
constante MAX.
Esse exemplo ser usado para explicar os itens que seguem.

11.3 Parmetros
Parmetros so as variveis listadas entre parnteses no cabealho da
definio de uma funo ou procedimento. So variveis locais, sendo visveis
apenas dentro da funo ou rotina, embora com uma particularidade: so
automaticamente inicializadas com o valor dos argumentos respectivos em
cada chamada da funo ou procedimento.
As variveis locais (parmetros de funes includos) existem em memria
apenas enquanto o bloco de instrues em que esto inseridas estiver sendo
executado, sendo assim criadas e destrudas muitas vezes ao longo de um
programa a cada nova invocao da funo ou procedimento, por exemplo.
No exemplo mostrado anteriormente, temos as variveis A e B, do tipo
inteiro, como parmetros da funo MAIOR (A,B: inteiro). Essas variveis
so locais a essa funo e, por isso, s podem ser referenciadas dentro dela. Ao
trmino da funo, essas variveis so removidas da memria.

11.4 Argumentos
Argumentos so as expresses listadas entre parnteses em uma invocao ou chamada de uma funo ou procedimento. O seu valor utilizado
para inicializar os parmetros da funo ou procedimento invocado.
Na invocao da funo MAIOR, mostrada no exemplo discutido anteriormente, e descrita pela instruo MAIOR(Valor1, Valor2), as variveis
Valor1 e Valor2 representam argumentos que so passados para a funo. Na
141

Livro _logica_programacao.indb 141

05/04/2016 09:00:12

Lgica de programao

prtica, os valores dessas variveis so usados para inicializar os parmetros A


e B da funo, respectivamente.
Cabe ressaltar que um argumento de uma funo no necessita ser uma
varivel, podendo ser passado um valor constante. Por exemplo, podemos
invocar a funo maior usando instrues como: MAIOR (5, 7), MAIOR
(Valor1, 89) ou MAIOR (5, Valor2).

11.5 Retorno e devoluo de dados


A maioria das linguagens de programao utiliza a palavra em ingls
RETURN que, em sua lngua de origem, apresenta dois significados distintos: retornar (ou regressar) e devolver. J no portugus, utilizamos duas palavras distintas: dizemos que uma funo (ou procedimento) retorna quando
termina a sua execuo e o fluxo de execuo regressa ao ponto de invocao,
e que uma funo, ao retornar, devolve um valor que pode ser usado na
expresso em que a funo foi invocada. Todavia, na representao algortmica em pseudocdigo, usamos a palavra em portugus RETORNA para
representar a instruo de retorno ou devoluo de valor.
Uma funo termina quando o fluxo de execuo atinge uma instruo
de retorno. As instrues de retorno consistem na palavra chave RETORNA
seguida de uma expresso de retorno ou de uma expresso vazia que indicar
apenas o retorno, sem devoluo. A expresso tem de ser de um tipo de dados
compatvel com o tipo de devoluo da funo. O resultado da expresso o
valor devolvido ou calculado pela funo.

11.65 Variveis globais e locais


Uma observao cuidadosa dos exemplos anteriores revela que afinal o
programa principal no passa de uma funo. Mas uma funo especial que
automaticamente invocada j no incio da execuo do programa.
Assim sendo, verifica-se tambm que at agora s se definiram variveis
dentro de funes. s variveis que se definem no corpo de funes ou procedimentos, chamamos variveis locais. s variveis que se definem fora de
qualquer funo ou procedimento, chamamos variveis globais. Os mesmos
142

Livro _logica_programacao.indb 142

05/04/2016 09:00:13

Modularizao

nomes se aplicam no caso das constantes: h constantes locais e constantes


globais.
Devemos lembrar que os parmetros de uma funo ou procedimento
so variveis locais como quaisquer outras, exceto quanto sua forma de
inicializao: os parmetros so inicializados implicitamente com o valor dos
argumentos respectivos em cada invocao da funo ou procedimento.

Sntese da aula
Nesta aula, estudamos o conceito de Modularizao. Esse conceito
de fundamental importncia no desenvolvimento de programas de grande
escala. Foram apresentados e discutidos ainda os principais conceitos relacionados ao uso de funes e procedimentos.

Atividades
1. Sobre o uso da tcnica de modularizao, com o uso de funes e procedimentos, em um algoritmo, incorreto afirmar que:
a) facilita a verificao de erros;
b) dificulta os testes do programa, uma vez que cada mdulo foi programado por uma equipe diferente;
c) permite fazer a manuteno do programa (correo de erros, melhoramentos, etc.) mdulo a mdulo e no no programa todo;
d) permite o desenvolvimento independente dos mdulos;
e) permite a reutilizao do cdigo desenvolvido.
2. A partir da anlise do algoritmo mostrado a seguir, incorreto afirmar que:
ALGORITMO A2;
VAR numero: inteiro;
FUNCAO E_PAR (X: inteiro)

SE (X % 2 = 0) ENTAO
143

Livro _logica_programacao.indb 143

05/04/2016 09:00:13

Lgica de programao

RETORNE verdadeiro;

SENAO

RETORNE falso;
FIM SE

FIM FUNCAO
INICIO

LEIA (numero);

SE E_PAR(numero) ENTAO

IMPRIMA (O valor par.);

SENAO

IMPRIMA (O valor mpar.);


FIM SE

FIM
a) a funo E_PAR no possui parmetros;
b) a varivel nmero uma varivel global;
c) a varivel X local funo E_PAR;
d) a funo E_PAR possui um argumento inteiro;
e) a invocao de funo E_PAR (numero) ir devolver um valor lgico e
por isso diretamente usado como teste condicional para a instruo Se.
3. Com base no que foi estudado nesta aula, diferencie um argumento de
um parmetro.
4. Escreva um programa que determine o quadrado de um nmero inteiro
n. O nmero n deve ser pedido ao usurio por meio de uma funo
chamada LERINTEIRO; e o seu quadrado dever ser calculado por
meio de outra funo, chamada QUADRADO.
144

Livro _logica_programacao.indb 144

05/04/2016 09:00:13

Modularizao

Comentrio das atividades


Lanamos um desafio para voc: qual a resposta correta para a atividade
1? Socialize com seus colegas no forum da disciplina e verifique na web-tutoria!
Na atividade 2, de acordo com os conceitos estudados nesta aula, voc
deve ter concludo que a opo incorreta a opo (a), pois a funo E_PAR
possui um parmetro inteiro declarado, sob a forma da varivel X. A opo
(b) est correta, uma vez que a varivel nmero declarada no programa
principal o que lhe d um carter global; a opo (c) tambm est correta,
pois a varivel X declarada dentro da funo, como um parmetro, e s
existe durante a execuo da funo; a opo (d) est correta, dado que a
funo E_PAR possui a varivel X declarada como parmetro, o que define
a necessidade de ser passado um argumento inteiro na sua invocao como
feito na instruo E_PAR (nmero); e, por fim, a opo (e) tambm est
correta, pois a funo E_PAR devolve sempre um valor verdadeiro ou falso.
Relembrando os conceitos estudados nesta aula, voc deve saber que um
argumento uma varivel que declarada entre os parnteses de uma declarao de funo ou procedimento, e indica a quantidade e o tipo de dado dos
argumentos a serem passados para essa funo. Um argumento, por sua vez,
qualquer expresso passada entre os parnteses da invocao (chamada) de
uma funo ou procedimento. Esse conhecimento imprescindvel para a
realizao da atividade 3.
Para a construo do algoritmo solicitado na atividade 4, voc deve ter
considerado a criao da funo QUADRADO como uma funo que deve
receber um valor inteiro como parmetro e retornar outro valor inteiro representando o quadrado desse valor. Para o clculo do quadrado de um nmero,
basta multiplic-lo por ele mesmo. J a funo LERINTEIRO no deveria
ter parmetros, uma vez que ela no precisa de dados de entrada para o seu
processamento. Alis, o seu processamento muito simples. Nessa funo,
devemos ter apenas a leitura de um valor inteiro e o seu retorno imediato. A
seguir apresentada uma soluo algortmica para o problema.
ALGORITMO A4;
VAR

numero: inteiro;
145

Livro _logica_programacao.indb 145

05/04/2016 09:00:13

Lgica de programao

FUNCAO QUADRADO (X: inteiro)


RETORNE (X*X);

FIM FUNCAO
FUNCAO LERINTEIRO

VAR N: inteiro;

LEIA (N);

RETORNE (N);

FIM FUNCAO
INICIO

numero LERINTEIRO;


IMPRIMA (O quadrado do numero + numero
+ +
QUADRADO(numero));
FIM
Se realizou as atividades com sucesso, voc est apto a entender os principais conceitos relacionados ao uso de funes e procedimentos; criar de
forma correta funes em seus algoritmos, utilizando-as, e criar de forma
correta procedimentos em seus algoritmos, utilizando-os.

146

Livro _logica_programacao.indb 146

05/04/2016 09:00:13

Referncias

Livro _logica_programacao.indb 147

05/04/2016 09:00:14

Lgica de programao

ASCENCIO, Ana Fernanda Gomes. Lgica de Programao com Pascal.


So Paulo: Makron Books, 1999.
CARBONI, Irenice de Ftima. Lgica de programao. So Paulo: Thomson, 2003.
FORBELLONE, Andr Luiz Villar; EBERSPACHER, Henri Frederico.
Lgica de programao: a construo de algoritmos e estruturas de dados.
3. ed. So Paulo: Makron Books, 2005.
LOPES, Anita; GARCIA, Guto. Introduo programao: 500 algoritmos resolvidos. Rio de Janeiro: Campus, 2002.
LOPES, Anita; GARCIA, Guto. Introduo programao: 500 algoritmos resolvidos. Rio de Janeiro: Campus, 2002.
MANZANO, Jos Augusto N. G.; OLIVEIRA, Jayr Figueiredo de. Algoritmos: lgica para desenvolvimento de programao de computadores. 16. ed.
So Paulo: rica, 2005.
ORTH, Afonso Incio. Algoritmos e programao com resumo das linguagens Pascal e C. Porto Alegre: AIO, 2001.
SOUZA, Marco Antonio Furlan de; GOMES, Marcelo Marques; SOARES,
Marcio Vieira. Algoritmos e lgica de programao. So Paulo: Thomson,
2005.

148

Livro _logica_programacao.indb 148

05/04/2016 09:00:14