Você está na página 1de 132

ALGORITMOS

autor do original
MAIRUM CEOLDO ANDRADE

1 edio
SESES
rio de janeiro 2015
Conselho editorial fernando fukuda, simone markenson, jeferson ferreira fagundes

Autor do original mairum ceoldo andrade

Projeto editorial roberto paes

Coordenao de produo rodrigo azevedo de oliveira

Projeto grfico paulo vitor bastos

Diagramao fabrico

Reviso lingustica aderbal torres bezerra

Imagem de capa shutterstock

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.

Dados Internacionais de Catalogao na Publicao (cip)

A553a Andrade, Mairum Ceoldo


Algoritmos / Mairum Ceoldo Andrade
Rio de Janeiro : SESES, 2014.
128 p. : il.

ISBN 978-85-60923-78-6

1. Lgica. 2. Programao. 3. Tipos de dados. 4. Estrutura de


dados homogneas I. SESES. II. Estcio.
CDD 005.1

Diretoria de Ensino Fbrica de Conhecimento


Rua do Bispo, 83, bloco F, Campus Joo Ucha
Rio Comprido Rio de Janeiro rj cep 20261-063
Sumrio

Prefcio 7

1. Fundamentos de lgica e algoritmos 10

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

Caractersticas da estrutura sequencial 33


Comandos de incio e fim 33
Variveis 36
Comando de entrada de dados LEIA 39
Comando de sada de dados IMPRIMA 44
Operadores aritmticos e lgicos 46

3. Estruturas de deciso 56

Caractersticas de estrutura de deciso 57


Comando condicional simples 59
Comando condicional composto 63
Comando condicional aninhado 67
Comando condicional mltiplo 74
4. Estruturas de repetio 84

Caractersticas da estrutura de repetio 84


Comando de repetio com varivel de controle - PARA 86
Comando de repetio com teste lgico no incio - ENQUANTO 92
Comando de repetio com teste lgico no fim - FAA...ENQUANTO 98
Quando utilizar cada estrutura de repetio 103

5. Estrutura de dados homogneas 108

Estruturas homogneas e heterogneas de programao 109


Tipo String 110
Matriz unidimensional (vetor) 111
Matriz bidimensional (matriz) 120
Prefcio
Prezados(as) alunos(as)
Na disciplina de Algoritmos vamos estudar os conceitos bsicos e apren-
der a estruturar o pensamento para o desenvolvimento e implementao de
softwares ou programas. Essa disciplina a base para o aprendizado de qual-
quer programador, pois introduz a lgica de programao, suas estruturas e
seus principais conceitos.
No deixe de tirar todas as dvidas. Aprenda e pratique com afinco tudo
o que envolve essa disciplina, pois o que aprender o acompanhar durante
toda sua vida como desenvolvedor de software.
Na unidade 1, vamos estudar os conceitos e fundamentos da lgica e dos al-
goritmos, bem como algumas formas estruturadas para resoluo de problemas.
Na unidade 2, vamos estudar a organizao e a estrutura bsica de um
algoritmo, aprender como escrever nossos primeiros programas e entender os
comandos indispensveis em qualquer programa interativo.
Na unidade 3, aprenderemos os comandos ou estruturas condicionais,
que nos permitiro criar desvios dentro de nossos programas, possibilitando a
implementao de uma infinidade de problemas.
Na unidade 4, vamos aprender as estruturas de repetio, as quais nos
auxiliaro a construir programas mais longos sem a necessidade de escrever
um volume exagerado de cdigo, por meio da repetio e do controle de deter-
minado bloco.
Na unidade 5, finalizaremos nossa programao com o estudo das ma-
trizes unidimensionais ou bidimensionais, as quais nos permitiro tratar um
volume de dados maior e de forma mais organizada.
Ao final da unidade, voc ser capaz de resolver praticamente qualquer
problema utilizando as linguagens algortmicas ou de programao estuda-
das. Porm, no esquea, sero necessrias dedicao e ateno para entender
esse novo mundo.
Bons estudos!

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

Alguns conceitos e nomes podem parecer muito complexos ou filosficos,


quando vistos por sua definio formal ou pelas palavras de um matemtico.
Porm, muitas vezes, estes complexos conceitos esto presentes em nosso dia
a dia, sem que ao menos percebamos.
Desde o Ensino Fundamental aprendemos, vrios algoritmos matemticos.
Um exemplo de que todos devem se lembrar o algoritmo utilizado para calcular o
MDC (mximo divisor comum), tambm conhecido como Algoritmo de Euclides.
O Algoritmo de Euclides composto de um conjunto de instrues que de-
vem ser executadas sucessivamente para encontrar de forma eficiente o mxi-
mo divisor comum entre dois nmeros diferentes de zero.
Caso no se lembre desse algoritmo, segue abaixo a descrio:

Sejam AB e CD os dois nmeros que no so primos entre si. necessrio, ento,


encontrar a mxima medida comum de AB e CD.
Se CD mede AB, ento uma medida comum j que CD se mede a si mesmo. ma-
nifesto que tambm a maior medida, pois nada maior que CD pode medir CD. Mas,
se CD no mede AB, ento algum nmero restar de AB e CD, o menor sendo conti-
nuamente resto do maior e que medir o nmero que o precede. Porque uma unidade
no ficar pois se assim no for, AB e CD sero primos entre si [Prop. VII.1], o que
contrrio ao que se sups.
Portanto, ficar algum nmero que medir o nmero que o precede. E seja CD a medir
BE deixando EA menor que si mesmo, e seja EA medindo DF deixando FC menor que
si mesmo, e seja FC medida de AE. Ento, como FC mede AE e AE mede DF, FC ser
ento medida de DF. E tambm se mede a si mesmo. Portanto, tambm medir todo o
segmento CD, e CD mede BE. Ento, CF mede BE e tambm mede EA. Assim mede
todo o segmento BA e tambm mede CD. Isto , CF mede tanto AB como CD, pelo que
uma medida comum de AB e CD.
Afirmo que tambm a maior medida comum possvel, porque, se no o fosse, ento
um nmero maior que CF mede os nmeros AB e CD. Seja este G. Dado que G mede
CD e CD mede BE, G tambm mede BE. Alm disso, mede todo o segmento BA pelo
que mede tambm o resduo AE. E AE mede DF pelo que G tambm mede DF. Mede
ainda todo o segmento DC pelo que mede tambm o resduo CF, ou seja, o maior mede
o menor, o que impossvel.

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>

Achou um pouco difcil de entender, veja abaixo a descrio em uma lingua-


gem um pouco mais moderna:
1. Dados dois nmero A e B, divida A por B e obtenha o resto R1.
2. Se o resto R1 for zero, ento o MDC de A e B B.
3. Se R1 for diferente de zero, divida B por R1 e obtenha o resto R2.
4. Se o resto R2 for zero, ento o MDC de A e B R1.
5. Se R2 for diferente de zero, ento divida R1 por R2 e obtenha o resto R3.
6. Se o resto R3 for zero, ento o MDC de A e B R2.
7. Se R3 for diferente de zero, repita os dois passos anteriores que o novo
resto obtido seja igual a zero.

Veja abaixo a aplicao do Algoritmo Euclidiano1 para obter o MDC entre 15 e 3.

DIVIDENDO DIVISOR QUOCIENTE RESTO

PASSO 1 32 6 5 2

PASSO 2 6 2 3 0

No passo 1, dividimos 32 por 6 e obtivemos resto igual a 2; como diferente


de zero passamos para o passo 2. Dividimos 6 pelo resto 2 e obtemos resto 0.
Como o resto zero, o MDC entre 32 e 6 2.
Podemos ento descrever o algoritmo como uma sequncia finita de instru-
es, definidas de maneira clara e sem ambiguidade, de forma que possa ser
executada diretamente pelo seu leitor.

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.

Outro exemplo clssico de algoritmo com os quais voc provavelmente j


teve contato so as receitas culinrias, as quais so um conjunto de passos ou
instrues necessrias para se cozinhar o desejado.

1.2 Soluo de problemas

Constantemente em nosso dia a dia, encaramos diversos problemas, desde


os mais simples at os mais complexos. Provavelmente a maioria das pessoas
gasta boa parte de suas vidas solucionando problemas. Porm, algumas vezes,
despendemos grande quantidade de tempo e esforo na busca destas solues,
sem a certeza de obt-las de forma eficiente.
Quando temos um problema buscamos identificar a origem e a maneira de
solucion-lo da forma mais rpida possvel. Muitas vezes encontramos proble-
mas mais complexos ou problemas que provavelmente iremos encarar nova-
mente, o que nos remete a uma soluo mais estruturada e detalhada, at para
que possamos compartilhar com outras pessoas nossa resoluo. Para obter-
mos clareza na soluo, uma ferramenta muito til so os algoritmos.
Nesses casos, quase sempre criamos um algoritmo de forma inconsciente, ou
seja, idealizamos um conjunto de passos estruturados, que executaremos de forma
sequencial para soluo de um problema, como, a criao de uma lista de tarefas.
Cada indivduo possui sua forma de estruturar a elucidao do problema, e
quando necessrio de documentar esta, seja por meio de um texto corrido, uma
lista de tarefas, de uma receita, de fluxogramas etc. Com o objetivo de padroni-
zar a forma como criamos as nossas solues de problemas, vamos ver nessa
disciplina formas e mtodos padronizados internacionalmente para tal. Dessa
forma, facilitamos o entendimento para a reproduo de nossas solues.
O matemtico George Polya, em seu livro How to Solve it de 1945 (POLYA
1945), prope um mtodo estruturado para a resoluo de problemas baseado
em quatro etapas:

captulo 1 13
1. Entender
2. Planejar
3. Executar
4. Verificar

Basicamente, na etapa Entender, como o prprio nome j sugere, deve-


mos obter uma melhor compreenso do problema, identificando quais so as
questes e variveis existentes e verificando se existem informaes suficien-
tes para entend-lo, e buscar uma soluo.
A etapa seguinte, Planejar, consiste em estudar a melhor forma de resol-
ver problema. basicamente identificar o melhor mtodo a ser aplicado; ge-
ralmente o mtodo da diviso em problemas menores auxilia nesse processo.
Algumas tcnicas comuns a ser utilizadas nessa etapa so: adivinhao, lista
ordenada, eliminao de possibilidades, simetria e semelhana com outros ca-
sos, causa e efeito, anlise sistmica, estruturao de uma equao, desenhos,
busca por padres etc.
A terceira etapa consiste em executar o plano realizado na etapa anterior e
efetivamente solucionar o problema.
Na quarta e ltima etapa, devemos verificar a soluo encontrada. Para isso,
necessrio validar todas as entradas possveis apresentadas no problema e
identificar possveis pontos de falhas.

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

1.3 Etapas para construo de um algoritmo

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.

Entender Planejar Executar Verificar

Interpretao Escolha da Construo Execuo


do enunciado linguagem e do algoritmo em um
do problema e estruturao interpretador
das questes da soluo ou compilador
envolvidas.

Figura 1 Relao das etapas de soluo de problemas de Polya com as etapas de cons-
truo de um algoritmo

Uma primeira diferena significante a identificao e escolha da melhor lin-


