Você está na página 1de 93

Algoritmos

Algoritmo Textual Informal


Modo de preparo:
Bata a margarina, as gemas e o acar at ficar
cremoso
Junte o leite, o coco e a farinha e continue
batendo
Acrescente o fermento e, por ltimo, as claras em
neve
Unte uma forma com manteiga e leve ao forno
para assar

Quo cremoso?!?
De uma vez s?!?
Quanto tempo?!?
Quanto tempo?!?

Modo de preparo:
Bata a margarina, as gemas e o acar por 15
minutos
Junte o leite, o coco e a farinha e continue
batendo por mais 15 minutos
Acrescente 20 g de fermento e, por ltimo, as
claras em neve
Unte uma forma com manteiga e leve ao forno
para assar por 30 minutos

Algoritmo Textual Informal
Refinado
Algoritmo Grfico-Textual Informal
Montagem de um Aeromodelo
Material
Cola especial para plsticos
Estilete
Lixas finas
Durex ou fita crepe
Pregador de roupas, elsticos

Identificao das peas

Algoritmo Grfico-Textual
Informal
Instrues
Leia e entenda as instrues antes de comear a
montagem
Lave as peas com gua e detergente. Na lavagem
sero removidos desmoldantes e sujeiras, que
dificultam a colagem e a pintura. Faa isto dentro de
uma bacia, para evitar perder peas pequenas, que
porventura se soltem
Encontre as peas que devem ser usadas na
primeira parte da montagem (figura do slide anterior)
Lixe as peas com cuidado eliminando as rebarbas
...
Algoritmo Grfico-Textual
Informal
Troca de pneu
Abra o porta-mala e verifique se todos
acessrios esto l. Em caso negativo,
feche o porta-malas e pea carona a
algum. Em caso positivo, retire o
tringulo, posicione-o a cerca de 30 m do
carro, e, depois, retire o estepe e o macaco.
Levante o carro...

Algoritmo Textual Informal 2
Troca de pneu

Algoritmo Grfico Informal
Acessrios
OK?
Abre porta-malas
Pega tringulo
Fecha
porta-malas
Troca de pneu (Fluxograma)

Algoritmo Grfico Semi-formal
No
Sim
Troca de pneu

abre(porta_malas)
Se acessorio_ok = FALSO
Ento
fecha(porta_malas)
espera_carona()
Seno
pega_triangulo()
...
Algoritmo Textual Formal
Problema da Torre de Hani
Seja a seguinte situao:
deve-se mover todos os discos do primeiro eixo para o
terceiro mantendo-se a ordem original
em cada movimento, pode-se mover apenas um disco
um disco nunca poder ser sobreposto por outro maior

Algoritmo: Problemas Complexos
Passo 1:
mova disco menor para terceiro eixo

Algoritmo: Problemas Complexos
Passo 2:
mova disco mdio para segundo eixo
Algoritmo: Problemas Complexos
Passo 3:
mova disco menor para segundo eixo
Algoritmo: Problemas Complexos
Passo 4:
mova disco maior para terceiro eixo


Algoritmo: Problemas Complexos
Passo 5:
mova disco menor para primeiro eixo

Algoritmo: Problemas Complexos
Passo 6:
mova disco mdio para terceiro eixo
Algoritmo: Problemas Complexos
Passo 7:
mova disco menor para terceiro eixo


Algoritmo: Problemas Complexos
Seqncia de passos completa:
Passo 1: mova disco menor para terceiro eixo
Passo 2: mova disco mdio para segundo eixo

Passo 3: mova disco menor para segundo eixo

Passo 4: mova disco maior para terceiro eixo

Passo 5: mova disco menor para primeiro eixo

Passo 6: mova disco mdio para terceiro eixo

