Você está na página 1de 132

Ministrio da Educao

Escola Tcnica Aberta do Brasil


Universidade Tecnolgica Federal do Paran

Lgica de
Programao
Everton Coimbra de Arajo

Cuiab, 2009

Comisso Editorial Prof Dr Maria Lucia Cavalli Neder - UFMT


Prof Dr Ana Arlinda de Oliveira - UFMT
Prof Dr Lucia Helena Vendrusculo Possari - UFMT
Prof Dr Gleyva Maria Simes de Oliveira - UFMT
Prof. Dr. Henrique Oliveira da Silva - UTFPR
Prof. M. Sc. Oreste Preti - UAB/UFMT
Designer Educacional Oreste Preti e Gleyva Maria S. de Oliveira

Ficha Catalogrfica
A663l

Arajo, Everton Coimbra de


Lgica de programao / Everton Coimbra de Arajo.Cuiab : EdUFMT, 2009.
132 p. : il. ; color.
Bibliografia: p. 132.
ISBN 978-85-61819-62-0
1.Informtica. 2. Lgica de programao. I. Ttulo

CDU - 004.422.612

Reviso
Capa (lay out)
Ilustrao
Diagramao

Germano Aleixo Filho


Marcelo Velasco
Marcelo Velasco
Terencio Francisco de Oliveira

Cuiab, 2009

PROGRAMA e-TEC BRASIL

Amigo(a) estudante:

O Ministrio da Educao vem desenvolvendo Polticas e Programas para


expanso da Educao Bsica e do Ensino Superior no Pas. Um dos caminhos
encontrados para que essa expanso se efetive com maior rapidez e eficincia
a modalidade a distncia. No mundo inteiro so milhes os estudantes que
freqentam cursos a distncia. Aqui no Brasil, so mais de 300 mil os
matriculados em cursos regulares de Ensino Mdio e Superior a distncia,
oferecidos por instituies pblicas e privadas de ensino.
Em 2005, o MEC implantou o Sistema Universidade Aberta do Brasil (UAB), hoje,
consolidado como o maior programa nacional de formao de professores,
em nvel superior.
Para expanso e melhoria da educao profissional e fortalecimento do Ensino
Mdio, o MEC est implementando o Programa Escola Tcnica Aberta do Brasil
(e-Tec Brasil). Espera, assim, oferecer aos jovens das periferias dos grandes
centros urbanos e dos municpios do interior do Pas oportunidades para maior
escolaridade, melhores condies de insero no mundo do trabalho e, dessa
forma, com elevado potencial para o desenvolvimento produtivo regional.
O e-Tec resultado de uma parceria entre a Secretaria de Educao
Profissional e Tecnolgica (SETEC), a Secretaria de Educao a Distncia (SEED)
do Ministrio da Educao, as universidades e escolas tcnicas estaduais e
federais.
O Programa apoia a oferta de cursos tcnicos de nvel mdio por parte das
escolas pblicas de educao profissional federais, estaduais, municipais e, por
outro lado, a adequao da infra-estrutura de escolas pblicas estaduais e
municipais.
Do primeiro Edital do e-Tec Brasil participaram 430 proponentes de adequao
de escolas e 74 instituies de ensino tcnico, as quais propuseram 147 cursos
tcnicos de nvel mdio, abrangendo 14 reas profissionais. O resultado deste
Edital contemplou 193 escolas em 20 unidades federativas. A perspectiva do
Programa que sejam ofertadas 10.000 vagas, em 250 plos, at 2010.

Assim, a modalidade de Educao a Distncia oferece nova interface para a


mais expressiva expanso da rede federal de educao tecnolgica dos
ltimos anos: a construo dos novos centros federais (CEFETs), a organizao
dos Institutos Federais de Educao Tecnolgica (IFETs) e de seus cmpus.

O Programa e-Tec Brasil vai sendo desenhado na construo coletiva e


participao ativa nas aes de democratizao e expanso da educao
profissional no Pas, valendo-se dos pilares da educao a distncia,
sustentados pela formao continuada de professores e pela utilizao dos
recursos tecnolgicos disponveis.
A equipe que coordena o Programa e-Tec Brasil lhe deseja sucesso na sua
formao profissional e na sua caminhada no curso a distncia em que est
matriculado(a).

Braslia, Ministrio da Educao setembro de 2009.

CURSO TCNICO EM INFORMTICA

Caro estudante:

Os avanos tecnolgicos na rea de informtica e comunicao, associados a


modelos pedaggicos que so apoiados pelo uso de tecnologia, deram
origem modalidade de ensino chamada Ensino a Distncia ou, simplesmente,
EaD.
A caracterstica desse modelo a separao fsica entre aluno e professor.
Para suprir a distncia, a interao, entre o aluno e o professor, mediada
tanto por recursos tecnolgicos quanto pelo material impresso. Nessa
modalidade de ensino, o material impresso, juntamente com recursos de vdeo,
videoconferncia e um Ambiente Virtual de Aprendizagem, so as bases
tecnolgicas, s quais voc ter acesso durante sua formao.
Todos esses recursos so meios de comunicao entre professor e aluno. Cada
recurso possui uma caracterstica prpria e necessita de um canal especfico
de comunicao. Para assistir aos vdeos, participar de videoconferncia ou
realizar as atividades do Ambiente Virtual de Aprendizagem, voc precisar ter
acesso a computadores e a internet. Porm, tais recursos tecnolgicos nem
sempre esto disponveis em tempo integral, por isso a importncia do material
impresso, que permitir a voc ter acesso ao conhecimento
independentemente de possuir a sua disposio as tecnologias de informtica
e comunicao.
Aliado s atividades presenciais e s atividades a distncia, o material impresso
ir, tambm, apoi-lo na realizao das atividades de estudos, estimulando-o a
participar de forma mais ativa em seu processo de ensino-aprendizagem,
construindo progressivamente o conhecimento de maneira interativa. Assim, o
professor deixa de ser a nica fonte de informao. O distanciamento fsico
no ser impedimento para o processo de cooperao e interao entre voc
e o professor. O educador criar oportunidades para que voc participe de
forma ativa durante seu processo de aprendizagem. Dessa maneira, voc ser
parte essencial na construo de seu prprio conhecimento.
O material foi elaborado visando formao de Tcnicos em Informtica,
segundo os parmetros do Catlogo Nacional de Cursos Tcnicos. O
profissional formado dever ter qualificao para atender demanda regional
em consonncia com as tendncias tecnolgicas. Alm disso, deve estar
ancorado em um conhecimento cientfico-tecnolgico, de relacionamento
interpessoal e comunicao oral. Deve tambm ter pensamento crtico e
racional, capacidade para resolver problemas de ordem tcnica, capacidade

criativa e inovadora, capacidade de gesto e viso estratgica. Essa base lhe


tornar competitivo no mercado de trabalho.
Mas isso somente no suficiente. Voc deve demonstrar: honestidade,
responsabilidade, adaptabilidade, capacidade de planejamento, ser gil e ter
capacidade de deciso. Alm de ser possuidor de um esprito crtico, uma
formao tecnolgica generalista e uma cultura geral slida e consistente.
Foi pensando nessa formao que equipes de professores da rede pblica
federal de educao elaboraram seu material. Professores que atuam tanto no
ensino mdio quanto no ensino superior. Todos profissionais conceituados em
suas respectivas reas de atuao. O objetivo desses profissionais auxiliar
voc em sua formao profissional.
Tanto os recursos didticos pedaggicos, quanto os profissionais envolvidos
fazem parte do projeto Escola Tcnica Aberta do Brasil, e-Tec Brasil. Um projeto
que estabelece parceria entre Instituies de Ensino Pblico Federal, no papel
de formadores, e municpio, ou Estado, que disponibilizam os plos que
recebero os cursos oferecidos na modalidade de EaD.
Mas lembre-se: simplesmente ter acesso aos recursos didticos e tecnolgicos,
alm de ter a disposio uma equipe especializada de profissionais, no
suficiente. necessrio que esse material seja utilizado intensamente, de forma
a tornar-se fonte de conhecimento que lhe auxiliar em todos os momentos de
sua formao.
Cientes de que esse tambm o seu desejo, a equipe do e-Tec Brasil deseja a
todos timo processo de aprendizagem.

Atenciosamente,
Equipe de formadores do curso de Informtica da
Universidade Tecnolgica Federal do Paran.

SUMRIO

Lgica de Programao - Everton Coimbra de Arajo

CONVERSA INICIAL ............................................................................................................. 9

UNIDADE I - PROGRAMAO: ANTES DO INCIO


Conceitos Bsico ..................................................................................................... 13
Descrio Narrativa ................................................................................................ 20

UNIDADE II - TIPOS DE DADOS, VARIVEIS, EXPRESSES, SINTAXE E SEMNTICA


Tipos de Dados ........................................................................................................ 33
Variveis ................................................................................................................... 35
Expresses e Operadores ....................................................................................... 37
Sintaxe e Semntica ............................................................................................... 41

UNIDADE III - INTRODUO AOS PSEUDOCDIGOS


Pseudocdigos ........................................................................................................ 45
Endentao ............................................................................................................. 47
Declarao de Variveis ....................................................................................... 47
Atribuio de Variveis .......................................................................................... 48
Entrada de Dados ................................................................................................... 48
Sada de Dados ....................................................................................................... 49

Algumas Situaes .................................................................................................. 49


Pseudocdigos - Estrutura Condicional ............................................................... 54

UNIDADE IV - ESTRUTURAS DE REPETIO COM PSEUDOCDIGOS


Estruturas de Repetio.......................................................................................... 65
Estruturas de Repetio Contada ........................................................................ 65
Estruturas de Repetio Condicional, com Teste no Incio ............................... 70
Estruturas de Repetio Condicional, com Teste no Final ................................ 78

UNIDADE V - CONJUNTOS
Conjuntos ................................................................................................................. 87
Matriz ........................................................................................................................ 92
Classificao e Pesquisa ........................................................................................ 96

UNIDADE VI - SUBALGORITMOS E REGISTROS


Subalgoritmos ........................................................................................................ 111
Registros .................................................................................................................. 121

RETOMANDO A CONVERSA INICIAL .............................................................................. 129

REFERNCIAS..................................................................................................................... 131

CONVERSA INICIAL

Caro estudante:
Neste mdulo, voc ter condies de desenvolver seus conhecimentos sobre
Algoritmo, pois trataremos aqui dos fundamentos e da prtica desse contedo.
Voc ter oportunidade, ao longo da leitura das unidades, de perceber que a
utilizao da linguagem algortmica faz parte de seu cotidiano e
fundamental para o conhecimento da rea de informtica.
Nesse sentido, elaboramos uma dinmica de organizao do contedo,
partindo de uma introduo sobre a temtica, passando pelos conceitos
fundamentais dela e buscando, por meio de exemplos, sua compreenso
sobre algoritmo e a importncia deste na formao do tcnico em Informtica.
Assim, na unidade I voc ser introduzido nos conceitos de lgica, algoritmo,
dados, informao, processamento de dados e lgica de programao.
Daremos continuidade a essa iniciao, na unidade II, ao tratarmos de
conceitos que devem ser conhecidos antes do estudo da programao com o
uso de pseudocdigos, tais como tipos de dados, variveis e expresses.
Na unidade III, voc conhecer a programao hipottica muito usada em
todo o mundo, ou seja, a pseudocdigo, e entrar em contato com a
representao de algoritmos atravs dessa linguagem e sua abordagem com
estruturas condicionais.
Na unidade IV, haver um aprofundamento sobre pseudocdigos, fazendo uso
de estruturas de repetio.
Na unidade V sero abordados conjuntos, strings e mtodos de classificao e
pesquisa.
Finalmente, na Unidade VI, voc ter oportunidade de conhecer subalgoritmos
e registro.
Assim, esperamos que, ao final desta disciplina, voc esteja habilitado a:
- Desenvolver algoritmos atravs de diviso modular e
refinamentos sucessivos;
- Interpretar algoritmos nas formas de pseudocdigo;
- Desenvolver algoritmos e represent-los por meio de linguagem
de programao procedural;

Lgica de Programao - Everton Coimbra de Arajo

- Avaliar resultados de testes dos algoritmos desenvolvidos;


- Detectar e corrigir erros em algoritmos;
- Integrar mdulos desenvolvidos separadamente.
Sugerimos que voc dedique tempo suficiente para fazer a leitura, realizar as
atividades e retirar suas dvidas. Sempre que considerar necessrio, volte ao
texto, refaa as atividades! No se limite a este material, faa pesquisas,
converse com professores e colegas. Voc ver que aprender uma
interessante aventura!
Bom estudo!
Everton Coimbra de Arajo

10

Lgica de Programao - Everton Coimbra de Arajo

UNIDADE I
PROGRAMAO:
ANTES DO INCIO

Nesta unidade, voc estudar alguns conceitos relativos Lgica, Algoritmo, Dados,
Informao, Processamento de Dados e Lgica de Programao. Estes conceitos e
observaes objetivam uma sustentao cientfica aos temas propostos.
Organizamos esse contedo a fim de que voc perceba a importncia de cada
tema aqui trabalhado para a aprendizagem sobre programao e de como
efetuar o levantamento e a identificao de componentes necessrios para a
resoluo de um problema. Alm disso, fizemos uma introduo s tcnicas de
programao.
Os problemas que utilizamos nesta unidade voc encontra em seu cotidiano, o
que poder colaborar para iniciarmos um processo de raciocnio, buscando a
identificao do problema e de todos os componentes necessrios para sua
resoluo.
Inicialmente, a representao de resoluo de algoritmos ser a Descrio
Narrativa, na qual os passos de resoluo so expressos em linguagem natural,
como se fossem regras para utilizao de determinado aparelho, um manual.
Assim, ao final desta leitura esperamos que voc tenha condies de:
- Definir os fundamentos necessrios para a lgica de programao;
- Identificar que, para um processamento de dados, preciso que dados sejam
informados;
- Verificar que, para chegar a um resultado e fornecer informaes, um processamento de dados necessrio.

1. CONCEITOS BSICOS
Nesta seo, voc ir estudar conceitos que so fundamentais para sua
formao em Informtica: Lgica, Algoritmo, Dados e Informao, Dados de
Entrada e Sada, Processamento de Dados e Lgica de Programao.

1.1. LGICA
- Voc j ouviu falar em Lgica? No? Mas, certamente j ouviu
algum responder algo do tipo: ' lgico que eu sei, ou
lgico que isso no daria certo. No ?
- Mas ser que, quando damos uma resposta assim, estamos
tendo pensamento lgico?
- Voc saberia dizer o que Lgica?

Escreva, a seguir, o que voc entende por lgica.

Lgica de Programao - Everton Coimbra de Arajo

13

Pois bem, a palavra lgica vem do grego clssico e foi criada pelo filsofo
grego Aristteles no sculo IV a.C. para estudar o pensamento humano e distinguir
interferncias e argumentos certos e errados.
A Lgica uma cincia de ndole matemtica, fortemente ligada Filosofia.
tambm a designao para o estudo de sistemas prescritivos de raciocnio, ou
seja, sistemas que definem como se "deveria" realmente pensar para no errar,
usando a razo, dedutivamente e indutivamente.
Assim, um sistema lgico um conjunto de axiomas e regras de inferncia que visam
representar formalmente o raciocnio vlido, dedutivo ou indutivo.
Voc saberia dizer o que raciocnio ou pensamento dedutivo e
indutivo?
Dedutivo:
Indutivo:

Para que voc compreenda melhor o que so esses dois tipos de pensamento e
como se diferenciam, acompanhe minha explicao e os exemplos.
O pensamento dedutivo se caracteriza por apresentar concluses que devem,
necessariamente, ser verdadeiras caso todas as premissas sejam verdadeiras.
Exemplo: Todo ser humano mortal.
O homem um ser humano
Portanto, ele mortal.
Lembra-se do Sherlock Holmes, do autor Arthur Conan Doyle? As respostas aos
enigmas policiais eram encontradas por Sherlock mediante pensamento dedutivo,
que se traduzia na to conhecida frase: "Elementar, meu caro Watson".
J o pensamento indutivo significa partir de premissas particulares, na busca de
uma lei geral, universal.
Por exemplo: O ferro conduz eletricidade
O ferro metal
O ouro conduz eletricidade
O ouro metal
O cobre conduz eletricidade
O cobre metal
Logo: os metais conduzem eletricidade.
Os indutivistas acreditavam que as explicaes para os fenmenos
advinham unicamente da observao dos fatos. Por isso eles
poderiam produzir resultados falsos.
Por exemplo: O cavalo, o burro e a mula so quadrpedes.
O cavalo, o burro e a mula so mamferos.
Logo: Todos os mamferos so quadrpedes.

14

Lgica de Programao - Everton Coimbra de Arajo

Esta induo falsa, pois apresenta duas premissas verdadeiras, no entanto a


generalizao de concluso falsa.
Portanto, podemos concluir que
a Lgica a cincia das formas do pensamento. A Lgica estuda a correo
do raciocnio, visto que ele a forma mais complexa do pensamento. Podemos
dizer que a Lgica visa ordem da razo, isto , a razo pode funcionar
desordenadamente e a lgica estuda e ensina a colocar ordem no
pensamento.

Agora, tente voc elaborar um raciocnio dedutivo e outro


indutivo!
Dedutivo:
Indutivo:

Muito bem!
Agora que voc fez o exerccio, prossiga sua
leitura da seo 2, que trata dos algoritmos.
Mas, o que a Lgica tem a ver com
algoritmos?

1.2. ALGORITMO
Certamente voc j ouviu falar em algoritmo, no?
Voc consegue se lembrar o que algoritmo? E automao,
voc saberia dizer o que ?

Agora, ento, voc ter oportunidade de relembrar esse assunto e,


principalmente, verificar que no h como falar de algoritmos sem antes tecer
comentrios sobre automao.
Automao um processo em que uma tarefa deixa de ser desempenhada
pelo homem e passa a ser realizada por mquinas, no importando se estas
mquinas so mecnicas ou eletrnicas (SALIBA, 1993)
Vamos ver como pode ocorrer uma automao?
Determinada tarefa, para que seja automatizada, deve ter todas as etapas
conhecidas, e a mquina ou dispositivo que desempenhar este processo dever
estar apta a garantir sua repetibilidade.
O objetivo maior da automao que o resultado de uma tarefa possa ser
Lgica de Programao - Everton Coimbra de Arajo

15

conhecido ou obtido por vrias vezes, no mesmo intervalo de tempo e com a


mesma qualidade.
Exemplos:
So exemplos de automao os caixas eletrnicos dos bancos, que hoje
realizam tarefas antes realizadas pelos bancrios, e as funes mecnicas
de montagem na linha de produo automotiva.
Observe que cada situao-problema, ou processo para ser solucionada precisa
seguir algumas etapas que podemos chamar de especificao de sequncia
ordenada de passos. A esta especificao damos o nome ALGORITMO.
Veja estes exemplos de algoritmo que voc pode observar no
seu dia a dia:
- resolver uma operao matemtica seguindo passos
at chegar ao resultado final;
- ligar o forno de micro-ondas seguindo as etapas de
conectar energia, apertar determinados botes,
sequencialmente, at que a mquina seja ligada;
- tomar medicamentos seguindo orientao mdica;
- fazer receitas culinrias.

E agora, voc consegue pensar em outros exemplos? Ento


escreva no espao abaixo pelo menos mais dois exemplos
de algoritmos que voc encontrou em seu dia a dia.
a)
b)

1.3. DADO E INFORMAO


Voc saberia dizer o que significa dado em Informtica?
Podemos dizer que o dado a matria-prima da informao, ou seja, a
informao composta de um conjunto organizado de dados. O dado puro e
simples, muitas vezes, confundido com a prpria informao, no carrega
obrigatoriamente nenhum carter informativo.
Imagine que cada letra deste texto estivesse solta na
pgina, ou seja, que as letras no estivessem presas por
nenhum processo tipogrfico. Ao sacudirmos a pgina, as
letras cairiam no cho, concorda?
Os montinhos de letras espalhadas pelo cho conteriam
todos os dados que constituem a informao deste texto,
sendo, porm, impossvel constitu-lo novamente apenas
recolocando as letras sobre o papel. Isso o que pode
acontecer com um dado puro e simples.

16

Lgica de Programao - Everton Coimbra de Arajo

Cada tipo de informao est associado a determinado conjunto de dados,


criados especificamente para se adequar aos processos de transmisso da
informao. Quando falamos, trabalhamos com fonemas que, atravs do sistema
vocal transmitem informaes, respeitando regras lingusticas e idiomticas.
Quando escrevemos, trabalhamos com letras que, ao serem ligadas entre si,
formam palavras (o que j uma informao), que formam frases.
Um mesmo conjunto de dados pode ser utilizado para representar informaes de
natureza distinta.
Veja o exemplo da escrita na lngua portuguesa, que utiliza o alfabeto formado
por letras, e a escrita na lngua japonesa, que utiliza smbolos.
H tambm os casos em que a linguagem escrita se socorre do mesmo alfabeto,
porm com idiomas distintos. Sendo assim, podemos verificar que, apesar de
utilizar o mesmo alfabeto, a lngua portuguesa distinta das demais lnguas
(francs, ingls, alemo, etc.). Esse um exemplo de que, quando falamos em
dados, podemos encontrar um mesmo veculo e um mesmo conjunto de dados,
com formas de informao totalmente distintas, que dependero apenas das
tcnicas de unio dos dados.
Este material que voc est lendo foi redigido em lngua
portuguesa brasileira. O que voc acha que aconteceria se ele
tivesse que ser utilizado por um estudante que dominasse
apenas a lngua francesa? O mesmo conjunto de dados
(alfabeto comum a muitas lnguas) est sendo utilizado, mas,
nesse caso, haveria transmisso da informao?
Com base em suas reflexes, cremos que j possvel enunciar uma definio que
atenda ao significado de dado e informao. Vamos s definies?

Dado:
Informao:

smbolo que expressa a unidade mnima da informao (tomo


da informao).
conjunto de dados reunidos com regras especficas natureza
da informao.

1.4. DADOS DE ENTRADA E SADA


Quando um problema surge em nosso dia a dia,
geralmente ele ocupa totalmente nossa ateno, e isso
pode interferir em nossa capacidade de percepo.
Ai... Tirei zero...
Ai... Tirei zero...
Ai... Tirei zero...
Na ilustrao acima, h uma preocupao fundamental: a mdia baixa na
avaliao. O estudante tem como foco principal o problema. No h uma

Lgica de Programao - Everton Coimbra de Arajo

17

preocupao com os dados que levaram quela situao.


Em sua opinio, o que levou o aluno a tirar uma nota abaixo da mdia? Que
aes ou atitudes anteriores colaboraram para que obtivesse aquele resultado?
Visualizando o problema e os componentes causadores dele, podemos identificar
dados que auxiliaro em sua resoluo. H situaes em que esta identificao
imediata, apesar de no percebermos. Porm, em situaes mais complexas, um
exaustivo trabalho de identificao de probabilidades e condies se faz
necessrio.
A estes componentes, probabilidades e condies damos o nome de dados de
entrada, pois por meio do processamento destes dados, com o uso de um
algoritmo, que chegamos soluo do problema, que gerar uma sada de
dado, ou seja, a resposta, informao ou resultado desejado.

1.5. PROCESSAMENTO DE DADOS


Voc saberia dizer qual a relao entre informao e
comunicao? Qual o sentido da informao se ela no puder
ser comunicada? E qual o sentido da comunicao se no
houver informao?

A informao pura e simples nada significa se no for transmitida. Ao mesmo tempo,


s podemos afirmar a existncia de uma comunicao se houver informao para
ser enviada.
Ento, observe os conceitos de comunicao e informao:

Comunicao pode ser considerada o intercmbio de informao entre


sujeitos ou objetos.
Informao o resultado do processamento, manipulao e organizao de
dados de tal forma que represente uma modificao (quantitativa ou
qualitativa) no conhecimento do sistema (pessoa, animal ou mquina) que a
recebe.
Por isso, embora sejam distintas em suas definies, s podemos justificar uma com
a existncia da outra.
Podemos dizer que a informao s existe aps o trmino de um processo que
envolve:
- A elaborao dela mesma;
- A transmisso dos dados que formam a informao;
- A absoro, por outra entidade diferente daquela que originou a informao,
de todos os dados organizados de maneira idntica informao original.

18

Lgica de Programao - Everton Coimbra de Arajo

O universo dos conjuntos de dados associados a um veculo de comunicao


extenso. Para que a transmisso da informao seja realizada com sucesso
necessrio:
- que a entidade geradora saiba codificar a informao com o
conjunto de dados escolhidos;
- que a entidade receptora saiba decodificar a informao, por meio
do conjunto de dados escolhidos para a transmisso.

1.6. LGICA DE PROGRAMAO