guagem para a construo do algoritmo, ou seja, qual a melhor forma de expressar-
mos a soluo de nosso problema. Geralmente utilizamos a linguagem natural, ou
seja, a nossa linguagem para descrever o problema. Esse tipo de linguagem permi-
te a descrio e estruturao de quaisquer algoritmos, porm ela pode ser muito
extensa de forma a dificultar a padronizao e remoo de ambiguidades confor-
me desejamos, por isso geralmente optamos por linguagens mais estruturadas e
formais. Algumas podem ser muito prximas de nossa linguagem natural, outras
visuais, outras prximas das linguagens de mquina, como as linguagens de pro-
gramao. Durante este curso, trabalharemos com linguagens dos trs modelos
citados, e principalmente veremos as diferenas e semelhanas entre elas.
importante ter em mente que em uma primeira anlise a linguagem que
conhecemos sempre a melhor, porm precisamos saber que h linguagens
mais eficientes para a descrio de determinados tipos de problemas, para
determinadas ocasies. Esse o motivo de existirem diversas linguagens de
programaes, que basicamente funcionam como diferentes lnguas, como
portugus, espanhol, ingls, alemo, as quais se utilizam de termos e regras
diferenciados para descrever um mesmo objeto ou uma mesma situao. Ten-
do isso em mente fica claro que, se aprendermos os conceitos da lgica e da
soluo de problemas (algoritmos), ficar muito mais fcil navegarmos pelas
diferentes linguagens e aprend-las, conforme nossas necessidades.
Outro ponto diferente a verificao; para os algoritmos e linguagens, geral-
mente existem programas ou ambientes de desenvolvimento. Utilizando estes am-

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.

1.4 Representao de algoritmos

Como explicado anteriormente, um algoritmo pode ser escrito utilizando dife-


rentes linguagens. Vamos conhecer melhor trs tipos diferentes, a Linguagem
Natural, a Linguagem Grfica e as Pseudolinguagens.
No decorrer do curso, usaremos sempre os diferentes tipos de linguagens
para compreender a melhor forma de estruturar e apresentar o algoritmo.

1.4.1 Linguagem natural

Como j dito, a linguagem natural a linguagem do cotidiano. A escolha das


palavras e termos utilizados dependem diretamente da pessoa que est escre-
vendo e da compreenso de quem l. Sabemos que na linguagem natural uma
mesma palavra pode ter diversos significados como, por exemplo:
Pilha: pilha pode ser um monte de objetos, ou pilha de objetos, ou pode ser uma
pilha eltrica, que fornece energia para algum equipamento, tambm conhecida
como bateria. Mas bateria tambm pode ser o instrumento musical de percusso.
A essa caracterstica das linguagens naturais damos o nome de ambiguida-
de lxica. Porm, como vimos anteriormente, queremos que um algoritmo no
seja ambguo; logo, precisamos definir algumas regras para utilizao.
1. Utilize frases curtas.
2. Use somente um verbo em cada frase, sempre no infinitivo ou no impe-
rativo.

16 captulo 1
3. Evite palavras ambguas.
4. Detalhe todas as etapas.

Por exemplo, como podemos descrever o algoritmo para fazermos um bolo


utilizando a linguagem natural? Basicamente, por meio de uma receita de bolo
que encontramos em qualquer livro de receitas, conforme segue abaixo:

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.

1.4.2 Linguagem grfica

As linguagens grficas so baseadas em imagens e esquemas, de forma a tentar


facilitar a visualizao e o entendimento das etapas e processos. Quando utili-
zamos uma linguagem grfica de forma livre, esta tambm no est isenta de

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.

Figura 2 Exemplo de utilizao de linguagem grfica

Para evitar tais problemas, utilizaremos uma padronizao de linguagem


grfica conhecida como Fluxograma.
O fluxograma um diagrama padronizado utilizado para representaes es-
quemticas. Ele possui diversos elementos grficos e baseado na norma ISO
5807, que os padroniza, facilitando seu aprendizado e compreenso. Esse flu-
xograma composto basicamente de figuras geomtricas que representam as
possveis diferentes etapas de um processo, conectadas por setas que indicam
a sequncia das etapas e suas transies.
Veja na Figura 3 um exemplo de um fluxograma para um domingo com
a famlia.

18 captulo 1
Incio

Sim
Acordar H tarefas?

Escovar os dentes Fazer tarefas


No

Preparar e tomar caf


Tomar banho

Dia de sol? Fazer refeio


Verificar Preparar roupas
programao do e lanches para o Assistir TV

Ir ao shopping Ir ao clube Dormir

Fazer refeio Ir piscina Fim

Ir ao cinema Fazer reifeio

Praticar

Voltar pra casa

Figura 3 Exemplo de fluxograma para domingo em famlia

Analisando o fluxograma acima, podemos comear a entender esse processo.


No se preocupem com os detalhes, pois os aprenderemos durante a disciplina.
O fluxograma apresenta as tarefas sequencialmente, com uma indicao de in-
cio, e as setas indicando o fluxo das aes. Sempre que h uma possibilidade,
utilizamos uma forma geomtrica diferente para identificar essa possiblidade,
e apresentamos as atividades das duas possibilidades conforme resposta per-
gunta. Aps percorrer todo o processo, encontraremos a indicao fim.
Para auxiliar na compreenso, vamos descrever o fluxograma acima utili-
zando linguagem natural.
Para um domingo com a famlia, siga os passos: acorde de manh, escove
os dentes, prepare e tome seu caf, verifique se o dia est ensolarado. Em caso
afirmativo, prepare as roupas e lanches para o clube, pegue a famlia e v para
o clube; l, v piscina, depois faa uma refeio, depois pratique esportes e na

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

Pseudolinguagem uma forma de abstrair os problemas existentes na lingua-


gem natural, de forma a criar um padro para descrio e estruturao de algo-
ritmos. Podemos entend-la como uma forma intermediria entre a linguagem
natural e as linguagens de programao. Ela foi criada com o objetivo de facili-
tar o aprendizado da lgica de algoritmos ou lgica de programao, devendo
o aprendiz focar na resoluo do problema ou lgica do problema, e no na es-
trutura e formalismo de como represent-lo de forma clara e sem ambiguidade.
Originalmente, as pseudolinguagens foram concebidas apenas para estu-
do e aprendizado, sem a utilizao de sistemas computacionais, ou seja, no
era possvel execut-las em um computador para testar. Porm, com o avano
e a facilidade de acesso s tecnologias, foram criadas ferramentas para testar e
validar automaticamente os algoritmos feitos utilizando as pseudolinguagens.
Com isso, essas pesudolinguagens passam a ter caractersticas de linguagens,
necessitando de regras sintticas e semnticas bem definidas e estruturadas.
Em uma linguagem, a semntica o significado das palavras e a sintaxe a
forma e a relao entre as palavras na formao de frase, para que faam senti-
do. Por exemplo, vamos analisar a frase A ma caiu da rvore. Saber o signi-
ficado das palavras, por exemplo, saber que ma aquele fruto arredondado
de cor avermelhada ou verde, geralmente rajada de amarelo, com sabor doce
e levemente cido, proveniente de uma rvore de pequeno porte, com galhos
pendentes, chamada de macieira, conhecer a semntica das palavras. Para
que a frase faa sentido, precisamos estrutur-la com um substantivo, depois
um verbo seguido de um advrbio, para que a sintaxe necessria seja escrita
Quando extrapolamos isso para as pseudolinguagens ou linguagens de
programao, temos que a semntica so os comandos ou palavras reserva-
das que ns podemos utilizar, e a sintaxe a forma exata como devemos dis-
por cada palavra e smbolo para que a interpretao faa sentido.

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

O ILA, ou Interpretador de Linguagem Algortmica, um interpretador,


muito semelhante ao PORTUGOL, desenvolvido por um grupo brasileiro da
Universidade do Vale do Rio dos Sinos ou UNISINOS. Basicamente trata-se de
um interpretador, pequeno e verstil, utilizado para testar algoritmos utilizan-
do-se o portugus estruturado como linguagem.

CONEXO
Para saber mais sobre o ILA e baixar o interpretador, acesse: <http://professor.unisinos.br/
wp/crespo/ila/>.

O UAL, ou Unesa Algorithmic Language, um interpretador animado que,


atravs da execuo e visualizao das etapas de um algoritmo, auxilia no apren-
dizado do aluno iniciante (SPALLANZANI; MEDEIROS & FILHO). Basicamente
um interpretador como os anteriores, que utiliza uma linguagem adaptada das
linguagens Pascal e C, porm com termos e vocbulos em portugus. Foi desen-
volvido como Projeto Final do curso de Informtica da Universidade Estcio de
S. O ambiente de desenvolvimento para Windows apresentado na Figura 5.

22 captulo 1
Figura 5 Interpretador UAL

No decorrer da disciplina, aprenderemos a semntica e sintaxe da lingua-


gem UAL aplicada criao dos algoritmos. Veremos que ela bem simples e
didtica, permitindo o aprendizado de uma forma estruturada e a compreen-
so simples e visual da ferramenta.

CONEXO
Para conhecer mais e baixar o interpretador, acesse: <http://geocities.ws/ual_language/ual.html>.

1.5 Construo de um algoritmo

Vimos anteriormente as etapas de resoluo de problema de Polya e como elas po-


dem ser aplicadas na construo de um algoritmo. Com base nas quatro etapas de
Polya, vamos nos aprofundar na estruturao e construo de um algoritmo.
Considere o seguinte o problema.

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

No segundo momento, necessrio identificar as operaes e aes a serem


executadas sobre os dados para obter o resultado final esperado. Dentre estas
operaes, podemos listar:
Entradas e sadas de dados;
Variveis e constantes necessrias;
Clculos;
Decises atravs de comparaes;
Ciclos ou repeties.

Aps identificar as aes necessrias, importante identificar as semelhan-


as com outros problemas ou programa j realizados, dessa forma possvel
aproveitar o trabalho j realizado e evitar erros. Para o exemplo apresentado,
podemos identificar o seguinte:
a) So necessrias duas operaes de entrada de dados, uma para ler o valor
da conta e uma para ler o valor dos juros;
b) necessrio realizar um processamento para calcular juros e acrescer
este valor na conta;
c) necessria uma operao de sada para apresentar o novo valor da conta.

No terceiro momento, necessrio escolher a linguagem a ser utilizada e


estruturar a sequncia de execuo das aes conforme a necessidade da lin-
guagem. Para o exemplo apresentado, podemos escolher a linguagem natural e
descrever o problema da seguinte forma:

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

No quarto momento, necessrio analisar a soluo realizada e refletir so-


bre alguns aspectos, como:
A soluo foi satisfatria?
Existe uma forma mais simples para se resolver o problema?
A soluo, ou parte dela, poder ser utilizada para resolver outros pro-
blemas?

Geralmente, essa etapa realizada de forma superficial ou simplesmente


no realizada. Os programadores costumam dar pouca importncia quando
percebem que o objetivo foi alcanado e simplesmente passam para o prximo,
mesmo que algum perceba que existe uma melhor forma para resolver o pro-
blema. Nesse sentido, muito comum ouvirmos frases como: Est funcionan-
do, Se est funcionando, no mexa. Veremos no decorrer do curso que esta
etapa est ligada a algumas etapas de engenharia de software e qualidade de
software, que so primordiais para garantir sistemas e programas de qualidade
e com correto funcionamento evitando falhas e bugs indesejados.
importante estar claro que o simples fato de funcionar no o suficien-
te para garantir que temos um programa correto e eficiente, pois alguns pro-
gramas podem funcionar para determinadas situaes e para outras no. Alm
disso, necessrio analisar a velocidade e o consumo de recursos, como que
memria e processador o programa est utilizando, antes de garantir que te-
mos um problema solucionado, um programa eficiente funcionando.
Analisando o problema proposto, podemos identificar o seguinte:
a) A soluo apresentada foi satisfatria;
b) Como o problema simples, no h soluo melhor, porm poderamos
realizar solues mais genricas para atender a contas que possuam for-
mas mais complexas de clculo dos juros;
c) O processamento realizado neste algoritmo muito usual e pode ser uti-
lizando para muitos outros algoritmos.

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.

1.6 Lgica, lgica de programao e programa

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. [...]

