Você está na página 1de 46

Lgica de Programao e

Algoritmos
Andr Felipe de A. Monteiro
C066905

Junho/2013

Ementa

Pseudo-cdigo

Lgica Bsica

Proposies
Tabela Verdade

Estrutura de Cdigos

Variveis
Operadores

Condies
Laos de Repetio

Funes e procedures

Parametrizao
Recursividade

Material e Bibliografia

Slides de sala
Szwarcfiter, Jaime; Markenzon, Lilian. Estruturas
de Dados e seus Algoritmos. Ed. LTC, 1994.
Cormen, T.H; Leiserson, C.E; Rivest, R.L.;
Stein,C. Algoritmos: Teoria e Prtica. Ed.
Campus, 2002.

Programa Visualg

Pseudo-cdigo

Especifica uma sequncia lgica de aes em


uma linguagem intuitiva
Abstrao da linguagem de programao a ser
utilizada
Aes realizadas atravs de instrues
Um conjunto de instrues compe um algoritmo

Pseudo-cdigo

Algoritmo

Sequncia finita de passos que executam uma tarefa


Algoritmos determinsticos

Exemplo 1: Especificar os passos para a tarefa de


Realizar Refeio.

Preparar alimentos
Lavar as mos
Colocar a mesa
Ingerir comida
Retirar a mesa
Lavar a loua

Pseudo-cdigo

Exemplo 2: Especificar um algoritmo para somar o valor


de cinco variveis e calcular a mdia desses valores.

Variveis: A1, A2, A3, A4, A5;


Soma = A1 + A2 +A3 + A4 + A5;
Mdia = Soma/5;

Neste exemplo h cinco variveis de entrada e uma


varivel de sada
A etapa de processamento: compreende os clculos e
instrues intermedirias
6

Tipos de Variveis

Constantes

Valor fixo no decorrer da execuo do programa


CONST PI = 3,14;

Inteiros

Assumem apenas valores de nmeros inteiros, pondo ser


positivo ou negativo.
INT Quantidade;
VisuAlg: Quantidade : inteiro
Caso haja a possibilidade da varivel Quantidade assumir um
valor REAL durante a execuo do programa, ocorrer um erro
de compilao
7

Tipos de Variveis

Ponto Flutuante

Podem assumir qualquer valor de um nmero real (com casas


decimais)
FLOAT Mdia;
VisuAlg: Media : real

Caracteres

Assumem qualquer valor dentro da tabela ASCII (letras, nmeros e


simbolos). So informados entre aspas.
Os nmeros informados nesse tipo de varivel no podero ser
usados para clculo.
CHAR Letra;
CHAR [15] Nome;
VARCHAR [15] Nome;
VisuAlg: Nome : caractere
8

Tipos de Variveis

Booleanas

Assumem apenas os valores 0 (F) ou 1 (V)


BOOLEAN Teste;
VisuAlg: Teste : logico (Os valores sero VERDADEIRO ou FALSO)

Vetores (Array)

Podem armazenar N elementos, com N sendo o ndice.


Cada chave do vetor est associada a um elemento, que ser
de algum dos tipos j vistos (int, char, boolean, etc.)
FLOAT VETOR V[n];
VisuAlg: notas : vetor [1..4] de real
9

Tipos de Variveis

Estruturas
Armazenam um conjunto de variveis de qualquer tipo

STRUCT FICHA
{
INT matricula;
CHAR [30] nome;
FLOAT salario;
};

Referencia aos valores internos da STRUCT:


Ficha.matricula = 367892;
Ficha.nome = Andre;
Ficha.salario = 1589,25;

10

Tipos de Variveis

Ponteiros

Assumem valores de endereo de memria


INT *pont;
Utilizados para variveis dinmicas, que sero criadas em tempo de
execuo

Observaes:
1)
Cada linguagem de programao possui regras para criao dos nomes
das variveis.
2)
No podem haver duas variveis com o mesmo nome dentro do mesmo
escopo de programao.
3)
Existem palavras que so reservadas e no podem ser utilizadas como
nome de variveis.
11

Operadores

Aritmticos