Quando falamos em lgica de programao, ns nos remetemos sequncia de
instrues.
Voc sabe o que instruo?
Instruo pode ser considerada um conjunto de regras ou normas definidas
para a realizao de uma tarefa. Em informtica, instruo a informao que
indica a um computador uma ao elementar a executar.
Nas disciplinas de programao, quando nos dado um problema, o primeiro
passo determinar uma sequncia de instrues tal que, fornecidos os dados de
entrada, por meio da execuo da sequncia de instrues alcancemos como
sada a soluo do problema.
Agora, para que voc exercite seus conhecimentos sobre lgica
de programao, vamos lhe propor um desafio, por meio de
um estria muito conhecida:
Um senhor est numa das margens de um rio com uma raposa,
uma dzia de galinhas e um saco de milho. Ele pretende
atravessar o rio com sua carga, num barco que s comporta ele e parte de sua
carga. Ele no pode deixar a raposa com as galinhas, nem as galinhas com o
milho. O que fazer para atravessar o rio e chegar outra margem com a
raposa, as galinhas e o milho?
Ajude o senhor a resolver esse empasse! Porm, tente encontrar a resposta
antes de prosseguir a leitura.
Descreva-a no quadro abaixo:

Lgica de Programao - Everton Coimbra de Arajo

19

Voc conseguiu chegar resposta? Ento, parabns! Caso contrrio,


acompanhe o caminho por mim percorrido para solucionar o problema.
Geralmente, os estudantes tentam partir para a resoluo imediata, alguns
chegam a desenhar duas margens separadas por um rio e os demais personagens
tentando encontrar a soluo. Poucas so as situaes em que ocorre a
preocupao em avaliar a essncia do problema, ou seja, as caractersticas de
cada personagem, os dados de entrada.
A identificao do problema relativamente simples, o prprio texto a retrata
muito bem, sem necessidade de informao complementar.
Os componentes fornecidos tambm so suficientes, bastando uma anlise
detalhada s caractersticas de cada um deles.
J os dados de sada, neste caso, no so informaes, e sim uma maneira de
resolver o problema proposto.
Avaliando as caractersticas de cada componente, identificamos que,
evidentemente, o senhor no pode deixar em uma das margens, sozinhos, a
raposa e as galinhas. Fatalmente, a raposa comeria as galinhas. Nem as galinhas e
o milho, pois as galinhas comeriam os gros.
A questo escrever uma sequncia de passos (um algoritmo) que processe estes
dados e oriente o senhor a realizar seu intento, sem que haja perda.
bvio que, na primeira viagem, ele no pode levar a raposa, pois as galinhas
comeriam o milho.
Tambm no pode levar o milho, pois a raposa comeria as galinhas.
Como resolver esse problema?
Veja o algoritmo (sequncia de
passos) identificado (dados de sada)
para a resoluo do problema:
Atravesse as galinhas
Retorne sozinho
Atravesse a raposa
Retorne com as galinhas
Atravesse o milho
Retorne sozinho
Atravesse as galinhas.

2. DESCRIO NARRATIVA
O que voc imagina que seja descrio narrativa?
Ao depararmos com um problema, cuja necessidade de automao iminente,

20

Lgica de Programao - Everton Coimbra de Arajo

precisamos ter certeza de que o compreendemos e de que sabemos o que se


espera da soluo para depois, sim, iniciarmos o trabalho de programao.
No h como aceitar uma resposta sem sabermos se ela que se deseja. Para
isso, quando essa situao ocorre, uma ampla anlise do problema em questo
se faz necessria.
Por meio desta anlise, possvel identificar alguns dos passos que devem ser
seguidos e respeitados para que seja possvel a resoluo da situao-problema.
Esses passos compem a tabela usada para estudo de um problema e
consequentemente serviro como base para a construo da Descrio Narrativa
de como este problema deve ser resolvido.
Esta tabela e estes passos sero amplamente discutidos e exemplificados na
sequncia.
Entretanto, antes disso, vale a pena observarmos que uma das maiores
dificuldades encontradas pelos estudantes na disciplina de algoritmos a
interpretao de texto.
No conseguir identificar aquilo que se pede (problema), o que se espera obter
(dados de sada), o que ser necessrio para o processamento (dados de
entrada) e a maneira de processar esses componentes dificulta muito o processo
de resoluo.
Portanto, aproveitamos para destacar a importncia do exerccio dirio da leitura,
seja no contexto escolar, seja no profissional, seja no lar. Mediante o hbito da
leitura, firmamos ainda mais a compreenso ou interpretao do que lemos e
essas competncias so fundamentais para todas as reas do conhecimento, no
somente quando tratamos da Lngua Portuguesa, como equivocadamente
pensam muitos estudantes.
Nos casos descritos a seguir nos prximos tpicos, por exemplo, voc precisar
interpretar o texto para identificar os elementos necessrios sua resoluo.
Portanto, exercite a leitura e ver como isso poder ajud-lo no somente em
informtica, mas em todas as reas do conhecimento, ok?

2.1. RESOLUES SEQUENCIAIS


Agora, observando o exemplo abaixo, vamos verificar se o texto que traz o
problema (enunciado) teve uma correta interpretao. Para isso, propomos o
preenchimento de uma tabela como mostrada a seguir.

PROBLEMA I
De trs prisioneiros que estavam em crcere, um tinha viso normal, o segundo
tinha apenas um olho e o terceiro era cego. Os trs eram, pelo menos, de
inteligncia mdia.
O carcereiro disse aos prisioneiros que, de um jogo de trs chapus brancos e
dois vermelhos, escolheria trs e os colocaria na cabea deles. Cada um deles

Lgica de Programao - Everton Coimbra de Arajo

21

estava proibido de ver a cor do chapu em sua prpria cabea.


Reunindo-os, o carcereiro ofereceu a liberdade ao prisioneiro com viso
normal se ele fosse capaz de dizer a cor do chapu que tinha na cabea.
O prisioneiro confessou que no podia dizer e se retirou.
A seguir, o carcereiro ofereceu a liberdade ao prisioneiro que s tinha um olho
na condio de que ele dissesse a cor de seu chapu.
O prisioneiro confessou que tambm no sabia diz-lo e tambm se retirou.
O carcereiro no se deu o trabalho de fazer a idntica proposta ao prisioneiro
cego, mas insistncia deste, concordou em dar-lhe a mesma oportunidade.
O prisioneiro cego abriu um amplo sorriso e disse: No necessito da minha viso.
Pelo que meus amigos disseram, vejo claramente que meu chapu branco.

Tabela I: Interpretao do problema I

O Problema

Soluo
esperada

Dados de
entrada

22

De trs prisioneiros, verificar qual ou quais identificam a cor do


chapu posto em sua cabea, sem olh-lo.
Observaes complementares
Existem cinco chapus: trs brancos e dois vermelhos.
Cada preso deve identificar a cor do
chapu que tem em sua cabea.
Detalhamento dos Dados de Entrada
Chapus
Existem duas cores possveis entre os cinco existentes

Dados de
sada

Neste problema em particular, no se obtm dados ou


informaes ao seu trmino, apenas a resoluo do
problema, que a identificao da cor do chapu sobre a
cabea do prisioneiro.

Etapas
encontradas

- Colocar na cabea de cada preso um chapu;


- Escolher um dentre os trs prisioneiros para perguntar a cor do
chapu sobre sua cabea;
- Efetuar a pergunta para todos.

Descrio
Narrativa da
soluo
encontrada

1. Ponha os chapus na cabea dos presos;


2. Pergunte ao primeiro preso a cor de seu chapu;
3. Pergunte ao segundo preso a cor de seu chapu;
4. Pergunte ao terceiro preso a cor de seu chapu;

Lgica de Programao - Everton Coimbra de Arajo

Voc percebeu que o preenchimento desta tabela facilita a


compreenso dos elementos que compem o problema? E voc
j identificou que dados levaram o prisioneiro cego a identificar
qual a cor do chapu lhe foi colocado sobre a cabea?
A tabela apresentada no regra, nem pr-requisito para resoluo de
algoritmos, porm pode ser vista como uma tima ferramenta para apoio ao incio
de um aprendizado to exigente como Programao.
Atente bem a cada um de seus itens, tente identificar a real importncia de eles
existirem. Caso identifique novos itens relevantes, inclua-os. Caso acredite que
nem todos so necessrios para a resoluo de seus algoritmos, retire-os. Lembrese de que uma ferramenta deve ter o propsito de auxiliar, e no dificultar. No
entanto, ela s poder auxiliar se voc souber como utiliz-la.
Observe, no problema anterior, que a escolha de quem ser interrogado antes faz
parte do problema, at de forma racional, pois primeiro se pergunta para quem
tem mais condies visuais, assumindo-se que talvez, por ter viso total, ter
condies de identificao.
Poder ser notado que a resoluo deste algoritmo no est diretamente ligada
aos passos que devem ser percorridos, mas sim ao raciocnio lgico do terceiro
preso.
Sendo assim, vejamos o raciocnio utilizado por ele para saber seguramente a cor
do chapu em sua cabea.
a) O primeiro prisioneiro s poderia ter visto na cabea dos outros dois as seguintes
combinaes de chapus:

A primeira possibilidade est descartada, pois ele teria acertado, uma vez que s
existiam dois chapus vermelhos. Sendo assim, restaram as trs ltimas.

Lgica de Programao - Everton Coimbra de Arajo

23

b) O segundo prisioneiro, tendo em vista as possibilidades que restaram, s poderia


ter visto:

Como a primeira e a terceira so iguais, ele s pode ter visto vermelho ou branco.
Se ele tivesse visto vermelho, teria certeza de que seu chapu era branco, pois se
fosse vermelho, o primeiro teria acertado. Logo, ele s poderia ter visto chapu
branco no terceiro prisioneiro; da sua dvida: o dele seria branco ou vermelho?
c) Foram essas as concluses que o terceiro tirou para dizer que o chapu dele
era branco.
Voc deve ter percebido que o terceiro prisioneiro usou a lgica, conceito j
estudado nesta unidade, para responder acertadamente sobre a cor de seu
chapu, ou seja, baseando-se nos dados que tinha, ordenou o raciocnio e
chegou resposta.
A situao exposta neste exemplo reflete o que voc precisar sempre ter em
mente:
necessrio saber resolver o problema antes de usar ferramentas para
faz-lo.
O programador tem que ter total domnio do problema e do ambiente,
pois s desta maneira ele poder aplicar linguagens de programao e
outras ferramentas que o auxiliem a resolv-los.
Nos problemas resolvidos, h grande possibilidade de maior detalhamento.
Para isso, necessrio sempre um estudo pormenorizado do ambiente em que se
deseja promover a automao. Os exerccios descritos e resolvidos tratam os
problemas de uma forma generalizada, porm, se durante a leitura e aplicao
voc encontrar particularidades que devam ser tratadas em decorrncia de novo
ambiente, faa-o como exerccio de abstrao.

O exemplo anterior apresentou um pequeno problema, com


uma nica possibilidade de soluo, no havendo condies
ou pr-requisitos para tomar um caminho ou outro, ou ainda
encontrar uma situao em que inviabializaria a resoluo do
problema. A este tipo de resoluo, d-se a caracterstica de
sequencial, pois cada passo ocorre um aps o outro, sem
desvio.

24

Lgica de Programao - Everton Coimbra de Arajo

2.2. RESOLUES CONDICIONAIS


No difcil imaginar o que so resolues condicionais, sim?
O prprio nome nos remete ao conceito. Resolues condicionais so necessrias
quando, diante de uma nova situao, temos que lidar com condies para
que determinada tarefa seja desempenhada.
A identificao destas condies faz parte da identificao do problema e, por isso,
muitas vezes deparamos com a dificuldade de encontr-las e de como resolv-las.
O exemplo a seguir tem a caracterstica de uma estrutura condicional, veja:

PROBLEMA II
O governo federal implantou um plano de apoio s famlias de baixa renda,
que consiste na entrega de cesta bsica. Foi determinado um local para
distribuio destas cestas, onde se encontra uma pessoa que solicita algumas
informaes para cada cidado que para l se dirige. Sendo identificada a
veracidade das informaes, entregue uma cesta bsica a cada cidado.

Tabela II: Interpretao do problema II

O Problema

Entregar cestas bsicas populao com baixa renda.


Observaes complementares
- No so todos que tm direito cesta bsica;
- Deve-se, atravs de perguntas, identificar se o cidado tem
direito, ou no, cesta bsica.

Soluo
esperada

Entrega de cesta bsica apenas para quem realmente necessite.

Dados de
entrada

Dados de
sada

Etapas
encontradas

Detalhamento dos Dados de Entrada


Questionrio
Conjunto de perguntas que permitiro a identificao da
necessidade, ou no, de cesta bsica
Se for identificada a necessidade de cesta bsica, deve
ser entregue ao cidado, caso contrrio, deve ser dito a
ele que no possui direito.
- Solicitar ao cidado o preenchimento do questionrio;
- Avaliar o questionrio e identificar a necessidade;
- Proceder com o cidado de acordo a avaliao obtida
pelo questionrio.

Lgica de Programao - Everton Coimbra de Arajo

25

Descrio
Narrativa da
soluo
encontrada

1. Entregar questionrio para cidado preencher;


2. Avaliar o questionrio preenchido;
3. Se o cidado necessitar de cesta bsica, ento proceda
entrega;
4. Se o cidado no necessitar de cesta bsica, ento
informe que no tem direito.

No problema exposto acima, o enunciado praticamente esclarece todas as


dvidas e expe todos os passos a serem cumpridos para chegarmos soluo,
bastando apenas uma especial ateno ao texto, para, assim, a interpretao ser
perfeita.
O objetivo entregar cesta bsica s famlias de baixa renda. Mas qual famlia
de baixa renda? Como saber disso?
Neste caso, no interessa as particularidades, pois o texto diz que as informaes
sero solicitadas por um responsvel e a ele compete esta identificao, cabendo
a seu programa apenas trabalhar com a informao passada pelo responsvel.
Uma vez identificado que a famlia de baixa renda, entrega-se a cesta. Caso
contrrio, apenas informa quais famlias no tm direito cesta bsica.

2.3. RESOLUES COM PONTOS DE REPETIO


a) Repetio contada
Sem dvida, pudemos perceber situaes condicionais no exemplo anterior, mas
ainda existem ocasies em que determinado problema, para ser resolvido,
necessita de um processo que pode se repetir por vrias vezes, podendo esta
quantidade ser predeterminada ou condicional, e isso tambm deve ser
trabalhado. A esta caracterstica dado o nome de repetio.
Veja o exemplo:

PROBLEMA III
Em um instituto de pesquisa voltado criao de pinguins, foi levantada a
temperatura de todos os dias do ms de novembro. Encontre a quantidade de
dias com temperatura positiva, a quantidade de dias com temperaturas
negativa, alm da mdia da temperatura nos dias quentes.

Tabela III: Interpretao do problema III


Encontrar a quantidade de dias de novembro com
temperatura positiva e negativa, alm da mdia de
temperatura nos dias em que esta foi positiva.
O Problema

Observaes complementares
- O ms de novembro tem 30 dias;
- Nem todas as temperaturas obrigatoriamente so positivas
ou negativas.

26

Lgica de Programao - Everton Coimbra de Arajo

Soluo
esperada

Apresentao da quantidade de dias do ms de novembro


com temperatura positiva e negativa, alm da mdia de
temperatura nos dias em que a mesma foi positiva.

Detalhamento dos Dados de Entrada


Dados de
entrada

Temperatura
Deve ser verificado se positiva ou negativa.

Dados de
sada

Etapas
encontradas

Descrio
Narrativa da
soluo
encontrada

- Quantidade de dias com temperatura positiva;


- Quantidade de dias com temperatura negativa;
- Mdia da temperatura nos dias positivos.

- Solicitar temperatura para cada dia;


- Identificar se a temperatura positiva ou negativa;
- Somar as mdias positivas e efetuar o clculo da mdia.

1. Solicitar temperatura para cada dia do ms de novembro;


2. Se a temperatura informada for positiva, deve-se som-la
acumulando esta soma, e tambm somar, acumulando, a
quantidade de dias com temperatura positiva;
3. Se a temperatura informada for negativa, deve-se somar e
acumular a quantidade de dias com temperatura
negativa;
4. Obtidas todas as temperaturas, deve-se informar a mdia
delas em dias de temperatura positiva.

Este problema interessante, pois trata uma situao que se repete um nmero
de vezes conhecido, o que chamamos de repetio contada.
Nem sempre o problema traz a quantidade de vezes que um processo se repetir.
Normalmente essa informao vem de forma implcita, como neste texto.
Voc observou que no foi dito quantas vezes preciso solicitar a temperatura?
Mas voc viu que foi dito que a situao se passa em novembro, ficando mais
fcil definir a quantidade de repeties, no ?
Um outro detalhe que no pode passar despercebido que a mdia desejada
no de todas as temperaturas, apenas das positivas. Logo, necessrio saber
quando a temperatura positiva e, quando o for, somar estes valores.
Observe que no podemos, alm disso, dividir este valor pela quantidade de
temperatura, apenas pela quantidade identificada como positiva.
Outra solicitao a quantidade de dias negativos. Esta a mais fcil, pois j
identificamos a quantidade de dias positivos para chegar mdia e temos o total

Lgica de Programao - Everton Coimbra de Arajo

27

dos dias. Basta deduzirmos que os negativos so o resultado de uma subtrao


entre o total de dias e os dias com temperatura positiva.
b) Repetio contada e condicional - aninhadas
Para voc verificar como ocorre uma repetio contada e condicional
aninhada, acompanhe o problema a seguir:

PROBLEMA IV
Uma vincola deseja saber o percentual de vinho branco seco vendido durante
determinado ms. So vrios os tipos de vinho comercializados, assim como so
vrios os clientes da empresa. A quantidade desejada se refere venda total
da vincola no ms em referncia.
Por questes da estrutura de como os dados so utilizados neste algoritmo,
deve-se, para cada dia, verificar cliente por cliente, os tipos de vinho e
respectiva quantidade comprada.

Tabela IV: Interpretao do problema IV


Identificar o percentual de vinho branco seco vendido em
determinado ms.
O Problema

Observaes complementares
- No se sabe qual o ms se deseja fazer a verificao;
- Cada cliente pode comprar vrios tipos de vinho.

Soluo
esperada

Apresentao do percentual que representa a venda de vinho


branco seco, perante toda a venda de determinado ms.

Detalhamento dos Dados de Entrada

Dados de
entrada

Dados de
sada

28

- Ms
- Cliente
- Tipo do vinho e quantidade comprada por cada cliente
Deve ser solicitado antes do cliente, o tipo de
vinho e a quantidade comprada por cliente, pois
o ms que identifica a quantidade de vezes que
deve ser verificada a venda.

- Percentual de vinho branco seco vendido no ms

Lgica de Programao - Everton Coimbra de Arajo

Etapas
encontradas

Descrio
Narrativa da
soluo
encontrada

SABER M

- Identificar o ms em que se deseja fazer esta pesquisa;


- Identificar para cada dia os clientes que compraram vinhos;
- Identificar a quantidade e tipo de vinho comprados por
cliente;
- Saber que, para cada tipo de vinho comprado, se deve
verificar se o desejado para a pesquisa: Vinho Branco
Seco. Caso seja, deve-se somar a quantidade informada,
para, ao final, fazer verificao do percentual;
- Devem-se somar todos os vinhos comprados por todos os
clientes, pois o percentual dever ser encontrado sobre o
total comercializado;
- Calcular e informar o percentual desejado.

1. Solicitar o ms em que se deseja fazer a pesquisa


2. Solicitar, para cada dia do ms, os clientes que compraram
vinhos na vincola.
3. Solicitar, para cada cliente, o tipo de vinho e a quantidade
comprada.
4. Se o tipo de vinho for Branco e Seco, deve-se acumular a
quantidade informada.
5. Para cada tipo de vinho informado, independentemente de
ele ser do tipo desejado para pesquisa ou no, deve-se
acumular a quantidade.
6. Aps a informao do tipo e quantidade comprada pelo
cliente, deve-se verificar se o cliente comprou mais vinho.
7. Caso a resposta seja positiva, deve-se retornar ao item 3
Caso contrrio, deve-se verificar se h mais clientes que
compraram vinho neste dia.
8. Caso a resposta seja positiva, deve-se retornar ao item 2.
Caso contrrio, deve-se prosseguir.
9. Uma vez encontrado todos os valores, deve-se efetuar o
clculo do percentual referente s vendas de Vinho Branco
Seco e inform-lo ao usurio.

Este exerccio nos mostra uma situao um pouco mais


curiosa que os anteriores: h processos repetitivos
dentro de um processo repetitivo. A esta caracterstica
damos o ttulo de repetio aninhada.

interessante observamos que, neste caso, o nico lao repetitivo que se pode
chamar de repetio contada o mais externo, o que se referencia aos dias do
ms utilizado para a pesquisa.
Aos laos internos denominamos de laos condicionais, pois sua continuidade
depende de uma situao que nem sempre se conhece, mas se pode prever. H
casos em que esta condio alcanada por meio de processos do prprio
algoritmo (como em uma repetio contada).

Lgica de Programao - Everton Coimbra de Arajo

29

H casos em que esta condio alcanada em decorrncia de uma interao


com o usurio, como ocorre no exemplo, em que se pergunta se o cliente comprou
ou no mais vinho. Isso aps a avaliao total da primeira interao do lao.

Chegamos ao final dessa unidade, em que voc teve a


oportunidade, na seo de Conceitos Bsicos, de identificar o
que Lgica e a importncia desse conceito para aprender
algoritmo. Voc estudou o conceito de algoritmo e
automao. Pde verificar o que dado e informao e a
relao entre esses dois conceitos.
Voc estudou sobre dado de entrada e de sada e verificou como
importante no observar o problema em si, mas os componentes, as
probabilidades e as condies para sua resoluo. No item Processamento
de Dados, voc observou a relao entre comunicao e informao. Em
Lgica de Programao voc viu o que instruo e como a execuo da
sequncia de instrues permite chegar resoluo do problema.
Na seo 2 - Descrio Narrativa - voc pde conhecer um pouco sobre
linguagem e a importncia da leitura para identificar um problema. No item
Resolues Sequenciais, por meio de exemplos, voc pde verificar os
processos para chegar soluo de um problema.
No item Resolues Condicionais, voc observou que a identificao das
condies faz parte da identificao do problema e que a resoluo deste
depende de verificar quais so essas condies.
No item Resolues com Pontos de Repetio, voc verificou que, alm das
situaes condicionais, um processo pode se repetir vrias vezes e esta
quantidade pode ser predeterminada ou condicional.
No item Repetio Aninhada, voc teve oportunidade de verificar que
processos repetitivos podem ocorrer dentro de um processo repetitivo.
Voc deve ter percebido, pelo estudo dessa unidade, que falamos um
pouco sobre os conceitos bsicos que envolvem as tcnicas de
programao. So noes que precisam ser compreendidas de modo
significativo para uma futura compreenso de toda a lgica envolvida nos
processos de programao na rea da Informtica.
Espero que voc tenha tido condies de observar que, por exemplo, a
descrio narrativa uma maneira simples de se programar, por isso voc
deve ter identificado que, se voc faz descries narrativas todos os dias,
voc capaz de programar, sim?
Bem, agora que voc j teve contato com as primeiras conceituaes,
podemos dar um passo adiante!
Realmente, espero que nossa conversa nesta unidade tenha fornecido a
voc os subsdios mnimos para continuidade do trabalho! Mas, se ainda
restam dvidas, leia esta unidade quantas vezes julgar necessrio.
Lembre-se sempre que voc capaz!
At a Unidade II!

30

Lgica de Programao - Everton Coimbra de Arajo

UNIDADE II
TIPOS DE
DADOS, VARIVEIS,
EXPRESSES, SINTAXE
E SEMNTICA

Na unidade anterior, buscamos introduzir voc no campo do raciocnio lgico e


de algumas ferramentas para resoluo de problemas.
Nesta segunda etapa, voc ter contato com alguns conceitos que deve
conhecer antes de iniciar a programao com uso de pseudocdigos: tipos de
dados, variveis e expresses. Depois disso, passaremos a estudar conceitos,
exemplos e a prtica de programar, usando pseudocdigo para resoluo de
algoritmos.
Assim, por meio do estudo desta unidade esperamos que voc seja capaz de:
- Compreender o que so e quais so os tipos de dados bsicos;
- Definir e compreender o uso de variveis;
- Conhecer a definio e o correto uso de expresses e operadores;
- Compreender, identificar e aplicar sintaxe e semntica.

2.1. TIPOS DE DADOS