Passo 7: mova disco menor para terceiro eixo
Algoritmo: Problemas Complexos
Algoritmo: CONCEITO
O que um algoritmo?
Processo sistemtico para computar um
resultado a partir de dados de entrada
O que so estruturas de dados?
Maneira de organizar dados e operar sobre eles
Algoritmos + estruturas de dados =
programas
Um programa a expresso em linguagem
formal (inteligvel por um computador) de um
algoritmo
O que Programao? =
ABSTRAO!
A realidade complexa
e rica em detalhes!
Abstrao
Realidade
O que voc abstrai dessa realidade?
Abstrao
O que abstrao?
Abstrao
Abstrao
=
Operao mental que
observa a realidade e
captura apenas os
aspectos relevantes
para um contexto
MASLOW
A tarefa de programar
sistemas computacionais
envolve o exerccio
constante da abstrao da
realidade e sua codificao
em uma linguagem de
programao
Abstrao
Realidade Realidade
Sistema de Locadora de Veculo
Abstrao
+
Programao
Sistema Computacional
O que um
Sistema Computacional?
Sistema Computacional
Sistema
Computacional
Software
Hardware
Peopleware
Programao de Sistema
Computacional
A programao de um sistema computacional
pode ser resumida em 3 passos bsicos

Processamento
Entrada Sada
Dispositivo
de Entrada
Dispositivo
de Sada
Memria
UCP
Programao de Sistema
Computacional

Exemplo 1 Exibir a mdia de dois nmeros

Processamento
Entrada Sada
Dispositivo
de Entrada
Dispositivo
de Sada
Memria
UCP
6 , 8 (6 + 8) / 2 7
Programao de Sistema
Computacional

Exemplo 2 Exibir se o aluno est aprovado ou reprovado

Processamento
Entrada Sada
Dispositivo
de Entrada
Dispositivo
de Sada
Memria
UCP
Ana, 5, 3
Se (5+3)/2>=7
aprovado
Seno
reprovado
Ana, reprovado
Programao de Sistema Computacional
Tipos de Linguagens de Programao
1 - Totalmente codificadas em binrio (0s e 1s)
2 - Usa instrues simblicas para representar os 0s e 1s
3 - Voltadas para facilitar o raciocnio humano




Linguagem
Assembly
( Mnem nica )
LOAD R1, val1
LOAD R2, val2
ADD R1, R2
STORE R1, val2
Linguagem
de
M quina
0010 0001 1110
0010 0010 1111
0001 0001 0010
0011 0001 1111
Linguagem
de
Alto N vel
val2 = val1+val2
Baixo Nvel Alto Nvel
(1) (2) (3)
Noes de Lgica
Exemplos de aplicao da lgica

O quarto est fechado e que meu livro est no quarto. Ento,
preciso primeiro abrir o quarto para pegar o livro

Rosa me de Ana, Paula filha de Rosa, Jlia filha de Ana.
Ento, Jlia neta de Rosa e sobrinha de Paula

Todo mamfero animal e todo cavalo mamfero. Ento, todo
cavalo animal

Todo mamfero bebe leite e o homem bebe leite. Ento, todo
homem mamfero e animal (mas no um cavalo)

Atividade 1 (10min)
Resolva os seguintes problemas de lgica
P1 Uma lesma deve subir um poste de 10m de
altura. De dia sobe 2m e noite desce 1m. Em
quantos dias atingir o topo do poste?
P2 - Trs gatos comem trs ratos em trs minutos.
Cem gatos comem cem ratos em quantos minutos?
P3 - O pai do padre filho do meu pai. O que eu sou
do Padre?
P4 - Se um bezerro pesa 75 kg mais meio bezerro,
quanto pesa um bezerro inteiro?

Atividade 1 (10min)
Resolva os seguintes problemas de lgica
P5 Qual o prximo nmero da seqncia
7,8,10,13,17,?
P6 Um pai de 80kg e suas 2 filhas (40kg cada),
precisam sair de uma ilha com um barco. Porm a
capacidade do barco de 80kg. Como faro para sair
da ilha?
P7 Usando uma jangada, um campons precisa
atravessar uma cabra, um leo e um fardo de capim
para a outra margem do rio. A jangada s tem lugar
para ele e mais outra coisa. O que ele deve fazer
para atravessar o rio com seus pertences intactos?