Acesse: <http://dx.doi.org/10.1590/S0103-40141996000100022 >


Trecho retirado do artigo de Tomasz Kowaltowski, Estud. av. vol.10 no.26 So Paulo Jan./Apr.
1996, disponvel no endereo: < http://dx.doi.org/10.1590/S0103-40141996000100022 >

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>

Conhea uma variao do portugol o WEBportugol:


<http://siaiacad17.univali.br/webportugol/>
<http://www.univali.br/webportugol>

Conhea um pouco mais sobre o UAL:


<http://geocities.ws/ual_language/ual.html>
<http://anitalopes.com>

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.

CRESPO, Srgio. Linguagem ILA. Disponvel em: <http://professor.unisinos.br/wp/crespo/


ila/> . Acesso em: 26 abr. 2014.

FORBELLONE, A.L. V; EBERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Makron


Books, 2005.

MANSANO, Antonio; MARQUES, Clio; DIAS, Pedro. Portugol.Disponvel em: <http://www.


dei.estt.ipt.pt/portugol/>. Acesso em: 25 abr. 2014.

PUGA, S.; RISSETTI, G. Lgica de programao e estrutura de dados: com aplicaes em


Java. 1. ed. So Paulo: Pearson Education, 2003.

POLYA, G. How to Solve It. Princeton University Press. 1945.

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.

2.1 Caractersticas da estrutura sequencial

Antes de falar da estrutura sequencial vamos, relembrar o conceito bsico de


um programa de computador, para que possamos entender como ele criado.
Temos trs momentos fundamentais em um programa, representados na Figu-
ra 6 abaixo.

Entrada processamento sada

Figura 6 Estrutura bsica de um programa

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.

2.2 Comandos de incio e fim

A primeira etapa para se estruturar um algoritmo ou programa delimit


-lo, ou seja, definir claramente o ponto de incio do algoritmo ou programa e o

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.

LINGUAGEM UAL EXEMPLO

prog <nomeDoPrograma>
...
fimprog

Nas definies e apresentaes de estruturas, sempre que utilizamos um


contedo entre os sinais de maior e menor (< >) como em <nomeDoProgra-
ma> estamos indicando que algo que deve ser definido por voc, progra-
mador, de acordo com seu programa ou aplicao. Nesse caso, como pode
ser visto no exemplo, no momento de programao deve ser substitudo pelo
nome do seu programa, que no caso do exemplo primeiro.
No C++, o incio do programa indicado pelas palavras reservadas int main()
{ e o final pela palavra reservada }. Em C++, as chaves ( { } ) so utilizadas para
delimitar um conjunto de cdigos ou os cdigos inseridos dentro de um coman-
do. As palavras reservadas int main () indicam o incio da funo ou conjunto de
cdigos principais, que sero executados no incio do programa. Essa estrutura
indica a criao de uma funo, porm isso no o foco de nossa disciplina e essa
estruturao ser estudada em uma prxima disciplina de programao. Portan-

34 captulo 2
to no se preocupe em entend-la agora. Veja a seguir a estrutura e um exemplo.

LINGUAGEM C++ EXEMPLO

#include <iostream>
using namespace std;
int main()
{
...
}

Perceba que h, tanto na definio quanto no exemplo, as duas linhas ini-


ciais no tratam do incio do programa, mas, sim, de definies da linguagem,
que o pacote de funes predefinidas da linguagem chamado iostream ser
utilizado e que o namespace padro std ser utilizado. No necessrio en-
tender agora o que o pacote de funes de funes predefinidas ou o namespa-
ce, mas ambos so necessrios para o funcionamento do programa.
No fluxograma, necessrio utilizar os smbolos de incio e fim que so re-
presentados por retngulos com os cantos arredondados com os termos incio
e fim, em cada um, indicando visualmente os pontos do desenho esquemtico,
conforme ilustrado a seguir.

FLUXOGRAMA EXEMPLO

Incio
Incio

.. 123
.

Fim Fim

captulo 2 35
2.3 Variveis

O principal objetivo dos algoritmos computacionais a manipulao de dados


para gerar informaes, as quais podem ser especificadas pelo usurio ou ge-
radas ao longo da execuo do algoritmo. Para a manipulao de informaes
nos algoritmos, necessria a utilizao de um recurso denominado variveis.
Em um programa, quando queremos manipular ou processar um dado por
meio de um conjunto de transformaes ou associaes sobre ele, precisamos
que este dado seja armazenado temporariamente na memria. Uma varivel
nada mais que um espao na memria do computador onde podemos guar-
dar um dado temporariamente e alter-lo de acordo com nossa necessidade.
Para o computador, o ideal que trabalhemos indicando o endereo de mem-
ria onde os dados esto, mas, para facilitar nossa vida, as linguagens de progra-
mao abstraem esta complexidade por meio da criao da varivel.
De acordo com o tipo de informao que queremos armazenar ou manipu-
lar, necessrio especificar o tipo que ser a varivel. Esse conceito conheci-
do como tipo de dados. Um tipo de dados determina quais tipos de operaes,
quais tipos de valores podem ser manipulados pelas variveis e para o computa-
dor, este tipo de dados informa como ele deve guardar isso na memria.

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.

2.3.1 Tipos de dados

Durante nossa vida, principalmente na vida escolar, aprendemos a lidar com


diferentes tipos de dados de informaes e aprendemos as diferentes formas
de trat-los e as suas operaes associadas. Por exemplo, em matemtica,
aprendemos a lidar com nmeros e que existem diferentes tipos ou conjuntos
de nmeros, como os naturais (N), os inteiros (Z), os reais (R) e os complexos
(C); em portugus, aprendemos a lidar com dados literais, que so as letras e
palavras. Associados a esses tipos de dados, aprendemos as operaes soma,

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.

TABELA TIPO DE DADOS

TIPO DESCRIO UAL C++

Inteiro Nmeros inteiros int int

Nmeros fracionrios ou de
Real real float
ponto flutuante

Composto por um ou mais ca-


char (apenas um
Caractere ractere ou tambm conhecido string
caractere)
como alfanumrico

Tipo lgico que pode assumir


Lgico logico bool
os valores Verdadeiro ou Falso

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>

Seguem abaixo alguns exemplos de declarao de variveis:

TIPO UAL C++


Inteiro

Real

Caractere

Logico

Aps declarar uma varivel, podemos utiliz-la da forma que desejarmos.


Geralmente, a primeira ao relacionada a uma varivel a atribuio de valo-
res, a qual feita atravs de um comando de atribuio que diz ao computador
para copiar um valor para o espao de memria daquela varivel. A seguir, veja
o comando de atribuio das linguagens.

38 captulo 2
LINGUAGEM UAL LINGUAGEM C++
<varivel> <- <valor> <varivel> = <valor>

No UAL, a atribuio feita pelo smbolo menor seguido de menos <- e em


C++ pelo smbolo =. Para atribuir importante saber o tipo da varivel, pois s
possvel atribuir valores de tipos compatveis com o tipo da varivel, ou seja,
para uma varivel do tipo inteiro, possvel apenas atribuir valores inteiros; se
tentarmos atribuir valores fracionados ou literais teremos um erro de progra-
mao. Seguem alguns exemplos de atribuio de valores.

LINGUAGEM UAL LINGUAGEM C++

varInteiro <- 213; varInteiro = 213;


varReal <- 2.5; varReal = 2.5;
varCaractere <- Ola; varCaractere = E;
varLogico <- falso; varLogico = false;

Observe que os tipos numricos so informados diretamente, e os literais so


informados entre aspas. A diviso de parte inteira e fracionada dos reais feita com
ponto. Os tipos lgicos so verdadeiro e falso para o UAL e true e false para o C++.

2.4 Comando de entrada de dados LEIA

Retomando a estrutura bsica de um programa, a primeira etapa a entrada de


dados. A entrada de dados mais utilizada e que trataremos nesta disciplina como
fonte de dados o teclado. Em um segundo momento, os resultados so apresen-
tados em dispositivos de sada como monitor ou impressora. Durante o processo
de construo de algoritmos, o programador pode contar com instrues espec-
ficas para carregar informaes fornecidas pelo usurio e para apresentar resul-
tados na tela essas instrues so chamadas de comandos de entrada e sada.
Para a leitura de informaes, o comando utilizado para entrada de dados
conhecido como leia. Assim, com este comando, possvel transferir uma in-

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

LINGUAGEM UAL LINGUAGEM C++

SINTAXE leia <nomeDaVariavel>; cin >> <nomeDaVariavel>;

Palavra reservada leia se-


Palavra reservada cin segui-
guida do nome da varivel.
da do smbolo obrigatrio >>
DESCRIO possvel ler apenas uma
seguido do nome da varivel,
varivel de cada vez, segui-
seguido de ponto e vrgula.
do de ponto e vrgula.

leia v1; cin >> v1;


EXEMPLOS leia v2; cin >> v2;
leia v3; cin >> v3;

importante nos atentarmos necessidade de declarar a varivel antes de


sua leitura, ou seja, para que seja utilizada uma varivel com o comando de lei-
tura, obrigatrio que a varivel utilizada tenha sido declarada anteriormente.

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.

variavel v1, v2, v3

Antes de continuarmos e estudarmos os comandos de sada de dados, vamos


reforar alguns conceitos. No incio desta aula, vimos as trs etapas principais
de um software: Entrada, Processamento e Sada. Com o que aprendemos, j
possvel estruturarmos um pouco melhor os conceitos associados a essas etapas.
Voc se lembra do algoritmo de clculo de juros que construmos ao final
da Unidade 1? Caso no se lembre, volte e releia. Vamos agora identificar os
componentes que j aprendemos para resolver aquele problema.

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.

LINGAUGEM UAL LINGAUGEM C++

Fluxograma
Incio

conta, juros

valorJuros <- conta* juros

novoValor <- conta +


valorJuros

novoValor

Fim

Veja na Figura 7 a execuo do algoritmo utilizando o Editor UAL.

Figura 7 Resultado da execuo do algoritmo de clculo de juros

Provavelmente, se voc tentar reproduzir este cdigo no Editor UAL, pode


ter algumas dificuldades para obter a sada mostrada anteriormente.

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.

Figura 8 Programa aguardando entrada.

2. Se voc digitar o nmero 100, receber uma imagem de erro, conforme


a Figura 9 a seguir isso porque a varivel do tipo real, e 100 um n-
mero inteiro.

Figura 9 Programa erro na leitura de varivel

3. Para que o programa interprete como um valor do tipo real, necessrio


informar o valor explicitando que a varivel real, mesmo que a par-
te fracionria seja zero; dessa forma, deve-se entrar com o valor 100.0,
conforme Figura 10 a seguir.

Figura 10 Forma correta de entrar com uma varivel do tipo real.

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.

2.5 Comando de sada de dados IMPRIMA

Ao executar o programa anterior, percebemos que no muito fcil utiliz-


lo, pois no temos informaes do que devemos fazer. Se exibirmos uma
mensagem antes da leitura dos dados, fica bem mais fcil sua utilizao. Para
exibir contedo, como feito ao final do programa, utilizamos o comando
imprima.

O comando escreva pega o contedo da memria interna e joga no dispositivo


de sada padro, que no nosso caso o monitor, logo ele ir imprimir ou mostrar
o contedo na tela do usurio. Vejamos a seguir a estrutura do comando imprima.

COMANDO ESCREVA

LINGUAGEM UAL LINGUAGEM C++

SINTAXE imprima <contedo>; cout << <contedo>;

Palavra reservada imprima Palavra reservada cout segui-


seguida de uma varivel, de da do smbolo <<, seguido de
um conjunto de caracteres uma varivel, de um conjunto
DESCRIO ou de variveis ou conjuntos de caracteres ou de variveis
de caracteres separados ou conjuntos de caracteres
por virgula., seguido de pon- separados pelo smbolo <<,
to e vrgula. seguido de ponto e vrgula.