Salvetti & Barbosa (1998) ressaltam que um programa de computador descrito
em uma linguagem de programao. Geralmente, cada linguagem de
programao tem seus prprios tipos de dados, isto , conjunto de valores,
operaes e relaes j implementadas (disponveis para uso). Na
implementao surge o conceito de domnio, isto , da limitao do conjunto de
valores dos elementos representados.
Os tipos de dados que sero tratados nesta sesso so classificados de acordo
com o tipo de informao contida neles. Lembramos que a classificao
apresentada aqui no se aplica a nenhuma linguagem de programao
especfica, pois a idia mostrar, de forma sintetizada, os padres utilizados na
maioria das linguagens.

2.1.1. DADOS NUMRICOS


Os dados numricos so divididos, basicamente, em dois grandes conjuntos:
inteiros e reais. Veremos nas definies que tudo que foi aprendido nas aulas
bsicas de matemtica, totalmente utilizado no conceito destas duas classes de
tipos de dados numricos.
Nmeros inteiros so aqueles que no possuem componentes decimais ou
fracionrios, podendo ser positivos ou negativos.
Esse fcil! Quer ver alguns exemplos?
Vamos l!
36 um nmero inteiro positivo
0 um nmero inteiro
- 8 um nmero inteiro negativo

Lgica de Programao - Everton Coimbra de Arajo

33

Os dados de tipo Real so aqueles que podem possuir componentes decimais ou


fracionrios, podendo tambm ser positivos ou negativos.
Bem, agora vejamos...
Podemos citar como exemplos de dados de tipo real:
36.01
166.
- 18.8
0.0
0.

um nmero real positivo com duas casas decimais


um nmero real positivo com zero (nenhuma) casa decimal
um nmero real negativo com uma casa decimal
um nmero real com uma casa decimal
um nmero real com zero (nenhuma) casa decimal.

importante observar que h uma diferena entre 0, que um dado do tipo inteiro,
e 0. ou 0.0, que so dados do tipo real. Portanto, a simples existncia do ponto
decimal serve para diferenciar um dado numrico do tipo inteiro de um tipo real.

2.1.2. DADOS LITERAIS


O que um dado literal? Voc saberia dizer?
O tipo de dados literal, conforme Saliba (1993), pode ser definido como
constitudo por uma sequncia de caracteres com letras, dgitos e/ou smbolos
especiais. Este tipo de dado tambm muitas vezes chamado de
alfanumrico, cadeia de caracteres ou, ainda, String.
Usualmente, os dados literais so representados nos algoritmos pela coleo de
caracteres, delimitada em seu incio e trmino com o caractere aspas ().
comum, em algumas linguagens, a diferenciao entre a representao de um
nico dado literal, que chamado de caractere (por exemplo: 'A') e um conjunto
de caracteres, chamado de String (por exemplo: Ol, Mundo). Note que, no
exemplo de caractere, foram utilizadas aspas simples (apstrofo). J no exemplo
de string, aspas duplas. interessante esta diferenciao, pois, para algumas
linguagens, ela necessria (por exemplo C e Java).
O dado do tipo literal possui um comprimento dado pelo nmero de caracteres
nele contido. Veja os exemplos:
"QUEM ?"
" "
"cOmO !?#" "AbcDEFghi" "4+5-1="
"1"

Literal de comprimento 5
Literal de comprimento 1
Literal de comprimento 8
Literal de comprimento 9
Literal de comprimento 6
Literal de comprimento 1

Ateno aos detalhes!


Perceba que 1.2 representa um dado do tipo LITERAL de comprimento 3,
constitudo pelos caracteres 1, . e 2, diferente de 1.2 que um dado do tipo
REAL.

34

Lgica de Programao - Everton Coimbra de Arajo

2.1.3. DADOS LGICOS


So caracterizados, como tipos lgicos, os dados com valor verdadeiro e falso,
ressaltando que este tipo de dado poder representar apenas um dos dois
valores. Ele chamado por alguns de tipo booleano, devido contribuio do
filsofo e matemtico ingls George Boole na rea da lgica matemtica.
Para facilitar a citao de um dado do tipo lgico e diferenciao entre nomes
de variveis, alguns autores/professores apresentam estes valores delimitados pelo
caractere ponto (.).
Como exemplo deste tipo de dados, temos os valores: .Falso. (para o valor lgico:
falso) e .Verdadeiro. (para o valor lgico: verdadeiro). Observe que isso no
regra, apenas conveno para alguns.

2.2. VARIVEIS
Para Lopes & Garcia (2002), uma varivel um local na memria principal, isto ,
um endereo que armazena um contedo.
Para facilitar a programao, permitido que demos nome a esse endereo. O
contedo de uma varivel pode ser de um dos vrios tipos apresentados em
passo anterior.
Para Forbellone & Eberspacher (2000), um dado classificado como varivel
quando tem a possibilidade de ser alterado em algum instante no decorrer do
tempo, ou seja, durante a execuo do algoritmo, em que utilizado, o valor do
dado sofre alterao ou o dado dependente da execuo em certo momento
ou circunstncia.
Uma vez definidos o nome e o tipo de uma varivel, no podemos alter-los no
decorrer de um algoritmo. Por outro lado, o contedo da varivel um objeto de
constante modificao no decorrer do programa, de acordo com o fluxo de
execuo deste.
Quando formos dar nome s variveis, faz-se necessrio seguirmos algumas regras.
bom ressaltar que estas regras iro variar de acordo com a linguagem escolhida
como ferramenta, mas a grande maioria adota as seguintes regras genricas:
- O primeiro caractere uma letra;
- Se houver mais de um caractere, s poderemos usar: letra ou algarismo;
- Nomes de variveis escritas com letras maisculas sero diferentes de
letras minsculas;
- Nenhuma palavra reservada ferramenta (linguagem de
programao) poder ser usada como nome de uma varivel;
- Procure dar nomes representativos para a varivel. Lembre-se de que ao
ler seu nome, importante saber o que ela contm.

Lgica de Programao - Everton Coimbra de Arajo

35

As variveis so definidas no incio, pois isso permite a alocao (reserva) de uma


rea na memria (endereo) para a varivel. Outro objetivo da declarao de
variveis que, aps a declarao, o algoritmo sabe os tipos de operao que
cada varivel pode realizar. Algumas operaes s podem ser realizadas com
variveis do tipo inteiro. Outras s podem ser realizadas com variveis dos tipos
inteiro ou real, e outras s com variveis de caractere, entre outras que sero vistas
neste livro.

2.2.1. DECLARAO DE VARIVEIS


Para ilustrar uma declarao de variveis, necessrio que sejam nominados os
tipos de dados que encontramos nos problemas. Vejamos alguns tipos j vistos:
Inteiro
Real
Literal
Lgico

int ou integer
real, float ou double
char (um caractere) ou string (cadeia de caracteres).
boolean ou lgico.

Neste caso, para nomear os tipos de dados de modo vlido, precisamos retomar a
premissa de que interpret-los de modo correto fundamental.
Que tal observarmos alguns exemplos para tornar ainda mais clara essa ideia?
Vamos l...
Sendo dada uma lista de compras com o cdigo, quantidade e preo de
oito produtos, faa um algoritmo que escreva o valor total da compra.
string CODIGO
int QUANTIDADE
float PRECO, VALOR TOTAL
Ao serem fornecidos um valor a ser pago e uma taxa para multa, pois o
pagamento est sendo feito aps o vencimento, calcule o valor da multa
e o valor total a ser pago.
float VLRCONTA, TAXAMULTA, VLRMULTA, VLRTOTAL
solicitada a um motorista, recm-chegado de uma viagem, a quantidade de
quilmetros por ele percorrida. O motorista informa o solicitado, e voc dever
informar a ele a quantos metros se refere a quantidade de quilmetros.
int QUILOMETROS, METROS

Observe que o trabalho de identificao de variveis e de seus tipos , na maioria


das vezes, muito fcil, pois basta identific-los no enunciado. O que ocorre
tambm com grande frequncia a identificao de algumas variveis

36

Lgica de Programao - Everton Coimbra de Arajo

necessrias apenas durante a resoluo do algoritmo, mas isso no problema.


Basta relacionarmos estas variveis lista j existente.

2.3. EXPRESSES E OPERADORES


O conceito de expresso em termos computacionais, segundo nos informa Lopes
& Garcia (2002), est intimamente ligado ao conceito de expresso (ou frmula)
matemtica, no qual um conjunto de variveis e constantes numricas se
relaciona por meio de operadores, compondo uma frmula que, uma vez
avaliada, resulta em um valor.
Para Saliba (1993), o conceito de expresso aplicado computao assume uma
conotao mais ampla: uma expresso uma combinao de variveis,
constantes e operadores, que, uma vez avaliada, resulta em um valor.
Aqui constam algumas definies. importante que voc leia com ateno esses
conceitos e busque outras fontes de informao sobre isso. Tambm se faz
necessrio que voc procure o significado das palavras que no conhece.

No conceito de Saliba (1993), descrito acima, por exemplo, voc


saberia conceituar operadores?

Operadores, ainda segundo esse mesmo autor, so elementos funcionais que


atuam sobre operandos e produzem determinado resultado.
Ah! Essa esta bem simples...
Vejamos o exemplo abaixo:
A expresso 5 2 relaciona dois operandos (os nmeros 5 e 2) por meio do
operador (-) que representa a operao de subtrao.
Os operadores podem ser classificados em binrios, unrios e ternrios. Esta
classificao atribuda de acordo com o nmero de operandos sobre os quais o
operador atua. Neste momento, sero abordados somente os operadores binrios
e unrios, mas importante destacar que os ternrios esto presentes em vrias
linguagens de programao e que sua forma de uso depende exclusivamente da
linguagem que est sendo utilizada. Observe, a seguir, exemplos de operadores
binrios e unrios.
- binrios: operaes matemticas simples nas quais o operador envolve
dois algarismos.
1+3
4-1
- unrios: o operador somente se encarrega de informar se o nmero
positivo ou negativo.
+2

Lgica de Programao - Everton Coimbra de Arajo

37

Outra classificao feita aos operadores em considerao ao tipo de dado de


seus operandos e do valor resultante de sua avaliao. Esta classificao de
operadores aritmticos, lgicos, relacionais e literais. Vejamos de que se trata.

2.3.1. EXPRESSES ARITMTICAS


So aquelas cujo resultado da avaliao do tipo numrico, seja ele inteiro seja
real. Somente o uso de operadores aritmticos e de variveis numricas
permitido em expresses deste tipo.

A prioridade entre operadores define a ordem em que eles devem ser avaliados
dentro de uma mesma expresso.
Quando h dois ou mais operadores de mesma prioridade em uma expresso, a
execuo se d da esquerda para a direita.
bvio que, se utilizarmos o conceito de agrupamento de operaes atravs de
parnteses, isso poderia ser facilmente visto.
O caractere * adotado na maioria das linguagens de programao para
representar a operao de multiplicao, ao invs do caractere x, por fora da
possibilidade de ocorrncia do mesmo nome de varivel. Pela mesma razo, o
smbolo ** adotado para representar a operao de exponenciao. Algumas
linguagens de programao adotam o smbolo ^, e outras adotam funo para
resoluo deste problema.
Por exemplo: em Java, utiliza-se Math.pow(3, 2) para elevar o nmero 3 ao
quadrado.

2.3.2. EXPRESSES LGICAS


So aquelas cujo resultado da avaliao um valor lgico (.Verdadeiro. ou
.Falso.). Veja, a seguir, operadores lgicos para expresses lgicas.
Para tratar expresses lgicas, vamos recorrer lgica matemtica, na qual Filho
(2000) define proposio como todo o conjunto de palavras ou smbolos que
exprimem um pensamento de sentido completo.

38

Lgica de Programao - Everton Coimbra de Arajo

As proposies transmitem pensamentos, isto , afirmam fatos ou exprimem juzos


que formamos a respeito de determinados entes.
Podemos citar como exemplo de proposio:
a) A Lua um satlite da terra.
b) Recife a capital de Pernambuco.
c) 23 8.
A lgica matemtica (assim como a que veremos para algoritmos) adota como
regras fundamentais do pensamento os dois seguintes princpios:
a) Princpio da no contradio
Uma proposio no pode ser verdadeira e falsa ao mesmo tempo.
b) Princpio do terceiro excludo
Toda a proposio ou verdadeira ou falsa, isto , verifica-se sempre
um destes casos, e nunca um terceiro.

As proposies vistas no exemplo anterior so ditas simples ou atmicas, pois


no contm nenhuma outra proposio como parte integrante de si
mesma. H somente a ocorrncia de uma informao sendo repassada.

Chama-se proposio composta ou proposio molecular aquela formada pela


combinao de duas ou mais proposies, como nos exemplos:
a) Carlos careca e Pedro estudante.
b) Carlos careca ou Pedro estudante.
c) Se Carlos careca, ento infeliz.
Quando pensamos, efetuamos, muitas vezes, certas operaes sobre proposies,
chamadas operaes lgicas.
a) Negao
Chamamos negao de uma proposio p a proposio representada
por no p, cujo valor lgico a verdade quando p falsa, e a
falsidade quando p verdadeira. Assim no p tem o valor lgico
oposto daquele de p.
b) Conjuno
Chamamos conjuno de duas proposies p e q a proposio
representada por p E q, cujo valor lgico verdade quando as
proposies p e q so ambas verdadeiras, e falsa nos demais casos.
c) Disjuno
Chama-se disjuno de duas proposies p e q a proposio
representada por p OU q cujo valor lgico a verdade quando ao
menos uma das proposies p e q verdadeira, e a falsidade quando
as proposies p e q so ambas falsas.
Os operadores lgicos tambm so chamados de operadores booleanos.

Lgica de Programao - Everton Coimbra de Arajo

39

Suponha duas perguntas feitas a quatro pessoas que se candidataram a uma


entrevista de emprego de programador. As respostas s perguntas sero Sim ou
No. Suponha tambm que s ser chamado para a entrevista o candidato que
responder Sim s duas perguntas.

Neste caso, apenas a candidata Neusa seria chamado para a entrevista, pois o
operador .E. s considera a expresso como verdadeira se todas as expresses
testadas forem verdadeiras.
Vejamos, a seguir, operadores relacionais para expresses lgicas.

Estes operadores so somente usados quando se deseja efetuar comparaes.


Vale destacar que as comparaes s podem ser feitas entre objetos de
mesma natureza, isto , variveis do mesmo tipo de dado. O resultado de uma
comparao sempre um valor lgico.
Toda expresso respeita uma ordem de execuo de seus operadores, sempre da
esquerda para a direita, assim como na matemtica. Para isso, segue uma tabela
com as prioridades.

40

Lgica de Programao - Everton Coimbra de Arajo

2.4. SINTAXE E SEMNTICA


O conceito de linguagem est associado a um objeto de comunicao:
indivduos que partilham uma mesma linguagem so capazes de se comunicar. As
lnguas naturais so utilizadas como meio formal de se estabelecer uma linguagem
de comunicao. Para tanto, so necessrios um vocabulrio, ou lxico
(dicionrio/glossrio), e um conjunto de regras gramaticais ou sintaxe: para
construir um objeto de comunicao nessa lngua, a sintaxe permite associar e
manipular os itens do lxico. A esse objeto, construdo segundo as normas da
lngua, d-se o nome de assero vlida, ou gramatical. Asseres vlidas com
diversos graus de complexidade podem ser construdas: em grau crescente de
complexidade, podemos ter oraes, sentenas, conjunto de sentenas (ou
pargrafos) e conjuntos de pargrafos (ou textos). A essas asseres, possvel
tambm associar um significado e, assim, estaremos trabalhando no campo da
semntica.

Bem, de acordo com o que foi exposto acima, podemos, de modo conciso,
dizer:
SINTAXE :

So regras gramaticais de formao de


sentenas/asseres vlidas ou gramaticalmente
corretas;

SEMNTICA :

a associao das asseres ao significado, permitindo


sua interpretao.

Tendo estas definies sido trazidas do idioma humano, pode-se afirmar que no
h diferena ao encontrado na rea tecnolgica, pois podemos dizer que a
sintaxe de uma linguagem expressa as regras que devem ser obedecidas para
atingir determinado resultado, fazendo uso dela. E a semntica representa o
contedo das palavras da linguagem, permitindo assim uma interpretao
correta do escrito com determinada linguagem.

Lgica de Programao - Everton Coimbra de Arajo

41

Esta unidade tem grande importncia no aprendizado de


programao. Foram aqui apresentados conceitos e
exemplos de tipos de dados possveis de uso em nossos
pseudocdigos, conceitos e regras para uso de variveis,
alm de uma introduo sobre expresses e operaes. Na
parte de expresses lgicas, trouxemos uma pequena
demonstrao sobre suas operaes, as quais sero
fortemente tratadas mais adiante. J nos conceitos de sintaxe e semntica,
que foram tratados tambm de forma breve, foi comentada a grande
importncia delas, principalmente da sintaxe. Todos estes conceitos sero
utilizados nas prximas unidades. Da a relevncia de uma releitura, caso
ainda restem dvidas.
Encerramos esta unidade por aqui, esperando, claro, que esses conceitos e
exemplos tenham ajudado voc a compreender ainda mais as etapas da
programao.
Mas ainda temos um longo caminho. Vamos em frente!

42

Lgica de Programao - Everton Coimbra de Arajo

UNIDADE III
INTRODUO AOS
PSEUDOCDIGOS

Nesta unidade, iremos introduzir voc na linguagem de programao hipottica,


muito usada em todo o mundo. chamada de pseudocdigo. Utiliza o idioma
nativo e algumas regras sintticas, mas a facilidade de passar para algoritmos
regras verbais, por ns conhecida e usada, mais simples e facilita depois a
introduo a uma linguagem de programao.
Por meio de exemplos voc ter contato com a representao de algoritmos
recorrendo a pseudocdigos. Abordaremos tambm os pseudocdigos com
estruturas condicionais e faremos breve comentrio sobre funes.
Assim, esperamos que, ao final da leitura desta unidade, voc possa:
- Conhecer e entender pseudocdigos;
- Compreender a importncia da endentao;
- Conhecer estruturas de deciso;
- Resolver problemas com estrutura sequencial e condicional por meio de
pseudocdigos;
- Reconhecer e utilizar algumas funes predefinidas para auxlio na
resoluo dos problemas.

3.1. PSEUDOCDIGOS
O que pseudocdigo?

Para Saliba (1993), pseudocdigo uma forma para representao de


algoritmos rica em detalhes, como a definio dos tipos das variveis usadas
no algoritmo. Por assemelhar-se bastante forma em que programas so
escritos, encontra muita aceitao.
Para ns, a aplicao de pseudocdigos aos algoritmos, a partir deste ponto, ser
mera traduo. Como um texto em portugus passado para outro idioma.
Necessitamos saber apenas a ortografia (palavras) e regras gramaticais (sintaxe).
Mas, qual a vantagem do uso de pseudocdigos?

3.1.1 VANTAGENS
O pseudocdigo a escrita, por meio de regra predefinida, dos passos a serem
seguidos para a resoluo de um problema. o resultado da anlise e resoluo
de um problema exposto em um enunciado.
A passagem de um algoritmo para uma linguagem de programao tem um
trnsito fcil, bastando, para isso, o conhecimento do vocabulrio e regras
sintticas da linguagem/idioma desejado.

3.1.2 ESTRUTURA BSICA PARA UM PSEUDOCDIGO


A ferramenta para representao de algoritmos utilizada at agora (Descrio

Lgica de Programao - Everton Coimbra de Arajo

45

Narrativa), possui suas regras, embora sejam bem flexveis.


No caso do pseudocdigo, as regras so mais arbitrrias, pois trazemos de nosso
idioma palavras que representaro comportamentos e aes que devero ser
tomadas pelo algoritmo.
A estas palavras, d-se o nome de Palavras Reservadas Linguagem, ou seja,
voc NO pode utilizar tais palavras para outros fins seno quele que ela
representa. Comearemos agora, pouco a pouco, a conhecer estas palavras.
Veja a estrutura bsica que um pseudocdigo deve ter e seu comparativo para
as linguagens de implementao propostas.

E ateno! As palavras reservadas esto em negrito e o texto em itlico dever


ser preenchido pelo programador, desconsiderando os sinais < > . No se
assuste, muito simples. Para cada uma das estruturas existem consideraes
logo aps aquelas.

A seguir, um exemplo clssico encontrado em todos os livros de iniciao


programao, o famoso Ol, Mundo!

46

Lgica de Programao - Everton Coimbra de Arajo

3.2. ENDENTAO
A endentao est diretamente ligada formatao de programas, tendo como
finalidades principais:
- melhorar a legibilidade deles;
- facilitar a manutenibilidade posterior;
- facilitar a identificao do erro lgico durante a execuo.
Endentao deve ser utilizada para indicar que as instrues endentadas
esto sob controle da instruo anterior no endentada. O uso consistente de
endentao essencial para a legibilidade do programa.

Use sempre endentao para instrues dentro de blocos ou para instrues que
fazem parte de alguma estrutura de controle ou seguindo um rtulo.
Observe, no pseudocdigo anterior, que a instruo Escreva est endentada e,
visivelmente, nota-se que ela est sob o controle de Incio e Fim.

3.3. DECLARAO DE VARIVEIS


A declarao das variveis a serem manipuladas no algoritmo devem estar entre
as palavras reservadas Variveis e Incio. Toda varivel utilizada deve ter um nome
e um tipo. Na unidade anterior, foram tratados os tipos de dados possveis para
uma varivel e as regras para atribuir um nome a ela.

Lgica de Programao - Everton Coimbra de Arajo

47

3.4. ATRIBUIO DE VARIVEIS


A atribuio de varivel se d quando precisamos armazenar algum valor para
ser usado posteriormente em nosso algoritmo, seja este uso em operaes ou na
simples informao para o usurio. Quando utilizamos pseudocdigo para
representar algoritmos, devemos convencionar um smbolo para representar esta
operao. Normalmente utilizamos := (dois pontos seguido de um igual sem
espao), um simples sinal de = (igual) ou ainda os smbolos grficos
ou
para
representar que a parte que est direita do operador atribida varivel a
seu lado esquerdo. Como na matemtica, sem segredos.

3.5. ENTRADA DE DADOS


Uma operao de entrada de dados se refere a qualquer valor que seja
informado (digitado) pelo usurio. Este valor pode ser numrico ou literal, e ser
armazenado, obrigatoriamente, em uma varivel de seu respectivo tipo. Ou seja,
um valor literal no pode ser armazenado em uma varivel numrica, porm um
valor numrico pode ser armazenado em uma varivel literal, mas este ser
tratado como literal. Quando representamos um algoritmo por meio de
pseudocdigos, vrias palavras de nosso idioma podem ser utilizadas, tais como
Leia, Entre, Pegue ou Receba.
Perceba que, como so vrias as opes, faz-se necessrio que seja
estabelecida uma conveno. Aqui ser definida como Leia.
interessante saber que o valor informado pelo usurio ser guardado
(armazenado) na varivel imediatamente aps a instruo Leia. Apesar de
algumas literaturas trazerem vrias variveis em uma nica instruo Leia,
separadas apenas por vrgulas (,), recomendado que cada instruo Leia tenha
apenas uma varivel ligada a ela.

48

Lgica de Programao - Everton Coimbra de Arajo

3.6. SADA DE DADOS


Uma operao de sada de dados se refere a qualquer valor exibido ou retornado
ao usurio. Este valor pode ser uma mensagem de orientao, o resultado de uma
expresso, um valor constante ou uma varivel ( lgico que ser exibido o valor
contido na varivel). Quando representamos um algoritmo por meio de
pseudocdigos, vrias palavras de nosso idioma podem ser utilizadas, tais como
Escreva, Informe, Mostre ou Exiba. Novamente, h a ocorrncia de vrias
possibilidades, o que sugere a escolha de um dos termos. No caso desta unidade
optamos por Escreva.
interessante saber que, quando desejarmos exibir ao usurio uma frase, esta
deve estar entre aspas (estas aspas, podem ser a simples ou as duplas, mas
usaremos as duplas). Se quisermos exibir um valor numrico constante, basta
inform-lo aps a instruo. Se o que desejarmos exibir ao usurio for o contedo
de uma varivel, basta informarmos tal varivel aps a instruo Escreva.

3.7. ALGUMAS SITUAES


3.7.1. ESTRUTURA SEQUENCIAL
Com os conceitos e as instrues primitivas passadas, podemos iniciar o
desenvolvimento e o aprendizado necessrio para a resoluo e representao

Lgica de Programao - Everton Coimbra de Arajo

49

de algoritmos em sua forma de pseudocdigos.

Sobre o salrio bruto de um funcionrio, so descontados 8% de


