You are on page 1of 84

Flvio Morgado

EXERCCIOS DE ALGORITMOS
Parte I

Santo Andr
2007

SUMRIO
1. PROBLEMAS ALGORTMICOS .................................................................................. 4
1.1.
1.2.
1.3.
1.4.
1.5.

BAIXA PRODUTIVIDADE ....................................................................................................................... 4


ADIVINHAO ..................................................................................................................................... 4
MOEDA MAIS PESADA .......................................................................................................................... 6
CAIXA ELETRNICO ............................................................................................................................. 8
PROBLEMAS PROPOSTOS ...................................................................................................................... 9

2. CONCEITOS FUNDAMENTAIS................................................................................. 11
2.1. ORGANIZAO DOS COMPUTADORES ................................................................................................ 11
2.2. VARIVEIS ........................................................................................................................................ 12
2.2.1.
Tipo Inteiro............................................................................................................................... 12
2.2.2.
Tipo Real .................................................................................................................................. 12
2.2.3.
Tipo Caractere .......................................................................................................................... 12
2.2.4.
Tipo String................................................................................................................................ 14
2.2.5.
Tipo Data .................................................................................................................................. 14
2.2.6.
Tipo Booleano .......................................................................................................................... 14
2.3. REGRAS PARA IDENTIFICADORES ....................................................................................................... 14
2.4. EXPRESSES E HIERARQUIA DE OPERADORES ................................................................................... 14
2.5. FUNES PR-DEFINIDAS .................................................................................................................. 15

3. CONSTRUTOR LGICO SEQUENCIAL................................................................... 16


3.1.
3.2.
3.3.
3.4.
3.5.
3.6.

TERMMETRO ................................................................................................................................... 16
REA DO CRCULO ............................................................................................................................ 17
CRONMETRO ................................................................................................................................... 18
RATEIO .............................................................................................................................................. 20
ERRO COMUM (PARA INICIANTES) ..................................................................................................... 21
PROBLEMAS PROPOSTOS ................................................................................................................... 21

4. CONSTRUTOR LGICO DE SELEO (DECISO)............................................... 24


4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.
4.9.
4.10.
4.11.
4.12.

SALRIO BRUTO ................................................................................................................................ 24


VERIFICAR SE PAR .......................................................................................................................... 25
MAIOR DE 2 NMEROS....................................................................................................................... 25
MAIOR DE 3 NMEROS....................................................................................................................... 26
ORDEM CRESCENTE ........................................................................................................................... 30
CONTAR PARES ................................................................................................................................. 32
QUADRANTE...................................................................................................................................... 33
ALUNOS ............................................................................................................................................ 35
MELHORES NOTAS ............................................................................................................................. 38
MAIOR QUANTIDADE DE PRODUTOS .................................................................................................. 40
ERROS COMUNS (PARA INICIANTES).................................................................................................. 41
EXERCCIOS PROPOSTOS .................................................................................................................... 42

5. CONSTRUTOR LGICO DE REPETIO................................................................ 48


5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.
5.8.
5.9.
5.10.
5.11.
5.12.

N PRIMEIROS PARES ........................................................................................................................... 48


IMPARES ............................................................................................................................................ 51
P.A.................................................................................................................................................... 54
NMEROS TRIANGULARES ................................................................................................................. 55
FATORIAL .......................................................................................................................................... 57
MDC................................................................................................................................................. 58
SEQNCIA OSCILANTE..................................................................................................................... 60
WALLIS ............................................................................................................................................. 63
FIBONACCI ........................................................................................................................................ 64
ACUMULAR SEQNCIA .................................................................................................................... 66
SEQNCIA COM AVISO DE FIM .......................................................................................................... 67
ALFABETO ......................................................................................................................................... 67

5.13.
5.14.
5.15.
5.16.

PRXIMA PLACA ............................................................................................................................... 69


ENGRENAGEM ................................................................................................................................... 70
PRESTAES...................................................................................................................................... 70
EXERCCIOS PROPOSTOS .................................................................................................................... 72

REFERNCIAS E BIBLIOGRAFIA................................................................................... 84

1.

PROBLEMAS ALGORTMICOS

Segundo Gardner (1990), os problemas podem ser classificados em seis categorias:


combinatrios, geomtricos, numricos, lgicos, processuais e verbais, podendo haver
sobreposies entre as categorias. Neste curso, os problemas so do tipo processual, ou
seja, que possuem soluo algortmica, como em uma receita de bolo.
Segundo as Diretrizes Curriculares de Cursos da rea de Computao e Informtica
(MEC/SESu/CEEInf, 2006), um algoritmo um mtodo abstrato mas bem definido para
resoluo de um problema em tempo finito.
O uso de algoritmos anterior prpria palavra, originada do sobrenome de um
matemtico persa do sculo IX, Al-Khwarizmi, que teve sua obra sobre o sistema de
numerao decimal
(indiano) publicado no Ocidente no sculo XII
(http://pt.wikipedia.org/wiki/Algoritmo). Como exemplo de algoritmos, temos:

1.1.

Dividir um nmero inteiro por outro


Soma de fraes
Mximo Divisor Comum (MDC) de dois nmeros inteiros (Euclides)
Decomposio de nmeros inteiros em fatores primos (Fatorao)

Baixa produtividade

Uma estria que ilustra o que so os algoritmos e como eles podem ser mais, ou
menos, eficientes a de um pintor que foi contratado para pintar uma faixa contnua em
uma estrada. Passados alguns dias, o supervisor chama o pintor e diz que a produtividade
dela tem diminudo muito, pois no 1 dia ela pintou 120 metros de faixa, no 2 pintou 60,
no 3, 45 e foi sempre diminuindo. O pintor respondeu:
Eu no estou trabalhando menos. A lata de tinta que est cada vez mais longe.
Moral da estria: No basta apenas funcionar. Os algoritmos tm de ser eficientes.

1.2.

Adivinhao

Um mgico se prope a adivinhar o nmero que uma pessoa pensou, no intervalo de


0 a 1024 e usa a seguinte estratgia, fazendo a seguinte seqncia de perguntas para a
pessoa:
-

O nmero que voc pensou o zero?


O nmero que voc pensou o um?
O nmero que voc pensou o dois?

e assim por diante. Quando a pessoa responder sim, o mgico chegou na soluo.
Outro mgico utiliza a seguinte estratgia: A pessoa deve responder se o nmero
falado pelo mgico o nmero pensado ou se menor ou maior que o nmero pensado.

O primeiro nmero perguntado pelo mgico o 512, que a metade do intervalo de


adivinhao, de 0 a 1024.
Se a pessoa responder que no o 512 e que o nmero pensado menor que 512, o
mgico desconsidera os nmeros maiores ou iguais a 512 e acha o meio do intervalo de 0 a
511, que 256. Se a pessoa responder que no o 512 e que o nmero pensado maior que
512, o mgico desconsidera os nmeros menores ou iguais a 512 e acha o meio do intervalo
de 513 a 1024, que 768.
O processo segue assim: elimina-se metade de cada intervalo e divide-se ao meio o
intervalo em que se encontra o nmero pensado, at que o nmero pensado seja encontrado.
O segundo processo mais eficiente que o primeiro, ou seja, gasta menos recursos
computacionais (perguntas do mgico). Para determinar quanto um algoritmo melhor que
outro, compara-se o esforo computacional (complexidade) de cada algoritmo.
Uma forma de comparao, neste caso, supor que cada algoritmo ser usado para
fazer 1024 adivinhaes e compara-se a quantidade de perguntas (esforo computacional)
das duas estratgias:
1 estratgia: A quantidade de perguntas de cada adivinhao , em mdia, 512
(alguns pensaro em nmeros no incio da faixa; outros, querendo ver o mgico se cansar,
pensaro em nmeros prximos de 1024).
2 estratgia: A quantidade de perguntas , no mximo 10 (cada vez que o mgico
faz a pergunta, o intervalo dividido ao meio: 1024 / 2 = 512; 512 / 2 = 256; 256 / 2 = 128;
64; 32; 16; 8; 4; 2; 1. Quando o tamanho do intervalo fica igual a um, o nmero
adivinhado).
Exemplo: Se o nmero pensado for o 47, na primeira estratgia seriam feitas 47
perguntas. Na segunda, seriam feitas as seguintes perguntas:
Pergunta Incio
intervalo
1
0
2
0
3
0
4
0
5
0
6
32
7
32
8
40
9
44
10
46

do Fim do intervalo Meio (Nmero perguntado)


1024
512
256
128
64
64
48
48
48
48

512
256
128
64
32
48
40
44
46
47 (nmero pensado)

1.3.

Moeda mais pesada

Num conjunto de 9 moedas, uma mais pesada que as demais. Usando uma balana
1
de 2 pratos , identificar a moeda mais pesada.
Uma estratgia dividir as moedas em 3 conjuntos de 3 moedas, colocar um
conjunto em cada prato e deixar um conjunto de fora:
1a Pesagem
Se houver equilbrio, a mais pesada estar entre
as que esto fora. Seno, estar no prato mais
baixo.
2a Pesagem
Do conjunto que contm a mais pesada, colocar
uma em cada prato. Se houver equilbrio, a que
ficou fora a mais pesada, seno, a mais pesada
ser aquela do prato mais baixo.

Outra estratgia dividir as moedas em 2 conjuntos de 4 moedas e colocar um


conjunto em cada prato, ficando uma moeda de fora:
1a Pesagem
Se houver equilbrio, a mais pesada a que ficou fora. Seno, est no prato
mais baixo.
2a Pesagem
Do conjunto que contm a mais pesada, colocar duas em cada prato. A mais
pesada estar no prato que descer.
3a Pesagem
Colocar uma moeda em cada prato. A mais pesada estar no prato que descer.

Ao examinarmos as duas estratgias notamos que na 1 sempre haver duas


pesagens, enquanto que na 2, a moeda mais pesada poder ser localizada j na 1 pesagem.
Qual a mais eficiente?
1

Trata-se de uma balana analgica, que no mostra o peso, como numa balana digital, mas se
uma coisa tem o mesmo peso que outra.

Podemos supor que temos de identificar 9 lotes de moedas. Sero necessrias 18


pesagens na 1 estratgia (9 lotes X 2 pesagens), e 25 pesagens na 2 (1/9 de probabilidade
de encontrarmos na primeira pesagem, e as outras 8 vezes com 3 pesagens), ou seja:
1 / 9 de 9 + 8 X 3
Para esse nmero de moedas, a 1 estratgia melhor.
Outra comparao quanto reutilizao das estratgias para conjuntos com mais
moedas. Como exemplo, usaremos as duas estratgias para um conjunto de 40 moedas.
Nesse momento, os vendedores de cada estratgia criaro slogans para vender
seu peixe, algo como: Divida em 3 partes, ou Um pouco, dois bom, trs demais.
1 Estratgia
1 Pesagem
2 Pesagem
3 Pesagem

2 estratgia
1 Pesagem
2 Pesagem
3 Pesagem
4 Pesagem
5 Pesagem

Dividir em 3 partes. Nesse caso, teramos 13 moedas em


cada prato e 14 moedas fora.
Se houver equilbrio, a mais pesada estar nas moedas de fora.
Seno, estar no prato que desceu. Teramos, nesse caso, 6 ou
7 moedas para a prxima pesagem.
Colocar 2 moedas em cada prato e 2 ou 3 fora. A concluso
seria a mesma da primeira pesagem.
Com 2 ou 3 moedas, uma em cada prato, acharemos a mais
pesada
Dividir em 2 partes iguais. Se a quantidade de moedas for
impar, 1 moeda ficar de fora.
Colocar 20 moedas em cada prato. A mais pesada estar no
prato que descer
Por 10 moedas em cada prato. A mais pesada estar no prato
que descer
Por 5 moedas em cada prato. Se houver equilbrio, a mais
pesada ser a de fora. Seno, est no prato que desceu.
Por 2 moedas em cada prato. Se houver equilbrio, a mais
pesada ser a de fora. Seno, estar no prato que desceu.
Colocar uma moeda em cada prato. A mais pesada estar no
prato que desceu.

Tente mostrar que, exceto por sorte, a 1 estratgia melhor que a 2.

1.4.

Caixa eletrnico

Um procedimento (algoritmo) para retirar dinheiro de um caixa eletrnico algo


simples, que est ao alcance de quase todos, devido s facilidades crescentes das interfaces
com o usurio, apesar do no entendimento, ainda, da voz ou do pensamento do cliente.
Existem variaes de procedimentos entre os bancos, tais como o tipo de acesso ao
quiosque, reteno ou no do carto durante a transao, posio do carto para insero
etc.
1 Entrar no Envolve a leitura do carto na porta do quiosque e verificao se
quiosque um carto vlido. A leitura feita num determinado sentido, pois
existem 4 possibilidades com o carto na horizontal, e s uma
vlida). Nesse caso, um desenho do carto (cone) prximo ao
mecanismo de leitura pode ajudar.
2 Colocar
Outra vez ocorre o problema sobre como colocar o carto.
carto na
mquina
3 Digitar a A senha digitada deve ser verificada com a senha do carto. Deve
haver um limite de tentativas (normalmente 3). O programa deve
senha
emitir mensagens sobre o que ocorrer aps as tentativas
frustradas.
4 Solicitar Um menu (cardpio) deve ser mostrado para que o cliente escolha
o tipo de servio (saldo, extrato, retirada, transferncia,
valor
pagamento etc.). Se a escolha for retirada, o programa deve
sugerir alguns valores comuns, ou abrir um campo para a
digitao de outro valor que, normalmente, deve ser mltiplo de
R$ 10,00. Devem, tambm, ser verificados os limites (saldo,
acumulado de retiradas no dia, horrios especiais etc.)
5 Retirar o Normalmente, o carto liberado antes do dinheiro, para evitar
esquecimentos. Pode-se tambm verificar se o cliente quer utilizar
carto
algum outro servio antes de devolver o carto.
6 Retirar o Deve-se ter um mecanismo de contagem e escolha de notas para
dinheiro cada pagamento.
7 Sair do
Mesmo este ato pode no ser to simples, existindo seguros
quiosque instantneos para casos de roubos em caixas eletrnicos.
No refinamento deste procedimento no foram consideradas as implicaes
tecnolgicas, de performance, e dos inmeros contratempos que podem ocorrer, como
mquina quebrada, papel enroscado, carto engolido, sem comunicao (off-line) etc.

1.5.

Problemas propostos

a)

Ligao telefnica

Escreva um procedimento detalhado para efetuar uma ligao telefnica de um


aparelho pblico.
b)

Moeda diferente

Num grupo de oito moedas, uma delas diferente (mais leve ou mais pesada).
Usando uma balana de dois pratos, escreva um procedimento para descobrir qual.
c)

Moedas falsas

Existem 10 montes de moedas, cada um com 10 moedas de 10 gramas. Num dos


montes todas as moedas so falsas (cada uma delas pesa um grama a mais que as
verdadeiras). Descreva os passos para descobrir o monte de moedas falsas, usando uma
balana digital.
d)

Travesia 1 (Canibais)

Trs missionrios esto de um lado de um rio com trs canibais e desejam


atravessar um rio usando um barco com capacidade para, no mximo, duas pessoas. O
problema que se o nmero de canibais for maior que o nmero de missionrios, em
qualquer uma das margens, os canibais comem os missionrios (Barbosa, 1999).
e)

Travessia 2 (Maridos ciumentos)

Trs maridos, com suas respectivas esposas, querem atravessar um rio. Acontece
que, no barco s cabem duas pessoas e os 3 maridos so muito ciumentos e no permitem
que sua esposa fique numa das margens com outro homem, sem que ele tambm esteja
presente. Como pode ser feita a travessia? (Barbosa, 1999).
f)

Problema do vinho

Existem trs jarras com capacidade para exatamente 8, 5 e 3 litros. A primeira jarra
est cheia de vinho. Como fazer para repartir esse contedo, em partes iguais, nas duas
jarras maiores. No existem graduaes nas jarras, nem permitido faze-las (Barbosa,
1999).
g)

TIC-TAC-TOE (Jogo da velha)

No jogo da velha, quem comea pelo centro ganha com certeza, desde que o
adversrio responda com uma casa lateral. D a receita para ganhar (Barbosa, 1999).

10

h)

Torre de Hanoi

(ENADE Computao 2005) No famoso jogo da Torre de Hani, dada uma torre
com discos de raios diferentes, empilhados por tamanho decrescente em um dos trs pinos
dados, como ilustra a figura abaixo. O objetivo do jogo transportar-se toda a torre para
um dos outros pinos, de acordo com as seguintes regras: apenas um disco pode ser
deslocado por vez, e, em todo instante, todos os discos precisam estar em um dos trs
pinos; alm disso, em nenhum momento, um disco pode ser colocado sobre um disco de
raio menor que o dele; claro que o terceiro pino pode ser usado como local temporrio
para os discos.