imprima v1; cout << v1;


EXEMPLOS imprima Varivel: , v1; cout << Varivel: << v1;
imprima v1, - , v2; cout << v1 << - << v2;

Perceba que, diferentemente do comando leia, o comando escreva permite


que se utilize mais de uma varivel no mesmo comando, obrigando apenas o
uso de um separador. Ele permite ainda utilizar em um mesmo comando vari-

44 captulo 2
veis e constantes, conjuntos de caracteres.
Fluxograma:

O smbolo anterior representa o comando que joga o contedo indicado na


tela do usurio, considerando sempre a tela do usurio como o dispositivo de
sada padro.
Dentro do smbolo, vir o nome da varivel, contedo ou expresso, que
ser mostrada. Se voc tiver mais de um dado para ser mostrado, poder usar a
vrgula para separar os nomes das variveis, ou contedos.

v1, v2 Varivel, v1

J que conhecemos melhor o comando de escrita, que tal melhorarmos um


pouco o programa UAL para clculo dos juros? Vamos exibir algumas mensa-
gens que facilitam o uso do programa. Veja a Figura 11 a seguir com o novo
cdigo e o resultado.

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.

2.6 Operadores aritmticos e lgicos

Os computadores podem ser encarados como grandes mquinas capazes de


realizar uma quantidade imensa de operaes por segundo. Na evoluo his-
trica da computao, os primeiros algoritmos foram criados com o intuito
de solucionar complexas expresses em poucos segundos. As expresses so
formadas essencialmente por operadores, operandos e parnteses. De acordo
com o tipo de operador utilizado, podemos criar expresses denominadas arit-
mticas, relacionais ou lgicas, conforme estudaremos a seguir.

2.6.1 Expresses aritmticas

As expresses aritmticas utilizam os operadores aritmticos da matemtica


tradicional para criar expresses capazes de resolver os mais variados tipos de

46 captulo 2
funes. Nesse grupo, os principais operadores utilizados so:

OPERADOR LINGUAGEM UAL LINGUAGEM C++


Soma + +

Subtrao - -

Multiplicao / /

Diviso * *

Resto da diviso % %

A Figura 12 apresenta a codificao de um algoritmo que utiliza expresses


aritmticas para resolver um polinmio.

LINGUAGEM UAL LINGUAGEM C++

Figura 12 Algoritmo computacional que utiliza expresses aritmticas.

A Figura 13 apresenta o resultado da execuo do algoritmo.

Figura 13 Resultado da execuo do algoritmo

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.

2.6.2 Expresses relacionais

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.

Quando construmos algoritmos, muito comum a necessidade de compa-


rar ou estabelecer relaes entre determinados operandos. Para isso, podemos
utilizar um conjunto especfico de operadores capazes de produzir expresses
relacionais. Os operadores relacionais conhecidos so:

OPERADOR LINGUAGEM UAL LINGUAGEM C++


maior > >

menor < <

menor ou igual <= <=

maior ou igual >= >=

igual == ==

diferente <> !=

A Figura 14 demonstra a construo de um algoritmo computacional que


utiliza expresses relacionais. Note, no algoritmo, que todos os operadores re-
lacionais so expresses por meio de smbolos.

48 captulo 2
LINGUAGEM C++

Figura 14 Algoritmo computacional que demonstra a utilizao de expresses e operado-


res relacionais.

Nesse caso, apresentamos o exemplo apenas na linguagem C++, pois o pro-


grama que interpreta a linguagem UAL no possui suporte a impresso do tipo
lgico, que o resultado das expresses relacionais. A Figura 15 apresenta o
resultado da execuo do algoritmo. Perceba que o valor lgico no C++ tratado
como um nmero 0 para falso e 1 para verdadeiro.

Figura 15 Resultado da execuo do algoritmo

Em um programa, cada varivel possui um tipo preestabelecido, de acordo


com o tipo de dados visto anteriormente. Quando usamos os operadores relacio-
nais, temos que ter o cuidado de relacionar variveis que sejam do mesmo tipo.

captulo 2 49
2.6.3 Expresses lgicas

Na construo de algoritmos computacionais tambm possvel criar expres-


ses a partir de operadores lgicos, as quais so conhecidas como expresses
lgicas. Para a criao de uma expresso lgica, necessrio utilizar operado-
res booleanos, em que os principais so:

OPERADOR LINGUAGEM UAL LINGUAGEM C++


negao (NOT) ! !

conjuno (E) && &&

disjuno (OU) || ||

disjuno-exclusiva (XOR) <no existe> ^

Na Figura 16, apresentada a codificao de um algoritmo capaz de calcular a


tabela verdade a partir de expresses lgicas. Nesse exemplo, possvel determinar
um dos principais conceitos da lgica matemtica conhecido como tabela verdade.

LINGUAGEM C++

Figura 16 Algoritmo computacional que demonstra a utilizao de expresses e operado-


res lgicos.

50 captulo 2
A Figura 17 apresenta o resultado da execuo do algoritmo.

Figura 17 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>

Com isso, conclumos o estudo a respeito dos operadores e das expresses


aritmticas, relacionais e lgicas. Aproveite esse momento para construir algo-
ritmos a partir das atividades propostas.
Para demonstrar a utilizao dos comandos e a estrutura estudadas
anteriormente, vamos construir uma calculadora simples de quatro ope-
raes. Esse programa de utilizar da estrutura de um programa, obtendo
as entradas necessrias, realizao do processamento dos dados e sada.
O incio e o fim do programa devem estar corretamente definidos. O processa-
mento deve ser executado utilizando as operaes aritmticas.
Nessa calculadora, o usurio fornecer dois valores numricos para serem
realizados os clculos de soma, subtrao, multiplicao e diviso. Para a leitu-
ra dos valores, ser utilizado o comando leia e para a apresentao dos resulta-
dos ser necessrio o comando escreva. Vamos identificar os componentes que

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

LINGUAGEM UAL LINGUAGEM C++

Figura 18 Algoritmo que codifica um clculo simples com quatro operaes.

52 captulo 2
O resultado da execuo do algoritmo apresentado na Figura 19. Nessa
execuo, os valores fornecidos como entrada foram 10 e 20.

Figura 19 Resultado da execuo do algoritmo

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.

2. Escreva um algoritmo computacional capaz de calcular a rea de um retngulo. Para


isso, utilize a seguinte frmula: rea = (base*altura).

3. Elabore um algoritmo que seja capaz de realizar as seguintes converses:


a) litro para mililitro.
b) quilmetros para metros.
c) toneladas para gramas.

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.

FORBELLONE, A.L. V; EBERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Makron


Books, 2005.

PUGA, S.; RISSETTI, G. Lgica de programao e estrutura de dados: com aplicaes em


Java. 1. ed. So Paulo: Pearson Education, 2003.

POLYA, G. How to Solve It. Princeton University Press. 1945.

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

A codificao de um algoritmo computacional baseada em uma estrutura sin-


ttica e sua execuo sempre realizada de maneira linear, ou seja, o processo
de execuo comea na primeira linha do algoritmo e segue linha aps linha,
at a instruo de fim do algoritmo.
Durante a construo de solues algortmicas, comum o programador
avaliar o contedo das variveis para tomar decises. Uma das decises mais
empregadas o desvio condicional do fluxo de execuo do algoritmo. Assim,
de acordo com o valor de uma varivel, o algoritmo computacional poder exe-
cutar instrues diferentes. Em outras palavras, um determinado trecho do al-
goritmo ser executado apenas quando o valor deuma varivel satisfizer uma
determinada condio. Para a elaborao destes tipos de desvios lgicos na
execuo dos algoritmos, so utilizadas as estruturas condicionais (ASCENCIO
e EDILENE, 2002).
Existem quatro maneiras distintas de codificar estruturas condicionais em
linguagem algortmica que so conhecidas como:

Condicional simples
Condicional composta
Condicional aninhada
Condicional mltipla

O aprendizado do comando condicional ou de deciso nos possibilita vis-


lumbrar o grau de complexidade das tarefas que os algoritmos podero execu-
tar a partir de agora. No se assuste com o tamanho dos programas nessa uni-
dade. assim mesmo, eles vo crescendo e ganhando complexidade conforme
aprendemos novos comandos e funes.
Condicional simples: a forma mais simples de deciso; os comandos do
bloco condicional sero executados somente se a condio de teste do coman-
do condicional for verdadeira.
Condicional composta: nessa forma, existem dois blocos de comando, um
que ser executado caso a condio de teste do comando condicional seja ver-
dadeira, e outro que ser executado caso o resultado do teste seja falso.
Condicional aninhada: aps a execuo do teste, ser executado um bloco
de comandos se o resultado do teste for verdadeiro, podendo ter um outro teste

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

Nesse momento, muito importante termos de forma clara o que o teste.


uma expresso que utiliza os operadores relacionais e lgicos vistos na unidade an-
terior para realizar uma comparao ou avaliao de uma expresso, resultando
sempre em valor lgico. Veja alguns exemplos:

OPERAES OU TESTES
SIGNIFICADO MATEMTICA EXEMPLO - UAL
Maior > 2*8>4

Menor < 2<9

Igual = 3 == 7 4

Maior ou igual 9 >= 5

Menor ou igual 4 <= 10

Diferente 8 <> 5

Conjuno (e) n>=100 && n<=200

Disjuno (ou) n<100 || n>200

Negao (no) !p

Caso no lembre como funciona a conjuno, a disjuno e a negao, se-


gue a tabela verdade com as respetivas sadas para cada possvel combinao
de entradas.

58 captulo 3
TABELA VERDADE
NO E OU

3.2 Comando condicional simples

A estrutura condicional que pode ser definida em linguagem algortmica e de progra-


mao conhecida como se. Dessa forma, um determinado bloco de instrues do
algoritmo ser executado se (e apenas se) uma condio de teste for satisfeita. As
linguagens de programao utilizam a instruo equivalente denominada if.

Uma estrutura condicional simples utilizada para especificar que um blo-


co de instrues ser executado apenas aps a avalio de uma condio. O re-
sultado da avalio ser sempre um valor lgico, ou seja, verdadeiro ou falso.
Dessa forma, o bloco de instrues ser executado quando a avaliao da ex-
presso resultar em um valor verdadeiro.
A seguir, so apresentados a estrutura e um exemplo de uso para o UAL, C++
e Fluxograma. O exemplo compara uma nota se a nota for maior ou igual a
seis, impresso no dispositivo padro de sada a palavra Aprovado.

LINGUAGEM UAL EXEMPLO


se (<teste>) se (nota >= 6)
{ {
<bloco de comandos> imprima Aprovado;
} }

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

A melhor forma de aprender e entender o uso das estruturas de programao


praticando. Vamos a um exemplo completo, apresentado na Figura 20. O progra-
ma recebe um nmero inteiro como entrada e verifica se positivo ou negativo.

LINGUAGEM UAL LINGUAGEM C++

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.

Figura 21 Resultado da execuo do algoritmo para um valor positivo.

Figura 22 Resultado da execuo do algoritmo para um valor negativo.

A Figura 23 a seguir apresenta a codificao um algoritmo computacional


capaz de verificar se um nmero informado pelo usurio par ou mpar. Para
isso, ser utilizado no algoritmo o operador aritmtico %, que necessrio
para determinar o resto de uma diviso inteira. Um nmero definido como
par quando a diviso deste nmero por 2 resultar em resto zero, caso contrrio
este nmero mpar. Devemos nos atentar ao fato de estar utilizando mais de
uma expresso dentro do teste. De acordo com a precedncia dos operadores
a operao mdulo ser executada primeiramente seguida pela operao de

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.

