Você está na página 1de 128

Algoritmos

2014

Editorial
Comit Editorial
Fernando Fukuda
Simone Markenson
Jeferson Ferreira Fagundes
Autor do Original
Mairum Ceoldo Andrade

UniSEB Editora Universidade Estcio de S


Todos os direitos desta edio reservados UniSEB e Editora Universidade Estcio de S.
Proibida a reproduo total ou parcial desta obra, de qualquer forma ou meio eletrnico, e mecnico, fotogrco e gravao ou
qualquer outro, sem a permisso expressa do UniSEB e Editora Universidade Estcio de S. A violao dos direitos autorais
punvel como crime (Cdigo Penal art. 184 e ; Lei 6.895/80), com busca, apreenso e indenizaes diversas (Lei 9.610/98 Lei
dos Direitos Autorais arts. 122, 123, 124 e 126).

Algoritmos

Su

ri o

Captulo 1: Fundamentos de
Lgica e Algoritmos ......................................... 7
Objetivos de sua aprendizagem ................................. 7
Voc se lembra?................................................................ 7
1.1 Definio de algoritmo.................................................... 8
1.2 Soluo de problemas ......................................................... 10
1.3 Etapas para construo de um algoritmo ................................. 11
1.4 Representao de algoritmos ........................................................ 13
1.5 Construo de um algoritmo ............................................................ 21
1.6 Lgica, lgica de programao e programa ......................................... 23
Reflexo ......................................................................................................... 24
Leituras recomendadas ...................................................................................... 25
Referncias ........................................................................................................... 25
No prximo captulo .............................................................................................. 26
Captulo 2: Estrutura Sequencial.......................................................................... 27
Objetivos da sua aprendizagem.................................................................................. 27
Voc se lembra? ........................................................................................................... 27
2.1 Caractersticas da estrutura sequencial .................................................................. 29
2.2 Comandos de incio e fim ....................................................................................... 29
2.3 Variveis ................................................................................................................. 31
2.4 Comando de entrada de dados LEIA.................................................................... 35
2.5 Comando de sada de dados IMPRIMA ............................................................. 39
2.6 Operadores aritmticos e lgicos .......................................................................... 42
Atividades.................................................................................................................... 48
Reflexo..................................................................................................................... 49
Leituras recomendadas............................................................................................ 49
Referncias .......................................................................................................... 49
No prximo captulo ........................................................................................ 50
Captulo 3: Estruturas de Deciso ........................................................... 51
Objetivos da sua aprendizagem................................................................ 51
Voc se lembra? .................................................................................... 51
3.1 Caractersticas de estrutura de deciso ..................................... 52
3.2 Comando condicional simples .............................................. 54
3.3 Comando condicional composto ...................................... 57

3.4 Comando condicional aninhado............................................................................... 61


3.5 Comando condicional mltiplo ................................................................................ 67
Atividades ....................................................................................................................... 73
Reflexo .......................................................................................................................... 74
Leituras recomendadas.................................................................................................... 74
Referncias...................................................................................................................... 75
No prximo captulo ....................................................................................................... 75
Captulo 4: Estruturas de Repetio .......................................................................... 77
Objetivos da sua aprendizagem ...................................................................................... 77
Voc se lembra? .............................................................................................................. 77
4.1 Caractersticas da estrutura de repetio .................................................................. 78
4.2 Comando de repetio com varivel de controle - PARA ....................................... 79
4.3 Comando de repetio com teste lgico no incio - ENQUANTO .......................... 84
4.4 Comando de repetio com teste lgico no fim - FAA... ENQUANTO ............... 91
4.5 Quando utilizar cada estrutura de repetio ............................................................. 95
Reflexo .......................................................................................................................... 96
Atividades ....................................................................................................................... 97
Leituras recomendadas.................................................................................................... 98
Referncias...................................................................................................................... 98
No prximo captulo ....................................................................................................... 99
Captulo 5: Estrutura de Dados Homogneas .......................................................... 101
Objetivos da sua aprendizagem .................................................................................... 101
Voc se lembra? ............................................................................................................ 101
5.1 Estruturas homogneas e heterogneas de programao ....................................... 103
5.2 Tipo String ............................................................................................................. 104
5.3 Matriz unidimensional (vetor) .............................................................................. 105
5.4 Matriz bidimensional (matriz) .............................................................................. 113
Atividades ..................................................................................................................... 121
Reflexo ........................................................................................................................ 122
Leituras recomendadas.................................................................................................. 122
Referncias.................................................................................................................... 122
Bibliografia complementar ........................................................................................... 123

Ap

res

ent

Prezados(as) alunos(as)
Na disciplina de Algoritmos vamos estudar os conceitos bsicos e aprender a estruturar o pensamento para o desenvolvimento
e implementao de softwares ou programas. Esta
disciplina a base para o aprendizado de qualquer
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 algoritmos, 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 determinado bloco.
Na unidade 5, finalizaremos nossa programao com o estudo das
matrizes 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 estudadas. Porm, no esquea, sero
necessrias dedicao e ateno para entender este novo
mundo.
Bons estudos!

Fundamentos de
Lgica e Algoritmos

Cap

t u

lo

Nesta unidade, aprenderemos o que


um algoritmo e para que ele serve. Basicamente 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 passos de soluo de problemas. Iniciaremos com tcnicas
e linguagens naturais e evoluiremos at chegarmos s linguagens de
programao, que permitem ensinar ao computador como resolver
determinados problemas, para nos auxiliar em nossas tarefas.

Objetivos de sua aprendizagem

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.

Voc se lembra?

Voc se lembra dos algoritmos que aprendeu na escola para resolver


os problemas de matemtica? Falando desta forma provavelmente
no, mas com certeza voc j construiu e j utilizou 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.

Algoritmos

1.1 Definio de algoritmo

Proibida a reproduo UniSEB

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 devem ser executadas sucessivamente para encontrar de forma eficiente o mximo divisor comum entre dois nmeros diferentes de zero.
Caso no se lembre deste algoritmo, segue abaixo a descrio desse
algoritmo:

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

Fundamentos de Lgica e Algoritmos Captulo 1

DF. Mede ainda todo o segmento DC pelo que mede tambm o resduo CF, ou seja, o maior mede o menor, o que impossvel.
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 linguagem 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 Euclidiano para obter o MDC
ente 15 e 3.
Dividendo

Divisor

Quociente

Resto

Passo 1

32

Passo 2

EAD-14-Algoritmos UniSEB

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
instrues, definidas de maneira clara e sem ambiguidade, de forma que
possa ser executada diretamente pelo seu leitor.

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

Algoritmos

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.

Proibida a reproduo UniSEB

1.2 Soluo de problemas

10

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 problemas mais complexos ou problemas que provavelmente
iremos encarar novamente, o que nos remete a uma soluo mais estruturada e detalhada, at para que possamos compartilhar com outras pessoas
nossa resoluo. Para obtermos clareza na soluo, uma ferramenta muito
til so os algoritmos.
Nestes 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, por
exemplo, 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 padronizar a forma como criamos as nossas
solues de problemas, vamos ver nesta 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:

Fundamentos de Lgica e Algoritmos Captulo 1

1. Entender
2. Planejar
3. Executar
4. Verificar
Basicamente, na etapa Entender, como o prprio nome j sugere,
devemos obter uma melhor compreenso do problema, identificando
quais so as questes e variveis existentes e verificando se existem informaes suficientes para entend-lo, e buscar uma soluo.
A etapa seguinte, Planejar, consiste em estudar a melhor forma
de resolver problema. basicamente identificar o melhor mtodo a ser
aplicado; geralmente o mtodo da diviso em problemas menores auxilia neste processo. Algumas tcnicas comuns a ser utilizadas nesta etapa
so: adivinhao, lista ordenada, eliminao de possibilidades, simetria
e semelhana com outros casos, causa e efeito, anlise sistmica, estruturao de uma
Conexo:
equao, desenhos, busca por padres
Para praticar o mtodo de
soluo de problemas, acesse os
etc.
endereos a seguir:
A terceira etapa consiste em
Torre de hanoi: <http://www.ufrgs.br/
psicoeduc/hanoi/>
executar o plano realizado na etapa
Teste
de
Einstein:
<http://rachacuca.com.
anterior e efetivamente solucionar o
br/teste-de-einstein/ >
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.

EAD-14-Algoritmos UniSEB

1.3 Etapas para construo de um algoritmo

Para que sejamos capazes de construir um algoritmo que seja claro e


sem ambiguidade, precisamos criar certa estrutura e seguir algumas regras
e passos. Nesta etapa, vamos entender como devemos nos organizar para
que consigamos criar os algoritmos da melhor forma possvel.
As etapas para a construo de um algoritmo so bem parecidas
com as etapas para soluo de problemas proposta por Polya, apresentadas no item anterior. A Figura 1 apresenta esta relao.

11

Algoritmos

Entender
Interpretao
do enunciado
do problema e
das questes
envolvidas.

Planejar
Escolha da
linguagem e
estruturao
da soluo