Imaginando que se tenha uma situao em que a torre inicial tenha um conjunto de
5 discos, qual o nmero mnimo de movimentaes de discos que devero ser realizadas
para se atingir o objetivo do jogo?
A 25
B 28
C 31
D 34
E 38

11

2.

CONCEITOS FUNDAMENTAIS
Os computadores sabem,
desde pequenos, que
depois de executar uma
instruo, devem executar
a prxima.

Um computador executa seqncias de instrues, na ordem em que foram escritas,


exceto se houver alguma instruo de desvio.

2.1.

Organizao dos Computadores

Uma mquina que queira ser chamada de computador deve conter os componentes
bsicos mostrados no diagrama a seguir:
CPU
Unidade de Controle

Entrada
(Input)

Unidade Lgica

Unidade Aritmtica

Memria

A B C
|5| |3| |8|
Soma
CA+B

Comando, instruo

Nome da varivel, endereo,


nome do atributo.

Contedo, valor, estado.


(De acordo com o tipo)

Nome da Operao,
procedimento, mtodo.

Sada
(Output)

12

2.2.

Variveis

Segundo Sebesta (2000, p. 161), uma varivel pode ser caracterizada como um
sxtuplo de atributos: nome, endereo, valor, tipo, tempo de vida e escopo.
O tipo de uma varivel determina a faixa de valores que ela pode ter e o conjunto
de operaes definidas para os valores do tipo (SEBESTA, 2000, p.163).
2.2.1. Tipo Inteiro
utilizado para armazenar valores entre 32.768 e 32.767 (215 1), sem parte
decimal, usando 2 bytes, com as seguintes operaes possveis:
Operao
Adio
Subtrao
Multiplicao
Diviso inteira

Smbolo
+
*
\
quociente
mod resto

Exemplo
7+2=9
72=5
7 * 2 = 14
7\2=3
7 mod 2 = 1

O tipo inteiro utilizado para representar valores enumerveis: quantidades de


peas, contadores, nmero de passagens por uma rotina, dias de atraso etc.
2.2.2. Tipo Real
Nmeros de ponto flutuante entre 3.402823 * 1038 at 3.402823 * 1038, na preciso
simples, ocupando 4 bytes (padro IEEE).
Como exemplo, o n 5.483 seria armazenado de forma normalizada: 0.5483 * 103,
na qual a parte decimal chamada de mantissa (preciso) e o expoente da base 10
chamado de caracterstica (grandeza).
As operaes so as mesmas que as do tipo inteiro, exceto pela diviso, na qual
existe apenas um operador, cujo smbolo uma /, e que fornece valores com casas
decimais, sem resto.
O tipo Real usado para representar nmeros em geral: salrios, notas, preos,
saldos etc.
2.2.3. Tipo Caractere
Usado para armazenar as letras do alfabeto, numerais e sinais de pontuao. O
cdigo ASCII (American Standard Code for Information Interchange), representa, em 7
bits, o padro de caracteres para a lngua inglesa, alm dos caracteres de controle. Na
verso estendida, o cdigo ASCII inclui caracteres prprios das diversas lnguas e smbolos
grficos.

13

Decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

ASCII
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US

Tabela ASCII
Decimal ASCII Decimal
32
Espao 64
33
!
65
34

66
35
#
67
36
$
68
37
%
69
38
&
70
39

71
40
(
72
41
)
73
42
*
74
43
+
75
44
,
76
45
77
46
.
78
47
/
79
48
0
80
49
1
81
50
2
82
51
3
83
52
4
84
53
5
85
54
6
86
55
7
87
56
8
88
57
9
89
58
:
90
59
;
91
60
<
92
61
=
93
62
>
94
63
?
95

ASCII
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_

Decimal
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

ASCII
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL

Em sua verso estendida, com 8 bits, o cdigo ASCII representa tambm caracteres
especiais, como os acentuados, em algumas lnguas.
Decimal
128
130
131

ASCII

Decimal
132
133
135

ASCII

Decimal
136
160
162

ASCII

Decimal
163
166
167

ASCII

14

2.2.4. Tipo String


Cadeias de 0 a 65.535 caracteres (string = cordo, em ingls). O tipo string serve
para armazenar nomes de pessoas, endereos e cdigos em geral, mesmo aqueles que
contenham apenas dgitos, pois, normalmente, no so feitas operaes aritmticas com os
cdigos.
Ex.: INFORMTICA ; ERRO: Cliente j existe; 12345-6
2.2.5. Tipo Data
Datas e horas, ocupando 8 bytes, usadas para representar datas de nascimento,
vencimento, casamento, pagamento, etc. Permite-se operaes de diferena entre datas (em
dias), acrescentar dias a uma data, e existem funes para obter s o dia, s o ms ou s o
ano.
Ex.: 05/04/98 26/03/98 9
27/02/97 + 4 03/03/97
2.2.6. Tipo Booleano
Representa valores Verdadeiro ou Falso. O resultado das operaes de negao
(no), conjuno (e) e disjuno (ou) dado pelas tabelas verdade.

2.3.

Regras para identificadores


Os nomes de variveis seguem algumas regras:

Nomes devem ser mnemnicos, ou seja, devem ajudar a lembrar o contedo e os


objetivos propostos. Exemplo: Salario, MediaFinal, Seno.
Variveis de uma letra devem ser usadas apenas em um escopo local.
Exemplo: K (contador), X (auxiliar), I (ndice).
Nomes muito parecidos podem confundir. Exemplo Cli e Cii.
As letras I, L e O podem ser confundidas com os ns 0 e 1.
Utilizar prefixos ou sufixos para identificar categorias.
Ex.: frmCliente (formulrio), dbCliente (base de dados).

2.4.

Expresses e Hierarquia de Operadores

Na avaliao de expresses feita pelo computador, valem as mesmas regras


utilizadas na 6 srie, para destruir aquelas expresses que ocupavam uma pgina inteira
do caderno:

A avaliao de expresses segue uma hierarquia (precedncia) de operadores;


Os parnteses so usados para forar a avaliao;
A resoluo feita a partir do nvel de parnteses mais interno para o externo;
Quando existirem operadores de mesma precedncia, a ordem de avaliao ser
da esquerda para a direita;

15

Quando existirem vrias categorias de operadores, a avaliao obedecer esta


ordem: aritmticos, relacionais e, por fim, os lgicos.
Aritmticos
Exponenciao
Negao ou Inverso de Sinal
Multiplicao e Diviso
Diviso Inteira
Resto
Adio e Subtrao
Concatenao de strings

* /
\
Mod
+ & +

Relacionais
Igual
Diferente
Maior
Menor
Maior ou igual
Menor ou igual

=
<>
>
<
>=
<=

Lgicos
No
E
OU
OU Exclusivo

NOT
AND
OR
XOR

Exemplos de expresses matemticas e sua codificao em uma linha:


Expresso matemtica

Codificao

b 4ac
1+N
2

b^24*a*c

X=
2.5.

(1 + N ) / 2
X1 = ( b + Delta ^ 0.5 ) / ( 2 * a )
X2 = ( b Delta ^ (1/2)) / ( 2 * a )

b .
2a

Funes pr-definidas
O conceito de funo, em computao, o mesmo que em matemtica:

y = f( x)
Entrada (parmetro passado para a funo)
Processamento
Sada
Funo

Descrio

Exemplo (retorno da
funo)
int (Expr.Numrica) Parte inteira do nmero
int ( 2.4 ) = 2
Date ( )
Data de hoje
09/02/2000
Time ( )
Hora corrente
13:50:08
Abs (Expr.Numrica) Valor absoluto
abs (-5) = 5
rnd
Nmero aleatrio entre 0 e 1 0.564326
Sin (Expr.Numrica) Seno de um arco, dado em Sin (3.141592654/6) = 0.5
radianos
necessrio respeitar o tipo de parmetro da funo. No caso da funo seno, se
escrevermos sin (30), a resposta ser 0.988, que o seno de 30 radianos, e no de 30
graus.

16

3.

CONSTRUTOR LGICO SEQUENCIAL


Os computadores sabem,
desde pequenos, que depois
de executar uma instruo,
devem executar a prxima.

Um computador executa seqncias de instrues, na ordem em que foram escritas,


exceto se houver alguma instruo de desvio.
As instrues bsicas, que no executam desvios so:
Varivel Expresso

A instruo de atribuio avalia a expresso escrita


do lado direito do smbolo (calcula o valor da
expresso) e atribui (armazena) o resultado na
varivel escrita do lado esquerdo.
Entrada (lista de variveis) Esta instruo faz a leitura de valores de um
dispositivo de entrada (teclado, disco, mouse,...)
para as variveis de memria.
Sada (lista de variveis ou Esta instruo copia valores das variveis de
constantes)
memria, ou outros contedos constantes, para um
dispositivo de sada (tela, disco, impressora,...).

As instrues de entrada e sada sero usadas em alguns poucos casos na descrio


dos algoritmos deste curso, pois o foco a soluo dos problemas, no a interface, ou seja,
os dados de entrada esto disponveis (j foram lidos) para a execuo dos processos e as
variveis de sada (resultados) ficam disponveis para serem mostradas, impressas,
gravadas, etc.

3.1.

Termmetro

Um termmetro mede a temperatura em graus Fahrenheit. Criar um processo para


converter a temperatura para graus Celsius.
Uma soluo
As temperaturas, em graus Celsius ( C ) e em graus Fahrenheit ( F ), so dados do
tipo real. A frmula para converso de Fahrenheit para Celsius : C = _5 ( F 32 )
9
Exemplo: Dada a temperatura de 68 F, o procedimento calcula C = 20.

17

A descrio do algoritmo para resolver esse problema :


TERMMETRO
Real C
// Graus Celsius
Real F
// Graus Fahrenheit
Converte ( )
Objetivo: Converter graus Fahrenheit para Celsius
C 5 / 9 * (F 32)
As variveis do problema so definidas numa seo especial, incluindo os
respectivos tipos (C e F so do tipo Real).
Converte ( ) um algoritmo que faz a converso de Fahrenheit (varivel F) para
Celsius (varivel C).
As variveis passam pelas seguintes mudanas de estado (valor) na memria:
Reserva de espao
na memria
F

Aps a leitura do
contedo de F
F

68

3.2.

Aps o clculo
dos graus Celsius
F

68

20

rea do Crculo
Dado o raio de um crculo, obter sua rea.
Uma soluo

O raio um dado do tipo real, que deve ser > 0. A rea do crculo do tipo real, e
2
obtida pela frmula: rea = * Raio
CIRCULO
Real Raio
// Raio do crculo
Real Area
// rea
Calc_Area ( )
Objetivo: Obter a rea do crculo, dado seu raio
Pr-condio: Raio > 0
Area 3.1416 * Raio ^ 2

18

3.3.

Cronmetro

Um cronmetro mede, em segundos, a quantidade de tempo decorrida entre dois


instantes. Converter o tempo em segundos para horas, minutos e segundos, para facilitar a
leitura.
Exemplos do estado final das variveis Horas, Minutos e Segundos:
Tempo

100
Tempo

3800

Horas

0
Horas

Minutos

Segundos

40

Minutos

Segundos

20

Uma soluo
A quantidade de segundos um valor do tipo inteiro. A resposta do problema a
quantidade de Horas, Minutos e Segundos, tambm valores do tipo inteiro.
Para fazer converses de tempo, consideram-se as seguintes relaes:
1 minuto = 60 segundos; 1 hora = 60 minutos.
Dado um valor em segundos, pode-se calcular a quantidade de minutos existentes,
dividindo a quantidade de segundos por 60. O resto dessa diviso a quantidade de
segundos mesmo (no forma um minuto).
A quantidade de minutos obtida pode ser maior que 60. Para calcular a quantidade
de horas existentes, obtm-se o quociente da diviso dos minutos por 60.

Tempo
(Segundos)

3800

60

20

63

Quociente 1
(Minutos)

60

Resto 1
(Segundos)
Resto 2
(Minutos)

Quociente 2
(Horas)

19

A descrio do algoritmo para resolver esse problema :


CRONMETRO
Inteiro Tempo
// Tempo em segundos
Inteiro H, M, S
// Horas, Minutos e Segundos, aps a converso.
Conv_HMS()
Objetivo: Converter tempo em segundos para Horas, Minutos e Segundos
Pr-condio: Tempo > 0
S Tempo mod 60
M Tempo \ 60
H M \ 60
M M mod 60
Outra soluo
A partir da relao 1 hora = 3600 segundos, temos:
Tempo
(Segundos)
Resto 1
(Segundos)
Resto 2
(Segundos

3800

3600
1

Quociente 1
(Horas)

200
60
20

Quociente 2
(Minutos)

CRONMETRO
Inteiro Tempo
// Tempo em segundos
Inteiro H, M, S
// Horas, Minutos e Segundos, aps a converso
Conv_HMS_2 ( )
Objetivo: Converter tempo, em segundos, para Horas, Minutos e Segundos
Pr-condio: Tempo > 0
H Tempo \ 3600
S Tempo mod 3600
M S \ 60
S S mod 60

20

3.4.

Rateio

Dividir uma quantidade de alunos em 3 classes, de modo que a diferena entre elas
seja mnima (Oliveira, 2005).
Uma soluo
Trata-se de um problema tpico de Administrao Escolar: dividir uma quantidade
de alunos em um determinado nmero de classes, para que todas as classes fiquem com o
mesmo nmero de estudantes. Nem sempre a diviso por 3 resulta exata, e evidentemente a
quantidade de alunos por sala deve ser um nmero inteiro.
Ex: 46 / 3 = 15,33..., ou seja, Classe 1 = 15, Classe 2 = 15 e Classe 3 = 16
A idia inicial obter o quociente da diviso por 3 e atribuir esse valor Classe 1
(quantidade da menor sala, j que a parte fracionria perdida). A Classe 2 pode ter a
mesma quantidade da Classe 1. A Classe 3 obtida pela diferena entre a quantidade de
alunos inicial e os alunos j colocados nas duas primeiras classes.
ALUNOS
Inteiro Alunos, Classe1, Classe2, Classe3
Balanceamento ( )
Objetivo: Dividir uma quantidade de alunos em 3 salas, de forma balanceada
Classe1 Alunos \ 3
Classe2 Classe1
Classe3 Alunos Classe1 Classe2
Vamos verificar se o algoritmo est correto para 63, 64 e 65 alunos:
Classe
1
2
3

Clculo
Quantidade \ 3
= Classe 1
AlunosClasse1
Classe2

Quantidade de alunos
63
64
65
21=63 \ 3
21=64 \ 3
21=65 \ 3
21
21
21
21=632121 22=642121 23=652121

Para a quantidade = 65 a distribuio seria 21, 21 e 23 para as classes 1, 2 e 3. Neste


caso, o resultado 21, 22, 22 seria melhor, pois as classes estariam com uma diviso mais
balanceada. Isso indica que o algoritmo, embora tenha feito uma diviso correta, no
obteve o melhor resultado. Isso ocorre, pois na diviso por 3 podem sobrar 1 ou 2 alunos.
Uma melhoria no balanceamento seria a diviso por 2 dos alunos no alocados na
primeira sala e o clculo da terceira sala por diferena.

21

ALUNOS
Inteiro Alunos, Classe1, Classe2, Classe3
Balanceamento ( )
Objetivo: Dividir uma quantidade de alunos em 3 salas
Classe1 Alunos \ 3
Classe2 (Alunos Classe1) \ 2
Classe3 Alunos Classe1 Classe2
Neste caso, o algoritmo far a distribuio corretamente:
Classe
1
2
3

3.5.

Clculo
Quantidade \ 3
(AlunosClasse1) \ 2
AlunosClasse1
Classe2

Quantidade de alunos
63
64
65
21=63 \ 3
21=64 \ 3
21=65 \ 3
21
21
22
21=632121 22=642121 22=652121

Erro comum (para iniciantes)

Um erro comum para iniciantes achar que uma expresso, uma vez escrita, tornase uma verdade para o restante do programa:
Ex.: B A / 2
AA+1
Se o valor de A for alterado, o valor de B no ser alterado, como ocorre nas
planilhas eletrnicas.

3.6.
a)

Problemas Propostos
rea do tringulo
Dado um tringulo, definido pelos valores dos lados, calcular sua rea.
rea =

s (sa).(sb).(sc)

onde

s =a + b + c
2

