Beruflich Dokumente
Kultur Dokumente
Algoritmos
Jander Moreira
DC-UFSCar
Construo de algoritmos i
Sumrio
Sumrio
Unidade 1 - Conceitos bsicos sobre algoritmos....................... 1-1
1.1 Primeiras palavras ............................................................. 1-1
1.2 Algoritmos no cotidiano ...................................................... 1-1
1.3 Conceitos bsicos de algoritmos e sua lgica ......................... 1-2
1.3.1
1.3.2
1.3.3
1.4
1.5
2.3.2
2.3.3
2.3.4
2.3.5
2.4
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.3.7
3.3.8
3.4
4.3.2
Construo de algoritmos ii
Sumrio
4.3.3
4.4
5.3.2
5.3.3
5.3.4
5.4
6.4
7.3.2
7.4
8.4
9.3.2
9.3.3
9.3.4
9.4
10.3.2
10.3.3
10.3.4
10.3.5
Lista de figuras
Figura 2-1. Unidades constituintes do modelo de computador. ...............2-4
Figura 3-1. (a-c) Exemplos de expresses matemticas. (d-f) Verses
algortmicas das mesmas expresses. .........................................3-2
Figura 3-2. Operadores aritmticos. ...................................................3-3
Figura 3-3. Operadores lgicos. .........................................................3-8
Figura 3-4. Ordem de avaliao de uma expresso composta. ............. 3-10
Figura 4-1. Problema de lanamento de objeto. ...................................4-5
Figura 5-1. Teste de mesa para o trecho especificado em Algoritmo 5-6. .5-8
Figura 6-1. Exemplos de trechos de algoritmo com o comando para e seus
respectivos testes de mesa. .......................................................6-3
Figura 6-2. Teste de mesa para o Algoritmo 6-2. (O texto traz mais
detalhes.) ...............................................................................6-6
Figura 8-1. Esquema da varivel ponto1, que um registro com trs
campos reais, x, y e z, declarada no Algoritmo 8-1. ......................8-3
Figura 8-2. Exemplos de declaraes de tipos, incluindo o uso de outros
registros como campos. ............................................................8-7
Figura 9-1. Exemplo de escopo de declaraes. ................................. 9-11
Figura 10-1. Ilustrao do arranjo valor do Algoritmo 10-1.................. 10-3
Figura 11-1. Ilustrao de um arranjo de registros como uma tabela. ... 11-4
Construo de algoritmos iv
Sumrio
Lista de algoritmos
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
1-1 .................................................................................1-3
1-2 .................................................................................1-3
1-3 .................................................................................1-5
2-1 .................................................................................2-5
2-2 .................................................................................2-5
2-3 .................................................................................2-7
2-4 .................................................................................2-8
2-5 ............................................................................... 2-10
3-1 .................................................................................3-5
3-2 .................................................................................3-7
3-3 .................................................................................3-9
4-1 .................................................................................4-2
4-2 .................................................................................4-3
4-3 .................................................................................4-3
4-4 .................................................................................4-6
4-5 .................................................................................4-6
4-6 .................................................................................4-8
4-7 .................................................................................4-9
4-8 .................................................................................4-9
4-9 .................................................................................4-9
5-1 .................................................................................5-2
5-2 .................................................................................5-3
5-3 .................................................................................5-4
5-4 .................................................................................5-6
5-5 .................................................................................5-7
5-6 .................................................................................5-8
6-1 .................................................................................6-2
6-2 .................................................................................6-4
6-3 .................................................................................6-7
6-4 .................................................................................6-7
6-5 .................................................................................6-9
6-6 ............................................................................... 6-10
6-7 ............................................................................... 6-11
6-8 ............................................................................... 6-12
6-9 ............................................................................... 6-13
6-10.............................................................................. 6-14
6-11.............................................................................. 6-15
7-1 .................................................................................7-2
7-2 .................................................................................7-3
7-3 .................................................................................7-4
Construo de algoritmos v
Sumrio
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
8-1 .................................................................................8-2
8-2 .................................................................................8-4
8-3 .................................................................................8-5
9-1 .................................................................................9-2
9-2 .................................................................................9-4
9-3 .................................................................................9-7
9-4 ............................................................................... 9-12
10-1.............................................................................. 10-3
10-2.............................................................................. 10-5
10-3.............................................................................. 10-6
10-4.............................................................................. 10-8
10-5............................................................................ 10-11
10-6............................................................................ 10-12
10-7............................................................................ 10-13
11-1.............................................................................. 11-2
Lista de tabelas
Tabela 3-I. Lista das funes usuais para expresses aritmticas. ..........3-4
Tabela 3-II. Lista das funes usuais para expresses literais ................3-6
Tabela 3-III. Operadores relacionais...................................................3-7
Tabela 3-IV. Tabela verdade para o operador no. ...............................3-8
Tabela 3-V. Tabela verdade para o operador e.....................................3-9
Tabela 3-VI. Tabela verdade para o operador ou. .................................3-9
Tabela 3-VII. Exemplos de expresses com parnteses....................... 3-11
Tabela 9-I. Exemplos de declaraes de parmetros.............................9-9
Tabela 10-I. Ilustrao passo a passo dos valores de um arranjo para
atribuies sucessivas. ............................................................ 10-4
Unidade 1 -
3
4
algoritmo
8
9
3
4
algoritmo
8
9
jander moreira
jander moreira
4
5
Jander Moreira
Novembro de 2007 }
7
8
algoritmo
10
11
12
13
14
15
16
17
secundrios
18
19
20
21
22
23
24
25
jander moreira
27
ser apresentados
28
29
30
31 fim-algoritmo
jander moreira
jander moreira
jander moreira
jander moreira
jander moreira
Entrada
Unidade de
processamento
Sada
Memria
jander moreira
Algoritmo 2-1
1
documentao_do_algoritmo
2
3
declaraes_globais
4
5
6
algoritmo
declaraes_locais
7
8
9
lista_de_comandos
fim-algoritmo
2
3
4
algoritmo
declare
nome: literal
idade: inteiro
7
8
leia(nome)
10
leia(idade)
11
jander moreira
13
14 fim-algoritmo
jander moreira
abastecimentos realizados }
4
5
6
7
algoritmo
declare
quilometragem, abastecimento1, abastecimento2: real
8
9
10
leia(quilometragem)
11
leia(abastecimento1, abastecimento2)
12
13
14
15 fim-algoritmo
jander moreira
abastecimentos realizados }
4
5
6
algoritmo
declare
quilometragem, consumo,
9
10
11
leia(quilometragem)
12
leia(abastecimento1, abastecimento2)
13
14
{ clculo do consumo }
15
16
17
18
escreva(consumo, km/l)
19 fim-algoritmo
jander moreira
jander moreira
ABASTECIMENTOS REALIZADOS }
4
5
6
ALGORITMO
DECLARE
QUILOMETRAGEM, CONSUMO,
9
10
11
LEIA(QUILOMETRAGEM)
12
LEIA(ABASTECIMENTO1, ABASTECIMENTO2)
13
14
{ CLCULO DO CONSUMO }
15
16
17
18
ESCREVA(CONSUMO, KM/L)
19 FIM-ALGORITMO
jander moreira
jander moreira
Unidade 3 -
Expresses algortmicas
jander moreira
b
c+d
a+
b
c
d
(a)
(b)
(c)
a/b
a * b /(c + d )
a + b /(c / d )
(d)
(e)
(f)
jander moreira
maior
menor
%
/
+
(operador unrio)
*
(operador binrio)
jander moreira
Parmetros
Valor de
retorno
sen(r), cos(r),
tan(r)
real
real
Funes trigonomtricas,
com parmetros em
radianos
asen(r), acos(r),
real
real
Funes trigonomtricas
inversas, retornando o valor
do arco em radianos
ln(r)
real
real
log(r)
real
real
Logaritmo base 10
exp(r)
real
real
e elevado potncia r
pot(v, r)
real/inteiro,
real
sinal(i)
inteiro
inteiro
trunca(r) ou int(r)
real
inteiro
frac(r)
real
real
arred(r)
real
inteiro
atan(r)
Descrio
jander moreira
real/inteiro
mantendo o tipo
especificado no parmetro
resto(r, i)
real, inteiro
inteiro
quoc(r, i)
real, inteiro
inteiro
Retorna o quociente da
diviso inteira de r por i
4
5
6
algoritmo
declare totalBebidas, totalAlimentos,
valorPago, troco,
porcentagemGarom: real
9
10
11
12
13
{ clculos necessrios }
14
15
16
10/100,0 { 10% }
troco valorPago (totalBebidas + totalAlimentos +
17
porcentagemGarom)
18
19
20
escreva(Valor da conta:,
21
22
23
escreva(Troco:, troco)
24 fim-algoritmo
Parmetros
Valor de
retorno
Descrio
comprLiteral(s)
literal
inteiro
Retorna o comprimento
da cadeia de
caracteres, incluindo os
espaos
posLiteral(s1, s2)
literal,
literal
inteiro
Retorna a primeira
posio onde a cadeia
s1 ocorre na cadeia s2,
sendo que o primeiro
caractere considerado
como posio 0 (zero);
retorna -1 se no ocorrer
nenhuma vez.
literal,
inteiro,
inteiro
literal
Retorna a sub-cadeia de
s1, comeando na
posio n1 e
comprimento total n2
valLiteral (s)
literal
tipo equivalente
ao valor
numrico
representado
jander moreira
3
4
algoritmo
7
8
leia(prenome, sobrenome)
10
11
12
13
14
15
{ resultados }
16
escreva(formato1)
17
escreva(formato2)
18 fim-algoritmo
Funo
<>
>
<
>=
<=
Igual
Diferente
Diferente (smbolo alternativo)
Estritamente maior
Estritamente menor
Maior ou igual
Maior ou igual (smbolo alternativo)
Menor ou igual
Menor ou igual (smbolo alternativo)
jander moreira
maior
no
e
ou
menor
Figura 3-3. Operadores lgicos.
Resultado
no falso
verdadeiro
no verdadeiro falso
O operador e exige que ambos os operandos tenham valor
verdadeiro para que o resultado seja verdadeiro. Portanto, todas as
outras combinaes resultam falso. A Tabela 3-V mostra as combinaes e
os resultados.
jander moreira
Operao
falso e falso
falso e verdadeiro
verdadeiro e falso
verdadeiro e verdadeiro
Resultado
falso
falso
falso
verdadeiro
Operao
falso ou falso
falso ou verdadeiro
verdadeiro ou falso
verdadeiro ou verdadeiro
Resultado
falso
verdadeiro
verdadeiro
verdadeiro
tringulo pode ser formado (se existe) e qual o tipo dele (eqiltero,
issceles ou escaleno) }
4
5
6
algoritmo
declare
existeTringulo,
10
11
12
13
14
{ verificaes necessrias }
15
16
jander moreira
18
19
20
21
22
23
{ resultados }
24
25
26
27
28 fim-algoritmo
7 + 2 * 5 < 20
ou 1 + 2 * 2 10 5
e peter parker
1
2
3
4
5
6
7
8
9
10
jander moreira
Expresso
3 * (8 + 14) + 4
-100 * (200 50)/(9
(200 50)/(9 1) *
(-5 14,0)/((2 + 6)
(8 + 7)/2 > 6 + 1
45 > 10 e (torre <
Resultado
70
1)
-100
* 10)
-1875
-1800
-0,2375
falso
verdadeiro
jander moreira
4.3 Estratgia de
algoritmos
abordagem
para
desenvolvimento
de
3
4
5
algoritmo
remova todas as roupas, separando-as sobre a cama segundo grupos
6
7
8
similares
organize cada grupo formado e o acondicione nos locais apropriados
fim-algoritmo
jander moreira
Algoritmo 4-2
1
2
3
4
5
6
7
algoritmo
{ remoo de todas as roupas, separando-as sobre a cama
segundo grupos similares }
para cada pea de roupa,
pegue-a do guarda-roupa
10
11
12
13
14
organize o grupo
15
16
17 fim-algoritmo
3
4
5
6
7
algoritmo
{ remoo de todas as roupas, separando-as sobre a cama
segundo grupos similares }
para cada pea de roupa,
pegue-a do guarda-roupa
10
11
12
coloque-a no grupo,
13
14
{ no existe }
15
16
17
18
19
{ organizao do grupo }
20
21
22
23
24
25
jander moreira
27
28
29
30
a pea
coloque a pea no local, obedecendo a organizao
31 fim-algoritmo
jander moreira
v0
d
v0 cos
e t d +e =
sh
. Portanto, os
v0 cos
d +e
. Nestes momentos, a altura
v0 cos
t2
. Novamente,
2
3
4
contrrio }
6
7
8
9
10
algoritmo
declaraes
11
12
13
14
do objeto
15
16
17
18
19 fim-algoritmo
5
6
7
contrrio }
{ A Figura 4-1 deve ser consultada para melhor referncia (apostila
de Construo de Algoritmos, pgina 4-5) }
8
9
algoritmo
10
{ declaraes }
11
declare
12
13
14
colidiu: lgico
15
16
17
18
19
20
21
jander moreira
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{ escrita do resultado }
39
{ escreve V ou F }
40 fim-algoritmo
jander moreira
6
7
8
algoritmo
{ ref declarar variveis }
9
10
11
12
13
14
15
escreva(mdiaFinal, aprovado)
16 fim-algoritmo
jander moreira
4
5
leia(seminrio) { 1 seminrio }
fim-refinamento
Algoritmo 4-8
1
2
3
4
6
7
8
algoritmo
{ ref declarar variveis }
9
10
11
12
13
leia(seminrio) { 1 seminrio }
14
15
16
17
jander moreira
19
20
21
22
escreva(mdiaFinal, aprovado)
23 fim-algoritmo
jander moreira
jander moreira
Unidade 5 -
Comandos condicionais
jander moreira
3
4
5
algoritmo
declare notaProva1, notaProva2, mdia: real
6
7
jander moreira
leia(notaProva1, notaProva2)
9
10
{ clculo da mdia }
11
12
13
{ resultados }
14
escreva(mdia)
15
16
17
escreva(Aprovado :)...)
seno
18
19
escreva(Reprovado :(...)
fim-se
20 fim-algorimo
(parte omitida)
2
3
leia(saldo)
leia(taxaJuros, nmeroDias)
fim-se
9
10
(parte omitida)
jander moreira
tringulo pode ser formado (se existe) e qual o tipo dele (eqiltero,
issceles ou escaleno) }
4
5
6
algoritmo
declare
classificao: literal
9
10
11
12
13
14
15
16
17
18
19
20
seno
se lado1 = lado2 ou lado1 = lado3 ou
21
{ issceles? }
22
23
{ lados iguais? }
seno
jander moreira
24
25
26
fim-se
fim-se
27
28
{ escrita da classificao }
29
escreva(classificao)
30
fim-se
31 fim-algoritmo
jander moreira
2
3
4
algoritmo
declare idade: inteiro
5
6
{ leitura da idade }
leia(idade)
8
9
{ classificao }
10
11
0:
escreva(beb)
12
1..10:
escreva(criana)
13
11..14:
escreva(pr-adolescente)
14
15..18:
escreva(adolescente)
15
16
17
18
19..120: escreva(adulto)
seno
escreva(Idade invlida ou sem classificao definida)
fim-caso
19 fim-algoritmo
jander moreira
{ ... }
-100..-1:
2, 3, 5, 7:
1, 4, 6, 8..10:
15:
escreva(alguma coisa)
seno
escreva(outra coisa)
10
11
fim-se
20..30:
12
leia(idade)
se idade < 18 ento
13
escreva(Menor de idade)
14
seno
15
16
17
fim-se
16, 40, 80:
18
fim-caso
19
{ ... }
escreva(16, 40 ou 80...)
jander moreira
{ ... }
valor1 10
valor2 valor1 * 5
fim-se
valor3 valor3/2
10
11
{ ... }
valor1
valor2
valor3
sada
10
50
35
35 60
17
60 50 17
60
jander moreira
jander moreira
Unidade 6 -
Comandos de repetio
jander moreira
3
4
5
algoritmo
declare celsius: inteiro { sempre inteiro, neste caso }
7
8
10
11
12
<--->
, fahrenheit)
fim-para
13 fim-algoritmo
jander moreira
6
inicial 100
100
100
inicial inicial 10
fim-para
escreva(valor, inicial)
90
90
80
80
70
valorBase 15
para valor valorBase/3 at valorBase/2 { 5 a 7 }
valorBase valorBase 1
fim-para
escreva(valorBase)
15
14
13
12
12
jander moreira
2
3
4
algoritmo
declare nome: literal
5
6
leia(nome)
8
9
10
jander moreira
{ escreve a saudao }
12
13
14
15
leia(nome)
16
fim-enquanto
17
18
{ despedida }
19
20 fim-algoritmo
sada
Comentrio
Otvio
Pedro
Adalberto
fim
tchau!
(a)
jander moreira
sada
Comentrio
fim
tchau!
(b)
Figura 6-2. Teste de mesa para o Algoritmo 6-2. (O texto traz mais detalhes.)
3
4
5
algoritmo
declare celsius, fahrenheit: real
6
7
{ gerao da tabela }
celsius 0
faa
{ valor inicial }
10
11
12
13
14
15
16
enquanto celsius 10
17 fim-algoritmo
Algoritmo 6-4
1
2
3
4
5
algoritmo
declare celsius, fahrenheit: real
6
7
{ gerao da tabela }
celsius 0
faa
{ valor inicial }
10
11
12
13
14
15
16
17 fim-algoritmo
jander moreira
jander moreira
{ calcular a mdia de trs provas para cada aluno de uma turma, dado o
nmero de alunos e as notas das provas }
3
4
5
algoritmo
declare
i, nmeroAlunos: inteiro
8
9
10
leia(nmeroAlunos)
11
12
13
14
15
16
17
18
19
20
escreva(mdia)
fim-para
21 fim-algoritmo
jander moreira
{ dados o nome, o preo e o tipo dos vinhos (indicados aqui por T para
5
6
algoritmo
declare
nome, nomeMaior,
10
11
12
13
preoMaior -1
14
faa
15
{ dados }
16
17
18
19
20
nomeMaior nome
21
preoMaior preo
22
tipoMaior tipo
Esta restrio para evitar o problema de dois ou mais vinhos empatados como mais caros.
jander moreira
fim-se
24
at nome = fim
25
26
{ apresentao do resultado }
27
se preoMaior = -1 ento
28
29
30
31
32 fim-algoritmo
3
4
5
algoritmo
declare
i, nmeroEntradas: inteiro
8
9
10
leia(nmeroEntradas)
11
12
13
se nmeroEntradas 0 ento
escreva(No h dados; portanto no h menor temperatura)
jander moreira
seno
15
16
leia(temperatura)
17
18
19
20
21
{ leitura}
22
leia(temperatura)
23
24
25
26
27
fim-se
28
fim-para
29
30
{ resultado }
31
escreva(menorTemperatura)
32
fim-se
33 fim-algoritmo
4
5
6
algoritmo
declare
i, nmeroPessoas,
9
10
11
leia(nmeroPessoas)
12
13
jander moreira
conta18 0
15
conta60 0
16
17
{ leitura da idade }
18
leia(idade)
19
20
{ analisa a idade }
21
se idade 18 ento
22
23
24
25
fim-se
26
27
fim-se
fim-para
28
29
{ resultados }
30
se conta18 = 0 ento
31
32
33
34
35
36
% tm mais de 60 anos)
fim-se
37 fim-algoritmo
iguais a zero }
5
6
7
algoritmo
declare
jander moreira
11
nmeroItens 0
12
valorTotal 0
13
somaUnitrios 0
14
15
16
leia(preo, quantidade)
17
18
{ conta e acumula }
19
nmeroItens nmeroItens + 1
20
21
22
23
24
leia(preo, quantidade)
25
fim-enquanto
26
27
{ resultados }
28
29
se nmeroItens = 0 ento
30
31
32
33
34
1,0 * somaUnitrios/nmeroItens)
fim-se
35 fim-algoritmo
cos x = 1
x2 x4 x6
+
+ ... e, deste modo, elaborar um algoritmo para, dado
2! 4! 6!
3
4
5
6
algoritmo
declare i, termo, baseFatorial, fatorial: inteiro
cosseno, ngulo: real
jander moreira
leia(ngulo, nmeroTermos)
{ ngulo em radianos }
10
11
12
cosseno 0
13
baseFatorial 1
14
fatorial 1
15
termo 1
16
{ acumulador do resultado }
17
{ faz o somatrio }
18
se i % 2 = 1 ento
19
20
seno
21
22
fim-se
23
24
25
26
baseFatorial baseFatorial + 2
27
28
fim-para
29
30
{ resultado calculado }
31
32 fim-algoritmo
3
4
5
algoritmo
declare
jander moreira
{ leitura do nmero }
leia(valor)
9
10
11
soma 0
12
para i 1 at valor/2
13
se valor % i = 0 ento
soma soma + i
14
15
16
fim-se
fim-para
17
18
{ resultado }
19
20
21
22
23
24 fim-algoritmo
jander moreira
Unidade 7 -
Ponteiros
jander moreira
3
4
5
algoritmo
declare
valorReal: real
valorLiteral: literal
endereoReal: real
endereoLiteral: literal
10
11
12
endereoReal &valorReal
13
endereoLiteral &valorLiteral
14
15
{ escrita do resultado }
16
17
18 fim-algoritmo
jander moreira
{ dada uma varivel, modificar seu contedo usando apenas seu endereo }
2
3
4
algoritmo
declare valor: inteiro
ponteiro: inteiro
{ um inteiro comum }
{ um ponteiro para inteiro }
6
7
valor 100
9
10
11
ponteiro &valor
12
13
14
ponteiro 200
15
16
17
escreva(valor)
{ 200!!! }
18 fim-algoritmo
jander moreira
3
4
5
algoritmo
declare
nmeroPassos,
Ponteiro: inteiro
9
10
{ atribuies iniciais }
11
valor1 0
12
valor2 0
13
14
{ repetio }
15
leia(nmeroPassos)
16
17
{ escolha da varivel }
18
se i % 5 = 0 ento
ponteiro &valor1
19
20
21
22
seno
ponteiro &valor2
fim-se
23
jander moreira
25
ponteiro ponteiro + i
26
se ponteiro % 2 = 1 ento
ponteiro ponteiro 1
27
28
29
fim-se
fim-para
30
31
{ escritas }
32
escreva(valor1, valor2)
33 fim-algoritmo
jander moreira
Unidade 8 registros
jander moreira
d (p) =
Algoritmo 8-1
1
2
3
4
5
6
7
algoritmo
declare
ponto1, ponto2: registro
x, y, z: real
fim-registro
jander moreira
9
10
11
12
13
14
15
16
17
pot(ponto1.z, 2))
distncia2 raiz(pot(ponto2.x, 2) + pot(ponto2.y, 2) +
18
pot(ponto2.z, 2))
19
20
{ comparao e resultado }
21
22
23
24
25
26
27
28
29
30 fim-algoritmo
ponto1.x
ponto1.y
ponto1.z
Figura 8-1. Esquema da varivel ponto1, que um registro com trs campos reais,
x, y e z, declarada no Algoritmo 8-1.
jander moreira
3
4
5
algoritmo
declare
ponto,
pontoMaisPrximo: registro
x, y, z: real
fim-registro
10
distncia: real
11
12
13
leia(nmeroPontos)
14
15
se nmeroPontos 0 ento
16
17
18
19
20
pontoMaisPrximo ponto
21
22
pot(ponto.z, 2))
23
24
25
26
27
28
pot(ponto.z, 2))
29
30
{ comparao }
31
32
pontoMaisPrximo ponto
33
34
35
fim-se
fim-para
36
37
{ resultado }
38
39
40
pontoMaisPrximo.y, pontoMaisPrximo.z)
fim-se
41 fim-algoritmo
jander moreira
{ dados o nome, o preo e o tipo dos vinhos (indicados aqui por T para
5
6
7
algoritmo
tipo tVinho: registro
nome,
tipo: literal
10
preo: real
11
12
fim-registro
declare
13
14
15
16
vinhoCaro.preo -1
17
faa
18
{ dados }
19
20
21
22
23
24
25
vinhoCaro vinho
{ copia tudo }
fim-se
at vinho.nome = fim
jander moreira
{ apresentao do resultado }
28
se vinhoCaro.preo = -1 ento
29
30
31
32
33 fim-algoritmo
A notao que usa o t para indicar um tipo uma opo de estilo, e no uma regra. A adoo desta
estratgia , portanto, opcional. Ressalta-se, porm, que a diferenciao entre variveis e tipos ajuda
na clareza e permite uma melhor organizao do algoritmo, servindo como auto-documentao.
jander moreira
{ varivel }
jander moreira
Unidade 9 -
Sub-rotinas
jander moreira
3
4
5
algoritmo
tipo tRacional: registro
fim-registro
8
9
declare
10
11
12
13
jander moreira
leia(nmero1.numerador, nmero1.denominador)
15
leia(nmero2.numerador, nmero2.denominador)
16
17
{ clculo da soma }
18
19
20
nmero1.denominador * nmero2.numerador
resultado.denominador nmero1.denominador * nmero2.denominador
21
22
{ clculo do MDC }
23
valor1 resultado.numerador
24
valor2 resultado.denominador
25
faa
26
27
valor1 valor2
valor2 resto
28
29
at resto = 0
30
31
{ simplificao da razo }
32
resultado.numerador resultado.numerador/valor1
33
resultado.denominador resultado.denominador/valor1
34
35
{ escrita da soma }
36
escreva(resultado.numerador, /, resultado.denominador)
37
38
{ clculo do produto }
39
40
41
42
{ clculo do MDC }
43
valor1 resultado.numerador
44
valor2 resultado.denominador
45
faa
46
47
valor1 valor2
48
49
valor2 resto
at resto = 0
50
51
{ simplificao da razo }
52
resultado.numerador resultado.numerador/valor1
53
resultado.denominador resultado.denominador/valor1
54
55
{ escrita do produto }
56
escreva(resultado.numerador, /, resultado.denominador)
57 fim-algoritmo
jander moreira
3
4
{ definio do tipo }
fim-registro
8
9
12
13
{ clculo do MDC }
14
valor1 racional.numerador
15
valor2 racional.denominador
16
faa
17
18
valor1 valor2
valor2 resto
19
20
at resto = 0
21
22
{ simplificao da razo }
23
racional.numerador racional.numerador/valor1
24
racional.denominador racional.denominador/valor1
25 fim-procedimento
26
27 algoritmo
28
29
30
31
leia(nmero1.numerador, nmero1.denominador)
32
leia(nmero2.numerador, nmero2.denominador)
33
jander moreira
{ clculo da soma }
35
36
nmero1.denominador * nmero2.numerador
37
38
simplifiqueRacional(resultado)
39
40
{ escrita da soma }
41
escreva(resultado.numerador, /, resultado.denominador)
42
43
{ clculo do produto }
44
45
46
simplifiqueRacional(resultado)
47
48
{ escrita do produto }
49
escreva(resultado.numerador, /, resultado.denominador)
50 fim-algoritmo
jander moreira
9.3.1 Procedimentos
Um procedimento uma forma de sub-rotina. Sua forma genrica,
apresentada abaixo, delimita a especificao da sub-rotina.
procedimento identificador(lista_de_parmetros)
{ comentrio de descrio do procedimento }
declaraes_locais
conjunto_de_comandos
fim-procedimento
jander moreira
4
5
jander moreira
7
8
10
11 fim-procedimento
12
13 procedimento transformeEmPositivo(var valor: real)
14 { transforma o valor de um nmero real em positivo }
15
16
17
18
{ transforma em positivo }
fim-se
19 fim-procedimento
20
21 algoritmo
22
23
24
25
faa
26
leia(nmero)
27
28
escrevaInteiroEFracionrio(nmero)
29
30
escreva(O mdulo :)
31
transformeEmPositivo(nmero)
32
33
escreva(nmero)
enquanto nmero 999
34 fim-algoritmo
jander moreira
Comentrio
Dois
parmetros
referncia.
literais,
ambos
por
jander moreira
Escopo, no contexto deste texto, pode ter seu significado entendido como rea de abrangncia.
jander moreira
declare
umInteiro: inteiro
valor: real
procedimento meuProcedimento(var v1: inteiro, var v2: real)
declare umInteiro: inteiro
v1, v2,
umInteiro
meuProcedimento
fim-procedimento { meuProcedimento }
declare outroInteiro: inteiro
outroInteiro
seuProcedimento
valor
fim-algoritmo
jander moreira
9.3.4 Funes
Outro tipo de sub-rotina so as funes. Um procedimento substitui
um comando, como se um novo comando fosse criado. As funes
substituem um valor.
Na Unidade 3 foram apresentadas vrias funes pr-definidas * . Esta
seo apresenta uma forma de se escrever uma sub-rotina que pode ser
usada como uma nova funo. Para tanto, usado o par funo/fimfuno para indicar o novo cdigo. O formato apresentado na seqncia.
2
3
5
6
retorne valor1
seno
retorne valor2
10
fim-se
11 fim-funo
12
13 funo menorReal(valor1: real, valor2: real): real
14 { retorna o menor entre valor1 e valor2; se iguais, retorna um deles }
15
16
17
18
19
retorne valor1
seno
retorne valor2
Ver Tabela 3-I, sobre operaes aritmticas e Tabela 3-II, sobre operaes literais.
jander moreira
fim-se
21 fim-funo
22
23 funo mdulo(valor: real): real
24 { retorna o valor absoluto do valor }
25
26
27
28
fim-se
29
retorne valor
30 fim-funo
31
32 { parte principal }
33 algoritmo
34
declare
35
36
37
38
{ entrada de dados }
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
primeiroReal, e, segundoReal, ,
57
menorReal(mdulo(primeiroReal), mdulo(segundoReal))
58 fim-algoritmo
jander moreira
jander moreira
10.3.1
jander moreira
3
4
algoritmo
{ declarao de variveis }
Declare
soma, contador, i,
mdia: real
10
11
12
soma 0
13
para i 0 at 19 faa
14
leia(valor[i])
15
16
fim-para
17
mdia soma/20.0
18
19
20
contador 0
21
para i 0 at 19 faa
22
23
24
fim-se
25
fim-para
26
27
{ resultado }
28
29 fim-algoritmo
valor
10
11
12
13
14
15
16
17
18
19
jander moreira
{ primeiro da lista }
para i 1 at 4
{ demais posies }
lista[i] lista[i 1] * 2 + 1
fim-para
Comentrio
15
15
31
jander moreira
10.3.2
no clculo da mdia }
4
5
6
algoritmo
{ declaraes }
declare
i: inteiro
10
11
nomeAluno[nmeroAlunos]: literal
12
mdia[nmeroAlunos]: real
13
14
15
melhorMdia -1
16
17
18
19
20
21
22
23
fim-se
fim-para
24
25
26
27
28
29
30
31
32 fim-algoritmo
jander moreira
4
5
6
algoritmo
{ declaraes }
declare
i: inteiro
10
11
nomeAluno[mximoAlunos]: literal
12
mdia[mximoAlunos]: real
13
14
15
leia(nmeroAlunos)
16
17
18
19
20
21
melhorMdia -1
22
{ fora substituio }
23
24
jander moreira
27
28
29
30
fim-se
fim-para
fim-se
31
32
33
34
35
36
37
38
39 fim-algoritmo
jander moreira
resultado da unio }
4
5
no conjunto }
7
8
nmeroElementos: inteiro
10
elementos[mximoElementos]: real
11
fim-registro
12
13 procedimento insereConjunto(elemento: real, var conjunto: tConjunto,
14
17
18
declare
19
i: inteiro
20
achou: lgico
21
22
23
sucesso falso
24
25
26
27
i 0
28
achou falso
29
30
31
fim-se
32
33
se no achou ento
34
35
conjunto.elemento[conjunto.nmeroElementos] elemento
36
conjunto.nmeroElementos conjunto.nmeroElementos + 1
37
sucesso verdadeiro
38
39
40
fim-se
fim-se
41 fim-procedimento
jander moreira
declare
46
nmeroElementos: inteiro
47
elemento: real
48
inseroOk: lgico
49
50
51
conjunto.nmeroElementos 0
52
53
54
faa
55
leia(nmeroElementos)
56
57
58
59
fim-se
enquanto nmeroElementos < 0 ou nmeroElementos > mximoElementos
60
61
62
63
leia(elemento)
64
65
66
se no inseroOk ento
67
68
69
fim-se
fim-enquanto
70 fim-procedimento
71
72 procedimento escrevaConjunto(conjunto: tConjunto)
73 { escrita dos elementos de um conjunto }
74
declare i: inteiro
75
76
se conjunto.nmeroElementos = 0 ento
77
78
79
80
81
82
escreva(conjunto.elemento[i])
fim-para
fim-se
83 fim-procedimento
84
85 procedimento unaConjuntos(var resultado: tConjunto,
86
declare
89
i: inteiro
90
inseroOk: lgico
91
jander moreira
93
resultado conjunto1
94
95
96
inseroOk verdadeiro
97
i 0
98
99
100
i i + 1
101
fim-para
102
103
se no inseroOk ento
104
105
106
107 fim-procedimento
108
109 { parte principal }
110 algoritmo
111
112
113
{ entrada de dados }
114
leiaConjunto(conjunto1)
115
leiaConjunto(conjunto2)
116
117
{ unio }
118
119
120
{ resultado }
121
122
escrevaConjunto(conjunto1)
123
escreva(e)
124
escrevaConjunto(conjunto2)
125
escreva(contm os elementos)
126
escrevaConjunto(conjuntoUnio)
127 fim-algoritmo
jander moreira
2
3
6
7
declare
i, posio: inteiro
8
9
10
sucesso falso
11
12
13
{ busca se j existe }
14
posio 0
15
16
17
18
19
20
se posio conjunto.nmeroElementos ou
jander moreira
22
23
i conjunto.nmeroElementos 1
24
25
i i - 1
26
27
fim-enquanto
28
29
{ insere no arranjo }
30
conjunto.elementos[posio] elemento
31
conjunto.nmeroElementos conjunto.nmeroElementos + 1
32
sucesso verdadeiro
33
34
35
fim-se
fim-se
36 fim-algoritmo
Algoritmo 10-6
1
2
3
4
5
6
7
{ localiza o elemento }
i 0
10
11
12
fim-enquanto
13
14
15
se i conjunto.nmeroElementos ou
16
17
18
seno
19
{ remove o item }
20
21
22
conjunto.elementos[i] conjunto.elementos[i + 1]
23
i i + 1
24
fim-enquanto
25
conjunto.nmeroElementos conjunto.nmeroElementos - 1
26
27
28
sucesso verdadeiro
fim-se
29 fim-procedimento
jander moreira
10.3.3
10.3.4
2
3
constante
6
7
dados[mximoLinhas][mximoColunas]: real
10
fim-registro
11
12 procedimento leiaMatriz(var matriz: tMatriz)
13 { obteno dos dados da matriz, incluindo as dimenses }
14
declare i, j: inteiro
15
16
jander moreira
faa
18
19
20
21
matriz.nmeroColunas < 0 ou
22
23
24
25
26
27
leia(matriz.dados[i][j])
28
29
fim-para
fim-para
30 fim-procedimento
31
32 procedimento escrevaMatriz(matriz: tMatriz)
33 { escrita dos dados armazenados na matriz }
34
declare i, j: inteiro
35
36
{ sada }
37
38
39
escreva(Matriz invlida)
seno
40
{ apresentao da matriz }
41
42
43
escreva(matriz.dados[i][j])
44
fim-para
45
46
fim-para
fim-se
47 fim-procedimento
48
49 funo Quadrada(matriz: tMatriz): lgico
50 { verifica se uma matriz quadrada }
51
52
53 fim-funo
54
55 funo traoMatriz(matriz: tMatriz): real
56 { calcula o trao da matriz; se no for quadrada, retorna 0 }
57
declare
58
i: inteiro
59
soma: real
60
61
62
soma 0
63
se Quadrada(matriz) ento
64
65
66
jander moreira
fim-se
68
69
{ resultado }
70
retorne soma
71 fim-funo
72
73 procedimento multipliqueMatriz(var resultado: tMatriz,
74
78
79
80
81
{ no possvel multiplicar }
82
resultado.nmeroLinhas 0
resultado.nmeroColunas 0
83
84
seno
85
{ calcula a multiplicao }
86
resultado.nmeroLinhas matriz1.nmeroLinhas
87
resultado.nmeroColunas matriz2.nmeroColunas
88
89
90
resultado.dados[i][j] 0
91
92
93
matriz1.dados[i][k] * matriz2.dados[k][j]
94
fim-para
95
96
97
fim-para
fim-para
fim-se
98 fim-procedimento
99
100 funo temDiagonalZero(matriz: tMatriz): lgico
101 { retorna verdadeiro se todos os elementos da diagonal principal
102
103
retorna falso }
104
declare
105
tudoCerto: lgico
106
i: inteiro
107
108
{ verificao }
109
tudoCerto Quadrada(matriz)
110
i 0
111
112
113
114
tudoCerto matriz.dados[i][i] = 0
i i + 1
fim-enquanto
115
116
retorne tudoCerto
jander moreira
declare
121
nmeroLeituras: inteiro
122
123
124
125
{ iniciao }
126
maiorTrao -1E20
127
128
129
leia(nmeroLeituras)
130
131
132
leiaMatriz(matriz)
133
134
135
trao traoMatriz(matriz)
136
137
matrizSelecionada matriz
138
139
fim-se
140
141
142
143
se no Quadrada(matriz) ento
144
145
seno
146
147
se temDiagonalZero(matriz) ento
148
149
seno
150
151
fim-se
152
153
fim-se
fim-para
154
155
156
157
158
159
160
161
162
escrevaMatriz(matrizSelecionada)
163
fim-se
164 fim-algoritmo
jander moreira
10.3.5
Arranjos multidimensionais
jander moreira
jander moreira
jander moreira
{ obter, para uma relao de dados sobre vinhos, o vinho de maior venda
e a lista de todos os vinhos que tenham venda abaixo da mdia geral do
grupo }
constante mximoElementos: inteiro = 300
5
6
nome,
nomeFabricante,
nomeDistribuidor,
10
tipo: literal
11
anoSafra,
12
anoEnvasamento: inteiro
13
preo: real
14
unidades: inteiro
15
16
fim-registro
tListaVinhos[mximoElementos]: tVinhos
{ arranjo de registros }
17
18 procedimento leiaVinho(var vinho: tVinho)
19 { leitura de um registro de vinho }
20
21
22
23
vinho.preo, vinho.unidades)
24 fim-procedimento
25
26 procedimento escrevaVinho(vinho: tVinho)
27 { leitura de um registro de vinho }
28
29
30
31
vinho.preo, vinho.unidades)
32 fim-procedimento
33
34 funo calculeVendas(vinho: tVinho): real
35 { retorna o produto do preo pelo nmero de unidades vendidas }
36
37
38 fim-funo
39
40 { parte principal do algoritmo }
41 algoritmo
42
43
declare
i, nmeroItens: inteiro
44
45
vinho: tListaVinhos
46
jander moreira
48
leia(nmeroItens)
49
somaVendas 0
50
maiorVenda -1
51
52
leiaVinho(vinho[i])
53
54
55
56
57
fim-se
58
fim-para
59
mdiaVendas somaVendas/nmeroItens
60
61
62
63
64
65
66
escrevaVinho(vinho[i])
fim-se
fim-para
67
68
69
70
71
72
73
escrevaVinho(vinho[i])
fim-se
fim-para
74 fim-algoritmo
jander moreira
0
1
2
3
4
5
6
7
8
9
10
11
nome
nomeFrabricante nomeDistribuidor tipo anoSafra anoEnvasamento preo unidades
Cabernet
Salton
Perrichet
R
2000
2002
48,23
45
Chiraz
Guy Salmona
Os Cascos
T
2004
2006
87,04
10
Merlot
Miolo
Perrichet
T
2006
2007
28,90
123
Chiraz
Benjamin Romeo
VERCOOP
B
2005
2006
31,33
54
Chiraz
Benjamin Romeo
VERCOOP
B
1998
1999
48,22
22
Merlot
Salton
Anadil
T
2002
2002
102,50
23
Cabernet
Salton
Os Cascos
R
1956
1956
299,90
2
Chiraz
Benjamin Romeo
Anadil
B
2006
2006
87,34
34
Merlot
Guy Salmona
Perrichet
B
2006
2007
59,28
76
Cabernet
Salton
Perrichet
T
1997
2001
29,90
33
Cabernet
Miolo
Os Cascos
T
2006
2007
12,09
76
Merlot
Salton
VERCOOP
T
1937
1938
853,22
1
registro
campo
jander moreira
jander moreira