RESPOSTAS - Atividade 1
Respostas
R1 - 9(nove) dias. No nono dia a lesma sobe 2(dois) metros,
atinge o topo e evidentemente no desce 1 metro
R2 3 (trs) minutos
R3 Tio
R4 150 (cento e cinqenta) kg
R5 22
R6 Vo as duas filhas. Uma delas volta. O pai sai. A outra filha
volta. As duas filhas saem juntas.
R7 - Primeiro leve a cabra, volte e pegue o capim; deixe o capim
e leve a cabra de volta; deixe a cabra e leve o leo, depois s
voltar e pegar a cabra.
Noes de Lgica

Em Lgica um conceito importante
o de Proposio
Voc sabe o que uma
PROPOSIO?
Noes de Lgica

Proposio: um enunciado verbal, ao qual deve ser atribudo,
sem ambigidade, um valor lgico verdadeiro (V) ou falso (F).
Exemplos de proposies:
Robson Fidalgo Professor (V)
3 + 5 = 10 (F)
5 < 8 (V)
Contra-exemplos de Proposies:
Onde voc vai ?
3 + 5
Os estudantes jogam vlei. (quais ?)
Noes de Lgica
Operaes Lgicas: so usadas para formar novas proposies a
partir de proposies existentes.
Considerando p e q duas proposies genricas, pode-se
aplicar as seguintes operaes lgicas bsicas sobre elas





Definindo a prioridade:
Usar parnteses Ex:((p v q)^(~q)) ou
Obedecer (~) > (^) > (v)
Operao Smbolo Significado
Negao ~ No
Conjuno ^ E
Disjuno v OU
Noes de Lgica
Exemplos de aplicao das operaes lgica
Considere:
p = 7 primo = (V)
q = 4 impar = (F)

Ento:
4 NO impar = ~q = (~F) = (V)
7 NO primo = ~p = (~V) = (F)

7 primo E 4 NO impar = p ^ ~q = (V ^ (~F)) = (V ^ V) =
(V)
7 primo E 4 impar = p ^ q = (V ^ F) = (F)
4 impar E 7 primo = q ^ p = (F ^ V) = (F)
4 impar E 7 NO primo = q ^ ~p = (F ^ (~V)) = (F ^ F) =
(F)

Noes de Lgica
Exemplos de aplicao das operaes lgica (Cont.)
Considere:
p = 7 primo = (V)
q = 4 impar = (F)

Ento:
7 primo OU 4 NO impar = p v ~q = (V v (~F)) = (V v V)
= (V)
7 primo OU 4 impar = p v q = (V v F) = (V)
4 impar OU 7 primo = q v p = (F v V) = (V)
4 impar OU 7 NO primo = q v ~p = (F v (~V)) = (F v F
) = (F)
Noes de Lgica
Exemplos de aplicao das operaes lgica
Resumindo:



Ou seja:
No (~) troca o valor lgico. Se F passa a ser V e vice-
versa
E (^) s tem valor V quando as duas proposies forem V,
basta uma proposio ser F para o resultado ser F

OU (v) s tem valor F quando as duas proposies forem F,
basta uma proposio ser V para o resultado ser V
p q p ^ q p v q
V V V V
V F F V
F V F V
F F F F
~p
F
F
V
V
pp qq p ^ q p ^ q p v q p v q
VV VV VV VV
VV FF FF VV
FF VV FF VV
FF FF FF FF
~p ~p
FF
FF
VV
VV
Atividade 2
Considerando p = V e q = F, resolva as seguintes expresses
lgicas
~p
~q
p ^ q
p v q
(~p) ^ q
(~p) v q
p ^ (~q)
p v (~q)
(~p) ^ (~q)
(~p) v (~q)
RESPOSTAS - Atividade 2
Considerando p = V e q = F, resolva as seguintes expresses
lgicas
~p = F
~q = V
p ^ q = F
p v q = V
(~p) ^ q = F
(~p) v q = F
p ^ (~q) = V
p v (~q) = V
(~p) ^ (~q) = F
(~p) v (~q) = V
Lgica de Programao &
Algoritmo
O que
Programao
de computadores?
INSTRUES
Instrues Delimitadoras
Servem para especificar o incio e o fim do
algoritmo.