Exemplo: Dado um tringulo com lados a = 3, b = 4 e c = 5, a rea seria = 6

22

b)

Distncia entre dois pontos num plano

Dadas as coordenadas de 2 pontos num plano (X1, Y1) , (X2, Y2), calcular a
distncia entre esses pontos.
d =

( X2 X1 )

+ ( Y2 Y1 )

Exemplo: Dados os pontos (3,2) e (6,2), a distncia seria = 3


c)

Juros Compostos

Dados o valor presente (VP), um n de perodos (n) e uma taxa de juros do perodo
(i, em decimais, ou seja, 5% = 0,05), calcular seu valor futuro (VF), a juros compostos.
n
VF = VP (1 + i )
Exemplo: Dado VP = R$ 1.000, 00, capitalizado em 12 meses, a uma taxa de 2% de
juros ao ms, o valor futuro ser = R$ 1.268,24 = (1 + 0.02) ^ 12.
d)

Separar dgitos

Dado um nmero inteiro, positivo, < 1000, obter a quantidade de centenas, dezenas
e unidades desse nmero.
Exemplo:
e)

Dado o n 764, obter Centena = 7, Dezena = 6 e Unidade = 4

Caixa eletrnico

Um caixa eletrnico trabalha com cdulas de 100, 50, 20, 10, 5, 2 e 1. Obter a
quantidade de cdulas de cada tipo, para efetuar um pagamento de uma quantia escolhida
pelo cliente, usando a menor quantidade de cdulas.
Exemplos:

f)

Valor Quantidade Valor das


de notas
notas
283
2
100
1
50
1
20
1
10
0
5
1
2
1
1

Valor Quantidade Valor das


de notas
notas
64
0
100
1
50
0
20
1
10
0
5
2
2
0
1

Dgitos centrais

Dado um nmero inteiro entre 1000 e 9999, mostrar a soma dos dgitos centrais (2
e 3 dgitos).

23

g)

Decimal para binrio


Dado um nmero inteiro, positivo, < 32, mostrar sua representao em binrio.

Um nmero na base binria (Base 2), utiliza os princpios do sistema de numerao


posicional e aditivo, o mesmo que usamos para a base 10, ou seja:
342 = 3 X 100 + 4 X 10 + 2 = 3 X 10 2 + 4 X 10 1 + 2 X 10 0
Para representar as quantidades, escrevemos apenas os coeficientes das potncias da
base, ou seja, 3, 4 e 2. A posio do dgito no nmero determina o seu valor. Assim, 3
dgito 3 vale mais que o 4, pois est na posio (casa) da centena ( 10 2 ) e, portanto, vale
300, enquanto o 4 vale 40, pois est na posio da dezena ( 10 1).
Quando usamos a base 2, cada posio tem o peso de uma potncia da base 2, e os
dgitos, em vez de 0 a 9 da base 10, sero apenas 0 e 1. Assim, para representarmos a
quantidade 27 na base 2, escrevemos:
1 X 2 4 + 1 X 2 3 + 0 X 2 2 + 1 X 2 1 + 1 X 2 0 = 11011
Um mtodo para obter os coeficientes das potncias de 2 dividir sucessivamente
por 2, enquanto o quociente for 2, e utilizar como resposta o ltimo quociente e os restos
das divises por 2, na ordem inversa que foram calculados:
27
1

h)

2
13
1

2
6
0

2
3
1

=11011
2
1

Simulao
Simular e determinar qual o objetivo do seguinte algoritmo.
Variveis
N, N1, N2, N3, N4, N5 (Inteiro)
Procedimento ( )
Objetivo: __________________________________________________________
N1 N \ 16
N2 (N mod 16) \ 8
N3 N mod 8) \ 4
N4 N mod 4) \ 2
N5 N mod 2

24

4. CONSTRUTOR LGICO DE SELEO (DECISO)


Se voc adivinhar
quantas canetas eu
tenho, eu te dou
uma e fico com a
outra!!!
O construtor de seleo usado para testar uma condio e, se esta for verdadeira,
executar um bloco de instrues, ou, se for falsa, executar, opcionalmente, outro bloco.
A condio uma expresso envolvendo constantes, variveis e operadores
aritmticos, relacionais e lgicos e que retorna um valor Verdadeiro (True) ou Falso
(False).

4.1.

Salrio Bruto

Dados o tipo do funcionrio (H = Horista ou M = Mensalista), o salrio por


hora (horistas) ou por ms (mensalistas) e, o nmero de horas trabalhadas (horistas) ou o
valor de faltas (mensalistas), calcular o valor do salrio bruto.
O fluxograma da soluo :

[Tipo = H]

SBruto Salario * HorasTrab

[Seno]

SBruto Salario - Faltas

A seguir, a mesma estrutura escrita em linguagem algortmica:


Se

Tipo = H ento
SBruto Salario * Horas Trab
Seno
SBruto Salario Faltas
Fim-se

25

4.2.

Verificar se par
Dado um nmero inteiro, positivo, verificar se ele par.
Uma soluo

Se o nmero dado for par, atribuir varivel Par, do tipo booleano, o valor
Verdadeiro, seno, atribuir o valor Falso.
Um nmero par divisvel por 2, ou seja, o resto da diviso por 2 igual a zero.
NMERO
Inteiro N
// Nmero inteiro dado
Booleano Par
// Informao se o nmero par
Verifica_Par( )
Objetivo: Verificar se um nmero inteiro positivo par
Se N mod 2 = 0 ento
Par Verdadeiro
Seno
Par Falso
Fim-Se

4.3.

Maior de 2 nmeros
Dados 2 nmeros distintos, obter o maior.
Uma soluo
A pr-condio que os nmeros so distintos.

Compara-se os ns e o maior armazenado em uma varivel que ser a cpia do


maior entre os dois nmeros.
2 NMEROS
Inteiro A, B
// 2 nmeros dados
Inteiro Maior
// Cpia do maior dos dois nmeros
Maior_de_2 ( )
Objetivo: Obter o maior de 2 nmeros
Pr-condio: A e B so distintos
Se A > B ento
Maior A
Seno
Maior B
Fim-Se

26

4.4.

Maior de 3 nmeros
Dados 3 ns distintos, mostrar o maior.
Uma soluo

Sejam A, B e C os 3 ns. As comparaes entre eles so feitas dois a dois.


Primeiramente, acha-se o maior entre A e B. Se A for maior que B, A ser comparado com
C. Se A for maior que C, ento ser o maior dos 3. Seno, C ser o maior, ou seja:
O vencedor da briga entre A e B disputa com C, e quem ganhar a 2 briga, o
maior dos 3.

A rvore de possibilidades que mostra essa estratgia :


Sim
Sim

A>C?
No

A>B?

Sim
No

B>C?
No

O maior A
O maior C
O maior B
O maior C

As instrues esto numeradas para que seja feita, posteriormente, uma simulao
do algoritmo.

1
2
3
4
5
6
7

3 NMEROS
Inteiro A, B, C
// 3 nmeros dados
Inteiro Maior
// Cpia do maior dos 3 nmeros
Maior_de_3 ( )
Objetivo: Achar o maior de 3 nmeros
Pr-condio: A, B e C so distintos
Se A > B ento
Se A > C ento
Maior A
Seno
Maior C
Fim-Se
Seno
Se B > C ento
Maior B
Seno
Maior C
Fim-Se
Fim-Se

27

Simulao
Na simulao, o algoritmo executado para determinados valores (instncias),
sendo verificado se produz a resposta esperada.
Exemplo: supondo-se que os valores de A, B e C sejam 6, 8, 4, o algoritmo
executaria as seguintes instrues, produzindo o seguinte resultado:

Instruo

A
6

Variveis
B
C Maior
8
4

1
5
6

Teste

Resultado
do teste

A > B (6 > 8) ?
B > C (8 > 4) ?

F
V

A varivel Maior ficou com uma cpia do maior dos 3 nmeros.


Usa-se, nesse casso, o encadeamento de perguntas, ou seja, uma pergunta dentro da
outra.
Se for usado o operador nas comparaes e houver repetio do maior, o primeiro
nmero da comparao ser escolhido como maior.
Segunda estratgia
Pode-se tornar as brigas independentes, ou seja, a varivel Maior fica com o
vencedor entre A e B e disputa com C. Se o valor da varivel Maior for menor que o de
C, o contedo da varivel Maior ser substitudo pelo contedo de C.
3 NMEROS
Inteiro A, B, C, Maior
// 3 nmeros dados e cpia do maior
Maior_de_3 ( )
Objetivo: Achar o maior de 3 nmeros
Pr-condio: A, B e C so distintos
Se A B ento
Maior A
Seno
Maior B
Fim-Se
Se Maior < C ento
Maior C
Fim-Se
// Neste caso, no necessrio o SENO.
Essa estratgia melhor, pois, no caso do acrscimo de um nmero, muda-se muito
a estrutura da primeira soluo, enquanto que nesta s acrescentar uma comparao da
varivel Maior com uma quarta varivel (D).

28

Terceira estratgia
Outra estratgia descobrir se A o maior dos trs. Se no for, o maior estar entre
B e C. Para descobrir se A o maior, pode-se utilizar uma pergunta composta, ou seja, para
ser o maior, A deve ser maior que B e maior que C.
As proposies podem ser combinadas por meio de conectivos lgicos. O resultado
dessa combinao pode ser visualizado numa tabela-verdade.
A tabela-verdade para 2 proposies (p e q), com dois valores possveis para cada
uma (V ou F), tem 4 possibilidades. A tabela da negao tem 2 possibilidades.
p

F
V
F
V

F
F
V
V

Conjuno ( E )
p^q
F
F
F
V

Disjuno (OU)
pvq
F
V
V
V

p
V
F

Negao (NO)
~p
F
V

3 NMEROS
Inteiro A, B, C, Maior
// 3 nmeros dados e cpia do maior
Maior_de_3 ( )
Objetivo: Achar o maior de 3 nmeros
Pr-condio: A, B e C so distintos
Se A B e A C ento
Maior A
Seno
Se B C ento
Maior B
Seno
Maior C
Fim-Se
Fim-Se
Um erro comum, ao verificar se o maior A, a seguinte pergunta:
Se

A B e B C ento Maior A

A varivel A pode at ser a maior e o comando Maior A no ser executado (no


caso de B < C), ou seja, para que A seja o maior no necessrio que B C.
Ex.: A = 7; B = 4; C = 5.

29

Outro erro muito comum ocorre quando tornamos os SEs independentes ou em


seqncia, ou seja, no encadeados. O algoritmo a seguir funciona somente se o maior
valor for B ou C.
3 NMEROS
Inteiro A, B, C, Maior
// 3 nmeros dados e cpia do maior
Maior_de_3_Com_Erro ( )
Objetivo: Achar o maior de 3 nmeros
Pr-condio: A, B e C so distintos
Se A B e A C ento
Maior A
Fim-Se
Se B C e B A ento
Maior B
Seno
Maior C
Fim-Se
Convm lembrar que, de acordo com a Lei de Murphy, o programador tende a testar
justamente os casos em que o programa no apresenta erro, e que o erro s ser descoberto
quando puder causar srios prejuzos reputao do programador.
Uma dica interessante, quando temos vrios casos para deciso, verificar quais
casos ocorrem menos, e ento perguntarmos por eles. No exerccio acima, para impedirmos
a entrada de nmeros iguais, temos de identificar os casos em que pode ocorrer igualdade,
ou seja:
A=B
A=B
A=C
B=C

e
e
e
e

A=C
BC
CB
CA

Como temos somente um caso vlido (A B C), melhor perguntar por ele,
deixando os casos de erro para o seno. A funo a seguir efetua essa verificao:
Funo Distintos (Real A, B, C) Booleano
Objetivo: Verificar se 3 nmeros so distintos
Distintos A B And B C And A C
A definio sobre a possibilidade de entrarem nmeros iguais, ou no, depende da
aplicao. Se for para escolher a melhor nota de prova entre trs, no h problema se
entrarem trs notas iguais. Se os trs valores so preos de compra, devemos utilizar outro
critrio de desempate (condies de pagamento, prazo de entrega, qualidade etc.)

30

4.5.

Ordem crescente
Dados 3 nmeros distintos, coloc-los em ordem crescente.
Uma soluo

Uma estratgia comparar os ns , dois a dois, e, se estiverem fora da ordem


desejada, trocar o contedo deles. No basta, porm, comparar A com B, e B com C, pois,
se B e C forem permutados, a ordem entre A e B tambm pode ter sido alterada.
Para permutarmos o valor de duas variveis, necessrio utilizar uma terceira
varivel, que funciona como auxiliar da troca (backup):
A
8 6

B
6

Aux
8

Se A > B ento
Aux B
B
A
A
Aux
Fim-se

3 NMEROS
Real A, B, C
Ordenar3 ( )
Objetivo: Colocar 3 nmeros em ordem crescente
Se A > B ento
Trocar (A, B)
Fim-Se
Se B > C ento
Trocar (B, C)
Fim-Se
Se A > B ento
Trocar (A, B)
Fim-Se
Procedimento Trocar (X, Y)
// X e Y so passados por referncia.
Objetivo: Permutar o contedo de X com Y
Real Aux
Aux X
X Y
Y Aux

31

Segunda estratgia
Supondo que no precisssemos trocar o contedo das variveis, tendo apenas que
mostrar os nmeros em ordem. Se A < B, resta saber a posio de C, que pode estar antes
de A, entre A e B, ou depois de B.
A
C

B
C

CAB
ACB
ABC

C antes de A e B
C entre A e B
C depois de B

Se B < A, resta saber a posio de C, que pode estar antes de B, entre B e A, ou


depois de A.
B
C

A
C

CBA
BCA
BAC

3 NMEROS
Real A, B, C
Ordenar3 ( )
Objetivo: Mostrar 3 nmeros em ordem crescente
Se A < B ento
// A antes de B
Se C < A ento
// C antes de A
Imprimir (C, A, B)
Seno
Se C < B ento
// C entre A e B
Imprimir (A, C, B)
Seno
Imprimir (A, B, C)
// C depois de B
Fim-Se
Fim-Se
Seno
// B antes de A
Se C < B ento
// C antes de B
Imprimir (C, B, A)
Seno
Se C < A ento
// C entre B e A
Imprimir (B, C, A)
Seno
Imprimir (B, A, C)
// C depois de A
Fim-Se
Fim-Se
Fim-Se

C antes de B e A
C entre B e A
C depois de A

32

4.6.

Contar Pares
Dados 3 ns inteiros e positivos, mostrar quantos so pares.
Uma soluo

O objetivo mostrar quantos so pares, e no quais. Uma das solues criar uma
varivel com a funo de contador. Essa varivel seria iniciada com zero e a cada vez que
ocorrer um n par, somado 1 no contador.
No final, o contador poder continuar com 0 (nenhum par), ou ter valor 1, 2 ou 3.
3 NMEROS
Inteiro A, B, C
// 3 nmeros
Inteiro QP
// Quantidade de pares
Conta_Pares ( )
Objetivo : Dados 3 ns inteiros, mostrar quantos so pares
QP 0
Se A mod 2 = 0 ento QP QP + 1
Se B mod 2 = 0 ento QP QP + 1
Se C mod 2 = 0 ento QP QP + 1
Estratgia 2 (Funo caracterstica)
Outra estratgia utilizar a funo caracterstica (seqncia de bits), representando
respectivamente casos de sim ou no. Como so 3 casos, usamos 3 variveis, com valor
inicial zero, e mudando-se para 1 se o valor correspondente for par. No final, soma-se as 3
variveis e o resultado a quantidade de pares.
3 NMEROS
Inteiro A, B, C, QP
// 3 nmeros e Quantidade de pares
Conta_Pares ( )
Objetivo : Dados 3 ns inteiros, mostrar quantos so pares
Inteiro Bit1, Bit2, Bit3
Bit1 0
Bit2 0
Bit3 0
Se A mod 2 = 0 ento Bit1 1
Se B mod 2 = 0 ento Bit2 1
Se C mod 2 = 0 ento Bit3 1
QP Bit1 + Bit2 + Bit3

33

4.7.

Quadrante

Dadas as coordenadas de um ponto no plano cartesiano (X e Y), localizar onde est


o ponto: quadrante, eixo ou origem.
Uma soluo
Parte-se do conhecimento sobre coordenadas cartesianas, como a ordem dos
quadrantes (anti-horria, a partir do quadrante superior direito), os eixos (abscissas e
ordenadas) etc.

ordenadas ( Y )

II

I
origem

III

abscissas
(X)

IV

Desconsiderando-se, inicialmente, os pontos localizados nos eixos ou na origem,