Resto da diviso: x MOD y (VisuAlg: x % y)

Resto da diviso de x por y

Relacionais

12

Escrita, Leitura e Atribuio

Escrita

Leitura

Imprime uma mensagem na tela ou em um arquivo


VisuAlg : escreva (Hello World) ou escreval (Hello World)

L uma informao externa e armazena em uma varivel.


Utilizado para solicitar um dado ao usurio.
VisuAlg : leia (variavel);

Atribuio

Informao interna, utilizada para iniciar ou modifica o valor de


uma varivel.
VisuAlg : nota <- 5 ou nota <- 5 *2
13

Exerccios

Escrever um algoritmo que solicite o nome e a idade do


usurio e imprima o nome e o dobro da idade.
Especifique um algoritmo para ler dois nmeros inteiro e
imprimir na tela os resultados da soma, subtrao,
multiplicao e diviso desses nmeros.
Especificar um algoritmo que controle a venda de peas
em uma loja. A funo a ser especificada deve receber o
cdigo, valor e quantidade da pea. Tambm deve calcular
o valor da venda e imprimir o extrato da operao.
Efetue um teste de mesa para os algoritmos especificados.
14

Lgica Bsica

Proposies Lgicas e Tabelas Verdade

Modelagem do raciocnio lgico

Expressam fundamentos matemticos

Sentenas no ambguas

15

Principais Proposies Lgicas


Proposies so sentenas que podem assumir valor lgico
(V / F).
Negao

( nao / ! - not)

Seja uma proposio p


Negao: ~p
Exemplo : p => Ana est doente
nao p = Ana no est doente

Tabela Verdade
P
0
1

~P
1
0

Quando possumos mais de uma proposio, necessrio


julga-las de acordo com o conector, para sabermos se ser
verdadeira ou falsa.
16

Principais Proposies Lgicas


Estudaremos 3 tipos de conectores: e, ou , ou exclusivo.

Conjuno (e / and)

Sejam duas proposies p e q


Conjuno: p.q
Exemplo :

Tabela Verdade
P
0
0
1
1

Q
0
1
0
1

p => Ana sabia a matria da prova


q => Ana compareceu a prova
r => Ana passou na prova
Para que Ana tenha passado necessrio que p e q sejam verdadeiras.
peq=r

P.Q
0
0
0
1

17

Principais Proposies Lgicas

Soma Simples (ou / or)

Sejam duas proposies p e q


Soma Simples: p + q
Exemplo :
p => Hoje Feriado

Tabela Verdade
P
0
0
1
1

Q
0
1
0
1

q => Hoje Domingo


r => Ana no vai trabalhar
Para que Ana no v trabalhar basta que p ou q seja verdadeiro.
p ou q = r

P+Q
0
1
1
1

18

Principais Proposies Lgicas

Soma Exclusiva (ou exclusivo / xor)

Sejam duas proposies p e q


Soma Exclusiva: p q
Exemplo :

p => Nasci na gua

Tabela Verdade
P
0
0
1
1

Q
0
1
0
1

P xor Q
0
1
1
0

q => Vivo na terra


r => No sou anfbio
Para que um ser seja anfbio necessrio que ele nasa na gua e viva na
terra.
p ou exclusivo q = r

19

Exerccios

Dadas as proposies p, q, t construa sentenas utilizando


conectores e negaes de forma que a resposta seja igual a
proposio r.
1) p => Ana est com fome
q => Tem comida em casa
r => Ana come
2)

p => Faz Sol


q => Ana est doente
r => Ana vai a praia

20

Exerccios
3)

p => Faz Sol


q => Ana est doente
r => Ana no foi praia

4)

p => Faz Sol


q => Ana est doente
t => Joo est doente
r => Nem Ana nem Joo foram a praia

21

Estrutura de Deciso

Estruturas de cdigos no sequenciais


Dependncia da condio estabelecida

SE (condio) ENTAO
(ao)
FIMSE

SE(condio) ENTAO
(ao)
SENAO
(ao 2)
FIMSE
22

Estrutura de Deciso