LINGUAGEM UAL LINGUAGEM C++

Figura 23 Algoritmo com comando condicional simples que verifica se um nmero par
ou mpar.

As Figura 24 e 25 apresentam o resultado da execuo do algoritmo para os


possveis valores de entrada. Na Figura 6, demonstrada a entrada de um valor
par, e na figura 7, a entrada de um valor mpar.

Figura 24 Resultado da execuo do algoritmo com entrada par.

Figura 25 Resultado da execuo do algoritmo com entrada mpar.

62 captulo 3
3.3 Comando condicional composto

A estrutura condicional composta um complemento da estrutura condicional


simples, dessa maneira, com a condicional composta, possvel especificar o que
ser executado pelo algoritmo quando a expresso resultar em um valor verdadeiro
e tambm definir o que ser realizado quando ocorrer um resultado falso na ex-
presso. Como uma expresso condicional pode resultar apenas em um valor lgi-
co verdadeiro ou falso, a estrutura condicional composta permite codificar o com-
portamento do fluxo de execuo do algoritmo em todas as situaes possveis.
O trecho da estrutura condicional que especifica o que ser realizado quan-
do a expresso resultar em um valor falso conhecido como seno. Nas lin-
guagens de programao o bloco seno chamado de else. A seguir, so apre-
sentados a estrutura e um exemplo de uso para o UAL, C++ e Fluxograma do
comando condicional composto. O exemplo compara uma nota se a nota for
maior ou igual a seis, impresso no dispositivo padro de sada a palavra Apro-
vado, caso contrrio dever ser escrito Reprovado.

LINGUAGEM UAL EXEMPLO


se (<teste>) se (nota >= 6)
{ {
<bloco de comandos> imprima Aprovado;
} }
seno seno
{ {
<bloco de comandos> imprima Reprovado;
} }

LINGUAGEM C++ EXEMPLO


if (<teste>) if (nota >= 6)
{ {
<bloco de comandos> cout << Aprovado;
} }
else else
{ {
<bloco de comandos> cout << Reprovado;
} }

captulo 3 63
FLUXOGRAMA EXEMPLO

V V
Teste Nota >= 6

F .. F
.. . Aprovado
. Reprovado

Veja na Figura 26 o exemplo de como podemos codificar o algoritmo ante-


rior de verificao se um nmero par ou mpar utilizando o comando condi-
cional composto.

LINGUAGEM UAL LINGUAGEM C++

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.

Figura 27 Resultado da execuo do algoritmo com entrada par

Figura 28 Resultado da execuo do algoritmo com entrada mpar

Veja o exemplo codificado na Figura 29.

LINGUAGEM UAL

captulo 3 65
LINGUAGEM C++

Figura 29 Algoritmo com comando condicional composto utilizando composio de con-


dies de teste.

Nesse exemplo, utilizamos uma entrada literal, e, neste caso, precisamos


de alguns cuidados adicionais. Atravs da mensagem inicial, informamos ao
usurio quais so opes de valores de entrada, delimitando assim as pos-
sibilidades, apesar de ainda haver possibilidade de variaes de entrada.
Mesmo tendo delimitado que a entrada deve ser S para sim e N para no, o
usurio pode digitar os caracteres minsculos ou maisculos, sendo assim
precisamos tratar estes dois casos em nosso programa. Perceba que, para
isso, utilizamos uma composio de condio dentro do teste do comando
condicional. No caso especfico, utilizamos o operador relacional OU, que ve-
rifica se um caso ou outro verdadeiro sendo um dos dois lados da operao
verdadeiro, o resultado ser verdadeiro. Em vrias situaes, ser necessrio
utilizar uma composio de testes, tenha apenas o cuidado de avaliar corre-
tamente o operador entre as composies e se necessrio delimit-las com
parnteses. A Figura 30 e a Figura 31 apresentam como resultado da execuo
a entrada s e N, respectivamente.

Figura 30 Resultado da execuo do algoritmo para entradas

66 captulo 3
Figura 31 Resultado da execuo do algoritmo para entrada N

3.4 Comando condicional aninhado

A estrutura condicional aninhada um tipo de estrutura em que uma condicio-


nal definida no interior do bloco de instrues da outra. Em outras palavras,
quando construmos estruturas condicionais que contm no interior do cdigo
outras estruturas condicionais, chamamos de estrutura condicional aninhada.
O objetivo deste tipo de estrutura avaliar todas as possibilidades de uma con-
dio a partir dos operandos e operadores utilizados na expresso.
A seguir, so apresentados a estrutura e um exemplo de uso para o UAL, C++
e Fluxograma do comando condicional composto. O Exemplo compara uma
nota se a nota for maior ou igual a seis, impresso no dispositivo padro de
sada a palavra Aprovado, caso contrrio verificado novamente a nota; se a
nota for maior que quatro, dever ser escrito Recuperao e, caso contrrio, de-
ver ser escrito Reprovado.

LINGUAGEM UAL EXEMPLO


se (<teste>)
{ se (nota >= 6)
<bloco de comandos> {
} imprima Aprovado;
seno }
{ se (nota >= 4)
se (<teste>) {
{ imprima imprima Recuperao;
<bloco de comandos> }
} seno
seno {
{ imprima Reprovado;
<bloco de comandos> }
} }
}

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

Para demonstrar a codificao de uma estrutura condicional aninhada,


vamos elaborar um algoritmo que tem como objetivo ordenar um conjunto
de trs elementos numricos do tipo inteiro informados pelo usurio. Isto
posto, o usurio especificar por meio do teclado trs valores e o algoritmo
ser capaz de exibi-los em ordem crescente. Para a codificao do exemplo,
foi utilizada uma estrutura condicional aninhada, em que possvel iden-
tificar a utilizao de estruturas condicionais encadeadas. A Figura 32 de-
monstra sua codificao.

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

Figura 32 Algoritmo com comando condicional aninhada que ordena 3 nmeros.

Para facilitar a visualizao e o entendimento dos comandos condicionais


aninhados, adicionamos o fluxograma para visualizao grfica. Sempre que
tiver dificuldades no entendimento de um cdigo, utilize recursos grficos,
como o fluxograma ou o teste de mesa, para facilitar a compreenso. O resulta-
do da execuo do algoritmo pode ser visualizado na Figura 33.

Figura 33 Resultado da execuo do algoritmo

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.

Figura 35 Resultado da execuo da aplicao, para usurio e senha corretos.

Figura 36 Resultado da execuo da aplicao, para usurio correto e senha incorreta.

Figura 37 Resultado da execuo da aplicao, para usurio incorreto.

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.

Figura 38 Algoritmo UAL que imprime o nome do ms a partir no nmero.

fcil perceber que no momento da escrita no muito usual realizar o


controle de quantos se ... seno se sero utilizados e principalmente dos abre
e fecha chaves. O que pode levar facilmente a erros simples, porm difceis de
serem detectados.
A estrutura condicional mltipla utilizada para estruturar de forma me-
lhor e mais eficiente problemas como o apresentado anteriormente. Ela per-
mite especificar no algoritmo que, dentre as condies possveis, apenas uma
condio poder ser executada. Esse tipo de estrutura permite a elaborao de
condicionais mutuamente exclusivas, ou seja, uma estrutura que seleciona e
executa apenas uma condio por vez.
A codificao pode ser realizada utilizando a instruo se ... seno se, ou, ain-
da, uma estrutura especfica denominada escolha. Para o uso da estrutura esco-

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.

A listagem cdigo 8 demonstra a codificao de uma estrutura condicional


mltipla utilizando a instruo escolha. Esse exemplo apresenta um algoritmo
que realiza clculos simples a partir de dois valores fornecidos pelo usurio e
um smbolo da matemtica que se refere operao. O algoritmo foi nomeado
unid4_exemplo08.alg.
Assim, faz-se necessrio entender que, embora sejam mais simples, nem
sempre poderemos substituir os ses encadeados e, s vezes, poderemos substi-
tu-los em uma linguagem, mas em outra no. A seguir, apresentado a estru-
tura do comando escolha em UAL, C++ e Fluxograma.

LINGUAGEM UAL LINGUAGEM C++


(NO DISPONVEL NA VERSO)

escolha (<variavel>) switch (<variavel>)


{ {
caso <valor1>: <comandos> case <valor1>: <comandos>
pare; break;
caso <valor2>: <comandos> case <valor2>: <comandos>
pare; break;
caso <valor3>: <comandos> case <valor3>: <comandos>
pare; break;
caso <valor_n>: <comandos> case <valor_n>: <comandos>
pare; break;
senao : <comandos> default : <comandos>
} }

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

No comando escolha, quando a varivel avaliada, seu valor comparado


com todos os valores informados de forma sequencial. Quando uma igualdade
encontrada, os comandos associados quelas igualdades so executados. O
comando pare (break) utilizado para informar a estrutura de que as prximas
comparaes no devem ser executadas e que o controle deve sair da estrutura,
pois sua omisso acarreta a execuo das outras comparaes. A opo seno
(default) opcional e ser executada caso nenhuma das opes apresentadas
anteriormente seja satisfeita.

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.

Figura 40 Resultado da execuo do algoritmo.

Figura 41 Resultado da execuo do algoritmo na opo seno.

Essa estrutura ideal para algoritmos que funcionam atravs de um menu


visto em que s podemos selecionar um item. Vejamos na Figura 42 a calcula-
dora que fizemos na unidade anterior, porm com a opo de o usurio esco-
lher a operao que deseja executar.

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.

Figura 43 Resultado da execuo do algoritmo.

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.

3. Ler trs nmeros correspondentes a lados de um tringulo e imprimir a classificao


segundo seus lados.

4. No Brasil, o licenciamento de carros e caminhes feito durante o ano de acordo com o


final da placa. Dependendo do valor, o licenciamento deve ser feito at um determinado
dia. De acordo com a tabela a seguir, solicite ao usurio que informe o tipo de automvel e
o nmero final de sua placa para voc poder inform-lo da data final de seu licenciamento.

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.

FORBELLONE, A.L. V; EBERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Makron


Books, 2005.

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.

4.1 Caractersticas da estrutura de repetio

No desenvolvimento de algoritmos computacionais, muitas vezes necessita-


mos que determinadas partes do cdigo sejam executadas diversas vezes. Para
que essas sucessivas execues sejam possveis, podemos utilizar um conjunto
de estruturas denominadas 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.

Estudaremos detalhadamente as diferentes opes e descobriremos as


vantagens e desvantagens de cada uma delas, para determinados tipos de apli-
cao. Assim voc ser capaz de selecionar a melhor estrutura para cada apli-

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.

4.2 Comando de repetio com varivel de controle - PARA

A estrutura de repetio para utilizada na construo de laos de repetio


que so controlados por uma varivel de controle ou varivel contadora. Nesse
tipo de estrutura, a varivel contadora necessria para determinar quantas
vezes o bloco de repetio j foi repetido; alm disso, essa varivel particular
comparada, a cada iterao do lao, com uma condio de parada que define o
trmino da execuo do lao. A estrutura de repetio para possui ainda uma
condio inicial que representa o valor da varivel contadora e um critrio que
determina o que acontecer com o contador a cada iterao do lao. Em geral, a
cada iterao do lao, a varivel contadora incrementada ou decrementada, e
essa operao ocorre at que a condio de parada da estrutura seja alcanada.
Geralmente comeamos o estudo pela instruo para porque possui um n-
mero de repeties bem definido e conhecido, o que facilita o entendimento.
Normalmente pensamos em algo do tipo para x de 1 at 10 faa isso. Voc po-
deria ento se perguntar: se conhecemos a quantidade previamente, por que
no repetimos o cdigo este tanto de vezes, ao invs de utilizar uma estrutu-
ra? Em um problema onde queremos apenas imprimir um valor conjunto de
10 valor, isso pode fazer sentido, repetimos o comando de imprimir 10 vezes e
ponto, mas, e se quisermos imprimir 100 vezes, ou ento 1000 vezes, ser que
faz sentido? E o que queremos fazer no apenas imprimir, mas sim realizar
um clculo complexo que exige diversas etapas; ento devemos repetir este cl-
culo complexo 10, 100, 1000 vezes? Ser que isso faz sentido? Concordamos
que no. No difcil imaginar a possibilidade de erro que surge quando temos
de repetir esses contedos complexos ou quando temos de corrigir algo para
alterar o mesmo ponto, 10, 100 ou 1000 vezes. Torna-se simplesmente invivel.
Alm do mais, as estruturas de repetio so muito fceis, basta aprender sua
estrutura. Vamos l!

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