pode-se fazer perguntas especficas para determinar o quadrante (3 perguntas e 1 seno )
Se X > 0 e Y > 0
Se X < 0 e Y > 0
Se X < 0 e Y < 0
Seno

1 quadrante
2 quadrante
3 quadrante
4 quadrante

Porm, observa-se que se X > 0, o ponto s poder estar no 1 ou 4 quadrante. Isso


evita perguntas desnecessrias.
Sim 1 Quadrante
Sim

Se Y > 0
No 4 Quadrante

Se X > 0
Sim 2 Quadrante
No

Se Y > 0
No 3 Quadrante

Para determinar se um ponto est em um eixo ou quadrante, perguntamos:


Se X 0 e Y 0

34

PONTO NO PLANO
Real X, Y
// Abscissa e ordenada do ponto
String Loc
// Localizao do ponto
Localizar_Ponto ( )
Objetivo : Localizar ponto no plano cartesiano
Se X 0 e Y 0 ento
// Quadrante
Se X > 0 ento
// 1 ou 4 quadrantes
Se Y > 0 ento
Loc "1 Quadrante"
Seno
Loc "4 Quadrante"
Fim-se
Seno
// 2 ou 3 quadrantes
Se Y > 0 ento
Loc "2 Quadrante"
Seno
Loc "3 Quadrante"
Fim-se
Fim-se
Seno
// Eixo ou origem
Loc Eixo ou origem
Fim-Se
Pode-se inverter as aes do ento e do seno, negando a condio:
No ( X 0 e Y 0 )
Usando De Morgan, temos: X = 0 ou Y = 0
Estratgia 2
Pode-se, tambm, usar outra estratgia para determinao do quadrante,
perguntando por X * Y. Se X * Y for > 0, X e Y tm o mesmo sinal, que ocorre para pontos
do 1 ou 3 quadrantes. Se X * Y for < 0, ento os sinais so invertidos, que ocorre para
pontos do 2 ou 4 quadrantes. Se o ponto estiver no 1o ou 3o quadrante (sinais iguais), se X
for positivo, o ponto estar no 1o quadrante, seno, estar no 3o.
Nessa soluo ser refinada, tambm, a localizao do ponto quando este no
estiver em um dos quadrantes, ou seja, estive em um dos eixos ou na origem.

35

PONTO NO PLANO
Real X, Y
// Abscissa e ordenada do ponto
String Loc
// Localizao do ponto
Localizar_Ponto ( )
Objetivo: Localizar ponto no plano cartesiano
Se X = 0 ou Y = 0 ento
// Eixo
Se X = 0 ento
Se Y = 0 ento
Loc Origem
Seno
Loc Ordenada
Fim-se
Seno
Loc Abscissa
Fim-se
Seno
// Quadrante
Se X * Y > 0 ento
Se X > 0 ento
Loc "1 Quadrante"
Seno
Loc 3 Quadrante"
Fim-se
Seno
Se X > 0 ento
Loc "4 Quadrante"
Seno
Loc "2 Quadrante"
Fim-se
Fim-se
Fim-se

4.8.

Alunos

Obter a mdia final (MF) e a situao do aluno, dadas as notas P1 e P2 (Provas), A1


e A2 (Atividades), de acordo com os seguintes clculos e critrios:
0 Qualquer nota ou mdia 10, em fraes de 0.5 ponto
M1 = P1 X 3 + A1 X 2
M2 = P2 X 3 + A2 X 2
5
5
M1 e M2 so calculadas com arredondamento para 1 casa decimal, pelo critrio
universal, ou seja, a partir da metade, inclusive, arredonda-se para cima. Seno, arredondase para baixo.

36

MF = M1 + M2
arredondada para o mais prximo inteiro ou 0.5.
2
Exemplo: 6.2 6.0
6.25 6.5
6.7 6.5
6.75 7.0
A situao do aluno obtida em funo da mdia final (MF):
Mdia Final (MF)
Abaixo de 3.0
De 3.0 at abaixo de 7.0
De 7.0 em diante

Situao
Reprovado
Exame
Aprovado

Uma soluo
O algoritmo ter as seguintes macro-instrues, que sero depois refinadas:
-

Verificar se as notas so vlidas


Calcular e arredondar a mdia final
Obter a situao do aluno

Para verificar se as notas so vlidas, testamos cada uma delas, no momento


(evento) da entrada dos dados.
Se Nota 0 e Nota 10.0

e (Nota * 10) mod 5 = 0 ento vlida

Exemplo: A nota 6,7 ser invlida, pois (6,7 X 10 ) mod 5 = 2, que 0


De acordo com De Morgan: ~ ( P ^ Q ^ R ) ~P v ~Q v ~R .
Assim, podemos perguntar se a nota vlida, ou usar a forma complementar (nota
no vlida)
Se Nota < 0 ou Nota > 10.0

ou (Nota * 10) mod 5 0 ento no valida

A funo NotaOK verifica se a nota valida:


Funo NotaOK (Real Nota) Booleano
Objetivo: Verificar se uma determinada nota vlida
Se Nota 0 e P1 10.0 e (P1 * 10) mod 5 = 0 ento
NotaOK Verdadeiro
Seno
NotaOK Falso
Fim-se
Para arredondar MF examina-se a parte fracionria de MF, que pode ser calculada
como: MF Int (MF). Se MF < 0.25, arredonda-se para baixo; se MF 0.25 e MF < 0.75,
arredonda-se para 0.5; seno, arredonda-se para cima.

37

Dada a Mdia Final (MF), temos:


S

Aprovado

MF 7.0 ?
N

Exame

Reprovado

MF 3.0 ?

Quando se lida com faixas, melhor comear a perguntar pelos extremos (primeira
ou ltima faixa). Se a primeira pergunta for da faixa central ela seria mais complexa:
Se MF 3 e MF < 7 ento
Situao Exame
// Desse jeito, as perguntas no so compostas
ALUNO
Real P1, P2, A1, A2
// Notas de prova e atividade
Real MF
// Mdia final
String Situao
// Situao do aluno
CalcularSituao ( )
Objetivo: Determinar a mdia fina e a situao do aluno, dadas suas notas
Real Frac
// Parte fracionria da nota
M1 (P1 * 3 + A1 * 2) / 5
// Calcular mdias
M2 (P2 * 3 + A2 * 2) / 5
M1 Int ( (M1 + 0,05 ) * 10 ) / 10
// Arredondar mdias
M2 Int ( (M2 + 0,05 ) * 10 ) / 10
MF (M1 + M2 ) / 2
// Calcular mdia final
Frac MF int ( MF )
// Arredondar mdia final
Se Frac < 0.25 ento
MF int (MF)
Seno
Se Frac < 0.75 ento
MF int(MF) + 0.5
Seno
MF int (MF) + 1
Fim-se
Fim-se
Se MF 7 ento
// Obter situao do aluno
Situao Aprovado
Seno
Se MF 3.0 ento
Situao Exame
Seno
Situao Reprovado
Fim-se
Fim-se

38

4.9.

Melhores notas

Dadas 4 notas de provas de um aluno, obter a mdia das 2 maiores notas. Se houver
notas repetidas, considerar a primeira da seqncia.
Uma soluo
Uma estratgia iniciar as variveis Maior1 e Maior2 com os valores das duas
primeiras notas, a maior delas em Maior1 e a outra em Maior2.
Ento, coloca-se a 3 nota para brigar com os valores de Maior1 e Maior2. Se a 3
nota for > Maior1, desloca-se o contedo de Maior1 para Maior2 e substitu-se Maior1 pela
3 nota. Seno, ainda tem-se de comparar a 3 nota com Maior2. Se a 3a nota for > Maior2,
substitu-se Maior2 por ela. Seno, deixa-se como est, ou seja, a 3 nota perdeu as 2
brigas. Repete-se o mesmo processo para a 4 nota.
ALUNO
Real N1, N2, N3, N4, Mdia
// Notas de prova e mdia das duas maiores
MdiaMaiores ( )
Objetivo: Dadas 4 notas, calcular a mdia das 2 melhores notas
Real Maior1, Maior2
Se N1 > N2 ento
// Colocar N1 e N2 em Maior1 e Maior2,
Maior1 N1
// em ordem decrescente.
Maior2 N2
Seno
Maior1 N2
Maior2 N1
Fim-se
Se N3 > Maior1 ento
// Comparao da 3a nota ( N3)
Maior2 Maior1
// com Maior1 e Maior2
Maior1 N3
Seno
Se N3 > Maior2 ento
Maior2 N3
Fim-se
Fim-se
Se N4 > Maior1 ento
// Comparao da 4a nota ( N4 )
Maior2 Maior1
// com Maior1 e Maior2
Maior1 N4
Seno
Se N4 > Maior2 ento
Maior2 N4
Fim-se
Fim-se
Mdia (Maior1 + Maior2) / 2
// Mdia das maiores notas
Nessa estratgia, o cdigo aumenta 5 instrues para cada nota acrescentada.

39

Estratgia 2
Outra estratgia achar o maior das 6 somas de pares possveis de notas:
N1 + N2
N1 + N3
N1 + N4
N2 + N3
N2 + N4
N3 + N4.
Pode-se usar uma varivel para guardar a maior soma. Esta varivel iniciada com
o valor da soma do primeiro par (N1 + N2)
ALUNO
Real N1, N2, N3, N4
// Notas de prova
Real Mdia
// Mdia
MdiaMaiores ( )
Objetivo: Dadas 4 notas, calcular a mdia das 2 melhores notas
Real Maior
Maior N1 + N2
Se N1 + N3 > Maior ento Maior N1 + N3
Se N1 + N4 > Maior ento Maior N1 + N4
Se N2 + N3 > Maior ento Maior N2 + N3
Se N2 + N4 > Maior ento Maior N2 + N4
Se N3 + N4 > Maior ento Maior N3 + N4
Mdia Maior / 2
Neste caso, quando se acrescenta uma nota, a quantidade de pares sobe para 10. Se
forem mais duas notas, sobe para 15, mais 3, para 21, ...
Algumas perguntas podem induzir a erros, como por exemplo:
Se (N1 + N2) > (N3 + N4) ento Maior (N1 + N2) / 2
No exemplo anterior, pode ocorrer o seguinte:

N1 N2
N3 N4 ,
(9+3) >(7+ 4)

sendo obtido (N1 + N2) / 2, quando o correto seria (N1 + N3 ) / 2

40

4.10. Maior quantidade de produtos 2


Uma loja do tipo preo nico s possui produtos de 3 e 5 reais. O menor valor de
venda de 8 reais. Dado que sempre possvel compor qualquer quantia 8, apenas com
produtos de 3 e 5 reais, mostrar como pode ser feita uma compra, de modo que seja
adquirido a maior quantidade de produtos, e no sobre troco.
Uma soluo
Como a quantidade de produtos adquiridos deve ser a maior possvel, deve-se gastar
a quantia com a maior quantidade de produtos de 3 reais. Quando no for possvel, utilizase produtos de 5.
Se a quantia for dividida por 3, verifica-se que o resto pode ser 0 (mltiplos de 3), 1
ou 2. Se o resto for = 0, compra-se apenas produtos de 3 reais (Quantia / 3).
Se o resto for = 1, substitu-se 3 produtos de 3 reais, mais 1 real do resto, por 2
produtos de 5, ou seja, a quantia ser gasta com 2 produtos de 5 e o restante (Quantia 10),
com produtos de 3.
Se o resto for = 2, substitu-se 1 produto de 3 reais, mais 2 reais do resto, por 1
produto de 5, ou seja, a quantia ser gasta com 1 produtos de 5 e o restante (Quantia 5),
com produtos de 3.
A tabela a seguir, mostra as quantidades de produtos, em funo do resto:
Resto
=0
=1
=2

Produtos de 3
Quantia / 3
(Quantia 10) / 3
(Quantia 5 ) / 3

Produtos de 5
0
2
1

Usa-se neste algoritmo a estrutura de seleo mltipla:


LOJA DE 3 E 5
Inteiro Quantia
// Quantia disponvel para compra
Inteiro P3, P5
// Quantidade de produtos de 3 e de 5
Calcular3_5 ( )
Objetivo : Calcular maior quantidade de produtos
Caso Quantia mod 3
// Resto de Quantia por 3
0
: P3 Quantia \ 3
// Se resto for = 0
P5 0
1
: P3 (Quantia 10 ) \ 3
// Se resto for = 1
P5 2
2
: P3 (Quantia 5 ) \ 3
// Se resto for = 2
P5 1
Fim-caso
2

Baseado no problema dos selos, apresentado em Salvetti & Barbosa (1998, p. 57)

41

4.11. Erros Comuns (para iniciantes)


Em algumas expresses lgicas no ocorre erro de sintaxe, nem de execuo, mas o
resultado diferente do esperado pelo programador.

A expresso A < B < C pode ser avaliada como verdadeira, independente


dos valores de A, B ou C. Exemplo: Supondo C = 1, tem-se:

A < B < C

Verdadeiro avaliado como 1, e 1 < C Expresso Verdadeira


Falso avaliado como 0, e 0 < C Expresso Verdadeira

Troca de E por OU para selecionar valores numa faixa.


Exemplo: Selecionar salrios entre 1000 e 2000
A expresso Salrio > 1000 OU Salrio < 2000 ser sempre verdadeira,
pois qualquer salrio > 1000 ou < 2000.
Salrios > 1000
Salrios < 2000

1000

2000

A expresso correta seria: Salrio > 1000 E Salrio < 2000

Uso incorreto do OU
Exemplo: A expresso A = 5 OU 6, ser sempre verdadeira.
A = 5

OU 6
V
OU

F
OU

11111111 ( Verdadeiro = 1 em binrio)


00000110 ( 6 em binrio)
11111111 ( 1 = Verdadeiro )
00000000 ( Falso = 0 em binrio)
00000110 ( 6 )
00000110 ( Em expresses lgicas, qualquer
resultado 0 resulta Verdadeiro )

O operador = (relacional) no distributivo em relao ao OU (lgico).


A expresso correta seria: A = 5 OU A = 6

42

4.12. Exerccios propostos


a)

Equao do 2 grau
Dados a, b e c, a 0, calcular as razes de ax2 + bx + c (equao do 2o grau).
Exemplo: Dados 1 -2 e 1
Dados 1 -3 e 2
Dados 1 1 e 2

b)

obter
obter
obter

X=1
X1 = 1 e X2 = 2
No existem razes reais

Tringulo (lados)
Dados 3 ns positivos, possveis lados de um tringulo, mostrar o tipo de tringulo.
Exemplo: Dados 3, 4 e 5
Obter Escaleno, pois os 3 lados so diferentes um do outro.

Observao 1: No caso acima, no deve ser informado que o tringulo retngulo,


pois no foi pedida a classificao pelos ngulos.
Observao 2: Nem todo conjunto de 3 ns, representando lados, formam tringulos,
como no caso de 3, 4 e 8.
3

4
8

c)

Poltica de descontos

Uma loja utiliza a seguinte poltica de descontos sobre o valor calculado da venda
(quantidade vendida * preo unitrio):
Valor calculado da venda
At
$ 200,00
Acima de $ 200,00 at $ 1000,00
Acima de $ 1000,00

% de desconto
Sem desconto
5%
10%

Dados a quantidade vendida e o preo unitrio de um produto, calcular o valor a


pagar, que considera a poltica de descontos.
Exemplo: Dado o preo unitrio = $2,00 e a quantidade = 600, obter $1.080,00.
Dado o preo unitrio = $2,00 e a quantidade = 400, obter $760,00.

43

d)

Substitutiva

Em determinada escola, a prova substitutiva (PS) substitui a menor nota entre a P1 e


a P2, se for maior que uma delas. Dadas as notas P1, P2 e PS, determinar o valor final da
P1 e da P2, aps a verificao da substituio de uma delas pela PS.
Exemplo: Dados P1 = 6, P2 = 4 e PS = 7,
Obter P1 = 6, P2 = 7
e)

Tringulo (ngulos)

Dados 3 ns positivos, possveis ngulos de um tringulo, mostrar o tipo de


tringulo.
Exemplo: Dados 30, 60 e 90
Obter Retngulo
f)

Febre

Dada a temperatura de uma pessoa, mostrar sua situao, de acordo com as


seguintes faixas de temperatura:
Temperatura
Abaixo de 36,5
De
36,5 at 37
Acima de 37
at 38
Acima de 38
g)

Situao
Hipotermia
Normal
Estado febril
Febre

IMC (ndice de Massa Corporal)