INSS, 10% de IR (imposto de renda) e sobre o restante 0,5%
referente filiao sindical. Para cada dependente (filhos), o
funcionrio ganha R$ 50,00. Ao ser fornecido o valor do salrio
bruto do funcionrio e a quantidade de dependentes, calcule :
a) O total dos descontos
b) Total de acrscimo
c) Salrio lquido.
Algoritmo CalculoDeFolha
Variveis
SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos,
SalarioLiquido : Real
Dependentes : Inteiro
Incio
Escreva Informe o Salrio Bruto
Leia SalarioBruto
Escreva Informe a Quantidade de Dependentes
Leia Dependentes
INSS
SalarioBruto*0.08
IR
SalarioBruto * 0.10
FS
(SalarioBruto (INSS+IR)) * 0.005
TotalDeDescontos
INSS + IR + FS
TotalDeAcrescimos
(Dependentes * 50)
SalarioLiquido
SalarioBruto TotalDeDescontos + TotalDeAcrescimos
Escreva O Total de Descontos : , TotalDeDescontos
Escreva O Total de Acrscimos : , TotalDeAcrescimos
Escreva O Salrio Lquido : , SalarioLiquido
Fim

O primeiro passo na codificao de um pseudocdigo a identificao das


variveis que se faro necessrias para a resoluo. Como fazer isso? Bom, o
comeo deve ser com o enunciado. Devemos trabalhar o texto e nele identificar
o que deve ser recebido pelo pseudocdigo para que solucione o problema
proposto e tambm aquilo que ser informado ao usurio, normalmente a
resoluo.

Mas isso no tudo! Podem surgir alguns problemas


durante a resoluo, e a emerge a necessidade de outras
variveis. Ateno a esta prxima etapa.

50

Lgica de Programao - Everton Coimbra de Arajo

Observe, no quadro a seguir, o que ser fornecido ao algoritmo para que


processe o desejado.
Sobre o salrio bruto de um funcionrio, so descontados 8% de INSS, 10% de IR
(imposto de renda) e sobre o restante 0,5% referente filiao sindical. Para
cada dependente (filhos) o funcionrio ganha R$ 50,00. Ao ser fornecido o
valor do salrio bruto do funcionrio e a quantidade de dependentes, calcule:
...

Algoritmo CalculoDeFolha
Variveis
SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos,
SalarioLiquido : Real
Dependentes : Inteiro
Incio
Escreva Informe o Salrio Bruto
Leia SalarioBruto
Escreva Informe a Quantidade de Dependentes
Leia Dependentes
...
Fim
Veja a ligao entre as declaraes destas variveis e seu real uso dentro do
pseudocdigo. Realmente so dados de entrada.
Agora, identificada na figura a declarao do que informado ao usurio, ou
seja, aquilo que deve ser resolvido pelo algoritmo: o problema.
..., calcule :
a)
b)
c)

O Total dos Descontos


Total de Acrscimo
Salrio Lquido

Algoritmo CalculoDeFolha
Variveis
SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos,
SalarioLiquido : Real
Dependentes : Inteiro
Incio
...
Escreva O Total de Descontos : , TotalDeDescontos
Escreva O Total de Acrscimos : , TotalDeAcrescimos
Escreva O Salrio Lquido : , SalarioLiquido
Fim

Lgica de Programao - Everton Coimbra de Arajo

51

Note agora a existncia de variveis que no so nem de entrada, nem de sada.


Podemos caracteriz-las como variveis auxiliares, pois elas realmente auxiliam a
resoluo do problema.
...
Algoritmo CalculoDeFolha
Variveis
SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos,
SalarioLiquido : Real
Dependentes : Inteiro
Incio
...
INSS
SalarioBruto*0.08
IR
SalarioBruto * 0.10
FS
(SalarioBruto (INSS+IR)) * 0.005
TotalDeDescontos
INSS + IR + FS
TotalDeAcrescimos
(Dependentes * 50)
SalarioLiquido
SalarioBruto TotalDeDescontos + TotalDeAcrescimos
...
Fim
No caso especfico deste problema, estas variveis so desnecessrias, pois o
resultado pode ser obtido diretamente, mediante operaes matemticas.
Vejamos como poderia ficar esta resoluo.
...
Algoritmo CalculoDeFolha
Variveis
SalarioBruto, TotalDeDescontos, TotalDeAcrescimos, SalarioLiquido : Real
Dependentes : Inteiro
Incio
...
TotalDeDescontos
(SalarioBruto * 0.08) + (SalarioBruto * 0.10)
TotalDeDescontos
(SalarioBruto TotalDeDescontos) * 0.005
...
Fim
Observe que, para a implementao, optou-se por duas linhas para o clculo do
desconto, pois a Filiao Sindical sobre o Salrio Bruto j descontado o INSS e IR.
bvio que, matematicamente, daria para incluir tudo isso em uma nica linha,
porm poderia ficar poluda, dificultando a compreenso da referida linha de
operao.
Outra situao seria a resoluo, inclusive sem o uso das variveis de sada,
porm, no incio do aprendizado, este uso excessivo de variveis benfico, mas
com o decorrer deve ser evitado, otimizando o desempenho e os recursos
utilizados.

52

Lgica de Programao - Everton Coimbra de Arajo

...
Algoritmo CalculoDeFolha
Variveis
SalarioBruto : Real
Dependentes : Inteiro
Incio
...
Escreva O Total de Descontos : , (SalarioBruto * 0.08) + (SalarioBruto *
0.10) + ((SalarioBruto ((SalarioBruto * 0.08) + (SalarioBruto * 0.10))) *
0.05
Escreva O Total de Acrscimos : , (Dependentes * 50)
Escreva O Salrio Lquido : , SalarioBruto ((SalarioBruto * 0.08) +
(SalarioBruto * 0.10) + ((SalarioBruto ((SalarioBruto * 0.08) +
(SalarioBruto * 0.10))) * 0.05) + (Dependentes * 50)
Fim
Note a expresso acima. H casos em que isso no recomendado, tampouco
dever ser feito, pois, em uma necessidade de alterao, dificultar a
compreenso.

Desenvolva um programa que receba o salrio-base de um


funcionrio, calcule e mostre o salrio a receber, sabendo-se
que esse funcionrio tem gratificao de 5% sobre o salriobase e paga imposto de 7% sobre o salrio-base.

Algoritmo CalculoDeFolha
Variveis
SalarioBase, SalarioLiquido : Real
Incio
Escreva Informe o Salrio Base
Leia SalarioBase
SalarioLiquido
SalarioBase + (SalarioBase * 0.05)
(SalarioBase * 0.07)
Escreva O Salrio Lquido : ,SalarioLiquido
Fim

O problema a ser solucionado neste enunciado relativamente simples. Ser


informado pelo usurio um valor qualquer (SalarioBase) e sobre este valor devero
ser aplicados dois percentuais: um como crdito (gratificao) ao valor
informado, e outro como dbito (imposto). Ou seja, o primeiro valor aumentar o
valor inicial, e o segundo diminuir. Os valores a serem aplicados esto explcitos
no enunciado, devendo apenas ser aplicados em uma frmula/expresso.
Perceba que, neste pseudocdigo, foram utilizadas apenas as variveis
necessrias: a de entrada (SalarioBase) e a de sada (SalarioLiquido). Poderia
optar-se por um desenvolvimento mais detalhado e fazer uso de variveis

Lgica de Programao - Everton Coimbra de Arajo

53

auxiliares, mas no seria nada otimizado e muito menos til neste caso. Caso se
opte por este uso, a resoluo seria semelhana do mostrado a seguir.
...
Algoritmo CalculoDeFolha
Variveis
SalarioBase, SalarioLiquido, Credito, Debito : Real
Incio
...
Credito
(SalarioBase * 0.05)
Debito
(SalarioBase * 0.07)
SalarioLiquido
SalarioBase + Credito Debito
...
Fim
Observe que, como foram informados os valores em percentual a serem
descontados, estes puderam ser aplicados diretamente na frmula, sem
necessidade de aplicar a regra de trs.

3.8. PSEUDOCDIGOS ESTRUTURA CONDICIONAL


3.8.1. ESTRUTURA CONDICIONAL
Se ... Ento
Seno Se ... Ento
Seno ...
Fim se
Leia dois valores numricos e inteiros, e efetue a soma destes
valores. Caso o valor encontrado na soma
- seja maior ou igual a 10, este valor dever ser somado de 5;
- no seja maior ou igual a 10, este valor dever ser subtrado
de 5.
- exiba o valor final.
Algoritmo Soma
Variveis
A, B, Soma : Inteiro
Incio
Escreva Informe o primeiro valor
Leia A
Escreva Informe o segundo valor
Leia B
Soma
(A + B)
Se (Soma >= 10) ento

54

Lgica de Programao - Everton Coimbra de Arajo

Soma
Soma + 5
Seno
Soma
Soma - 5
FimSe
Escreva O resultado de toda a operao , Soma
Fim

O problema apresentado neste enunciado identificar qual operao dever


ser feita sobre determinado resultado, obtido mediante a soma de dois valores,
os quais sero fornecidos pelo usurio. Note que a operao que dever ser
feita no de grande importncia, mas a identificao de quando dever ser
feita, sim.
Neste exemplo, o uso de uma varivel auxiliar bem visto (Soma), pois por meio
do que ela recebe que o problema poder ser resolvido, sendo feita uma outra
operao, a depender do resultado da expresso condicional. Tendo realizado a
avaliao da soma dos dois valores, a operao pertinente, mostra-se ento o
resultado. Note que o resultado mostrado apenas aps todas as possibilidades
(apenas duas) terem sido avaliadas, e no a cada avaliao.

Sendo dados trs nmeros inteiros distintos (assume-se que o


sero), faa um algoritmo que escreva o maior nmero
digitado.

Algoritmo MaiorNumero
Variveis
A, B, C : Inteiro
Incio
Escreva Informe o primeiro nmero
Leia A
Escreva Informe o segundo nmero
Leia B
Escreva Informe o terceiro nmero
Leia C
Se (A > B) ento
Se (A > C) ento
Escreva O maior nmero , A
Seno
Escreva O maior nmero , C
FimSe
Seno
Se (B > C) ento

Lgica de Programao - Everton Coimbra de Arajo

55

Escreva O maior nmero , B


Seno
Escreva O maior nmero , C
FimSe
FimSe
Fim

Sempre que temos um problema em que a soluo dependa de comparao ou


avaliao, quer sejam fornecidas diretamente pelo usurio, quer seja ela o
resultado de uma operao, encontramos uma soluo condicional, que no
sabemos, pois a sequncia de comandos depende de valores variveis.
Como pode ser constatado no enunciado acima, sero fornecidos trs nmeros,
que no se sabe quais so. A cada vez, podem ser nmeros diferentes e talvez,
em uma destas execues, o primeiro nmero fornecido possa ser o maior, mas
em outra no. Em outra situao, o terceiro nmero poder ser o maior. A soluo
deve trabalhar todas as hipteses.

Registrando que os valores digitados seguem a tabela acima, podemos identificar


em que momento o 1o valor maior dentre os trs. Veja abaixo a sinalizao.

Contudo, ns no teremos cincia destes valores, apenas dos locais em que estes
valores estaro armazenados, ou seja, as variveis. Sendo assim, vamos trabalhar o
problema com as colunas e as chamaremos de A (1o valor), B (2o valor) e C (3o
valor). Temos ento as situaes seguintes que devem ser avaliadas a cada
execuo.
1. Quando o valor em A for maior que B, garante que tambm maior
que C? Lgico que no, pois ainda no nos cabe uma deduo.
Porm, se C for maior que A, est claro que C maior que B tambm.
Ento A o maior nmero.
2. Caso ocorra de A ser menor que B, existe garantia de que B maior
que C? Tambm no. Porm, se C for maior que B, seguramente C o
maior nmero, seno B o ser.

56

Lgica de Programao - Everton Coimbra de Arajo

Veja este texto no quadro a seguir :


...
...
Se (A > B) ento
Se (A > C) ento
Escreva O maior nmero , A
Seno
Escreva O maior nmero , C
FimSe
Seno
Se (B > C) ento
Escreva O maior nmero , B
Seno
Escreva O maior nmero , C
FimSe
FimSe
Fim
Outra situao seria na sintaxe das instrues condicionais. Caso uma condio
avaliada no seja a verdadeira, e a contradio seja interessante, utilizamos o
seno, mas h casos em que vrias contradies podem ocorrer e, alm disso,
mais de uma condio pode ser avaliada ao mesmo tempo. Veja a figura.
...
...
Se (A > B) E (A > C) ento
Escreva O maior nmero , A
Seno Se (A < B) E (B > C) ento
Escreva O maior nmero , B
Seno
Escreva O maior nmero , C
FimSe
Fim
Observe agora que a expresso que operada por E, s ser verdadeira se todas
retornarem verdadeiro.

3.8.2. ESTRUTURA CONDICIONAL COM ESCOLHA ... CASO


Nos exemplos anteriores sobre estrutura condicional, tratou-se da estrutura
Se...Seno Se...FimSe. Porm, esta no a nica. Existe outra estrutura que veremos a
seguir e que trabalha com mltiplas escolhas.
Importante!
Esta estrutura no foi tratada ainda, desta forma, muita ateno s explicaes
que seguem sobre sua estrutura bsica, assim como sobre o detalhamento de
suas especificidades.

Lgica de Programao - Everton Coimbra de Arajo

57

Escolha (expresso)
Caso <rtulo 1>:
<Bloco de comandos>
Caso <rtulo 2>:
<Bloco de comandos>
Caso <rtulo 3>:
<Bloco de comandos>
Seno
<Bloco de comandos>
FimEscolha
Algumas consideraes para esta nova estrutura devem ser vistas:
- A expresso avaliada, e o valor ser comparado com um dos rtulos.
- A opo seno opcional.
- O rtulo ser aqui definido como uma constante caractere, ou uma
constante numrica inteira, embora em algumas linguagens possam
ser usadas constantes literais.
- A estrutura muito usada em algoritmos com menus, tornando-os mais
claros do que quando usamos a condio Se aninhada.
Para ajudar um pouco, quero relembrar com vocs esta conceituao de
Aninhamento: o termo que se refere a estruturas dentro de outras, por exemplo,
uma estrutura Se completa dentro de uma outra estrutura Se. Aninhamento no
privativo a estruturas condicionais, podem ocorrer e ocorrem tambm em estruturas
de repetio.

Escrever um algoritmo que leia um peso na terra e o nmero


de um planeta, e exiba o valor de seu peso neste planeta. A
relao de planetas dada a seguir juntamente com o valor
das gravidades relativas Terra:

Para calcular o peso no planeta utilize a frmula:


PesoNoPlaneta =

PesoNaTerra
10

* Gravidade

Algoritmo PesoPlaneta
Variveis
Opcao : Inteiro

58

Lgica de Programao - Everton Coimbra de Arajo

Peso : Real
Incio
Escreva Planetas que podem ser analisados
Escreva 1-Mercrio
Escreva 2-Vnus
Escreva 3-Marte
Escreva 4-Jpiter
Escreva 5-Saturno
Escreva 6-Urano
Leia Opcao
Escreva Informe seu peso atual
Leia Peso
Escolha (Opcao)
Caso 1 :
Escreva Seu peso no planeta Mercrio : , (Peso/10)*0.37
Caso 2 :
Escreva Seu peso no planeta Vnus : , (Peso/10)*0.88
Caso 3 :
Escreva Seu peso no planeta Marte : , (Peso/10)*0.38
Caso 4 :
Escreva Seu peso no planeta Jpiter : , (Peso/10)*2.64
Caso 5 :
Escreva Seu peso no planeta Saturno : , (Peso/10)*1.15
Caso 6 :
Escreva Seu peso no planeta Urano : , (Peso/10)*1.17
Seno
Escreva A opo , Opcao, no pode ser avaliada
FimEscolha
Fim

Ser exibido ao usurio um menu com as opes que ele pode escolher e que
sero processadas pelo pseudocdigo. Neste caso, as opes se referem a nomes
de planetas associados a um nmero, como se fosse um cardpio de um
restaurante, pois, na realidade, a ideia de um menu realmente esta. Veja no
quadro a seguir esta situao.
...
...
Escreva Planetas que podem ser analisados
Escreva 1-Mercrio
Escreva 2-Vnus
Escreva 3-Marte
Escreva 4-Jpiter
Escreva 5-Saturno
Escreva 6-Urano
Leia Opcao
...

Lgica de Programao - Everton Coimbra de Arajo

59

preciso agora, aps a escolha do usurio, verificarmos qual foi esta escolha.
Poderamos, sem problema algum, fazer uso da estrutura Se, mas para este tipo de
situao a estrutura Escolha a mais indicada. Quando fazemos uso desta
estrutura, temos que informar a qual varivel sero feitos os testes e, a cada caso,
informarmos o valor que est sendo comparado (que deve existir na varivel da
Escolha). Veja o quadro a seguir.
...
...
Escolha (Opcao)
Caso 1 :
Escreva Seu peso no planeta Mercrio : , (Peso/10)*0.37
Caso 2 :
Escreva Seu peso no planeta Vnus : , (Peso/10)*0.88
Caso 3 :
Escreva Seu peso no planeta Marte : , (Peso/10)*0.38
Caso 4 :
Escreva Seu peso no planeta Jpiter : , (Peso/10)*2.64
Caso 5 :
Escreva Seu peso no planeta Saturno : , (Peso/10)*1.15
Caso 6 :
Escreva Seu peso no planeta Urano : , (Peso/10)*1.17
Seno
Escreva A opo , opcao, no pode ser avaliada
FimEscolha
...

Observe que, como no foi feita nenhuma validao aos valores digitados no
menu, precisamos prever que o usurio poder digitar um valor que no faz parte
das opes disponveis. Sendo assim, temos que informar a ele esta situao.
Observe tambm que o resultado da frmula interessar apenas para ser
informado ao usurio. Nessa situao, a expresso avaliada diretamente na
instruo Escreva. Vejamos algumas situaes de execuo:

Nesta unidade, apresentamos breve introduo sobre os


pseudocdigos, que representam uma linguagem de
programao hipottica.
Os algoritmos apresentados nesta unidade se limitaram
estrutura sequencial, sendo trabalhados, em seguida, os

60

Lgica de Programao - Everton Coimbra de Arajo

algoritmos condicionais. A lgica foi toda trabalhada nas unidades anteriores.


Estamos agora fazendo uso de uma linguagem e no mais narrao.
Nesta fase tambm foram abordados problemas que esto mais prximos da
realidade, em sua forma de resoluo, pois trabalhamos condies e estamos
sujeitos a elas diariamente. Foram tambm exibidas algumas opes e regras
para o desenvolvimento de pseudocdigos com estruturas condicionais.
Estamos avanando significativamente dentro das tcnicas e conhecimentos
necessrios para a programao. Fique atento e, caso seja necessrio, refaa
as leituras, pesquise em outras fontes, busque sempre mais! No fique satisfeito
somente com as informaes aqui registradas. sempre necessrio questionar,
testar, fazer, confrontar e refazer, para ento construir suas convices. Isto
aprender!

Parabns por chegar at aqui... E vamos em frente!

Lgica de Programao - Everton Coimbra de Arajo

61

UNIDADE IV
ESTRUTURAS DE
REPETIO COM
PSEUDOCDIGOS

Nesta unidade continuaremos a abordagem dos pseudocdigos, agora tratando


com maior intensidade as especificidades dos pseudocdigos com estruturas de
repetio.
A estrutura de repetio caracterizada pela necessidade de um mesmo
conjunto de instrues ocorrer - serem elas executadas - mais de uma vez, da
mesma forma que a primeira. O uso destas estruturas possibilita a reutilizao de
cdigos. Ao invs de, por exemplo, solicitar dez vezes para um usurio informar
alguma coisa, pede-se uma vez e esta solicitao inserida em uma estrutura de
repetio.
Esperamos, assim, que ao final desta unidade voc seja capaz de
- Conhecer as estruturas de repetio existentes;
- Identificar a correta estrutura de repetio para um problema a ser
resolvido.

4.1. ESTRUTURAS DE REPETIO


Uma estrutura de repetio permite ao programador especificar que uma ao
ser repetida enquanto alguma condio permanecer verdadeira.
A estrutura de repetio tambm garante que um processo repetitivo ser feito
sempre da mesma forma, no importando se ele ocorrer uma, dez, cem ou mil
vezes. Existe uma subdiviso para a estrutura de repetio:
- Contada;
- Condicional, com teste no incio;
- Condicional, com teste no final.
Vejamos, resumidamente, cada uma dessas estruturas.

4.2. ESTRUTURAS DE REPETIO CONTADA


Como visto nas unidades anteriores sobre representao de algoritmos, podemos
conceituar uma estrutura com repetio contada como aquela em que sabemos,
antes de ela ocorrer, quantas vezes dever ocorrer. Deve ficar claro, entretanto,
que saber quantas vezes ocorrer no significa saber a quantidade exata, mas
que este valor pode estar atribudo a uma varivel, informada ou no pelo usurio.

Sendo dado um nmero, faa um algoritmo que escreva todos


os nmeros mpares menores que esse nmero. Dica: Comece
pelo um.
Algoritmo NumerosImpares
Variveis
Numero, I : Inteiro
Incio
Escreva Informe um nmero

Lgica de Programao - Everton Coimbra de Arajo

65

Leia Numero
Para I = 1 At Numero Faa
Se (Resto(I, 2) <> 0) Ento
Escreva I, mpar
FimSe
FimPara
Fim

O problema proposto neste enunciado que dever ser solicitado ao usurio um


nmero, o algoritmo dever fazer uma contagem de 1 at o valor informado, e, a
cada nmero contado, identificar se o mesmo mpar. Se for, deve ser mostrado
seu valor ao usurio.
Agora muita ateno! O texto anterior ao exerccio dizia que uma repetio
caracterizada como contada quando sabemos quantas vezes ela vai
ocorrer, e voc pode agora dizer: Mas eu no sei, o usurio que ir
informar.. verdade, ns realmente no sabemos o valor, mas sabemos
onde ele ser guardado quando o usurio o informar e, sabendo isso,
conseguimos saber o valor. Neste caso, a varivel Nmero.
Ns sabemos contar, porm como o algoritmo pode controlar isso? Primeiramente,
ele precisa de uma estrutura que caracterize, imponha e garanta a repetio.
Esta estrutura a PARA...FAA...FIMPARA. Ela tem esta finalidade.
Supondo que o valor informado na execuo do algoritmo tenha sido 50, a leitura
para a instruo seria : Para cada ocorrncia entre 1 e 50, faa ..... fimpara.
...
...
...
Para I = 1 At Numero Faa
Se (Resto(I, 2) <> 0) Ento
Escreva I, mpar
FimSe
FimPara
Fim

Tudo o que estiver entre o faa e o fimpara ser


caracterizado como o que deve ser feito para cada
ocorrncia, neste caso verificar se a varivel I mpar e, em
caso positivo, inform-la ao usurio. Mas o que e o que
faz esta varivel I ?

Muita calma! Vamos passo a passo...

66

Lgica de Programao - Everton Coimbra de Arajo

Como dito em um passo anterior, preciso prover recursos para que o algoritmo
comece a contar, e isso deve ser feito usando uma varivel que tem seu valor
inicial, como o primeiro informado na instruo PARA e a cada vez que se
alcana o FIMPARA, ela automaticamente incrementada em um. Aps isso,
retorna ao PARA e verificado se no ultrapassou o mximo permitido (o segundo
valor informado). Caso tenha ultrapassado, nada entre o PARA e o FIMPARA
executado, saltando o controle do algoritmo para a primeira linha aps o
FIMPARA.

Faa um algoritmo que leia 10 nmeros e obtenha:


a) A soma dos nmeros;
b) A mdia dos nmeros;
c) O maior nmero;
d) O menor nmero.
Algoritmo MenuNumeros
Variveis
Numero, Soma, Maior, Menor, I : Inteiro
Media : Real
Incio
Soma = 0
Para I = 1 At 10 Faa
Escreva Informe um nmero , I, de 10.
Leia Numero
Soma = Soma + Numero
Se (I=1) ou (Numero > Maior) Ento
Maior = Numero
FimSe
Se (I=1) ou (Numero < Menor) Ento
Menor = Numero
FimSe
FimPara
Media = (Soma / 10)
Escreva A soma dos 10 nmeros digitados : , Soma
Escreva A mdia aritmtica entre os 10 nmeros digitados : , Media
Escreva O maior nmero dentre os 10 digitados , Maior
Escreva O menor nmero dentre os 10 digitados : , Menor
Fim

Lgica de Programao - Everton Coimbra de Arajo

67

O que se repete neste algoritmo? A solicitao de 10 nmeros, porm, a cada