Exemplo 1: (VisuAlg)
se (media >=7) entao
escreva(Aluno Aprovado)
senao
escreva (Aluno Reprovado)
fimse

Exemplo 2:(VisuAlg)
se (media >=5) entao
se (media<7) entao
escreva (Aluno em prova final)
senao
escreva (Aluno Aprovado)
fimse
senao
escreva (Aluno Reprovado)
fimse

23

Estrutura de Deciso

O SE pode trabalhar com uma ou vrias condies


combinadas

Se (condio1) E (condio2) entao ...

Se (condio1) OU (condio2) entao ...

Se ( (condio1) E (condio2) ) OU (condio3) entao ..

Se ( (condio1) OU (condio2) ) E (condio3) entao ..

Se ( (condio1) OU (condio2) ) E ( (condio3) OU (condio4) )


entao ..
24

Estrutura de Deciso

CASO SELECIONE
CASO 1: (ao 1);
CASO 2: (ao 2);
CASO n: (ao n);
CASO SENO: (ao seno);

Exemplo 3:(VisuAlg)
escolha Opcao
caso 1
SIPON ( )
caso 2
TSO ( )
outrocaso
escreva (Opo Invlida);
fimescolha

25

Exerccios

Especifique um algoritmo para ler dois nmeros reais e efetuar a sua


multiplicao. Se o resultado for maior que 100, imprimir o resultado na tela.
Caso contrrio, imprimir a mensagem Resultado menor ou igual a 100.

Especifique um algoritmo para ler um nmero inteiro e imprimir na tela se o


numero lido par ou mpar. Dica: Pense na operao MOD

Especifique um algoritmo para ler dois nmero e informar qual deles o maior,
ou se so iguais.

Especificar um algoritmo para verificar se uma pessoa tem idade para votar,
com a seguinte regra: Menor de 16 no pode votar ; de 16 a 18 e maior que 70
voto facultativo; de 18 a 70 voto obrigatrio.

Especificar um algoritmo que solicite dois nmeros e escolha o que deseja


fazer(soma, subtrao , multiplicao ou diviso). E imprima o resultado de
acordo com a operao escolhida.
26

Laos de Repetio

Conjunto de instrues a serem executadas um nmero


definido de vezes (iteraes)

Em geral h duas formas bsicas de controle de laos de


repetio

Enquanto (While)
Para (For)

Instrues muito utilizadas para operaes em listas


lineares

Ex: Imprimir todas as chaves de um Vetor V[n]


27

Laos de Repetio - Enquanto Faa

enquanto (condio) faca


Conjunto de instrues;
fimenquanto

O loop ser executado enquanto a condio especificada


for verdadeira

O teste da condio sempre executado antes de


qualquer outra operao do loop

28

Laos de Repetio - Enquanto Faa

Exemplos (VisuAlg):
algoritimo
var
X: inteiro
inicio
X <- 1
Enquanto (X <= 100) Faca
X <- X + 1
Fimenquanto
escreva(O valor final de X : , X)
fimalgoritmo

algoritimo
var
Vet : vetor[1..30] de inteiro
i: inteiro
Inicio
i <-1
Enquanto (i <= 30) Faca
Vet[i] <- i
escreval (Vet[i])
i <- i+1
Fimenquanto
fimalgoritmo
29

Laos de Repetio - Enquanto Faa

Da mesma foram que o Se o Enquanto pode trabalhar com uma ou


vrias condies combinadas.

Enquanto (condio1) E (condio2) Faa

CUIDADO: O Enquanto pode acarretar em situaes de loop infinito.


Isto ocorre quando a condio (ou o conjunto de condies)
especificada nunca assume um valor falso.
Exemplo: (VisuAlg)
X <- 1
M <- 0
Enquanto ((X <= 100) OU (M=0)) Faca
X <- X + 1;
Fimenquanto

A varivel M nunca
modificada.

30

Exerccios

Faa um algoritmo que imprima nmeros de 1 a 10.