Dados a massa (Kg) e a altura (m) de uma pessoa, calcular seu IMC e mostrar sua
situao, de acordo com a seguinte tabela:
IMC = Massa
2
Altura

IMC
Abaixo de 20
De
20
Acima de 25
Acima de 30
Acima de 40

at
at
at

25
30
40

Situao
Desnutrio
Normal
Excesso de peso
Obesidade leve
Obesidade grave

44

h)

Nmero de 3 algarismos
Dado um n inteiro e positivo de 3 algarismos, obter:
quantos algarismos tm valor 5;
qual o menor algarismo;
se a soma dos valores dos algarismos par.

i)

Multas

Dadas a velocidade de um veculo e a velocidade mxima permitida para um local,


obter a multa e os pontos perdidos na carteira de motorista, de acordo com a seguinte
tabela:
Velocidade do veculo
At 10% acima da velocidade permitida
Acima de 10% at 20% da velocidade permitida
Acima de 20% da velocidade permitida

Multa (R$)
0
120
520

Pontos
0
4
7

Exemplo: Se um veculo trafegasse a 80 Km/h numa via com velocidade mxima


permitida de 60 Km/h, e fosse pego pelo radar, a multa seria de R$ 520,00 e receberia 7
pontos na carteira, pois 80 Km/h est 33% acima da velocidade permitida. Se o veculo
fosse pego a 70 Km/h, a multa seria de R$ 120 e receberia 4 pontos, pois 70 Km/h est
entre 10% e 20% da velocidade permitida.
j)

Objetivo
Descrever o objetivo do seguinte algoritmo:
PARA QUE SERVE?
Variveis
N1, N2, N3, N4, X (Real)
Algoritmo ( )
Objetivo: _________________________________________________________
X N1 + N2
Se N1 + N3 > X ento X N1 + N3
Se N1 + N4 > X ento X N1 + N4
Se N2 + N3 > X ento X N2 + N3
Se N2 + N4 > X ento X N2 + N4
Se N3 + N4 > X ento X N3 + N4
XX/2

45

k)

Senha

Dados os 4 algarismos de uma senha, verificar se vlida, ou seja, se no existem


algarismos repetidos e se os algarismos no so consecutivos, sejam em ordem crescente ou
decrescente.
Exemplos:
1123
1635
5935
l)

Invlida, pois contm algarismos consecutivos (123) e repetio (1)


Vlida
Invlida, pois o algarismo 5 se repete

Dgito de controle

Dados o cdigo da faculdade e nmero de matrcula de um aluno, calcular o dgito


verificador, de acordo com o seguinte critrio:
Multiplicar cada dgito, da esquerda para direita por 1 2 1 2 1 2 e acumular os
produtos.
Se um dos produto for 10, somar os dgitos do produto.
O dgito verificador ser = 10 ltimo dgito do acumulado.
Se o ltimo dgito for = 0, o dgito verificador ser = 0.
Ex.: Cdigo: 2 16108

Cdigo da
faculdade

2
X
1
=
2 +

Nmero de
matrcula

1
X
2
=
2 +

6
X
1
=
6 +

1
X
2
=
2 +

0
X
1
=
0 +

8
X
2
=
1+6 = 19

ltimo dgito
do acumulado

O dgito seria = 10 9 = 1, e o cdigo completo, usado para digitao, seria


2 16108 1
No caso do digitador errar um nmero, o acumulado seria outro e o dgito tambm.
Uma coincidncia seria a troca de 2 nmeros com peso 1, ou cruzamento (2 X 1, 1
X 2) que resultaria num mesmo acumulado, e portanto num mesmo dgito de controle.
Exemplo: Na digitao do nmero anterior, o usurio troca o 1 com o 8, ou seja,
digita 2 16801 1
Ex.: Cdigo: 2 16801
2
1
6
8
0 8
X
X
X
X
X X
1
2
1
2
1 2
=
=
=
=
= =
2 + 2 + 6 + 1+6 + 0 2
= 19
A soma a mesma. Portanto, temos o mesmo dgito, e o erro no seria percebido.

46

m)

Folha de pagamento

Tendo-se o salrio bruto (j descontadas as faltas), o nmero de dependentes e o n


de filhos menores de 14 anos, de um dado funcionrio, calcular o salrio lquido a receber,
de acordo com as seguintes regras:
Salrio Lquido
INSS

Salrio Bruto INSS Imposto de Renda + Salrio Famlia


Aplicar alquota (%) de INSS sobre o Salrio Bruto.
O teto para pagamento de INSS de R$ 176,00.
Salrio Base de IR Salrio Bruto INSS R$ 100,00 por dependente.
IR
Aplicar a alquota (%) de imposto (coluna 2 da tabela 1)
sobre o Salrio Base de IR. Do valor calculado, tirar o valor a
Deduzir (coluna 3 da tabela 1).
Salrio Famlia
R$ 12,00 por filho menor de 14 anos, para salrios at R$
500,00.
Tabela 1 Tabela progressiva de IR
Salrio Base de IR (R$)
At 1.000,00
Acima de 1.000,00 at 2.000,00
Acima de 2.000,00

Alquota (%)
Isento
15
27,5

Deduzir (R$)
150,00
400,00

Tabela 2 Alquotas para INSS


Salrio Bruto (R$)
At 500,00
Acima de 500,00 at 600,00
Acima de 600,00 at 800,00
Acima de 800,00 at 1600,00

Alquota (%)
7,65
8,65
9
11

Exemplo: Calcular o salrio lquido de um funcionrio com salrio bruto de R$


1.500,00 e 2 dependentes para IR, sendo um filho menor de 14 anos.
INSS = 176,00 (teto)
Salrio Base de IR = 1500,00 176,00 200,00 = 1.124,00
IR = (15 % de 1.124,00) 150,00 = 18,60
Salrio Lquido = 1.500,00 176,00 18,60 = 1.305,40
n)

Rodzio

Dado o final da placa de um automvel, obter qual o dia da semana que este veculo
est sujeito ao rodzio. Para o final de placa 1 e 2, o veculo no roda s segundas, para o
final 3 e 4, s teras, e assim por diante.
Exemplo: Dado o final 7, a sada ser Quinta

47

o)

Desconto

Um Hotel adotou a seguinte poltica de descontos na reserva de pacotes para o


Reveillon:
- Estudante
R$ 50,00 de desconto
- Trabalhador da Indstria
R$ 30,00 de desconto
- Scio do Clube de Viagem R$ 80,00 de desconto
- Aposentado
R$ 100,00 de desconto
Os descontos para Estudante, Industririo e Scio no so cumulativos, e o hspede
que se enquadrar em mais de uma categoria recebe o maior deles. J o desconto para
Aposentado cumulativo sobre os demais.
O hspede informa sua situao em cada categoria: Estudante (S ou N);
Trabalhador da Indstria (S ou N); Scio do Clube de Viagem (S ou N);
Aposentado (S ou N).
Dadas as categorias de um hspede, calcular o desconto a que ter direito.
(Oliveira, 2005).
p)

Escola de samba

Na apurao das notas de um desfile de escolas de samba utiliza-se um sistema em


que so desprezadas a nota mais baixa e a mais alta, para evitar perseguies ou
favorecimentos.
Dadas as 4 notas de um quesito qualquer (bateria, evoluo, ...), obter a soma das
notas que no foram desprezadas. Se houver notas iguais, considerar a primeira ocorrncia
da nota.
Exemplo: Dadas as notas 8, 6, 7, 10 num determinado quesito, obter 15.
Verifique, tambm, se a sua estratgia boa para 5 notas ou mais.
q)

Sobreposio

Dados dois intervalos, representados por 4 nmeros, [ a, b ] e [ c, d ], verificar se


existe sobreposio (pontos em comum) entre os intervalos. As extremidades dos intervalos
podem no estar em ordem crescente. O intervalo [ a, b ] pode no estar antes de [ c, d ].
Exemplo: Dados os intervalos [ 3, 7 ] e [ 4, 8 ] a resposta Sim
r)

Paralelas

Dadas as coordenadas de dois pontos distintos (X1, Y1) e (X2, Y2), verificar que
tipo de reta passa por esses pontos: eixo, paralela a um eixo, no paralela a um eixo.
Exemplo: Dadas as coordenadas (3,2) e (6,2), a reta paralela ao eixo das abscissas.
Dadas as coordenadas (3,1) e (6,4), a reta no paralela a nenhum eixo.

48

5.

CONSTRUTOR LGICO DE REPETIO


Ih !!! Meu programa entrou em loop.

timo! A maioria dos programas


entra em loop.
Os que funcionam tambm saem.

usado para repetir um bloco de instrues, sendo a quantidade de repeties


controlada por uma varivel ou por uma condio, verificada antes ou aps o bloco de
instrues.

5.1.

N primeiros pares
Imprimir os N primeiros nmeros pares positivos.
Uma soluo

Podemos iniciar a varivel Par com o valor do primeiro par (2). Para calcular o
prximo par pode-se somar 2 na varivel Par, e repetir o processo para a quantidade de
pares a serem impressos.
Para contar as repeties (voltas do loop), podemos usar uma varivel (K, por
exemplo) que inicia com 1 e aumenta 1 a cada volta, como em uma catraca, usada para
contar pessoas que passam por ela. O controle das repeties feito comparando, a cada
volta, o valor de K com o limite (N). O loop termina quando K fica maior que N.
Par 2
K1
Teste: K N (Verdadeiro)
Imprime (Par)
1 par
Par Par + 2
prximo par
KK+1
Teste: K N (Verdadeiro)
Imprime (Par)
2 par
Par Par + 2
prximo par
KK+1
Teste: K N (Verdadeiro)
Imprime (Par)
3 par
Par Par + 2
prximo par
KK+1
Teste: K N (Falso. O loop termina)

Simulao para N = 3
N
3
K
1

Par
2

49

O seguinte fluxograma representa a soluo do problema. A varivel K


responsvel pelo controle de repetio, pois ela que iniciada com 1, testada contra o
limite de repeties (N) e incrementada com o passo (1) a cada volta, ou iterao. 3
Incio

Par 2
Atribui valor
inicial
varivel de
controle (K)

K1

KN
S

Imprime (Par)
Par Par + 2
KK + 1

N
Testa
Limite
(N)

Incrementa o
passo ( + 1 ), e
volta a testar
limite

Fim
PARES
Inteiro N
// Quantidade de pares a serem impressos
Inteiro Par
// Nmeros pares
ImprimePares ( )
Objetivo: Imprimir os N primeiros pares positivos
Inteiro K
// Varivel de controle de repetio
Par
2
K
1
Enquanto K N faa
Sada (Par)
// Imprime um par
Par Par + 2
//Calcula o prximo par
KK+1
// Conta + 1 volta
Fim-Enquanto
3

Os problemas envolvendo iteraes podem ser resolvidos em duas etapas: 1) Identificar o que
deve ser repetido; 2) Quantas vezes ser repetido e como controlar a quantidade de repeties.

50

O controle de repetio pode ser efetuado por uma instruo especial para o caso de
se saber de antemo quantas voltas sero executadas (controle feito por varivel).
PARES
Inteiro N
// Quantidade de pares a serem impressos
Inteiro Par
// Nmeros pares
ImprimePares ( )
Objetivo: Imprimir os N primeiros pares positivos
Inteiro K
// Varivel de controle de repetio
Par
2
Para K de 1 at N [passo 1] repita
Sada (Par)
// Imprime um par
Par Par + 2
//Calcula o prximo par
Fim-Para
Nesse caso, o comando faz automaticamente a inicializao da varivel de controle
(K ), acumula o passo (=1, por default), e volta para fazer o teste.
Algumas linguagens utilizam uma forma de instruo de controle por varivel que
faz a atribuio do valor inicial, o teste de final de loop e o avano da varivel de controle
(passo), de forma explcita:
PARES
Inteiro N
// Quantidade de pares a serem impressos
Inteiro Par
// Nmeros pares
ImprimePares ( )
Objetivo: Imprimir os N primeiros pares positivos
Inteiro K
// Varivel de controle de repetio
Par
2
Para (K 1; K N; K K + 1) repita
Sada (Par)
// Imprime um par
Par Par + 2
//Calcula o prximo par
Fim-Para
Simulao
Antes de fazer a simulao, devemos numerar as instrues do algoritmo.
Instruo Algoritmo
ImprimePares ( )
Inteiro K
2
1 Par
2 Para K de 1 at N [passo 1] repita
Sada (Par)
3
Par Par + 2
4
Fim-Para

51

Supondo que o usurio solicitou a impresso dos 3 primeiros pares, o algoritmo ir


funcionar da seguinte forma:

Instruo
1
2
3
4
2
3
4
2
3
4
2

N
3
3
3
3
3
3
3
3
3
3
3
3

Variveis
Par
K
2
2
2
4
4
4
6
6
6
8
8

1
1
1
2
2
2
3
3
3
4

Teste
KN

Sada

V (1 3)
2
V (2 3)
4
V (3 3)
6
F (4 > 3)

Na simulao rpida de algoritmos que contm loops, interessante separar, em


linhas diferentes, as mudanas dentro do loop (uma linha para cada volta):

N
3

5.2.

Variveis
Par
K
2
4
1
6
2
8
3
4

Sada
2
4
6

Impares
Dado um nmero N, inteiro e positivo, obter a soma dos N primeiros mpares.
Uma soluo

O resultado do algoritmo estar na varivel Soma, que comea com 0. Utilizamos a


varivel Impar, com valor inicial = 1, para calcular a seqncia de N mpares que sero
acumulados em Soma.

52

(N vezes)

Soma
0 1 4

Impar
9 16 ...

1 3

7 ...

N impares, N somas

O algoritmo tem as seguintes macro-instrues, que sero depois refinadas:


Iniciar

Zerar Soma
Determinar 1 Termo (= 1)

Repetir
(N vezes)

Acumular Termo em Soma


Calcular prximo Termo ( + 2)

Finalizar

Imprimir Soma

IMPARES
Inteiro N
// Quantidade de mpares que sero acumulados
Inteiro Soma
// Acumulado dos N primeiros mpares
SomaImpares ( )
Objetivo: Imprimir a soma dos N primeiros mpares
Inteiro K
Soma 0
Impar 1
Para K de 1 at N repita
Soma Soma + Impar
// Acumula impar
Impar Impar + 2
// Calcula prximo impar
Fim-Para
O modo como est sendo gerada a seqncia dos nmeros mpares chamado de
relao de recorrncia, em que o clculo do prximo termo feito a partir de um ou mais
termos anteriores.
No caso dos nmeros mpares, cada novo nmero impar obtido somando-se 2 ao
impar anterior, sendo o primeiro impar = 1.
Impar1 = 1
Impar2 = Impar1 + 2 = 1 + 2 = 3
Impar3 = Impar2 + 2 = 3 + 2 = 5
A relao de recorrncia

Impar k+1 = Impar k + 2 , k = 1,2,3, ... Impar 1 = 1

Na linguagem algortmica, a relao de recorrncia implementada pelo comando


de atribuio, que contm dois momentos de uma mesma varivel, o valor futuro e o valor
atual: Impar Impar + 2 (L-se: Impar ser igual ao valor atual de Impar, mais 2.)

53

Termo geral
Termo geral uma frmula usada para calcular qualquer elemento de uma
seqncia em funo de sua posio (ndice) na seqncia.
O termo geral dos nmeros mpares = 2 * K 1, para K = 1, 2, 3, ...
Neste exerccio, trata-se de obter a somatria dos nmeros com formato 2*K 1,
para K pertencente a N*
N

2 . K 1 = 1 + 3 + 5 + 7 + ... + 2N 1
K=1

O operador

traz em si o conceito de iterao.

L-se: somatria de termos no formato 2*K 1, para K variando de 1 at N, de 1


em 1. Para N = 6, por exemplo, temos:
6

2 . K 1 = 1 + 3 + 5 + 7 + 9 + 11 = 36
K=1

Quando o termo geral usado no necessrio definir um valor inicial para o termo
da seqncia, pois necessita-se apenas da posio do termo na seqncia. A posio do
termo dada pela varivel de controle da somatria (K).
Uma maneira de descobrir o termo geral listar os valores dos termos e as posies
que eles ocupam, procurando uma relao entre esses dois conjuntos:
Termo
Posio (K)

1
1

3
2

5
3

7
4

9
5

...
...

A relao entre a posio (K) e o Termo (Impar) : Impar K = 2 * K 1


No termo geral, cada termo funo da posio (K), ou seja, Termo K = (K)
Na relao de recorrncia, o primeiro termo definido e cada termo a seguir
funo do anterior, ou seja: Termo K = (Termo K 1)

54