nmero digitado, devem ser efetuados alguns passos com objetivos de atender s
quatro solicitaes expressas no enunciado.
A primeira solicitao diz respeito soma de todos os nmeros. Para isso se faz
necessria uma varivel que guarde os valores acumulados a cada nmero
informado. Note que esta varivel se chama SOMA, mas poderia ter qualquer
nome. A principal informao a ser feita que ela recebe o valor 0 (zero) antes da
estrutura de repetio comear.
Este procedimento se faz necessrio, pois como poderia ter um total se, a cada
execuo do lao, zerssemos a varivel acumuladora? E por que o 0 (zero) ? Ele
no afetar em nada o resultado final.
...
...
Soma = 0
Para I = 1 At 10 Faa
...
Soma = Soma + Numero
...
FimPara
...
Fim
A segunda solicitao pede a mdia dos nmeros informados. Como o texto no
diz a que tipo de mdia se refere, assumimos a aritmtica, e a frmula diz que a
obtemos atravs da soma de N valores que devem ser divididos por N. Bem, a
soma ns j temos, pois foi obtida para a resoluo do primeiro item. Basta ento
dividirmos pelo total de nmeros informados, neste caso explicitamente o 10. Note
que esta operao feita aps ter a soma garantida, ou seja, aps a entrada de
todos os nmeros (aps a repetio).
...
...
Para I = 1 At 10 Faa
...
Soma = Soma + Numero
...
FimPara
Media = (Soma / 10)
...
Fim
A terceira solicitao quer o maior nmero de todos os 10 informados. Como fazer
isso? Se fossemos fazer esta verificao em uma folha com 10 nmeros, seria fcil,
pois compararamos os nmeros entre si e ento identificaramos o maior. Mas
como fazermos isso, quando os nmeros nos sero informados um a um? mais
fcil, voc ver.

68

Lgica de Programao - Everton Coimbra de Arajo

Se temos um nico nmero, existe, nestes valores que temos (um nico nmero),
algum maior que ele? No, pois ele o nico. Sendo assim, podemos afirmar que,
em qualquer situao de comparao, o primeiro valor informado ou obtido ser
sempre o maior, o menor, o mais baixo, o mais magro, o mais gordo, ....
...
...
Para I = 1 At 10 Faa
...
Se (I = 1) ou (Numero > Maior) Ento
Maior = Numero
FimSe
...
FimPara
...
Fim

isso que fizemos ao comparar nossa varivel de controle a 1 (um), como pode
ser visto na figura acima. Mas existem outros valores, como fazer? Bem, na primeira
vez em que a estrutura ocorre, existe a garantia da varivel maior receber um
valor. Sendo assim, s comparar o valor atual com aquele que temos como
maior. Veja a figura anterior. O operador OU garante que a condio ser
satisfeita em uma ou outra situao.
interessante ressaltar que esta uma das muitas maneiras de resolver este
problema.
Quanto quarta solicitao, podemos dizer que a regra a mesma para a
resoluo da terceira opo.
Veja abaixo o teste de mesa para a resoluo apresentada.

Lgica de Programao - Everton Coimbra de Arajo

69

4.3. ESTRUTURAS DE REPETIO CONDICIONAL,


COM TESTE NO INCIO
Da mesma forma que visto nos textos anteriores que trataram as formas de
representao de um algoritmo, a repetio condicional em pseudocdigos
ocorrer de duas formas: o teste condicional (pergunta) feito antes (incio) de a
estrutura de comandos ocorrer ou ao final (aps) da estrutura de comandos.

Calcule o imposto de renda de um grupo de contribuintes,


considerando que os dados de cada contribuinte so:
nmero de CPF, nmero de dependentes e renda mensal.
Para cada contribuinte ser feito um desconto de 5% de
salrio mnimo por dependente. Os valores da alquota para
clculo do imposto so:
- At 2 salrios Mnimos : Isento;
- 2,1 at 3 salrios Mnimos : 10%;
- 3,1 at 5 salrios Mnimos : 15%;
- 5,1 at 7 salrios Mnimos : 20%;
- Acima de 7,1 salrios Mnimos: 25%.
O ltimo valor que no ser considerado ter o CPF igual a zero. Deve ser
fornecido o valor atual do salrio mnimo.
Algoritmo DescontoIR
Variveis
CPF, QtdeDependentes, Aliquota : Inteiro
Salario, SalarioMinimo, SalarioBase, ValorIR,
QtdeSalarioMinimo : Real
Incio
Escreva Informe o Salrio Mnimo
Leia SalarioMinimo
Escreva Informe o CPF
Leia CPF
Enquanto (CPF <> 0) Faa
Escreva Informe o salrio do funcionrio
Leia Salario
Escreva Informe a quantidade de dependentes
Leia QtdeDependentes
SalarioBase = (Salrio (QtdeDependentes*(SalarioMinimo*0.05))
QtdeSalarioMinimo = (SalarioBase / SalarioMinimo)
Se (QtdeSalarioMinimo <= 2) Ento
Aliquota = 0
Seno Se (QtdeSalarioMinimo <= 3) Ento
Aliquota = 10
Seno Se (QtdeSalarioMinimo <= 5) Ento
Aliquota = 15
Seno Se (QtdeSalarioMinimo <= 7) Ento
Aliquota = 20

70

Lgica de Programao - Everton Coimbra de Arajo

Seno
Aliquota = 25
FimSe
ValorIR = (SalarioBase * Aliquota) / 100
Escreva O desconto do IR para o CPF , CPF, de , ValorIR
Escreva Informe o CPF
Leia CPF
FimEnquanto
Fim

Este exerccio traz uma situao em que no sabemos quantas vezes, num
determinado conjunto de instrues, estas devem ser executadas, porm
sabemos quando elas deixam de se repetir.
O primeiro passo descobrir qual conjunto de instrues deve ser repetido no
algoritmo. Identificamos a solicitao do CPF (inclusive devido ao fato de ele ser
nosso flag). Para cada CPF deve ser solicitado tambm a quantidade de
dependentes que o contribuinte tem e seu salrio-base. importante lembrar
tambm a necessidade do salrio mnimo, porm este no se repete, pois tem o
mesmo valor para todo o algoritmo. Outro ponto a ser destacado que, a cada
grupo de informaes recebidas, a identificao da alquota de imposto em que
se enquadra cada contribuinte deve ser feita.
...
Algoritmo DescontoIR
...
Incio
Escreva Informe o Salrio Mnimo
Leia SalarioMinimo
Escreva Informe o CPF
Leia CPF
Enquanto (CPF <> 0) Faa
...
FimEnquanto
Fim
Note acima que o Salrio Mnimo est sendo informado antes da estrutura de
repetio (Enquanto). Isso garante que o valor informado pode ser vlido para
toda a estrutura, mas no quer dizer que no possa ser solicitado dentro dela,
como o caso do CPF, que solicitado tambm antes de a estrutura comear,
porm solicitado novamente dentro da estrutura, pois ele nosso flag.

FLAG uma condio predefinida que determina o fim de uma estrutura de


repetio, seja ela contada ou no contada. Na contada, o FLAG implcito
na quantidade de vezes que a estrutura se repete. Na no contada, ela
depende de uma interao do usurio ou um comportamento especfico do
algoritmo.

Lgica de Programao - Everton Coimbra de Arajo

71

Com a estrutura exibida acima, pode o usurio digitar o CPF 0 (zero) antes mesmo
de a estrutura comear? Sim, pode. Isso faria com que a estrutura de repetio
no ocorresse nenhuma vez. No h problemas nisso. Imagine a situao em que
quer fazer algo, mas, na hora de comear, algo ocorre e ento voc opta por
no fazer.
Vamos explicar melhor, por meio de uma analogia bem simples:
Imagine que voc tenha recebido vrias folhas, todas com
vrias linhas, em que cada linha represente informaes
referentes a um CPF. Esta linha tem o nmero do CPF, a
quantidade de dependentes e salrio bsico para o
contribuinte do CPF da linha.
So muitas linhas, muitas folhas... Aff... Voc no contar
quantos so para poder usar uma estrutura de repetio
contada! Mas, tambm no pode garantir que informar todas
as linhas de uma nica vez e, quando 'cansar' ou tiver que
parar, ao invs de informar um CPF vlido, informar o valor 0
(zero), e quando quiser, volta e recomea. Simples, no ?
...
Algoritmo DescontoIR
Variveis
...
Incio
...
Enquanto (CPF <> 0) Faa
Escreva Informe o salrio do funcionrio
Leia Salario
Escreva Informe a quantidade de dependentes
Leia QtdeDependentes
SalarioBase = (Salrio (QtdeDependentes*(SalarioMinimo*0.05))
QtdeSalarioMinimo = (SalarioBase / SalarioMinimo)
...
FimEnquanto
Fim
To logo a estrutura de repetio ocorra (o CPF diferente de zero), deve ser
solicitado o salrio do contribuinte e quantos dependentes ele tem. Um
esclarecimento aqui deve ser dado em relao ao salrio-base para clculo de
imposto de renda. Do salrio utilizado para clculo do imposto j so deduzidos os
descontos, em nosso caso em relao aos dependentes que ele tem. Para isso,
fazemos a operao de produto da quantidade de dependentes com o valor a
que tem direito por salrio mnimo. Aps este clculo, temos o salrio-base para
clculo do imposto.
A identificao da faixa em que o contribuinte se enquadra feita em relao
quantidade de salrios mnimos que apresenta para clculo. Sendo assim,
fazemos uma diviso do salrio identificado como base, pelo valor do salrio
mnimo.

72

Lgica de Programao - Everton Coimbra de Arajo

...
Algoritmo DescontoIR
Variveis
...
Incio
...
Enquanto (CPF <> 0) Faa
...
Se (QtdeSalarioMinimo <= 2) Ento
Alquota = 0
Seno Se (QtdeSalarioMinimo <= 3)) Ento
Alquota = 10
Seno Se (QtdeSalarioMinimo <= 5)) Ento
Alquota = 15
Seno Se (QtdeSalarioMinimo <= 7)) Ento
Alquota = 20
Seno
Alquota = 25
FimSe
ValorIR = (SalarioBase * Alquota) / 100
Escreva O desconto do IR para o CPF , CPF, de , ValorIR
...
FimEnquanto
Fim
Uma vez obtida a quantidade de salrios mnimos que o contribuinte recebe,
fazemos a verificao da faixa em que ele se encontra, para ento identificar a
alquota que ser incidida em seu salrio. Note que a preocupao na estrutura
condicional (Se...Seno Se...Seno...FimSe) identificar e atribuir a uma varivel a
alquota, e no fazer o clculo, pois o clculo s ser feito aps esta identificao,
e a cada contribuinte apenas uma nica alquota ser encontrada, no
justificando fazer o processo a cada verificao de alquota.
Uma vez identificada a alquota (ao final da estrutura condicional), efetuamos o
processo de clculo do valor do imposto de renda para o contribuinte e
consequente exibio do valor encontrado.
...
Algoritmo DescontoIR
Variveis
...
Incio
...
Enquanto (CPF <> 0) Faa
...
Escreva Informe o CPF
Leia CPF
FimEnquanto
Fim

Lgica de Programao - Everton Coimbra de Arajo

73

Observe que, dentro da estrutura de repetio, solicitado novamente, ao


usurio, o CPF do contribuinte. Por qu? Se o CPF for solicitado apenas fora da
estrutura de repetio, caracteriza-se que ele seria comum a todos os
contribuintes, e isso no verdade, alm de ele ser nosso flag, ou seja, ele precisa
ser informado a cada repetio, pois por meio dele se verifica quando o usurio
deseja interromper a estrutura.
Verifique na tabela abaixo a representao do teste de mesa para a resoluo
deste enunciado. Para efeito de exemplos, os CPFs informados no receberam
nenhuma validao, tampouco existem.

Uma empresa deseja fazer um levantamento de seu estoque.


Para isto possui, para cada tipo de produto, seu nome, valor
unitrio e sua quantidade em estoque. A empresa deseja
saber o Valor Contbil em estoque de cada produto, quantos
tipos de produtos existem em estoque, o saldo de todos os
produtos e Total Contbil Geral. A digitao terminar
quando o nome do produto for igual a FIM.
Como voc procederia?
Algoritmo Estoque
Variveis
Nome : String
ValorUnitario, Quantidade, SubTotal, TotalGeral, Estoque : Real
QtdeTipos : Inteiro
Incio
Estoque = 0
QtdeTipos = 0
TotalGeral = 0
Escreva Informe o nome do produto
Leia Nome
Enquanto (Nome <> FIM) Faa
QtdeTipos = QtdeTipos + 1
Escreva Informe o valor Unitrio
Leia ValorUnitario
Escreva Informe a quantidade em estoque
Leia Quantidade

74

Lgica de Programao - Everton Coimbra de Arajo

SubTotal = (Quantidade * ValorUnitario)


Estoque = Estoque + Quantidade
TotalGeral = TotalGeral + SubTotal
Escreva O valor total do produto , Nome, , SubTotal
Escreva Informe o nome do produto
Leia Nome
FimEnquanto
Escreva Existem , QtdeTipos, tipos de produtos
Escreva O estoque em volumes , Estoque
Escreva O valor comercial do estoque , TotalGeral
Fim

Este algoritmo se assemelha a um levantamento de estoque (inventrio). De


modo idntico ao exerccio anterior, no se sabe quantas vezes ocorrer a
repetio, ou seja, quantos itens existem na suposta empresa.
...
Algoritmo Estoque
Variveis
...
Incio
Estoque = 0
QtdeTipos = 0
TotalGeral = 0
...
Enquanto (Nome <> FIM) Faa
...
FimEnquanto
...
Fim
Observe a inicializao das varivels. So elas que exibiro ao usurio aquilo que
ele pede, so todas acumuladoras. Sendo assim, precisam inicializar com zero. A
varivel Estoque ter a quantidade de volumes, QtdeTipos se refere a quantidade
itens, e a TotalGeral trar o Estoque Contbil, ou seja, o valor financeiro do
estoque da empresa. Estas trs varaveis sofrero alteraes a cada produto
informado pelo usurio.
...
Algoritmo Estoque
Variveis
...
Incio
...
Escreva Informe o nome do produto
Leia Nome
Enquanto (Nome <> FIM) Faa

Lgica de Programao - Everton Coimbra de Arajo

75

...
FimEnquanto
...
Fim

Igualmente ao exerccio anterior, temos aqui nosso flag, que solicitado antes de
a estrutura comear e depois, dentro da estrutura, antes que esta termine. Note
que apenas houve alterao no tipo de dado utilizado, pois usamos agora um
literal.
...
Algoritmo Estoque
Variveis
...
Incio
...
Enquanto (Nome <> FIM) Faa
QtdeTipos = QtdeTipos + 1
Escreva Informe o valor Unitrio
Leia ValorUnitario
Escreva Informe a quantidade em estoque
Leia Quantidade
...
FimEnquanto
...
Fim

Sempre que a estrutura ocorre, significa que um novo item ter seus dados
informados. Sendo assim, devemos incrementar nossa varivel responsvel pela
identificao final da quantidade de itens informados, e logo ento, solicitar ao
usurio o valor unitrio de tal produto e a quantidade existente dele no estoque.
...
Algoritmo Estoque
Variveis
...
Incio
...
Enquanto (Nome <> FIM) Faa
...
SubTotal = (Quantidade * ValorUnitario)
Estoque = Estoque + Quantidade
TotalGeral = TotalGeral + SubTotal
Escreva O valor total do produto , Nome, , SubTotal
...
FimEnquanto
...
Fim

76

Lgica de Programao - Everton Coimbra de Arajo

Uma vez tendo o usurio informado os valores solicitados e necessrios, devem ser
calculados (acumulados) os valores desejados pelo usurio. Um deles exibido na
prpria estrutura, pois se refere a cada produto, seu subtotal.
...
Algoritmo Estoque
Variveis
...
Incio
...
Enquanto (Nome <> FIM) Faa
...
Escreva Informe o nome do produto
Leia Nome
FimEnquanto
...
Fim
Ao se chegar no final da estrutura de repetio, para que ela reinicie (ou
termine), deve ser informado pelo usurio o nome do prximo produto, que pode
inclusive ser o valor que terminar a estrutura (FIM).
...
Algoritmo Estoque
Variveis
...
Incio
...
Enquanto (Nome <> FIM) Faa
...
FimEnquanto
Escreva Existem , QtdeTipos, tipos de produtos
Escreva O estoque em volumes , Estoque
Escreva O valor comercial do estoque , TotalGeral
Fim
Ao terminar o processo de levantamento de estoque com todos os produtos da
empresa, os totais j foram obtidos. Sendo assim, basta inform-los ao usurio.
Veja abaixo o teste de mesa para a resoluo do algoritmo para o problema
apresentado.

Lgica de Programao - Everton Coimbra de Arajo

77

Procure observar com ateno as especificidades contidas em cada exemplo


colocado at aqui, pois estas situaes descritas so prticas e muito
relacionadas com aes do cotidiano. Se permanecer qualquer dvida, releia os
textos explicativos, refaa o percurso e pesquise!

4.4. ESTRUTURAS DE REPETIO CONDICIONAL,


COM TESTE NO FINAL
Como visto nos exemplos de teste no incio, pode ocorrer a situao de a
repetio nunca ocorrer, uma vez que, para ela ocorrer a primeira vez, passa
antes pelo teste condicional. Esta situao j no se d nos algoritmos com testes
condicionais ao final da repetio, pois toda a estrutura dever ocorrer ao menos
uma vez, para assim poder ser feito o teste condicional.

Um comerciante deseja pagar todas as suas contas do dia. Faa


um algoritmo que solicite o valor a ser pago e a Taxa de Juros,
caso a conta esteja em atraso. Calcule o Total dos valores de
multa e o valor total a ser pago. O algoritmo dever tambm
solicitar quantas contas sero pagas no dia. Informe tambm o
total de contas em atraso e o total de contas pagas em dia.
Ateno que no h possibilidade de no haver contas a pagar,
ou seja, haver no mnimo uma conta a ser paga no dia.
Algoritmo Contas
Variveis
QtdeContasAPagar, QtdeContasPagas, QtdeContasEmAtraso : Inteiro
ValorConta, TaxaDeJuros, TotalVlrJuros, TotalAPagar : Real
PagoEmAtraso : String
Incio
QtdeContasPagas = 0
QtdeContasEmAtraso = 0
TotalVlrJuros = 0
TotalAPagar = 0
Escreva Informe quantas contas sero pagas
Leia QtdeContasAPagar
Repita
Escreva Informe o valor da conta
Leia ValorConta

78

Lgica de Programao - Everton Coimbra de Arajo

Escreva Esta conta est sendo paga em atraso (S/N) ?


Leia PagoEmAtraso
Se (PagoEmAtraso = S) Ento
Escreva Informe o ndice da taxa de juros (0-100)
Leia TaxaDeJuros
QtdeContasEmAtraso = QtdeContasEmAtraso + 1
Seno
TaxaDeJuros = 0
FimSe
TotalVlrJuros = TotalVlrJuros + (ValorConta * TaxaDeJuros / 100)
TotalAPagar = TotalAPagar + ValorConta
QtdeContasPagas = QtdeContasPagas + 1
At (QtdeContasPagas = QtdeContasAPagar)
Escreva O Valor total pago por multa , TotalVlrJuros
Escreva O Valor total pago , (TotalAPagar + TotalVlrJuros)
Escreva Contas em atraso : , QtdeContasEmAtraso
Escreva Contas em dia : , (QtdeContasAPagarQtdeContasEmAtraso)
Fim

Esta situao traz um levantamento financeiro, para previso de pagamento. No


sabemos quantas contas sero pagas, mas o usurio as informar. O enunciado
ainda diz que haver sempre o mnimo de uma conta. Isso caracteriza que a
repetio ocorrer no mnimo uma vez.
Releia o pargrafo anterior! Est na ltima frase a dica para fazer o teste no fim,
aps a estrutura ocorrer, ou seja, antes de acabar.
...
Algoritmo Contas
Variveis
...
Incio
QtdeContasPagas = 0
QtdeContasEmAtraso = 0
TotalValorJuros = 0
TotalAPagar = 0
Escreva Informe quantas contas sero pagas
Leia QtdeContasAPagar
Repita
...
At (QtdeContasPagas = QtdeContasAPagar)
...
Fim
Veja a inicializao em 0 (zero) das variveis acumuladoras, diretamente ligadas
ao que o usurio deseja saber ao final. A QtdeContasPagas a responsvel pela

Lgica de Programao - Everton Coimbra de Arajo

79

verificao de at quando a estrutura de repetio ocorrer. Ela garantir que a


quantidade de contas a pagar no seja inferior quantidade de contas pagas.
QtdeContasEmAtraso ser responsvel por informar ao usurio a quantidade de
contas em atraso, no havendo necessidade de existir alguma. TotalValorJuros e
TotalAPagar, se referem aos valores totais solicitados pelo usurio. Note tambm
que, antes de a estrutura comear (por meio do Repita), solicitada ao usurio a
quantidade de contas que sero pagas.
...
Algoritmo Contas
Variveis
...
Incio
...
Repita
Escreva Informe o valor da conta
Leia ValorConta
Escreva Esta conta est sendo paga em atraso (S/N) ?
Leia PagoEmAtraso
...
At(QtdeContasPagas = QtdeContasAPagar)
...
Fim
Para cada ocorrncia da estrutura de repetio dever ser solicitado ao usurio o valor da
conta e se ela est sendo paga em atraso ou no.

...
Algoritmo Contas
Variveis
...
Incio
...
Repita
...
Se (PagoEmAtraso = S) Ento
Escreva Informe o ndice da taxa de juros (0-100)
Leia TaxaDeJuros
QtdeContasEmAtraso = QtdeContasEmAtraso + 1
Seno
TaxaDeJuros = 0
FimSe
...
At (QtdeContasPagas = QtdeContasAPagar)
...
Fim
Uma vez informado pelo usurio se foi ou no pago em atraso a conta, deve-se
executar os procedimentos necessrios para cada situao. Quando for pago em

80

Lgica de Programao - Everton Coimbra de Arajo

atraso, existe uma taxa de juros que deve ser utilizada, alm da necessidade de
acumular a quantidade de contas pagas em atraso, pois uma informao
desejada pelo usurio. Note que, no caso de a conta ter sido paga em dia,
atribudo uma taxa de 0 (zero) . Isso facilita a operao de clculo do valor de
juros e no causa nenhum problema, pois zero, multiplicado por qualquer valor,
resulta em zero.
...
Algoritmo Contas
Variveis
...
Incio
...
Repita
...
TotalVlrJuros = TotalVlrJuros + (ValorConta * TaxaDeJuros / 100)
TotalAPagar = TotalAPagar + ValorConta
QtdeContasPagas = QtdeContasPagas + 1
At (QtdeContasPagas = QtdeContasAPagar)
...
Fim
Tendo sido solicitado ao usurio o valor da conta, se esta foi paga em atraso, ou
no, e identificada a taxa de juros, efetuam-se os clculos (acumuladores)
desejados pelo usurio ao final do algoritmo. Tambm incrementada a varivel
contadora (flag). Perceba que, na estrutura com teste no incio
(Enquanto...FimEnquanto), quando retorna verdadeiro, ela executada, porm na
estrutura de repetio com teste no final (Repita...At), quando for retornado
verdadeiro, indica o trmino da estrutura de repetio.
...
Algoritmo Contas
Variveis
...
Incio
...
Repita
...
At (QtdeContasPagas = QtdeContasAPagar)
Escreva O Valor total pago por multa , TotalVlrJuros
Escreva O Valor total pago , (TotalAPagar + TotalVlrJuros)
Escreva Contas em atraso : , QtdeContasEmAtraso
Escreva Contas em dia : , (QtdeContasAPagarQtdeContasEmAtraso)
Fim
Tendo terminado a estrutura de repetio, e isso ocorre quando todas as contas
foram informadas pelo usurio, os resultados solicitados por ele so exibidos. Note
que ele solicitou tambm a quantidade de contas pagas em dia e no foi criada
Lgica de Programao - Everton Coimbra de Arajo

81

nenhuma varivel para esta informao, e ela realmente no se faz necessria,


pois, se tem o total de contas pagas, obteve-se a quantidade de contas pagas
em atraso. Sendo assim, basta apenas uma operao de subtrao nos valores
conhecidos para identificao de quantas contas foram pagas em dia.

Vamos a uma atividade?

Faa um algoritmo que solicite nmeros inteiros at que um


nmero mpar seja digitado. O algoritmo dever informar, ao
final, quantos nmeros pares foram informados.

Algoritmo NumeroPares
Variveis
Numero, QtdeNumerosPares : Inteiro
Incio
QtdeNumerosPares = 0
Repita
Escreva Informe um nmero
Leia Numero
QtdeNumerosPares = QtdeNumerosPares + 1
At (Resto(Numero, 2) <> 0)
QtdeNumerosPares = QtdeNumerosPares - 1
Escreva Nmeros pares informados , QtdeNumerosPares
Fim

Este exerccio simples, talvez sinta uma dificuldade apenas em saber como
identificar quando um nmero mpar ou par, mas para resolver isso podemos
abstrair a existncia de uma funo chamada Resto( ). Esta recebe dois
argumentos: o nmero a ser dividido e o nmero pelo qual este nmero ser
dividido (numerador e denominador).
O usurio deseja saber quantos nmeros pares foram informados. Identificamos a
varivel contadora e temos que presumir que o primeiro nmero digitado j seja