incio
...
fim

Declarao de Variveis
Utilizado para especificar os nomes e os
respectivos tipos das variveis
necessrias no algoritmo

declare <variveis>: <tipo>;
onde:
<variveis> - lista de nomes de variveis
separados por vrgula
<tipo> - inteiro, real, caracter, string, lgico
Declarao de Variveis
Exemplos:

declare a,b,c: real;
declare nome: string;
declare sexo: caracter;
declare pratica_esporte: lgico;

Bloco de Comentrio
Serve para explicar um determinado
trecho do algoritmo, para torna-lo mais
claro, facilitando seu entendimento por
outras pessoas ou posteriormente.
{ <comentrio> }
Exemplo:
{ Isto um exemplo de comentrio }
Instruo de Entrada
Usada para ler dados de entrada do
algoritmo.

leia(<variveis>);

onde:
<variveis> - contero os dados lidos.
Instruo de Entrada
Exemplos:

leia(a,b,c);
leia(nome);
leia(sexo);
leia(pratica_esporte);


Instruo de Sada
Usada para mostrar os resultados do
processamento dos dados de entrada.

escreva(<resultados>);

onde:
<resultados> - geralmente o contedo de uma
ou mais variveis com a resposta do
problema.
Instruo de Sada
Exemplos:

escreva(O valor de D : , D);
escreva(nome, sexo);
escreva(Pratica esporte.);
Instruo de Atribuio
Utilizado para atribuir um determinado
valor a uma varivel.

<varivel> <expresso>;
onde:
<varivel> - nome de uma varivel
<expresso> - um valor do mesmo tipo da
varivel ou uma expresso lgica ou
aritmtica.
Instruo de Atribuio
Exemplos

D B^2-4*A*C;
nome Paulo;
Pratica_Esporte TRUE;
Sexo M;
Estruturas de Controle
Baseado na lgica estruturada, Bohn e
Jacopini provaram que apenas trs
estruturas so suficientes para explicar a
soluo de qualquer problema, inclusive
tornando-os estruturados e mais legveis.
Estruturas de Controle
So elas:
Estrutura Seqencial: os comandos ou
instrues vo sendo executados na ordem
em que aparecem no algoritmo.

Estruturas de Controle
Estrutura de Repetio: comandos so
executados repetidas vezes at que uma
condio de parada seja satisfeita
Estruturas de Controle
Estrutura de Seleo: Conforme o
resultado de uma expresso lgica,
determinados comandos so executados
e outros no, caracterizando assim uma
seleo de comandos
TRUE
FALSE
Instrues de Seleo
Tipo simples:
se <sentena> ento
<comandos>;
fim-se

OBS.:
<comandos> sero executados apenas se
<sentena> resultar em TRUE.
Instrues de Seleo
Exemplo:

se A>0 ento
B A + 1;
A 0;
fim-se

Instrues de Seleo
Tipo composto:
se <sentena> ento
<comandos1>;
seno
<comandos2>;
fim-se
OBS.:
<comandos1> sero executados apenas se
<sentena> resultar em TRUE. Em caso contrrio,
<comandos2> sero executados.
Instrues de Seleo
Exemplo:
se A>B ento
B A + 1;
A 0;
seno
A 0;
B A + 1;
fim-se

Instrues de Repetio
Enquanto / Fim-Enquanto

enquanto <sentena> faa
<comandos>;
fim-enquanto;
OBS.:
<comandos> sero executados enquanto
<sentena> resultar em TRUE.
Instrues de Repetio
Exemplo:
enquanto A>0 faa
leia(B);
escreva(B);
A A - 1;
fim-enquanto;
Instrues de Repetio
Repita / At

repita
<comandos>;
at <sentena>;
OBS.:
<comandos> sero executados at que
<sentena> resulte em TRUE.
Instrues de Repetio
Exemplo:

repita
leia(B);
escreva(B);
A A - 1;
at A<1;
Instrues de Repetio
Para / At / Fim-Para
para <varivel> <inicial> at <final> faa
<comandos>;
fim-para;
OBS.:
<varivel> - contador do tipo inteiro
<inicial> - valor inicial da varivel
<final> - valor final da varivel
Instrues de Repetio
Exemplo:

{ Comandos para escrever 10 vezes uma frase
na tela do computador }
para i 1 at 10 faa
escreva(ltimo tipo de repetio);
fim-para;
Estrutura de um Algoritmo
Um algoritmo em Portugol tem a seguinte
estrutura:
incio
<declarao de variveis>
<inicializao de variveis>
<corpo lgico do algoritmo>
fim
Lgica de Programao & Algoritmo
Estruturas bsicas de um algoritmo:
Seqncia Incio/Fim
Define uma estrutura onde as instrues sero
executadas na ordem que aparecem.
Seleo Se-Ento/Seno
Define uma estrutura condicional que dada a sua
avaliao (V ou F) determina qual caminho do
algoritmo ser executado
Repetio Repita, Enquanto ou Para
Define uma estrutura de iterao condicional (V ou
F) ou contada (pr-definida) de instrues
Lgica de Programao &
Algoritmo
Algoritmo para ligar de um telefone pblico - Seqncia
Incio
1. Tirar o fone do gancho;
2. Ouvir o sinal de linha;
3. Introduzir o carto;
4. Teclar o nmero desejado;
5. Conversar;
6. Desligar;
7. Retirar o carto;
Fim.
Este algoritmo s usa uma
estrutura de seqncia
Incio/Fim
Lgica de Programao & Algoritmo
Algoritmo para ligar de um telefone
pblico Seleo
E se o telefone pblico estiver com defeito?
Incio
1. Tirar o fone do gancho;
2. Se ouvir o sinal de linha, ento
1. Introduzir o carto;
2. Teclar o nmero desejado;
3. Conversar;
4. Desligar;
5. Retirar o carto;
3. Seno
1. ir para o prximo telefone;
Fim.
Este algoritmo usa uma
estrutura de deciso
Se-ento/Seno
Lgica de Programao & Algoritmo
Algoritmo para ligar de um telefone pblico Repetio
E se o prximo telefone pblico tambm estiver com defeito?
Incio
1. Repita
1. Tirar o fone do gancho;
2. Se ouvir o sinal de linha ento
1. Introduzir o carto;
2. Teclar o nmero desejado;
3. Conversar;
4. Desligar;
5. Retirar o carto;
3. Seno
1. ir para o prximo telefone;
2. At ouvir o sinal de linha
Fim.
Este algoritmo usa uma
estrutura de repetio
Repita/At
Lgica de Programao & Algoritmo
Algoritmo para ligar de um telefone pblico Repetio
E se o telefone chamado estiver com defeito?
E se o telefone chamado estiver ocupado?
E se acabarem os crditos do carto telefnico?
E se ...?

Um algoritmo
SEMPRE sofre melhorias sucessivas.
(Tcnica de refinamentos sucessivos)

Fluxogramas - Exemplo 1
Achar o valor da expresso: D = B
2
- 4AC.
Incio
Ler A, B, C D = B^2 - 4*A*C
1
1
Escrever D
Fim
Fluxogramas:
Exemplo 2
Achar o maior de
dois nmeros A e
B.
Incio
Ler A, B
A=B A<B
A>B
Comparar
A com B
Escrever:
A e B iguais
Fim
Escrever:
A maior
Escrever:
B maior
Portugus Estruturado - Exemplo 1
Achar o valor da expresso: D = B
2
- 4AC.


Ler os valores de A, B e C
Calcular a expresso D = B
2
- 4AC
Mostrar o resultado desse clculo
Portugus Estruturado - Exemplo 2
Achar o maior de dois nmeros A e B.


Ler dois nmeros A e B
Comparar A com B
Mostrar o resultado dessa comparao
Pseudocdigo - Exemplo 1
Achar o valor da expresso: D = B
2
- 4AC.

Incio
Declare A,B,C,D; { Declarao de variveis }
Leia(A,B,C);
D B^2 - 4*A*C; { Operao de atribuio }
Escreva(D);
Fim.