IMPARES
Inteiro N
// Quantidade de mpares que sero acumulados
Inteiro Soma
// Acumulado dos N primeiros mpares
SomaImpares ( )
Objetivo: Imprimir a soma dos N primeiros mpares
Inteiro K
Soma 0
Para K de 1 at N repita
Impar 2 * K 1
// Calcula impar
Soma Soma + Impar
// Acumula impar
Fim-Para

5.3.

P.A.
Imprimir os N primeiros termos de uma P.A. definida por a1 = 2 e razo = 3.
Uma soluo
Pode-se gerar os termos da P.A. pela relao de recorrncia e pelo termo geral.
Recorrncia
a1 = 2
a2 = a1 + 3 = 5
a3 = a2 + 3 = 8
a4 = a3 + 3 = 11
...
an = an 1 + r

Termo Geral
a1 = 2
a2 = a1 + 3 = 5
a3 = a1 + 6 = 8
a4 = a1 + 9 = 11
...
an = a1 + (n 1 ) r

Recorrncia
O primeiro termo = 2 e cada termo gerado somando-se a razo (=3) ao anterior.
P. A.
Inteiro N
// Quantidade de termos da P.A.
Termo
// Valor do termo
ImprimeTermos ( )
Objetivo: Imprimir os N primeiros termos da P.A. ( a1 = 2 e razo = 3).
Inteiro K
Termo 2
Para K de 1 at N repita
Imprime ( Termo )
Termo Termo + 3
// Termo anterior + razo
Fim-Para

55

Termo geral
Cada termo calculado em funo da posio do termo na seqncia. A posio do
termo na seqncia pode ser dada pela varivel de controle do loop (1 volta do loop = 1
termo da seqncia, e assim por diante). 4
P. A.
Inteiro N
// Quantidade de termos da P.A.
Termo
// Valor do termo
ImprimeTermos ( )
Objetivo: Imprimir os N primeiros termos da P.A. ( a1 = 2 e razo = 3).
Inteiro K
Para K de 1 at N repita
Termo 2 + (K 1) * 3
// ak a1 + (K 1 ) razo
Imprime (Termo)
Fim-Para

5.4.

Nmeros triangulares

Dado um nmero N, inteiro e positivo, imprimir o N-simo elemento da seguinte


seqncia: 1 3 6 10 15 ...
Uma soluo
Os nmeros so chamados de triangulares devido a essa formao:
Soma
1
3
6
10

1
1
1
1

2
2

3
3

No se trata de uma progresso aritmtica. O acrscimo de um termo para outro


tambm varivel:
Termo
Acrscimo

3
+2

6
+3

10
+4

15

....

+5

Como o problema pede apenas o valor do N-simo termo, inicia-se o primeiro termo
com 1 e calcula-se mais (N 1) termos, alm do primeiro. A varivel de controle de
4

Johann Carl Friedrich Gauss, com 7 anos de idade, ao receber a tarefa de somar os
nmeros inteiros de 1 a 100, respondeu, imediatamente, que a soma era 5050 (50 pares de
nmeros, cada par somando 101).

56

repetio comea com 2 e vai at N (do 2 at o ltimo termo). O valor do termo aps a
ltima volta (N) o valor do N-simo termo.
NMEROS TRIANGULARES
Inteiro N
// Ordem do termo a ser calculado
Inteiro Termo
// Contedo do N-simo termo
Triangulares ( )
Objetivo: Obter o N-simo termo da seqncia dos nmeros triangulares
Inteiro K
Inteiro A
// Acrscimo
Termo 1
A2
// Valor do primeiro acrscimo
Para K de 2 at N repita
Termo Termo + A
AA+1
// Prximo acrscimo, na prxima volta
Fim-Para
Nota-se que a varivel A (acrscimo) tem o mesmo comportamento da varivel K,
usada para controle do loop. Assim, pode-se utilizar apenas uma delas, de acordo com a
descrio a seguir:
NMEROS TRIANGULARES
Inteiro N
// Ordem do termo a ser calculado
Inteiro Termo
// Contedo do N-simo termo
Triangulares ( )
Objetivo: Obter o N-simo termo da seqncia dos nmeros triangulares
Inteiro K
Termo 1
Para K de 2 at N repita
Termo Termo + K
Fim-Para
Usando a relao de recorrncia, tem-se:
T1 = 1
T2 = T1 + 2 = 1 + 2 = 3
T3 = T2 + 3 = 3 + 3 = 6
T4 = T3 + 4 = 6 + 4 = 10
A relao de recorrncia : Tk+1 = Tk + (k + 1), k = 1, 2, 3 ... , T1 = 1, ou
Tk = Tk 1 + k , k = 2, 3, 4 ... , T1 = 1
O clculo do termo seguinte dado pelo seguinte comando de atribuio, a partir da
relao de recorrncia Termo Termo + K, no qual K a ordem do termo que est sendo
calculado.

57

Se o termo geral dessa seqncia for encontrado, no necessrio um processo


interativo para obter-se o N-simo termo. Basta aplicar o valor de N na frmula.

5.5.

Fatorial
Dado um nmero inteiro e positivo N, calcular N!
Uma soluo
N
A funo fatorial definida por:

N! =

para todo N 0.

k=1
Por exemplo: 5! = 1 . 2 . 3 . 4 . 5 = 120
Por se tratar de um produtrio, inicia-se a resposta (varivel Fatorial) com 1
(elemento neutro na multiplicao). Em seguida, multiplica-se Fatorial pelos
inteiros at N. Pode-se comear a multiplicar por 2, pois a multiplicao por 1 no
altera o resultado.
NMERO INTEIRO
Inteiro N
Inteiro Fatorial
Triangulares ( )
Objetivo: Calcular N!
Inteiro Fator
Fatorial 1
Para Fator de 2 at N repita
Fatorial Fatorial * Fator
Fim-Para

// Fatorial a ser calculado


// N!

O clculo pode ser feito com a seqncia de fatores na ordem inversa, ou seja:
5! = 5 . 4 . 3 . 2 . 1 = 120. A varivel Fator inicia com 5 e vai at 2, de 1 em 1.
Para isso, usa-se o comando de repetio com passo negativo.
NMERO INTEIRO
Inteiro N
// Fatorial a ser calculado
Inteiro Fatorial
// N!
Triangulares ( )
Objetivo: Calcular N!
Inteiro Fator
Fatorial 1
Para Fator de N at 2 passo 1 repita
Fatorial Fatorial * Fator
Fim-Para

58

5.6.

MDC

Dados 2 nmeros inteiros positivos, diferentes de 0, calcular o Mximo Divisor


Comum (MDC) deles, pelo mtodo de Euclides.
Uma soluo
O mtodo (algoritmo) de Euclides para clculo do MDC contm os seguintes
passos: Calcular o resto da diviso do 1 nmero pelo 2. Se o resto for = 0, o MDC o 2
nmero. Seno, substitumos o 1 nmero pelo 2, e 2 nmero pelo resto, e calculamos um
novo resto.
Exemplo: Calcular o MDC entre 20 e 12.
Chamando o primeiro nmero de A e o segundo de B, podemos representar o
processo da seguinte forma:

Novo A

Resto

20

12

35

12

11

11

Novo B

4
MDC

1
MDC

O MDC ser o ltimo valor de B.

Outra forma de representar o processo :


B

A
20
8

12 8
4

12

MDC

Resto

Traduzindo o processo para uma linguagem algortmica temos:


Resto A mod B
Resto 0 ? No Said do loop e MDC B
Sim: A B
B Resto

59

Para que o teste no fique no meio do loop pode-se repetir o clculo do resto antes
de retornar para o teste.
Resto A mod B
Resto 0 ? No: Sai do loop e MDC B
Sim: A B
B Resto
Resto A mod B
No caso do MDC, no se sabe de antemo quantas vezes o loop ser executado.
Utiliza-se, ento, um tipo de loop que permite a repetio de um bloco de instrues
enquanto uma determinada condio for verdadeira.
2 NMEROS INTEIROS
Inteiro A, B, MDC
CalcMDC ( )
Objetivo: Calcular o MDC de 2 nmeros inteiros
Inteiro Resto
Resto A mod B
Enquanto Resto 0 faa
A
B
B
Resto
Resto A mod B
Fim-Enquanto
MDC B
Se a condio for verdadeira, o bloco de instrues ser executado at o fim e voltase para o incio do ciclo, para testar novamente a condio. Se a condio continuar
verdadeira, executa-se novamente o bloco e assim por diante. Se a condio tornar-se falsa,
o programa prossegue aps o fim da estrutura de repetio (Fim-Enquanto).
Nesse construtor de repetio necessrio iniciar a varivel de controle do loop e
incrementar o contador de iteraes. Sempre que for possvel determinar o nmero de
voltas de um loop, melhor utilizar o controle de repetio por varivel, no por
condio.
Observa-se que se A mltiplo de B o loop no executado e o MDC = B.
Observa-se, tambm, que se o usurio informar A < B, o prprio algoritmo corrige a
inverso.
12
12

20
8

12

...

60

5.7.

Seqncia Oscilante

Dado um nmero N, inteiro e positivo, imprimir os N primeiros termos da seguinte


seqncia: 1 2 3 4 5 6 ...
Estratgia 1: Intercalar mpares positivos com pares negativos, ou seja, a
seqncia
1 3 5 7 ... intercalada com a seqncia 2 4 6 ...
Impares positivos
Pares negativos

3
2

5
4

7
6

...

A cada uma das N iteraes calcula-se um impar positivo ou um par negativo,


dependendo do n da volta (voltas mpares impar positivo; voltas pares par negativo).
O n da volta ser controlado pela varivel K, que ser testada para saber se uma volta de
ordem par ou impar.
O primeiro impar positivo 1. Os prximos sero obtidos somando-se 2 na varivel
Impar. O primeiro par negativo 2. Os prximos sero obtidos subtraindo-se 2 da varivel
Par.
SEQNCIA OSCILANTE
Inteiro N
// Quantidade de termos
Inteiro Termo
// Termos da seqncia
GerarSeq ( )
Objetivo: Gerar seqncia oscilante
Inteiro Impar, Par, K
Impar 1
Par
2
Para K de 1 at N repita
Se K mod 2 = 0
// Se K divisvel por 2, uma volta de ordem par
Termo Par
Par Par 2
Seno
Termo Impar
Impar Impar + 2
Fim-se
Imprima (Termo)
Fim-Para

61

Uma variao dessa estratgia, baseada tambm na ordem da volta, utiliza a prpria
varivel de controle, nas voltas pares como par negativo ( K ) e nas voltas mpares como
impar positivo ( K ).
SEQNCIA OSCILANTE
Inteiro N, Termo
GerarSeq ( )
Objetivo: Gerar seqncia oscilante
Inteiro K
Para K de 1 at N repita
Se K mod 2 = 0
Termo K
Seno
Termo K
Fim-se
Imprima (Termo)
Fim-Para
Estratgia 2: Nmeros naturais multiplicados por oscilao de sinal.
1

Percebe-se a existncia da seqncia: 1


2
3
4
5
6
multiplicada,
respectivamente, pela seqncia 1 1 1 1 1 1 .
A primeira seqncia pode ser o prprio contador de voltas do loop, pois se
comporta da mesma maneira (Incio = 1 e incrementos de 1 em 1).
Na segunda seqncia, pode-se obter a oscilao por meio de uma varivel de sinal,
que comea com 1, e a cada volta multiplicada por 1.
SEQNCIA OSCILANTE
Inteiro N, Termo
GerarSeq ( )
Objetivo: Gerar seqncia oscilante
Inteiro K, Sinal
Sinal 1
Para K de 1 at N repita
Termo K * Sinal
Imprima (Termo)
Sinal Sinal
Fim-Para

62

Estratgia 3: Pndulo
Termos

Incremento

2
-3

3
+5

-7

+9

6
11

Nota-se que a seqncia se comporta como um pndulo, indo para trs 3 e para
frente 5, para trs 7 e para frente 9, sendo que cada oscilao segue um padro, dado pela
seqncia dos mpares, a partir do-3.
GerarSeq ( )
Inteiro K, Sinal, Termo
Sinal 1
Termo 1
Para K de 1 at N repita
Imprima (Termo)
Termo Termo + Sinal * (2 * K + 1)
Sinal Sinal
Fim-Para
Estratgia 4: Termo Geral
Quando se tem o termo geral da seqncia, simples ger-la, bastando aplicar na
frmula do termo geral, o valor da varivel de controle do loop ( K = 1 at N ).
Posio do Valor do
Termo ( K ) Termo
1
2
3
4
5

1
2
3
4
5

K
1
2
3
4
5

* -1
*
*
*
*
*

(K+1)

GerarSeq ( )
Inteiro K
Para K de 1 at N repita
Termo ( 1) ^ ( K + 1 ) * K
Imprima (Termo)
Fim-Para

1
1
1
1
1

O termo geral dessa seqncia :


(K + 1)

1
ou

(K 1)

*K
*K

63

5.8.

Wallis

Dado um nmero N, inteiro e positivo, calcular o valor aproximado, com N termos,


da srie de Wallis:
1 1 + 1 1 + ...
3
5
7
Uma soluo
No limite, a srie converge para / 4, ou seja, a medida que so acumulados novos
termos, o valor calculado um valor mais preciso de / 4 (0.7854)

1
2
3
4
5
6
7
8

Valor do
termo
1
1/3
1/5
1/7
1/9
1 / 11
1 / 13
1 / 15

Valor
acumulado
1
0.6667
0.8667
0.7238
0.8349
0.7440
0.8209
0.7543

1,2
1
Valor de PI / 4

Termo

0,8
0,6
0,4
0,2
0
1

9 10 11 12 13 14 15

N de iteraes

Cada termo pode ser decomposto em numerador e denominador. No 1 termo o


numerador vale 1 e o denominador tambm. Os prximos termos sero gerados
multiplicando-se o numerador por 1 e somando 2 no denominador. Usa-se uma varivel
acumuladora dos termos calculados, iniciada com 0.
Wallis
Inteiro N
// Quantidade de termos
Real Soma
// Soma dos termos (valor aproximado de / 4)
Calcular ( )
Objetivo: Calcular a srie de Wallis, com N termos
Inteiro K, Num, Den
Soma 0
Num 1
Den
1
Para K de 1 at N repita
Soma Soma + Num / Den
Num Num
Den Den + 2
Fim-Para

64

5.9.

Fibonacci

Dado um nmero N, inteiro e positivo, obter os N primeiros termos da seguinte


seqncia: 1 1 2 3 5 8 13 ...
Uma soluo
Um dos problemas do livro Liber Abaci, sobre tcnicas algbricas, de Leonardo de
Pisa (Fibonacci), em 1202 foi: Quantos casais de coelhos sero produzidos num ano,
comeando com um s par, se em cada ms cada casal gera um novo par que se torna
produtivo a partir do segundo ms?. Esse problema d origem seqncia de Fibonacci.
(Boyer, 1974:186)
A tabela a seguir mostra a evoluo das variveis do problema:
Perodo (Ms) Casais jovens
1
2
3
4
5
6
7
8
9
10
11
12

1
0
1
1
2
3
5
8
13
21
34
55

Casais adultos
(reprodutivos)
0
1
1
2
3
5
8
13
21
34
55
89

Total de casais
1
1
2
3
5
8
13
21
34
55
89
144

Cada termo, a partir do terceiro, obtido somando-se os 2 termos anteriores. Os 2


primeiros so iguais a 1.

A
1

B
1

Termo
2

Pode-se usar duas variveis, A e B, contendo inicialmente o valor 1. A soma de A


e B gera um novo Termo, com valor 2. Para continuar o processo, pode-se deslocar os
valores de B e Termo para A e B e voltar a somar A e B, gerando um novo Termo, com
valor 3, e assim por diante.

65

FIBONACCI
Inteiro N
// Quantidade de termos
Inteiro Termo
// Termos da seqncia
GerarSeq ( )
Pr Condio N > 2
Objetivo: Gerar os termos da seqncia de Fibonacci
Inteiro K, A, B, C
A 1
K inicia com 3, pois 2 termos j foram
B 1
impressos, e o programa pede N termos
Imprima (A, B)
Para K de 3 at N repita
Termo A + B
Imprima (Termo)
AB
B Termo
Fim-Para
A soluo a seguir, mais criativa, usa uma varivel a menos.
FIBONACCI
Inteiro N, Termo
GerarSeq ( )
Inteiro K, A
Termo 1
A0
Para K de 1 at N repita
Imprima (Termo)
Termo Termo + A
A Termo A
Fim-Para
Termo
1
1
2
3
5
8
13
21
34
55
89