82

Lgica de Programao - Everton Coimbra de Arajo

um mpar, ento ela comea com 0 (zero). Bem, para verificar se um nmero
par ou mpar, tambm preciso t-lo antes. Lembrando explicaes anteriores,
esta caracterstica que nos identifica quando usar o teste no incio ou no final, mas
no h nada que impea o uso de uma ou outra estrutura para resoluo deste
exerccio.
No momento em que for identificado como mpar o nmero digitado pelo usurio,
a estrutura de repetio se finda e exibida ao usurio a quantidade de nmeros
pares informados. No entanto, antes feita uma subtrao deste valor, pois
quando a estrutura acaba, foi lido um nmero mpar.

Mostramos nesta unidade problemas que trabalham sobre


uma grande variedade de dados, sendo possvel saber
quantos so estes dados antes do processamento, como
tambm se esta quantidade pode estar ligada diretamente
interao com o usurio. primeira situao, demos o nome
de repetio contada. J segunda, de repetio
condicional com teste no incio ou ao trmino da estrutura.
Caracterizamos como repetio uma srie de instrues que devem ser
executadas da mesma forma, por mais de uma vez, mas nada impede que
seja executada uma nica vez.
Esperamos que os exemplos tenham auxiliado na compreenso de mais esses
conceitos! Vamos em frente!
Chegamos ao final da leitura desta unidade e no poderamos deixar de
parabeniz-lo por estar conosco at aqui e cheio de vontade para continuar
o estudo da prxima unidade.

Lgica de Programao - Everton Coimbra de Arajo

83

UNIDADE V
CONJUNTOS

Nesta nova unidade, abordaremos conjuntos e mtodos de classificao e


pesquisa, que so noes importantes para:
- resoluo de problemas que trabalham com um conjunto de dados
que normalmente so ligados a um problema, como a idade dos
alunos de uma nica turma;
- classificar, em forma ascendente ou descendente, os dados de um
determinado conjunto;
- pesquisar por um determinado dado dentre os elementos em um
conjunto.
Portanto, no trmino desta etapa de estudo fundamental que voc seja
capaz de:
- reconhecer a necessidade de um conjunto de dados como tipo de
uma varivel;
- identificar, popular e varrer uma matriz, unidimensional e
bidimensional.

5.1. CONJUNTOS
Voc deve lembrar que definimos varivel como uma entidade criada para
permitir o acesso a uma posio de memria, onde se armazena uma
informao de um determinado tipo de dado pela simples referncia a um nome
simblico.
Compreender o que uma varivel e sua funo no campo da informtica
importante, mas devemos lembrar que existem diversos tipos de variveis.
De fato, so comuns situaes prticas em que se necessita referenciar um grupo
de variveis do mesmo tipo pelo mesmo nome simblico.
Saliba (1993) conceitua como variveis indexadas o conjunto de variveis do
mesmo tipo, referenciveis pelo mesmo nome e individualizadas entre si, por meio
de sua posio dentro desse conjunto.
Um conjunto, na linguagem matemtica, pode ser definido como uma coleo
de elementos e, quando em um mesmo conjunto, dizemos que esses elementos
so do mesmo domnio.
Por exemplo, se temos um conjunto de vogais, qual ser o
domnio do conjunto? S podem ser letras vogais (a, e, i, o, u);
e ainda, tendo um conjunto de elementos numricos, qual
ser o domnio deste conjunto? Sero nmeros...
Da podemos entender domnio, de maneira simplificada,
como o tipo de dados ou elementos que determinado
conjunto pode conter.

Lopes e Garcia (2002) definem como vetor um arranjo de elementos


armazenados, um aps o outro, todos com o mesmo nome. Lembra, de forma
anloga matriz-linha da matemtica, vrias colunas para uma nica linha.
Lgica de Programao - Everton Coimbra de Arajo

87

Ascencio & Campos (2002) definem vetor como uma varivel composta
homognea unidimensional formada por uma sequncia de variveis, todas do
mesmo tipo, com o mesmo identificador (mesmo nome) e alocadas
sequencialmente na memria. Ou seja, uma vez que as variveis tenham o
mesmo nome, o que as distinguir um ndice, que referencia sua localizao
dentro da estrutura.

5.1.1, VETORES OU MATRIZ DE UMA NICA LINHA


Um vetor de 8 elementos pode ser representado graficamente da seguinte forma :

Podemos, de maneira anloga, ter 8 variveis, todas com o mesmo nome e


diferentes por sua posio dentro do vetor, que indicado por um ndice. Quando
se tem apenas uma linha, podemos omiti-la e colocar somente a coluna.
Assumindo que nossa varivel se chame X, tem-se : X0 =2, X1=4, X2=5, X3=8, X4=12,
X5=3, X6=56, X7=34. Em pseudocdigo, representamos este vetor da seguinte forma:
X[0]=2, X[1]=4, X[2]=5, X[3]=8, X[4]=12, X[5]=3, X[6]=56, X[7]=34. Trabalhemos alguns
exemplos bsicos para fixao deste novo conceito.

Faa um algoritmo que leia N nmeros e, aps sua leitura,


mostre ao usurio em ordem inversa digitada por ele.

Algoritmo OrdemInversa
Variveis
Entrada[10], I, N : Inteiro
Incio
Repita
Escreva Informe a quantidade de nmeros que digitar
Leia N
At ((N > 0) E (N <= 10))
Para I = 1 At N Faa
Escreva Informe o nmero , I, de , N
Leia Entrada[I]
FimPara
I=N
Enquanto ( I > 0) Faa
Escreva Nmero , I, de , N, , Entrada[I]
I=I1
FimEnquanto
Fim

88

Lgica de Programao - Everton Coimbra de Arajo

No desenvolvimento deste pseudocdigo, so trabalhados alguns novos


conceitos, ligados diretamente a conjuntos, e estes conceitos sero detalhados
agora, antes da explicao minuciosa do problema proposto.

5.1.2. TAMANHO FSICO E TAMANHO LGICO


Quando definimos uma varavel de conjunto (vetor ou matriz), devemos definir
tambm a capacidade mxima de armazenamento que ela aceita, ou seja, a
quantidade de elementos (valores) que ela suportar.

A este tamanho mximo, damos o nome de Tamanho Fsico. Porm,


observem com ateno que a reserva deste espao no implica sua real
utilizao: podemos optar (necessitar) usar menos (nunca mais).
Ao que realmente foi utilizado do conjunto, ou seja, a esta quantidade de
elementos utilizados dado o nome de Tamanho Lgico.
...
Algoritmo OrdemInversa
Variveis
Entrada[10], I, N : Inteiro
Incio
...
Fim

Tamanho fsico

No momento em que seu pseudocdigo define um Tamanho Fsico para um conjunto e a


alimentao (entrada de dados) deste conjunto ser feita de forma direta pelo usurio,
devemos garantir que este limite no seja ultrapassado.
Veja, na ilustrao acima, que o Tamanho Fsico para a varivel Entrada 10.

...
Algoritmo OrdemInversa
Variveis
...
Incio
Repita
Escreva Informe a quantidade de nmeros que digitar
Leia N
At ((N > 0) E (N <= 10))
...
Fim
Observe que o enunciado no diz uma quantidade determinada de valores que
sero informados pelo usurio. Entretanto, deixa claro que esta quantidade ser
informada pelo usurio antes da digitao. Isso pode ser afirmado devido ao fato

Lgica de Programao - Everton Coimbra de Arajo

89

de no estipular nenhuma regra (flag) para trmino da digitao. Sendo ento


assumido que a responsabilidade de informao de quantidade de valores que
sero entradas no conjunto do usurio, seu pseudocdigo deve garantir que
esta quantidade (tamanho lgico) no ultrapasse o mximo imposto por voc
(tamanho fsico).

Como garantir isso?


Deixe-me explicar: solicita-se esta quantidade em uma estrutura
de repetio (neste caso optado pela condicional com teste
no fim), que termina apenas quando o tamanho informado
esteja dentro dos limites aceitos. Observe o exemplo a seguir.

...
Algoritmo OrdemInversa
Variveis
...
Incio
...
Para I = 1 At N Faa
Escreva Informe o nmero , I, de , N
Leia Entrada[I]
FimPara
...
Fim

Tendo a quantidade de valores que devero ser informados, podemos assumir


que conhecemos a quantidade de vezes em que dever ser solicitada ao usurio
a digitao de um nmero. Assumimos ento que a melhor estrutura para esta
situao a repetio contada. Note que, para informar entrada de valores em
um conjunto, utilizamos [ ] (colchetes) e, dentro deles um valor que especifica a
posio (ndice) no vetor onde o valor ser armazenado.
...
Algoritmo OrdemInversa
Variveis
...
Incio
...
I=N
Enquanto ( I > 0) Faa
Escreva Nmero , I, de , N, , Entrada[I]
I=I1
FimEnquanto
Fim

90

Lgica de Programao - Everton Coimbra de Arajo

Uma vez que todos os valores tenham sido informados, devemos executar o
solicitado no enunciado: a informao destes valores ao usurio, porm de forma
inversa que foi entrada. Para isso, basta comearmos a estrutura de repetio,
tendo o contador iniciando com o endereo do ltimo ndice e, ento, ao invs
de incrementar o contador faz seu decremento, seu decrscimo.
Teste para trs valores
N (N>0) E (N<=10) I
20

No

-5

No

Sim

(I<=10) Entrada[I]

Entrada[10]

(I>0) Sada

Sim

10

1 2
10

9 10

Sim

1 2
10 5

9 10

Sim

15

1 2 3 4
10 5 15

9 10

No

15

Sim

15

Sim

10

Sim

10

No

Observe este outro exemplo:

Faa um algoritmo que seja capaz de fazer a soma de duas


matrizes (ndice por ndice) de 5 vetores cada. O resultado
dever estar em uma terceira matriz. Devero ser solicitados
ao usurio os valores das duas matrizes. Exiba ao final o
resultado obtido.
Algoritmo SomaMatriz
Variveis
A[5], B[5], C[5], I : Inteiro
Incio
Para I = 1 At 5 Faa
Escreva Informe o nmero , I, de 5 da primeira matriz
Leia A[I]
Escreva Informe o nmero , I, de 5 da segunda matriz

Lgica de Programao - Everton Coimbra de Arajo

91

Leia B[I]
C[I] = (A[I] + B[I])
Escreva A soma de , A[I], e , B[I], , C[I]
FimPara
Fim

Este problema relativamente simples, pois solicita ao usurio dois valores (por
cinco vezes) e, a cada par de valores informados, efetuamos uma soma e a
armazenamos em uma terceira varivel, que, neste caso, um ndice de uma
matriz. Na resoluo apresentada, foi optado por uma nica estrutura de
repetio, que a mais otimizada, mas poderia ser apresentada a resoluo em
vrias outras maneiras.
Teste de mesa
I

A[5]

B[5]

C[5]

1
2

1
3

1
5

1
2

2
6

1
3

2
7

1 2 3
5 13

1
2

2 3 4
6 14

1
3

2 3 4
7 15

1 2 3 4
5 13 29

1
2

2 3 4 5
6 14 30

1
3

2 3 4 5
7 15 31

1 2 3 4 5
5 13 29 61

1
2

2 3 4 5
6 14 30 62

1
3

2 3 4 5
7 15 31 63

1 2 3 4 5
5 13 29 61 125

5.2. MATRIZ
Uma matriz uma varivel composta homognea bidimensional, formada por
uma sequncia de variveis, todas do mesmo tipo, com o mesmo identificador
(mesmo nome) e alocadas sequencialmente na memria. Uma vez que as
variveis tm o mesmo nome, o que as distingue so ndices que referenciam sua
localizao dentro da estrutura. Uma varivel do tipo matriz composta por linhas
e colunas.

92

Lgica de Programao - Everton Coimbra de Arajo

Observe a seguinte situao:

Faa um algoritmo que solicite quatro notas e seus respectivos


pesos. Estes valores devero estar armazenados em uma
nica matriz. Ao final, exiba mdia ponderada dessas notas.
Assuma que as notas so de zero a cem (0 a 100).
Algoritmo Boletim
Variveis
Numerador, Denominador, Aluno[4, 2], I : Inteiro
Media : Real
Incio
Numerador = 0
Denominador = 0
Para I = 1 At 4 Faa
Escreva Informe a nota , I, do aluno
Leia Aluno[I, 1]
Escreva Informe o peso da nota , I
Leia Aluno [I, 2]
Numerador = Numerador + (Aluno[I, 1] * Aluno[I, 2])
Denominador = Denominador + Aluno[I, 2]
FimPara
Media = (Numerador / Denominador)
Escreva A mdia do aluno , Media
Fim

Observe este algoritmo e compare-o com os exemplos


anteriores. No que ele difere dos outros?
Note que nesse algoritmo, duas informaes diferentes sero
armazenadas em uma nica varivel: uma matriz bidimensional.
A matriz bidimensional pode ser vista como linhas que possuem
colunas. Usando esta analogia, podemos dizer ainda que, em
relao ao enunciado, cada linha representa um bimestre, e
que a primeira coluna ter as notas de cada bimestre e a
segunda os pesos de cada nota.

Bem, conforme se sabe, cada nota se refere a um bimestre. Mas, como identificar
o bimestre neste algoritmo? Conforme foi tratado, cada posio da matriz possui
um ndice (um nmero) que identifica um endereo dentro da matriz onde os
dados esto armazenados. Pois bem, este ndice indica o bimestre, porm esta
informao no relevante ao problema.

Lgica de Programao - Everton Coimbra de Arajo

93

...
Algoritmo Boletim
Variveis
Numerador, Denominador, Aluno[4, 2], I : Inteiro
Media : Real
Incio
..
Para I = 1 At 4 Faa
Escreva Informe a nota , I, do aluno
Leia Aluno[I, 1]
Escreva Informe o peso da nota , I
Leia Aluno [I, 2]
..
FimPara
..
Fim
Note que, na entrada de dados, a varivel que representa a matriz tem dentro
dos colchetes dois valores Aluno[I, 2]. Um deles uma varivel (I), pois, como so
quatro notas, a cada iterao, a linha tem que mudar. O segundo valor
constante, no muda, e se refere coluna onde o dado ser armazenado. A
coluna um ter a nota; e a coluna dois, o peso. Vejamos a simulao
representada no teste de mesa.
Teste de mesa
Numerador

Denominador

100

120

390

470

10

Aluno[ ]

100

100
10

1
2

100
10
90

1
2
3

100
10
90
20

1
2
3
4

Mdia

4,70

94

Lgica de Programao - Everton Coimbra de Arajo

So muitas as situaes nas quais a construo de algoritmos relativos a uma


matriz assumem novas caractersticas. Portanto, muito importante que sejam
observados os diferentes exemplos com bastante ateno. Vejamos esta outra
situao:
Um comerciante deseja pagar todas as suas contas do dia.
Faa um algoritmo que solicite o valor a ser pago e a taxa de
juros para a conta. Lembre-se de que, caso a conta seja
paga em dia, a taxa de juros zero. Calcule o total dos
valores de multa e o valor total a ser pago. O algoritmo
dever tambm solicitar quantas contas sero pagas no dia.
Algoritmo Pagamento
Variveis
I, QtdeContas : Inteiro
Contas[2, 5], TotalMultas, TotalContas: Real
Incio
Repita
Escreva Informe quantas contas sero pagas
Leia QtdeContas
At (QtdeContas > 0 E QtdeContas <= 5)
TotalMultas = 0
TotalContas = 0
Para I = 1 At QtdeContas Faa
Escreva Informe o valor da conta , I, de , QtdeContas
Leia Contas[1, I]
Escreva Informe a taxa de juros da conta , I, de , QtdeContas
Leia Contas[2, I]
TotalMultas = TotalMultas + (Contas[1, I] * Contas[2, I] / 100)
TotalContas = TotalContas + Contas[1, I]
FimPara
Escreva O total a ser pago em multa , TotalMultas
Escreva O valor total a ser pago , TotalContas + TotalMultas
Fim

Para efeito didtico, este exemplo trata a matriz como duas linhas, em que cada
linha tem cinco colunas. O que varia neste exemplo a coluna onde a
informao ser armazenada, diferentemente do anterior, onde a coluna era
constante. Observe o teste de mesa:

100,00
10,00
100,00 50,00
10,00 5,00
100,00 50,00 25,00
10,00 5,00 30,00

Lgica de Programao - Everton Coimbra de Arajo

95

5.3. CLASSIFICAO E PESQUISA


O conjunto de aplicaes possveis para matrizes enorme, mas dois so comuns,
importantes e necessrios. So eles: a classificao de matrizes e a pesquisa.
A classificao consiste em ordenar os elementos da matriz em uma determinada
classificao, seguindo o critrio necessrio para cada problema. Este critrio
pode ser alfabtico, para dados literais; crescente ou decrescente para dados
numricos. Vrios mtodos de classificao so trabalhados para o
desenvolvimento desta tarefa, tais como Ordenao por Insero, ShellSort,
Bubblesort, QuickSort e Heapsort.
A pesquisa consiste na verificao da existncia de um valor dentro de um
conjunto de dados (matriz).
Este texto cuidar apenas do mtodo Bubblesort para ordenao e trabalhar
dois mtodos bem difundidos para pesquisa, que so a pesquisa sequencial e a
pesquisa binria.

5.3.1. MTODO BOLHA DE CLASSIFICAO BUBBLESORT


No o mais eficiente dos mtodos existentes, entretanto considerado o mais
popular, devido sua simplicidade.
A filosofia bsica deste mtodo consiste em ler todo o vetor, comparando os
elementos vizinhos entre si. Caso estejam fora de ordem, eles trocam de posio
entre si. Procede-se assim at o final do vetor. Na primeira leitura, verifica-se que o
ltimo elemento do vetor j est em seu devido lugar (no caso de ordenao
crescente, ele o maior de todos). A segunda leitura anloga primeira e vai
at o penltimo elemento. Este processo repetido at que seja feito um nmero
de leituras igual ao nmero de elementos a serem ordenados, menos um. Ao final
deste processo, o vetor estar classificado segundo o critrio escolhido.
Classificao de um vetor de cinco elementos reais em ordem crescente.
Algoritmo Bubble_Sort
Variveis
Numeros [5] : Real
I, J : Inteiro
Aux : Real
Incio
Para I = 1 At 5 Faa
Escreva Informe o nmero , I, de 5
Leia Numeros[I]
Fimpara
J=5
Enquanto (J > 1) Faa
Para I = 1 at (J-1) Faa
Se (Numeros[I] > Numeros[I+1]) ento

96

Lgica de Programao - Everton Coimbra de Arajo

Aux = Numeros[I]
Numeros[I] = Numeros[I+1]
Numeros[I+1] = Aux
FimSe
Fimpara
J = J 1
FimEnquanto
Escreva Vetor Ordenado
Para I = 1 At 5 Faa
Escreva Numeros[I]
Fimpara
Fim
Observe que os valores que sero ordenados so inicialmente solicitados ao
usurio, ou seja, o usurio pode, e fatalmente o far, informar estes valores em
uma ordem aleatria, sem classificao. Veja o trecho de cdigo onde esta
entrada de dados ocorre.
...
Algoritmo Bubble_Sort
Variveis
...
Incio
Para I = 1 At 5 Faa
Escreva Informe o nmero , I, de 5
Leia Numeros[I]
Fimpara
...
Fim
Podemos aceitar que os valores informados so os existentes na matriz a seguir.

Acompanhando o trecho do algoritmo listado abaixo, podemos efetuar o teste


de mesa e avaliar as alteraes existentes, as quais garantiro a
classificao/ordenao da matriz.
...
Algoritmo Bubble_Sort
Variveis
...
Incio
..
J=5
Enquanto (J > 1) Faa

Lgica de Programao - Everton Coimbra de Arajo

97

Para I = 1 at (J-1) Faa


Se (Numeros[I] > Numeros[I+1]) ento
Aux = Numeros[I]
Numeros[I] = Numeros[I+1]
Numeros[I+1] = Aux
FimSe
Fimpara
J = J 1
FimEnquanto
..
Fim

Note a varivel J sendo inicializada com a quantidade mxima de elementos


existentes na matriz. Isso necessrio devido ao fato de cada leitura ir at o
penltimo elemento da matriz. A estrutura Enquanto...FimEnquanto garante a
execuo da comparao at o momento em que todos os elementos estiverem
classificados. A cada comparao de um elemento com todos os outros da
matriz, esta varivel decrementada em um, o que garante que os ltimos
elementos j estejam em ordem, ou seja, os menores valores so sempre levados
ao incio (topo) da matriz, como se borbulhassem. Da o nome Ordenao pelo
Mtodo da Bolha. Vejamos o teste de mesa:
J

(J > 1)

Nmeros[I]

Nmeros[I+1]

256

256

32

32
5

Aux
1
2

2
3
4
256 32 128

5
1

1
2

2
3
4
256 32 128

5
1

256

1
2

2
3
4
32 256 128

5
1

256

128

1
2

2
3
4
32 256 128

5
1

128

256

1
2

2
3
4
32 128 256

5
1

256

1
2

2
3
4
32 128 256

5
1

256

1
2

2
3
32 128

256

256

256

4
1

5
256

4
Observe, no teste de mesa, que a variao de posio entre os ndices da matriz
ocorreu justamente com o maior valor existente entre todos. Originalmente, ele
estava no segundo ndice e, ao terminar todas as comparaes, ele passou para
a ltima posio. possvel constatar que a leitura ocorreu sempre em relao a
um elemento e o seu prximo elemento. Agora que existe a garantia de que o
ltimo elemento realmente o maior, ele no ser mais usado na prxima leitura.
Veja o teste de mesa da segunda leitura.

98

Lgica de Programao - Everton Coimbra de Arajo

(J > 1)

Nmeros[I]

Nmeros[I+1]

32

1
2

2
3
32 128

4
1

5
256

32

128

1
2

2
3
32 158

4
1

5
256

128

1
2

2
3
32 158

4
1

5
256

128

1
2

2
32

Aux

128

3
1

4
5
128 256

As alteraes nesta segunda leitura diminuram. Na realidade, ocorreu uma nica


vez, mas isso no regra, pois esta situao est intimamente ligada aos nmeros
existentes na matriz. Veja agora a terceira leitura.
J

(J > 1)

Nmeros[I]

Nmeros[I+1]

32

1
2

2
32

3
1

4
5
128 256

32

1
2

2
32

3
1

4
5
128 256

32

1
2

2
3
4
5
32 158 128 256

32

1
2

2
1

Aux

32

3
4
5
32 128 256

Segue o teste de mesa para a ltima leitura para este exemplo.


J

(J > 1)

Nmeros[I]

Nmeros[I+1]

Aux

1
2

2
1

3
4
5
32 128 256

1
1

2
2

3
4
5
32 128 256

No momento em que a ltima leitura feita, a matriz est totalmente classificada.


Classificao de um vetor de dez elementos reais em ordem crescente.
Uma outra verso.
Algoritmo Bubble_Sort
Variveis
Numeros [10] : Real
I, J : Inteiro
Aux : Real
Incio

Lgica de Programao - Everton Coimbra de Arajo

99

Para I = 1 At 10 Faa
Escreva Informe o nmero , I, de 10
Leia Numeros[I]
Fimpara
Para I = 1 at 9 Faa
Para J = I at (10-I) Faa
Se (Numeros[J] > Numeros[J+1]) ento
Aux = Numeros[J]
Numeros[J] = Numeros[J+1]
Numeros[J+1] = Aux
FimSe
Fimpara
FimPara
Escreva Vetor Ordenado
Para I = 1 At 10 Faa
Escreva Numeros[I]
Fimpara
Fim
A diferena bsica desta verso para a anteriormente explicada est em sua
estrutura de repetio, em que, agora, so usadas duas estruturas PARA...FIMPARA
e, com isso, faz-se uso do recurso da linguagem eliminando algumas linhas de
processamento. O resultado o mesmo.
Veja a parte da figura que tem a diferena.
...
Algoritmo Bubble_Sort
Variveis
...
Incio
...
Para I = 1 at 9 Faa
Para J = I at (10-I) Faa
Se (Numeros[J] > Numeros[J+1]) ento
Aux = Numeros[J]
Numeros[J] = Numeros[J+1]
Numeros[J+1] = Aux
FimSe
Fimpara
FimPara
...
Fim

5.3.2. MTODO DE PESQUISA SEQUENCIAL


Conhecida tambm como pesquisa linear. o mtodo mais objetivo para
encontrar um elemento particular num conjunto no classificado, isto , cujos

100

Lgica de Programao - Everton Coimbra de Arajo

elementos no esto ordenados segundo algum critrio.


