Escolar Documentos
Profissional Documentos
Cultura Documentos
Construção de algoritmos
1
Jander Moreira
Reitor
Prof. Dr. Targino de Araújo Filho
Pró-Reitora de Graduação
Profa. Dra. Emília Freitas de Lima
Coordenação UAB-UFSCar
Prof. Dr. Daniel Mill
Profa. Dra. Denise Abreu-e-Lima
Profa. Dra. Valéria Sperduti Lima
Profa. Dra. Joice Lee Otsuka
2
Construção de algoritmos
Jander Moreira
Construção de algoritmos
3
Jander Moreira
C
2009, Jander Moreira. Todos os Direitos Reservados.
Arte da Capa
Jorge Oliveira
UAB-UFSCar
Telefone (0xx16) 3351 8420
www.uab.ufscar.br
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida por qualquer
forma e/ou quaisquer meios (eletrônicos ou mecânicos, incluindo fotocópia e gravação) ou arquivada em
qualquer sistema de banco de dados sem permissão escrita do titular do direito autoral.
4
Construção de algoritmos
Sumário
Apresentação ........................................................................ 9
5
Jander Moreira
Unidade 7: Ponteiros
7.1 Primeiras palavras ................................................................ 127
7.2 Uma questão de organização .................................................. 127
7.3 Ponteiros e endereços na memória .......................................... 128
7.3.1 Memória e endereçamento ............................................. 128
7.3.2 Acesso à memória com ponteiros ...................................... 129
7.4 Considerações finais ............................................................ 133
6
Construção de algoritmos
Unidade 9: Subrotinas
9.1 Primeiras palavras ................................................................ 149
9.2 Separando para organizar ...................................................... 149
9.3 Conceituação de subrotinas e fluxo de execução ....................... 150
9.3.1 Procedimentos ............................................................ 157
9.3.2 Parâmetros formais ....................................................... 158
9.3.3 Regras de escopo de declarações ..................................... 163
9.3.4 Funções ..................................................................... 166
9.4 Considerações finais ............................................................ 169
7
Jander Moreira
8
Construção de algoritmos
Apresentação
9
Jander Moreira
10
Construção de algoritmos
Ficha da disciplina
11
Jander Moreira
12
Construção de algoritmos
13
Jander Moreira
14
Construção de algoritmos
Unidade 1
15
Jander Moreira
16
Construção de algoritmos
17
Jander Moreira
18
Construção de algoritmos
19
Jander Moreira
Algoritmo 1-1
4 algoritmo
9 fim-algoritmo
20
Construção de algoritmos
Algoritmo 1-2
4 algoritmo
9 fim-algoritmo
21
Jander Moreira
22
Construção de algoritmos
3) Cada instrução deve ocupar uma linha diferente; caso não haja
espaço na linha para especificá-la, poderá ser continuada na
linha de baixo, mas com tabulação maior, para indicar que é
uma continuação;
23
Jander Moreira
Algoritmo 1-3
5 Jander Moreira
6 Março de 2009 }
8 algoritmo
12
17
21
24
Construção de algoritmos
26 ser apresentados
27
30 fim-algoritmo
25
Jander Moreira
26
Construção de algoritmos
Unidade 2
27
Jander Moreira
28
Construção de algoritmos
29
Jander Moreira
30
Construção de algoritmos
31
Jander Moreira
32
Construção de algoritmos
Entrada Unidade de
processamento
Saída
Memória
33
Jander Moreira
34
Construção de algoritmos
Algoritmo 2-1
1 documentação_do_algoritmo
2
3 declarações_globais
4
5 algoritmo
6 declarações_locais
7
8 lista_de_comandos
9 fim-algoritmo
35
Jander Moreira
Algoritmo 2-2
3 algoritmo
4 declare
5 nome: literal
6 idade: inteiro
9 leia(nome)
10 leia(idade)
11
14 fim-algoritmo
36
Construção de algoritmos
37
Jander Moreira
leia(lista_de_variáveis)
escreva(lista_de_expressões)
38
Construção de algoritmos
Algoritmo 2-3
3 abastecimentos realizados }
5 algoritmo
6 declare
10 leia(quilometragem)
11 leia(abastecimento1, abastecimento2)
12
15 fim-algoritmo
39
Jander Moreira
Algoritmo 2-4
3 abastecimentos realizados }
5 algoritmo
6 declare
7 quilometragem, consumo,
11 leia(quilometragem)
12 leia(abastecimento1, abastecimento2)
13
14 { cálculo do consumo }
16
18 escreva(consumo, “ km/l”)
19 fim-algoritmo
40
Construção de algoritmos
identificador ß expressão
41
Jander Moreira
42
Construção de algoritmos
Algoritmo 2-5
3 ABASTECIMENTOS REALIZADOS }
5 ALGORITMO
6 DECLARE
7 QUILOMETRAGEM, CONSUMO,
11 LEIA(QUILOMETRAGEM)
12 LEIA(ABASTECIMENTO1, ABASTECIMENTO2)
13
14 { CÁLCULO DO CONSUMO }
16
18 ESCREVA(CONSUMO, “ KM/L”)
19 FIM-ALGORITMO
43
Jander Moreira
44
Construção de algoritmos
Unidade 3
Expressões algorítmicas
45
Jander Moreira
46
Construção de algoritmos
47
Jander Moreira
48
Construção de algoritmos
a b b
b a a+
c+d c
d
(a) (b) (c)
a/ b a * b /( c + d ) a + b /(c / d)
(d) (e) (f)
49
Jander Moreira
maior
% –(operador unário)
/ *
+ –(operador binário)
menor
50
Construção de algoritmos
51
Jander Moreira
retorno
raiz(r) real real Raiz quadrada (argumentos
negativos são inválidos)
tan(r)
asen(r), real real Funções trigonométricas
inteiro, primeiro
real argumento
sinal(i) inteiro inteiro Retornará 1 se o valor for
positivo ou –1 se for negativo;
zero se for nulo
52
Construção de algoritmos
Algoritmo 3-1
5 algoritmo
7 valorPago, troco,
8 porcentagemGarçom: real
12
13 { cálculos necessários }
16
53
Jander Moreira
18 escreva(“Valor da conta:”,
21 escreva(“Troco:”, troco)
22 fim-algoritmo
54
Construção de algoritmos
retorno
comprLiteral(s) literal inteiro Retorna o comprimen-
to da cadeia de
caracteres, incluindo
os espaços
55
Jander Moreira
Algoritmo 3-2
4 algoritmo
9 leia(prenome, sobrenome)
10
14
15 { resultados }
16 escreva(formato1)
17 escreva(formato2)
18 fim-algoritmo
56
Construção de algoritmos
Operador Função
= Igual
¹ Diferente
<> Diferente (símbolo alternativo)
> Estritamente maior
< Estritamente menor
³ Maior ou igual
>= Maior ou igual (símbolo alternativo)
£ Menor ou igual
<= Menor ou igual (símbolo alternativo)
57
Jander Moreira
maior
não
e
ou
menor
Operação Resultado
não falso verdadeiro
não verdadeiro falso
58
Construção de algoritmos
Operação Resultado
falso e falso falso
falso e verdadeiro falso
verdadeiro e falso falso
verdadeiro e verdadeiro verdadeiro
Operação Resultado
falso ou falso falso
falso ou verdadeiro verdadeiro
verdadeiro ou falso verdadeiro
verdadeiro ou verdadeiro verdadeiro
59
Jander Moreira
Algoritmo 3-3
2 triângulo pode ser formado (se existe) e qual o tipo dele (equilátero,
3 isósceles ou escaleno) }
5 algoritmo
6 declare
8 existeTriângulo,
10
13
14 { verificações necessárias }
22
23 { resultados }
28 fim-algoritmo
60
Construção de algoritmos
3
4
5
6
7
8
9
10
61
Jander Moreira
Expressão Resultado
3 * (8 + 14) + 4 70
-100 * (200 – 50)/(9 – 1) -1875
(200 – 50)/(9 – 1) * -100 -1800
(-5 – 14,0)/((2 + 6) * 10) -0,2375
(8 + 7)/2 > 6 + 1 falso
45 > 10 e (“torre” < “pilar” ou “abc” = “abc”) verdadeiro
62
Construção de algoritmos
63
Jander Moreira
64
Construção de algoritmos
Unidade 4
Estratégia de desenvolvimento
de algoritmos
65
Jander Moreira
66
Construção de algoritmos
da essa fase, para cada grupo de coisas, põe tudo de volta no guar-
da-roupa, organizando cada compartimento e gaveta - arrumando
as camisetas, separando as camisas de mangas curtas e mangas
compridas, vestidos, calças jeans e sociais etc. -, um a um.
Outra pessoa opta por remover do guarda-roupa apenas o ne-
cessário e já partir para a organização. Separa, por exemplo, as
roupas íntimas, meias e shorts e já os arruma nas gavetas; separa
as calças e faz sua arrumação nos cabides; junta as blusas nas
gavetas de baixo; junta as roupas de cama na parte de cima. Cada
item é praticamente terminado antes que outro seja iniciado.
Todas as alternativas - as duas acima e ainda outras - levam à
arrumação pretendida, porém de forma diferente. Cada um pode
justificar sua solução como melhor que outras, mas isso é outra
questão.
Em suma, um algoritmo também pode ser abordado de forma
diferente e várias soluções distintas podem levar à produção de
respostas idênticas, todas resolvendo o problema.
68
Construção de algoritmos
2) Para cada grupo formado, organize-o - por cor, por uso ou outra
forma - e o acondicione no local definitivo - gavetas, cabides.
Algoritmo 4-1
2 em situação calamitosa }
4 algoritmo
6 similares
8 fim-algoritmo
69
Jander Moreira
Algoritmo 4-2
4 algoritmo
8 pegue-a do guarda-roupa
10
14 organize o grupo
17 fim-algoritmo
Algoritmo 4-3
4 algoritmo
8 pegue-a do guarda-roupa
70
Construção de algoritmos
12 coloque-a no grupo,
15
19 { organização do grupo }
30 fim-algoritmo
71
Jander Moreira
72
Construção de algoritmos
h
v0
a
d e
73
Jander Moreira
Algoritmo 4-4
5 contrário }
9 algoritmo
10 declarações
11
14 do objeto
18 escreva o resultado
19 fim-algoritmo
74
Construção de algoritmos
Algoritmo 4-5
5 contrário }
9 algoritmo
10 { declarações }
11 declare
14 colidiu: lógico
15
19
27
75
Jander Moreira
33
37
38 { escrita do resultado }
40 fim-algoritmo
76
Construção de algoritmos
77
Jander Moreira
Algoritmo 4-6
7 algoritmo
13
15 escreva(médiaFinal, aprovado)
16 fim-algoritmo
78
Construção de algoritmos
Algoritmo 4-7
4 leia(seminário) { 1 seminário }
5 fim-refinamento
Algoritmo 4-8
4 fim-refinamento
79
Jander Moreira
Algoritmo 4-9
7 algoritmo
13 leia(seminário) { 1 seminário }
14
16
20
22 escreva(médiaFinal, aprovado)
23 fim-algoritmo
80
Construção de algoritmos
81
Jander Moreira
82
Construção de algoritmos
Unidade 5
Comandos condicionais
83
Jander Moreira
84
Construção de algoritmos
85
Jander Moreira
86
Construção de algoritmos
se expressão_lógica então
conjunto_de_comandos_caso_verdadeiro
senão
conjunto_de_comandos_caso_falso
fim-se
87
Jander Moreira
Algoritmo 5-1
4 algoritmo
8 leia(notaProva1, notaProva2)
10 { cálculo da média }
12
13 { resultados }
14 escreva(média)
16 escreva(“Aprovado :)...”)
17 senão
18 escreva(“Reprovado :(...”)
19 fim-se
20 fim-algorimo
88
Construção de algoritmos
se expressão_condicional então
conjunto_de_comandos_caso_verdadeiro
fim-se
Algoritmo 5-2
1 (parte omitida)
3 leia(saldo)
8 fim-se
10 (parte omitida)
89
Jander Moreira
Algoritmo 5-3
2 triângulo pode ser formado (se existe) e qual o tipo dele (equilátero,
3 isósceles ou escaleno) }
5 algoritmo
6 declare
8 classificação: literal
90
Construção de algoritmos
12
16 senão
18 classificação ß “Equilátero”
19 senão
22 classificação ß “Isósceles”
23 senão
24 classificação ß “Escaleno”
25 fim-se
26 fim-se
27
28 { escrita da classificação }
29 escreva(classificação)
30 fim-se
31 fim-algoritmo
91
Jander Moreira
lista_de_constantes: conjunto_de_comandos
92
Construção de algoritmos
Algoritmo 5-4
3 algoritmo
6 { leitura da idade }
7 leia(idade)
9 { classificação }
11 0: escreva(“bebê”)
12 1..10: escreva(“criança”)
13 11..14: escreva(“pré-adolescente”)
14 15..18: escreva(“adolescente”)
15 19..120: escreva(“adulto”)
16 senão
18 fim-caso
19 fim-algoritmo
93
Jander Moreira
Algoritmo 5-5
1 { ... }
7 escreva(“alguma coisa”)
8 senão
9 escreva(“outra coisa”)
10 fim-se
94
Construção de algoritmos
11 20..30: leia(idade)
13 escreva(“Menor de idade”)
14 senão
16 fim-se
18 fim-caso
19 { ... }
95
Jander Moreira
Algoritmo 5-6
1 { ... }
2 valor1 ß 10
3 valor2 ß valor1 * 5
7 fim-se
9 valor3 ß valor3/2
11 { ... }
96
Construção de algoritmos
97
Jander Moreira
98
Construção de algoritmos
Unidade 6
Comandos de repetição
99
Jander Moreira
100
Construção de algoritmos
101
Jander Moreira
lista_de_comandos_subordinados
fim-para
Algoritmo 6-1
4 algoritmo
12 fim-para
13 fim-algoritmo
103
Jander Moreira
2) Caso o valor inicial seja maior que o valor final, os comandos inter-
nos não serão executados nenhuma vez e o valor da variável de
controle será simplesmente igual ao valor de início - não haverá
incremento, pois não houve execução;
UvalorU UsaídaU
para valor ß 1 até 5 faça 1 1
escreva(valor) 2 2
3 3
fim-para
4 4
5 5
6
inicial ß 100
escreva(valor, inicial)
104
Construção de algoritmos
fim-para
escreva(valorBase)
Figura 6-1 Exemplos de trechos de algoritmo com o comando para e seus res-
pectivos testes de mesa
105
Jander Moreira
Algoritmo 6-2
3 algoritmo
7 leia(nome)
11 { escreve a saudação }
13
15 leia(nome)
16 fim-enquanto
17
106
Construção de algoritmos
18 { despedida }
20 fim-algoritmo
107
Jander Moreira
Figura 6-2 Teste de mesa para o Algoritmo 6-2 (o texto traz mais detalhes)
108
Construção de algoritmos
faça
conjunto_de_comandos
enquanto expressão_lógica
faça
conjunto_de_comandos
até expressão_lógica
109
Jander Moreira
Algoritmo 6-3
4 algoritmo
7 { geração da tabela }
9 faça
13
16 enquanto celsius d” 10
17 fim-algoritmo
Algoritmo 6-4
4 algoritmo
7 { geração da tabela }
9 faça
13
110
Construção de algoritmos
17 fim-algoritmo
111
Jander Moreira
112
Construção de algoritmos
áveis são alteradas nos comandos internos. Por fim, o estado pos-
terior deve ser avaliado para os valores envolvidos na expressão
lógica e para os valores correlatos - i.e.: que contribuem para seus
valores.
Observar cada repetição com cuidado evita problemas e, em
consequência, incorreções nos algoritmos. A prática ajuda a avaliar
as situações que se apresentam e, portanto, o treino e a realização
de exercícios com atenção são fundamentais para dominar esses
conceitos.
Algoritmo 6-5
1 { calcular a média de três provas para cada aluno de uma turma, dado o
4 algoritmo
5 declare
113
Jander Moreira
6 i, númeroAlunos: inteiro
10 leia(númeroAlunos)
11
16
19 escreva(média)
20 fim-para
21 fim-algoritmo
114
Construção de algoritmos
Algoritmo 6-6
1 { dados o nome, o preço e o tipo dos vinhos (indicados aqui por “T” para
2 tinto, “B” para branco ou “R” para rosê, descrever o vinho mais caro;
6 algoritmo
7 declare
8 nome, nomeMaior,
11
14 faça
15 { dados }
17
20 nomeMaior ß nome
21 preçoMaior ß preço
22 tipoMaior ß tipo
23 fim-se
25
115
Jander Moreira
26 { apresentação do resultado }
27 se preçoMaior = -1 então
29 senão
31 fim-se
32 fim-algoritmo
116
Construção de algoritmos
Algoritmo 6-7
2 de valores disponíveis }
4 algoritmo
5 declare
6 i, númeroEntradas: inteiro
10 leia(númeroEntradas)
11
12 se númeroEntradas d” 0 então
14 senão
16 leia(temperatura)
18
21 { leitura}
22 leia(temperatura)
23
26 menorTemperatura ß temperatura
27 fim-se
28 fim-para
29
30 { resultado }
31 escreva(menorTemperatura)
32 fim-se
33 fim-algoritmo
117
Jander Moreira
Algoritmo 6-8
5 algoritmo
6 declare
7 i, númeroPessoas,
11 leia(númeroPessoas)
12
14 conta18 ß 0
15 conta60 ß 0
17 { leitura da idade }
18 leia(idade)
118
Construção de algoritmos
19
20 { analisa a idade }
21 se idade e” 18 então
24 conta60 ß conta60 + 1
25 fim-se
26 fim-se
27 fim-para
28
29 { resultados }
30 se conta18 = 0 então
32 senão
35 fim-se
36 fim-algoritmo
119
Jander Moreira
Algoritmo 6-9
4 iguais a zero }
6 algoritmo
7 declare
10
12 númeroItens 0
13 valorTotal ß 0
14 somaUnitários 0
15
17 leia(preço, quantidade)
19 { conta e acumula }
20 númeroItens ß númeroItens + 1
23
25 leia(preço, quantidade)
26 fim-enquanto
27
28 { resultados }
30 se númeroItens = 0 então
32 senão
34 fim-se
35 fim-algoritmo
120
Construção de algoritmos
Algoritmo 6-10
4 algoritmo
10
13 baseFatorial ß 1
14 fatorial ß 1
15 termo ß 1
17 { faz o somatório }
18 se i % 2 = 1 então
20 senão
121
Jander Moreira
22 fim-se
23
26 baseFatorial ß baseFatorial + 2
28 fim-para
29
30 { resultado calculado }
32 fim-algoritmo
Algoritmo 6 11
4 algoritmo
122
Construção de algoritmos
5 declare
8 { leitura do número }
9 leia(valor)
10
12 soma ß 0
15 soma ß soma + i
16 fim-se
17 fim-para
18
19 { resultado }
22 senão
24 fim-se
25 fim-algoritmo
123
Jander Moreira
124
Construção de algoritmos
Unidade 7
Ponteiros
125
Jander Moreira
126
Construção de algoritmos
Esta é uma unidade curta. Seu objetivo é dar uma noção geral
e precisa do que são ponteiros. Os ponteiros são um tipo de variá-
vel de ampla utilização em algoritmos, mas são considerados como
estruturas avançadas.
Ponteiros são úteis para disciplinas como Estruturas de dados
e Organização e recuperação da informação. Com eles, é possível
usar partes da memória sem precisar declarar uma variável para
cada parte usada e estruturar dados de forma mais complexa - na-
turalmente mais difícil, mas com vantagens compensadoras.
Esta unidade, porém, visa apenas a fornecer condições para
que os alunos entendam o que é um ponteiro e como podem ser
usados para manipular a memória. É o básico do básico, por isso, o
assunto é breve.
127
Jander Moreira
128
Construção de algoritmos
Algoritmo 7- 1
4 algoritmo
5 declare
6 valorReal: real
7 valorLiteral: literal
10
12 endereçoReal ß &valorReal
13 endereçoLiteral ß &valorLiteral
129
Jander Moreira
14
15 { escrita do resultado }
18 fim-algoritmo
130
Construção de algoritmos
Algoritmo 7-2 mostra como isso pode ser feito, introduzindo tam-
bém a notação pertinente:
Algoritmo 7-2
1 { dada uma variável, modificar seu conteúdo usando apenas seu endereço }
3 algoritmo
8 valor ß 100
11 ponteiro ß &valor
12
14 -ponteiro ß 200
15
17 escreva(valor) { 200!!! }
18 fim-algoritmo
131
Jander Moreira
Algoritmo 7-3
2 de comandos }
4 algoritmo
5 declare
6 númeroPassos,
8 Ponteiro: -inteiro
10 { atribuições iniciais }
11 valor1 ß 0
12 valor2 ß 0
13
14 { repetição }
15 leia(númeroPassos)
17 { escolha da variável }
132
Construção de algoritmos
18 se i % 5 = 0 então
19 ponteiro ß &valor1
20 senão
21 ponteiro ß &valor2
22 fim-se
23
25 ponteiro ß -ponteiro + i
26 se -ponteiro % 2 = 1 então
27 -ponteiro ß -ponteiro – 1
28 fim-se
29 fim-para
30
31 { escritas }
32 escreva(valor1, valor2)
33 fim-algoritmo
133
Jander Moreira
134
Construção de algoritmos
Unidade 8
Estruturas compostas
heterogêneas: registros
135
Jander Moreira
136
Construção de algoritmos
137
Jander Moreira
138
Construção de algoritmos
registro
lista_de_campos
fim-registro
Algoritmo 8-1
1 P
{ determinar, em RP3, qual de dois pontos é o mais próximo da origem }
3 algoritmo
4 declare
6 x, y, z: real
7 fim-registro
139
Jander Moreira
13
16
pot(ponto1.z, 2))
18
pot(ponto2.z, 2))
19
20 { comparação e resultado }
23 senão
26 senão
28 fim-se
29 fim-se
30 fim-algoritmo
140
Construção de algoritmos
ponto1
ponto1.x
ponto1.y
ponto1. z
Figura 8-1 Esquema da variável ponto1, que é um registro com três campos
reais, x, y e z, declarada no Algoritmo 8-1
Algoritmo 8-2
1 P
{ determinar, em RP3, qual de um conjunto de pontos é o mais próximo
4 algoritmo
5 declare
6 ponto,
7 pontoMaisPróximo: registro
8 x, y, z: real
9 fim-registro
10 distância: real
11
13 leia(númeroPontos)
141
Jander Moreira
14
15 se númeroPontos d” 0 então
17 senão
22
pot(ponto.z, 2))
23
28 pot(ponto.z, 2))
29
30 { comparação }
32 menorDistância ß distância
33 pontoMaisPróximo ß ponto
34 fim-se
35 fim-para
36
37 { resultado }
39 pontoMaisPróximo.y,
pontoMaisPróximo.z)
40 fim-se
41 fim-algoritmo
142
Construção de algoritmos
Algoritmo 8-3
1 { dados o nome, o preço e o tipo dos vinhos (indicados aqui por “T” para
2 tinto, “B” para branco ou “R” para rosê, descrever o vinho mais caro;
6 algoritmo
8 nome,
9 tipo: literal
10 preço: real
11 fim-registro
12 declare
14
143
Jander Moreira
17 faça
18 { dados }
20
24 fim-se
26
27 { apresentação do resultado }
28 se vinhoCaro.preço = -1 então
30 senão
32 fim-se
33 fim-algoritmo
2 PT A notação que usa o t para indicar um tipo é uma opção de estilo, e não
uma regra. A adoção dessa estratégia é, portanto, opcional. Ressalta-se,
porém, que a diferenciação entre variáveis e tipos ajuda na clareza e
permite uma melhor organização do algoritmo, servindo como
autodocumentação.
144
Construção de algoritmos
fim-registro
nome: literal
código: inteiro
cidadeNascimento,
cidadeResidência: literal
rg: literal
fim-registro
valor: real
fim-registro
tOperaçãoBancária: registro
saldo: real
limiteEspecial: real
transaçãoPrincipal: tTransação
data: tData
fim-registro
145
Jander Moreira
146
Construção de algoritmos
Unidade 9
Subrotinas
147
Jander Moreira
148
Construção de algoritmos
149
Jander Moreira
150
Construção de algoritmos
Algoritmo 9-1
2 multiplicação de ambos }
4 algoritmo
7 fim-registro
9 declare
151
Jander Moreira
12
14 leia(número1.numerador, número1.denominador)
15 leia(número2.numerador, número2.denominador)
16
17 { cálculo da soma }
19 número1.denominador * número2.numerador
21
22 { cálculo do MDC }
23 valor1 ß resultado.numerador
24 valor2 ß resultado.denominador
25 faça
27 valor1 ß valor2
28 valor2 ß resto
30
31 { simplificação da razão }
32 resultado.numerador ß resultado.numerador/valor1
33 resultado.denominador ß resultado.denominador/valor1
34
35 { escrita da soma }
37
38 { cálculo do produto }
41
42 { cálculo do MDC }
43 valor1 ß resultado.numerador
44 valor2 ß resultado.denominador
45 faça
152
Construção de algoritmos
47 valor1 ß valor2
48 valor2 ß resto
50
51 { simplificação da razão }
52 resultado.numerador ß resultado.numerador/valor1
53 resultado.denominador ß resultado.denominador/valor1
54
55 { escrita do produto }
57 fim-algoritmo
153
Jander Moreira
Algoritmo 9-2
2 multiplicação de ambos }
4 { definição do tipo }
7 fim-registro
12
13 { cálculo do MDC }
14 valor1 ß racional.numerador
15 valor2 ß racional.denominador
16 faça
18 valor1 ß valor2
19 valor2 ß resto
21
22 { simplificação da razão }
23 racional.numerador ß racional.numerador/valor1
24 racional.denominador ß racional.denominador/valor1
25 fim-procedimento
26
27 algoritmo
29
31 leia(número1.numerador, número1.denominador)
32 leia(número2.numerador, número2.denominador)
33
154
Construção de algoritmos
34 { cálculo da soma }
36 número1.denominador * número2.numerador
38 simplifiqueRacional(resultado)
39
40 { escrita da soma }
42
43 { cálculo do produto }
46 simplifiqueRacional(resultado)
47
48 { escrita do produto }
50 fim-algoritmo
155
Jander Moreira
156
Construção de algoritmos
9.3.1 Procedimentos
procedimento identificador(lista_de_parâmetros)
{ comentário de descrição do procedimento }
declarações_locais
conjunto_de_comandos
fim-procedimento
157
Jander Moreira
158
Construção de algoritmos
Algoritmo 9-3
11 fim-procedimento
12
15
18 fim-se
19 fim-procedimento
20
21 algoritmo
159
Jander Moreira
23
25 faça
26 leia(número)
27
28 escrevaInteiroEFracionário(número)
29
31 transformeEmPositivo(número)
32 escreva(número)
34 fim-algoritmo
160
Construção de algoritmos
161
Jander Moreira
p1: real, p2: inteiro, p2: real Três parâmetros, sendo o primeiro e o último
p1, p2, p3: tTipo Três parâmetros do tipo tTipo, por valor.
referência.
162
Construção de algoritmos
3 Escopo, no contexto deste texto, pode ter seu significado entendido como
área de abrangência.
163
Jander Moreira
164
Construção de algoritmos
declare
umInteiro: inteiro
valor: real
meuProcedimento
procedimento meuProcedimento(var v1: inteiro, var v2: real) v1, v2,
declare umInteiro: inteiro umInteiro
fim-procedimento { meuProcedimento }
{ parte principal }
algoritmo valor
declare valor: tTipo
fim-algoritmo
165
Jander Moreira
9.3.4 Funções
que pode ser usada como uma nova função. Para tanto, é usado o
par função/fim-função para indicar o novo código. O formato é
apresentado na sequência:
conjunto_de_comandos
fim-função
4 Ver Tabela 3-I, sobre operações aritméticas e Tabela 3-II, sobre operações
literais.
166
Construção de algoritmos
Algoritmo 9-4
7 retorne valor1
8 senão
9 retorne valor2
10 fim-se
11 fim-função
12
15
17 retorne valor1
18 senão
19 retorne valor2
20 fim-se
21 fim-função
22
25
27 valor ß -valor
28 fim-se
29 retorne valor
30 fim-função
31
32 { parte principal }
167
Jander Moreira
33 algoritmo
34 declare
37
38 { entrada de dados }
40
44
47 fim-se
48
51 senão
53 fim-se
54
57 menorReal(módulo(primeiroReal), módulo(segundoReal))
58 fim-algoritmo
168
Construção de algoritmos
169
Jander Moreira
170
Construção de algoritmos
Unidade 10
Estruturas compostas
homogêneas: arranjos
171
Jander Moreira
172
Construção de algoritmos
173
Jander Moreira
tados em último. A resposta, então, deve ser uma lista dos países
em primeiro lugar no ranking e uma lista dos últimos classificados.
Na realidade, pode ser que haja um empate e que todos obtenham o
mesmo número de medalhas e todos empatem em primeiro - impro-
vável, mas possível. Uma solução para o algoritmo, nessa nova situ-
ação, é - de novo - verificar as condições de medalhas que definem o
primeiro e o último colocados; depois, a lista de todos os países deve
ser repassada, listando todos aqueles que coincidem com o status de
melhor de todos, fazendo um procedimento similar para verificar os
que se encontram na situação de pior desempenho. Nessa solução, é
preciso “se lembrar” de vários dos dados - nome do país, número de
cada tipo de medalha - para confrontar no final.
174
Construção de algoritmos
175
Jander Moreira
Algoritmo 10-1
4 algoritmo
5 { declaração de variáveis }
6 declare
7 soma, contador, i,
9 média: real
10
12 soma ß 0
14 leia(valor[i])
16 fim-para
17 média ß soma/20.0
18
20 contador ß 0
23 contador ß contador + 1
24 fim-se
25 fim-para
26
27 { resultado }
29 fim-algoritmo
176
Construção de algoritmos
valor
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
177
Jander Moreira
Tabela 10-I Ilustração passo a passo dos valores de um arranjo para atribui-
ções sucessivas
Conteúdo Comentário
178
Construção de algoritmos
Algoritmo 10-2
3 no cálculo da média }
5 algoritmo
6 { declarações }
8 declare
9 i: inteiro
11 nomeAluno[númeroAlunos]: literal
12 média[númeroAlunos]: real
179
Jander Moreira
13
19
21 melhorMédia ß média[i]
22 fim-se
23 fim-para
24
30 fim-se
31 fim-para
32 fim-algoritmo
180
Construção de algoritmos
Algoritmo 10-3
5 algoritmo
6 { declarações }
8 declare
9 i: inteiro
11 nomeAluno[máximoAlunos]: literal
12 média[máximoAlunos]: real
13
15 leia(númeroAlunos)
16
19 senão
181
Jander Moreira
25
27 melhorMédia ß média[i]
28 fim-se
29 fim-para
30 fim-se
31
37 fim-se
38 fim-para
39 fim-algoritmo
182
Construção de algoritmos
Algoritmo 10-4
3 resultado da união }
8 númeroElementos: inteiro
9 elementos[máximoElementos]: real
10 fim-registro
183
Jander Moreira
11
17 declare
18 i: inteiro
19 achou: lógico
20
22 sucesso ß falso
23
26 i ß 0
27 achou ß falso
30 fim-se
31
34 conjunto.elemento[conjunto.númeroElementos] ß elemento
35 conjunto.númeroElementos ß conjunto.númeroElementos + 1
36
37 sucesso ß verdadeiro
38 fim-se
39 fim-se
40 fim-procedimento
41
44 declare
45 númeroElementos: inteiro
184
Construção de algoritmos
46 elemento: real
47 inserçãoOk: lógico
48
50 conjunto.númeroElementos ß 0
51
53 faça
54 leia(númeroElementos)
57 fim-se
59
62 leia(elemento)
63
67 fim-se
68 fim-enquanto
69 fim-procedimento
70
73 declare i: inteiro
74
75 se conjunto.númeroElementos = 0 então
77 senão
79 escreva(conjunto.elemento[i])
80 fim-para
185
Jander Moreira
81 fim-se
82 fim-procedimento
83
87 declare
88 i: inteiro
89 inserçãoOk: lógico
90
92 resultado ß conjunto1
93
95 inserçãoOk ß verdadeiro
96 i ß 0
99 i ß i + 1
100 fim-para
101
105 fim-se
106 fim-procedimento
107
109 algoritmo
111
113 leiaConjunto(conjunto1)
114 leiaConjunto(conjunto2)
115
186
Construção de algoritmos
116 { união }
118
119 { resultado }
121 escrevaConjunto(conjunto1)
122 escreva(“e”)
123 escrevaConjunto(conjunto2)
125 escrevaConjunto(conjuntoUnião)
126 fim-algoritmo
187
Jander Moreira
Algoritmo 10-5
6 declare
7 i, posição: inteiro
10 sucesso ß falso
11
188
Construção de algoritmos
13 { busca se já existe }
14 posição ß 0
17 posição ß posição + 1
18 fim-enquanto
19
20 se posição e” conjunto.númeroElementos ou
23 i ß conjunto.númeroElementos – 1
25 conjunto.elementos[i + 1] ß conjunto.elementos[i]
26 i ß i - 1
27 fim-enquanto
28
29 { insere no arranjo }
30 conjunto.elementos[posição] ß elemento
31 conjunto.númeroElementos ß conjunto.númeroElementos + 1
32
33 sucesso ß verdadeiro
34 fim-se
35 fim-se
36 fim-algoritmo
Algoritmo 10-6
5 declare i: inteiro
7 { localiza o elemento }
8 i ß 0
189
Jander Moreira
11 i ß i + 1
12 fim-enquanto
13
15 se i e” conjunto.númeroElementos ou
17 sucesso ß falso
18 senão
19 { remove o item }
22 conjunto.elementos[i] ß conjunto.elementos[i + 1]
23 i ß i + 1
24 fim-enquanto
25 conjunto.númeroElementos ß conjunto.númeroElementos - 1
26
27 sucesso ß verdadeiro
28 fim-se
29 fim-procedimento
190
Construção de algoritmos
declare
Algoritmo 10-7
3 constante
191
Jander Moreira
9 dados[máximoLinhas][máximoColunas]: real
10 fim-registro
11
14 declare i, j: inteiro
15
17 faça
21 matriz.númeroColunas < 0 ou
23
27 leia(matriz.dados[i][j])
28 fim-para
29 fim-para
30 fim-procedimento
31
34 declare i, j: inteiro
35
36 { saída }
38 escreva(“Matriz inválida”)
39 senão
40 { apresentação da matriz }
192
Construção de algoritmos
43 escreva(matriz.dados[i][j])
44 fim-para
45 fim-para
46 fim-se
47 fim-procedimento
48
51
53 fim-função
54
57 declare
58 i: inteiro
59 soma: real
60
62 soma ß 0
63 se éQuadrada(matriz) então
66 fim-para
67 fim-se
68
69 { resultado }
70 retorne soma
71 fim-função
72
193
Jander Moreira
77 declare
78
82 resultado.númeroLinhas ß 0
83 resultado.númeroColunas ß 0
84 senão
85 { calcula a multiplicação }
86 resultado.númeroLinhas ß matriz1.númeroLinhas
87 resultado.númeroColunas ß matriz2.númeroColunas
92 resultado.dados[i][j] ß resultado.dados[i][j] +
93 matriz1.dados[i][k] * matriz2.dados[k][j]
94 fim-para
95 fim-para
96 fim-para
97 fim-se
98 fim-procedimento
99
102 forem nulos; se não forem nulos ou a matriz não for quadrada,
104 declare
106 i: inteiro
107
108 { verificação }
110 i ß 0
194
Construção de algoritmos
113 i ß i + 1
114 fim-enquanto
115
117 fim-função
118
119 algoritmo
120 declare
124
125 { iniciação }
127
129 leia(númeroLeituras)
132 leiaMatriz(matriz)
133
139 fim-se
140
145 senão
195
Jander Moreira
149 senão
151 fim-se
152 fim-se
153 fim-para
154
159 senão
162 escrevaMatriz(matrizSelecionada)
163 fim-se
164 fim-algoritmo
196
Construção de algoritmos
197
Jander Moreira
198
Construção de algoritmos
Unidade 11
199
Jander Moreira
200
Construção de algoritmos
201
Jander Moreira
Algoritmo 11-1
1 { obter, para uma relação de dados sobre vinhos, o vinho de maior venda
3 grupo }
7 nome,
8 nomeFabricante,
202
Construção de algoritmos
9 nomeDistribuidor,
10 tipo: literal
11 anoSafra,
12 anoEnvasamento: inteiro
13 preço: real
14 unidades: inteiro
15 fim-registro
17
20
23 vinho.preço, vinho.unidades)
24 fim-procedimento
25
28
31 vinho.preço, vinho.unidades)
32 fim-procedimento
33
36
38 fim-função
39
41 algoritmo
42 declare
43 i, númeroItens: inteiro
203
Jander Moreira
45 vinho: tListaVinhos
46
49 somaVendas ß 0
50 maiorVenda ß -1
52 leiaVinho(vinho[i])
53
56 maiorVenda ß calculeVendas(vinho[i])
57 fim-se
58 fim-para
59 médiaVendas ß somaVendas/númeroItens
60
64 escrevaVinho(vinho[i])
65 fim-se
66 fim-para
67
71 escrevaVinho(vinho[i])
72 fim-se
73 fim-para
74 fim-algoritmo
204
Construção de algoritmos
camp o
registro
4 Chiraz Benjamin Romeo VERCOOP B 1998 1999 48,22 22
5 Merlot Salton Anadil T 2002 2002 102,50 23
6 Cabernet Salton Os Cascos R 1956 1956 299,90 2
7 Chiraz Benjamin Romeo Anadil B 2006 2006 87,34 34
8 Merlot Guy Salmona Perrichet B 2006 2007 59,28 76
9 Cabernet Salton Perrichet T 1997 2001 29,90 33
10 Cabernet Miolo Os Cascos T 2006 2007 12,09 76
11 Merlot Salton VERCOOP T 1937 1938 853,22 1
205
Jander Moreira
206
Construção de algoritmos
207
Jander Moreira
208
Construção de algoritmos
209
Jander Moreira
210