Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
autor do original
MAIRUM CEOLDO ANDRADE
1 edio
SESES
rio de janeiro 2015
Conselho editorial fernando fukuda, simone markenson, jeferson ferreira fagundes
Diagramao fabrico
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida
por quaisquer meios (eletrnico ou mecnico, incluindo fotocpia e gravao) ou arquivada em
qualquer sistema ou banco de dados sem permisso escrita da Editora. Copyright seses, 2015.
ISBN 978-85-60923-78-6
Prefcio 7
Definio de algoritmo 11
Soluo de problemas 13
Etapas para construo de um algoritmo 14
Representao de algoritmos 16
Construo de um algoritmo 23
Lgica, lgica de programao e programa 26
2. Estrutura sequencial 32
3. Estruturas de deciso 56
7
1
Fundamentos de
lgica e algoritmos
1 Fundamentos de lgica e algoritmos
Nesta unidade, aprenderemos o que um algoritmo e para que ele serve. Basi-
camente veremos como ele est inserido em nosso dia a dia e como pode nos
auxiliar na resoluo de problemas. Durante toda nossa vida, deparamo-nos
com diversos problemas para os quais precisamos estruturar uma sequncia de
passos e etapas para alcanarmos a soluo de forma desejada, porm fazemos
isso de maneira desestruturada e emprica.
Aprenderemos tcnicas e linguagens para documentar e organizar os pas-
sos de soluo de problemas. Iniciaremos com tcnicas e linguagens naturais e
evoluiremos at chegarmos s linguagens de programao, que permitem en-
sinar ao computador como resolver determinados problemas, para nos auxiliar
em nossas tarefas.
OBJETIVOS
Entender como se define um algoritmo.
Compreender as etapas necessrias para construir um algoritmo.
Compreender as linguagens para escrever algoritmos.
Ser capaz de construir algoritmos simples fazendo uso da linguagem natural.
Ser capaz de nomear smbolos.
REFLEXO
Voc se lembra dos algoritmos que aprendeu na escola para resolver os problemas de mate-
mtica? Falando dessa forma provavelmente no, mas com certeza voc j construiu e j uti-
lizou vrios algoritmos, como, por exemplo, as regras para encontrar o maior divisor comum,
a descrio do trajeto que voc escreveu para seu amigo chegar a sua casa ou a receita de
um bolo que voc seguiu.
10 captulo 1
1.1 Definio de algoritmo
captulo 1 11
Portanto, nenhum nmero maior que CF pode medir os nmeros AB e CD. Ento, CF
a maior medida comum de AB e CD, o que era o que se queria demonstrar. Euclides.
Elementos VII.2
<http://pt.wikipedia.org/wiki/Algoritmo_de_Euclides>
PASSO 1 32 6 5 2
PASSO 2 6 2 3 0
1 Os Elementos de Euclides um tratado matemtico e geomtrico composto de 13 livros, escrito pelo matemtico
Euclides por volta do sculo 300 a.C. Nele so definidas toda a base da geometria euclidiana e a teoria elementar
dos nmeros.
12 captulo 1
CONCEITO
Algoritmo uma sequncia finita de instrues, definidas de maneira clara e sem ambiguidade,
de forma que possa ser executada e reproduzida diretamente pelo seu interpretador ou leitor.
captulo 1 13
1. Entender
2. Planejar
3. Executar
4. Verificar
CONEXO
Para praticar o mtodo de soluo de problemas, acesse os endereos a seguir:
Torre de hanoi: <http://www.ufrgs.br/psicoeduc/hanoi/>
Teste de Einstein: <http://rachacuca.com.br/teste-de-einstein/ >
Para que sejamos capazes de construir um algoritmo que seja claro e sem am-
biguidade, precisamos criar certa estrutura e seguir algumas regras e passos.
Nessa etapa, vamos entender como devemos nos organizar para que consiga-
mos criar os algoritmos da melhor forma possvel.
14 captulo 1
As etapas para a construo de um algoritmo so bem parecidas com as eta-
pas para soluo de problemas proposta por Polya, apresentadas no item ante-
rior. A Figura 1 apresenta esta relao.
Figura 1 Relao das etapas de soluo de problemas de Polya com as etapas de cons-
truo de um algoritmo
captulo 1 15
bientes, podemos testar e validar o correto funcionamento da soluo implemen-
tada. Esses programas podem ser de dois tipos: interpretadores ou compiladores.
Interpretadores so programas que validam e executam diretamente os
cdigos na linguagem apresentada e apresentam o resultado em tela de sa-
da. Os compiladores possuem um processo um pouco mais complexo. Eles
convertem os cdigos apresentados em linguagem de mquina, gerando um
programa executvel. Aps a gerao desse programa, temos de execut-lo
para verificar seu funcionamento. A diferena bsica para o usurio final
que, se usarmos interpretadores, iremos sempre precisar deles para executar
ou realizar a soluo; j nos compiladores, aps criado o programa execut-
vel, no precisaremos mais deles, pois utilizaremos os programas gerados,
independentemente de onde ou como foram desenvolvidos.
16 captulo 1
3. Evite palavras ambguas.
4. Detalhe todas as etapas.
Ingredientes:
2 xcaras (ch) de acar
3 xcaras (ch) de farinha de trigo
4 colheres (sopa) de margarina bem cheias
3 ovos
1 1/2 xcara (ch) de leite aproximadamente
1 colher (sopa) de fermento em p bem cheia
Modo de preparo:
1. Bata as claras em neve.
2. Reserve.
3. Bata bem as gemas com a margarina e o acar.
4. Acrescente o leite e farinha aos poucos sem parar de bater.
5. Por ltimo, agregue as claras em neve e o fermento.
6. Coloque em forma grande de furo central untada e enfarinhada.
7. Preaquea o forno a 180 C por 10 minutos.
8. Asse por 40 minutos.
Perceba, na descrio dos ingredientes, que, quando uma palavra com pos-
svel ambiguidade aparece, necessrio remov-la. Por exemplo, em 4 colhe-
res (sopa) de margarina bem cheias, necessrio especificar o tipo de colher a
ser utilizada: no caso, a de sopa, pois, caso contrrio, a pessoa que far a receita
pode se confundir e utilizar uma colher utilizada para sobremesa, caf ou ch,
j que existem diferentes tipos de colheres.
captulo 1 17
ambiguidades, pois depende da criatividade e qualidade de quem est criando
os desenhos para representar as atividades e os processos dos algoritmos ou
para a resoluo de problemas.
Um exemplo claro so os manuais de montagens que recebemos quando
compramos alguns equipamentos, por exemplo, um ventilador, uma cadeira
ou um mvel. A Figura 2 um exemplo de que, muitas vezes, quando vamos
montar algo que compramos, sempre sobram muitas peas, porque no enten-
demos as instrues ou por colocarmos porcas e parafusos em lugares errados.
18 captulo 1
Incio
Sim
Acordar H tarefas?
Praticar
captulo 1 19
sequncia, volte para casa. Caso o dia no esteja ensolarado, verifique a progra-
mao do cinema, pegue a famlia e v para o shopping, faa uma refeio, v ao
cinema e volte para casa. Aps chegar em casa, verifique se h tarefas a fazer,
em caso positivo , faa-as. Aps terminar, tome um banho; em caso negativo,
tome um banho. Aps tomar banho, faa uma refeio. Aps a refeio, assista
TV e depois v dormir. Assim, termina seu domingo.
1.4.3 Pseudolinguagem
20 captulo 1
importante ter conscincia de que, quando utilizamos ferramentas au-
tomatizadas para validar ou interpretar as pseudolinguagens ou linguagens
de programao, devemos seguir as regras sintticas e semnticas exatas,
caso contrrio a ferramenta no ser capaz de compreender seu algoritmo.
A falta de uma vrgula ou de um ponto o suficiente para que a ferramenta
acuse que seu algoritmo ou pseudocdigo esteja incorreto.
As pseudolinguagens so conhecidas tambm como linguagens algortmi-
cas, e existem diversas disponveis para uso, como o PORTUGOL, o ILA e o UAL.
Nessa disciplina, utilizaremos o UAL, mas veremos a seguir uma breve apresen-
tao das demais.
PORTUGOL uma ferramenta utilizada para o aprendizado de linguagem
algortmica desenvolvida pelo Departamento de Engenharia Informtica do
Instituto Politcnico de Tomar em Portugal. Trata-se de um software distri-
budo sob licena livre ou GNU, apresentado na Figura 4, utilizado para fins
acadmicos e educacionais. Um grupo de professores utilizou uma lingua-
gem algortmica em portugus, padronizada para definio dos comandos.
Por sua simplicidade e facilidade de uso, o PORTUGOL muito utilizado aca-
demicamente nos pases de lngua portuguesa, incluindo o Brasil.
CONEXO
Para baixar o software e conhecer a linguagem PORTUGOL, acesse: <http://www.dei.estt.
ipt.pt/portugol/>.
captulo 1 21
Figura 4 Ambiente de desenvolvimento PORTUGOL (retirado de: <http://www.dei.estt.ipt.
pt/portugol/node/2>)
CONEXO
Para saber mais sobre o ILA e baixar o interpretador, acesse: <http://professor.unisinos.br/
wp/crespo/ila/>.
22 captulo 1
Figura 5 Interpretador UAL
CONEXO
Para conhecer mais e baixar o interpretador, acesse: <http://geocities.ws/ual_language/ual.html>.
captulo 1 23
Voc esquece constantemente de pagar contas e, por isso, resolve desenvol-
ver um programa para auxili-lo no clculo dos juros. Para isso, necessrio ler
o valor da prestao que deveria ter sido paga e o valor dos juros para calcular o
novo valor da prestao com juros e exibi-la.
No primeiro momento, necessrio compreender o problema; para tal, de-
ve-se identificar no enunciado os tipos de dados que sero processados e qual
a sua origem; compreender o que deve ser feito e qual o contedo do dado de
sada. Para o exemplo apresentado, podemos identificar o seguinte:
a) As informaes sero digitadas no teclado (origem), sendo compostas
por dois dados numricos: o valor da prestao e o valor dos juros.
b) O algoritmo dever calcular o novo valor da conta, j com os juros, que
tambm ser um valor numrico.
c) O algoritmo dever mostrar o novo valor em tela (sada).
24 captulo 1
1. Incio
2. Obtenha o valor da conta
3. Obtenha o ndice de juros
4. Multiplique o ndice de juros pelo valor da conta
5. Some o valor dos juros ao valor da conta
6. Exiba o novo valor da conta
7. Fim
captulo 1 25
Vimos anteriormente de forma direta algumas consideraes e preocupaes
que o programador deve sempre ter em mente no momento de estruturao e cria-
o de um programa. claro que esta forma simplificada oferece subsdios para
a soluo de problemas simples e o desenvolvimento de programas com comple-
xidade baixa. Como j citado, no decorrer do curso sero estudadas formas mais
completas e complexas de conceber e estruturar um sistema computacional, con-
siderando todos os seus aspectos. Por hora, a estrutura proposta o suficiente para
a nossa disciplina de algoritimo. Por isso, tenha ela sempre em mente.
Para entendermos os termos com mais clareza, vamos terminar esta unidade
compreendendo melhor alguns conceitos, tais como: lgica, lgica de progra-
mao e conceito de programa.
Lgica
Como vimos anteriormente, a lgica um ramo da filosofia que estuda e
cuida das regras de estruturao do pensamento, do uso do raciocnio no estu-
do e na soluo de problemas. Ela apresenta formas e tcnicas para estrutura-
o e argumentao utilizadas na soluo de problemas.
Ela pode ser desenvolvida por meio do estudo dos mtodos formais e estru-
turados e principalmente atravs da prtica e do desenvolvimento do raciocnio.
Lgica de programao
A lgica de programao a aplicao dos conceitos e prticas da lgica na
utilizao das linguagens de programao para o desenvolvimento de algorit-
mos na soluo de problemas, respeitando regras da lgica matemtica, aplica-
das pelos programadores durante o processo de construo do software.
Conceito de programa
Programa um algoritmo escrito ou codificado, que utiliza linguagem de pro-
gramao. composto por um conjunto de entradas, que so processadas e suas
sadas resultantes. O processamento realizado por meio de um conjunto de ins-
trues e funes que sero convertidas em linguagem de mquina e interpreta-
das ou executas por um computador, para a realizao de uma ou mais tarefas.
26 captulo 1
A obra e o legado de John Von Neumann
[...] Na rea da computao, o nome de Von Neumann est geralmente associado
ideia de arquitetura de von Neumann, ou seja, estrutura, hoje considerada clssica,
de computadores digitais com programa armazenado na prpria memria e, portanto,
passvel de automodificao e de gerao por outros programas. Suas principais con-
tribuies esto nas reas de arquitetura de computadores, princpios de programao,
anlise de algoritmos, anlise numrica, computao cientfica, teoria dos autmatos,
redes neurais, tolerncia a falhas, sendo o verdadeiro fundador de algumas delas. Sai-
ba mais sobre o legado de von Neumann. Acesse o artigo que traz sua trajetria e as
contribuies deste estudioso da computao, que deixou sua marca na histria das
grandes invenes tecnolgicas. [...]
REFLEXO
Nessa primeira unidade, estudamos o que um algoritmo, para que ele serve e como o
utilizamos para resolver problemas basicamente atravs da construo de um programa.
Para isso, utilizamos uma linguagem, que pode ser linguagem natural, linguagem grfica,
pseudolinguagem ou linguagem de programao.
importante que todos os conceitos vistos nessa unidade sejam bem assimilados e
entendidos. Nas unidades seguintes aprenderemos como utilizar a sintaxe e a semntica das
linguagens para a construo de algoritmos e programas. A estrutura e as regras dessas
linguagens so bem simples e fceis de visualizar, porm a capacidade de soluo de proble-
mas e suas aplicaes so infinitas, e por isso o completo conhecimento e o controle dessas
ferramentas sero obtidos por meio da prtica, da soluo dos problemas propostos. Nessa
disciplina, no necessrio memorizao, mas estruturao lgica do conhecimento aliada s
estruturas que iremos estudar.
Esperamos ter despertado o desejo por este aprendizado e conhecimento, para
que possamos exercitar e aprender com efetividade.
captulo 1 27
LEITURA
Conhea um pouco mais sobre o portugol:
<http://www.dei.estt.ipt.pt/portugol/node/32>
<http://orion.ipt.pt/~aulasi/ip/04-decisao/help/index.html>
REFERNCIAS BIBLIOGRFICAS
ASCENCIO, A. F. G.; CAMPOS, E.e A. V. Fundamentos da programao de computadores:
Algoritmos, Pascal, C/C++ e Java. 2. ed. So Paulo: Pearson Education, 2008.
28 captulo 1
SPALLANZANI, Adriana Sayuri; MEDEIROS, Andra Teixeira de; FILHO, Juarez Muylaert,
Linguagem UAL. Disponvel em: <http://geocities.ws/ual_language/ual.html>. Acesso em:
25 abr. 2014.
NO PRXIMO CAPTULO
No prximo captulo, aprenderemos como fazer nossos primeiros algoritmos ou progra-
mas utilizando as linguagens propostas. Para tal, veremos a estruturao dessas linguagens
e seus comandos mais bsicos, para incio e fim de um programa, entrada e sada de dados,
e a criao e atribuio de variveis.
captulo 1 29
2
Estrutura
sequencial
2 Estrutura sequencial
Aprendemos anteriormente o que um algoritmo e como estrutur-lo. Va-
mos agora ver na prtica como escrever esses algoritmos utilizando lingua
gens predefinidas.
Aprenderemos a utilizar trs diferentes linguagens: o UAL, para reforarmos
conceitos utilizando nossa lngua nativa, para facilitar desta forma o entendimen-
to, linguagem que poderamos classificar como pseudolinguagem; o C++, que
ser a linguagem base de programao estruturada para o aprendizado de lingua-
gem, com comandos simples de fcil entendimento; e o fluxograma, que permite
uma visualizao grfica dos conceitos e do funcionamento dos comandos.
Fique muito atento pois essa unidade apresenta os subsdios que sero uti-
lizados em todos os algoritmos e programas que voc fizer e sero utilizados em
todos os outros comandos.
OBJETIVOS
Definir varireis.
Conhecer e listar os tipos de dados.
Construir algoritmos de forma sequencial, utilizando comandos de atribuio, entrada e
sada, e operadores aritmticos.
Conhecer os utilizar operadores aritmticos.
Identificar os operadores relacionais e lgicos.
REFLEXO
Estudamos anteriormente as quatro etapas para a construo de um algoritmo e para a reso-
luo de um problema. Agora no falaremos mais delas diretamente, mas muito importante
que as tenha sempre em mente para a construo dos algoritmos e programas e principal-
mente para a realizao das atividades propostas.
Em outras disciplinas, voc deve ter aprendido sobre a estrutura bsica do computador, em
que temos o programa e os dados sempre em memria (RAM) durante sua execuo. Fala-
remos sobre a criao de variveis e tipos de dados, o que tem uma relao direta no uso da
memria, pois so os dados utilizados pelo programa. Caso tenha dvidas sobre a estrutura
32 captulo 2
do computador, bem como sobre memria, volte s disciplinas especficas e tenha estes
conceitos claros para facilitar o entendimento.
Com isso em mente temos de entender que nosso sistema sempre precisar
obter os dados de algum lugar, processar estes dados e fornec--los processa-
dos para algum lugar. Geralmente a entrada provm dos dispositivos de entra-
da, principalmente do teclado, ou dos dispositivos de armazenamento, como
o disco rgido ou HD. O processamento composto pela lgica implementada
por voc, e a sada geralmente dada nos dispositivos de sada, sendo o princi-
pal a tela ou o disco rgido (HD), que tambm muito utilizado.
Analisando a estrutura bsica, podemos perceber que trata-se de uma sequ-
ncia de etapas a ser executada, o que nos leva ao entendimento da estrutura se-
quencial. um tipo de estrutura em que os comandos so executados em uma
ordem preestabelecida, onde cada comando s executado aps o anterior ser
finalizado, ou seja, de forma sequencial.
A forma como iremos estruturar os comandos para preestabelecer a ordem
de execuo definida pela sintaxe da linguagem, e a disposio sequencial
dos diferentes comandos ir compor e implementar a lgica necessria para a
resoluo do problema.
captulo 2 33
ponto final deste. Nessa disciplina, veremos que isso coincidir com a primeira
e ltima linha escritas, porm, no decorrer do curso, voc perceber que nem
sempre isso ser assim, por isso importante ter este conceito bem entendido.
Toda linguagem possui um comando ou representao para determinar o
incio e o fim. Veremos isso nas linguagens propostas.
No UAL, indicamos o incio do algoritmo atravs da palavra reservada prog
seguida de um nome do programa, nome qualquer a ser definido por voc. Esse
nome deve ser composto por uma palavra apenas, sem uso de espaos. Para
delimitar e indicar o fim do programa, utilizamos a palavra reservada fimprog,
com a qual o computador sabe que o programa est encerrado, o que dispara
o processo de remoo do programa e dos dados associados a ele da memria.
Abaixo so representados a estrutura e um exemplo.
prog <nomeDoPrograma>
...
fimprog
34 captulo 2
to no se preocupe em entend-la agora. Veja a seguir a estrutura e um exemplo.
#include <iostream>
using namespace std;
int main()
{
...
}
FLUXOGRAMA EXEMPLO
Incio
Incio
.. 123
.
Fim Fim
captulo 2 35
2.3 Variveis
CONCEITO
Uma varivel um elemento sinttico do algoritmo que tem como funcionalidade armazenar um
determinado valor. O valor associado varivel depende do tipo de informao que se deseja
manipular, assim diversos tipos de valores podem ser atribudos s variveis.
36 captulo 2
diviso, multiplicao, potenciao, a juno de um conjunto de letras para for-
ma uma palavra, a juno de palavras para formar uma frase etc. Veremos que
em algoritmos e programao existem, da mesma forma, diferentes tipos de
dados que podemos manipular e diferentes tipos de operaes que podem ser
utilizadas associadas aos tipos de dados.
c de dados primitivos, apenas para contextualizar os tipos de dados com-
postos so criados a partir de tipos de dados primitivos e sero estudados mais
detalhadamente no decorrer do curso.
Os tipos de dados primitivos so aqueles fornecidos nativamente nas lin-
guagens de programao, e no obrigatoriamente sero os mesmos em todas
as linguagens. Usaremos os tipos mais comuns listados abaixo.
Nmeros fracionrios ou de
Real real float
ponto flutuante
captulo 2 37
2.3.2 Declarao e atribuio de variveis
Para que possamos utilizar uma varivel, um algoritmo ou programa, precisamos
primeiro declar-la. Para o computador, essa uma etapa muito importante, pois
nesse momento que o computador reserva o espao de memria necessrio
para a varivel, o espao e o local que no ser alterado enquanto a varivel existir.
Para que possamos declarar uma varivel, primeiro precisamos definir que
tipo de dado ela ir armazenar, pois, quando se define um tipo de varivel, infor-
mamos ao computador o quanto de memria ser necessrio separar e que
tipos de operaes podero ser realizadas com o dado que ser armazenado.
Na maioria das linguagens, as variveis precisam ser declaradas antes de
serem usadas.
Para se declarar uma varivel, usamos a seguinte sintaxe:
tipo <nomeDaVarivel>
Real
Caractere
Logico
38 captulo 2
LINGUAGEM UAL LINGUAGEM C++
<varivel> <- <valor> <varivel> = <valor>
captulo 2 39
formao digitada pelo usurio com o teclado para uma determinada varivel
no escopo do algoritmo. Por outro lado, para a apresentao de uma informa-
o na tela, utilizado um comando de sada especfico denominado escreva.
Iniciamos, assim, o uso de funes ou comandos predefinidos, como o co-
mando leia, que trata-se de uma palavra reservada da linguagem, que j possui
uma ao predeterminada associada, que no caso a leitura de dados do dispo-
sitivo de entrada padro.
Vejamos abaixo como utilizar esses comandos nas diferentes linguagens.
COMANDO LEIA
Fluxograma:
40 captulo 2
O smbolo anterior representa o comando que libera o teclado para que o
usurio digite o dado que lhe for solicitado. Como j apresentado, considera-
mos sempre o teclado como o dispositivo de entrada padro.
Dentro do smbolo, vir o nome da varivel que receber o dado que for di-
gitado.
Se voc tiver mais de um dado para ser digitado, poder usar a vrgula para
separar os nomes das varveis.
DADOS DE ENTRADA
quantidade: 2
nomes: conta, juros
tipos: real, real
DADOS INTERMEDIRIOS
quantidade: 2
nomes: valor Juros, novoValor
tipos: real, real
PROCEDIMENTO
1 obter conta, juros
2 valorJuros <- conta * juros
3 novoValor <- valor + valorJuros
4 exibir novo Valor
captulo 2 41
Veja o algoritmo implementado.
Fluxograma
Incio
conta, juros
novoValor
Fim
42 captulo 2
Vamos, ento, ver quais podem ser os principais pontos de dificuldade:
1. Ao executar, aparentemente nada acontece, de acordo com a Figura 8
abaixo. Na verdade, o programa est aguardando a entrada do primeiro
comando leia; basta entrar com o dado da conta, que no caso do exem-
plo anterior foi 100.
captulo 2 43
4. Basta informar o valor da taxa de juros, lembrando que tambm do
tipo real, e o programa lhe retornar o novo valor da conta.
COMANDO ESCREVA
44 captulo 2
veis e constantes, conjuntos de caracteres.
Fluxograma:
v1, v2 Varivel, v1
captulo 2 45
Figura 11 Novo cdigo e resultado do programa de clculo de juros.
Devemos concordar que a soluo ficou bem melhor e mais elegante. Per-
ceba que no ltimo comando de escrita utilizamos um smbolo diferente \n.
Esse smbolo realiza a quebra de linha ou insere uma linha na impresso. Com-
pare a ltima linha do resultado com o anterior. No anterior, quando no tnha-
mos o \n, o texto do programa UAL Press any key to continue... est na mesma
linha logo aps o valor calculado; j neste exemplo o texto est uma linha abai-
xo, desta forma conseguimos estruturar melhor a apresentao. Alm desses
outros smbolos, podem ser utilizados para formatar melhor a sada estes sm-
bolos esto presentes na tabela ASCII, voc pode consult-la para identificar
novas possibilidades e test-los.
CONEXO
Para conhecer mais smbolos, consulte a tabela ASCII: <http://en.wikipedia.org/wiki/ASCII>
CONCEITO
Smbolo \n equivalente tecla enter em um editor de texto.
Smbolo \t equivalente tecla tab em um editor de texto.
46 captulo 2
funes. Nesse grupo, os principais operadores utilizados so:
Subtrao - -
Multiplicao / /
Diviso * *
Resto da diviso % %
captulo 2 47
A precedncia ou ordem de execuo dos operadores aritmticos a mesma
que aprendemos na matemtica. Caso seja preciso alterar a ordem, necess-
rio o uso de parnteses ( ) delimitando as operaes que devem ser realizadas
primeiro, utilizando os mesmo princpios da matemtica.
Explicativo
Em uma expresso relacional, o resultado produzido pela avaliao da ex-
presso sempre um valor lgico. Assim, uma expresso relacional resulta em
um valor do tipo verdadeiro ou falso.
igual == ==
diferente <> !=
48 captulo 2
LINGUAGEM C++
captulo 2 49
2.6.3 Expresses lgicas
disjuno (OU) || ||
LINGUAGEM C++
50 captulo 2
A Figura 17 apresenta o resultado da execuo do algoritmo.
CONEXO
Para um estudo aprofundado a respeito de tabelas verdade, voc poder consultar as seguin-
tes referncias: <http://pt.wikipedia.org/wiki/Tabela_verdade>
CURIOSIDADE
Os operadores lgicos so muito importantes para a construode programas, principalmen-
te para a elaborao de expresses relacionais compostas. Para complementar seu estudo,
voc poder utilizar a seguinte referncia:
<http://pt.wikipedia.org/wiki/ Operadores_l%C3%B3gicos>
captulo 2 51
j aprendemos para resolver aquele problema. A Figura 18 apresenta o algorit-
mo codificado para soluo do problema.
DADOS DE ENTRADA
quantidade: 2
nomes: valor1, valor2
tipos: real, real
DADOS INTERMEDIRIOS
quantidade: 4
nomes: soma, sub, mult, div
tipos: real, real, real, real
PROCEDIMENTO
1 obter valor1, valor2
2 soma <- valor1 + valor2
3 sub <- valor1 - valor2
4 mult <- valor1 * valor2
5 div <- valor1 / valor2
6 exibir soma, sub, mult, div
52 captulo 2
O resultado da execuo do algoritmo apresentado na Figura 19. Nessa
execuo, os valores fornecidos como entrada foram 10 e 20.
ATIVIDADE
1. Construir um algoritmo capaz de calcular o consumo mdio de combustvel de um
veculo. Para isso, o usurio dever informar como entrada os quilmetros percorridos
pelo veculo e o total de litros usados para abastec-lo.
REFLEXO
Nessa segunda unidade, aprendemos os comandos bsicos para a construo de algoritmos
e programas. Sabemos como deve ser criado e estruturado um algoritmo, como devemos
utilizar as variveis para manipular os dados internamente e como realizar a entrada e a sada
de dados. Essa estrutura bsica ser utilizada em todos os programas que voc criar.
Faa os exerccios propostos e pratique bastante para que o entendimento e o uso da es-
tutura bsica fiquem mais fceis e sejam parte integrante de seu pensamento estruturado.
captulo 2 53
LEITURA
Uma forma fcil e estruturada para que voc teste seus algoritmos e verifique seu funcio-
namento a utilizao do teste de mesa. Para aprender como realiz-lo, acesse: <http://
gomeshp.plughosting.com.br/ed/testemesa.htm>.
REFERNCIAS BIBLIOGRFICAS
ASCENCIO, A. F. G.; CAMPOS, E.e A. V. Fundamentos da programao de computadores:
Algoritmos, Pascal, C/C++ e Java. 2. ed. So Paulo: Pearson Education, 2008.
SPALLANZANI, Adriana Sayuri; MEDEIROS, Andra Teixeira de; FILHO, Juarez Muylaert,
Linguagem UAL. Disponvel em <http://geocities.ws/ual_language/ual.html>. Acesso em:
25 abr. 2014.
NO PRXIMO CAPTULO
Agora que voc j sabe construir um algoritmo ou programa vamos aprender no prximo captulo
a utilizar as estruturas condicionais. Essas estruturas vo nos permitir realizar decises dentro dos
algoritmos e transportar para dentro dos algoritmos ou programas diversas situaes reais de
nosso dia a dia.
54 captulo 2
3
Estruturas de
deciso
3 Estruturas de deciso
Em nossa vida, geralmente nos deparamos com problemas que, em determi-
nadas aes, esto condicionadas a um acontecimento, como, por exemplo: se
eu no trabalhar este final de semana, ento poderei ir praia; se chover, no
poderei ir piscina; se eu ganhar na loteria, pagarei todas as minhas contas.
Todas as situaes expostas dependem da conjuno subordinativa condicional/
partcula expletiva/ pronome reflexivo/ conectivo ou qualquer outra denominao
que se queira dar se. Provavelmente, no conseguiramos viver sem o se, algumas
vezes usamos at alguns senes. Os algoritmos e as linguagens de programao
foram feitos para resolver problemas do dia a dia, logo precisam tambm desta es-
trutura condicional para que possam atender a um conjunto real de problemas.
Nesta unidade, estudaremos a estrutura condicional ou de deciso composta
pelos comandos se ... ento ... seno.
OBJETIVOS
Utilizar operadores relacionais e lgicos.
Conhecer as estruturas de deciso.
Construir algoritmos utilizando se ... ento ... seno.
Construir algoritmos utilizando comandos de deciso aninhados.
REFLEXO
Na unidade anterior, estudamos operadores lgicos e relacionais. primeira vista, eles no pare-
cem ter muita utilidade em um programa de estrutura bsica como estudado at aqui, porm so
de extrema importncia para que possamos tomar decises em algoritmo ou programa. Associa-
dos estrutura de deciso que ser estudada nesta unidade, eles permitem a criao de diferen-
tes caminhos dentro de nossos programas, permitindo-nos resolver problemas mais complexos.
56 captulo 3
3.1 Caractersticas de estrutura de deciso
Condicional simples
Condicional composta
Condicional aninhada
Condicional mltipla
captulo 3 57
(aninhado); caso no seja, um outro teste (encadeado) ser feito at que todas
as possibilidades de respostas sejam contempladas.
Condicional mltipla: permite a verificao de mltiplas possibilidades para
uma mesma varivel executando diferentes blocos de cdigo, de acordo com seu
valor. Permite especificar quantos valores sejam necessrios para uma varivel.
CONCEITO
Teste: O teste uma expresso relacional que compara valores dos seus operandos..
OPERAES OU TESTES
SIGNIFICADO MATEMTICA EXEMPLO - UAL
Maior > 2*8>4
Igual = 3 == 7 4
Diferente 8 <> 5
Negao (no) !p
58 captulo 3
TABELA VERDADE
NO E OU
captulo 3 59
LINGUAGEM C++ EXEMPLO
if (<teste>) if (nota >= 6)
{ {
<bloco de comandos> cout << Aprovado;
} }
FLUXOGRAMA EXEMPLO
V V
Teste Nota > = 6
F F Aprovado
..
.
Figura 20 Algoritmo com comando condicional simples que verifica se um nmero posi-
tivo ou negativo.
60 captulo 3
Perceba que no exemplo C++ no foram utilizados os parnteses antes e de-
pois do bloco de comandos internos do comando condicional. Em C++, quan-
do temos apenas uma linha de comando, os parnteses para delimitar o incio e
o fim de bloco de comandos opcional e pode ser omitido, porm importante
que se tenha muita ateno ao omitir os parnteses: apenas a primeira linha de
comando aps o comando condicional ser executada caso ele seja verdadeiro,
que no caso do exemplo o comando cout.
O resultado da execuo do algoritmo apresentado na Figura 21 e na Figura
22. No resultado deste exemplo, importante notar que temos duas possibilida-
des de sada diferente: a mensagem Este nmero positivo ou Este nmero
negativo ser exibida de acordo com o valor informado pelo usurio. Assim, o al-
goritmo realiza o desvio do fluxo de execuo a partir do valor definido na entrada
de dados.
captulo 3 61
comparao. Lembre-se de que, se quisermos alterar a ordem de precedncia,
precisaremos delimitar as operaes com parnteses, porm isso no neces-
srio para este exemplo.
Figura 23 Algoritmo com comando condicional simples que verifica se um nmero par
ou mpar.
62 captulo 3
3.3 Comando condicional composto
captulo 3 63
FLUXOGRAMA EXEMPLO
V V
Teste Nota >= 6
F .. F
.. . Aprovado
. Reprovado
Figura 26 Algoritmo com comando condicional composto que verifica se um nmero par
ou mpar.
64 captulo 3
O resultado da execuo do algoritmo, para os possveis valores de entrada,
apresentado na Figura 27 e na Figura 28.
LINGUAGEM UAL
captulo 3 65
LINGUAGEM C++
66 captulo 3
Figura 31 Resultado da execuo do algoritmo para entrada N
captulo 3 67
LINGUAGEM C++ EXEMPLO
if (<teste>) if (nota >= 6)
{ {
<bloco de comandos> cout << Aprovado;
} }
else else
{ {
if (<teste>) if (nota >= 4)
{ {
<bloco de comandos> cout << Recuperao;
} }
else else
{ {
<bloco de comandos> cout << Reprovado;
} }
} }
FLUXOGRAMA EXEMPLO
V V
Teste Nota >= 6
F F
.. Aprovado
.
V V
Teste Nota >= 4
F .. F
Recuperao
.. .
. Reprovado
68 captulo 3
LINGUAGEM UAL
captulo 3 69
LINGUAGEM C++
70 captulo 3
FLUXOGRAMA
Incio
a, b, c
F V
a<b
F V F V
a<b c<a
F V c, b, a F V c, a, b
c<a c<b
b, a, c b, c, a a, b, c a, c, b
Fim
captulo 3 71
O prximo exemplo apresentar a codificao de um algoritmo que simula
o processo de autenticao de um sistema. A autenticao de usurios geral-
mente conhecida como login e necessita de um nome de usurio e senha para
validao dos dados. A listagem de cdigo da Figura 34 apresenta a codificao
do algoritmo, em que possvel notar a condicional aninhada, no caso de o usu-
rio informado ser joo, em que ser solicitada a senha e esta ser verificada.
LINGUAGEM UAL
Figura 34 Algoritmo com comando condicional aninhada que realiza login de um usurio.
72 captulo 3
Os possveis resultados que podem ser encontrados com a execuo da apli-
cao podem ser visualizados nas Figuras 35, 36 e 37.
captulo 3 73
3.5 Comando condicional mltiplo
Um problema frequente que ocorre quando temos uma nica varivel poden-
do assumir diversos valores diferentes, em que, para cada valor, teremos uma
ao associada. Para resolver esse problema de imediato, pensaramos em um
conjunto de ses aninhados. A Figura 38 apresenta o cdigo em UAL para um
programa em que o usurio entra com um nmero de 1 a 12, que representa um
ms do ano, e o programa exibe o nome do ms.
74 captulo 3
lha, precisamos estar atentos a exigncias, como as listadas a seguir
A varivel tem que ser a mesma em todos os testes.
A varivel tem que ser do tipo enumervel: inteira ou de um caractere.
O operador relacional tem que ser o de igualdade.
captulo 3 75
FLUXOGRAMA
V
valor == v1 Comandos 1
V
valor == v2 Comandos 2
V
valor == v3 Comandos 3
V
valor == vn Comandos n
Comandos 1
76 captulo 3
Vejamos na Figura 39 o exemplo dos meses apresentados anteriormente
utilizando a estrutura escolha.
LINGUAGEM C++
Figura 39 Algoritmo C++ utilizando estrutura escolha que imprime o nome do ms a partir
no nmero.
captulo 3 77
O resultado da execuo do algoritmo pode ser visualizado na Figura 40. A
Figura 41 apresenta o resultado do algoritmo com um valor no tratado nas op-
es, o que culmina na execuo da opo seno.
LINGUAGEM C++
Figura 42 Algoritmo C++ utilizando estrutura escolha como menu do programa de calculadora.
78 captulo 3
O resultado da execuo do algoritmo pode ser visualizado na Figura 43.
ATIVIDADE
1. Escreva um algoritmo computacional que receba quatro valores do tipo inteiro e deter-
mine o menor elemento.
2. Entrar com 3 nmeros para as variveis v1, v2, v3. Trocar os contedos das variveis de
tal maneira que a varivel v1 fique com o maior nmero, a varivel v2 fique com o nmero
do meio e a v3 com o menor nmero. Exibi-los de forma decrescente.
MS DO AUTOMVEIS CAMINHES
LICENCIAMENTO
abril 1 -
maio 2 -
junho 3 -
julho 4 -
agosto 5e6 -
captulo 3 79
MS DO AUTOMVEIS CAMINHES
LICENCIAMENTO
setembro 7 1e2
outubro 8 3, 4 e 5
novembro 9 6, 7 e 8
dezembro 0 9e0
REFLEXO
Com a incluso da estrutura condicional, nossos cdigos ficaram mais complexos, uma vez
que os exerccios requerem um maior nmero de possibilidades de respostas. As estruturas
estudadas at aqui compem as estruturas bsicas dos algoritmos e programao e nos
permitem resolver um universo muito extenso de problemas.
Os comandos condicionais possuem diversas variaes em suas aplicaes, principalmente no
que diz respeito aos condicionais aninhados, que podem ser organizados de inmeras formas para
resolver os mais complexos problemas. Sua estrutura apesar de simples pode ser de difcil estru-
turao. Por isso, pratique o mximo que puder para melhorar sua compreenso e entendimento.
LEITURA
Os programas e as estruturas em C++ esto ficando cada vez mais complexos, por isso j
hora de aprender um pouco mais sobre o ambiente DEV C++. Acesse o link do ICMC, da
USP de So Carlos. <http://wiki.icmc.usp.br/images/e/e3/Manual_Dev_C.pdf>
REFERNCIAS BIBLIOGRFICAS
ASCENCIO, A. F. G.; CAMPOS, E.e A. V. Fundamentos da programao de computadores:
Algoritmos, Pascal, C/C++ e Java. 2. ed. So Paulo: Pearson Education, 2008.
80 captulo 3
ASCENCIO, A. F. G.; EDILENE, A. V. de. Fundamentos da programao de computadores: Al-
goritmos, Pascal e C/C++. So Paulo: Prentice Hall, 2002.
PUGA, S.; RISSETTI, G. Lgica de programao e estrutura de dados: com aplicaes em Java.
1. ed. So Paulo: Pearson Education, 2003.
SPALLANZANI, Adriana Sayuri; MEDEIROS, Andra Teixeira de; FILHO, Juarez Muylaert. Lin-
guagem UAL. Disponvel em: <http://geocities.ws/ual_language/ual.html>. Acesso em: 25
abr. 2014.
NO PRXIMO CAPTULO
Veremos a seguir as estruturas que nos permitem economizar esforo, evitando repetio de
cdigo para execues cclicas, o que facilitar muito o desenvolvimento de algoritmos e
programas mais longos, em razo da utilizao de uma quantidade menor de cdigos.
captulo 3 81
4
Estruturas de
repetio
4 Estruturas de repetio
Neste captulo, estudaremos as estruturas de repetio utilizadas nos algorit-
mos. Estudaremos trs estruturas de repetio diferentes: para, enquanto e
faa ... enquanto. Elas so muito importantes para facilitar a vida do progra-
mador e permitir a criao de programas maiores e mais complexos. Seu en-
tendimento necessrio para que um grande volume de processamento sem
a necessidade de grandes trechos de cdigo seja possvel, diminuindo muito o
trabalho de codificao.
OBJETIVOS
Entender a estrutura e o funcionamento das estruturas de repetio.
Construir algoritmos usando a estrutura de repetio para.
Conhecer as trs estruturas de repetio do C++.
Construir algoritmos usando a estrutura de repetio enquanto.
Construir algoritmos usando a estrutura de repetio faa ... enquanto.
Entender a diferena e as aplicaes das estruturas de repetio.
REFLEXO
Estudamos no Captulo 2 os operadores lgicos e de comparao e os utilizamos amplamente
na Unidade 3 para realizar os controles condicionais de desvio. muito importante que o uso
e a aplicao destes operadores estejam bem entendidos por voc, pois nesta unidade sero
novamente utilizados como controle para as estruturas de repetio. Caso ainda tenha dvidas
ou dificuldade em sua aplicao, retorne e reforce os estudos para que eles no dificultem seu
entendimento das estruturas de repetio.
84 captulo 4
Provavelmente voc utiliza um despertador para acordar de manh. J pen-
sou como faria um programa para criar um despertador? Pensando de forma
simplificada, basta criarmos um programa que toca um som, em determinado
horrio, todos os dias, correto? Mas como faramos isso? Quantos dias? Repe-
tiramos os comandos para tocar o som tantas vezes quantos forem os dias que
quisermos que o despertador toque? Mas, nesse caso, isso deveria ser definido
no momento de desenvolvimento do programa, e no poderia ser alterado pelo
usurio. Criaramos esse despertador para tocar apenas uma vez e o usurio
precisaria inici-lo novamente todos os dias? bem provavelmente que ao ler
perguntas passou pela sua cabea, enquanto o usurio deixar ativo. E esta a
resposta correta. Porm, com o que vimos at agora, no conseguimos fazer
isso. Ento, vamos aprender as estruturas de repetio.
Uma delas o enquanto, que deve ter passado pela sua cabea. Aprendere-
mos uma estrutura que nos permite dizer ao algoritmo ou programa enquanto
estiver ativo faa isso, ou faa isso enquanto for diferente daquilo ou ainda
para x de 10 at 100 realize tal tarefa. Perceba que todas as frases tratam de
aes que se repetiro e nos permitem que, ao invs de repetir um mesmo tre-
cho de cdigo diversas vezes, ns o escrevamos uma nica vez e a estrutura uti-
lizada se encarrega de repetir.
Para exemplificar, foram apresentadas trs frases, cada uma delas apre-
senta um tipo diferente de repetio: a estrutura pr-testada, a ps-testada e a
com varivel de controle. Na pr-testada, verificamos determinada condio e
depois executamos a tarefa; na ps-testada, primeiro executamos determinada
tarefa e depois verificamos se a condio verdadeira para realizar as prximas
iteraes. Na opo com varivel de controle, a execuo das tarefas est asso-
ciada diretamente ao valor de uma determinada varivel de controle.
CONCEITO
Estruturas de repetio so tambm conhecidas como estruturas de iterao ou laos, as
quais permitem que uma sequncia de comandos seja executada repetidamente, at que
determinada condio ou situao seja atendida.
captulo 4 85
cao. conhecido que alguns programadores gostam mais de determinados
tipos de estruturas do que de outros, e so fiis a esta, porm a utilizao de
uma determinada estrutura de forma incorreta pode levar a falhas no progra-
ma, ou aumento de complexidade de cdigo deixando-o mais suscetvel a erros.
86 captulo 4
LINGUAGEM UAL
para(<valor inicial>; <expresso de teste>;<incremento>){
} bloco de comandos
<valor inicial>
nomeDaVarivel <- valorInicial;
deve ser uma varivel enumervel, um inteiro (int)
atribudo um valor inicial, pode ser uma constante, uma varivel ou uma ex-
presso.
Exemplos: i<-0; i<- strtam(nome); i <- x+1;
<expresso de teste>
nomeDaVarivel <, >, <=, >=, == valor;
Estrutura relacional ou condio que ser utilizada como termo final do lao
O valor poder ser constante, varivel ou expresso
Exemplos: i >= 10; i>strtam(nome); i <= x+10;
<incremento>
nomeDaVarivel <- nomeDaVarivel operador valor
um comando de atribuio que incrementa a varivel no lao
o operador pode ser qualquer operador aritmtico ou expresso
Exemplos: i <- i+1; i<-i+2; i++; i--;
captulo 4 87
LINGUAGEM C++
for(<valor inicial>; <expresso de teste>;<incremento>){
bloco de comandos
}
<valor inicial>
nomeDaVarivel = valorInicial;
deve ser uma varivel enumervel, um inteiro (int)
atribudo um valor inicial, pode ser uma constante, uma varivel ou uma expresso.
Exemplos: i=0; i=strtam(nome); i=x+1;
<expresso de teste>
nomeDaVarivel <, >, <=, >=, == valor;
Estrutura relacional ou condio que ser utilizada como termo final do lao
O valor poder ser constante, varivel ou expresso
Exemplos: i >= 10; i>strtam(nome); i <= x+10;
<incremento>
nomeDaVarivel <- nomeDaVarivel operador valor
um comando de atribuio que incrementa a varivel no lao
o operador pode ser qualquer operador aritmtico ou expresso
Exemplos: i =i+1; i=i+2; i++; i--;
O comando < ; ; > pode ser utilizado sem parmetro algum para criar um loop ou for
infinito, porm os ; so obrigatrios
As chaves do bloco de comandos so opcionais no caso de haver um nico comando.
88 captulo 4
FLUXOGRAMA EXEMPLO
Incio
Count < 1, 3, 1 F
Repetio F
com contador V
V Digite nmero > 0
Bloco de
comandos NUM
Num * 2
Fim
para(c<-1; c<=30;
Repetir 30 vezes for(c=1; c<=30; c++)
c++)
Contar de 10 at 1
para(c<-10; c>=1; c--) for(c=10; c>=1; c--)
decrementando de 1
captulo 4 89
A listagem cdigo 9 demonstra a utilizao da estrutura de repetio para. Nes-
se exemplo, a estrutura de repetio empregada na leitura de um conjunto de 10
valores numricos do tipo real que so informados pelo usurio. Alm disso, uma
varivel especial denominada acumulador realiza a soma dos valores que tm en-
trada pelo teclado e, ao final, apresenta a soma total destes valores. Um detalhe
importante a respeito de acumuladores est relacionado necessidade de iniciali-
zao da varivel acumuladora. Para evitar inconsistncias na soma dos valores,
fundamental que a varivel acumuladores seja iniciada com o valor zero.
90 captulo 4
Na estrutura de repetio para, os passos iterativos do lao tambm po-
dem ocorrer de maneira decremental. Nesse prximo exemplo, apresentada
a codificao de um algoritmo que exibe na tela os nmeros pares no inter-
valo de 10 at 1. Note que a varivel contadora decrementada at atingir a
condio de parada.
captulo 4 91
4.3 Comando de repetio com teste lgico no incio - ENQUANTO
LINGUAGEM UAL
enquanto( <condio> )
{
bloco de comandos
}
<condio>
varivel operador valor;
Estrutura relacional ou condio que ser utilizada como validao para a execuo
do bloco de comandos.
Pode ser uma nica expresso simples ou um conjunto de expresses relacionais e
lgicas, como as utilizadas nos comandos condicionais, vistas anteriormente.
Exemplos: i >= 10; i>strtam(nome); i <= x+10;
92 captulo 4
Figura 48 Exemplo estrutura enaquanto em UAL
LINGUAGEM C++
while ( <condio> )
{
bloco de comandos
}
<condio>
varivel operador valor;
Estrutura relacional ou condio que ser utilizada como validao para execuo
do bloco de comandos.
Pode ser uma nica expresso simples ou um conjunto de expresses relacionais e
lgicas, como as utilizadas nos comandos condicionais, vistas anteriormente.
Exemplos: i >= 10; i>strtam(nome); i <= x+10;
captulo 4 93
Figura 49 Exemplo estrutura enaquanto em C++
FLUXOGRAMA EXEMPLO
Incio
NUM
F
Test
F
V Num > 0?
V
Bloco de
comandos Num * 2
NUM
Fim
94 captulo 4
A listagem cdigo a seguir apresenta na codificao a estrutura de repetio en-
quanto para um lao de repetio controlado por uma varivel contadora. Esse tipo
de codificao representa a adaptao da estrutura de repetio para na sintaxe da
estrutura enquanto. Nesse exemplo, o algoritmo computacional tem como objeti-
vo apresentar os valores pares no intervalo de 1 at 10, com isso voc poder com-
parar com a codificao da listagem 10 que realiza uma tarefa semelhante.
captulo 4 95
uma expresso condicional determina se o lao ser ou no executado nova-
mente. A listagem cdigo 11 demonstra a codificao de uma estrutura de repe-
tio enquanto com um lao controlado por uma expresso condicional. O lao
ser executado enquanto o valor informado pelo usurio for diferente de zero.
Alm disso, o algoritmo realiza a contagem do total de nmeros positivos e do
total de nmeros negativos que foram informados.
96 captulo 4
O resultado da execuo do algoritmo pode ser visualizado na Figura 51.
captulo 4 97
ENQUANTO PARA
using namespace std;
using namespace std;
int main()
int main()
{
{
int num;
int num;
cout<<\nNumero: ;
for( ; ; );
cin>>num;
{
while(num <= 0)
cout<<\nNumero: ;
{
cin>>num;
cout<<\n<<num*2;
if(num <= 0 ) break;
cout<<\nNumero: ;
cout<<\n<<num*2;
cin>>num;
}
}
cout<<\n;
cout<<\n;
system(pause);
system(pause);
}
}
Neste exemplo, a estrutura for foi utilizada sem nenhum parmetro, combi-
nada com um if e break, simulando o funcionamento do while.
98 captulo 4
LINGUAGEM UAL
faa
{
bloco de comandos
}
enquanto( <condio> )
<condio>
varivel operador valor;
Estrutura relacional ou condio que ser utilizada como validao para execuo
do bloco de comandos novamente.
Pode ser uma nica expresso simples ou um conjunto de expresses relacionais e
lgicas, como as utilizadas nos comandos condicionais, vistas anteriormente.
Exemplos: i >= 10; i>strtam(nome); i <= x+10;
captulo 4 99
LINGUAGEM C++
do
{
bloco de comandos
}
while( <condio> );
<condio>
varivel operador valor;
Estrutura relacional ou condio que ser utilizada como validao para execuo do
bloco de comandos novamente.
Pode ser uma nica expresso simples ou um conjunto de expresses relacionais e
lgicas, como as utilizadas nos comandos condicionais, vistas anteriormente.
Exemplos: i >= 10; i>strtam(nome); i <= x+10;
Atente-se para o ; aps o comando while, ele obrigatrio.
100 captulo 4
FLUXOGRAMA EXEMPLO
Incio
Bloco de
comandos
NUM
V
Test Num * 2
F
V
Num > 0?
F
Fim
captulo 4 101
LINGUAGEM UAL LINGUAGEM C++
prog exemplo
int total; #include <iostream>
real nota, soma, maior, menor, media; using namespace std;
string resposta; int main()
soma <- 0.0; {
total <- 0; int total;
faca float nota, soma, maior, menor, media;
{ char resposta;
total <- total +1; soma = 0;
imprima \nNota , total, : ; total = 0;
leia nota; do{
soma <- soma + nota; total++;
se (total == 1) cout<<\nNota <<total<<: ;
{ cin>>nota;
maior <- nota; if( (total == 1)
menor <- nota; {
} senao maior = nota;
{ menor = nota;
se (nota > maior) } else
{ {
maior <- nota; if (nota > maior)
} maior = nota;
se (nota < menor) if (nota < menor)
{ menor = nota;
menor <- nota; }
} cout\nDeseja continuar [s] ou [n]? ;
} cin>>resposta;
imprima Deseja continuar [s] ou [n]? ; } while(resposta==n || resposta==N);
leia resposta; media = soma / total;
} enquanto(resposta==s || respos- cout << \nMdia das notas: << media;
ta==S) cout << \nMaior nota..........: << maior;
media <- soma / total; cout << \nMenor nota.........: << menor;
escreva \nMdia das notas: , media; }
escreva \nMaior nota..........: , maior;
escreva \nMenor nota.........: , menor;
fimprog
102 captulo 4
O programa acima l notas at que o usurio informe que no deseja con-
tinuar respondendo n ou N pergunta e posteriormente imprime a mdia
das notas, a maior e a menor nota. A Figura 10 apresenta o resultado da execu-
o do algoritmo. Note que a execuo do bloco ocorreu algumas vezes at que
o usurio optou por finalizar o algoritmo.
CONEXO
Voc pode utilizar assugesto de endereo apresentado abaixo para complementar seus estudos
a respeito de estruturas de repetio:
<http://www.ufpa.br/sampaio/curso_de_icc/icc/aula%2011/repita_ate.htm>
Acredito que neste momento voc deva estar se perguntando: quando devo usar
cada uma das estruturas? normal que haja preferncia por uma ou outra es-
trutura de repetio, porm existem algumas indicaes ou melhores aplica-
es, conforme segue.
captulo 4 103
4.5.1 Indicao do para
Estrutura que testa no incio e usada quando o nmero de repeties for des-
conhecido.
Simula com facilidade a estrutura do faca...enquanto e a estrutura do para
(desde que criemos uma varivel que ter seu valor incrementado/decrementa-
do dentro da estrutura de repetio).
Na linguagem C++, essa estrutura recebe o nome de while.
Sua lgica : repete enquanto a condio for verdadeira. Como ela testa an-
tes de executar o bloco, pode ser que nem execute o bloco se a condio de in-
cio for falsa.
104 captulo 4
ATIVIDADE
1. Construa um algoritmo que escreva 100 vezes a frase: Algoritmo s se aprende praticando.
2. Construa um algoritmo que permita entrar com vrios nmeros enquanto forem diferentes
de 999999999. Exibir, ao final, a quantidade de nmeros digitados, a mdia de todos os
nmeros e o percentual de nmeros negativos.
5. Elabore um algoritmo que calcule o total de nmeros primos entre 1 e 1000. Para isso,
utilize a estrutura de repetio para.
REFLEXO
Quando as estruturas de repetio so introduzidas, deparamo-nos com a possibilidade de resol-
ver muitos exerccios interessantes, dada as possibilidades e complexidades que elas permitem.
Alm disso, comeamos a construir programa com aparncia mais profissional.
Os contedos apresentados nesta unidade precisam de muita prtica e dedicao. As apli-
caes e formas de utilizao das estruturas de repetio so muito variadas e sero domi-
nadas apenas com a prtica.
Com esse tipo de estrutura de repetio, contemplamos as funes ou estruturas bsicas
dos principais paradigmas de programao. muito importante que voc, como futuro pro-
gramador, tenha completo domnio sobre todos, pois o uso combinado permitir o desenvol-
vimento de praticamente qualquer tipo de aplicao.
captulo 4 105
LEITURA
Com o estudo dos conceitos de Estrutura Condicional e Estrutura de Repetio, voc poder
aprofundar a leitura da obra Fundamentos da programao de computadores. No livro, h
captulos especficos que descrevem cada uma das estruturas, alm de uma infinidade de
exemplos de codificao. A referncia completa descrita a seguir:
REFERNCIAS BIBLIOGRFICAS
ASCENCIO, A. F. G.; CAMPOS, E.e A. V. Fundamentos da programao de computadores:
Algoritmos, Pascal, C/C++ e Java. 2. ed. So Paulo: Pearson Education, 2008.
PUGA, S.; RISSETTI, G. Lgica de programao e estrutura de dados: com aplicaes em Java.
1. ed. So Paulo: Pearson Education, 2003.
SPALLANZANI, Adriana Sayuri; MEDEIROS, Andra Teixeira de; FILHO, Juarez Muylaert.
Linguagem UAL. Disponvel em: <http://geocities.ws/ual_language/ual.html>. Acesso em:
25 abr. 2014.
NO PRXIMO CAPTULO
Vimos neste e no decorrer dos captulos todos os comandos e estruturas bsicas de algorit-
mos e das linguagens de programao em geral e j conseguimos resolver praticamente
qualquer problema. No prximo captulo veremos algumas estruturas de dados que nos per-
mitiro realizar computao de um volume maior de dados tratando de problemas mais com-
plexos, com menor quantidade de cdigo.
106 captulo 4
5
Estrutura de dados
homogneas
5 Estrutura de dados homogneas
Neste captulo vamos iniciar o estudo estruturas de dados, mais especifica-
mente estrutura de dados homogneos unidimensionais, tambm conhecidos
como vetores e estrutura bidimensionais ou como matrizes.
Para tal, faremos muito uso das estruturas de repetio estudadas nas unidades
anteriores. Por isso, muito importante que voc tenha compreendido e prati-
cado bastante para que no haja dificuldades nestas estruturas, dificultando
seu aprendizado na utilizao de vetores e matrizes. Caso ainda tenha dvidas,
sugiro que volte s unidades anteriores e pratique mais exerccios, at que fique
mais fcil utilizar as estruturas de repetio.
Este contedo completa os conceitos bsicos para a construo de programas
com uma ampla gama de aplicabilidade.
OBJETIVOS
Diferenciar estruturas homogneas de estruturas heterogneas.
Construir programas usando matrizes unidimensionais (vetores).
Construir programas utilizando matrizes bidimensionais.
Usar matrizes de char em seus comandos.
Compreender as vantagens no uso de matrizes bidimensionais.
REFLEXO
Voc se lembra da teoria de conjuntos aprendida no ensino bsico? importante lembrar
esses conceitos, pois eles esto diretamente relacionados com o contedo desta unidade.
Podemos definir um conjunto como um agrupamento de elementos do mesmo tipo. Na
matemtica, geralmente um conjunto nomeado utilizando uma letra maiscula do alfa-
beto. Um conjunto descrito atravs da enumerao de seus elementos entre um par de
chaves com uma vrgula separando os elementos. Veja exemplo:
Esse o conjunto dos meses do primeiro semestre do ano. Como sempre h uma relao
entre os elementos de um conjunto, possvel represent--lo por esta relao tambm.
Matriz um arranjo de elementos dispostos em linhas e colunas e representada por
108 captulo 5
uma letra maiscula do alfabeto. Seus elementos so representados entre um par de
colchetes ou parnteses. Ou seja, uma matriz um conjunto especfico de elementos,
representado de acordo com certa estrutura.
captulo 5 109
possui um conjunto de dados que podem ser de diferentes tipos, como: nome,
idade, sexo, endereo, telefone, CPF, RG.Podemos notar que entre os dados
temos diferentes tipos; alguns so literais, como: nome, endereo, sexo, en-
quanto outros no numerais: idade, telefone, CPF e RG. Para representar uma
pessoa, agrupando seus dados, utilizamos uma estrutura heterognea, como a
proposta abaixo:
estrutura {
literal nome;
inteiro idade;
literal sexo;
literal endereo;
inteiro telefone;
inteiro cpf;
inteiro rg;
} Pessoa;
110 captulo 5
NOME
M a r i a \0
0 1 2 3 4 5
Voc deve se lembrar do ensino mdio o conceito de matriz, que consiste de uma
tabela de linha e colunas formando um conjunto de nmeros ou elementos, a qual
est representada na Figura 55. Na representao, temos uma matriz de dimen-
ses m por n, ou seja, ela possui um nmero m de linha e um nmero n de colunas.
n colunas j
m linhas
a1,1 a1,2 a1,3 ... a1,n
a2,1 a2,2 a2,3 ... a2,n
captulo 5 111
Quando temos uma matriz em que m e n so diferentes de zero, essa ma-
triz bidimensional, ou seja, possui duas dimenses. Esse tipo de matriz ser
estudada um pouco mais adiante. Quando uma de suas dimenses igual a
zero, temos uma matriz unidimensional, tambm conhecida como vetor, que
estudaremos em detalhes a seguir.
NOME
M a r i a \0
0 1 2 3 4 5
112 captulo 5
A letra r o terceiro elemento do vetor, ou seja, est na posio 2, logo seu
endereo ser:
Exemplos:
captulo 5 113
LINGUAGEM UAL LINGUAGEM C++
real salario [100]; float salario[100];
Aps declarar um vetor, temos que popular este vetor, ou seja, incluir os dados
desejados. Podemos fazer a inicializao juntamente da declarao ou poste-
riormente a qualquer momento.
Para inicializar um ver com um determinado valor, ou seja, declar--lo e em
sequncia j inserir um conjunto de dados, utilizamos os comandos a seguir:
LINGUAGEM UAL
tipo nomeDoVetor[tamanahoDoVetor] = { dado1, dado2, ..., dadotamanhoDoVetor }
LINGUAGEM C++
tipo nomeDoVetor[tamanahoDoVetor] = { dado1, dado2, ..., dadotamanhoDoVetor }
Exemplos:
114 captulo 5
LINGUAGEM UAL LINGUAGEM C++
/* Inicializar um vetor nota de tamanho 3 com os valores reais 5.3, 8.5 e 10.1 */
real vreais [3] = {5.3, 8.5, 10.1}; float vreais[3] = {5.3, 8.5, 10.1};
Exemplos:
sexo[0] = F; sexo[0] = F;
captulo 5 115
/* Atribuir o valor 12,23 na posio 3 do vetor vreais */
Para atribuir um valor a uma posio de um vetor, indicamos a posio desejada en-
tre colchetes na frente do nome da varivel seguido pela atribuio do valor desejado.
Temos sempre de lembrar que os vetores comeam na posio zero, portanto, se que-
remos atribuir um valor na posio n, devemos utilizar o ndice n-1.
Se queremos trocar o valor da quinta posio do vetor, devemos utilizar o ndice 4.
Imagine agora que voc no tenha os valores na hora da inicializao, mas pre-
cisar popular posteriormente com valores informados pelo usurio, como
voc realizaria esta tarefa? Para um vetor de 8 posies, usaria 8 comandos de
leitura, conforme o exemplo a seguir?
116 captulo 5
Essa a forma mais simples e direta de resolver este problema, porm, se tivs-
semos que entrar com um vetor de 100 posies e com um de 1000 posies, tera-
mos de repetir 1000 vezes as duas linhas de cdigo? Voc se lembra das estruturas
de repetio que aprendemos anteriormente? Elas no seriam teis nesse caso?
Vamos ver como poderamos us-las.
Primeiramente temos de perceber que h algumas informaes que no
se repetem, como a posio que estamos lendo. Para isso, devemos quebrar a
mensagem mostrada.
captulo 5 117
MEMRIA PRINCIPAL DISPLAY
N NMEROS
0 0 10 Digite 1o elemento: 10
1 1 16 Digite 2o elemento: 16
N NMEROS
2 2 21 Digite 3o elemento: 21
3 3 24 Digite 4o elemento: 24
4 4 27 Digite 5o elemento: 27
5 5 30 Digite 6o elemento: 30
6 6 31 Digite 7o elemento: 31
7 7 32 Digite 8o elemento: 32
Agora que j sabemos como ler um vetor de qualquer tamanho, vamos es-
truturar um cdigo genrico, o qual podemos utilizar sempre que precisarmos,
pois serve de base para qualquer vetor.
118 captulo 5
processo exatamente o mesmo do anterior, porm, no lugar do comando de
leitura da fonte de entrada do computador, atribumos um valor diretamente
com o comando de atribuio. Podemos fazer isso para um nico valor, ou uti-
lizando uma estrutura de repetio, conforme segue.
captulo 5 119
LINGUAGEM UAL LINGUAGEM C++
/* IMPRESSO COMO COLUNA */
120 captulo 5
Logo, o professor ou tutor dever guardar as notas das 4 avaliaes mais a m-
dia de cada aluno. Geralmente, eles ainda guardam mais uma informao re-
levante do desempenho do aluno que a frequncia, ou a quantidade de faltas
que o aluno possui. Se voc for fazer um sistema para ele controlar essas notas,
como faria? Utilizaria um vetor para cada tipo de dado, conforme a seguir?
Vetor Notas 1
A1 A2 A3 A4 A4 A6 ..... A60
Vetor Notas 2
A1 A2 A3 A4 A4 A6 ..... A60
Vetor Notas 3
A1 A2 A3 A4 A4 A6 ..... A60
Vetor Notas 4
A1 A2 A3 A4 A4 A6 ..... A60
Vetor Faltas
A1 A2 A3 A4 A4 A6 ..... A60
captulo 5 121
ALUNO ALUNO ALUNO ALUNO ALUNO
1 2 3 4 60
GUA
LUZ
ALUGUEL
TRANSPORTE
SUPERMERCADO
RESTAURANTE
Todos os exemplos do nosso dia a dia em que utilizamos uma tabela para
organizar os dados podem ser diretamente mapeados em uma matriz, de for-
ma simples e direta. Vamos ver agora como fazer isso utilizando linguagem de
programao. Nessa etapa, vamos utilizar apenas a linguagem C++.
122 captulo 5
5.4.2 Declarao de uma matriz
LINGUAGEM C++
tipo nomeDaMatriz[tamanahoD1] [tamanahoD2] ;
Exemplos:
LINGUAGEM C++
/* declara uma matriz para guardar 3 informaes diferentes de 300 pacientes */
captulo 5 123
Olhando um pouco mais atentamente aos exemplos apresentados, pode-
mos notar que todos trazem o nome de entidades (pacientes, alunos, nomes)
nas linhas (primeiro ndice da matriz) e suas propriedades nas colunas. Voc
poderia se perguntar se isso uma regra ou se poderamos utilizar matrizes
transpostas ou invertidas para representar as mesmas informaes. Esta per-
gunta muito comum e sempre surge. Voc poderia , sem problemas, utilizar
qualquer configurao para sua matriz, conforme o exemplo abaixo, em uma
matriz com 4 notas para 8 alunos.
ALUNO 2
ALUNO 3
ALUNO 4
ALUNO 5
ALUNO 6
ALUNO 7
ALUNO 8
NOTA 1
NOTA 2
NOTA 3
NOTA 4
124 captulo 5
Os dois formatos anteriores so corretos, porm, de uma maneira geral, a
maioria dos programadores utiliza a primeira forma, com linhas para identi-
ficar as entidades e colunas para as propriedades ou atributos das entidades.
Como veremos a seguir, essa forma facilita as estruturas de programao e o
entendimento dos cdigos. Alm disso, a matriz bidimensional armazenada
na memria do computador como se fosse uma nica linha contgua, com to-
das as linhas em sequncia, uma aps a outra. A Figura 2 abaixo mostra a orga-
nizao em memria. Logo, estruturando da primeira forma, temos os dados
mais organizados na memria.
mat [0] [0] mat [0] [1] mat [1] [0] mat [1] [1] mat [2] [0] mat [2] [1]
LINGUAGEM C++
tipo nomeDaMatriz[tamanahoD1] [tamanahoD2] = { dado1, dado2, ..., da-
dotamanhoD1xD2};
Exemplos:
LINGUAGEM C++
/* Inicializa uma matriz de 3 linhas e 4 colunas */
captulo 5 125
char str_vect [3][11] = {Joao, Maria, Jose};
LINGUAGEM C++
tipo nomeDaMatriz[posioLinha] [posioColuna] = ValorDesejado;
126 captulo 5
Exemplos:
LINGUAGEM C++
/* atribuir o valor 13 primeira posio da primeira linha */
Podemos notar pelo exemplo que basta termos o cuidado de lembrar sem-
pre que os ndices se iniciam em 0 e que vo at tamanho 1.
Vejamos agora como inserir todos os valores em uma matriz bidimensio-
nal aps sua declarao, como, por exemplo, recebendo as entradas atravs do
dispositivo de entrada padro (teclado). De maneira semelhante aos vetores,
teremos de utilizar estruturas de repetio, porm, como estamos tratando de
estruturas com duas dimenses, precisaremos percorrer as duas estruturas.
Veja a seguir como fica um trecho para receber a entrada para voc usar como
base para qualquer matriz bidimensional, do tipo numrica.
LINGUAGEM C++
for(int L = 0; L<tamanhoLinha; L++)
{
for(int C = 0; C<tamanhoColuna; C++)
{
cout<<\nLinha <<L+1 << coluna <<C+1<<:;
cin>>nomeMatriz[L] [C];
}
}
captulo 5 127
Para percorrer as duas dimenses da matriz bidimensional, utilizamos duas
estruturas de repetio. A estrutura externa percorre as linhas e a estrutura in-
terna percorre as colunas de cada linha. muito importante que voc analise e
entenda o funcionamento desta estrutura, pois ser muito utilizada sempre que
precisar percorrer estruturas multidimensionais.
Vejamos agora a estrutura para a leitura de matriz bidimensional de char.
LINGUAGEM C++
for(int L = 0; L<tamanhoLinha; L++)
{
cout<<\nLinha nmero <<L+1 <<: ;
cin.getLina(nomeMatriz[L], tamanhoDeclardoNaColuna);
}
128 captulo 5
LINGUAGEM C++
/* IMPRESSO COMO COLUNA */
ATIVIDADE
1. Construa um programa que armazene valores reais em um vetor de 10 posies. Imprima
na tela o vetor com o dobro dos valores.
2. Faa um programa que leia matrculas e duas notas de 5 alunos. Calcule e armazene a
mdia aritmtica. Exiba a mdia e a situao final: AP (aprovado) ou RP (reprovado). A
mdia 6,0.
3. Construa um programa que leia e armazene 5 produtos e seus valores de compra e ven-
da. Imprimir todos os dados em tela.
captulo 5 129
4. Construa um programa que leia e armazene nmeros em uma matriz de ordem 5. Exiba
todos os elementos da matriz e, em seguida, apresente apenas os elementos de sua
diagonal principal (onde o ndice da linha igual ao ndice da coluna).
REFLEXO
Neste captulo, vimos como manipular estruturas mais complexas, como vetores e matrizes. No
seu dia a dia de programador, as estruturas nem sempre sero simples e de fcil visualizao
e manipulao, por isso muito importante conhecer bem e ter facilidade com a manipulao
destas estruturas.
Pesquise e pratique at que tenha o total controle delas. Voc no ir se arrepender.
LEITURA
Reveja o contedo e mais alguns detalhes sob outras perspectivas no link abaixo: <http://
pt.wikibooks.org/wiki/Programar_em_C++/Vetores>.
Veja algumas operaes avanadas que utilizam vetores e matriz. Muitas dessas operaes
so estruturas de dados que sero estudadas mais adiante em nosso curso. Ento, no se
preocupe se tiver alguma dificuldade.
REFERNCIAS BIBLIOGRFICAS
ASCENCIO, A. F. G.; CAMPOS, E.e A. V. Fundamentos da programao de computadores:
Algoritmos, Pascal, C/C++ e Java. 2. ed. So Paulo: Pearson Education, 2008.
130 captulo 5
SPALLANZANI, Adriana Sayuri; MEDEIROS, Andra Teixeira de; FILHO, Juarez Muylaert.
Linguagem UAL. Disponvel em <http://geocities.ws/ual_language/ual.html>. Acesso em:
25 abr. 2014.
MANZANO, Jos Augusto N. G.; OLIVEIRA, Jayr Figueiredo. Algoritmos: lgica para
desenvolvimento de programao de computadores. 22. ed. So Paulo: rica, 2009.
captulo 5 131