Envolve a simples verificao de cada componente do conjunto,
sequencialmente, at que o elemento desejado seja encontrado (neste caso, dizse que a pesquisa foi bem-sucedida) ou que todos os elementos do conjunto
tenham sido verificados sem que o elemento procurado tenha sido encontrado
(pesquisa mal-sucedida).
Leitura de um nome e verificao se ele se encontra em um conjunto de 10
nomes, utilizando pesquisa sequencial.
Algoritmo PesquisaSequencial
Variveis
Valor[15], Nomes[10, 15] : String
I : Inteiro
Achou : Lgico
Incio
Para I = 1 At 10 Faa
Escreva Informe o nome , I, de 10
Leia Nomes[I]
Fimpara
Escreva Informe o nome que deseja procurar
Leia Valor
I=1
Achou = .Falso.
Enquanto (I <= 10) E (NO Achou) Faa
Se (Nomes[I] = Valor) ento
Achou = .Verdadeiro.
Seno
I=I+1
FimSe
FimEnquanto
Se (Achou) ento
Escreva Valor, foi encontrado.
Seno
Escreva Valor, no foi encontrado.
Fimse
Fim
Este exemplo de algoritmo solicita ao usurio que informe dez (10) nomes para
preenchimento de uma matriz de nomes. Esta matriz ser utilizada como fonte de
pesquisa dos nomes que o usurio deseja procurar.
...
Algoritmo PesquisaSequencial
Variveis
...
Incio

Lgica de Programao - Everton Coimbra de Arajo

101

Para I = 1 At 10 Faa
Escreva Informe o nome , I, de 10
Leia Nomes[I]
Fimpara
Escreva Informe o nome que deseja procurar
Leia Valor
I=1
Achou = .Falso.
...
Fim

A figura acima exibe a parte do algoritmo em que o usurio informar os dez (10)
nomes que comporo a matriz, o nome que deseja procurar na matriz e duas
variveis tidas como auxiliares. A varivel I utilizada como contadora e ter a
funo de identificar qual nome da matriz est sendo utilizado para a
comparao atual com o nome digitado pelo usurio. Achou ter a
responsabilidade de informar se o nome digitado foi ou no foi encontrado na
matriz. Note que I comea com um (1), pois a primeira comparao ser com o
primeiro nome e Achou comea com .falso., pois devemos assumir que o nome
pode no existir e, em caso de ser encontrado, a sim, recebe um valor que reflita
esta situao.
...
Algoritmo PesquisaSequencial
Variveis
...
Incio
...
Enquanto (I <= 10) E (NO Achou) Faa
Se (Nomes[I] = Valor) ento
Achou = .Verdadeiro.
Seno
I=I+1
FimSe
FimEnquanto
...
Fim

Note na estrutura de repetio com teste no incio, na figura acima, que existem
duas condies que devero manter a estrutura: a primeira reflete a leitura de
toda a matriz; a segunda reflete a situao de que, se for encontrado o nome
desejado, pode acabar a estrutura, mesmo que no se leia toda a matriz. O
operador E garante a estrutura apenas quando as duas operaes retornarem
verdadeiro.
A estrutura condicional, dentro do Enquanto...FimEnquanto, trata duas situaes:

102

Lgica de Programao - Everton Coimbra de Arajo

- a de ter encontrado o nome, ento se atribui .Verdadeiro. varivel flag;


- e a segunda, que, caso o nome digitado seja diferente do que o
contador (I) aponta na matriz, este contador ser incrementado em um
(1) e, ento, as condies da estrutura de repetio so novamente
avaliadas.
...
Algoritmo PesquisaSequencial
Variveis
...
Incio
...
Se (Achou) ento
Escreva Valor, foi encontrado.
Seno
Escreva Valor, no foi encontrado.
Fimse
Fim
No momento em que a estrutura de repetio termina, verificada a situao
(valor) atual da varivel Achou. Se ele retornar .Verdadeiro., significa que o nome
foi encontrado e, ento, exibida ao usurio esta confirmao. Caso seu valor
continue sendo o inicialmente atribudo a ela, ou seja, .Falso., informado ao
usurio que o nome no foi encontrado na matriz.

5.3.3. MTODO DE PESQUISA BINRIA


Quando os elementos de uma matriz esto classificados (ordenados), a pesquisa
binria um dos tipos de pesquisa mais eficazes para estes casos. Ela tem a
capacidade de eliminar metade dos elementos da matriz que est sendo
pesquisada, a cada comparao.
O mtodo de pesquisa binria faz uso de trs variveis auxiliares:
- uma que aponte para o primeiro elemento da pesquisa; no caso de
ser a primeira comparao o primeiro elemento (valor 1).
- Outra que aponte para o ltimo elemento da matriz de pesquisa; no
caso de uma matriz de dez elementos, seria o valor 10.
- A terceira varivel, que aponte para o elemento do meio da matriz;
no exemplo de 10 elementos, seria o quinto elemento.

O elemento que apontado pela varivel meio localizado e comparado com o


valor procurado. Se ele for igual ao valor procurado, a pesquisa dita bemsucedida e interrompida. No caso de ser ele maior que o valor procurado,
repetimos o processo na primeira metade da matriz. No caso de o elemento
central ser menor que o valor procurado, repetimos o processo na segunda
metade da matriz. Vamos analisar a seguinte situao:

Lgica de Programao - Everton Coimbra de Arajo

103

Leitura de um valor e verificao se este se encontra em um conjunto de 15


valores, utilizando pesquisa binria. Assuma que o conjunto seja informado de
forma ordenada.
Algoritmo PesquisaBinaria
Variveis
I, Valor, Numeros[15], Meio, Alto, Baixo, : Inteiro
Achou : Lgico
Incio
Para I = 1 At 15 Faa
Escreva Informe o nmero , I, de 15
Leia Numeros[I]
Fimpara
Escreva Informe o nmero que deseja procurar
Leia Valor
Baixo = 1
Alto = 15
Achou = .Falso.
Enquanto (Baixo <= Alto) E (NO Achou) Faa
Mdio = (Baixo + Alto) / 2
Se (Valor < Numeros[Mdio]) ento
Alto = Mdio - 1
Seno se (Valor > Numeros[Mdio]) ento
Baixo = Mdio + 1
Seno Se (Valor = Nmeros[Mdio]) ento
Achou = .Verdadeiro.
FimSe
FimEnquanto
Se (Achou) ento
Escreva Valor, foi encontrado.
Seno
Escreva Valor, no foi encontrado.
Fimse
Fim

O procedimento segue at que o elemento desejado seja localizado ou, ento,


at que no reste mais um trecho da matriz a ser pesquisada.
...
Algoritmo PesquisaBinaria
Variveis
Valor, Numeros[15], Meio, Alto, Baixo, : Inteiro
Achou : Lgico
Incio
Para I = 1 At 15 Faa
Escreva Informe o nmero , I, de 15
Leia Numeros[I]
Fimpara

104

Lgica de Programao - Everton Coimbra de Arajo

Escreva Informe o nmero que deseja procurar


Leia Valor
Baixo = 1
Alto = 15
Achou = .Falso.
...
Fim
O procedimento inicial se assemelha ao utilizado na pesquisa sequencial:
solicitamos os valores para preenchimento da matriz (neste caso, optado por
nmeros), pedimos ao usurio o valor que ele quer procurar entre os digitados.
Observe que assumimos que os valores informados esto ordenados. O que
diferencia este trecho de cdigo a incluso de duas variveis auxiliares, Baixo e
Alto, que so responsveis por manter a informao do primeiro e do ltimo
elemento do subconjunto para a pesquisa.
...
Algoritmo PesquisaBinaria
Variveis
...
Incio
...
Enquanto (Baixo <= Alto) E (NO Achou) Faa
Mdio = (Baixo + Alto) / 2
Se (Valor < Numeros[Mdio]) ento
Alto = Mdio - 1
Seno se (Valor > Numeros[Mdio]) ento
Baixo = Mdio + 1
Seno se (Valor = Nmeros[Mdio]) ento
Achou = .Verdadeiro.
FimSe
FimEnquanto
...
Fim

Em relao s condies existentes na estrutura de repetio da pesquisa


sequencial, houve aqui a alterao da primeira operao: podemos verificar se a
varivel que aponta para o primeiro elemento menor ou igual que aponta
para o ltimo elemento.
A primeira instruo identifica o nmero do elemento que ser usado para
apontar a metade da matriz. Veja que assumimos a soma do primeiro e do ltimo
e, ento, dividimos esta soma por dois. No exemplo de 15 elementos e na primeira
passada, obtemos a soma 16, que, ao ser dividido por dois, retorna 8. Em caso da
diviso retornar um nmero com decimais, como a varivel que receber esta

Lgica de Programao - Everton Coimbra de Arajo

105

diviso inteira, o valor armazenado ser a parte inteira do valor.


feita a comparao entre o valor digitado pelo usurio e o valor apontado na
matriz pela varivel Meio. Caso o valor comparado seja maior que o valor
digitado, a varivel que aponta para o ltimo elemento recebe o nmero do
elemento central diminudo em 1, mudando assim o tamanho (quantidade) dos
elementos a serem comparados na prxima execuo da estrutura condicional.
Caso o valor digitado seja maior que o valor comparado, a quantidade de
elementos utilizados na prxima execuo tambm diminui, mas agora a varivel
que sofre alterao a que aponta para o primeiro elemento, que recebe o valor
contido na varivel, que aponta para o meio, somada de um. Para o caso de ter
o valor comparado igual ao digitado, atribuimos .Verdadeiro. varivel flag
Achou e ento a estrutura termina.
...
Algoritmo PesquisaBinaria
Variveis
...
Incio
...
Se (Achou) ento
Escreva Valor, foi encontrado.
Seno
Escreva Valor, no foi encontrado.
Fimse
Fim
Igualmente ao apresentado no exemplo de pesquisa sequencial, quando a
estrutura de repetio finda, verificado o valor da varivel flag Achou e,
baseado em seu resultado, uma afirmao de sucesso ou fracasso na pesquisa.
As seguintes figuras mostram um exemplo com uma matriz de quinze (15)
elementos e a pesquisa de alguns valores. O elemento sombreado mostra que o
elemento do meio, e cada linha representa a poro da matriz que ser utilizada
para a pesquisa.
Valor a pesquisar : 25

Neste exemplo, o valor no foi encontrado, mas possvel notar graficamente as


pores da matriz que foram utilizadas a cada execuo da estrutura de
repetio. Veja outra situao.

106

Lgica de Programao - Everton Coimbra de Arajo

Valor a pesquisar : 8

Este exemplo j traz uma situao de xito na pesquisa: o valor foi encontrado. Porm,
podemos notar que foi feita uma pesquisa at que o ltimo elemento fosse assumido como
do meio.
Vamos a um ltimo exemplo:
Valor a pesquisar : 6

Este ltimo exemplo j obteve o resultado positivo na segunda execuo da


estrutura de repetio, ou seja, com apenas duas comparaes.

A seguir, procure refletir um pouco sobre o que acabou de


ler. Aproveite o momento para praticar os novos
conhecimentos e realize as atividades propostas logo
abaixo. Mos obra!

Chegamos ao final de mais uma unidade. Esperamos que


agora tenha ficado mais claro seu entendimento sobre o
estilo de armazenamento de dado trabalhado aqui, pois
um timo recurso para receber uma grande quantidade
de dados e ento trabalhar com eles em um momento
posterior. At agora, quando trabalhvamos com estrutura
de repetio para receber estes dados, o processamento necessitava ser no
mesmo momento, pois, ao trmino, no tinhamos mais estes dados. Mas agora,
com matrizes e vetores, j possvel trabalhar estes dados em outra etapa do
algoritmo.
O uso de matrizes para armazenamento de valores homogneos teve, dentro dos
textos vistos, mais um benefcio identificado: a possibilidade de classificao e de
pesquisa de valores. Dessa forma, a classificao pode ser feita em forma
crescente ou decrescente para nmeros, e alfabtica para literais (o que no
deixa de ser uma ordenao crescente).

Lgica de Programao - Everton Coimbra de Arajo

107

Quanto pesquisa de valores em uma matriz, foram vistas duas das formas mais
usadas: a sequencial, que faz uma leitura em todos os elementos de uma matriz,
no importando se ela est ou no classificada; e a pesquisa binria, que implica
a necessidade de a matriz estar ordenada. A ordenao se far sempre
necessria quando for identificada uma exibio de valores de uma matriz por
determinada ordem, por exemplo uma listagem de produtos por ordem
alfabtica. A pesquisa tem como exemplo a situao tambm ligada a produtos.
Imagine uma matriz com cdigo e estoque de um produto. Em uma venda voc
informa o cdigo e quantidade vendida. Aps isso, deve ajustar seu estoque. Para
isto, precisar pesquisar em sua matriz o produto vendido.
Esta unidade tratou de temas importantes, um pouco mais complexos que os
abordados nas unidades anteriores, exigindo leitura mais aprofundada e uma
anlise mais detalhada dos exemplos mostrados. Por isso, voltamos a convid-lo a
expandir seus conhecimentos a respeito desses assuntos por meio da pesquisa.
Relembramos que a inquietao e a busca por novas informaes um grande
passo para o sucesso em qualquer rea da vida. Mos obra!

108

Lgica de Programao - Everton Coimbra de Arajo

UNIDADE VI
SUBALGORITMOS E
REGISTROS

Nesta nova unidade, abordaremos subalgoritmos e registros, que so noes


importantes para:
- particionamento de um problema complexo em pequenos problemas
simples;
- construir uma boa estrutura de dados identificados nos problemas, em
que determinado dado, como um cadastro de clientes, pode passar a
aceitar mais de um tipo de dado, como nome, idade e salrio.
Portanto, no trmino desta etapa de estudo fundamental que voc seja capaz
de
- dividir um algoritmo resolvido em pequenos subalgoritmos;
- identificar, criar e popular uma varivel de um tipo especfico de dado.

6.1. SUBALGORITMOS
A complexidade dos algoritmos est intimamente ligada da aplicao a que se
destinam. Em geral, problemas complicados exigem algoritmos extensos para sua
soluo.
sempre possvel dividir grandes algoritmos que resolvem grandes e complexos
problemas em partes menores em que a soluo e os problemas so
particionados. Uma vez dividido um grande problema em pequenos problemas,
possvel a resoluo de cada um desses problemas individualmente, para que, ao
final, o problema, em seu todo, tenha sido resolvido.
Subalgoritmos, subrotinas ou subprogramas so blocos de instrues que realizam
tarefas especficas. O cdigo de um subalgoritmo digitado uma vez e pode ser
executado quantas vezes forem necessrias. Dessa maneira, os programas
tendem a ficar menores e mais organizados, dado que o problema pode ser
dividido em pequenas tarefas.
Os programas (em programao estruturada), em geral, so executados
linearmente, uma linha aps a outra, at o fim. Entretanto, quando so utilizados
subalgoritmos, possvel a realizao de desvios na execuo natural dos
programas. Estes desvios so realizados quando uma funo chamada pelo
programa principal.

Fique atento!
Um subalgoritmo um nome dado a um trecho de um algoritmo mais
complexo e que, em geral, encerra em si prprio um pedao da soluo de
um problema maior o algoritmo a que ele est subordinado.
So importantes na
- subdiviso de algoritmos complexos, facilitando seu entendimento;
- estruturao de algoritmos, facilitando principalmente a deteco de
erros e a documentao de sistemas; e na
- modularizao de sistemas, que facilita a manuteno de programas
e a reutilizao de subalgoritmos j implementados.

Lgica de Programao - Everton Coimbra de Arajo

111

Um algortimo completo dividido em um algoritmo principal e diversos


subalgoritmos (a quantidade que for necessria). O algoritmo principal aquele
por onde a execuo do algoritmo sempre se inicia. Este pode invocar os demais
subalgoritmos.
Durante a execuo do algoritmo
principal, quando encontramos um
ALGORITMO
PROCEDIMENTO
comando de invocao de um
PRINCIPAL
OU FUNO
subalgoritmo, a execuo daquele/deste
interrompida. A seguir, passamos
execuo dos comandos do corpo do
subalgoritmo. Quando ele termina, retomamos a execuo do algoritmo que o
chamou, o principal, no ponto onde foi interrompida (chamada do subalgoritmo)
e prosseguimos pela instruo seguinte.

6.1.1. PROCEDIMENTOS E FUNES


Procedimento um subalgoritmo que retorna nenhum ou mais valores ao
algoritmo chamador. Estes valores so sempre retornados por meio dos
parmetros ou de variveis globais, mas nunca explicitamente, como no caso de
funes. Devido a isso, a chamada de um procedimento no pode surgir no meio
de expresses, como no caso de funes. A chamada de procedimentos s
feita em comandos isolados dentro de um algoritmo.
Quanto funo, tem seu conceito, trazido da ideia de funo matemtica, em
que um valor calculado a partir de outro(s) fornecido(s) funo. Dentro de um
algoritmo, a chamada a uma funo sempre ocorre dentro de uma expresso do
mesmo tipo que tem o valor retornado por ela. Sua chamada feita pelo seu
nome, seguido de seus respectivos parmetros entre parnteses, dentro de uma
expresso. A funo executada e, ao seu trmino, o trecho do comando que a
invocou substitudo pelo valor retornado por ela dentro da expresso em que se
encontra, e a avaliao da expresso prossegue normalmente.

6.1.2. VARIVEIS GLOBAIS E LOCAIS

int C, F

Variveis globais so aquelas declaradas


no incio de um algoritmo. Podem ser
utilizadas no algoritmo principal e por todos
os demais subalgoritmos.Variveis locais
so as definidas dentro de um subalgoritmo
e, portanto, podem ser utilizadas apenas
dentro dele. Outros subalgoritmos, ou at
mesmo o principal, no podem utiliz-la.

Sub 2

Observe na figura anterior a existncia de


trs subalgoritmos (Sub1, Sub2 e Sub3),
todos dentro de um algoritmo maior (o
principal). Conceitualmente, os algoritmos

int A, B
int B, D

Sub 1

112

int C, E

Sub 3

Lgica de Programao - Everton Coimbra de Arajo

criados dentro de um algoritmo principal tm acesso s variveis criadas neste


principal. No entanto, o principal no tem conhecimento das variveis criadas em
seus subalgoritmos.
Exemplificando, podemos dizer que o subalgoritmo Sub tem acesso s
variveis D (do Sub1) e A (do principal). Em relao varivel B do Sub1,
sobrepe, mas no elimina, a varivel B do principal.
necessria a compreenso conceitual de variveis globais e locais, porm saber
qual a forma de declarao que determinar sua visibilidade dentro de
subalgoritmos depender exclusivamente da linguagem de implementao. Em
relao a pseudocdigos, isto est mais ligado a convenes.

6.1.3. PARMETROS
So canais pelos quais se estabelece uma comunicao bidirecional entre um
subalgoritmo e o algoritmo chamador. Dados so passados pelo algoritmo
chamador ao subalgoritmo. Para o caso de procedimentos, dados tambm pode
ser retornados para o algoritmo chamador atravs dos parmetros.
Para o caso de funes, a passagem de dados se d da mesma forma que para
procedimentos, todavia, para o retorno dos dados, utilizado o comando Retorne
<expresso> para retornar o valor calculado (ou processado) por ela. Ao
encontrar este comando, a expresso entre parnteses avaliada, a execuo
da funo terminada neste ponto, e o valor da expresso retornado ao
algoritmo chamador. Esta expresso deve ser do mesmo tipo que o valor
retornado pela funo.

Ao envio de dados de um algoritmo para outro atravs de sua chamada,


dado o nome de passagem de parmetros e esta passagem pode ser dada
de duas formas: por valor ou por referncia. Observe a definio de cada
uma delas.

Na passagem de parmetros por valor, o que ocorre uma cpia do contedo


enviado para uma varivel do mesmo tipo daquela que foi enviada, que existir
apenas no procedimento/funo. Com isso, processamentos, avaliaes e
atribuies podem ser feitos a esta varivel/valor recebido, sem que haja
qualquer tipo de alterao na varivel que se encontra no algoritmo chamador.
Na passagem de parmetros por referncia no existe a cpia do contedo
enviado para uma varivel do procedimento/funo, o que ocorre o envio da
referncia onde a varivel do algoritmo chamador se encontra. Dessa forma,
qualquer alterao feita na varivel no subalgoritmo refletir diretamente na
varivel do algoritmo chamador.

6.1.4. PRT ICA


Na sequncia, so apresentados algoritmos que trabalharo subalgoritmos em

Lgica de Programao - Everton Coimbra de Arajo

113

suas resolues. Os conceitos de cdigo e regras de implementao sero


explicados a cada soluo proposta.

Dados o nome e as mdias de uma turma com 47 alunos,


faa um algoritmo que escreva o nome dos alunos que
tiveram a mdia menor que a mdia da turma. Para
desenvolver este problema voc dever :
- Criar um procedimento para a leitura dos dados e armazenamento em uma
matriz declarada como varivel global. Neste mesmo procedimento, efetue o
clculo da mdia aritmtica da turma, que tambm dever estar
armazenada em uma varivel global.
- Criar um procedimento para identificao e exibio dos alunos que tenham
a mdia menor que a mdia da turma.

Algoritmo Alunos
Variveis
Nomes[47][15] : String
Medias[47], MediaTurma : Real
Procedimento EntradaDeDados
Variveis
I : Inteiro
Incio
Escreva Informe o nome e mdia dos 47 alunos da turma
MediaTurma = 0
Para I = 1 At 47 Faa
Escreva Informe o nome do aluno , I, de 47
Leia Nomes[I]
Escreva Informe a mdia do aluno , Nomes[I]
Leia Medias[I]
MediaTurma = MediaTurma + Medias[I]
FimPara
MediaTurma = MediaTurma / 47
Fim
Procedimento SaidaDeDados
Variveis
I : Inteiro
Incio
Escreva Alunos com mdia abaixo da mdia da turma
Para I = 1 At 47 Faa

114

Lgica de Programao - Everton Coimbra de Arajo

Se (Medias[I] < MediaTurma) Ento


Escreva Aluno , Nomes[I], mdia , Notas[I]
FimSe
FimPara
Fim
Incio
EntradaDeDados
SaidaDeDados
Fim

No algoritmo acima, tratada a situao em que solicitado ao usurio que


informe nome e nota de 47 alunos de uma turma e que entre estes alunos, seja
informado o nome e mdia daqueles que tiraram sua mdia individual inferior
mdia da turma.
At onde vnhamos resolvendo nossos problemas, isso seria facilmente resolvido
em um algoritmo simples. Tirando os procedimentos identificados nesta resoluo
e colocando as instrues na sequncia apresentada, teramos um algoritmo
completo, que tambm resolveria o problema.
Imagine a situao em que, como no exemplo, um nico algoritmo seja
responsvel pela entrada e sada de dados, em que, porm, estas operaes no
ocorressem obrigatoriamente no mesmo momento. claro que ainda no
armazenamos nossos dados em arquivos, ou seja, to logo o algoritmo termine sua
execuo, os dados se perdem, mas faamos de conta que os dados esto
guardados em arquivos. Sendo assim, nada impede que, em determinado
momento, seja feita a entrada de dados e, em outro momento, a sada. A
operao a ser executada poderia ser escolhida pelo usurio atravs de um
menu de opes.
Neste caso, a diviso em procedimentos ou funes mais apropriada, pois se
dividem as responsabilidades de um nico problema e se trabalha em cada uma
como se fosse um nico. Talvez esteja pensando Mas eu poderia desenvolver
este algoritmo usando as estruturas condicionais Se e Escolha, daria o mesmo
resultado.... Com certeza, para este problema sim, mas este tipo de problema
no aparecer em sua vida profissional, os desafios sero maiores e voc dever
estar preparado para quando isso ocorrer.

Saiba que o objetivo de criar procedimentos e funes que rotinas comuns


a vrios problemas possam ser desenvolvidas uma nica vez e executadas
sempre que necessrio. Veremos, no passo seguinte, uma variao desta
resoluo que dar um poder maior ao usurio e pouco ser alterado em
seu cdigo para isso. Vejamos agora partes isoladas desta resoluo e
explicaes que dem suporte para sua compreenso.

Lgica de Programao - Everton Coimbra de Arajo

115

...
Algoritmo Alunos
Variveis
Nomes[47][15] : String
Medias[47], MediaTurma : Real
Procedimento EntradaDeDados
Incio
...
Fim
Procedimento SaidaDeDados
Incio
...
Fim
Incio
...
Fim

As variveis Nomes e Medias esto declaradas dentro da implementao do


Algoritmo, ou seja, do programa principal. Dessa forma, ela tida como global e
pode ser utilizada por qualquer procedimento e funo que esteja neste cdigo,
alm do prprio algoritmo principal.
...
Algoritmo Alunos
Variveis
...
Procedimento EntradaDeDados
Variveis
I : Inteiro
Incio
Escreva Informe o nome e mdia dos 47 alunos da turma
MediaTurma = 0
Para I = 1 At 47 Faa
Escreva Informe o nome do aluno , I, de 47
Leia Nomes[I]
Escreva Informe a mdia do aluno , Nomes[I]
Leia Medias[I]
MediaTurma = MediaTurma + Medias[I]
FimPara
MediaTurma = MediaTurma / 47
Fim
Procedimento SaidaDeDados