Executar
Construo
do algoritmo

Vericar
Execuo
em um
interpretador
ou compilador

Proibida a reproduo UniSEB

Figura 1 Relao das etapas de soluo de problemas de Polya com as etapas de


construo de um algoritmo

12

Uma primeira diferena significante a identificao e escolha da


melhor linguagem para a construo do algoritmo, ou seja, qual a melhor
forma de expressarmos a soluo de nosso problema. Geralmente utilizamos a linguagem natural, ou seja, a nossa linguagem para descrever o problema. Este tipo de linguagem permite a descrio e estruturao de quaisquer algoritmos, porm ela pode ser muito extensa de forma a dificultar a
padronizao e remoo de ambiguidades conforme 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 programao.
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. Este 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. Tendo 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, geralmente existem programas ou ambientes de desenvolvimento.
Utilizando estes ambientes, podemos testar e validar o correto funcionamento da soluo implementada. Estes programas podem ser de dois
tipos: interpretadores ou compiladores.

Fundamentos de Lgica e Algoritmos Captulo 1

Interpretadores so programas que validam e executam diretamente os cdigos na linguagem apresentada e apresentam o resultado
em tela de sada. 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 deste
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 executvel, 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 diferentes 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.

EAD-14-Algoritmos UniSEB

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 escrevendo 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 esta caracterstica das linguagens naturais damos o nome de ambiguidade lxica. Porm, como vimos anteriormente, queremos que um
algoritmo no seja ambguo; logo, precisamos definir algumas regras para
utilizao.

13

Algoritmos

1. Utilize frases curtas.


2. Use somente um verbo em cada frase, sempre no infinitivo ou
no imperativo.
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

Proibida a reproduo UniSEB

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.

14

Perceba, na descrio dos ingredientes, que, quando uma palavra


com possvel ambiguidade aparece, necessrio remov-la. Por exemplo, em 4 colheres (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.

Fundamentos de Lgica e Algoritmos Captulo 1

1.4.2 Linguagem grfica

SUPERCAVIE | DREAMSTIME.COM

As linguagens grficas so baseadas em imagens e esquemas, de


forma a tentar facilitar a visualizao e o entendimento das etapas e processos. Quando utilizamos uma linguagem grfica de forma livre, esta
tambm no est isenta de 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, como, 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 entendemos as instrues ou por colocarmos porcas e
parafusos em lugares errados.

EAD-14-Algoritmos UniSEB

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 esquemticas. Ele possui diversos elementos grficos e baseado na
norma ISO 5807, que os padroniza, facilitando seu aprendizado e compreenso. Esse fluxograma 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.

15

Algoritmos

Veja na Figura 3 um exemplo de um fluxograma para um domingo


com a famlia.
Incio
Acordar

H tarefas?

Escovar os dentes

No

Sim
Fazer tarefas

Preparar e tomar caf


Tomar banho
Dia de sol?

Fazer refeio

Vericar
programao do

Preparar roupas
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

Proibida a reproduo UniSEB

Figura 3 Exemplo de fluxograma para domingo em famlia

16

Analisando o fluxograma acima, podemos comear a entender este


processo. No se preocupem com os detalhes, pois os aprenderemos durante a disciplina. O fluxograma apresenta as tarefas sequencialmente,
com uma indicao de incio, 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 pergunta. Aps percorrer todo o processo, encontraremos a indicao fim.
Para auxiliar na compreenso, vamos descrever o fluxograma acima
utilizando linguagem natural.

Fundamentos de Lgica e Algoritmos Captulo 1

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 sequncia, volte para casa. Caso o dia no esteja ensolarado, verifique a programao 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.

EAD-14-Algoritmos UniSEB

1.4.3 Pseudolinguagem

Pseudolinguagem uma forma de abstrair os problemas existentes


na linguagem natural, de forma a criar um padro para descrio e estruturao de algoritmos. Podemos entend-la como uma forma intermediria
entre a linguagem natural e as linguagens de programao. Ela foi criada
com o objetivo de facilitar 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 estrutura e formalismo de como represent-lo de forma clara e sem ambiguidade.
Originalmente, as pseudolinguagens foram concebidas apenas para
estudo 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 sentido. Por exemplo, vamos analisar a frase A ma caiu
da rvore. Saber o significado das palavras, como, 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

17

Algoritmos

Proibida a reproduo UniSEB

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 reservadas que ns podemos utilizar, e a sintaxe a forma exata
como devemos dispor cada palavra e smbolo para que a interpretao
faa sentido.
importante ter conscincia de que, quando utilizamos ferramentas automatizadas 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 algortmicas, e existem diversas disponveis para uso, como o PORTUGOL,
o ILA e o UAL. Nesta disciplina, utilizaremos o UAL, mas veremos a
seguir uma breve apresentao 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 distribudo sob licena livre ou GNU, apresentado na
Figura 4, utilizado para fins acadmicos e educacionais. Um grupo de
professores utilizou uma linguagem algortmica
em portugus, padronizada para definio
Conexo:
dos comandos. Por sua simplicidade e
Para baixar o software e
facilidade de uso, o PORTUGOL
conhecer a linguagem PORTUmuito utilizado academicamente nos
GOL, acesse: <http://www.dei.estt.ipt.
pt/portugol/>.
pases de lngua portuguesa, incluindo o Brasil.

18

Fundamentos de Lgica e Algoritmos Captulo 1

EAD-14-Algoritmos UniSEB

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

19

Algoritmos

O UAL, ou Unesa Algorithmic Language, um interpretador animado que, atravs da execuo e visualizao das etapas de um algoritmo,
auxilia no aprendizado 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 desenvolvido como Projeto Final
do curso de Informtica da Universidade Estcio de S. O ambiente de
desenvolvimento para Windows apresentado na Figura 5.

Figura 5 Interpretador UAL

Proibida a reproduo UniSEB

No decorrer da disciplina, aprenderemos a semntica e sintaxe da linguagem UAL aplicada criao dos algoritmos. Veremos que ela bem simples
e didtica, permitindo o aprendizado
de uma forma estruturada e a compreenso simples e visual da ferramenta.

20

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

Fundamentos de Lgica e Algoritmos Captulo 1

1.5 Construo de um algoritmo

EAD-14-Algoritmos UniSEB

Vimos anteriormente as etapas de resoluo de problema de Polya e


como elas podem 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.
Voc esquece constantemente de pagar contas e, por isso, resolve
desenvolver 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, deve-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 semelhanas 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:

21

Proibida a reproduo UniSEB

Algoritmos

22

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 linguagem. Para o exemplo apresentado, podemos escolher a
linguagem natural e descrever o problema da seguinte forma:
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 sobre 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 problemas?
Geralmente, esta 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 problema. Neste sentido, muito comum ouvirmos frases
como: Est funcionando, 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
suficiente para garantir que temos um programa correto e eficiente, pois
alguns programas podem funcionar para determinadas situaes e para
outras no. Alm disso, necessrio analisar a velocidade e o consumo

Fundamentos de Lgica e Algoritmos Captulo 1

de recursos, como que memria e processador o programa est utilizando,


antes de garantir que temos 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 formas mais complexas de clculo dos juros;
c) o processamento realizado neste algoritmo muito usual e
pode ser utilizando para muitos outros algoritmos.
Vimos anteriormente de forma direta algumas consideraes e preocupaes que o programador deve sempre ter em mente no momento de
estruturao e criao de um programa. claro que esta forma simplificada oferece subsdios para a soluo de problemas simples e o desenvolvimento de programas com complexidade baixa. Como j citado, no
decorrer do curso sero estudadas formas mais completas e complexas de
conceber e estruturar um sistema computacional, considerando 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 programao e conceito de programa.

EAD-14-Algoritmos UniSEB

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 estudo e na soluo de problemas. Ela apresenta formas e tcnicas
para estruturao e argumentao utilizadas na soluo de problemas.
Ela pode ser desenvolvida por meio do estudo dos mtodos formais
e estruturados 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 desenvol23

Algoritmos

vimento de algoritmos na soluo de problemas, respeitando regras da


lgica matemtica, aplicadas pelos programadores durante o processo de
construo do software.
Conceito de programa
Programa um algoritmo escrito ou codificado, que utiliza linguagem de programao. composto por um conjunto de entradas, que so
processadas e suas sadas resultantes. O processamento realizado por
meio de um conjunto de instrues e funes que sero convertidas em
linguagem de mquina e interpretadas ou executas por um computador,
para a realizao de uma ou mais tarefas.
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 contribuies 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. Saiba 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 >

Proibida a reproduo UniSEB

Reflexo

24

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

Fundamentos de Lgica e Algoritmos Captulo 1

importante que todos os conceitos vistos nesta 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 problemas 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. Nesta 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.

Leituras recomendadas

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

EAD-14-Algoritmos UniSEB

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

Algoritmos

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

Proibida a reproduo UniSEB

No prximo captulo, aprenderemos como fazer nossos primeiros


algoritmos ou programas 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.

26