Razo entre
2 termos
1
2
1,5
1,6667
1,6
1,625
1,6153
1,6190
1,6176
1,6181

A razo entre um termo e o anterior, no limite, tende a (phi


maiscula), e chamada de razo ou proporo urea.
Na geometria do pentgono regular, se um lado AB tiver
comprimento unitrio, qualquer diagonal AC =
(1 +

) = 2 . cos / 5 = 1,61803 ... =

2
A razo urea encontrada na natureza na distribuio das
sementes de girassol e do cacto, que regida pela espiral
logartmica do nmero ureo. O girassol possui 55 espirais
orientadas no sentido horrio, sobrepostas a 34 ou 89 espirais
em sentido anti-horrio

66

No corpo humano podemos descobrir o significado metafsico do tal como expresso pelo
aforismo de Herclito: O homem a medida de todas as coisas. As medidas da figura
humana se ajustam ao antigo smbolo biomtrico do corpo dividido em dois pelos rgos
sexuais ou em pelo umbigo (Lawlor, 1996:59).
1
As fraes contnuas fornecem a seguinte frmula: = 1 +
1+

1
1+

1
1 + ...

5.10. Acumular seqncia


Usando um processo iterativo, obter quantos termos so necessrios para que a
soma dos primeiros termos de uma P.A., definida pelo valor do primeiro termo e pela
razo, seja maior que 100.
Uma soluo
Pode-se criar um processo repetitivo que acumule cada termo da PA e verifique se a
soma superior a 100, contando quantas iteraes (voltas) foram realizadas.
O termo geral da P.A. : an = a1 + (n 1) * razo
O esboo da soluo , dados a1 e a razo:
Inciar

Zerar Soma
Zerar contador de termos (quantidade de voltas)

Repetir
(at que Soma > 100)

Somar 1 no contador de termos


Calcular Termo ( usar contador de termos na frmula
do termo geral)
Acumular Termo em Soma

Finalizar

A resposta o contador de termos.

A estrutura de repetio usada nessa soluo com o teste no final, ou seja, o bloco
de repetio feito pelo menos uma vez, e ser repetido at que a condio seja verdadeira.

67

PROGRESSO ARITMTICA
Inteiro A1, Razo
// Definio da P.A.
Inteiro N
// Quantidade de termos
Triangulares ( )
Objetivo: Obter a quantidade de termos para que a soma de uma PA seja > 100
Inteiro Termo
Soma 0
N
0
Repita
N
N+1
Termo A1 + (N 1) * Razo
Soma Soma + Termo
At que Soma > 100
Imprima (N)

5.11. Seqncia com aviso de fim


Uma situao muito comum o tratamento arquivos, em que no se sabe
antecipadamente a quantidade de registros. Nesse caso, comum testar o fim da seqncia
usando uma varivel que muda de estado quando ele ocorre. Esta varivel chamada de
sentinela.
No caso de arquivos existe uma funo, uma varivel ou uma propriedade chamada
EOF (End Of File 5), que se torna verdadeira quando se tenta ler o prximo registro e o
arquivo terminou. O seguinte trecho de algoritmo comum no tratamento seqencial de
arquivos:
Ler 1o registro
Enquanto no for o fim do arquivo faa
Tratar registro lido
Ler o prximo registro
Fim-Enquanto

5.12. Alfabeto
Imprimir as letras maisculas do alfabeto.
Uma soluo
Podemos imprimir cada uma das letras, uma por uma, o que no parece uma boa
soluo.
Pode-se, tambm, utilizar operadores/funes para tratamento de caracteres e
strings (cadeias de caracteres), para gerar uma letra a partir do valor da anterior.
5

EOF no significa O Fim, em portugus.

68

As principais funes e operadores para tratamento de caracteres e strings so:


FUNO/
OPERADOR
+
Val (string)
Str (Expr.Numrica)
Len (String)
SubStr (string, N1, N2)
Chr (Expr. Numrica)
Asc (Caractere)

DESCRIO

EXPRESSO

VALOR

Concatenao
Valor numrico do
string
Converte nmeros
em string
Tamanho de um
string
Parte do string,
comeando em N1,
com tamanho N2
Caractere referente
ao nmero
Cdigo ASCII do
caractere

AB + C
Val (45.3)

ABC
45.3

Str (45.3)

45.3

Len (TESTE)

SubStr (TESTE,3, 2) ST
Chr (67)

Asc (F)

70

A letra A tem o cdigo 65 na tabela ASCII. B tem o cdigo 66, e assim por
diante. Assim, podemos iniciar uma varivel com 65 e, usando a funo CHR, gerar a letra
A, mudar esta varivel para 66 e gerar B, at o valor 90, equivalente letra Z.
ALFABETO
Caractere Letra
GerarAlfa ( )
Objetivo: Imprimir alfabeto maisculo
Inteiro L
Para L de 65 at 90 repita
Letra Chr ( L )
Imprimir (Letra)
Fim-Para
Pode-se, tambm, iniciar uma varivel com o valor A, e calcular as prximas
somando 1 no valor da letra na tabela ASCII e converter esse valor novamente em
caractere.
ALFABETO
Caractere Letra
GerarAlfa ( )
Objetivo: Imprimir alfabeto maisculo
Letra A
Enquanto Letra Z faa
Imprimir (Letra)
Letra Chr(Asc(Letra) + 1)
Fim-Enquanto

// Prxima letra

69

5.13. Prxima Placa


Dada uma placa de automvel, com 3 letras, um espao e 4 dgitos, armazenada em
uma varivel do tipo string, obter a placa que sucede a placa dada.
Uma soluo
Exemplo:

C A B

0 3 1 6

C A B

0 3 1 7

C A B

9 9 9 9

C A C

0 0 0 1

No se pode somar 1 direto num dado do tipo string. A idia separar a parte
numrica da placa, somar 1 e junt-la novamente com as letras. Quando a parte numrica
ficar > 9999, voltamos para 0001 e avana-se a terceira letra. Quando a terceira ou a
segunda letra ficar > Z, volta-se essa posio para A e avana-se a letra anterior.
AUTOMVEL
String Placa, Prox
// Placa atual e placa seguinte
Proxima_Placa( )
Objetivo: Calcular a prxima placa de automvel
String Letra1, Letra2, Letra3, Num
Inteiro Valor
Letra1 SubStr (Placa, 1 , 1)
Letra2 SubStr (Placa, 2 , 1)
Letra3 SubStr (Placa, 3 , 1)
Num SubStr (Placa, 5 , 4)
// Parte numrica da placa (tipo string)
Valor Val (Num) + 1
// Valor numrico de Num, + 1
Se Valor > 9999 ento
Valor 1
Letra3 Chr (Asc (Letra3) + 1)
// Prxima letra
Se Letra3 > Z ento
Letra3 A
Letra2 Chr (Asc (Letra2) + 1)
Se Letra2 > Z ento
Letra2 A
Letra1 Chr (Asc (Letra1) + 1)
Se Letra1 > Z ento
Letra1 A
// Voltar ao incio: ZZZ para AAA
Fim-se
Fim-se
Fim-se
Fim-se
Num Str (Valor)
Prox Letra1 + Letra2 + Letra3 + SubStr (000, 1, 4 len ( Num)) + Num

70

5.14. Engrenagem
Obter nmeros de 0 a 999, separados em Centenas, Dezenas e Unidades.
Uma soluo
As Centenas, Dezenas e Unidades se comportam como engrenagens, ou seja, a cada
10 giros da unidade a dezena gira uma vez (vai um) e a cada 10 giros da dezena a centena
gira uma vez. Nota-se que a engrenagem da unidade trabalha mais que a dezena, que
trabalha mais que a da centena.
A estrutura que implementa esse mecanismo um loop dentro do outro, tendo a
unidade como o loop mais interno. A quantidade de voltas 10 X 10 X 10 = 1000.
Pode-se usar uma varivel para cada posio e vari-la de 0 a 9.
ENGRENAGEM
Inteiro C, D, U
GerarNmeros ( )
Objetivo : Obter nmeros de 0 a 999 no formato Centena, Dezena e Unidade
Para C de 0 at 9
Para D de 0 at 9
Para U de 0 at 9
Imprima (C, D, U)
Fim-Para
Fim-Para
Fim-Para

5.15. Prestaes
Dada a data inicial de uma prestao e um n inteiro N, representando uma
quantidade de meses, calcular os prximos N 1 vencimentos mensais, sempre no mesmo
dia.
Uma soluo
Ex.: Data inicial = 16/11/03 , N = 4
As prximas datas seriam: 16/12/03, 16/01/04, 16/02/04
Uma estratgia seria:

Separar dia, ms e ano da data inicial


Gerar a prxima data, repetindo o dia e somamos 1 no ms
Se o resultado for 13, mudar o ms para 1 e somar 1 no ano

Existe um problema para datas com dia > 28, pois fevereiro pode no ter 29 dias nos
anos no bissextos, e muito menos 30 ou 31 dias. Tambm, nem todos os meses tm 31
dias. Podemos testar as excees, que so os meses de Abril, Junho, Setembro e Novembro,
que tm 30 dias, e o ms de fevereiro que, se for ano bissexto tem 29 dias e se no, tem 28.

71

Um ano bissexto for mltiplo de 4 e no for mltiplo de 100, exceto quando for
mltiplo de 400 (1600 e 2000 foram bissextos; 1900 no foi).
Quando se lida com o tipo data, pode-se contar com algumas funes de
manipulao de datas, tais como:
Dia (data )
Ms (data )
Ano (data )
Data ( dia, ms, ano)

Retorna o dia de uma data, no tipo inteiro.


Retorna o ms
Retorna o ano, com 4 dgitos
Converte os 3 nmeros para tipo data

CONTRATO
Data DataInicial
// Data da 1 prestao
Inteiro N
// Quantidade de prestaes
Data DataPrest
// Datas de vencimento das prximas prestaes
CalcularDatas ( )
Inteiro D1, D2, M, A
D1 Dia ( DataInicial )
M Ms ( DataInicial )
A Ano ( DataInicial )
Para K de 1 at N 1
// Calcular as prximas N - 1 datas
MM+1
Se M = 13 ento
M1
AA+1
Fim-se
Se (M = 4 ou M = 6 ou M = 9 ou M = 11) e D1 = 31 ento
D2 30
Seno
Se M = 2 ento
Se D1 > 28 ento
Se A mod 4 = 0 e (A mod 100 0 ou A mod 400 = 0)
D2 29
// ano bissexto
Seno
D2 28
Fim-se
Fim-se
Fim-se
Seno
D2 D1
Fim-se
DataPrest Data ( D2, M, A )
Imprima (DataPrest)
Fim-Para

72

Um recurso interessante para se calcular o ltimo dia de cada ms ou a quantidade


de dias de um ms, subtrair 1 do 1 dia do ms seguinte. O tipo DATA permite esta
operao.Exemplo: Para se saber quantos dias tem o ms de fevereiro de 2000, calcula-se
Dia (Data (01, 03, 2000) 1), sem a preocupao com o fato de este ano ser bissexto, e a
resposta ser 29.

5.16. Exerccios propostos


a)

Loops

Quantas vezes sero executados os blocos de instrues sob o controle dos


seguintes comandos de repetio?

b)

Para I de 2 at 20
Para K de 8 at 2 passo -1
Para J de 1 at 10 passo 2
Para I de 10 at 2
Para K de 3 at N / 2
Para J de 10 at 3 passo 3
Para K de N at 2 passo 2

Simulaes
Mostrar, na forma de uma tabela, a evoluo das variveis usadas nos algoritmos
deste captulo.

c)

Seqncias
Dado um nmero N, inteiro e positivo, obter os N primeiros termos das seguintes
seqncias:

16

...

10

13

...

1
2

3
4

5
6

7
8

16 ...

11 ...

1 ...

Dado um nmero N, inteiro e positivo, obter o N-simo termo das seguintes


seqncias:

73

11

21 43 ...

13

21

...

10

YK+1 = 2. YK + 1, Y1 = 1, K = 1, 2, 3, ...

YK+1 = YK + K, Y1 = 1, K = 1, 2, 3, ...

...

...

11 ...

Dado um nmero N, inteiro e positivo, obter a soma dos N primeiros termo das
seguintes seqncias:

d)

24

...

15

31

11

23

47

95

11

18

27

YK = (K + 1) K, K = 1, 2, 3, ...
2

...

Soma de dgitos

Obter todos os nmeros inteiros, maiores que 100 e menores que 1000, cuja soma
de dgitos seja maior que 10.
Exemplo: Os primeiros nmeros obtidos seriam: {119, 128, 129, 137, 138, 139, ...}
e)

Quantidade de dgitos
Desenvolver um algoritmo iterativo para obter quantos dgitos tem um nmero
inteiro dado.
Exemplo: Dado 31762, obter 5.

74

f)

MDC por subtraes sucessivas

Dados 2 ns, pertencentes a N*, calcular o MDC pelo mtodo das subtraes
sucessivas do maior.
Exemplo: Dados A = 20 e B = 12
A

20

12

A>B
B>A
A>B
A=B

A B = 20 12 = 8
B A = 12 8 = 4
AB=8 4 =4
MDC = 4

Ou seja, quando A maior A B; quando B maior B A


g)

Simulao
Verificar se o algoritmo abaixo cumpre seu objetivo, para N 1
SEQNCIA
Inteiro N, Termo
GerarSeqncia ( )
Objetivo: Obter os N primeiros termos da seqncia 0 2 6 12 20 ...
Inteiro A, B, C, K
A0
B2
Imprima (A, B)
Para K de 3 at N repita
AA+2
BB*2
Termo A + B
Imprima (Termo)
Fim-Para

h)

Sries convergentes

Dado um nmero N, inteiro e positivo, calcular o valor das seguintes sries, com N
termos:
1
2

+ 1
4

+ 1 + 1 + ...
8
16

* 4 * 4 * 6
3
5
5

2
3
2

X + X
2
3

X
4

+...

(1 )

(no limite, o valor


dessa srie converge
para 1)

* 6 * 8 ... ( )
7
7
2
( ln (1 + X), X > 1 )

75

i)

X
3!

+ X X
5!
7!
4

X
2!

X X
2!

+
6

+...

( cos (X), X em radianos)

...

( e )

+ X X
4!
6!
2

( sen (X), X em radianos)


.

+ X
4!

Primo

Dado um nmero N, inteiro e positivo, verificar se N primo, ou seja, se N tiver


apenas dois divisores: ele mesmo e a unidade.
Obs: Para verificar se um nmero N primo pode-se limitar o teste de divisibilidade
at o valor de
N
j)

MMC

Dados 2 nmeros, inteiros e positivos, calcular o Mnimo Mltiplo Comum (MMC)


entre eles.
Exemplo: Dados 6 e 10, obter 30.
k)

Mltiplos

Dados N, A e B, nmeros inteiros e positivos, obter os N primeiros mltiplos de A,


de B ou de ambos, em ordem crescente, intercalados e sem repeties.
Exemplo: Dados N = 10, A = 3 e B = 4 , mostrar: 3, 4, 6, 8, 9, 12, 15, 16, 18, 20
Dados N = 6, A = 3 e B = 13, mostrar: 3, 6, 9, 12, 13, 15
l)

Camundongos 6

Uma determinada populao de camundongos do tipo A triplica a cada ano. A


populao de camundongos do tipo B duplica a cada ano. Sabendo-se que a populao de
camundongos do tipo A atualmente menor que a do tipo B, escrever um algoritmo
iterativo para obter em quantos anos, mantendo-se o mesmo ritmo de crescimento, os
camundongos do tipo A sero mais numerosos que os do tipo B.
m)

Divisores
Dado um nmero N, inteiro e positivo, obter todos os divisores pares de N.
Exemplo: Dado o nmero 36, obter {2, 4, 6, 12, 18, 36}

Baseado no problema das populaes, apresentado em Salvetti & Barbosa (1998, p. 32)

76

n)

CGC / CPF
Calcular o dgito de controle do CGC e CPF, de acordo com as seguintes instrues:

1.

Cadastro Geral de Contribuintes CGC

1.1. Formato Geral: X1X2X3X4X5X6X7V1 / O1O2O3O4 C1C2