Faa um algoritmo que imprima nmeros de 10 a 1.
Faa um algoritmo que imprima os nmeros pares de 1 a 20.
Faa um algoritmo que conte de 1 a 100 e a cada mltiplo de 10 emita uma
mensagem: Mltiplo de 10
Faa um algoritmo que determine o maior entre N nmeros. A condio de
parada a entrada de um valor 0, ou seja, o algoritmo deve ficar calculando o
maior at que a entrada seja igual a 0 (ZERO).
Faa um algoritmo que solicite 4 nmeros para o usurio e os armazene em
um vetor. Ordene o vetor e imprima-o.
Faa um algoritmo para preencher um vetor com 10 posies (V: vetor[1..10]
de inteiro), onde o valor de cada chave V[i] ser o dobro do valor da chave
anterior V[i-1]. Considere que o valor inicial a ser preenchido em V[1] ser
informado pelo usurio. Ao final imprima os valores do vetor.
31

Laos de Repetio Repita at

Variao da forma tradicional do Enquanto


O conjunto de instrues ser sempre executado uma
primeira vez
Aps a primeira execuo, a condio testada para
prosseguimento do loop
Exemplo 1
X <- 1
Enquanto (X < 1) Faca
escreva(O valor de X : , X)
X <- X + 1
Fimenquanto

Exemplo 2
X <- 1
repita
escreva(O valor de X : , X)
X <- X + 1
Ate (X < 1)

Os exemplos 1 e 2 tiveram resultados diferentes, apesar a condio ser


a mesma.
32

Laos de Repetio Para

Para varivel auxiliar de valor inicial ate valor final [passo


incremento] faca
Conjunto de instrues;

Fimpara

A definio fixa, utilizando um valor inicial e final de uma varivel


auxiliar.
O incremento desta varivel auxiliar feito automaticamente pelo
prprio loop
O uso do incremento opcional. Quando o incremente no for definido
ser igual a 1.

Para i de 1 ate 30 faca (as instrues sero executadas 30 vezes)

Para i de 1 ate 30 passo 5 faca (as instrues sero executadas 6 vezes,


pois i ser acrescido de 5 em 5)

33

Laos de Repetio - Para

Exemplos:
Para i de 1 ate 10 faca
X <- X +1
escreval (O valor de X :, X)
fimpara
V: vetor[1..30] de inteiro
Para i de 30 ate 1 passo -1 faca
V[i] <- i
escreval (V[i])
fimpara

Observe que no
necessrio incrementarmos
manualmente a varivel i
(i <- i +1).

Note que estamos


percorrendo o vetor
inversamente, ou seja,
do maior para o menor.
Utilizamos passo com
valor negativo ( -1 ).
34

Exerccio

Faa um algoritmo que calcule o Fatorial(n!) de um nmero fornecido


pelo usurio.

O fatorial de nmero natural, representado por n!, o produto de todos os inteiros


positivos menores ou iguais a n. (ex.: 3! = 3*2*1 = 6 e 4!= 4*3*2*1 = 12)

Crie uma estrutura para armazenar os dados dos alunos as seguintes


informaes: Matricula, Nome, Nota1, Nota2, Media, Se o aluno foi
aprovado.
Coloque essa estrutura em um vetor para 5 alunos.
Crie um algoritmo que receba a matrcula, o nome e as notas.
Calcule a mdia e se o aluno foi aprovado.
Solicite ao usurio a matricula, verifique se est na estrutura, caso
esteja imprima o nome, mdia e se foi aprovado. Caso no esteja
imprima matrcula no encontrada. (No ser possvel fazer esse exerccio no
visuAlg pois ele no possui o tipo estrutura.)
35

Funes e Procedures
Funes ou Procedures so trechos de cdigo que
executam uma tarefa especfica

Modularizao do algoritmo

Especialmente utilizado quando uma tarefa se repete vrias


vezes no cdigo

Declarao junto ao cabealho do programa e chamada em


qualquer parte do cdigo

Dois tipos:

Funes Retornam um valor


Procedures Podem ou no retornar um valor
36

Funes e Procedures - Vantagens

Reduzem o tamanho e a complexidade do cdigo

Facilitam a manuteno

Reuso da funo ao longo de todo o cdigo