Estrutura Sequencial

Cap

t u

lo

Aprendemos anteriormente o que


um algoritmo e como estrutur-lo.
Vamos agora ver na prtica como escrever
esses algoritmos utilizando linguagens predefinidas.
Aprenderemos a utilizar trs diferentes linguagens: o
UAL, para reforarmos conceitos utilizando nossa lngua nativa, para facilitar desta forma o entendimento, linguagem que poderamos classificar como pseudolinguagem;
o C++, que ser a linguagem base de programao estruturada
para o aprendizado de linguagem, 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 esta unidade apresenta os subsdios que sero
utilizados em todos os algoritmos e programas que voc fizer e sero
utilizados em todos os outros comandos.

Objetivos da sua aprendizagem

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.

Voc se lembra?

Estudamos anteriormente as quatro etapas para a construo de um


algoritmo e para a resoluo 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 principalmente 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. Falaremos 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 do computador, bem como sobre memria, volte s disciplinas
especficas e tenha estes conceitos claros para facilitar o entendimento.

28

Estrutura Sequencial Captulo 2

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 Figura 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 processados para algum lugar. Geralmente a entrada provm dos
dispositivos de entrada, 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 principal a tela ou o disco rgido (HD), que
tambm muito utilizado.
Analisando a estrutura bsica, podemos perceber que trata-se de
uma sequncia de etapas a ser executada, o que nos leva ao entendimento
da estrutura sequencial. 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.

EAD-14-Algoritmo UniSEB

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 ponto final deste. Nesta 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 defini29

Algoritmos

do por voc. Este 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>
...

Proibida a reproduo UniSEB

fimprog

30

Nas definies e apresentaes de estruturas, sempre que utilizamos um contedo entre os sinais de maior e menor (< >) como em <nomeDoPrograma> estamos indicando que algo que deve ser definido
por voc, programador, de acordo com seu programa ou aplicao. Neste 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 comando. As palavras reservadas int main () indicam o
incio da funo ou conjunto de cdigos principais, que sero executados
no incio do programa. Esta 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. Portanto no se preocupe em
entend-la agora. Veja a seguir a estrutura e um exemplo.

Estrutura Sequencial Captulo 2

Linguagem C++

Exemplo

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

Perceba que h, tanto na definio quanto no exemplo, as duas linhas iniciais 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 entender agora o que o pacote de funes de funes
predefinidas ou o namespace, mas ambos so necessrios para o funcionamento do programa.
No fluxograma, necessrio utilizar os smbolos de incio e fim
que so representados 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.

EAD-14-Algoritmo UniSEB

Fluxograma

Exemplo

Incio

Incio

..
.

123

Fim

Fim

2.3 Variveis

O principal objetivo dos algoritmos computacionais a manipulao de dados para gerar informaes, as quais podem ser especificadas

31

Algoritmos

pelo usurio ou geradas 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 guardar um dado temporariamente e alter-lo de acordo com nossa necessidade. Para o computador, o ideal que trabalhemos
indicando o endereo de memria onde os dados esto, mas, para facilitar
nossa vida, as linguagens de programao abstraem esta complexidade
por meio da criao da varivel.
De acordo com o tipo de informao que queremos armazenar ou
manipular, necessrio especificar o tipo que ser a varivel. Este conceito conhecido 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 computador, este tipo de dados informa como ele deve
guardar isso na memria.
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.

Proibida a reproduo UniSEB

2.3.1 Tipos de dados

32

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, diviso, multiplicao, potenciao,
a juno de um conjunto de letras para forma uma palavra, a juno de
palavras para formar uma frase etc. Veremos que em algoritmos e progra-

Estrutura Sequencial Captulo 2

mao 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
compostos 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 linguagens 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

Real

Nmeros fracionrios ou de
ponto flutuante

real

float

Caractere

Composto por um ou mais


caractere ou tambm conhecido como alfanumrico

string

char (apenas um
caractere)

Lgico

Tipo lgico que pode assumir os valores Verdadeiro


ou Falso

logico

bool

Conexo:
Quer saber mais detalhes
sobre variveis e tipos de dados?

EAD-14-Algoritmo UniSEB

Acesse:<http://www.metropoledigital.
ufrn.br/aulas/disciplinas/mat_aplicada/
aula_07.html>.

33

Algoritmos

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, esta uma etapa
muito importante, pois neste 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, informamos 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

Proibida a reproduo UniSEB

Logico

34

Aps declarar uma varivel, podemos utiliz-la da forma que desejarmos. Geralmente, a primeira ao relacionada a uma varivel a
atribuio de valores, 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.

Estrutura Sequencial 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 programao. 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++.

EAD-14-Algoritmo UniSEB

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 apresentados em dispositivos de sada como monitor ou
impressora. Durante o processo de construo de algoritmos, o programador pode contar com instrues especficas para carregar informaes fornecidas pelo usurio e para apresentar resultados 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 informao digitada pelo usurio com o teclado para uma
determinada varivel no escopo do algoritmo. Por outro lado, para a apre35

Algoritmos

sentao de uma informao na tela, utilizado um comando de sada especfico denominado escreva.
Iniciamos, assim, o uso de funes ou comandos predefinidos, como
o comando 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 dispositivo de entrada padro.
Vejamos abaixo como utilizar esses comandos nas diferentes linguagens.
COMANDO LEIA
Linguagem UAL

Linguagem C++

Sintaxe

leia <nomeDaVariavel>;

cin >> <nomeDaVariavel>;

Descrio

Palavra reservada leia seguida do nome da varivel.


possvel ler apenas uma
varivel de cada vez, seguido de ponto e vrgula.

Palavra reservada cin seguida do smbolo obrigatrio >> seguido do nome da


varivel, seguido de ponto e
vrgula.

leia v1;

cin >> v1;

leia v2;

cin >> v2;

leia v3;

cin >> v3;

Exemplos

importante nos atentarmos necessidade de declarar a varivel


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

Proibida a reproduo UniSEB

Fluxograma:

36

O smbolo anterior representa o comando que libera o teclado para


que o usurio digite o dado que lhe for solicitado. Como j apresentado,
consideramos sempre o teclado como o dispositivo de entrada padro.
Dentro do smbolo, vir o nome da varivel que receber o dado que
for digitado.

Estrutura Sequencial Captulo 2

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
tipos: real, real

nomes: conta, juros

Dados intermedirios
quantidade: 2
tipos: real, real

nomes: valor Juros, novoValor

Procedimento
1 obter conta, juros
2 valorJuros <- conta * juros
3 novoValor <- valor + valorJuros
4 exibir novo Valor

Veja o algoritmo implementado.


Lingaugem C++

EAD-14-Algoritmo UniSEB

Lingaugem UAL

37

Algoritmos

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

Proibida a reproduo UniSEB

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


pode ter algumas dificuldades para obter a sada mostrada anteriormente.
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
exemplo anterior foi 100.

38

Figura 8 Programa aguardando entrada.

Estrutura Sequencial Captulo 2

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

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.

EAD-14-Algoritmo UniSEB

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

Algoritmos

COMANDO ESCREVA
Linguagem UAL

Linguagem C++

Sintaxe

imprima <contedo>;

cout << <contedo>;

Descrio

Palavra reservada imprima seguida de uma varivel, de um conjunto de


caracteres ou de variveis
ou conjuntos de caracteres
separados por virgula., seguido de ponto e vrgula.

Palavra reservada cout


seguida do smbolo <<,
seguido de uma varivel,
de um conjunto de caracteres ou de variveis ou
conjuntos de caracteres
separados pelo smbolo
<<, seguido de ponto e
vrgula.

imprima v1;

cout << v1;

imprima Varivel: , v1;

cout << Varivel: << v1;

imprima v1, - , v2;

cout << v1 << - << v2;

Exemplos

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

Proibida a reproduo UniSEB

v1, v2

40

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 mensagens que facilitam o uso do programa. Veja a Figura 11 a
seguir com o novo cdigo e o resultado.

Estrutura Sequencial Captulo 2

EAD-14-Algoritmo UniSEB

Figura 11 Novo cdigo e resultado do programa de clculo de juros.

Devemos concordar que a soluo ficou bem melhor e mais elegante. Perceba que no ltimo comando de escrita utilizamos um smbolo
diferente \n. Este smbolo realiza a quebra de linha ou insere uma linha
na impresso. Compare a ltima linha do resultado com o anterior. No anterior, quando no tnhamos o \n, o texto do programa UAL Press any key to continue... est
Conexo:
na mesma linha logo aps o valor calcuPara conhecer mais smbolado; j neste exemplo o texto est uma
los, consulte a tabela ASCII:
linha abaixo, desta forma conseguimos
<http://en.wikipedia.org/wiki/ASCII>
estruturar melhor a apresentao.
Alm desses outros smbolos, podem
ser utilizados para formatar melhor a
sada estes smbolos esto presentes na
tabela ASCII, voc pode consult-la para
identificar novas possibilidades e test-los.
41