Pseudocdigo - Exemplo 2
Achar o maior de dois nmeros A e B.
Incio
Declare A,B; { Declarao de variveis }
Leia(A,B);
Se A = B Ento Escreva(A e B iguais);
Seno Se A>B Ento Escreva(A maior);
Seno Escreva(B maior);
Fim-Se
Fim-Se
Fim.
Atividade 3
Reescreva corretamente o algoritmo
abaixo
Algoritmo aprovao
Incio
1. Obter as 2 notas do aluno;
2. Repita
1. Se Mdia do aluno >=7, ento
1. Repita
1. Informar que o aluno est REPROVADO;
2. At Mdia < 7
2. Seno Mdia >= 7
1. Informar que o aluno est APROVADO;
3. At ltimo aluno;
Fim.

RESPOSTA - Atividade 3
Algoritmo aprovao
Incio
1. Repita
1. Obter as 2 notas do aluno;
2. Se Mdia do aluno >=7, ento
1. Informar que o aluno est APROVADO
3. Seno
1. Informar que o aluno est REPROVADO;
2. At ltimo aluno
Fim

#! /usr/bin/perl -w

my $file = $ARGV[0];

open NEW, $file;

my $numero_g=0;
my $numero_c=0;
my $numero_total=0;

my $um=0;

while (<NEW>) {
if (/\>/) {
# if ($um == 2) {
# last;
# }
# $um++;
next;
}


# print $_;

chomp;


for ($i=0; $i<length($_); $i++) {
$numero_total++;
if (uc(substr($_,$i,1)) eq "C" )
{
$numero_c++;
}
if (uc(substr($_,$i,1)) eq "G")
{
$numero_g++;
}
}
}

print "Total de Gs : $numero_g \n";
print "Total de Cs : $numero_c \n";
print "Total de bases : $numero_total
\n";

print "Total de GCs (%) : " . (($numero_g
+ $numero_c) / $numero_total) * 100;


UM EXERCCIO
Construa um algoritmo para escolher as
duas maiores laranjas de um balaio

1) leia um nmero inteiro e mostre uma mensagem indicando se
este nmero par ou mpar, e se positivo ou negativo

2) leia quatro nmeros inteiros e encontre a mdia aritmtica
simples entre as que correspondem a nmeros pares. Lembre-
se que no pode haver diviso por zero

3) leia 4 notas, calcule a mdia dessas e escreva: Reprovado
(mdia < 5), Recuperao (mdia >= 5 e < 7) e Aprovado
(mdia >= 7)

Outros exerccios...

4) leia a idade de um nadador e exiba sua categoria segundo as
regras: A(5 at 7); B(8 at 10); C(11 at 13); D(14 at 18) e E(
Idade > 18)

5) leia dois nmeros inteiros, uma operao matemtica
(+,-,*,/) e faa o calculo destes nmeros segundo a operao
lida

6) leia o nome e a idade de trs pessoas e informe o nome da
pessoa mais velha e o nome da pessoa mais nova. Considere
que no existem idades iguais
mais exerccios...

7) leia os nmeros inteiros A e B e informe se A mltiplo,
divisor ou nada de B

8) leia trs nmeros e mostre-os em ordem crescente

9) leia uma milhar e informe se esse nmero palndromo.
Exemplos de nmeros palndromos: 9889, 7337 e 2002

10) leia um nmero inteiro entre 20 e 59 e mostre seu extenso.
Exiba um erro se o nmero estiver fora do intervalo
ainda mais exerccios...
AMBIENTES/LINGUAGENS DE
PROGRAMAO
LA PASCAL
declare Var
Incio Begin
Fim End
Caracter Char
Inteiro Integer
Real Real
Lgico Boolean
Leia Read
Escreva Write
AMBIENTES/LINGUAGENS DE
PROGRAMAO
LA C
declare
Incio {
Fim }
Caracter Char
Inteiro Int
Real Double
Lgico Boolean
Leia Scanf
Escreva Printf

Você também pode gostar