Figura 44 Exemplo estrutura para em UAL

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.

Figura 45 Exemplo estrutura para em C++

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

Segue abaixo alguns exemplos de uso da estrutura para:

LINGUAGEM UAL LINGUAGEM C++


para(c<-1; c<=100;
Repetir 100 vezes for(c=1; c<=100; c++)
c++)

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

Contar de 10 at 1 para(c<-10; c>=1; for(c=10; c>=1; c=c-2)


decrementando de 2 c<-c-2) for(c=10; c>=1; c-=2)

Contar de 0 at 100 para(c<-0; c<=100; for(c=0;c<=100; c=c+5)


de 10 em 10 c<-c+10) for(c=0; c<=100; c+=5)

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.

LINGUAGEM UAL LINGUAGEM C++


prog exemplo #include <iostream>
int cont; using namespace std;
real valor, acumulador; int main()
acumulador <- 0.0; {
para(cont<-1; cont<=10; cont++) int cont;
{ float valor, acumulador;
imprima \nValor , cont, : ; acumulador = 0;
leia valor; for(cont=1; cont<=10; cont++)
acumulador <- acumulador + valor; {
} cout << \nNumero: << cont;
imprima \nSoma dos valores: , acumu- cin >> valor;
lador; acumulador = acumulador + valor;
fimprog }
cout <<\nSoma dos valores: << acu-
mulador;
}

O resultado da execuo do algoritmo que demonstra a utilizao da estru-


tura de repetio para apresentado na Figura 46.

Figura 46 Resultado da execuo do algoritmo

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.

LINGUAGEM UAL LINGUAGEM C++


#include <iostream>
prog exemplo
using namespace std;
int cont;
int main()
para(cont<-10; cont>1; cont--)
{
{
int cont;
se (cont % 2 == 0)
for(cont=10; cont>1; cont--)
{
{
imprima \n, cont;
if( (cont%2) == 0)
}
cout<<\n <<cont;
}
}
fimprog
}

A Figura 47 apresenta o resultado da execuo do algoritmo em que poss-


vel visualizar os nmeros pares no intervalo de 10 at 1.

Figura 47 Resultado da execuo do algoritmo

captulo 4 91
4.3 Comando de repetio com teste lgico no incio - ENQUANTO

Em programao, comum sabermos quantas vezes vamos precisar repetir deter-


minado comando ou trecho de cdigo. Por exemplo, quando vamos registrar uma
compra, no sabemos quantos produtos existem nesta compra, mas sabemos que
teremos de repetir o registro dos produtos tantas vezes quantas necessrias, ou
seja, at que todos os produtos sejam registrados. Em situaes como essa, pre-
cisamos de uma estrutura de controle que nos permita verificar uma condio ou
realizar um teste lgico como controle de seu lao de repetio. Para isso, utiliza-
mos os comandos de repetio com teste lgico. Existem dois tipos de comandos
com teste lgico, com teste no incio, ou seja, antes da execuo do trecho de c-
digo, ou com teste ao final, depois da execuo do trecho de cdigo. Nesse tpico,
vamos aprender a estrutura enquanto, que possui teste lgico no incio.
Na estrutura de repetio enquanto, um determinado bloco de instru-
es executado sucessivamente enquanto o resultado da expresso con-
dicional da condio de parada permanecer verdadeiro. Assim, enquanto a
condio de parada resultar em verdadeiro, o bloco ser executado. Nesse
tipo de estrutura, o bloco de instrues pode ser executado um nmero pre-
determinado de vezes (como na estrutura de repetio para) ou executar um
nmero indeterminado de vezes at que uma condio seja satisfeita. Nas
linguagens de programao, essa estrutura de repetio conhecida como
while. Veja sua estrutura.

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

Digite nmero > 0

NUM
F
Test
F
V Num > 0?

V
Bloco de
comandos Num * 2

Digite nmero > 0

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.

LINGUAGEM UAL LINGUAGEM C++

prog exemplo #include <iostream>


int cont; using namespace std;
cont <- 1; int main()
enquanto(cont<=10) {
{ int cont = 1;
se (contador % 2 = 0) while(cont <= 10)
{ {
imprima \n, contador; if( (cont%2) == 0)
} cout<<\n <<cont;
cont <- cont + 1; cont++;
} }
fimprog }

O resultado da execuo do algoritmo pode ser visualizado na Figura 50.

Figura 50 Resultado da execuo do algoritmo

Como apresentado anteriormente, a aplicao mais comum e indicada da


estrutura enquanto se d em problemas computacionais em que no se sabe
previamente o nmero de vezes que o lao dever ser repetido. Nesses casos,

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.

LINGUAGEM UAL LINGUAGEM C++