Algoritmos

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 histrica 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 aritmticas, relacionais ou lgicas, conforme estudaremos a seguir.

2.6.3 Expresses aritmticas

As expresses aritmticas utilizam os operadores aritmticos da matemtica tradicional para criar expresses capazes de resolver os mais variados tipos de funes. Neste 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.

Proibida a reproduo UniSEB

Linguagem UAL

42

Linguagem C++

Figura 12 Algoritmo computacional que utiliza expresses aritmticas.

Estrutura Sequencial Captulo 2

A Figura 13 apresenta o resultado da execuo do algoritmo.

Figura 13 Resultado da execuo do algoritmo

A precedncia ou ordem de execuo dos operadores aritmticos a


mesma que aprendemos na matemtica. Caso seja preciso alterar a ordem,
necessrio o uso de parnteses ( ) delimitando as operaes que devem
ser realizadas primeiro, utilizando os mesmo princpios da matemtica.

2.6.4 Expresses relacionais


Explicativo
Em uma expresso relacional, o resultado produzido pela avaliao
da expresso 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
comparar 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:

EAD-14-Algoritmo UniSEB

Operador

Linguagem UAL

Linguagem C++

maior

>

>

menor

<

<

menor ou igual

<=

<=

maior ou igual

>=

>=

igual

==

==

diferente

<>

!=

43

Algoritmos

A Figura 14 demonstra a construo de um algoritmo computacional que utiliza expresses relacionais. Note, no algoritmo, que todos os
operadores relacionais so expresses por meio de smbolos.
Linguagem C++

Figura 14 Algoritmo computacional que demonstra a utilizao de expresses e


operadores relacionais.

Proibida a reproduo UniSEB

Neste caso, apresentamos o exemplo apenas na linguagem C++,


pois o programa 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.

44

Figura 15 Resultado da execuo do algoritmo

Estrutura Sequencial Captulo 2

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


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

2.6.5 Expresses lgicas

Na construo de algoritmos computacionais tambm possvel


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

Linguagem UAL

Linguagem C++

negao (NOT)

conjuno (E)

&&

&&

disjuno (OU)

||

||

<no existe>

disjuno-exclusiva (XOR)

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


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

EAD-14-Algoritmo UniSEB

Linguagem C++

Figura 16 Algoritmo computacional que demonstra a utilizao de expresses e


operadores lgicos.
45

Algoritmos

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 seguintes
referncias:
<http://pt.wikipedia.org/wiki/Tabela_verdade>

Proibida a reproduo UniSEB

Os operadores lgicos so muito importantes para a construo de programas, principalmente para a elaborao de expresses relacionais compostas. Para complementar seu estudo, voc poder utilizar
as seguintes referncias:
<http://pt.wikipedia.org/wiki/ Operadores_l%C3%B3gicos>
<http://wwwusers.rdc.puc-rio.br/ rmano/oplog.html>

46

Com isso, conclumos o estudo a respeito dos operadores e das expresses aritmticas, relacionais e lgicas. Aproveite este momento para
construir algoritmos a partir das atividades propostas.
Para demonstrar a utilizao dos comandos e a estrutura estudadas
anteriormente, vamos construir uma calculadora simples de quatro operaes. Este programa de utilizar da estrutura de um programa, obtendo
as entradas necessrias, realizao do processamento dos dados e sada.

Estrutura Sequencial Captulo 2

O incio e o fim do programa devem estar corretamente definidos. O processamento deve ser executado utilizando as operaes aritmticas.
Nesta calculadora, o usurio fornecer dois valores numricos para
serem realizados os clculos de soma, subtrao, multiplicao e diviso.
Para a leitura dos valores, ser utilizado o comando leia e para a apresentao dos resultados ser necessrio o comando escreva. Vamos identificar
os componentes que j aprendemos para resolver aquele problema. A Figura 18 apresenta o algoritmo codificado para soluo do problema.
Dados de entrada
quantidade: 2
tipos: real, real

nomes: valor1, valor2

Dados intermedirios
quantidade: 4
tipos: real, real, real, real

nomes: soma, sub, mult, div

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

EAD-14-Algoritmo UniSEB

Linguagem UAL

Linguagem C++

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


47

Algoritmos

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

Atividades

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

Proibida a reproduo UniSEB

02. Escreva um algoritmo computacional capaz de calcular a rea de um


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

48

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


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

Estrutura Sequencial Captulo 2

Reflexo

Nesta 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 estutura bsica fiquem mais fceis e sejam parte integrante de seu pensamento estruturado.

Leituras recomendadas

Uma forma fcil e estruturada para que voc teste seus algoritmos
e verifique seu funcionamento a utilizao do teste de mesa. Para
aprender como realiz-lo, acesse: <http://gomeshp.plughosting.com.
br/ed/testemesa.htm>.

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

EAD-14-Algoritmo UniSEB

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.

49

Algoritmos

No prximo captulo

Proibida a reproduo UniSEB

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.

50

Estruturas de Deciso

Cap

t u

lo

Em nossa vida, geralmente nos


deparamos com problemas que, em determinadas 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 estrutura 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 da sua aprendizagem

Utilizar operadores relacionais e lgicos.


Conhecer as estruturas de deciso.
Construir algoritmos utilizando se ... ento ... seno.
Construir algoritmos utilizando comandos de deciso aninhados.

Voc se lembra?

Na unidade anterior, estudamos operadores lgicos e relacionais.


primeira vista, eles no parecem 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. Associados estrutura de deciso que ser
estudada nesta unidade, eles permitem a criao de diferentes caminhos dentro de nossos programas, permitindo-nos
resolver problemas mais complexos.

Algoritmos

3.1 Caractersticas de estrutura de deciso

A codificao de um algoritmo computacional baseada em uma


estrutura sinttica 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 executar instrues diferentes. Em outras palavras,
um determinado trecho do algoritmo ser executado apenas quando o
valor de uma 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:

Proibida a reproduo UniSEB

52

Condicional simples
Condicional composta
Condicional aninhada
Condicional mltipla

O aprendizado do comando condicional ou de deciso nos possibilita vislumbrar o grau de complexidade das tarefas que os algoritmos
podero executar a partir de agora. No se assuste com o tamanho dos
programas nesta unidade. 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 comando condicional for verdadeira.
Condicional composta: nesta forma, existem dois blocos de comando, um que ser executado caso a condio de teste do comando condicional seja verdadeira, 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 (aninhado); caso no seja, um outro teste (encadeado) ser feito at que todas as possibilidades de respostas sejam contempladas.

Estruturas de Deciso Captulo 3

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.
Teste
O teste uma expresso relacional que compara valores dos seus
operandos.
Neste momento, muito importante termos de forma clara o que o
teste. uma expresso que utiliza os operadores relacionais e lgicos vistos
na unidade anterior 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, segue a tabela verdade com as respetivas sadas para cada possvel
combinao de entradas.
Tabela verdade
E

OU

EAD-14-Algoritmos UniSEB

No

53

Algoritmos

3.2 Comando condicional simples


A estrutura condicional que pode ser definida em linguagem algortmica e de programao 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 bloco de instrues ser executado apenas aps a avalio de uma
condio. O resultado da avalio ser sempre um valor lgico, ou seja,
verdadeiro ou falso. Dessa forma, o bloco de instrues ser executado
quando a avaliao da expresso 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>)
{
<bloco de comandos>
}

se (nota >= 6)
{
imprima Aprovado;
}

Linguagem C++

EXEMPLO

if (<teste>)
{
<bloco de comandos>
}

if (nota >= 6)
{
cout << Aprovado;
}

FLUXOGRAMA

EXEMPLO

Proibida a reproduo UniSEB

Teste

54

Nota > = 6

..
.

Aprovado

Estruturas de Deciso Captulo 3

A melhor forma de aprender e entender o uso das estruturas de programao praticando. Vamos a um exemplo completo, apresentado na
Figura 20. O programa recebe um nmero inteiro como entrada e verifica
se positivo ou negativo.
Linguagem UAL

Linguagem C++

EAD-14-Algoritmos UniSEB

Figura 20 Algoritmo com comando condicional simples que verifica se um nmero


positivo ou negativo.

Perceba que no exemplo C++ no foram utilizados os parnteses


antes e depois do bloco de comandos internos do comando condicional.
Em C++, quando 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 possibilidades de sada diferente: a mensagem Este nmero positivo ou Este nmero negativo ser exibida de acordo com o valor
informado pelo usurio. Assim, o algoritmo realiza o desvio do fluxo de
execuo a partir do valor definido na entrada de dados.

55

Algoritmos

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 comparao. Lembre-se de que, se quisermos
alterar a ordem de precedncia, precisaremos delimitar as operaes com
parnteses, porm isso no necessrio para este exemplo.

Proibida a reproduo UniSEB

Linguagem UAL

56

Linguagem C++

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

Estruturas de Deciso Captulo 3

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.

