Você está na página 1de 94

Conceitos Fundamentais de Algoritmos e Programao para iniciantes

joa@deinfo.ufrpe.br REFERNCIA: Material dos Profs. Reinaldo Gomes (UFRPE) e Robson Fidalgo (UFPE) www.xiscanoe.org

Algoritmo Textual Informal


Modo de preparo:
Quo cremoso?!?

Bata a margarina, as gemas e o acar at ficar Quanto tempo?!? cremoso Junte o leite, o coco e a farinha e continue batendo De uma vez s?!? Acrescente o fermento e, por ltimo, as claras em neve Quanto tempo?!? Unte uma forma com manteiga e leve ao forno para assar

Algoritmo Textual Informal Refinado


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 Grfico-Textual Informal


Montagem de um Aeromodelo
Material

Cola especial para plsticos Estilete Lixas finas Durex ou fita crepe Pregador de roupas, elsticos

Algoritmo Grfico-Textual Informal


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 Textual Informal 2


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 Grfico Informal


Troca de pneu

Algoritmo Grfico Semi-formal


Troca de pneu (Fluxograma)

Abre porta-malas

Sim
Acessrios OK? Pega tringulo

No
Fecha porta-malas

Algoritmo Textual Formal


Troca de pneu
abre(porta_malas) Se acessorio_ok = FALSO Ento fecha(porta_malas) espera_carona() Seno pega_triangulo()

...

Algoritmo: Problemas Complexos


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: CONCEITO
O que um ALGORITMO? OBS.: No existe um algoritmo para construir algoritmos
a criao de um algoritmo um exerccio de criatividade (conhecimento) e experincia (tcnica e prtica)

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

R ealid ad e eali

Abstrao + Programao Sistema de Locadora de Veculo

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
Entrada Dispositivo de Entrada Processamento Sada Dispositivo de Sada

UCP Memria

Programao de Sistema Computacional


Exemplo 1 Exibir a mdia de dois nmeros
Entrada Dispositivo de Entrada Processamento Sada Dispositivo de Sada

UCP Memria

6,8

(6 + 8) / 2

Programao de Sistema Computacional


Exemplo 2 Exibir se o aluno est aprovado ou reprovado
Entrada Dispositivo de Entrada Processamento Sada Dispositivo de Sada

UCP Memria

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
Baixo Nvel Alto Nvel

Linguagem de Mquina

Linguagem Assembly (Mnemnica)

Linguagem de Alto N vel


val2 = val1+val2

0010 0001 1110 LOAD R1, val1 0010 0010 1111 LOAD R2, val2 0001 0001 0010 ADD R1, R2 0011 0001 1111 STORE R1, val2
(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

Operao Smbolo Negao ~ Conjuno ^ Disjuno v

Significado No E OU

Definindo a prioridade: Usar parnteses Ex:((p v q)^(~q)) ou Obedecer (~) > (^) > (v)

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: p p p pv
V V F F V F V F F F V V V F F F V V V F

Ou seja: No (~) troca o valor lgico. Se F passa a ser V e viceversa 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

Atividade 2
Considerando p = V e q = F, resolva as seguintes expresses lgicas ~p ~q p^q pvq (~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 pvq=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 Sexo M;

TRUE;

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 Este algoritmo usa uma 1. Introduzir o carto; estrutura de deciso 2. Teclar o nmero desejado; Se-ento/Seno 3. Conversar; 4. Desligar; 5. Retirar o carto; 3. Seno 1. ir para o prximo telefone; Fim.

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; Este algoritmo usa uma 3. Conversar; estrutura de repetio 4. Desligar; 5. Retirar o carto; Repita/At 3. Seno 1. ir para o prximo telefone; 2. At ouvir o sinal de linha Fim.

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 = B2 - 4AC.
Incio

Ler A, B, C

D = B^2 - 4*A*C

Escrever D

Fim

Fluxogramas: Exemplo 2
Achar o maior de dois nmeros A e B.

Incio

Ler A, B

Comparar A com B

A=B Escrever: A e B iguais

A>B Escrever: A maior

A<B Escrever: B maior

Fim

Portugus Estruturado - Exemplo 1


Achar o valor da expresso: D = B2 - 4AC.

Ler os valores de A, B e C Calcular a expresso D = B2 - 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 = B2 - 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++; } } }

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

Outros exerccios...
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. Lembrese 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)

mais 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

ainda 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

AMBIENTES/LINGUAGENS DE PROGRAMAO
LA
declare Incio Fim Caracter Inteiro Real Lgico Leia Escreva Var Begin End Char Integer Real Boolean Read Write

PASCAL

AMBIENTES/LINGUAGENS DE PROGRAMAO
LA
declare Incio Fim Caracter Inteiro Real Lgico Leia Escreva { } Char Int Double Boolean Scanf Printf

Prximos passos?
Praticar a leitura e entendimento de Algoritmos de sua rea de aplicao Aprender uma Linguagem de Programao para Computadores Programao!