Melhoram a legibilidade e entendimento do algoritmo

37

Variveis Locais e Globais

As variveis de um programa diferem em relao a sua


localizao

Dois tipos bsicos:

Variveis globais
Variveis locais

Variveis globais so declaradas no cabealho do programa e podem


ser acessadas/alteradas em qualquer trecho do programa

Acesso permitido inclusive para funes especficas

Exemplo:
GLOBAL INT idade;
38

Variveis Locais e Globais

As variveis locais so acessveis apenas para a funo que as


declarou. Deixam de existir ao final da funo.

Podem ser passadas como parmetro para outras funes internas da


prpria funo.

As chamadas so realizadas atravs da declarao do nome da


funo seguido dos parmetros de entrada.

Exemplo:
Verifica_Endereco()
INT CEP
Le (CEP)
Valida_CEP (CEP)
39

Passagem de Parmetros

Duas formas:

Por valor

Por referncia

Na passagem por valor apenas uma cpia do valor da


varivel passada para a funo.

Por referncia passado o endereo da varivel,


possibilitando a alterao da mesma

Mesmo efeito prtico de se trabalhar com varivel


global
40

Exemplos
Algoritimo
var
nota1, nota2, media : real
funcao Calcula_Media ( notaA, notaB : real) :real
var
media: real
inicio
media <- ((notaA + notaB) / 2)
Retorne media
Fimfuncao
inicio
leia (nota1)
leia (nota2)
media <- Calcula_Media (nota1, nota2)
escreva(Mdia igual a ,media)
fimalgoritimo
41

Exemplos

Passagem por referncia no exemplo Calcula_Media():

Algoritimo
var
nota1, nota2, media : real
procedimento Calcula_Media (nota1, nota2: real ; var media: real)
media <- ((nota1 + nota2) / 2)
fimprocedimento

inicio

Leia (nota1)
Leia (nota2)
Calcula_Media (nota1,nota2,media)
escreva (Mdia final :,media)
fimalgoritimo

Observe que o valor


atribudo a media dentro do
procedimento foi utilizado
dentro do programa
principal.

42

Exerccios

Faa um algoritmo que receba 3 nmeros e imprima a mdia,


utilize uma funo para calcular a mdia.
Em uma turma de 3 alunos, faa um algoritmo que receba o
nome e 2 notas de cada alunos. Imprima a mdia de cada
aluno e a mdia da turma. Utilize uma funo que receba
como parmetros um vetor de notas e o tamanho do vetor, e
com base nesses parmetros calcule a mdia.
Faa um algoritmo que calcule e imprima o nmero de
combinaes(R) possveis para o preenchimento das vagas
de um PSI. O usurio deve fornecer o nmero de vagas(v) e
candidatos(c). Frmula: R= v! / c!*(v-c)! . Utilize o clculo do
fatorial em uma funo.
43

Recursividade

Ocorre quando uma funo chama a si mesma.


Como nos laos de repetio, fundamental que e
exista uma condio de parada, para que a funo
no chame a si mesma eternamente.
Exemplo
funcao somaAnteriores(n: inteiro)
se n <=0 entao
retorne n
senao
retorne n + somaAnteriores(n-1)
fimse
fimfuncao
44

Recursividade

Vantagens
Cdigos mais compactos
Facilita a visualizao e implementao

Desvantagens
Podem demorar mais para ser executados, pois
utilizam mais memria.
Erros na implementao, como falta de
condio ou condio nunca ser alcanada,
podem causar estouro de memria.
45

Exerccios

Faa um algoritmo que calcule o fatorial com recursividade

Faa um teste de mesa para saber se est calculando corretamente.


Compare os cdigos das funes de fatorial com e sem recursividade.

Faa um algoritmo que imprima a sequncia de Fibonacci at


o nmero fornecido pelo usurio.

A sequncia de Fibonacci uma sequncia de nmeros naturais, na


qual os primeiros dois termos so 0 e 1, e cada termo subsequente
corresponde soma dos dois precedentes. Ex. 0, 1, 1, 2, 3, 5, 8, 13

46

Você também pode gostar