EAD-14-Algoritmos UniSEB

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 expresso. Como uma expresso
condicional pode resultar apenas em um valor lgico verdadeiro ou falso,
a estrutura condicional composta permite codificar o comportamento do
fluxo de execuo do algoritmo em todas as situaes possveis.
O trecho da estrutura condicional que especifica o que ser realizado quando a expresso resultar em um valor falso conhecido como
seno. Nas linguagens de programao o bloco seno chamado de else.
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 dever ser escrito
Reprovado.
57

Algoritmos

Linguagem UAL

EXEMPLO

se (<teste>)
{
<bloco de comandos>
}
seno
{
<bloco de comandos>
}

se (nota >= 6)
{
imprima Aprovado;
}
seno
{
imprima Reprovado;
}

Linguagem C++

EXEMPLO

if (<teste>)
{
<bloco de comandos>
}
else
{
<bloco de comandos>
}

if (nota >= 6)
{
cout << Aprovado;
}
else
{
cout << Reprovado;
}

FLUXOGRAMA

EXEMPLO

Teste

Proibida a reproduo UniSEB

..
.

58

Nota >= 6

..
.

V
Aprovado

Reprovado

Veja na Figura 26 o exemplo de como podemos codificar o algoritmo anterior de verificao se um nmero par ou mpar utilizando o
comando condicional composto.

Estruturas de Deciso Captulo 3

Linguagem UAL

Linguagem C++

Figura 26 Algoritmo com comando condicional composto que verifica se um nmero


par ou mpar.

O resultado da execuo do algoritmo, para os possveis valores de


entrada, apresentado na Figura 27 e na Figura 28.

EAD-14-Algoritmos UniSEB

Figura 27 Resultado da execuo do algoritmo com entrada par

Figura 28 Resultado da execuo do algoritmo com entrada mpar

59

Algoritmos

Veja o exemplo codificado na Figura 29.


Linguagem UAL

Linguagem C++

Proibida a reproduo UniSEB

Figura 29 Algoritmo com comando condicional composto utilizando composio de


condies de teste.

60

Neste 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 possibilidades, 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 verifica se um caso ou outro verdadeiro sendo um dos

Estruturas de Deciso Captulo 3

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

Figura 31 Resultado da execuo do algoritmo para entrada N

EAD-14-Algoritmos UniSEB

3.4 Comando condicional aninhado

A estrutura condicional aninhada um tipo de estrutura em que uma


condicional 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 condio 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, dever ser escrito Reprovado.

61

Algoritmos

Linguagem UAL

EXEMPLO

se (<teste>)
{
<bloco de comandos>
}
seno
{
se (<teste>)
{
<bloco de comandos>
}
seno
{
<bloco de comandos>
}
}

se (nota >= 6)
{
imprima Aprovado;
}
se (nota >= 4)
{
imprima imprima Recuperao;
}
seno
{
imprima Reprovado;
}
}

Linguagem C++

EXEMPLO

if (<teste>)
{
<bloco de comandos>
}
else
{
if (<teste>)
{
<bloco de comandos>
}
else
{
<bloco de comandos>
}
}

if (nota >= 6)
{
cout << Aprovado;
}
else
{
if (nota >= 4)
{
cout << Recuperao;
}
else
{
cout << Reprovado;
}
}

FLUXOGRAMA

EXEMPLO

Teste

Nota >= 6

Proibida a reproduo UniSEB

Teste

62

F
..
.

..
.
V

F
Nota >= 4

..
.

F
Reprovado

Aprovado
V

Recuperao

Estruturas de Deciso Captulo 3

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 identificar a utilizao de estruturas condicionais encadeadas. A
Figura 32 demonstra sua codificao.

EAD-14-Algoritmos UniSEB

Linguagem UAL

63

Proibida a reproduo UniSEB

Algoritmos

Linguagem C++

64

Estruturas de Deciso Captulo 3

Fluxograma
Incio
a, b, c
F

b, a, c

c<a

a<b

a<b

c, b, a

b, c, a

a, b, c

c<b

c<a

c, a, b

a, c, b

Fim

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

EAD-14-Algoritmos UniSEB

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 resultado da execuo do algoritmo pode ser visualizado
na Figura 33.

Figura 33 Resultado da execuo do algoritmo

65

Algoritmos

O prximo exemplo apresentar a codificao de um algoritmo


que simula o processo de autenticao de um sistema. A autenticao de
usurios geralmente 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 usurio informado ser joo, em que ser
solicitada a senha e esta ser verificada.

Proibida a reproduo UniSEB

Linguagem UAL

66

Figura 34 Algoritmo com comando condicional aninhada que realiza login de um usurio.

Os possveis resultados que podem ser encontrados com a execuo


da aplicao podem ser visualizados nas Figuras 35, 36 e 37.

Estruturas de Deciso Captulo 3

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.

EAD-14-Algoritmos UniSEB

3.5 Comando condicional mltiplo

Um problema frequente que ocorre quando temos uma nica varivel podendo assumir diversos valores diferentes, em que, para cada valor, teremos uma ao associada. Para resolver este problema de imediato,

67

Algoritmos

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.

Proibida a reproduo UniSEB

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

68

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
melhor e mais eficiente problemas como o apresentado anteriormente. Ela
permite especificar no algoritmo que, dentre as condies possveis, apenas uma condio poder ser executada. Este 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, ainda, uma estrutura especfica denominada escolha. Para o uso da
estrutura escolha, precisamos estar atentos a exigncias, como as listadas
a seguir

Estruturas de Deciso Captulo 3

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. Este 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 substitu-los em uma linguagem, mas em outra no. A seguir, apresentado a estrutura do comando escolha em UAL, C++ e Fluxograma.
Linguagem UAL
(no disponvel na verso)

Linguagem C++

escolha (<variavel>)

switch (<variavel>)