116

Lgica de Programao - Everton Coimbra de Arajo

Incio
...
Fim
Incio
...
Fim

At onde vnhamos trabalhando na resoluo de problemas, tnhamos, logo aps


a declarao das variveis, o bloco Incio...Fim, que trabalha a resoluo do
problema, porm, como agora trabalharemos estas resolues mediante o uso de
procedimentos e funes, h a necessidade de declarao destes, antes do
bloco Incio...Fim. Note que cada procedimento tem o corpo idntico ao de um
algoritmo completo, com seu nome, declarao de variveis e resoluo. Apenas
deve ser sabido que as variveis declaradas dentro de um procedimento ou
funo tm seu acesso permitido apenas dentro do procedimento ou funo que
a declara.
A resoluo deste procedimento simples e semelhante a algumas solues j
implementadas por ns em situaes anteriores. Utilizamos uma estrutura de
repetio contada para entrada dos dados, tendo uma varivel acumuladora
inicializada em zero antes do incio desta e, ao seu trmino, feita a operao de
diviso para obteno da mdia aritmtica.
...
Algoritmo Alunos
...
Procedimento EntradaDeDados
Incio
...
Fim
Procedimento SaidaDeDados
Variveis
I : Inteiro
Incio
Escreva Alunos com mdia abaixo da mdia da turma
Para I = 1 At 47 Faa
Se (Medias[I] < MediaTurma) Ento
Escreva Aluno , Nomes[I], mdia , Notas[I]
FimSe
FimPara
Fim
Incio
...
Fim

Lgica de Programao - Everton Coimbra de Arajo

117

A resoluo do procedimento acima tambm no de outro mundo. Apenas


necessrio saber que a entrada de dados deve realizar esta execuo e o
programador dever prover ao cdigo este conhecimento, como veremos em
passagem posterior.
...
Algoritmo Alunos
...
Procedimento EntradaDeDados
Incio
...
Fim
Procedimento SaidaDeDados
Incio
...
Fim
Incio
EntradaDeDados
SaidaDeDados
Fim

O bloco Incio...Fim do cdigo anterior representa a execuo do algoritmo


principal. Veja que so apenas chamados os procedimentos j codificados.
Bem, vamos verificar uma variante deste problema, que, seguramente, justificar
o uso de procedimentos e funes. Imagine que voc tenha vrios clientes que
iro fazer o lanamento de notas e nomes de seus alunos. bvio que cada um
ter turmas com nmeros diferenciados de alunos. Voc alteraria seu programa
para cada cliente? Isso seria invivel, porm podemos pensar em deixar sua
soluo apta para atender a todos eles, desde que a nica mudana necessria
seja a quantidade de alunos existentes em cada turma. Veja a nova resoluo
como ficaria.
...
Algoritmo Alunos
Variveis
Nomes[47][15] : String
Medias[47], MediaTurma : Real
Procedimento EntradaDeDados(QtdeAlunos : Inteiro)
Variveis
I : Inteiro
Incio
Escreva Informe o nome e mdia dos , QtdeAlunos, alunos da

118

Lgica de Programao - Everton Coimbra de Arajo

turma
MediaTurma = 0
Para I = 1 At QtdeAlunos Faa
Escreva Informe o nome do aluno , I, de , QtdeAlunos
Leia Nomes[I]
Escreva Informe a mdia do aluno , Nomes[I]
Leia Medias[I]
MediaTurma = MediaTurma + Medias[I]
FimPara
MediaTurma = MediaTurma / QtdeAlunos
Fim
Procedimento SaidaDeDados(QtdeAlunos : Inteiro)
Variveis
I : Inteiro
Incio
Escreva Alunos com mdia abaixo da mdia da turma
Para I = 1 At QtdeAlunos Faa
Se (Medias[I] < MediaTurma) Ento
Escreva Aluno , Nomes[I], mdia , Notas[I]
FimSe
FimPara
Fim
Incio
EntradaDeDados(10)
SaidaDeDados(10)
Fim

A resoluo acima, permite a execuo completa e com sucesso para qualquer


quantidade de alunos de uma turma, desde que esta quantidade no ultrapasse
o mximo permitido na matriz, ou seja, o seu tamanho fsico, que ainda ficou em
47, como pode ser visto no incio do algoritmo. Note as alteraes feitas nas linhas
que esto em itlico.
Observe que ainda no foi tratada a verificao de o lanamento das notas ter
realmente ocorrido antes da solicitao dos alunos com mdia inferior mdia
da turma. Podemos ter uma resoluo mais prxima da necessidade com a
exibida a seguir.
...
Algoritmo Alunos
Variveis
Nomes[47][15] : String
Medias[47], MediaTurma : Real
TF : Inteiro

Lgica de Programao - Everton Coimbra de Arajo

119

Procedimento EntradaDeDados(QtdeAlunos : Inteiro)


Variveis
I : Inteiro
Incio
Se (QtdeAlunos > TF) Ento
Escreva A quantidade informada superior a permitida
Retorne
FimSe
Escreva Informe o nome e mdia dos , QtdeAlunos, alunos da
turma
MediaTurma = 0
Para I = 1 At QtdeAlunos Faa
Escreva Informe o nome do aluno , I, de , QtdeAlunos
Leia Nomes[I]
Escreva Informe a mdia do aluno , Nomes[I]
Leia Medias[I]
MediaTurma = MediaTurma + Medias[I]
FimPara
MediaTurma = MediaTurma / QtdeAlunos
Fim
Procedimento SaidaDeDados(QtdeAlunos : Inteiro)
Variveis
I : Inteiro
Incio
Se (QtdeAlunos > TF) Ento
Escreva A quantidade informada superior a permitida
Retorne
FimSe
Escreva Alunos com mdia abaixo da mdia da turma
Para I = 1 At QtdeAlunos Faa
Se (Medias[I] < MediaTurma) Ento
Escreva Aluno , Nomes[I], mdia , Notas[I]
FimSe
FimPara
Fim
Incio
TF = 47
EntradaDeDados(10)
SaidaDeDados(10)
Fim

120

Lgica de Programao - Everton Coimbra de Arajo

Na resoluo anterior, foi declarada uma varivel (TF), que tem como
responsabilidade informar a quantidade mxima (o tamanho fsico) das matrizes
que recebero os dados informados pelo usurio. O incoveniente que esta
informao deve ser feita sempre no algoritmo principal, e a varivel dever ter o
nome TF sempre, pois assim que utilizada nos procedimentos. Isso, para o caso
de outros algoritmos fazerem uso destes procedimentos.
Note a verificao de limite no incio de cada procedimento e, em caso de limite
excedido, a instruo Retorne faz com que o procedimento deixe de ser
executado e retorne para o procedimento que o chamou, neste caso o algoritmo
principal.

Ficaram claros para voc os conceitos relacionados com os


subalgaritmos descritos neste incio da Unidade VI?

6.2. REGISTROS
So estruturas que podem agregar diferentes informaes. Dessa maneira, podem
ser feitas diferentes combinaes, gerando outros tipos de dados.
Importante!
Um registro uma coleo de campos, em que cada campo pode ser de
um tipo de dado diferente. Por isso, os registros so conhecidos como
variveis compostas heterogneas.

Um registro consiste em um certo nmero de itens de dados, chamados membros


da estrutura, que no necessitam ser do mesmo tipo, agrupados juntos, como
mostra a figura a seguir.

H situaes em que deparamos com um problema de programao, quando se


deseja agrupar um conjunto de tipos de dados no similares sob um nico nome.
O primeiro impulso seria, talvez, usar uma matriz (conjunto). Como matrizes
requerem que todos os seus elementos sejam do mesmo tipo, provavelmente
solucionar o problema selecionando uma matriz para cada tipo de dado. O
resultado tornaria o programa ineficaz na maneira de manejar os dados.

Lgica de Programao - Everton Coimbra de Arajo

121

O exemplo tradicional de uso de registro uma folha de pagamento: um


funcionrio descrito por um conjunto de atributos tais como nome (uma string), o
nmero do seu departamento (um inteiro), salrio (um float), e assim por diante.
Provavelmente, haver outros funcionrios, e voc vai querer que seu programa
os guarde, formando uma matriz de registro.

6.2.1. PRTICA
Segue agora apresentao de algoritmos que trabalharo estrutura heterognea
de dados em suas resolues e, seguindo a estrutura j trabalhada nas unidades
anteriores, os conceitos de cdigo e regras de implementao sero explicados
em cada soluo proposta.

Faa um algoritmo que solicite ao usurio o preo de compra


e o preo de venda de um nico produto e informe ao
usurio:
- O valor do lucro obtido, caso exista;
- Caso o lucro seja negativo, dever ser informado ao
usurio que ele obteve prejuzo na venda.
Algoritmo VerLucro
Variveis
Produto : Registro(Custo, Venda, Lucro : Real)
Incio
Escreva Informe o preo de compra do produto
Leia Produto.Custo
Escreva Informe o preo de venda do produto
Leia Produto.Venda
Produto.Lucro = (Produto.Venda Produto.Custo)
Se (Produto.Lucro > 0) ento
Escreva A venda obteve um lucro de , Produto.Lucro
Seno Se (Produto.Lucro < 0) ento
Escreva A venda obteve um prejuzo de , Produto.Lucro
Seno
Escreva No houve lucro nem prejuzo na venda
FimSe
Fim

Antes de tentarmos resolver o enunciado, interessante a visualizao do registro


para sua devida compreenso. Dessa forma, vejamos a representao:

Observe que, na montagem do registro, no existem valores para os campos

122

Lgica de Programao - Everton Coimbra de Arajo

existentes, ou seja, estes valores devero ser preenchidos pelo usurio. Para
facilitar a compreenso, podemos imaginar que sero entregues fichas aos
usurios, as quais sero preenchidas e ento, depois disso, os dados sero
informados ao algoritmo.
Ainda em relao representao do registro, o campo Lucro Obtido, poderia
no fazer parte dele, pois pode ser obtido este valor por meio de uma operao
de subtrao entre os dois outros campos (Venda e Compra).
Bem, por ser o primeiro exemplo a utilizar registros, no algoritmo acima resolvido
um simples problema de subtrao e identificao de possibilidades. Note a
seguir a declarao de uma varivel que seja do tipo registro.
...
Algoritmo VerLucro
Variveis
Produto : Registro(Custo, Venda, Lucro : Real)
Incio .
...
Fim
O acesso s variveis (campos ou membros) do registro feito mediante a
separao do nome da varivel de registro e nome do campo por um ponto. A
forma de exibio e entrada de dados segue o visto em todos os exemplos
anteriores. Verifique o cdigo a seguir.
...
Algoritmo VerLucro
...
Incio
Escreva Informe o preo de compra do produto
Leia Produto.Custo
Escreva Informe o preo de venda do produto
Leia Produto.Venda
...
Fim
Dado que o enunciado solicita, como resultado final do processamento, apenas o
valor do lucro e j deu a dica de que, para ser obtido, ele necessita do preo de
venda e de compra, aps a informao do valor feita uma operao de
subtrao e armazenado seu valor em um campo do registro.
...
Algoritmo VerLucro
...
Incio

Lgica de Programao - Everton Coimbra de Arajo

123

Escreva Informe o preo de compra do produto


Leia Produto.Custo
Escreva Informe o preo de venda do produto
Leia Produto.Venda
...
Fim
Observe que, no trecho acima, verificado, alm da obteno de lucro ou
prejuzo, a situao em que no houve nem um nem outro. Ou seja, o produto
pode ter sido vendido pelo mesmo preo que foi comprado. Verifique que isso
no estava claro no enunciado, mas existem situaes que exigem que nosso
raciocnio veja alm do que est escrito, com bastante controle, claro.

Dado que, para cada aluno de uma turma de N alunos se


tenha: o seu nmero de registro, seu nome e sua mdia final,
faa um algoritmo que:
- Imprima a mdia da turma;
- Calcule a percentagem de alunos, cujos nomes
comecem pela letra A;
- Determine quantos alunos tm a mdia superior a 7,0.
- Voc dever fazer uso de registros.
Algoritmo Boletim
Variveis
Alunos[100] : Registro(Numero : Inteiro, Nome : String, Media : Real)
QtdeAlunos, QtdeNomesA, QtdeAlunos7 : Inteiro
MediaTurma, PercentualNomesA : Real
Incio
Repita
Escreva Informe a quantidade de alunos
Leia QtdeAlunos
At (QtdeAlunos > 0 E QtdeAlunos <= 100)
MediaTurma = 0
QtdeNomesA = 0
QtdeAlunos7 = 0
Para I = 1 At QtdeAlunos Faa
Escreva Informe os dados do aluno , I, de , QtdeAlunos
Escreva Nmero :
Leia Alunos[I].Numero
Escreva Nome :
Leia Alunos[I].Nome
Escreva Mdia Final :
Leia Alunos[I].Media
MediaTurma = (MediaTurma + Alunos[I].Media)
Se (Alunos[I].Nome[1] = 'A') ento
QtdeNomesA = (QtdeNomesA + 1)
FimSe

124

Lgica de Programao - Everton Coimbra de Arajo

Se (Alunos[I].Media > 7.0) ento


QtdeAlunos7 = (QtdeAlunos7 + 1)
FimSe
FimPara
MediaTurma = (MediaTurma / QtdeAlunos)
MediaNomesA = (QtdeNomesA * 100) / QtdeAlunos
Escreva A mdia da turma : , MediaTurma
Escreva O percentual de alunos com nomes comeando por A ,
PercentualNomesA
Escreva Existem , QtdeAlunos, com mdia acima de 7.0
Fim

Diferentemente do exemplo anterior a este, em que se solicitavam dados de


apenas uma amostra (um produto), este solicita vrios dados, mas todos com a
mesma estrutura. Dessa forma, podemos imaginar que o usurio responsvel pela
alimentao de dados no algoritmo receba uma folha semelhante exibida a
seguir:

O enunciado deste problema contempla uma situao um pouco mais


complexa, pois envolve, alm de registros, estruturas de repetio, estrutura de
condio e conjunto, bem como de um pequeno processamento sobre os dados
de entrada.
Como visto em outra passagem, temos a necessidade, na declarao de um
conjunto, de estabelecer sua capacidade (tamanho fsico), ou seja, quantas
linhas ele suportar. Alm disso, o algoritmo dever garantir que este limite no
seja ultrapassado.
...
Algoritmo Boletim
Variveis
Alunos[100] : Registro(Numero : Inteiro, Nome : String, Media : Real)
...
Incio
Repita
Escreva Informe a quantidade de alunos

Lgica de Programao - Everton Coimbra de Arajo

125

Leia QtdeAlunos
At (QtdeAlunos > 0 E QtdeAlunos <= 100)
...
Fim

Veja acima que o conjunto Alunos tem seu tamanho fsico estipulado em 100, e
que ele um Registro. Mais abaixo, uma estrutura de repetio que terminar
apenas quando o usurio informar um valor compreendido entre 1 e 100, ou seja,
o algoritmo garante que o tamanho lgico (linhas realmente usadas do conjunto)
no ultrapasse o tamanho fsico, e que tambm no seja informado zero ou um
valor negativo.
Uma vez obtida a quantidade de vezes que a estrutura de repetio dever
gerenciar (no exemplo a quantidade de alunos), existem algumas variveis que
tm a funo de serem acumuladoras. Sendo assim, devem ser inicializadas com
zero antes da estrutura comear.
...
Algoritmo Boletim
...
Incio
...
MediaTurma = 0
QtdeNomesA = 0
QtdeAlunos7 = 0
Para I := 1 At QtdeAlunos Faa
Escreva Informe os dados do aluno , I, de , QtdeAlunos
Escreva Nmero :
Leia Alunos[I].Numero
Escreva Nome :
Leia Alunos[I].Nome
Escreva Mdia Final :
Leia Alunos[I].Media
...
FimPara
...
Fim

Verifique no cdigo acima a declarao das variveis acumuladoras e a entrada


dos dados necessrios ao processamento. Observe que a manipulao de dados
por meio de conjuntos de registro no difere do visto at o momento. H, sim,
novo acrscimo, que o campo do registro onde o dado ser armazenado e este
campo separado do nome da varivel de registro, por um ponto (.).
Uma vez obtidos os dados necessrios para o processamento, este deve ser
executado.

126

Lgica de Programao - Everton Coimbra de Arajo

...
Algoritmo Boletim
...
Incio
...
Para I := 1 At QtdeAlunos Faa
...
MediaTurma = (MediaTurma + Alunos[I].Media)
Se (Alunos[I].Nome[1] = 'A') ento
QtdeNomesA = (QtdeNomesA + 1)
FimSe
Se (Alunos[I].Media > 7.0) ento
QtdeAlunos7 = (QtdeAlunos7 + 1)
FimSe
FimPara
...
Fim

Observe acima que o que lhe pode parecer diferente a verificao dos alunos
que tm seu nome iniciado pela letra A. Pense que uma string um conjunto de
caracteres e como tal, podemos acessar seus valores mediante ndices, e isso
que feito.
Terminado o processamento necessrio a cada aluno, que deve ser feito dentro
da estrutura de repetio, h necessidade de identificar os valores que
dependem do trmino da estrutura.
...
Algoritmo VerLucro
...
Incio
...
Para I := 1 At QtdeAlunos Faa
...
FimPara
MediaTurma = (MediaTurma / QtdeAlunos)
PercentualNomesA = (QtdeNomesA * 100) / QtdeAlunos
Escreva A mdia da turma : , MediaTurma
Escreva O percentual de alunos com nomes comeando por A ,
PercentualNomesA
Escreva Existem , QtdeAlunos7, com mdia acima de 7.0
Fim

Aps o trmino da estrutura de repetio, as variveis acumuladoras tero os


valores referentes a todos os alunos, necessrios para a identificao da mdia e
do percentual desejado. Sendo assim, as operaes so efetuadas, e os valores
exibidos ao usurio.

Lgica de Programao - Everton Coimbra de Arajo

127

Parabns! Chegamos ao final desta ltima unidade!

Nesta unidade, estudamos um pouco sobre os subalgoritmos


e os registros.
Foi bastante destacado que o uso de subalgoritmos para
resoluo de problemas altamente recomendado, pois,
mediante este recurso, podemos particionar um grande
problema em problemas menores e trat-los
individualmente, como partes completas. Isso permite, alm da
modularizao de cdigo, uma reutilizao deste. O envio e o recebimento
de argumentos e retorno de valores processados devem ser sempre utilizados,
lembrando que os argumentos de entrada de procedimentos e funes so
os dados necessrios para que resolvam o problema que se propem, e o
retorno aquele que se espera obter com o processamento dos argumentos
de entrada. As linguagens atuais esto voltando seu uso mais para funes
(que em linguagens orientadas a objetos so tratadas como mtodos), pois o
que diferencia um procedimento de uma funo o retorno de valores.
Como pde ser visto tambm na segunda parte desta unidade, o uso de
registros permite que dados comuns a um objeto, pessoa ou acontecimento,
podem ser agrupados em uma nica varivel, mesmo sendo de tipos
diferentes, o que j no ocorre em conjuntos.
O uso de registros na resoluo de algoritmos complexos essencial,
devendo ser verificado, em cada linguagem, como as mesmas implementam
este recurso.
Encerramos por aqui, sempre acreditando que o que foi estudado tenha sido
de grande utilidade pra voc nesta jornada de aprendizado, que deve ser
constante.
Parabns por chegar at aqui!!!

128

Lgica de Programao - Everton Coimbra de Arajo

RETOMANDO A CONVERSA INICIAL

Parabns, voc cumpriu mais este objetivo em sua vida. Aps esta leitura e o
estudo decorrente dela, espero que voc j tenha condies de desenvolver
seus conhecimentos sobre algoritmos.
Espero que a dinmica utilizada na organizao do contedo tenha sido boa e
facilitadora para seu aprendizado, e que agora voc possa compreender
algoritmos e sua importncia na formao do tcnico em Informtica.
Voc viu, na Unidade I, os conceitos de lgica, algoritmo, dados, informao,
processamento de dados e lgica de programao, o que certamente deu a
voc subsdios para compreenso do que o esperava nas prximas unidades.
A Unidade II apresentou os tipos de dados, variveis e expresses, que certamente
voc utilizou durante todo o estudo deste livro.
Na Unidade III, voc ps a mo na massa, comeou a programar, fazendo uso
de pseudocdigos. Terminou a unidade conhecendo e resolvendo problemas em
sua estrutura sequencial e condicional.
A Unidade IV trabalhou especificamente as trs variaes possveis para uma
estrutura de repetio, e voc certamente j sabe os benefcios de uma em
relao s outras, o que o auxilia na escolha da correta estrutura para a resoluo
de um problema.
A Unidade V respondeu a uma pergunta que voc seguramente vinha fazendo:
Como trabalhar com um conjunto de dados?. Esta resposta foi dada por meio
do uso de conjuntos, trabalhados nesta unidade.
A finalizao de seu estudo, com chave de ouro, se deu na Unidade VI. A voc foi
apresentado aos subalgoritmos e aos registros, poderosos recursos que
certamente faro parte de seu dia a dia de programador.
Agora, meu amigo, descanse (um pouquinho s, hein!) e se prepare para o
prximo mdulo de seu curso, quando seus conhecimentos de lgica sero
usados em linguagens reais de programao.
Um grande abrao e muito sucesso.
Everton Coimbra de Arajo

Lgica de Programao - Everton Coimbra de Arajo

129

REFERNCIAS

ARAJO, Everton Coimbra de. Algoritmos - Fundamento e Prtica. 3 ed.


Florianpolis, Visual Books, 2007
ASCENSIO, Ana Fernanda Gomes e CAMPOS, Edilene Aparecida Veneruchi.
Fundamentos da Programao de Computadores Algoritmos, Pascal e
C/C++. Porto Alegre, Prentice Hall, 2002.
FILHO, Edgard de Alencar. Iniciao Lgica Matemtica. 18 ed. So Paulo,
Nobel, 2000.
FORBELLONE, Andr Luiz Villar; EBERSPACHER, Henri Frederico. Lgica de
Programao: A construo de algoritmos e Estrutura de Dados. 2 ed. So
Paulo, Makron Books, 2000.
LOPES, Anita; GARCIA, Guto. Introduo Programao: 500 Algoritmos
resolvidos. Rio de Janeiro, Campus, 2002.
SALIBA, Walter Luiz Caram. Tcnicas de Programao: Uma abordagem
estruturada. So Paulo, Makron Books, 1993.
SALVETTI, Dirceu Douglas; BARBOSA, Lisbete Madsen. Algoritmos. So Paulo,
Makron Books, 1998.

Lgica de Programao - Everton Coimbra de Arajo

131

Autor

EVERTON COIMBRA DE ARAJO, desde 1987, atua na rea de


treinamento e desenvolvimento. desenvolvedor, analista de sistemas e gerente
de projetos, pela PPT INFORMTICA, desde 1994.
autor pela editora Visual Books, tendo publicado nesta editora livros sobre
Algoritmos, Delphi, C++ Builder, Orientao a Objetos e Java.
Como Mestre em Cincia da Computao, professor efetivo da Universidade
Tecnolgica Federal do Paran (UTFPR), cmpus Medianeira, onde leciona
disciplinas no curso tecnolgico de Anlise e Desenvolvimento de Sistemas e no
curso de Ps-Graduao em Desenvolvimento de Sistemas para Web com Java.
Tambm tem atuado pela UTFPR nos cursos de EaD (Educao a Distncia),
oferecidos pela UAB e ETEC.
J ministrou aulas em outras faculdades nas disciplinas de Algoritmos, Tcnicas de
Programao, Estrutura de Dados, Linguagens de Programao (estruturadas e
orientadas a objetos, tais como C, Pascal, Delphi, C++ Builder, Java e C#), Anlise
de Sistemas, UML e Banco de Dados.
Nos ltimos anos tem se dedicado s disciplinas relacionadas com o
desenvolvimento de aplicaes web e na persistncia de objetos, focando seus
estudos e pesquisas na plataforma Java (JSP, Servlets, JSF e EJB), .NET (ASP.NET) e
AJAX.
Tem como objetivo concluir uma coletnea de livros que cubram todas as etapas,
tericas e prticas, referentes ao desenvolvimento de um projeto de sistemas,
usando como alicerce todas as disciplinas que compem diversos cursos de nvel
superior ligados informtica.
O autor tambm tem proferido palestras em seminrios de informtica, voltados
tanto para o meio acadmico como para o empresarial.

132

Lgica de Programao - Everton Coimbra de Arajo

Você também pode gostar