Table Of ContentUniversidade Federal Fluminense
Centro Tecnológico
Instituto de Computação
Departamento de Ciência da Computação
Construção de Algoritmos
Versão 2005
Prof. Leonardo Cruz da Costa
1
Capítulo I - INTRODUÇÃO
É comum seguirmos roteiros para solucionar problemas no dia a dia. Esses roteiros
descrevem ações que devem ser seguidas uma a após a outra com o objetivo de produzir o resultado
desejado. Os roteiros podem ser textuais ou gráficos.
Exemplo 1: Como fazer um pato no tucupi?
Tempere o pato com o alho, a cebola, sal e pimenta-do-reino.
Aqueça o forno em temperatura média.
Coloque o pato numa assadeira com um pouco de óleo e leve ao forno até dourar.
Numa panela, coloque o tucupi e os pedaços de pato assado.
Leve ao fogo alto até ferver.
Abaixe o fogo e cozinhe até ficar macio.
Acrescente mais tucupi, se necessário.
Junte as folhas de jambu e cozinhe até que os talos fiquem macios.
Sirva com farinha de mandioca.
Exemplo 2: Como chegar no sítio do amigo para churrasco de final de semana?
Siga pela rodovia RJ 104
No quilometro 98 virar a esquerda na primeira entrada de terra
Siga até a primeira ponte.
Atravesse a ponte e dobre à esquerda.
Procure a placa sítio Animação.
Exemplo 3: Como deve ser a instalação do sistema de aquecimento de água solar para piscinas.
1. Moto Bomba
2. Filtro
3. Registro de Esfera ou Gaveta
4. Válvula de Retenção
5. Saída de água fria para as placas
6. Retorno de água quente das placas
7. Tubulação de retorno para piscina.
2
Exemplo 4: Roteiro para trocar uma lâmpada queimada.
a) Primeira versão
1. Remover a lâmpada queimada;
2. Colocar a nova lâmpada;
Mas isto está muito abstrato. O que é remover uma lâmpada?
b) Segunda versão (um pouco mais detalhada)
1. Buscar uma lâmpada nova;
2. Pegar uma escada
3. Posicionar a escada debaixo da lâmpada;
4. Subir na escada até que a lâmpada possa ser alcançada;
5. Girar a lâmpada queimada no sentido anti-horário até que se solte;
6. Colocar a lâmpada nova girando-a no sentido horário;
7. Descer da escada;
E se a lâmpada não estiver queimada?
c) Terceira versão (um pouco mais detalhada)
1. Buscar uma lâmpada nova;
2. Pegar uma escada
3. Posicionar a escada debaixo da lâmpada;
4. Acionar o interruptor;
5. Se a lâmpada não acender, então
6. Subir na escada até que a lâmpada possa ser alcançada;
7. Girar a lâmpada queimada no sentido anti-horário até que se solte;
8. Colocar a lâmpada nova girando-a no sentido horário;
9. Descer da escada;
3
Nessa versão algumas ações estão vinculadas à condição lâmpada não acender, ou seja,
somente efetua-se a troca da lâmpada caso a condição lâmpada queimada (lâmpada não acender)
for verdadeira.
Se a condição lâmpada não acender for falsa, nada mais será realizado.
Apesar do algoritmo estar correto, ele pode ser melhorado uma vez que somente seria necessário
pegar a escada, caso a condição lâmpada não acender seja verdadeira:
d) Quarta versão (um pouco mais detalhada)
1. Acionar o interruptor;
2. Se a lâmpada não acender, então
2.1 Buscar uma lâmpada nova;
2.2 Pegar uma escada
2.3 Posicionar a escada debaixo da lâmpada;
2.4 Subir na escada até que a lâmpada possa ser alcançada;
2.5 Girar a lâmpada queimada no sentido anti-horário até que se solte;
2.6 Colocar a lâmpada nova girando-a no sentido horário;
2.7 Descer da escada;
Exercícios
1. Elaborar um algoritmo que mostre os passos necessários para trocar um pneu furado.
2. Um homem precisa atravessar um rio com um barco que possui capacidade apenas para
carregar ele mesmo e mais uma de suas três cargas, que são: um lobo, um bode e um maço de
alfafa. O que o homem deve fazer para conseguir atravessar o rio sem permite que fiquem em
uma margem, o lobo e a cabra, a cabra e a alfafa? Escreva um algoritmo mostrando a resposta,
ou seja, indicando todas as ações necessárias para efetuar a travessia segura.
I.1 – ALGORITMOS
Computadores muitas vezes chamados erroneamente de cérebro eletrônico, não têm, pelo
menos até agora, a capacidade de resolver por conta própria problemas. Assim, como outras
máquinas, eles precisam ser instruídos, para que através de um conjunto de ações possam
solucionar o problema.
Para resolvermos problemas, através de computador, é necessário que uma seqüência de
operações seja criada, semelhante aos roteiros apresentados anteriormente. A solução é obtida
através de duas etapas:
• A criação de uma seqüência de operações que, quando executada, produz o resultado do
problema (a esta seqüência se dá o nome de algoritmo).
• A execução, propriamente dita, da seqüência de operações.
“Um algoritmo é a descrição de um padrão de comportamento, expressado em termos de um
repertório bem definido e finito de ações primitivas, as quais damos por certo que podem ser
executadas” (Guimarães e Lages).
4
Um algoritmo pode ser definido também como: “uma seqüência ordenada, sem
ambigüidade, de passos que levam à solução de um dado problema” (Tremblay e Bunt [5]).
As definições acima mostram que um algoritmo precisa:
• Ter inicio e fim;
• Ser descritas em termos de ações não ambíguas e bem definida;
• Que as ações sigam uma seqüência ordenada.
Essas três características são entendidas de maneira fáceis, pois:
1. Ter inicio e fim: um computador não pode ficar infinitamente buscando uma solução
para o problema;
2. Ações não ambíguas e bem definidas: não poder haver dúvidas da ação a ser tomada.
Observe o passo no exemplo 1 - Coloque o pato numa assadeira com um pouco de óleo e
leve ao forno até dourar. O que significa um pouco de óleo: 1 ml., 2 ml, 10 litros, etc.
3. Seqüência ordenada: as ações devem seguir sempre a mesma ordem de execução, pois se
A ordem fosse aleatória não se pode garantir a solução adequada para o problema.
I.2 REPRESENTAÇÃO DE ALGORITMOS
O processo de resolução de um problema através de computador começa no entendimento
de forma clara do problema, para qual é projetado um algoritmo, que futuramente será codificado
em uma linguagem de programação, transformando-se dessa forma em um programa.
Fase de resolução do Problema Fase de Implementação
(utilização de uma linguagem de Programação)
Assim, um algoritmo é representado de duas maneiras diferentes (mas equivalentes):
A primeira representação deve ser fácil para as pessoas, construir, modificar e testar as
ações (usada na construção em si).
A segunda deve ser entendida por computadores – é usada na fase de execução, quando da
transformação (codificação) em programa (tradução de um algoritmo em linguagem de
programação).
Situações semelhantes ocorrem em outras áreas do conhecimento. Na Arquitetura e na
Engenharia, os profissionais elaboram várias plantas (baixa, corte, situação, etc.) da mesma
5
edificação para diferentes fins. A edificação é a solução projetada e cada planta, embora diferente, é
a representação da mesma edificação.
1) A primeira representação: usadas pelas pessoas
A linguagem natural (português, inglês): utilizada nas receitas, instruções, etc.. Para
solução de problemas em computação apresenta um inconveniente: a ambigüidade de alguns
termos. Assim, restrições são impostas à linguagem natural, objetivando a redução de ambigüidade,
criando uma pseudolinguagem (ou, ainda, pseudocódigo, Portugol).
Representações gráficas: são bastante recomendáveis já que um desenho muitas vezes
substitui, com vantagem, mil palavras.
a) fluxograma
b) diagramas de Nassi-Shneidermam
c) método de Jackson
d) diagramas de Warnier-Or
2) A segunda representação: usada pelo computador
Utiliza-se uma linguagem de programação (Pascal, Cobol, C, Java, C# etc.), para representar
algoritmos, transformando-os em programas.
6
Capítulo II - CONSTRUÇÃO DE ALGORITMOS
Como vimos anteriormente quando queremos resolver um problema utilizando um
computador, devemos construir uma seqüência de passos (algoritmo) que conduz à solução do
problema. Uma das vantagens de utilizar algoritmos é que a partir dele o programador pode
codificá-lo em qualquer linguagem de programação.
OS PASSOS DE UM ALGORITMO
Um algoritmo é uma seqüência de passos, onde cada passo é de uma das três naturezas seguintes:
a) uma operação elementar;
b) uma operação de controle especificando uma seleção entre seqüências de passos;
c) uma operação de controle especificando a repetição de uma seqüência de passos;
A) OPERAÇÕES ELEMENTARES
A principal motivação para o desenvolvimento e uso dos computadores foi a necessidade de
manipular com eficiência grandes quantidade de dados. Os dados podem ser de diversos tipos:
primitivos, agregados homogêneos, agregados heterogêneos, registros, arquivos de registros, etc..
O conjunto dos tipos primitivos que compõe uma linguagem de programação pode mudar
dependendo da linguagem de programação. A seguir apresentamos os tipos primitivos que
normalmente são usados na construção de algoritmos.
Inteiro: denota todo o conjunto de valores numéricos que pertencem ao conjunto dos
números inteiros (negativos, positivos ou nulos)
Ex: Quantidade de alunos: 50
Quantidade de professores de um curso: 35
Real: denota todo o conjunto de valores numéricos que pertença ao conjunto dos números
reais (negativos, positivos ou nulos)
Ex: Média de um aluno: 8.5
Salário de uma pessoa: R$ 300.00
Caractere: denota todo o conjunto de valores que pertença ao conjunto dos caracteres
(Alfabéticos: A-Z, a-z; numéricos: 0-9; e especiais: ?, @," ~, etc.)
Ex: Nome do aluno: "João Antônio"
Orientação: "usar somente caneta preta no preenchimento"
7
Lógico: denota duas situações (biestável: verdadeiro - falso, 0-1)
Ex: Questão: Certa
Situação: Reprovado
1. Determinar qual o tipo de dado presente nas sentenças abaixo:
a) Há na porta do banheiro uma placa ‘HOMENS’.
b) O salário de Maria é de R$ 1030,98.
c) Uma maneira econômica de representar o sexo de uma pessoa é através de ‘F’ ou ‘M’.
d) A sala de aula fica no segundo andar.
e) O planeta Terra tem a forma quadrada.
Entende-se por operações elementares todos os cálculos com um resultado produzido,
entrada e saída de dados; movimentação de dados.
A.1) ATRIBUIÇÃO
A memória permite o armazenamento de dados (valores), que podem ser obtidos pelos
dispositivos de entrada e saída, ou calculados em operações no programa e posteriormente
colocados à disposição do usuário. Para que a memória possa armazenar os dados, uma área é
reservada na memória e associada a identificadores (nomes) usados no programa. A esta área se dá
o nome de Tabela de Símbolos (TS).
Exemplo:
Suponha que desejamos utilizar os valores numéricos 1 e 15. Para que esses possam
permanecer na memória e posteriormente serem utilizados para algum tipo de processamento, são
criados dois nomes SOMA e RESULTADO. Cada linha na Tabela de Símbolo (TS), representa uma
área na memória que guardará os valores e será manipulada (referenciada, identificada) pelo nome
dado (SOMA e RESULTADO), como representado a seguir:
Tabela de Símbolos
NOME TIPO VALOR
SOMA Inteiro 1
RESULTADO Inteiro 15
Quando necessitarmos de manipular o valor 15 devemos utilizar o nome Resultado e para o
valor 1, Soma.
A esses nomes criados pelo programador, são chamados de identificadores. Pois,
identificam o local (área de memória) onde o valor está armazenado.
8
A criação de nomes é livre?
Não, o programador deve seguir uma regra para construir os identificador, ou em outras
palavras os nomes utilizados no algoritmo.
Regra para Construção de Identificadores
Onde: LETRA = A ... Z
DÌGITO = 0 ... 9
Observações:
a) O primeiro caractere do nome sempre será uma letra;
b) Não existe uma restrição a quantidade de letras ou dígitos que formam o nome;
d) O nome não pode possuir espaço em branco ou símbolos especiais, tais como: ( ) # $ %
& * ‘ “ = + [ ^ ´ ` ;
e) Não poderão ser usados outros caracteres a não ser letras e números;
f) As letras sempre serão maiúsculas;
g) Não há acentuação dos nomes;
h) Não poderá ser um nome uma palavra reservada a uma instrução. Isto é, os nomes
devem ser diferentes de: inteiro, real, caractere, lógico, enquanto, faça, fim-
enquanto, declare, repetir, leia, escreva, etc..
1. Assinale os identificadores válidos:
a) (X), b) x c) ah! d) "aluno" e) #55
f)KM/L g)UYT h) AB*C i) CEP h) dia/mes/ano
Como especificamos cada linha da tabela de símbolos?
A associação do identificador ao local que receberá o dado na tabela de símbolo (definição
de cada linha da tabela) é chamada de declaração (é a compilação da declaração que produz uma
TS correspondente a um programa).
9
Em pseudocódigo as declarações podem ser representadas como:
DECLARE <identificador1, identificador2, ...> COMO <tipo>
Onde tipo define as características dos dados a serem manipulados, pode ser: inteiro, real, caracter,
lógico, entre outros.
Assim, para definirmos que SOMA e RESULTADO, são os nomes utilizados no algoritmo e
que ambos representarão números inteiros, é necessário utilizarmos a declaração:
DECLARE SOMA, RESULTADO COMO INTEIRO
Essa declaração produzirá a seguinte tabela:
NOME TIPO VALOR
SOMA Inteiro
RESULTADO Inteiro
Outros exemplos:
DECLARE X, Y, Z, TOTAL COMO REAL
NOME TIPO VALOR
X Real
Y Real
Z Real
DECLARE T COMO LOGICO
NOME TIPO VALOR
T LÓGICO
DECLARE A, B, TOTALH, TOTALM COMO INTEIRO
DECLARE X, K COMO REAL
DECLARE S COMO CARATER
NOME TIPO VALOR
A INTEIRO
B INTEIRO
TOTALH INTEIRO
TOTALM INTEIRO
X REAL
K REAL
S CARATER
Observe que a declaração irá produzir uma tabela com os nomes definidos, porém os valores
não aparecem, não estão especificados.
10
Description:Utiliza-se uma linguagem de programação (Pascal, Cobol, C, Java, C# etc.), para representar algoritmos Escreva um algoritmo que leia um valor verifique se ele se encontra no intervalo entre (5 ,20]. 2. Elaborar um algoritmo