{
case <valor1>: <comandos>

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

EAD-14-Algoritmos UniSEB

default : <comandos>

69

Algoritmos

FLUXOGRAMA
valor == v1

Comandos 1

F
valor == v2

Comandos 2

F
valor == v3

Comandos 3

F
valor == vn

Comandos n

Proibida a reproduo UniSEB

Comandos 1

70

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.
Vejamos na Figura 39 o exemplo dos meses apresentados anteriormente utilizando a estrutura escolha.

Estruturas de Deciso Captulo 3

EAD-14-Algoritmos UniSEB

Linguagem C++

Figura 39 Algoritmo C++ utilizando estrutura escolha que imprime o nome do ms a partir
no nmero.

71

Algoritmos

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 opes, 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 calculadora que fizemos na unidade anterior, porm com a opo de o
usurio escolher a operao que deseja executar.

Proibida a reproduo UniSEB

Linguagem C++

72

Figura 42 Algoritmo C++ utilizando estrutura escolha como menu do programa de


calculadora.

Estruturas de Deciso Captulo 3

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

Figura 43 Resultado da execuo do algoritmo.

Atividades

01. Escreva um algoritmo computacional que receba quatro valores do


tipo inteiro e determine o menor elemento.

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

EAD-14-Algoritmos UniSEB

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


a classificao segundo seus lados.

73

Algoritmos

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

Automveis

Caminhes

abril

maio

junho

julho

agosto

5e6

setembro

1e2

outubro

3, 4 e 5

novembro

6, 7 e 8

dezembro

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
estruturao. Por isso, pratique o mximo que puder para melhorar sua
compreenso e entendimento.

Proibida a reproduo UniSEB

Leituras recomendadas

74

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>

Estruturas de Deciso Captulo 3

Referncias
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.
ASCENCIO, A. F. G.; EDILENE, A. V. de. Fundamentos da programao de computadores: Algoritmos, 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. Linguagem UAL. Disponvel em: <http://
geocities.ws/ual_language/ual.html>. Acesso em: 25 abr. 2014.

No prximo captulo

EAD-14-Algoritmos UniSEB

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.

75

Proibida a reproduo UniSEB

Algoritmos

Minhas anotaes:

76

Estruturas de Repetio

Cap

t u

lo

Neste captulo, estudaremos as


estruturas de repetio utilizadas nos
algoritmos. Estudaremos trs estruturas de
repetio diferentes, para, enquanto e faa ...
enquanto. Elas so muito importantes para facilitar
a vida do programador e permitir a criao de programas maiores e mais complexos. Seu entendimento 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 da sua aprendizagem

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.

Voc se lembra?

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.

Algoritmos

4.1 Caractersticas da estrutura de repetio

Proibida a reproduo UniSEB

No desenvolvimento de algoritmos computacionais, muitas vezes


necessitamos 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.
Provavelmente voc utiliza um despertador para acordar de manh. J
pensou 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?
Repetiramos 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 este 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.
Aprenderemos 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 trecho de cdigo diversas vezes, ns o escrevamos uma nica vez e a estrutura utilizada se encarrega de repetir.
Para exemplificar, foram apresentadas trs frases, cada uma delas
apresenta um tipo diferente de repetio: a estrutura pr-testada, a pstestada 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 associada diretamente ao valor de
uma determinada varivel de controle.

78

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.

Estruturas de Repetio Captulo 4

Estudaremos detalhadamente as diferentes opes e descobriremos


as vantagens e desvantagens de cada uma delas, para determinados tipos
de aplicao. Assim voc ser capaz de selecionar a melhor estrutura para
cada aplicao. 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 programa, ou aumento de complexidade de cdigo deixando-o
mais suscetvel a erros.

EAD-14-Algoritmos UniSEB

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. Neste 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 nmero 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 poderia ento se perguntar: se conhecemos a quantidade
previamente, por que no repetimos o cdigo este tanto de vezes, ao invs
de utilizar uma estrutura? 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 clculo 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.
79

Algoritmos

Torna-se simplesmente invivel. Alm do mais, as estruturas de repetio


so muito fceis, basta aprender sua estrutura. Vamos l!
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 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

Proibida a reproduo UniSEB

Exemplos: i <- i+1; i<-i+2; i++; i--;

80

Figura 44 Exemplo estrutura para em UAL

Estruturas de Repetio Captulo 4

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

EAD-14-Algoritmos UniSEB

As chaves do bloco de comandos so opcionais no caso de haver um nico comando.

Figura 45 Exemplo estrutura para em C++

81

Algoritmos

FLUXOGRAMA

EXEMPLO
Incio

Repetio
com contador

Count < 1, 3, 1

V
Digite nmero > 0

V
Bloco de
comandos

NUM
Num * 2

Fim

Proibida a reproduo UniSEB

Segue abaixo alguns exemplos de uso da estrutura para:

82

Linguagem UAL

Linguagem C++

Repetir 100 vezes

para(c<-1; c<=100; c++)

for(c=1; c<=100; c++)

Repetir 30 vezes

para(c<-1; c<=30; c++)

for(c=1; c<=30; c++)

Contar de 10 at 1
decrementando de 1

para(c<-10; c>=1; c--)

for(c=10; c>=1; c--)

Contar de 10 at 1
decrementando de 2

para(c<-10; c>=1; c<-c-2)

Contar de 0 at 100
de 10 em 10

para(c<-0; c<=100; c<-c+10)

for(c=10; c>=1; c=c-2)


for(c=10; c>=1; c-=2)
for(c=0; c<=100; c=c+5)
for(c=0; c<=100; c+=5)

A listagem cdigo 9 demonstra a utilizao da estrutura de repetio para. Neste 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 entrada pelo teclado e, ao final, apresenta a soma total destes valores. Um detalhe importante a respeito de
acumuladores est relacionado necessidade de inicializao da varivel

Estruturas de Repetio Captulo 4

acumuladora. Para evitar inconsistncias na soma dos valores, fundamental que a varivel acumuladores seja iniciada com o valor zero.
Linguagem UAL
prog exemplo
int cont;
real valor, acumulador;
acumulador <- 0.0;
para(cont<-1; cont<=10; cont++)
{
imprima \nValor , cont, : ;
leia valor;
acumulador <- acumulador + valor;
}
imprima \nSoma dos valores: , acumulador;
fimprog

Linguagem C++
#include <iostream>
using namespace std;
int main()
{
int cont;
float valor, acumulador;
acumulador = 0;
for(cont=1; cont<=10; cont++)
{
cout << \nNumero: << cont;
cin >> valor;
acumulador = acumulador + valor;
}
cout <<\nSoma dos valores: << acumulador;
}

O resultado da execuo do algoritmo que demonstra a utilizao da


estrutura de repetio para apresentado na Figura 46.

EAD-14-Algoritmos UniSEB

Figura 46 Resultado da execuo do algoritmo

Na estrutura de repetio para, os passos iterativos do lao tambm


podem ocorrer de maneira decremental. Neste prximo exemplo, apresentada a codificao de um algoritmo que exibe na tela os nmeros pares
no intervalo de 10 at 1. Note que a varivel contadora decrementada at
atingir a condio de parada.
83

Algoritmos

Linguagem UAL

Linguagem C++

prog exemplo
int cont;
para(cont<-10; cont>1; cont--)
{
se (cont % 2 == 0)
{
imprima \n, cont;
}
}
fimprog

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

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


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

Figura 47 Resultado da execuo do algoritmo

Proibida a reproduo UniSEB

4.3 Comando de repetio com teste lgico no incio


- ENQUANTO

84

Em programao, comum sabermos quantas vezes vamos precisar


repetir determinado 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, precisamos 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, utilizamos 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 cdigo, ou com teste ao

Estruturas de Repetio Captulo 4

final, depois da execuo do trecho de cdigo. Neste tpico, vamos aprender


a estrutura enquanto, que possui teste lgico no incio.
Na estrutura de repetio enquanto, um determinado bloco de instrues executado sucessivamente enquanto o resultado da expresso
condicional da condio de parada permanecer verdadeiro. Assim, enquanto a condio de parada resultar em verdadeiro, o bloco ser executado. Neste tipo de estrutura, o bloco de instrues pode ser executado um
nmero predeterminado 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.

EAD-14-Algoritmos UniSEB

Exemplos: i >= 10; i>strtam(nome); i <= x+10;

Figura 48 Exemplo estrutura enaquanto em UAL


85

Algoritmos

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;

Proibida a reproduo UniSEB

Figura 49 Exemplo estrutura enaquanto em C++

86

Estruturas de Repetio Captulo 4

FLUXOGRAMA

EXEMPLO
Incio
Digite nmero > 0
NUM

Test
V
Bloco de
comandos

F
Num > 0?

V
Num * 2

Digite nmero > 0


NUM

Fim

EAD-14-Algoritmos UniSEB

A listagem cdigo a seguir apresenta na codificao a estrutura de


repetio enquanto para um lao de repetio controlado por uma varivel
contadora. Este tipo de codificao representa a adaptao da estrutura de
repetio para na sintaxe da estrutura enquanto. Neste exemplo, o algoritmo computacional tem como objetivo apresentar os valores pares no
intervalo de 1 at 10, com isso voc poder comparar com a codificao
da listagem 10 que realiza uma tarefa semelhante.

87

Algoritmos

Linguagem UAL

Linguagem C++

prog exemplo
int cont;
cont <- 1;
enquanto(cont<=10)
{
se (contador % 2 = 0)
{
imprima \n, contador;
}
cont <- cont + 1;
}
fimprog

#include <iostream>
using namespace std;
int main()
{
int cont = 1;
while(cont <= 10)
{
if( (cont%2) == 0)
cout<<\n <<cont;
cont++;
}
}

O resultado da execuo do algoritmo pode ser visualizado na


Figura 50.

Proibida a reproduo UniSEB

Figura 50 Resultado da execuo do algoritmo

88

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. Nestes casos, uma expresso condicional determina se o lao ser ou
no executado novamente. A listagem cdigo 11 demonstra a codificao
de uma estrutura de repetio 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.

Estruturas de Repetio Captulo 4

Linguagem UAL

Linguagem C++

prog exemplo
int numero, pos, neg;
numero <- 1;
pos <- 0;
neg <- 0;
enquanto(numero <> 0)
{
imprima \n Escreva o nmero: ;
leia numero;
se (numero > 0)
{
pos<- pos +1;
} seno
{
se (numero < 0)
{
neg<- neg +1;
}
}
}
imprima \nTotal de nmeros positivo:
, pos;
imprima \nTotal de nmeros negativos, neg;
fimprog

#include <iostream>
using namespace std;
int main()
{
int numero = 1;
int pos, nerg;
pos = neg = 0;
while(cont != 0)
{
cout<<\nEscreva o nmero;
cin>>numero;
if( (numero > 0)
pos++;
else
{
if( (numero < 0)
neg++;
}
}
cout<<\nTotal de nmeros positos:
<<pos;
cout<<\nTotal de nmeros negativos:
<<neg;
}

EAD-14-Algoritmos UniSEB

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

Figura 51 Resultado da execuo do algoritmo


89

Algoritmos

Proibida a reproduo UniSEB

importante percebermos que no uso do enquanto necessrio que


haja uma atribuio ou entrada do valor que ser utilizado na verificao
condicional 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 valor 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 recursos e, dessa forma, todas as linguagens posteriores
ao C adotaram este modelo, tornando isso possvel.
Veja o exemplo a seguir.

90

Enquanto

Para

using namespace std;


int main()
{
int num;
cout<<\nNumero: ;
cin>>num;
while(num <= 0)
{
cout<<\n<<num*2;
cout<<\nNumero: ;
cin>>num;
}
cout<<\n;
system(pause);
}

using namespace std;


int main()
{
int num;
for( ; ; );
{
cout<<\nNumero: ;
cin>>num;
if(num <= 0 ) break;
cout<<\n<<num*2;
}
cout<<\n;
system(pause);
}

Neste exemplo, a estrutura for foi utilizada sem nenhum parmetro,


combinada com um if e break, simulando o funcionamento do while.

Estruturas de Repetio Captulo 4

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 estrutura enquanto realizar o teste condicional para
determinar o trmino da repetio 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.
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.

EAD-14-Algoritmos UniSEB

Exemplos: i >= 10; i>strtam(nome); i <= x+10;

Figura 52 Exemplo estrutura faa enquanto em UAL


91

Algoritmos

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.

Proibida a reproduo UniSEB

Figura 53 Exemplo estrutura faa enquanto em C++

92

Estruturas de Repetio Captulo 4

FLUXOGRAMA

EXEMPLO
Incio
Digite nmero > 0

Bloco de
comandos

NUM
Num * 2

Test
F

Num > 0?
F
Fim

EAD-14-Algoritmos UniSEB

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


laos de repetio tanto controlados por contador, quanto controlados por
condio lgica. 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. Neste exemplo,
a estrutura de repetio executada sempre que o que usurio informar a
opo N (No).

93

Algoritmos

Proibida a reproduo UniSEB

Linguagem UAL

94

prog exemplo
int total;
real nota, soma, maior, menor, media;
string resposta;
soma <- 0.0;
total <- 0;
faca
{
total <- total +1;
imprima \nNota , total, : ;
leia nota;
soma <- soma + nota;
se (total == 1)
{
maior <- nota;
menor <- nota;
} senao
{
se (nota > maior)
{
maior <- nota;
}
se (nota < menor)
{
menor <- nota;
}
}
imprima Deseja continuar [s] ou [n]? ;
leia resposta;
}
enquanto(resposta==s
||
resposta==S)
media <- soma / total;
escreva \nMdia das notas: , media;
escreva \nMaior nota..........: , maior;
escreva \nMenor nota.........: , menor;
fimprog

Linguagem C++
#include <iostream>
using namespace std;
int main()
{
int total;
float nota, soma, maior, menor, media;
char resposta;
soma = 0;
total = 0;
do{
total++;
cout<<\nNota <<total<<: ;
cin>>nota;
if( (total == 1)
{
maior = nota;
menor = nota;
} else
{
if (nota > maior)
maior = nota;
if (nota < menor)
menor = nota;
}
cout\nDeseja continuar [s] ou [n]? ;
cin>>resposta;
} while(resposta==n || resposta==N);
media = soma / total;
cout << \nMdia das notas: << media;
cout << \nMaior nota..........: << maior;
cout << \nMenor nota.........: << menor;
}

O programa acima l notas at que o usurio informe que no deseja


continuar respondendo n ou N pergunta e posteriormente imprime
a mdia das notas, a maior e a menor nota. A Figura 10 apresenta o resul-

Estruturas de Repetio Captulo 4

tado da execuo 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 repetidamente
enquanto o usurio no escolher a
opo de sada, como no exemplo
anterior.

Conexo:
Voc pode utilizar as sugestes
de endereos apresentados abaixo para complementar seus estudos a
respeito de estruturas de repetio: <http://
algoritmizando.com/desenvolvimento/aprendaa-programar-11-algo-ritmos-estruturas-derepeticao-3/>
<http://algoritmizando.com/desenvolvimento/
aprenda-a-programar-10-algo-ritmos/>
<http://www.ufpa.br/sampaio/curso_de_icc/icc/aula%2011/
repita_ate.htm>

4.5 Quando utilizar cada estrutura de repetio

EAD-14-Algoritmos UniSEB

Acredito que neste momento voc deva estar se perguntando: quando devo usar cada uma das estruturas? normal que haja preferncia por
uma ou outra estrutura de repetio, porm existem algumas indicaes
ou melhores aplicaes, conforme segue.

4.5.1 Indicao do para

Estrutura ideal quando o nmero de repeties for conhecido durante a elaborao do algoritmo ou quando o usurio puder fornec-lo
durante a execuo.
95

Algoritmos

Na linguagem C++, essa estrutura recebe o nome de for e, diferentemente 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 desconhecido.
Simula com facilidade a estrutura do faca...enquanto e a estrutura
do para (desde que criemos uma varivel que ter seu valor incrementado/
decrementado 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 antes de executar o bloco, pode ser que nem execute o bloco se a
condio de incio for falsa.

4.5.3 Indicao do faa...enquanto

Proibida a reproduo UniSEB

A estrutura indicada para as situaes em que o nmero de


repeties desconhecido. Sua diferena em relao estrutura do enquanto o teste ao final, aps a execuo do bloco de cdigo, que executa
o bloco de comandos pelo menos uma vez. Essa estrutura tambm precisa
de um teste para interromper a repetio.
A estrutura da repetio mais parecida com a estrutura do para,
no precisando de leitura/atribuio antes do faca para entrar na estrutura,
pois testa, como j 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 precisando 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.

96

Reflexo

Quando as estruturas de repetio so introduzidas, deparamo-nos


com a possibilidade de resolver muitos exerccios interessantes, dada as
possibilidades e complexidades que elas permitem.

Estruturas de Repetio Captulo 4

Alm disso, comeamos a construir programa com aparncia mais


profissional.
Os contedos apresentados nesta unidade precisam de muita prtica
e dedicao. As aplicaes e formas de utilizao das estruturas de repetio so muito variadas e sero dominadas apenas com a prtica.
Com este tipo de estrutura de repetio, contemplamos as funes
ou estruturas bsicas dos principais paradigmas de programao. muito
importante que voc, como futuro programador, tenha completo domnio
sobre todos, pois o uso combinado permitir o desenvolvimento de praticamente qualquer tipo de aplicao.

Atividades

01. Construa um algoritmo que escreva 100 vezes a frase: Algoritmo s


se aprende praticando.

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

EAD-14-Algoritmos UniSEB

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

97

Algoritmos

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

05. Elabore um algoritmo que calcule o total de nmeros primos entre 1 e


1000. Para isso, utilize a estrutura de repetio para.

Leituras recomendadas

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

Proibida a reproduo UniSEB

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.

98

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

Estruturas de Repetio Captulo 4

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

EAD-14-Algoritmos UniSEB

Vimos neste e no decorrer dos captulos todos os comandos e estruturas bsicas de algoritmos e das linguagens de programao em geral
e j conseguimos resolver praticamente qualquer problema. No prximo
captulo veremos algumas estruturas de dados que nos permitiro realizar
computao de um volume maior de dados tratando de problemas mais
complexos, com menor quantidade de cdigo.

99

Proibida a reproduo UniSEB

Algoritmos

Minhas anotaes:

100

Estrutura de Dados
Homogneas

Un

ida

de

Neste captulo vamos iniciar o estudo


estruturas de dados, mais especificamente
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 praticado 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 da sua aprendizagem

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.

Voc se lembra?

Voc se lembra da teoria de conjuntos aprendida no ensino bsico?


importante lembrar estes 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 alfabeto. 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}

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

Estrutura de Dados Homogneas Captulo 5

EAD-14-Algoritmos UniSEB

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 conseguimos, 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 representar 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, respectivamente. No se preocupe neste momento com a sintaxe necessria para criao, cada linguagem possui a sua.
Basicamente, estas estruturas podem ser de dois tipos: homogneas
e heterogneas.
Estruturas homogneas so estruturas como o ponto definido anteriormente, 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 programas e representao de elementos do mundo real em um
programa. Como, por exemplo, a representao dos dados de uma pessoa.
Geralmente uma pessoa possui um conjunto de dados que podem ser de
diferentes tipos, como: nome, idade, sexo, endereo, telefone, cpf, rg.

103

Algoritmos

Podemos notar que entre os dados temos diferentes tipos; alguns so literais, como: nome, endereo, sexo, enquanto 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
complexos e heterogneos do mundo real. Novamente, no se preocupe
com a sintaxe de estrutura; mais adiante, no curso, voc aprender outras
estruturas para representar 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 manipular 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.

Proibida a reproduo UniSEB

Este um exemplo de uma String.

104

A representao fsica de uma varivel do tipo String um conjunto


de caracteres finalizado pelo caractere nulo, cujo valor inteiro igual a
zero e representado pelo smbolo \0, ou barra invertida zero, conhecido
tambm apenas como barra zero. Logo, a representao da varivel nome
com o contedo Maria, dada da seguinte forma:

Estrutura de Dados Homogneas Captulo 5

Nome
M

\0

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 dimenses m por n, ou seja, ela possui um
nmero m de linha e um nmero n de colunas.

ai,j

m linhas

Matriz m por n

n colunas

a1,1

a1,2

a1,3 ... a1,n

a2,1

a2,2

a2,3 ... a2,n

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

EAD-14-Algoritmos UniSEB

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


Ficheiro:Matriz_organizacao.png>).

Quando temos uma matriz em que m e n so diferentes de zero,


essa matriz bidimensional, ou seja, possui duas dimenses. Este 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.
105

Algoritmos

5.3.1 Conceito de vetor

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


computacionais, 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
computador. Eles so estruturados de forma sequencial, onde o endereo
base, ou endereo do primeiro elemento, o prprio endereo do vetor, e
todos os outros 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

\0

A letra r o terceiro elemento do vetor, ou seja, est na posio 2,


logo seu endereo ser:

Proibida a reproduo UniSEB

1200 + 2*(tamanho do char)

106

Considerando o tamanho do char como 4, temos:


1200 + 2*4 = 1208

Estrutura de Dados Homogneas Captulo 5

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


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.

EAD-14-Algoritmos UniSEB

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 posteriormente 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:

107

Algoritmos

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

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

Proibida a reproduo UniSEB

string nome = Joao;

108

char nome[5] = Joao;

Perceba que a inicializao feita utilizando-se os valores entre


chaves, divididos 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 definido 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. Neste 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:

Estrutura de Dados Homogneas Captulo 5

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;

/* 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] = ;

EAD-14-Algoritmos UniSEB

Para atribuir um valor a uma posio de um vetor, indicamos a posio desejada entre 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 queremos 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 precisar 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?

109

Algoritmos

Linguagem UAL

Linguagem C++

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

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

Esta a forma mais simples e direta de resolver este problema, porm, se tivssemos que entrar com um vetor de 100 posies e com um de
1000 posies, teramos de repetir 1000 vezes as duas linhas de cdigo?
Voc se lembra das estruturas de repetio que aprendemos anteriormente? Elas no seriam teis neste 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++

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

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

Proibida a reproduo UniSEB

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

110

Linguagem UAL

Linguagem C++

leia vetor[n];

cin>>vetor[n];

Estrutura de Dados Homogneas Captulo 5

Por 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 elemento: ;

leia vetor[n];

cin>>vetor[n];
}

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


Display

Memria principal
n

nmeros

10

Digite 1o elemento: 10

16

Digite 2o elemento: 16

21

Digite 3o elemento: 21

24

Digite 4o elemento: 24

27

Digite 5o elemento: 27

30

Digite 6o elemento: 30

31

Digite 7o elemento: 31

32

Digite 8o elemento: 32

EAD-14-Algoritmos UniSEB

Agora que j sabemos como ler um vetor de qualquer tamanho, vamos estruturar 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];
}

111

Algoritmos

Outra forma de se inserir dados em um vetor por meio da atribuio. O 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 utilizando uma estrutura de repetio, conforme segue.
Linguagem UAL

Linguagem C++

nomeDoVetor[posio] <- expresso com


o contedo ou valor a ser atribudo no vetor;

nomeDoVetor[posio] = expresso com


o contedo ou valor a ser atribudo no vetor;

para (n<-0; n<tamanho;n++)


{

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


{

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


}

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


}

5.3.4 Leitura de dados de um vetor

Proibida a reproduo UniSEB

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

112

Estrutura de Dados Homogneas Captulo 5

Linguagem UAL

Linguagem C++
/* IMPRESSO COMO COLUNA */

imprima \nTtulo\n;
para (n<-0; n<tamanho;n++)
{
imprima \n, nomeDoVetor[n];
}

cout << \nTtulo\n;


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

/* IMPRESSO COMO LINHA */


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

cout << \nTtulo\n;


for(int n = 0; n<tamanho; n++)
{
cout<<nomeDoVetor[n] << \t: ;

5.4 Matriz bidimensional (matriz)

Agora que j temos total conhecimento sobre vetores ou matrizes


unidimensionais, vamos um pouco mais alm e aprender sobre as matrizes bidimensionais. Sabemos uma string um vetor; se quisermos armazenar um conjunto de nomes, 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.

EAD-14-Algoritmos UniSEB

5.4.5 Conceito de matriz

Vamos comear o estudo de matrizes bidimensionais analisando


algumas situaes.
O professor ou tutor de sua turma precisa utilizar uma ferramenta
para controlar a nota e o desempenho de todos os alunos. Vamos imaginar
que sua turma possua 60 alunos, e que cada aluno realize 4 avaliaes durante o semestre. Logo, o professor ou tutor dever guardar as notas das 4
avaliaes mais a mdia de cada aluno. Geralmente, eles ainda guardam
mais uma informao relevante 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?
113

Algoritmos

Vetor Notas 1
A1

A2

A3

A4

A4

A6

.....

A60

A3

A4

A4

A6

.....

A60

A3

A4

A4

A6

.....

A60

A3

A4

A4

A6

.....

A60

A3

A4

A4

A6

.....

A60

Vetor Notas 2
A1

A2

Vetor Notas 3
A1

A2

Vetor Notas 4
A1

A2

Vetor Faltas
A1

A2

Proibida a reproduo UniSEB

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 invertamos um ndice e causar a mistura das notas de alunos diferentes ou cadastramos uma informao em local indevido.
Se fssemos controlar essas informaes, provavelmente a soluo
mais lgica seria montar uma tabela com esses dados. Provavelmente, no
utilizaramos uma lista para cada avaliao separadamente. Ento, por que
no fazemos da mesma forma em um sistema computacional?

114

Aluno1

Aluno2

Aulno3

Aluno4

Aluno60

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 tabela ou planilha, como no exemplo a seguir.

Estrutura de Dados Homogneas Captulo 5

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 forma simples e direta. Vamos ver agora como fazer isso utilizando linguagem de programao. Nesta etapa, vamos utilizar apenas a linguagem
C++.

5.4.6 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 utilizarmos um par de colchetes, usamos dois pares, um
para cada dimenso da matriz. Apesar de no ser foco de nosso estudo
neste momento, na linguagem C++ possvel declarar matrizes multidimensionais, ou seja, com mais de duas dimenses. Neste 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];
EAD-14-Algoritmos UniSEB

/* 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];

115

Algoritmos

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.
Olhando um pouco mais atentamente aos exemplos apresentados,
podemos 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 pergunta 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

Aluno1
Aluno2
Aluno3
Aluno4
Aluno5
Aluno6
Aluno7
Aluno8

Nota 1
Proibida a reproduo UniSEB

Nota 2

116

Nota 3
Nota 4

Aluno 8

Aluno 7

Aluno 6

Aluno 5

Aluno 4

Aluno 3

Aluno 2

Aluno 1

float notas[4] [8];

Estrutura de Dados Homogneas Captulo 5

Os dois formatos anteriores so corretos, porm, de uma maneira


geral, a maioria dos programadores utiliza a primeira forma, com linhas
para identificar 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 todas as linhas em sequncia, uma aps a outra.
A Figura 2 abaixo mostra a organizao 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.7 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, ..., dadotamanhoD1xD2};

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

EAD-14-Algoritmos UniSEB

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


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

117

Algoritmos

Nos exemplos apresentados, podemos notar algumas caractersticas e peculiaridades da inicializao de matrizes bidimensionais. Como
j dito, a estrutura muito semelhante de vetores, porm precisamos
ter em mente que estamos 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 gerenciar 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 bidimensional 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 ltimo exemplos, podemos ver que, quando
estamos inicializando uma matriz bidimensional, no precisamos obrigatoriamente informar os dois ndices, podemos 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++
Proibida a reproduo UniSEB

tipo nomeDaMatriz[posioLinha] [posioColuna] = ValorDesejado;

118

Estrutura de Dados Homogneas 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


sempre que os ndices se iniciam em 0 e que vo at tamanho 1.
Vejamos agora como inserir todos os valores em uma matriz
bidimensional 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++

EAD-14-Algoritmos UniSEB

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

Para percorrer as duas dimenses da matriz bidimensional, utilizamos


duas estruturas de repetio. A estrutura externa percorre as linhas e a estrutura interna 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.

119

Algoritmos

char.

Vejamos agora a estrutura para a leitura de matriz bidimensional de

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 associamos 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.8 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 anteriormente. 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 utilizando o comando imprima ou cout.
Como j vimos, podemos fazer isso de forma individual, ou para
toda a matriz 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.
Linguagem C++

Proibida a reproduo UniSEB

/* IMPRESSO COMO COLUNA */

120

cout << \nTtulo\n;


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

Estrutura de Dados Homogneas Captulo 5

/* IMPRESSO COMO LINHA */


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

Atividades

01. Construa um programa que armazene valores reais em um vetor de


10 posies. Imprima na tela o vetor com o dobro dos valores.

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

EAD-14-Algoritmos UniSEB

03. Construa um programa que leia e armazene 5 produtos e seus valores


de compra e venda. Imprimir todos os dados em tela.

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

121

Algoritmos

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.

Leituras recomendadas

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

Proibida a reproduo UniSEB

PUGA, S.; RISSETTI, G. Lgica de programao e estrutura de


dados: com aplicaes em Java. 1. ed. So Paulo: Pearson Education,
2003.

122

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.

Estrutura de Dados Homogneas Captulo 5

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

EAD-14-Algoritmos UniSEB

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

123

Proibida a reproduo UniSEB

Algoritmos

Minhas anotaes:

124

Estrutura de Dados Homogneas Captulo 5

EAD-14-Algoritmos UniSEB

Minhas anotaes:

125

Proibida a reproduo UniSEB

Algoritmos

Minhas anotaes:

126

Estrutura de Dados Homogneas Captulo 5

EAD-14-Algoritmos UniSEB

Minhas anotaes:

127

Proibida a reproduo UniSEB

Algoritmos

Minhas anotaes:

128

Você também pode gostar