Escolar Documentos
Profissional Documentos
Cultura Documentos
Lgica de
Programao
Everton Coimbra de Arajo
Cuiab, 2009
Ficha Catalogrfica
A663l
CDU - 004.422.612
Reviso
Capa (lay out)
Ilustrao
Diagramao
Cuiab, 2009
Amigo(a) estudante:
Caro estudante:
Atenciosamente,
Equipe de formadores do curso de Informtica da
Universidade Tecnolgica Federal do Paran.
SUMRIO
UNIDADE V - CONJUNTOS
Conjuntos ................................................................................................................. 87
Matriz ........................................................................................................................ 92
Classificao e Pesquisa ........................................................................................ 96
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;
10
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?
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
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 ?
15
16
Dado:
Informao:
17
18
19
2. DESCRIO NARRATIVA
O que voc imagina que seja descrio narrativa?
Ao depararmos com um problema, cuja necessidade de automao iminente,
20
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
21
O Problema
Soluo
esperada
Dados de
entrada
22
Dados de
sada
Etapas
encontradas
Descrio
Narrativa da
soluo
encontrada
A primeira possibilidade est descartada, pois ele teria acertado, uma vez que s
existiam dois chapus vermelhos. Sendo assim, restaram as trs ltimas.
23
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.
24
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.
O Problema
Soluo
esperada
Dados de
entrada
Dados de
sada
Etapas
encontradas
25
Descrio
Narrativa da
soluo
encontrada
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.
Observaes complementares
- O ms de novembro tem 30 dias;
- Nem todas as temperaturas obrigatoriamente so positivas
ou negativas.
26
Soluo
esperada
Temperatura
Deve ser verificado se positiva ou negativa.
Dados de
sada
Etapas
encontradas
Descrio
Narrativa da
soluo
encontrada
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
27
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.
Observaes complementares
- No se sabe qual o ms se deseja fazer a verificao;
- Cada cliente pode comprar vrios tipos de vinho.
Soluo
esperada
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.
Etapas
encontradas
Descrio
Narrativa da
soluo
encontrada
SABER M
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).
29
30
UNIDADE II
TIPOS DE
DADOS, VARIVEIS,
EXPRESSES, SINTAXE
E SEMNTICA
33
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.
Literal de comprimento 5
Literal de comprimento 1
Literal de comprimento 8
Literal de comprimento 9
Literal de comprimento 6
Literal de comprimento 1
34
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.
35
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
36
37
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.
38
39
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.
40
Bem, de acordo com o que foi exposto acima, podemos, de modo conciso,
dizer:
SINTAXE :
SEMNTICA :
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.
41
42
UNIDADE III
INTRODUO AOS
PSEUDOCDIGOS
3.1. PSEUDOCDIGOS
O que pseudocdigo?
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.
45
46
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.
47
48
49
50
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)
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
51
52
...
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.
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
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.
54
Soma
Soma + 5
Seno
Soma
Soma - 5
FimSe
Escreva O resultado de toda a operao , Soma
Fim
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
55
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
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.
PesoNaTerra
10
* Gravidade
Algoritmo PesoPlaneta
Variveis
Opcao : Inteiro
58
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
...
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:
60
61
UNIDADE IV
ESTRUTURAS DE
REPETIO COM
PSEUDOCDIGOS
65
Leia Numero
Para I = 1 At Numero Faa
Se (Resto(I, 2) <> 0) Ento
Escreva I, mpar
FimSe
FimPara
Fim
66
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.
67
68
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.
69
70
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.
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
...
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
73
74
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
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.
77
78
79
...
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
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
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
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.
83
UNIDADE V
CONJUNTOS
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.
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.
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
Tamanho fsico
...
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
89
...
Algoritmo OrdemInversa
Variveis
...
Incio
...
Para I = 1 At N Faa
Escreva Informe o nmero , I, de , N
Leia Entrada[I]
FimPara
...
Fim
90
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
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
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.
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
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
95
96
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.
97
(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
(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
(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
(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
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
100
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
103
104
105
106
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
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
UNIDADE VI
SUBALGORITMOS E
REGISTROS
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.
111
int C, F
Sub 2
int A, B
int B, D
Sub 1
112
int C, E
Sub 3
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.
113
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
115
...
Algoritmo Alunos
Variveis
Nomes[47][15] : String
Medias[47], MediaTurma : Real
Procedimento EntradaDeDados
Incio
...
Fim
Procedimento SaidaDeDados
Incio
...
Fim
Incio
...
Fim
116
Incio
...
Fim
Incio
...
Fim
117
118
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
119
120
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.
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.
121
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.
122
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
123
124
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
126
...
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
127
128
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
129
REFERNCIAS
131
Autor
132