prog exemplo
#include <iostream>
int numero, pos, neg;
using namespace std;
numero <- 1;
int main()
pos <- 0;
{
neg <- 0;
int numero = 1;
enquanto(numero <> 0)
int pos, nerg;
{
pos = neg = 0;
imprima \n Escreva o nmero: ;
while(cont != 0)
leia numero;
{
se (numero > 0)
cout<<\nEscreva o nmero;
{
cin>>numero;
pos<- pos +1;
if( (numero > 0)
} seno
pos++;
{
else
se (numero < 0)
{
{
if( (numero < 0)
neg<- neg +1;
neg++;
}
}
}
}
}
cout<<\nTotal de nmeros positos:
imprima \nTotal de nmeros positivo:
<<pos;
, pos;
cout<<\nTotal de nmeros negativos:
imprima \nTotal de nmeros negati-
<<neg;
vos, neg;
}
fimprog

96 captulo 4
O resultado da execuo do algoritmo pode ser visualizado na Figura 51.

Figura 51 Resultado da execuo do algoritmo

importante percebermos que no uso do enquanto necessrio que haja


uma atribuio ou entrada do valor que ser utilizado na verificao condicio-
nal antes do incio do lao e uma atribuio ou leitura de dados ao final do lao,
com o objetivo de atualizar o valor da condio de verificao. Se o primeiro va-
lor passar pelo teste, ento a execuo do algoritmo entra no bloco de repetio
e fica nesse bloco at que um valor no satisfaa mais a condio. Caso o valor
de verificao no seja atualizado dentro do bloco de repetio, o programa ir
entrar em lopping infinito e nunca sara do lao.
Vimos anteriormente que a estrutura do enquanto pode simular a estrutura
do para, mas ser que o inverso verdadeiro? As linguagens de programao
mais antigas possuem uma estrutura limitada para o para (ou for), ento isso
no era possvel, mas a linguagem C apresentou uma estrutura com mais recur-
sos e, dessa forma, todas as linguagens posteriores ao C adotaram este modelo,
tornando isso possvel.
Veja o exemplo a seguir.

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.

4.4 Comando de repetio com teste lgico no fim - FAA...


ENQUANTO

A estrutura de repetio faca...enquanto, que nas linguagens de programao


conhecida como do...while, tem um funcionamento semelhante estrutura
enquanto. A principal diferena entre as duas estruturas est no fato de a estru-
tura enquanto realizar o teste condicional para determinar o trmino da repe-
tio no incio da instruo; por outro lado, a estrutura faca...enquanto realiza o
teste de parada no final. O faca...enquanto primeiro executa o bloco de cdigo,
depois realiza o teste lgico de controle do lao. Veja sua estrutura.

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;

Figura 52 Exemplo estrutura faa enquanto em UAL

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.

Figura 53 Exemplo estrutura faa enquanto em C++

100 captulo 4
FLUXOGRAMA EXEMPLO

Incio

Digite nmero > 0

Bloco de
comandos
NUM

V
Test Num * 2
F

V
Num > 0?

F
Fim

Com a estrutura de repetio faca...enquanto, possvel construir laos de


repetio tanto controlados por contador, quanto controlados por condio l-
gica. A listagem denominada cdigo 12 apresenta a utilizao da estrutura de
repetio faca...enquanto para a codificao de um problema que envolve um
lao controlado por condio lgica. Nesse exemplo, a estrutura de repetio
executada sempre que o que usurio informar a opo N (No).

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.

Figura 54 Resultado da execuo do algoritmo

Uma aplicao muito comum do faca...enquanto para construo de menus


e programas interativos, em que um bloco de cdigo ser executado repetidamen-
te enquanto o usurio no escolher a opo de sada, como no exemplo anterior.

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>

4.5 Quando utilizar cada estrutura de repetio

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 ideal quando o nmero de repeties for conhecido durante a elabo-


rao do algoritmo ou quando o usurio puder fornec-lo durante a execuo.
Na linguagem C++, essa estrutura recebe o nome de for e, diferentemen-
te de outras linguagens, simula com facilidade as estruturas do enquanto e do
faca... enquanto como veremos mais adiante.

4.5.2 Indicao do enquanto

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.

4.5.3 Indicao do faa...enquanto

A estrutura indicada para as situaes em que o numero de repeticoes


desconhecido. Sua diferenca em relacao a estrutura do enquanto e o teste ao
final, aps a execuo do bloco de cdigo, que executa o bloco de comandos
pelo menos uma vez. Essa estrutura tambem precisa de um teste para inter-
romper a repeticao.
A estrutura da repeticao e mais parecida com a estrutura do para, nao pre-
cisando de leitura/atribuicao antes do faca para entrar na estrutura, pois testa,
como ja foi dito, ao final. muito usada em algoritmos com menus.
Na linguagem C++, essa estrutura recebe o nome de do...while.
A estrutura da repetio mais parecida com a estrutura do para, no pre-
cisando de leitura/atribuio antes do faca para entrar na estrutura, pois seu
teste realizado aps a execuo do bloco de cdigo.
Com isso, finalizamos o estudo sobre as estruturas de controle, tanto para a
elaborao de condicionais quanto para a especificao de repeties.

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.

3. Escreva um algoritmo que, utilizando a estrutura de repetio repita.. at seja capaz de


determinar quantos valores pares foram digitados pelo usurio em um conjunto de 20
elementos.

4. Elabore um algoritmo que receba a altura de 30 pessoas, calcule e apresente na tela: a


maior altura, a menor altura, a mdia de altura, o nmero de pessoas com menos de 18
anos, o nmero de pessoas com mais de 60 anos. Para isso, utilize a estrutura enquanto.

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:

ASCENCIO, Ana Fernanda Gomes; EDILENE, Aparecida Veneruchi De. Fundamentos da


programao de computadores: algoritmos, Pascal e C/C++. So Paulo: Prentice Hall, 2002.

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.

FORBELLONE, A.L. V; EBERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Makron


Books, 2005.

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:

M:{Janeiro, Fevereiro, Maro, Abril, Maio, Junho}

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.

5.1 Estruturas homogneas e heterogneas de programao

Em programao, encontramos situaes em que a utilizao de uma simples


varivel no o suficiente para representar situaes ou objetos do mundo
real. Se quisermos representar um ponto em um plano cartesiano, no conse-
guimos, em linguagens de programao, utilizando apenas uma varivel. Se a
anlise de um ponto composta por dois valores, o valor do ponto no eixo X e o
valor do ponto no eixo Y, logo precisamos de duas variveis distintas.
Para permitir que agrupemos variveis que possuem certa relao, de forma
a representar de maneira mais realista os objetos do mundo real, as linguagens
de programao utilizam a tcnica chamada de estrutura. Para melhor repre-
sentar a situao descrita, podemos utilizar uma estrutura, com os dois valores
existentes, como, por exemplo:
estrutura {
inteiro X;
inteiro Y;
} Ponto;
onde definimos uma estrutura chamada de ponto, composta de dois valores
inteiros, X e Y, que iro representar o valor do ponto nos eixos X e Y, respectiva-
mente. No se preocupe neste momento com a sintaxe necessria para criao,
cada linguagem possui a sua.
Basicamente, essas estruturas podem ser de dois tipos: homogneas e he-
terogneas.
Estruturas homogneas so estruturas como o ponto definido anteriormen-
te, em que todas suas subpartes ou elementos so de um nico tipo. No caso do
ponto, os dois elementos so do tipo inteiro.
Os exemplos mais comuns em que so utilizadas estruturas homegneas
em programao so vetores e matrizes.
Estruturas heterogneas podem ser formadas por subpartes ou elementos
de diferentes tipos, o que auxilia e simplifica muitos a estruturao de progra-
mas e representao de elementos do mundo real em um programa. Como, por
exemplo, a representao dos dados de uma pessoa. Geralmente uma pessoa

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;

Este tipo de estrutura muito importante para representar elementos com-


plexos e heterogneos do mundo real. Novamente, no se preocupe com a sinta-
xe de estrutura; mais adiante, no curso, voc aprender outras estruturas para re-
presentar elementos heterogneos. Apenas a ttulo de curiosidade, na linguagem
C elas so definidas utilizando-se o comando struct.

5.2 Tipo String

O tipo String, muito utilizado em todas as linguagens para armazenar e manipu-


lar contedos literais, na verdade uma estrutura homognea do tipo char ou um
vetor de caracteres. A representao literal de uma string sempre feita por um
conjunto de caracteres da tabela ASCII, apresentados entre aspas duplas.

Este um exemplo de uma String.

A representao fsica de uma varivel do tipo String um conjunto de ca-


racteres finalizado pelo caractere nulo, cujo valor inteiro igual a zero e repre-
sentado pelo smbolo \0, ou barra invertida zero, conhecido tambm apenas
como barra zero. Logo, a representao da varivel nome com o contedo Ma-
ria, dada da seguinte forma:

110 captulo 5
NOME
M a r i a \0

0 1 2 3 4 5

Um vetor de tamanho 6, ou seja de 6 posies, iniciado na posio zero e


terminado na posio 5 pelo smbolo \0. Logo, sempre que quisermos guardar
uma palavra ou frase, precisamos de uma varivel do tamanho dos dados mais
um. Geralmente, essa complexidade transparente e fica encapsulada no tipo
String. Caso opte por trabalhar com a variao nativa ou bsica do tipo, que
o vetor de caracteres, preciso ter o cuidado na manipulao e definio dos
tamanhos, bem como realizar os tratamentos necessrios.
Veremos a seguir como funcionam os vetores; assim, poderemos tambm
entender melhor o funcionamento do tipo String.

5.3 Matriz unidimensional (vetor)

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.

a i,j Matriz m por n

n colunas j
m linhas
a1,1 a1,2 a1,3 ... a1,n
a2,1 a2,2 a2,3 ... a2,n

am,1 am,2 am,3 ... am,n

Figura 55 Representao grfica de uma matriz (retirado de: <http://pt.wikipedia.org/


wiki/Ficheiro:Matriz_organizacao.png>).

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.

5.3.1 Conceito de vetor

Matematicamente, um vetor a matriz de uma dimenso; em termos computa-


cionais, um arranjo homogneo de dados. So duas definies semelhantes,
porm sua representao no mundo real um pouco diferente.
Computacionalmente, todo vetor pode ser composto apenas de um tipo e
possui um tamanho finito, definido no momento de sua criao ou declarao.
Em grande parte das linguagens, um vetor de n posies numerado de 0
a n-1. Sua primeira posio a posio 0 e sua ltima posio a posio n-1,
como vimos no exemplo da String com o contedo Maria, em que um vetor de
char, de 6 posies, possui suas posies numeradas de 0 a 5.
Essa caracterstica devida estruturao dos dados na memria do com-
putador. Eles so estruturados de forma sequencial, onde o endereo base, ou
endereo do primeiro elemento, o prprio endereo do vetor, e todos os ou-
tros elementos so encontrados e acessados, atravs do endereo base mais seu
deslocamento em relao a este endereo, o que depende de sua posio e do
tamanho dos elementos.
Veja aa forma para encontrar qualquer endereo de um vetor:

Endereo Base + Posio * Tamanho do Tipo

Voltando ao nosso exemplo da String, vamos considerar que o endereo


base seja 1200 e encontrar o endereo da letra r.

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:

1200 + 2*(tamanho do char)

Considerando o tamanho do char como 4, temos:

1200 + 2*4 = 1208

Ou seja, a posio da letra r na memria 1208. Assim, considerando o


primeiro elemento, essa a forma mais simples para o computador calcular e
encontrar a posio dos demais elementos de um vetor.

5.3.2 Declarao de um vetor

Para utilizarmos um vetor ou matriz unidimensional, temos que declar-lo, ou


seja, precisamos criar uma varivel do tipo vetorial. Para declarar uma varivel
vetorial, utilizamos a seguinte sintaxe:

LINGUAGEM UAL LINGUAGEM C++


tipo nomeDoVetor[tamanahoDoVetor]; tipo nomeDoVetor[tamanahoDoVetor];

Exemplos:

LINGUAGEM UAL LINGUAGEM C++


/* Vetor para guardar 10 notas */

Int notas[10]; Int notas[10];

/* Vetor para guardar o sexo de 50 pessoas */

string sexo[50]; char sexo[50];

/* Vetor para armazenar o valor do salrio de 100 funcionrios */

captulo 5 113
LINGUAGEM UAL LINGUAGEM C++
real salario [100]; float salario[100];

/* Vetor para armazenar 1 nome com 30 caracteres */

string nome; char nome[30];

Vendo os exemplos, podemos notar que o tamanho do vetor sempre definido


no momento de sua declarao, entre colchetes, e no se altera durante toda a
sua existncia. O tamanho deve ser sempre um nmero inteiro.

5.3.3 Incluso de dados em um vetor

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:

LINGUAGEM UAL LINGUAGEM C++


/* Inicializar um vetor notas de tamanho 3 com os valores 5, 8 e 10 */

Int notas[] = {5, 8, 10}; Int notas[] = {5, 8, 10};

/* Inicializar um vetor com sexo de 5 pessoas com os valores M,M,F,M,F */

string sexo[] = {M, M, F, M, F }; string sexo[] = {M, M, F, M, F };

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};

/* Inicializar uma varivel para armazenar 1 nome o valor Joao */

string nome = Joao; char nome[5] = Joao;

Perceba que a inicializao feita utilizando-se os valores entre chaves, divi-


didos por vrgula, e que a indicao do tamanho do vetor opcional. Quando
declaramos um vetor e j o inicializamos, o compilador utiliza a quantidade
de dados usada para inicializar o vetor como tamanho, caso tenhamos defi-
nido um tamanho, ser usado o tamanho definido com limite. Porm, temos
um caso em especial, o vetor de char, que pode ser inicializado pela string
entre parnteses. Nesse caso, importante lembrar da estrutura do vetor
de char, que ele finalizado pelo smbolo \0, portanto dever sempre ter o
tamanho da string somado de um, como no exemplo anterior: o nome Joo
possui 4 letras, mas o vetor ter o tamanho 5.

Para atribuir valores aps a inicializao, utilizamos a estrutura a seguir:

LINGUAGEM UAL LINGUAGEM C++


nomeDoVetor[posio] = valor; nomeDoVetor[posio] = valor;

Exemplos:

LINGUAGEM UAL LINGUAGEM C++


/* Atribuir o valor 20 para a posio 2 do vetor notas */

notas[1] = 20; notas[2] = 20;

/* Atribuir o valor F na primeira posio do vetor */

sexo[0] = F; sexo[0] = F;

captulo 5 115
/* Atribuir o valor 12,23 na posio 3 do vetor vreais */

vreais [2] = 12.12; vreais [2] = 12.12;

/* Trocar o a por do vetor nome nome que possui o valor Joao */

nome = Joo; nome[2] = ;

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?

LINGUAGEM UAL LINGUAGEM C++

int vetor[8]; Int vetor[8]


imprima \nDigite 1o elemento: ; cout<<\nDigite 1o elemento: ;
leia vetor[0]; cin>>vetor[0];
imprima \nDigite 2o elemento: ; cout<<\nDigite 2o elemento: ;
leia vetor[1]; cin>>vetor[1];
imprima \nDigite 3o elemento: ; cout<<\nDigite 3o elemento: ;
leia vetor[2]; cin>>vetor[2];
imprima \nDigite 4o elemento: ; cout<<\nDigite 4o elemento: ;
leia vetor[3]; cin>>vetor[3];
imprima \nDigite 5o elemento: ; cout<<\nDigite 5o elemento: ;
leia vetor[4]; cin>>vetor[4];
imprima \nDigite 6o elemento: ; cout<<\nDigite 6o elemento: ;
leia vetor[5]; cin>>vetor[5];
imprima \nDigite 7o elemento: ; cout<<\nDigite 7o elemento: ;
leia vetor[6]; cin>>vetor[6];
imprima \nDigite 8o elemento: ; cout<<\nDigite 8o elemento: ;
leia vetor[7]; cin>>vetor[7];

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.

LINGUAGEM UAL LINGUAGEM C++


cout<<\nDigite <<... <<o elemento:
imprima \nDigite , ..., o elemento: ;
;

Para controlar a posio de leitura, temos de utilizar uma varivel.

LINGUAGEM UAL LINGUAGEM C++


leia vetor[n]; cin>>vetor[n];

kPor fim, utilizamos a estrutura de repetio para percorrer todo o vetor.


Vamos ver como ficaria para ler o mesmo vetor de 8 posies utilizado no
exemplo anterior.

LINGUAGEM UAL LINGUAGEM C++


para (n<-0; n<7;n++) for(int n = 0; n<7; n++)
{ {
imprima \nDigite , n+1, o elemento: cout<<\nDigite <<n+1 <<o ele-
; mento: ;
leia vetor[n]; cin>>vetor[n];
} }

Vejamos o Teste de Mesa para a execuo deste trecho de cdigo:

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.

LINGUAGEM UAL LINGUAGEM C++


para (n<-0; n<tamanho;n++) for(int n = 0; n<tamanho; n++)
{ {
imprima \nDigite ..., n+1, ....; cout<<\nDigite <<n+1 <<... ;
leia nomeDoVetor[n]; cin>>nomeDoVetor[n];
} }

Outra forma de se inserir dados em um vetor por meio da atribuio. O

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.

LINGUAGEM UAL LINGUAGEM C++


nomeDoVetor[posio] <- expresso nomeDoVetor[posio] = expresso
com o contedo ou valor a ser atribudo com o contedo ou valor a ser atribudo
no vetor; no vetor;

para (n<-0; n<tamanho;n++) for(int n = 0; n<tamanho; n++)


{ {
nomeDoVetor[n] <- expresso com o nomeDoVetor[n] = expresso com o con-
contedo ou valor a ser atribudo no vetor; tedo ou valor a ser atribudo no vetor;
} }

5.3.4 Leitura de dados de um vetor

A leitura ou obteno de dados de um vetor muito semelhante incluso de


dados em um vetor, como vimos anteriormente. A principal diferena com o
comando e a localizao do vetor nos comandos, conforme veremos a seguir.
Para realizar a impresso dos valores da tela, a sada sempre se inicia com
um trecho identificando o seu contedo, para, em seguida, fazermos a impres-
so utilizando o comando imprima ou cout.
Como j sabemos, podemos fazer isso de forma individual, ou para todo o
vetor, utilizando ou no uma estrutura de repetio. Vamos ver diretamente a
forma utilizando estrutura de repetio.
Quando vamos imprimir um vetor, podemos imprimi-lo em uma linha, ou
seja, com todos os valores na mesma linha, ou em uma coluna com um valor em
cada linha. Veremos as duas formas.

captulo 5 119
LINGUAGEM UAL LINGUAGEM C++
/* IMPRESSO COMO COLUNA */

imprima \nTtulo\n; cout << \nTtulo\n;


para (n<-0; n<tamanho;n++) for(int n = 0; n<tamanho; n++)
{ {
imprima \n, nomeDoVetor[n]; cout<<\n...<<nomeDoVetor[n];
} }

/* IMPRESSO COMO LINHA */

imprima \nTtulo\n; cout << \nTtulo\n;


para (n<-0; n<tamanho;n++) for(int n = 0; n<tamanho; n++)
{ {
imprima nomeDoVetor[n], \t: ; cout<<nomeDoVetor[n] << \t: ;
}

5.4 Matriz bidimensional (matriz)

Agora que j temos total conhecimento sobre vetores ou matrizes unidimensio-


nais, vamos um pouco mais alm e aprender sobre as matrizes bidimensionais.
Sabemos uma string um vetor; se quisermos armazenar um conjunto de no-
mes, ou um conjunto de string, precisamos de uma estrutura bidimensional,
uma matriz bidimensional. Antes de iniciar o estudo desta etapa, sugiro que v
at o item de atividades sobre vetores para consolidar seu conhecimento, pois
isso facilitar muito a compreenso sobre matrizes bidimensionais.

5.4.1 Conceito de matriz

Vamos comear o estudo de matrizes bidimensionais analisando algumas si-


tuaes.
O professor ou tutor de sua turma precisa utilizar uma ferramenta para con-
trolar a nota e o desempenho de todos os alunos. Vamos imaginar que sua tur-
ma possua 60 alunos, e que cada aluno realize 4 avaliaes durante o semestre.

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

uma opo possvel e vivel, porm temos 5 vetores independentes, sem


qualquer relao, os quais temos de manipul-los, gerenci-los e control-los
de forma independente, tomando sempre o cuidado para que nunca inverta-
mos um ndice e causar a mistura das notas de alunos diferentes ou cadastra-
mos uma informao em local indevido.
Se fssemos controlar essas informaes, provavelmente a soluo mais l-
gica seria montar uma tabela com esses dados. Provavelmente, no utilizara-
mos uma lista para cada avaliao separadamente. Ento, por que no fazemos
da mesma forma em um sistema computacional?

captulo 5 121
ALUNO ALUNO ALUNO ALUNO ALUNO
1 2 3 4 60

NOTA 1 V1 V2 V3 V4 ..... V60

NOTA 2 V1 V2 V3 V4 ..... V60

NOTA 3 V1 V2 V3 V4 ..... V60

NOTA 4 V1 V2 V3 V4 ..... V60

FALTAS V1 V2 V3 V4 ..... V60

Para controlarmos nossas despesas do ano, geralmente utilizamos uma ta-


bela ou planilha, como no exemplo a seguir.

JAN. FEV. MAR. ABR. MAIO JUN. ...

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

A declarao e manipulao de matrizes bidimensionais bem semelhante a de


vetores. Porm, agora temos que tratar duas dimenses, por isso, ao invs de uti-
lizarmos um par de colchetes, usamos dois pares, um para cada dimenso da ma-
triz. Apesar de no ser foco de nosso estudo neste momento, na linguagem C++
possvel declarar matrizes multidimensionais, ou seja, com mais de duas dimen-
ses. Nesse caso, necessrio usar um par de colchetes para cada dimenso.
Veja o padro para a declarao de matrizes bidimensionais.

LINGUAGEM C++
tipo nomeDaMatriz[tamanahoD1] [tamanahoD2] ;

Exemplos:

LINGUAGEM C++
/* declara uma matriz para guardar 3 informaes diferentes de 300 pacientes */

float pacientes[300] [3];

/* declara uma matriz de 4 notas para 100 alunos */

float notas[100] [4];

/* Declara uma matriz para guardar 1000 nomes de at 30 caracteres */

char nome[1000] [31];

Note que, na declarao da matriz, para guardar 100 nomes com at 30


caracteres, utilizamos uma matriz bidimensional de 1000x31, e no 1000x30.
Voc deve se lembrar de que vimos no incio deste captulo que todo vetor de
char termina com o smbolo \0, por isso precisamos de uma coluna a mais.
necessrio estar sempre atento a este tipo de detalhe.

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.

float notas[8] [4];

NOTA 1 NOTA 2 NOTA 3 NOTA 4


ALUNO 1
ALUNO 2
ALUNO 3
ALUNO 4
ALUNO 5
ALUNO 6
ALUNO 7
ALUNO 8

float notas[4] [8];


ALUNO 1

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.

linha 0 linha 1 linha 2

coluna 0 coluna 1 coluna 0 coluna 1 coluna 0 coluna 1

mat [0] [0] mat [0] [1] mat [1] [0] mat [1] [1] mat [2] [0] mat [2] [1]

Figura 2 Organizao de uma matriz bidimensional em memria

5.4.3 Incluso de dados em uma matriz

O armazenamento ou incluso de dados em uma matriz bidimensional feito


de forma semelhante utilizada nos vetores. Podemos realizar a inicializao
em sua declarao ou fazer uma atribuio das informaes desejadas.

LINGUAGEM C++
tipo nomeDaMatriz[tamanahoD1] [tamanahoD2] = { dado1, dado2, ..., da-
dotamanhoD1xD2};

Exemplos:

LINGUAGEM C++
/* Inicializa uma matriz de 3 linhas e 4 colunas */

int matrx [3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

/* Inicializa uma matriz com 3 nomes de at 10 caracteres */

captulo 5 125
char str_vect [3][11] = {Joao, Maria, Jose};

/* Inicializa uma matriz de 5 linhas e 2 colunas */

int matrx [][2] = {1,2,2,4,3,6,4,8,5,10};

Nos exemplos apresentados, podemos notar algumas caractersticas e pe-


culiaridades da inicializao de matrizes bidimensionais. Como j dito, a estru-
tura muito semelhante de vetores, porm precisamos ter em mente que es-
tamos trabalhando com duas dimenses, e o nome da varivel deve ser seguido
de dois pares de colchetes, como vimos anteriormente. Os dados que queremos
popular so apresentados entre chaves de forma sequencial. No precisamos
nos preocupar com a diviso entre linhas, a linguagem se incumbir de geren-
ciar isso; precisamos apenas fornecer a quantidade correta de dados. Podemos
ver pelo primeiro exemplo que, para inicializar uma matriz bidimensional de
trs linhas e quatro colunas, basta informar 12 valores entre chaves, divididos
por vrgulas. O C++ ir distribuir de forma sequencial os dados nas linhas e nas
colunas, sendo assim, os quatro primeiros valores sero colocados na primeira
linha, os quatro seguintes na segunda e os quatro ltimos na terceira linha.
No segundo exemplo, podemos notar que, para inicializar uma matriz bidi-
mensional com 3 nomes, basta indicarmos o tamanho desejado e informarmos
os nomes entre chaves, separados por vrgulas. Novamente o C++ ir distribuir
os nomes, alocando um em cada linha, de forma sequencial. No terceiro e l-
timo exemplos, podemos ver que, quando estamos inicializando uma matriz
bidimensional, no precisamos obrigatoriamente informar os dois ndices, po-
demos informar somente o nmero de colunas; sendo assim, o C++ ir criar
quantas linhas forem necessrias para guardar os dados. Fique atento, pois
isso pode ocorrer apenas no momento da inicializao. Em todos os acessos s
matrizes, ser necessrio informar os dois ndices, de linha e coluna.
Aps a declarao ou inicializao para atribuirmos um valor a uma matriz
bidimensional, basta informar os ndices de linha e coluna desejados e o valor
a ser atribudo, de forma semelhante ao feito com os vetores. Segue a estrutura
e alguns exemplos.

LINGUAGEM C++
tipo nomeDaMatriz[posioLinha] [posioColuna] = ValorDesejado;

126 captulo 5
Exemplos:

LINGUAGEM C++
/* atribuir o valor 13 primeira posio da primeira linha */

matrx [0][0] = 13;

/* Atribuir o caracter P a primeira posio da linha terceira linha */

char str_vect [2][0] = P;

/* Atribuir o valor 11 a segunda coluna da segunda linha */

int matrx [1][1] = 11;

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);
}

Perceba que utilizamos apenas uma estrutura de repetio, porm a asso-


ciamos ao comando de entrada cin.getLine que l os caracteres de um arranjo
de char, inclusive o caractere limitador \0. Sendo assim, ele obtm todas as
colunas da linha indicada e as coloca no local correto.

5.4.4 Leitura de dados de uma matriz

A leitura ou obteno de dados de uma matriz bidimensional, ao exemplo do


que ocorre com o vetor, muito semelhante incluso que vimos anteriormen-
te. Para realizar a impresso dos valores da tela, a sada sempre se inicia com
um trecho identificando o seu contedo, em seguida fazemos a impresso uti-
lizando o comando imprima ou cout.
Como j vimos, podemos fazer isso de forma individual, ou para toda a ma-
triz bidimensional, utilizando ou no uma estrutura de repetio. Vamos ver
diretamente a forma utilizando as estruturas de repetio.
Veremos a seguir como imprimir uma matriz bidimensional numrica e
como exibir uma matriz de char.

128 captulo 5
LINGUAGEM C++
/* IMPRESSO COMO COLUNA */

cout << \nTtulo\n;


for(int L = 0; L<tamanhoLinha; L++)
{
for(int C = 0; C<tamanhoColuna; C++)
{
cout<< nomeMatriz[L] [C];
}
cout<<\n;
}

/* IMPRESSO COMO LINHA */

cout << \nTtulo\n;


for(int L = 0; L<tamanhoLinha; L++)
{
cout<< nomeMatrizChar[L] [C]<<\n;
}

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.

FORBELLONE, A.L. V; EBERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Makron


Books, 2005.

PUGA, S.; RISSETTI, G. Lgica de programao e estrutura de dados: com aplicaes em


Java. 1. ed. So Paulo: Pearson Education, 2003.

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.

DASGUPTA, Sanjoy; PAPADIMITRIOU, Christos; VAZIRANI, Umesh. Algoritmos. 1. ed. So


Paulo: McGraw-Hill Brasil, 2009.

FEOFILOFF, Paulo. Algoritmos em linguagem C. 1. ed. Rio de Janeiro: Campus, 2008.

MANZANO, Jos Augusto N. G.; OLIVEIRA, Jayr Figueiredo. Algoritmos: lgica para
desenvolvimento de programao de computadores. 22. ed. So Paulo: rica, 2009.

MIZRAHI, V. V. Treinamento em linguagem C / Algoritmos. So Paulo: Prentice Hall, 2008


(Biblioteca Virtual) DEITEL, P. J.; DEITEL, H.. C: como programar. 6.ed. So Paulo: Pearson
Prentice Hall, 2011. (Biblioteca Virtual).

captulo 5 131