1.2. Composio:
a) Os 7 primeiros algarismos constituem o nmero bsico de inscrio da empresa no
CGC (X1 a X7);
b) O oitavo algarismo ( V1 ), constitui o dgito verificador do nmero formado pelos 7
primeiros algarismos, calculado pelo mdulo 10;
c) Os 4 algarismos aps a barra (O1 a O4) constituem o nmero de ordem do
estabelecimento na empresa cadastrada;
d) O primeiro algarismo aps o nmero de ordem ( C1) representa o dgito verificador
para o nmero formado pelos 12 algarismos anteriores, calculado pelo mdulo 11;
e) O ltimo algarismo ( C2 ) representa o dgito verificador para o nmero formado
pelos 13 algarismos anteriores, calculado tambm pelo mdulo 11.
1.3. Clculo de V1
Cada algarismo do nmero bsico, a partir da direita, multiplicado por 2, 1, 2, 1, 2, 1,
e 2, sucessivamente; somam-se, a seguir, os algarismos resultantes de cada produto.
O valor de V1 ser a diferena entre a soma assim obtida e a dezena imediatamente
superior.
Exemplo: seja o nmero bsico 1 2 3 4 5 6 7. O clculo ser efetuado da seguinte
forma:
1
X
2
=
2

2
X
1
=
2

3
X
2
=
6

4
X
1
=
4

5
X
2
=
10

6
X
1
=
6

7
X
2
=
14

A soma dos algarismos ser: 2 + 2 + 6 + 4 + 1 + 0 + 6 + 1 + 4 = 26


O valor de V1 ser dado pela diferena da soma 26 para a dezena imediatamente
superior, ou seja, 30. Portanto: V1 = 30 26 = 4
Como resultado, o nmero bsico de inscrio da empresa no CGC ser 12345674.
1.4. Clculo de C1
Para o clculo de C1 considerado o CGC do estabelecimento, compostos de 12
algarismos e formado pelo nmero bsico seguido do nmero de ordem. Cada
algarismo, da direita para a esquerda, multiplicado sucessivamente por 2, 3, 4, at 9,

77

quando o multiplicador volta a 2, reiniciando a srie. Os produtos resultantes so ento


somados.
Para obteno do valor de C1 divide-se a soma resultante por 11 e toma-se o seu resto.
Quando o resto for igual a 0 (zero), C1 ser tambm igual a 0 (zero). Nos demais casos
o valor de C1 ser igual ao complemento do resto para 11, sendo que, quando o
complemento for igual a 10 toma-se o valor 0 (zero).
Exemplo: Seja o CGC do estabelecimento 12345674 / 1234
1
X
5
=
5

2
X
4
=
8

3
X
3
=
9

4
X
2
=
8

5
X
9
=
45

6
X
8
=
48

7
X
7
=
49

4
X
6
=
24

/ 1
X
5
=
5

2
X
4
=
8

3
X
3
=
9

4
X
2
=
8

A soma dos produtos ser: 5+8+9+8+45+48+49+24+5+8+9+8 = 226


A diviso de 226 por 11 nos d um quociente 20 com

resto

6.

Logo C1 = 11 6 = 5
1.5. Clculo de C2
O valor de C2 obtido tendo por base os 13 algarismos anteriores, correspondentes ao
CGC do estabelecimento e do primeiro dos dgitos de controle (C1).
O procedimento de clculo idntico ao de C1, iniciando a partir da direita, a
multiplicao de cada algarismo por 2, 3, 4, at 9, retornando o multiplicador a 2, e
somando depois os produtos obtidos.
Exemplo: Seja o CGC do estabelecimento 12345674 / 1234
1
X
6
=
6

2
X
5
=
10

3
X
4
=
12

4
X
3
=
12

5
X
2
=
10

6
X
9
=
54

7
X
8
=
56

4
X
7
=
28

/ 1
X
6
=
6

2
X
5
=
10

3
X
4
=
12

4
X
3
=
12

- 5
X
2
=
10

A soma ser: 6+10+12+12+10+54+56+28+6+10+12+12+10 = 238.


A diviso de 238 por 11 nos d um quociente 21 com resto 7.
Logo C1 = 11 7 = 4.
Assim, para o exemplo dado, o CGC completo ser: 12345674 / 1234 - 54

78

2. Cadastro de Pessoas Fsicas CPF


2.1. Formato Geral: X1X2X3X4X5X6X7X8R C1C2
2.2. Composio:
a) Os 8 primeiros algarismos constituem o nmero bsico de inscrio da pessoa fsica
no CPF (X1 a X8);
b) O nono algarismo R o indicativo da Regio Fiscal onde foi efetuada a
inscrio
no cadastro;
c) O primeiro algarismo aps o indicativo da Regio Fiscal C1 representa o dgito
verificador para o nmero formado pelos 9 algarismos anteriores, calculado pelo
mdulo 11;
d) O ltimo algarismo C2 - representa o dgito verificador para o nmero formado
pelos 10 algarismos anteriores, calculado tambm pelo mdulo 11;
2.3. Clculo de C1
Cada um dos 9 algarismos do CPF, a partir da direita, multiplicado sucessivamente
por 2, 3, 4, 5, 6, 7, 8, 9 e 10 e os produtos resultantes so somados.
A soma obtida dividida por 11 e C1 ser igual ao complemento para 11 do resto da
diviso; quando o complemento for maior ou igual a 10, toma-se o valor 0 (zero).
Exemplo: seja o CPF 123456785. O clculo de C1 ser efetuado da seguinte forma:
1
X
10
=
10

2
X
9
=
18

3
X
8
=
24

4
X
7
=
28

5
X
6
=
30

6
X
5
=
30

7
X
4
=
28

8
X
3
=
24

5
X
2
=
10

A soma dos produtos ser: 10+18+24+28+30+30+28+24+10 = 202


A diviso de 202 por 11 nos fornece um quociente 18 com resto 4.
Logo C1 = 11 4 = 7
2.4. Clculo de C2
O clculo de C2 toma por base o nmero de 10 algarismos formado pelo CPF seguido
do primeiro dgito de controle.
Cada um dos algarismos a partir da direita, multiplicado sucessivamente por 2, 3, 4,
5,6, 7, 8, 9, 10 e 11 e os produtos resultantes so somados.
C2 ento obtido de maneira anloga a C1.

79

Exemplo: Seja o CPF 123456785 com o primeiro dgito verificador igual a 7.


C2 ser calculado para o nmero 12345678 7 como segue:
1
X
11
=
11

2
X
10
=
20

3
X
9
=
27

4
X
8
=
32

5
X
7
=
35

6
X
6
=
36

7
X
5
=
35

8
X
4
=
32

5
X
3
=
15

- 7
X
2
=
14

A soma dos produtos ser: 11+20+27+32+35+36+35+32+15+14 = 257


A diviso de 257 por 11 nos d um quociente 23 com resto 4. Logo C1 = 11 4 = 7
Assim, para o exemplo dado, o CPF completo ser : 123456785 77
o)

Imposto

O pagamento de certo imposto deve ser feito na quarta-feira da semana seguinte ao


fato gerador. Dada a data do fator gerador, calcular a data do pagamento.
Considerar a existncia de uma funo chamada DayOfWeek, que recebe uma data
no formato DD/MM/AA, e retorna o nome do dia da semana (SUNDAY, MONDAY,
TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY).
p)

Repeties

Dado um nmero N, inteiro e positivo, obter os N primeiros termos da seguinte


seqncia: 1 2 2 3 3 3 4 4 4 4 5 ...
q)

Fatorao
Dado um nmero inteiro e positivo, obter sua decomposio em fatores primos.
Ex.

Dado: 84 , obter

Dado: 75, obter

2
2
3
7

3
5
5

Alterar o programa anterior, para mostrar o fator primo e seu respectivo expoente:
Ex.

Dado: 84 , obter

2
3
7

2
1
1

Dado: 75, obter

3 1
5 2

80

r)

Calculadora financeira
Fazer um projeto para simular as funes de uma calculadora financeira.
As variveis envolvidas nos clculos financeiros so:
PMT
PV
n
FV
i

=
=
=
=
=

prestao (pagamento peridico)


valor atual (valor presente) da anuidade
n de intervalos de pagamento
montante da anuidade (valor futuro)
taxa de juros do perodo, expressa em decimais (5% = 0,05)

Se uma das variveis no estiver preenchida o programa deve calcular seu valor.
Deve, tambm, refazer o clculo para a ltima alterao de uma das variveis. Deve prever
tambm uma funo para limpar tudo.
As frmulas a seguir so para pagamento no final do perodo de amortizao ou
capitalizao.
n1

FV

= PMT [ (1 + i )
i

PV

= PMT [ 1 (1 + i )
i

PMT = i . PV [ ( 1 + i )
]
n1
(1+ i )
n

= log (1 i PV
)
PMT_____
)
log (
1
1+i

O clculo da taxa ( i ) feito por interpolao, a partir de uma taxa inicial sugerida e
um intervalo para pesquisa da taxa aproximada.
Exemplo: Seja n = 12, PV = 1000 e PMT = 106,55
Usando a frmula para clculo de PV temos que encontrar duas taxas, uma acima e
outra abaixo da taxa procurada, que aproxime o valor de PV / PMT. Comeamos por uma
taxa que achamos ser prxima do valor procurado.
PV = [ 1 (1 + i ) n
PMT
i
No exemplo temos:

PV = 1000 = 9,38527
PMT
106,55

81

Se usarmos como taxa inicial 3 %, a relao PV / PMT :


[ 1 (1 + 0,03 ) 12 ] = 9,954 (valor acima de 9,38527 taxa abaixo da real)
0,03
Para uma taxa de 5 %, a relao PV / PMT :
[ 1 (1 + 0,05 ) 12 ] = 8,86325 (taxa acima da real)
0,05
Interpolando os valores temos:
0,03
i
0,05

9,954
9,38527
8,86325

=
i 0,03
0,05 0,03

9,38527 9,954
8,86325 9,954

i = 4,04 %

Se a interpolao fosse feita entre 3,5 % e 4,5 %, a taxa seria 4,01%.


Se as taxas fossem 3,9% e 4,1%, a taxa encontrada seria 4%.
s)

Tabela de amortizao

Dado uma quantidade de perodos, uma dvida original e uma taxa de juros,
preencher a tabela de amortizao dessa dvida.
Perodo
1
2
t)

Saldo devedor no Juro devido no fim Pagamento


inicio do perodo do perodo (J)
(PMT)
(SD)
Dvida original
i% x SD
Prestao
SD CA

Capital
amortizado
(CA)
PMT J

Depreciao

Calcular a depreciao anual de um bem, dado o valor de compra e sua vida til,
para os seguintes mtodos: Linear, Progressiva, Soma dos dgitos.
Ex.: Calcular as depreciaes anuais de um bem comprado por $10.000, com vida
til de 10 anos.
Linear
Depreciao anual = Valor original = 10.000 = 1.000 por ano
Vida til
10
O valor da depreciao constante

82

Progressiva
O valor da depreciao de cada perodo obtido aplicando-se um fator sobre o valor
do bem no incio do perodo, j descontadas as depreciaes dos perodos anteriores. O
fator pode ser, por exemplo, 2 / Vida til = 2 / 10 = 0.2
Ano
1o
2o
3o

Valor inicial do perodo


10.000
8.000
6.400

Depreciao
10.000 x 0.2 = 2.000
8.000 x 0.2 = 1.600
6.400 x 0.2 = 1.280

O valor final (incio do 11o ano), denominado valor residual ou depreciado.


Soma dos dgitos dos anos
Aplica-se, sobre o valor original, um fator diferente para cada ano. Esse fator uma
frao cujo numerador o n do ano de vida, em ordem decrescente (10, 9, 8, ..., 1). O
denominador a soma dos dgitos dos anos (1+2+3+ ...+ 10).
Ano
1o
2o
3o
u)

Depreciao
10.000 x 10 / 55 = 1.818,18
10.000 x 9 / 55 = 1.636,36
10.000 x 8 / 55 = 1.454,55

Binrio para decimal

Dado um string de bits (seqncia de dgitos 0 ou 1), representando um nmero na


base 2, converte-lo para a base 10.
Exemplo: Dado o string 10110, obter 22.
v)

Domin
Criar uma lista com os valores das 28 peas do jogo de domin:
0 0, 0 1, 0 2, 0 3, 0 4, 0 5, 0 6, 1 1, 1 2, ..., 5 6, 6 6.

w)

Placas de automvel

Obter uma lista de placas de automvel, de acordo com a solicitao, por faixa, ou
por quantidade.

Por faixa: mostrar placas entre 2 placas informadas.


Ex.: Mostrar as placas entre BAC 0001 e BCZ 9999.
Por quantidade: mostrar uma quantidade de placas a partir de uma placa inicial.
Ex.: Mostrar 1000 placas a partir de CAA 0358.

Este tipo de programa pode ser utilizado para emisso de etiquetas de placas em
despachantes, cdigos de contas correntes, nmeros de matrcula etc.

83

x)

Nmeros amigos entre si

(Malba Tahan, 1966) Dois nmeros inteiros e positivos so amigos entre si quando
a soma dos divisores prprios do primeiro nmero for igual ao segundo, e a soma dos
divisores prprios do segundo for igual ao primeiro. Dados dois nmeros, verificar se so
amigos entre si.
Ex.: 220 tem como divisores prprios: 1, 2, 4, 5 ,10, 11, 20, 22, 44, 55 e 110, cuja
soma 284
284 tem como divisores prprios: 1, 2, 4, 71, 142, cuja soma 220
Portanto, 220 e 284 so amigos entre si.
Verificar o programa para os nmeros (18416 e 17296 ) e ( 9.434.056 e 9.363.584).
Alguns nmeros so amigos de si prprio: 6 = 1 + 2 + 3; 28 = 1 + 2 + 4 + 7 + 14
y)

Planilha eletrnica

Criar uma lista com os cdigos de uma faixa de colunas de uma planilha eletrnica,
de AA at IV, ou seja: {AA, AB, AC, ...., AZ, BA, BB, BC, ..., IV)
z)

Gros de trigo

(Malba Tahan, 1966) Conta-se que um poderoso rei da ndia resolveu dar uma rica
recompensa ao inventor do jogo de xadrez, tal foi seu encanto pelo jogo. O inventor pediu
que o pagamento fosse feito em gros de trigo, um gro como prmio pela 1a casa, dois pela
2a , 4 pela 3a, e sempre assim, dobrando a cada casa, at a 64a.
Escrever um algoritmo para calcular a quantidade de gros, considerando que o
resultado, que possui 20 dgitos, no pode ser armazenado em uma nica varivel, por falta
de suporte para esta quantidade de dgitos (preciso).

84

REFERNCIAS E BIBLIOGRAFIA
BAASE, Sara, GELDER, Allen Van. Computer Algorithms: Introduction to Design and
Analysis. 3. ed., Addison-Wesley, 2000.
BARBOSA, Lisbete Madsen. Ensino de algoritmos em cursos de computao. Dissertao
de mestrado. PUC So Paulo. 1999.
BOYER, Carl. Histria da Matemtica. So Paulo: Edgar Blcher e Ed. da USP, 1974.
FARRER, H. et alli. Algoritmos estruturados. Rio de Janeiro: Ed. Guanabara, 1989.
GARDNER, Martin. Ah, Descobri!. Lisboa: Gadiva, 1990.
KNUTH, Donald E. The art of computer programming. Massachusetts: Addison-Wesley.
Volume 1 Fundamental Algorithms; Volume 3 Sorting and Searching. 1973.
LAWLOR, Robert. Geometria Sagrada. Madri: Edies del Prado, 1996.
MALBA TAHAN. Diabruras da Matemtica. 2.ed. So Paulo: Saraiva, 1966.
MEC/SESu/CEEInf Diretrizes Curriculares de Cursos da rea de Computao e
Informtica. Disponvel em http://www.mec.gov.br/sesu. Acesso em 30/01/2006.
OLIVEIRA, Ariovaldo Dias de. Notas de aula da disciplina de Algoritmos. Fundao Santo
Andr, 2005.
SALVETTI, Dirceu Douglas, BARBOSA, Lisbete Madsen. Algoritmos. So Paulo: Makron
Books, 1998.
SEBESTA, Robert W. Conceitos de linguagens de programao. 4. ed. Porto Alegre:
Bookman, 2000.
SETUBAL, Joo Carlos. Uma proposta de Plano Pedaggico para a matria de
Computao e Algoritmos, in. Qualidade de cursos de graduao da rea de Computao
e Informtica. SBC WEI 2000 Curitiba: Ed. Universitria Champagnat, 2000
TREMBLAY, J., BUNT, R. Introduo cincia dos computadores - Uma abordagem
algortmica. So Paulo: McGraw-Hill, 1983.
VELOSO, Paulo, et. alli . Estruturas de dados. Rio de Janeiro: Campus. 1983.
WIRTH, Niklaus. Programao sistemtica em Pascal. 6 ed. Rio de Janeiro:
Campus,1987.

You might also like