FASCICULO Introducao Algoritmos PDF
FASCICULO Introducao Algoritmos PDF
FASCICULO Introducao Algoritmos PDF
GRADUAÇÃO EM
TECNOLOGIA EDUCACIONAL
LICENCIATURA
Introdução a
Algoritmos
Raoni Florentino da Silva Teixeira
GRADUAÇÃO EM
TECNOLOGIA EDUCACIONAL
LICENCIATURA
Introdução a
Algoritmos
Raoni Florentino da Silva Teixeira
G915f
CDU 004.414.2
Ficha catalográfica elaborada pelo bibliotecário Carlos Henrique Tavares de Freitas - CRB-1 nº 2.234.
Introdução a
Algoritmos
Raoni Florentino da Silva Teixeira
2019
Secretaria de Tecnologia Educacional
Universidade Federal de Mato Grosso
Presidente da CAPES
Anderson Ribeiro Correia
Reitora UFMT
Myrian Thereza de Moura Serra
Vice-Reitor
Evandro Aparecido Soares da Silva
Pró-reitor Administrativo
Bruno Cesar Souza Moraes
Pró-reitora de Planejamento
Tereza Mertens Aguiar Veloso
Pró-reitora de Pesquisa
Patrícia Silva Osório
Coordenador da UAB/UFMT
Alexandre Martins dos Anjos
Referências............................................................................................... 24
Referências............................................................................................... 52
Referências............................................................................................... 70
Reflexão – Sinaliza que uma atividade reflexiva será desenvolvida. Para isso,
sugerimos que leia a questão feita e anote o que você pensa a respeito da abor-
dagem, antes de qualquer assimilação de novos conhecimentos. Você pode
convidar seus colegas para debates, questionar a equipe de tutoria e docentes
(usando a ferramenta mensagem ou fórum). No final do processo, faça uma sín-
tese das ideias resultantes das novas abordagens que você assimilou e/ou construiu, de forma
a se preparar para responder perguntas ou questionamentos sobre o assunto refletido.
• Identificar as tarefas que devem ser executadas para projetar seu próprio algoritmo.
Quais tarefas da sua vida cotidiana são realizadas por algum tipo de
computador?
É curioso notar o quanto somos dependentes de uma tecnologia, e normalmente não per-
cebemos a intensidade com que isso acontece. Avanços no processamento e na aquisição de
dados (câmeras e outros sensores) permitiram que os computadores fossem aplicados em
uma grande quantidade de tarefas. Este é o caso, por exemplo, das operações realizadas pe-
las lavadoras de roupas mais modernas. Também é o caso do mecanismo empregado no câm-
bio automático de um carro, que controla a troca de marchas de modo quase imperceptível
para o motorista. Mais recentemente, apareceram ainda carros que estacionam e, até mes-
mo, dirigem de maneira automática. Todas essas tarefas são realizadas por computadores e,
como você entenderá no fim desta aula, também por um algoritmo. Tal como a eletricidade,
o computador é um exemplo de tecnologia que passou a compor o nosso entorno sem que
percebêssemos toda a complexidade envolvida.
O termo algoritmo tem sua origem com o matemático do século IX Muḥammad ibn Mūsā
al-Khwārizmī, cujo sobrenome foi latinizado para Algoritmi. O conceito por trás do nome
existe há séculos. Matemáticos gregos, por exemplo, já usavam para descrever como encon-
trar números primos ou o maior divisor comum entre dois números inteiros (KNUTH, 1968).
CARACTERÍSTICAS DE UM ALGORITMO
• As ações ou operações executadas devem ser simples. Ações complexas devem ser
subdivididas em ações menores.
• Cada ação ou operação deve ser entendida precisamente. Não há espaço para ambi-
guidades, dúvidas ou mal-entendidos.
O objetivo deste capítulo é promover uma primeira aproximação dos cursistas aos concei-
tos relacionados com a resolução de problemas, ao projeto e à construção de algoritmos e
programas de computador.
Ressaltamos, porém, que as noções aqui apresentadas constituem apenas os princípios bá-
sicos. Logo, convidamos todos a participar das atividades do SAIBA MAIS no Guia de Estudos,
e sugerimos a leitura dos livros indicados na seção Referências para aprofundamento e deta-
lhes não abordados.
10
11
Avaliar a solução e,
dependendo do resultado,
voltar ao início.
CONSTRUÇÃO DO ALGORITMO
• Responda a questão: Você consegue transformar este problema em algum outro que
já foi resolvido?
• Avalie se o problema ainda parece complicado e, caso necessário, o transforme-o
em um problema auxiliar, eliminando alguma das variáveis envolvidas. Considere os
casos mais simples primeiro.
• Brinque com a solução e tente entender o que acontece quando grupos de ações são
combinadas.
• Procure encontrar padrões e descreva o algoritmo.
12
AVALIAÇÃO DA RESPOSTA
Em linhas gerais, a estratégia consiste em quatro etapas. Antes de qualquer coisa, devemos
entender o problema, pois dificilmente vamos resolver o que não entendemos. Depois, ten-
tamos encontrar conexões entre os dados do problema e a solução esperada. Neste ponto,
podemos considerar problemas auxiliares que são mais simples que o problema original. O
resultado desta etapa é um algoritmo que será executado passo a passo na etapa seguinte.
Na quarta e última etapa, avaliamos a resposta encontrada. Se o resultado esperado não for
alcançado, o processo é reiniciado.
Édouard Lucas
(1842-1891)
13
Como esse é o nosso primeiro problema, infelizmente, nunca vimos um problema pareci-
do antes. O quadro a seguir apresenta algumas propriedades do problema que podem ser
capturadas a partir de uma leitura atenta do enunciado aplicando a estratégia proposta no
trabalho do Polya (1945).
ITERAÇÃO 1
14
• Mesmo após a fase de entendimento, o problema ainda parece complicado e não fica
evidente como movimentar os 3 (três) discos seguindo as regras apresentadas.
• Vamos ter de simplificar o problema. Suponha agora que devemos mover apenas um
disco. Neste caso, a solução é relativamente fácil. Apenas uma ação deve ser executa-
da:
Movimentar o disco do pino 1 para o pino 3.
Esta é a configuração original da torre.
O que acontece se você movimentar o disco que está no topo do primeiro pino
para o pino intermediário? E se, na sequência, você também movimentar o
menor disco (que está no terceiro pino) para o pino intermediário?
15
16
17
ITERAÇÃO 2
18
O que falta para resolver o problema? Como fazemos para mover os dois
discos do pino do meio para o terceiro pino?
19
Agora estamos quase identificando um padrão. O disco do segundo pino pode ser
movimentado para o terceiro pino sem ferir nenhuma regra. Após este movimento,
temos a seguinte configuração:
Agora falta apenas movimentar o disco menor do primeiro para o terceiro pino. O
resultado deste movimento é ilustrado a seguir.
20
21
A estratégia foi efetiva e foram necessárias apenas duas rodadas de aplicação e refinamento
para encontrar a solução. Dependendo do problema, porém, mais iterações são necessárias.
Outras técnicas podem ser utilizadas (em combinação ou não com a estratégia apresentada
aqui). No futuro, quando você se deparar com um problema que exige uma técnica de projeto
mais elaborada, consulte os trabalhos de Edmonds (2010) e Kleinberg e Tardos (2005).
Vimos nesta unidade o que é um algoritmo e como ele pode ser construído utilizando uma
estratégia reflexiva composta de várias fases. Ilustramos a estratégia aplicando-a no proble-
ma chamado de Torre de Hanoi. Como vimos, o principal ponto da estratégia é transformar o
problema original em um problema mais simples, eliminando alguma das variáveis envolvi-
das. Este aspecto será amplamente explorado nas próximas unidades.
Alguns exercícios são indicados no GUIA DE ESTUDOS e sua resolução é fortemente indica-
da. Na próxima unidade, veremos como ir de algoritmos (estudados aqui) para programas de
computador.
23
KNUTH, Donald E. The Art of Computer Programming: Volume 1: Fundamental Algorithms. Addison-
-Wesley Professional, 1968.
KNUTH, Donald E, PATASHNIK, Oren e GRAHAM, Ronald. Matemática Concreta: Fundamentos para a Ci-
ência da Computação. Addison-Wesley, 1988.
24
1 Introdução
Transformar o Algoritmo em
Programa de Computador
Entendimento do Problema
27
PROGRAMA
COMPUTADOR
DE COMPUTADOR
ARMAZENAMENTO
DE DADOS
Todo programa é escrito em uma linguagem de programação que especifica as regras (sin-
taxe, gramática etc) utilizadas para representação das ideias do algoritmo de uma maneira
que o computador as entenda. Há dois tipos de linguagens: de alto e de baixo nível (às vezes,
chamadas de linguagens de máquina ou de montagem). Resumindo um pouco as coisas, o
computador só consegue executar programas escritos em linguagens de baixo nível. Progra-
mas escritos em linguagens de alto nível precisam ser processados antes que possam ser
executados. Esse processamento extra (uma espécie de tradução) é chamado de compilação
ou interpretação.
28
29
</> print(1234)
1234
Antes de entender como os dados são representados em Python, vamos entender como
isso acontece no computador.
Todo computador possui uma memória para armazenar dados. O programa de computa-
dor tem acesso a pedaços dessa memória que são chamados de variáveis. Cada variável pos-
sui um nome (por exemplo, x) que é associado ao pedaço específico da memória reservado
para ela.
30
Para facilitar o entendimento, podemos enxergar a memória do computador como uma es-
pécie de gaveteiro gigante. Cada gaveta é uma variável. Como em qualquer gaveteiro, é pos-
sível manipular cada uma das gavetas da memória individualmente. Dessa forma, podemos
guardar um número na quinta gaveta, por exemplo.
Assim, toda vez que uma variável é criada em um programa de computador, uma das gave-
tas da memória é associada a ela. Suponha que a variável x foi criada. Uma gaveta da memó-
ria (a quinta gaveta, por exemplo) foi associada a x. Toda vez que esta variável for manipula-
da, o conteúdo dessa gaveta será acessado.
31
Para ilustrar como estes comandos podem ser utilizados na prática, vamos escrever um
programa que calcula e imprime na tela a média de 5 (cinco) números.
Como você faria para encontrar a média de 5 (cinco) números usando lápis
e papel?
5+10+15+20+25
5
32
Na verdade, seria interessante utilizar 7 (sete) variáveis: 5 (cinco) para os dados de entrada,
uma para armazenar o resultado da soma e outra para a média. A solução desse problema
utiliza as instruções de atribuição de valores, soma e divisão. No fim, também utilizamos o
comando print para mostrar o resultado na tela do computador. O código a seguir mostra o
programa de computador criado.
a = 1
b = 10
c = 5
</> d = 6
e = 4
soma = a + b + c + d + e
media = soma/5
33
Uma limitação da solução anterior é que para alterar os números temos que mudar os va-
lores no próprio código. Agora, vamos estudar o comando input e entender como realizar a
leitura de valores a partir do teclado.
Note que a frase informada ao comando input foi impressa na tela. Agora, o interpretador
Python entrou em um modo que permite que o usuário digite um texto no teclado. Após o
usuário digitar o que deseja e pressionar a tecla Enter, os dados digitados serão armazenados
na variável nome.
34
Olá Guido
O programa a seguir mostra como o código do problema da média dos 5 (cinco) números
pode ser adaptado para ler os valores do teclado.
soma = a + b + c + d + e
media = soma/5
Neste código, o comando int foi utilizado para transformar o texto digitado pelo usuário em
um número inteiro.
Informe um número: 1
Informe um número: 1
Informe um número: 1
Informe um número: 2
Informe um número: 1
35
Como você faria para calcular a área de um círculo usando lápis e papel?
A = π×r2
A = π*r2
print(Área: ‘, area)
36
Área: 12.5
37
• E
ntender como um programa de computador pode tomar decisões e escolher entre
executar ou não um conjunto de comandos.
1 Introdução
Na Unidade II, vimos como escrever programas em Python que podem executar uma sequ-
ência de comandos de forma linear (executando sempre um comando após o outro). Embora
esse conhecimento seja suficiente para resolver muitos problemas, há uma limitação impor-
tante: não podemos escrever programas que tomam decisões e escolhem executar ou não um
conjunto de comandos.
i<5 i≥5
41
A álgebra booleana é o ramo da álgebra que considera variáveis que assumem os valores ló-
gicos verdadeiro e falso. Ao contrário da álgebra elementar, em que os valores das variáveis
são números, e as operações primárias são adição e multiplicação, as operações principais
da álgebra booleana são a conjunção e, a disjunção ou e a negação não. A origem do nome
é uma homenagem ao matemático inglês George Boole (1815, 1864).
Em Python, os valores lógicos verdadeiro e falso são denotados pelas palavras True e False.
Os operadores lógicos de conjunção, disjunção e negação são denotados pelas palavras and,
or e not, respectivamente.
AND OR NOT
Usando AND, a expressão será Usando OR, a expressão será Usando NOT, a expressão será
verdadeira apenas se as duas verdadeira se uma das verdadeira apenas quando a
expressões são verdadeiras expressões for verdadeira expressão negada não for
verdadeira
Uma maneira de visualizar e entender uma expressão lógica é construir sua Tabela Verdade.
A Tabela Verdade é uma de tabela que contém uma coluna para cada variável envolvida e
uma linha para cada combinação possível de valores (GERSTING, 2016). A seguir, apresenta-
mos as Tabelas Verdade dos operadores and, or e not.
42
Em Python, podemos escrever o código a seguir para verificar o resultado destas operações.
A = True
</>
B = False
print(A and B)
43
False
Uma expressão relacional pode ser enxergada como uma pesagem em uma balança de pra-
tos em que verificamos se duas coisas são iguais, diferentes ou se uma coisa é menor, maior,
menor ou igual ou maior ou igual à outra.
OPERADORES RELACIONAIS
Operador Exemplo Descrição
== A == B O resultado da expressão é verdade apenas se A é igual à B.
O resultado da expressão é verdade apenas se A é diferente de
!= A != B
B.
< A<B O resultado da expressão é verdade apenas se A é menor que B.
> A>B O resultado da expressão é verdade apenas se A é maior que B.
O resultado da expressão é verdade apenas se A é menor ou
<= A <= B
igual à B.
O resultado da expressão é verdade apenas se A é maior ou
>= A >= B
igual à B.
O resultado das expressões relacionais também pode ser verificado no computador. O se-
guinte código mostra um exemplo para o operador < (menor).
44
print(A < B)
True
3 Comandos if e if-else
O if é o principal comando condicional da linguagem Python. Sua sintaxe é apresentada a
seguir
...
</>
if A:
print(‘A é verdadeira’)
print(‘A é verdadeira’)
será executado apenas se o valor de A for True. Dessa maneira, podemos escolher quais
comandos serão utilizados.
Podemos utilizar este comando, por exemplo, para verificar se um número digitado pelo
usuário é par.
45
serve para indicar que o comando faz parte do bloco de código interno do if.
1, 2, 3, 4, 5, 6 ...
1, 0, 1, 0, 1, 0 ...
Tal como fizemos na unidade anterior, usamos o comando input para fazer a leitura de um
número inteiro do teclado. Para verificar se um número é par, olhamos para o resto da divisão
inteira de n por 2. Apenas os números pares tem resto igual a zero. Por fim, usamos o opera-
dor relacional == para verificar se o resto vale zero.
Quando este programa é executado, a mensagem ‘Você digitou um número par’ será im-
pressa apenas se o número digitado pelo usuário for par. Se o número digitado for ímpar,
nada será impresso.
Quando temos que executar um comando, e também quando a condição é falsa, podemos
utilizar o comando if-else. Os comandos que fazem parte do bloco de código else serão exe-
cutados se a expressão for falsa. O código abaixo mostra um exemplo.
46
if n % 2 == 0:
</>
print(‘Você digitou um número par’)
else:
Note agora que, se o número digitado for ímpar, a frase ‘Você digitou um número ímpar’
será impressa na tela. Tal como antes, a mensagem ‘Você digitou um número par’ será im-
pressa apenas se o número digitado pelo usuário for par.
Para ilustrar como esses comandos podem ser utilizados na prática, vamos apresentar um
exemplo de programa que lê e ordena (de maneira crescente) 3 (três) números inteiros.
Vamos precisar de, pelo menos, 3 (três) variáveis: uma para número lido do teclado. Usando
o que aprendemos na Unidade II, vamos ler os três números inteiros com o comando input.
47
a b c
Suponha que estamos trabalhando com um problema um pouco diferente. Imagine que
temos três caixas com pesos desconhecidos e queremos ordená-los do menor para o maior
usando uma balança de pratos. Com um pouco de atenção, é possível perceber que, na essên-
cia, este é o mesmo problema que estamos resolvendo.
1. Entender o problema ;
48
Infelizmente, não fica evidente, logo no começo, como ordenar as 3 (três) caixas.
Simplificando o problema, suponha que devemos ordenar apenas 2 (duas) caixas.
b
a
Quando comparamos duas caixas a e b, ganhamos uma informação sobre sua ordem
relativa. Esta ordem não muda. Podemos guardar o resultado da comparação colo-
cando uma etiqueta na caixa mais leve e outra na mais pesada. O resultado parcial é:
Brincando com as pesagens, podemos notar que se a caixa c é mais leve que a caixa,
sabemos que a caixa c é a mais leve de todas. A ordem total é:
c
caixa C
< caixa mais leve
< caixa mais pesada
49
Caso contrário (a caixa c é mais pesada que a caixa mais leve), sabemos certamente
que a caixa com o rótulo ‘mais leve’ é a menos pesada de todas. Não sabemos nada
sobre a relação de ordem que existe entre a caixa c e a caixa mais pesada, e vamos
precisar realizar mais uma pesagem.
Se a caixa c é mais leve que a caixa que contém o rótulo mais pesada, então a caixa c
é a segunda mais leve. A ordem total é:
c
caixa mais leve
< caixa C
< caixa mais pesada
Se a caixa c é mais pesada que a caixa que tem o rótulo mais pesada, então ela é a
mais pesada de todas. A ordem total é:
c
caixa mais leve
< caixa mais pesada
< caixa C
50
Sim, conseguimos!
51
if a < b:
mais_leve = a
mais_pesada = b
else:
mais_leve = b
</>
mais_pesada = a
if c < mais_leve:
else:
print(mais_leve, c, mais_pesada)
else:
print(mais_leve, mais_pesada, c)
Referências
Judith L. GERSTING. Fundamentos Matemáticos para a Ciência da Computação. LTC, 2016.
52
1 Introdução
Sem dúvida alguma, a capacidade de repetir operações foi decisiva para consolidar os com-
putadores como ferramentas de resolução de problemas. Uma vantagem clara é que na repe-
tição realizada por um computador todas as operações são executadas do mesmo jeito.
Nesta unidade, estudaremos um comando que pode ser usado para executar uma ou mais
instruções repetidamente, até um número desejado de vezes. As repetições são organizadas
em ciclos. No início de cada ciclo, uma expressão lógica é testada para determinar se a repe-
tição deve prosseguir ou não.
Para entender como isso acontece, vamos considerar um exemplo. Suponha que temos que
escrever um programa que mostra os números 1, 2, 3 e 4 na tela do computador.
print(1)
</> print(2)
print(3)
print(4)
Imagine agora que temos que imprimir todos os números entre 1 e 100.
Agora, usando apenas o que sabemos, vamos precisar escrever 100 linhas de código! Não
será difícil cometer erros de digitação, esquecendo de imprimir um número, por exemplo.
55
print(2)
print(3)
print(4)
</>
…
print(97)
print(98)
print(99)
print(100)
2 Comando while
O comando while é utilizado para executar um bloco de comandos enquanto uma condição
é satisfeita. Importante: a repetição deixa de ser executada quando a condição é falsa. A es-
trutura do comando é apresentada a seguir.
comandos
56
print( )
O que muda de uma linha para outra é apenas o valor entre parênteses. Este valor varia de
1 a 100.
IMPORTANTE
Identificar o que se repete e o que muda é a tarefa chave nesse processo.
Uma estratégia muito útil é escrever um código com todos os ciclos de repetição. Isso deixa
claro quais serão as operações serão repetidas.
O código a seguir mostra os 100 ciclos de repetição usados para imprimir os 100 números.
Em geral, podemos usar uma variável para representar o conteúdo que não é fixo. Uma ideia
é iniciar uma variável i valendo 1 e incrementar i a cada ciclo da repetição.
57
2. print(i)
3. i = i + 1
4. print(i)
5. i = i + 1
</> 6. print(i)
7. i = i + 1
8. print(i)
9. i = i + 1
10. …
11. print(i)
12. i = i + 1
Resposta: Impressão dos números 1, 2, 3, ... 100. Neste caso, isso é feito repetindo os
comandos:
print(i)
i = i + 1
58
Resposta: Podemos utilizar uma variável para contar quantas repetições já foram exe-
cutadas. No código, a própria variável i já faz isso. Dessa forma, a condição pode ser
definida usando: i ≤ 100. Lembre-se: a impressão será interrompida quando i valer 101.
1. i = 1
</>
2. while i <= 100:
3. print(i)
4. i = i + 1
Tal como queríamos, as linhas 3 e 4 do código serão executadas 100 vezes. Na 101ª vez, a
condição deixa de ser verdadeira, pois a variável i vale 101 (não é mais “menor ou igual a 100”)
e a repetição é interrompida.
Vamos resolver outro problema para ilustrar a aplicação desse comando na prática. O ob-
jetivo agora é escrever um programa que lê um número inteiro n e, em seguida, lê n valores
inteiros e mostra o maior deles na tela.
Após a leitura de n igual a 4, por exemplo, seu programa deve ler 4 (quatro) números intei-
ros. Estes quatro números poderiam ser, digamos, 6, 4, 1 e 7. Seu programa deveria imprimir,
neste caso, o número 7 (o maior número digitado pelo usuário).
Para resolver este problema, vamos utilizar uma estratégia muito interessante. A ideia é
dividir o problema em partes bem pequenas, resolver cada uma delas separadamente e, de-
pois, juntar tudo. Cada parte bem pequena do problema precisa ser cuidadosamente estuda-
da. Este estudo cuidadoso vai te ajudar a traduzir as regras subjacentes envolvidas na ques-
tão em uma forma que possa ser absorvida pelo seu subconsciente e, quando você menos
esperar, o problema estará resolvido. Vamos lá!
O primeiro subproblema desta atividade diz respeito à leitura dos números. É sempre bom
começar pela leitura. Afinal, como vamos resolver o problema se nem conseguimos fazer a
leitura dos valores?
59
</>
n = int(input(‘Quantos números serão lidos? ‘))
Agora que já conseguimos ler os números, vamos pensar no que podemos fazer para iden-
tificar o maior deles. Pode parecer difícil, mas temos uma técnica. O princípio dessa técnica é
simples: sempre que encontrar um problema difícil, você deve tentar diminuí-lo ou simplificá-
-lo um pouco. Faça isso até que o problema fique simples demais para simplificar novamente
e, depois, volte resolvendo os problemas maiores (mais complicados).
Por exemplo, o que acontece quando temos apenas um número? É bem mais fácil resolver
este problema! O maior número em uma sequência de um número, é sempre o único número!
Em Python, isto pode ser escrito da seguinte forma:
E se tivéssemos dois números? Qual deles poderia ser o maior? Há, obviamente, duas pos-
sibilidades e, para ter certeza, vamos precisar usar o comando de comparação if, estudado na
Unidade III. O código a seguir implementa essa ideia.
3.
6. maior = num
60
2. maior = num;
3.
7.
11.
Este exemplo é revelador. É possível perceber agora que para analisar quatro números, va-
mos precisar de mais uma comparação. Generalizando, podemos perceber que com n nú-
meros vamos precisar analisar n possibilidades e podemos fazer isto com n - 1 comparações
(comandos if)!
61
3. maior = num;
4. i = 1
8. maior = num
9. i = i + 1
3. Percorrer o código linha a linha, preenchendo a tabela. Cada coluna de uma variável
deve conter o respectivo valor dessa variável após a linha de código ser executada. Dica: Ano-
te no canto da tabela a linha do código que está sendo analisada.
62
Para simular este programa, vamos criar uma tabela com 4 (quatro) colunas e percorrer
cada linha do código e atualizar o valor das variáveis.
O quadro a seguir mostra a tabela criada neste caso. Adicionamos uma coluna para guardar
a linha do código que foi executada. Os traços indicam que nenhum valor foi armazenados
nas variáveis.
Variáveis
Linha n num maior I
- - - -
Agora que a Tabela já foi criada, precisamos percorrer cada linha do código. Lembre-se de
que as operações dentro do bloco de repetição deixam de ser executadas apenas quando a
condição do comando while é falsa.
Variáveis
Linha n num maior I
1 3 - - -
Variáveis
Linha n num maior i
1 3 - - -
2 3 6 - -
63
Após a instrução:
maior = num
Variáveis
Linha N num maior i
1 3 - - -
2 3 6 - -
3 3 6 6 -
E após a instrução
i = 1
Variáveis
Linha N num maior i
1 3 - - -
2 3 6 - -
3 3 6 6
4 3 6 6 1
i <= n-1
Se esta condição for verdadeira, o bloco de códigos da repetição será executado, e executa-
mos a linha 6. Se for condição for falsa, por outro lado, pulamos para a linha 10.
64
Assumindo que o valor digitado pelo usuário é 4, a tabela contém os seguintes valores.
Variáveis
Linha N num maior i
1 3 - - -
2 3 6 - -
3 3 6 6
4 3 6 6 1
6 3 4 6 1
Agora, a instrução
será executada.
Como vimos na Unidade III, o bloco da condicional (linha 8) será executado apenas se a
condição do comando if for verdadeira. Caso contrário, a instrução da linha 9 será executada.
Vamos verificar, então, se o valor da variável maior armazenado na tabela é menor que o
valor da variável num. Como maior vale 6 e num vale 4, esta condição é falsa.
i = i + 1
65
1 3 - - -
2 3 6 - -
3 3 6 6
4 3 6 6 1
6 3 4 6 1
8 3 4 6 2
i <= n-1
Como fizemos lá atrás, vamos olhar os valores de i e n na tabela. A variável i agora vale 2, e
a variável n vale 3. Logo, 2 <= 2 é verdade.
Como esta condição é verdadeira, vamos executar o bloco da repetição mais uma vez. Assu-
mindo que o valor digitado pelo usuário foi 7, após a instrução
Variáveis
Linha n Num maior i
1 3 - - -
2 3 6 - -
3 3 6 6
4 3 6 6 1
6 3 4 6 1
8 3 4 6 2
6 3 7 6 2
66
for verdadeira.
Como a condição é verdadeira (note que a variável maior vale 6 e num vale 7), vamos exe-
cutar a instrução:
maior = num
Variáveis
Linha n num maior i
1 3 - - -
2 3 6 - -
3 3 6 6
4 3 6 6 1
6 3 4 6 1
8 3 4 6 2
6 3 7 6 2
8 3 7 7 2
Após a instrução
i = i + 1
67
1 3 - - -
2 3 6 - -
3 3 6 6
4 3 6 6 1
6 3 4 6 1
8 3 4 6 2
6 3 7 6 2
8 3 7 7 2
9 3 7 7 3
i <= n-1
Conferindo a tabela, percebemos que a variável i vale 3, e a variável n também vale 3. Logo,
3 <= 2 não é verdade.
O maior número é: 7
Como não há mais instruções, o programa acaba. Observe que o programa produziu exa-
tamente o resultado esperado. Foram digitados os números 6, 4 e 7, e o programa encontrou
que o 7 é o maior deles.
68
Palavras Finais
Pensando nisso, entendemos que a educação não deve somente capacitar o indivíduo a
trabalhar com alguma ferramenta específica, mas também capacitá-lo para perceber o com-
putador como um instrumento de resolução de problemas que aumenta o seu poder cogni-
tivo e operacional. Todo aluno deve ser capaz de criar e propor as suas próprias ferramentas.
Ao profissional licenciado para atuar com Tecnologias Educacionais cabe pensar em como
vencer as barreiras impostas pelos alunos nos diferentes níveis de ensino e contribuir para o
desenvolvimento de esquemas mentais que o capacitem a chegar à solução de problemas.
69
Referências
LEITE, Mario. Técnicas de Programação - Uma Abordagem Moderna. Brasport, 2006.
70