Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Algoritmos
Apostila Algoritmos
Faculdade de Computao
Faculdade de Computao
Introduo a Algoritmos
1. Resoluo de Problemas pelo Computador
Processamento
(Transformao)
Dados de
Entrada
Dados de
Sada
COMPUTADOR
Problema
Anlise de
Requisitos
Projeto e
Desenvolvimento
Manuteno
Produto
2.1.
Especificao
Testes e
Validao
Programas
Pg.:1/28
Faculdade de Computao
Requisito = ao que deve ser executada pelo sistema. (Ex: registrar as notas dos
2.2.
Soluo
Algortmica
Programa de
Computador
2 Fase: Implementao (codificao)
Este processo dividido em 3 etapas:
Projeto Preliminar: definio da estrutura modular do software, as
interfaces e as estruturas de dados utilizadas;
Projeto Detalhado: descrio detalhada de cada mdulo definido no
projeto preliminar (algoritmo);
Codificao: migrao das instrues do algoritmo para uma linguagem de
programao previamente definida (programas).
2.3.
Teste e Validao
Pg.:2/28
Faculdade de Computao
2.4.
Manuteno
- Funciona corretamente
Sistema de Boa
Qualidade
3. Algoritmo
Algoritmo uma seqncia finita e bem definida de passos que, quando
executados, realizam uma tarefa especfica ou resolvem um problema.
Ex: Receitas de culinria, manual de instrues, coreografia, etc.
Propriedades do algoritmo:
Composto por aes simples e bem definidas (no pode haver ambigidade,
ou seja, cada instruo representa uma ao que deve ser entendida e
realizada).
Seqncia ordenada de aes
Conjunto finito de passos
Pg.:3/28
Faculdade de Computao
para
algoritmo
ser
R:
Depende da relao de instrues reconhecidas pelo AGENTE EXECUTOR do
algoritmo.
Ex:
receita de bolo
Ser Humano
algoritmo computacional
Computador
1
2
3
A
Soluo:
1.
2.
3.
4.
5.
6.
7.
Pg.:4/28
Faculdade de Computao
3
A
3
A
1
B
2
B
1
3
B
2
A
3
B
3
A
3
A
Exerccios de Lgica:
1. Temos 3 recipientes de tamanhos distintos (8, 5 e 3 litros), sendo que o recipiente
de 8 litros est totalmente cheio. Considerando que os recipientes no sejam
graduados, deseja-se colocar 4 litros em dois recipientes.
2. Numa noite, acontece uma queda de energia. Sabendo-se que tem uma vela na
gaveta da cozinha, um lampio embaixo da cama, fusveis de reserva no armrio da
sala e fsforos na estante da cozinha; descreva a seqncia de aes realizados
para diagnosticar e resolver o problema. Neste exerccio devemos considerar as
seguintes possibilidades:
Fusvel queimado; e
Pg.:5/28
Faculdade de Computao
4. Algoritmos Computacionais
Diferem dos algoritmos gerais por serem executados pelo computador.
Diferem dos programas por serem desenvolvidos em linguagens NO reconhecidas
pelo computador.
Auxiliam o usurio na concepo da soluo de um problema,
independentemente da linguagem de programao que ser utilizada.
Limitaes:
Os algoritmos computacionais devem ser expressos nos termos do conjunto
de instrues entendidas pelo computador.
Conceitos bsicos utilizados na construo e interpretao de algoritmos:
Estrutura de Dados: para manipulao das informaes utilizadas no
algoritmo.
Estrutura de Controle: para manipulao das aes.
4.1.
quais
informaes
estaro
Pg.:6/28
Faculdade de Computao
4.2.
I. Descrio Narrativa
Especificao verbal dos passos em linguagem natural.
Desvantagens:
A linguagem natural imprecisa (possibilita ambigidades).
Proporciona maior trabalho na codificao.
Sugere-se sua utilizao apenas para comentar algoritmos e/ou programas,
esclarecendo ou realando pontos especficos.
II. Fluxograma
Uso de ilustraes grficas para representar as instrues.
Apresenta a lgica de um algoritmo, enfatizando passos individuais (objetos
grficos) e o fluxo de execuo (setas)
Desvantagens:
Fluxogramas detalhados podem obscurecer a estrutura do programa.
Permite transferncias arbitrrias de controle
Pg.:7/28
Faculdade de Computao
INICIO
INICIO
1
N
Leitura
P1, P2,
P3 e P4
condio
S
Ao 2
Ao 1
MEDIA =
(P1+P2+P3+P4)/4
Ao 3
MEDIA
condio
S
N
FIM
FIM
condio
Escreva Mdia
IV. Pseudolinguagem
Linguagem especial para desenvolvimento de algoritmos, que utiliza expresses
pr-definidas para representar aes e fluxos de controle.
Funciona como uma linguagem simplificada de programao, logo, facilita a
codificao futura.
Pg.:8/28
Faculdade de Computao
uma descrio textual, estruturada e regida por regras; que descrevem os passos
executados no algoritmo.
Possui caractersticas similares s linguagens de programao:
Utiliza palavras-chaves (ex: escreva, se-ento, etc.);
Identao (alinhamento dos blocos de comandos);
Possui um comando por linha;
Utiliza ; como finalizador de comando;
Etc.
5. Estrutura de Dados
O computador s conhece os valores que esto armazenados na sua
memria.
Portanto, a maioria das instrues est, de certa forma, associada ao processo de
armazenamento ou transformao destes valores.
Na concepo de algoritmo, pode-se considerar:
Memria = conjunto de posies;
Cada posio recebe uma identificao (nome) e armazena um valor.
Pg.:9/28
Faculdade de Computao
IDADE
NOME
X1
VALOR
18
Joo
2.5
5.1.
Numricos:
Inteiro (ex: 1, -5, 100);
Real (ex: 1.3, -3.5, 0.55).
Prof. Luiz Gustavo A. Martins
Pg.:10/28
Faculdade de Computao
No-Numricos:
Booleano (lgico ex: True ou False);
Caracter (alfanumrico ex: A, @, 1).
5.2.
registro {
char[1..100]: nome;
int: idade;
real: salario
booleano: ativo} : cadastro;
Pg.:11/28
Faculdade de Computao
Declarao de variveis e
constantes locais
Comentrios
Comandos de E/S
Comandos de Atribuio
Estruturas de seleo
Estruturas de repetio
Chamada de Funes ou
Procedimentos
7. Comandos Bsicos
7.1.
Declarao de Variveis:
7.2.
Comentrios:
Pg.:12/28
7.3.
Faculdade de Computao
7.4.
Comando de Atribuio:
Pg.:13/28
Faculdade de Computao
Tipos de Funes:
abs(X): obtm o valor absoluto de X;
sqrt(X): calcula a raiz quadrada de X;
log(X): calcula o logaritmo de X;
mod(X,Y): obtm o resto da diviso de X por Y;
trunca(X): obtm a parte inteira de X;
round(X): arredonda o valor de X;
sen(X): calcula o valor do seno de X;
cos(X): calcula o valor do cosseno de X;
tan(X): calcula o valor da tangente de X.
Associatividade
Parnteses e Funes
Direita Esquerda
Exponenciao e Radiciao
Esquerda Direita
Multiplicao e Diviso
Esquerda Direita
Soma e Subtrao
Esquerda Direita
Operadores Relacionais
Esquerda Direita
Operadores Lgicos
Esquerda Direita
Exerccios de Fixao
1. Faa 2 exemplos para cada um dos conceitos a seguir: entrada de dados; sada de
dados; declarao de variveis (tipos primitivos); declarao de variveis (tipos
compostos); e comandos de atribuio de expresses aritmticas e funes.
2. Utilizando tipos primitivos, crie declaraes de variveis que armazenem as
seguintes informaes: o nome de um objeto geomtrico, a quantidade de lados, a
rea, o permetro e se o objeto regular ou no.
3. Refaa o exerccio anterior utilizando dados estruturados, com o objetivo de
armazenar os dados de at 10 objetos.
Pg.:14/28
Faculdade de Computao
8. Estruturas de Controle
8.1.
Estrutura Seqencial:
8.2.
Estrutura de Seleo:
Comando SE SEM
a clusula SENO
fim-se
Pg.:15/28
Faculdade de Computao
se cadastro[1].sexo = F ento
escreva(Sra. , cadastro[1].nome);
seno
Comando SE COM
a clusula SENO
escreva(Sr. , cadastro[1].nome);
fim-se
Ninhos de SE:
Dentro de um comando de seleo podemos colocar qualquer tipo de
comando, inclusive outros comandos de seleo.
Exemplo:
se <condio1> ento
se <condio2> ento
bloco de comandos (condio2 Verdadeira);
fim-se
seno
se <condio3> ento
bloco de comandos (condio3 verdadeira);
seno
bloco de comandos (condio3 falsa);
fim-se
fim-se
Comando CASO:
Testa vrias condies para uma mesma varivel e executa o bloco de
comandos relacionado condio verdadeira.
Substitui os ninhos de comando SE, quando estes so feitos com base em
uma mesma expresso e testarem somente igualdades.
Sintaxe: caso <identificador_varivel>
<op1>:
bloco de comandos;
<op1>:
bloco de comandos;
<op1>:
bloco de comandos;
Pg.:16/28
Faculdade de Computao
<op1>:
bloco de comandos;
outro:
bloco de comandos;
fim-caso
escreva(Solteiro);
C:
escreva(Casado);
D:
escreva(Divorciado);
V:
escreva(Vivo);
outro: escreva(Desconhecido);
fim-caso
Exerccios de Fixao:
1. Faa um algoritmo para montar um menu na tela com 5 opes (1 - Cadastro,
2 - Edio, 3 - Consulta, 4 - Excluso e 5 - Sair), leia a opo escolhida e
chame a funo correspondente.
8.3.
Estrutura de Repetio:
Pg.:17/28
Faculdade de Computao
repita
bloco de comandos;
ate <condio>
Pg.:18/28
Faculdade de Computao
Exemplo:
repita
leia(numero);
escreva(o quadrado de , numero, : );
escreva(numero^2);
ate numero = 0
escreva(FIM DO PROGRAMA);
Comando PARA:
Repete o bloco de comandos enquanto a varivel de controle for menor ou
igual ao valor final (vlr_fim).
A varivel de controle recebe um valor inicial (vlr_ini) e incrementada
automaticamente pelo parmetro de incremento padro (acrscimo de 1),
quando a clusula PASSO omitada, ou pelo valor definido pelo usurio
atravs desta clusula.
A varivel de controle NO pode ser modificada no bloco de comandos.
Sintaxe: para <var_controle> = vlr_ini ate vlr_fim passo <inc> faa
bloco de comandos;
fim-para
Exemplo:
para cont = 1 ate 9 passo 2 faa
vetor[cont] cont;
vetor[cont+1] cont;
fim-para
/* escreve o vetor na ordem inversa */
para cont = 10 ate 1 passo -1 faa
escreva(vetor[cont], , );
fim-para
Pg.:19/28
Faculdade de Computao
Exerccios de Fixao:
1. Elabore um algoritmo para determinar o menor nmero inteiro fornecido pelo
usurio. Considere que o nmero zero indica o fim da entrada de dados.
2. Construa um algoritmo que calcule e imprima a somatria de N nmeros (sendo
N > 0). Considere como dados de entrada a quantidade de nmeros a serem
lidos e os valores dos respectivos nmeros.
3. Faa um algoritmo que, sem utilizar o operador de exponenciao, realize a
operao XY, para qualquer X e Y fornecido pelo usurio.
4. Reescreva o algoritmo acima, utilizando as demais estruturas de repetio.
9. Outras Informaes
9.1.
EXEMPLO
leia(nome, idade);
Resultados de expresses
Acumuladores/Contadores
Finalizadores de repeties
Sinalizadores/Flags
9.2.
Pg.:20/28
9.3.
Faculdade de Computao
Teste de Mesa
Pg.:21/28
Faculdade de Computao
P1
P2
P3
P4
media
media < 6
Declare
int: P1,P2,P3,P4;
real: media;
Inicio
leia(P1,P2,P3,P4);
media (P1+P2+P3+P4) / 4;
5,75
escreva(media);
5,75
5,75
true
Demais comandos
5,75
true
P1
P2
P3
P4
media
media < 6
Declare
int: P1,P2,P3,P4;
real: media;
Inicio
leia(P1,P2,P3,P4);
-5
11
12
15
media (P1+P2+P3+P4) / 4;
-5
11
12
15
8,25
escreva(media);
-5
11
12
15
8,25
-5
11
12
15
8,25
False
Demais comandos
-5
11
12
15
8,25
false
Este teste identifica duas falhas no algoritmo: aceitar valor negativo e valores
Pg.:22/28
Faculdade de Computao
Exerccios de Fixao:
1. Faa o teste de mesa no algoritmo do exerccio 4 do slide 50 e verifique se
necessria a incluso de alguma consistncia de dados.
2. Teste os algoritmos abaixo:
algoritmo_Exec2.a
declare
real: A, B;
int: C, X;
inicio
A 6.0;
B A/2;
C 11;
X trunca(C / 4);
C mod(C, 2);
B 5.4;
C C+1;
A B+2;
fim
fim-algoritmo
algoritmo_Exec2.c
declare
int: C, X, R;
inicio
leia(C, X);
se C > X entao
escreva(0);
senao
repita
R R + C;
C C+1;
ate C > X
escreva(R);
fim-se
fim
fim-algoritmo
algoritmo_Exec2.b
declare
int: c, num, exp, res;
inicio
leia(num, exp);
res 1;
para c=1 ate exp faa
res res * num;
fim-para
escreva(res);
fim
fim-algoritmo
Pg.:23/28
Faculdade de Computao
10.1.
Subalgoritmos (Mdulos)
Por conveno, um subalgoritmo deve ser declarado acima dos mdulos que o
chamam.
Todo subalgoritmo tem por objetivo a resoluo de um determinado subproblema.
Portanto, mantm as mesmas caractersticas de um algoritmo comum, ou
seja, pode ter dados de entrada; dados de Sada; e conter qualquer tipo de
comando aceito por um algoritmo.
Por serem tratados de forma independente dos demais mdulos, cada subalgoritmo
s pode manipular variveis/constantes:
Globais: declaradas no incio do algoritmo principal (passagem de valor
por referncia); ou
Locais: declaradas no prprio subalgoritmo (passagem de valor por
argumento).
Subalgoritmos podem ser do tipo Procedimento (no retorna valor de forma
explcita) ou Funo (retorna valor de forma explcita).
10.1.1.
Troca de Informao
Pg.:24/28
Faculdade de Computao
10.1.2.
Argumentos
10.1.3.
Subalgoritmo Procedimento
Pg.:25/28
Faculdade de Computao
Sintaxe:
procedimento <nome_proc>(arg1:tipo, arg2:tipo, ... , argN:tipo)
<declarao de variveis/constantes locais>
inicio
<bloco de comandos>
fim
fim-procedimento
inicio
<nome_proc>(var1, var2, ... , varN);
fim
10.1.4.
Subalgoritmo Funo
Sintaxe:
funcao <nome_func>(arg1:tipo, arg2:tipo, ... , argN:tipo): tipo_funcao
<declarao de variveis/constantes locais>
inicio
<bloco de comandos>
fim
fim-funcao
inicio
var <nome_func>(var1, var2, ... , varN);
fim
Pg.:26/28
10.1.5.
Faculdade de Computao
Consideraes Finais
Exerccios de Fixao:
1. Utilizando os conceitos de procedimentos e funes, construa um algoritmo que
determine, para uma srie de valores inteiros, quantos so maiores que a mdia
do conjunto.
2. Utilizando os conceitos de procedimentos e funes, desenvolva um algoritmo
que calcule, a partir de 2 nmeros inteiros P e M, a combinao de M
elementos tomados P a P, conforme a expresso:
CMP =
M!
P!( M P )!
Pg.:27/28
Faculdade de Computao
Pg.:28/28