46
Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi [email protected] Portugol Portugol

Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi [email protected] Portugol

Embed Size (px)

Citation preview

Page 1: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Algoritmos e Estruturas de Dados

Prof. Me. Claudio [email protected]

PortugolPortugol

Page 2: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

SumárioSumário

Representações de algoritmosRepresentações de algoritmos

Elementos básicosElementos básicos

Algoritmos com qualidadeAlgoritmos com qualidade

Page 3: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

SumárioSumário

Representações de algoritmosRepresentações de algoritmos

Elementos básicosElementos básicos

Algoritmos com qualidadeAlgoritmos com qualidade

Page 4: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Representações de algoritmosRepresentações de algoritmos

Três formas de representação de Três formas de representação de algoritmos:algoritmos: FluxogramaFluxograma

Diagrama de ChapinDiagrama de Chapin

Pseudo-códigoPseudo-código

Page 5: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Representações de algoritmos - FluxogramaRepresentações de algoritmos - Fluxograma

Fluxograma é uma forma padronizada para representar os passos lógicos de um determinado processamento.

O fluxograma, podemos definir uma sequência de símbolos, com significado bem definido, portanto, sua principal função é a de facilitar a visualização dos passos de um processamento

Page 6: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Representações de algoritmos - FluxogramaRepresentações de algoritmos - Fluxograma

Simbologia do Diagrama de Bloco

Existem diversos símbolos em um diagrama de bloco. Veja no quadro abaixo alguns dos símbolos que iremos utilizar:

Símbolo Função

 TERMINAL

 

 

Indica o início ou fim de um

processamento

Exemplo: Início do algoritmo

Page 7: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Representações de algoritmos - FluxogramaRepresentações de algoritmos - Fluxograma

Símbolo Função

PROCESSAMENTO  

Processamento em geral

Exemplo: x<- 2+3

ENTRADA MANUAL DE

DADO

 

Indica entrada de dados pelo usuário via

teclado

Exemplo: Digite a nota da prova 1

Page 8: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Representações de algoritmos - FluxogramaRepresentações de algoritmos - Fluxograma

Símbolo Função

EXIBIR  

Mostra informações ou resultados

Exemplo: Mostre o resultado do cálculo

DECISÃO Impõe uma condição do tipo se

Exemplo: SE numero > 0 ENTÃO

Page 9: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

FluxogramaFluxograma

início

C1

C3

C2

fim

Page 10: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

FluxogramaFluxograma

início

separar ingredientes

fim

misturar ingredientes

colocar massa no forno

tirar bolo do forno

Page 11: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

FluxogramaFluxograma

início

separar ingredientes

fim

misturar ingredientes

esperar assar

tirar bolo do forno

t ≥ 30min

colocar massa no forno

F

V

Page 12: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

separar ingredientesseparar ingredientes

misturar ingredientesmisturar ingredientes

colocar massa no fornocolocar massa no forno

tirar bolo do fornotirar bolo do forno

Diagrama de ChapinDiagrama de Chapin

Page 13: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

separar ingredientesseparar ingredientes

misturar ingredientesmisturar ingredientes

colocar massa no fornocolocar massa no forno

t ≥ 30mint ≥ 30min

esperar assaresperar assar

tirar bolo do fornotirar bolo do forno

Diagrama de ChapinDiagrama de Chapin

Page 14: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Pseudo-código (Portugol)Pseudo-código (Portugol)

Características:Características: Sintaxe mais simplesSintaxe mais simples que a de uma Linguagem que a de uma Linguagem

de Programação.de Programação.

Ênfase nas Ênfase nas idéiasidéias e não nos detalhes. e não nos detalhes.

Facilita construir um programa em Linguagem Facilita construir um programa em Linguagem de Programação.de Programação.

Page 15: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Pseudo-código (Portugol)Pseudo-código (Portugol)

Ingredientes: farinha, açúcar, leiteIngredientes: farinha, açúcar, leite

Separar os ingredientesSeparar os ingredientes

Misturar os ingredientesMisturar os ingredientes

Colocar massa no fornoColocar massa no forno

Esperar assar por 30 minutosEsperar assar por 30 minutos

Retirar bolo do fornoRetirar bolo do forno

Page 16: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

SumárioSumário

Representações de algoritmosRepresentações de algoritmos

Elementos básicosElementos básicos

Algoritmos com qualidadeAlgoritmos com qualidade

Page 17: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Algoritmo <Algoritmo <nome_do_algoritmonome_do_algoritmo>>

fimfim

Elementos básicos de um algoritmoElementos básicos de um algoritmo

<declarações de variáveis><declarações de variáveis><declarações de variáveis><declarações de variáveis>

<comandos><comandos><comandos><comandos>

Page 18: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: ExemploElementos básicos de um algoritmo:: Exemplo

Algoritmo Algoritmo perimetro_circunferênciaperimetro_circunferência

// declaração de constantes e variáveis// declaração de constantes e variáveis

const pi const pi = 3,1415= 3,1415

float raiofloat raio

float perimfloat perim

// comandos// comandos

ler (raio)ler (raio)

perim = 2 * pi * raioperim = 2 * pi * raio

escrever (perim)escrever (perim)

fimfim

Page 19: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmoElementos básicos de um algoritmo

Dados (variáveis e constantes)Dados (variáveis e constantes)

Tipos de dadosTipos de dados

OperadoresOperadores

ComandosComandos

FunçõesFunções

ComentáriosComentários

Page 20: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: ExemploElementos básicos de um algoritmo:: Exemplo

Algoritmo Algoritmo perimetro_circunferênciaperimetro_circunferência

// declaração de variáveis// declaração de variáveis

const PI const PI = 3,1415= 3,1415

float raiofloat raio

float perimfloat perim

// comandos// comandos

ler (raio)ler (raio)

perim = 2 * PI * raioperim = 2 * PI * raio

escrever (perim)escrever (perim)

fimfim

Algoritmo Algoritmo perimetro_circunferênciaperimetro_circunferência

// declaração de variáveis// declaração de variáveis

const PI const PI = 3,1415= 3,1415

float raiofloat raio

float perimfloat perim

// comandos// comandos

ler (raio)ler (raio)

perim = 2 * PI * raioperim = 2 * PI * raio

escrever (perim)escrever (perim)

fimfim

dado variáveldado variável

dado constantedado constante

tipo de dadotipo de dado

operadoroperador

funçãofunção

comentáriocomentário

Page 21: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: DadosElementos básicos de um algoritmo:: Dados

Dados ConstantesDados Constantes O valor de uma constante O valor de uma constante não se alteranão se altera após após

sua definição.sua definição.

Exemplos:Exemplos: N_NEPERIANO = 2,7182N_NEPERIANO = 2,7182

UNIVERSIDADE = DRUMMOND'UNIVERSIDADE = DRUMMOND'

Dados VariáveisDados Variáveis Elemento que têm a função de Elemento que têm a função de associar um associar um

nome a uma porção da memória nome a uma porção da memória onde um onde um dado pode ser armazenado.dado pode ser armazenado.

Page 22: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: Tipos de dadosElementos básicos de um algoritmo:: Tipos de dados

Definem a Definem a natureza natureza do dado, as do dado, as operaçõesoperações que podem ser realizadas com que podem ser realizadas com o dado e o o dado e o espaçoespaço a ser ocupado na a ser ocupado na memória.memória.

Exemplos:Exemplos: Inteiro:Inteiro: 1010 -5 -5 -128 -128

Real (ponto flutuante):Real (ponto flutuante): 1,341,34 13,4 13,4 -5,0 -5,0

String de caracteres: String de caracteres: 'quarta-feira''quarta-feira' 'Abril' 'Abril'

Lógico:Lógico: TRUE (1)TRUE (1) FALSE (0) FALSE (0)

Page 23: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: OperadoresElementos básicos de um algoritmo:: Operadores

AtribuiçãoAtribuição

AritméticosAritméticos

RelacionaisRelacionais

LógicosLógicos

Page 24: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Utilizado para atribuir um valor a uma Utilizado para atribuir um valor a uma variávelvariável

Notação:Notação:

x1x1 ←← 23;23;

temptemp ←← x2x2;;

nome da variável

nome da variável

ValorValor

Elementos básicos de um algoritmo:: Operador AtribuiçãoElementos básicos de um algoritmo:: Operador Atribuição

Page 25: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: Operadores AritméticosElementos básicos de um algoritmo:: Operadores Aritméticos

Dados de entradaDados de entrada: tipo numérico (int ou : tipo numérico (int ou float)float)

ResultadoResultado: tipo numérico (int ou float): tipo numérico (int ou float)

Exemplos:Exemplos: x_2x_2 ←← 2 2 ++ 3; 3;

alfa alfa ←← 1 1 // 5; 5;

angang ←← 1 1 / / 5.0;5.0;

restoresto ←← 10 10 %% 3; 3;

restoresto ←← 1 1 %% 4; 4;

deltadelta ←← 5 5 ** 5 5 –– 4 4 ** 1 1 ** 4; 4;

Page 26: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: Operadores RelacionaisElementos básicos de um algoritmo:: Operadores Relacionais

Dados de entradaDados de entrada: tipo numérico (int ou : tipo numérico (int ou float)float)

ResultadoResultado: tipo lógico: tipo lógico

Exemplos:Exemplos: cond1cond1 ←← 2 2 ==== 3; 3; cond2cond2 ←← 1.6 1.6 ≠≠ 5.0; 5.0; cond3cond3 ←← 1 1 >> 5; 5; cond4cond4 ←← (1 + 2) (1 + 2) << 5; 5; cond5cond5 ←← 10 10 ≥≥ 3; 3; cond6cond6 ←← 1 1 ≤≤ (– 4 / 3); (– 4 / 3);

Page 27: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: Operadores LógicosElementos básicos de um algoritmo:: Operadores Lógicos

Dados de entradaDados de entrada: tipo lógico: tipo lógico

ResultadoResultado: tipo lógico: tipo lógico

Exemplos:Exemplos: cond1cond1 ←← V V ANDAND F; F;

cond2cond2 ←← F F OROR F; F;

cond3cond3 ←← NOTNOT cond1; cond1;

cond4cond4 ←← (V (V ANDAND F) F) OROR (5 > 3); (5 > 3);

Page 28: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: Precedência de OperadoresElementos básicos de um algoritmo:: Precedência de Operadores

1.1. NOTNOT – (negação)– (negação)

2.2. ** / / %%

3.3. ++ – (subtração)– (subtração)

4.4. == == < < > > ≠ ≠ ≥ ≥ ≤≤

5.5. ANDAND

6.6. OROR

7.7. ←←

Page 29: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

d + y - z * a / pd + y - z * a / p

d / yd / y

y / ay / a

b / zb / z

r % qr % q

y % dy % d

((z / a) + b*a ) – d((z / a) + b*a ) – d

y = 2z = 4.0a = 8b = 6.0d = 12p = 4q = 3 r = 10

Elementos básicos de um algoritmo:: Exercícios sobre OperadoresElementos básicos de um algoritmo:: Exercícios sobre Operadores

Page 30: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

(B == A * C) (B == A * C) ANDAND (LOG (LOG OROR TT))

(B > A) (B > A) OROR (B == A) (B == A)

LOG LOG OROR (B / A ≥ C) (B / A ≥ C) AND NOTAND NOT(A ≥ C)(A ≥ C)

NOTNOT LOG LOG OROR TT ANDAND (A + B ≥ C) (A + B ≥ C)

NOTNOT LOG LOG OROR (B * 2 - C == 0) (B * 2 - C == 0)

LOG LOG OR NOTOR NOT (B * B ≤ C * 10 + A * B) (B * B ≤ C * 10 + A * B)

A = 2B = 7C = 3.5LOG = FF

Elementos básicos de um algoritmo:: Exercícios sobre OperadoresElementos básicos de um algoritmo:: Exercícios sobre Operadores

Page 31: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: FunçõesElementos básicos de um algoritmo:: Funções

Pré-definidasPré-definidas

Definidas pelo programadorDefinidas pelo programador

Exemplos:Exemplos:

seno(angulo)seno(angulo)

pow(x,y)pow(x,y)

sqrt(resto)sqrt(resto)

exp(tempo)exp(tempo)

ler(var1,var2,...)ler(var1,var2,...)

escrever(resul1,result2,...)escrever(resul1,result2,...)

Page 32: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Elementos básicos de um algoritmo:: ComentáriosElementos básicos de um algoritmo:: Comentários

Utilizados para descrever o algoritmo, Utilizados para descrever o algoritmo, esclarecendo trechos do códigoesclarecendo trechos do código

Notação em Linguagem C:Notação em Linguagem C: ////

/*/* <comentário> <comentário> */ */

Page 33: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

SumárioSumário

Representações de algoritmosRepresentações de algoritmos

Elementos básicosElementos básicos

Algoritmos com qualidadeAlgoritmos com qualidade

Page 34: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Algoritmos com qualidadeAlgoritmos com qualidade

Devem ser feitos para serem lidos por Devem ser feitos para serem lidos por seres humanos!seres humanos!

Escreva os comentários no momento em Escreva os comentários no momento em que estiver escrevendo o algoritmo.que estiver escrevendo o algoritmo.

Page 35: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

// Cálculo da área do retângulo:// Cálculo da área do retângulo:area ← b * h;area ← b * h;

// Cálculo da área do retângulo:// Cálculo da área do retângulo:area ← b * h;area ← b * h;

// Multiplicação de b por h:// Multiplicação de b por h:area ← b * h;area ← b * h;

// Multiplicação de b por h:// Multiplicação de b por h:area ← b * h;area ← b * h;

Algoritmos com qualidadeAlgoritmos com qualidade

Os comentários devem Os comentários devem acrescentaracrescentar alguma coisa, e alguma coisa, e não frasearnão frasear o comando: o comando:

Page 36: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Algoritmos com qualidadeAlgoritmos com qualidade

Use comentários no prólogo:Use comentários no prólogo:

/********************************/********************************

DRUMMOND – Colégio e FaculdadeDRUMMOND – Colégio e Faculdade

Fulano da SilvaFulano da Silva

Data: 10/02/2014Data: 10/02/2014

Última modificação: 12/02/2014Última modificação: 12/02/2014

Algoritmo de DemostraçãoAlgoritmo de Demostração

********************************/********************************/

Page 37: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

hip ← sqrt(cat1 * cat1 + cat2 * cat2);hip ← sqrt(cat1 * cat1 + cat2 * cat2);

hip←sqrt(cat1*cat1+cat2*cat2);hip←sqrt(cat1*cat1+cat2*cat2);

Algoritmos com qualidadeAlgoritmos com qualidade

Use espaços em branco para melhorar a Use espaços em branco para melhorar a legibilidade:legibilidade:

Page 38: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

preco ← custo + lucro;preco ← custo + lucro;

p ← c + l;p ← c + l;

Algoritmos com qualidadeAlgoritmos com qualidade

Escolha nomes Escolha nomes representativosrepresentativos para as para as variáveis:variáveis:

Page 39: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Algoritmos com qualidadeAlgoritmos com qualidade

Utilize Utilize umum comando por linha. comando por linha.

Utilize Utilize parêntesesparênteses para melhorar a para melhorar a compreensão e evitar erros.compreensão e evitar erros.

Utilize Utilize identaçãoidentação (recuo de texto). (recuo de texto). Atenção: identação Atenção: identação ≠ ≠ endentaçãoendentação

Page 40: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

ExercícioExercício

Uma fábrica de arruelas precisa calcular o Uma fábrica de arruelas precisa calcular o custo de envio de um conjunto de custo de envio de um conjunto de unidades. Escreva um pseudo-código para unidades. Escreva um pseudo-código para tal.tal.

Page 41: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Exercício:: Algoritmo inicialExercício:: Algoritmo inicial

1.1. Calcular Calcular áreaárea

2.2. Calcular Calcular volumevolume (área × espessura) (área × espessura)

3.3. Calcular Calcular pesopeso (volume × densidade × unidades) (volume × densidade × unidades)

4.4. Calcular Calcular custocusto (peso × frete) (peso × frete)

Page 42: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Exercício:: Algoritmo inicialExercício:: Algoritmo inicial

1.1. Calcular Calcular áreaárea

d_extd_ext

d_intd_int

2

int 2

d_int

Area

2

2

_

extdAreaext

intAAArea ext intAAArea ext

Page 43: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Exercício:: Algoritmo inicialExercício:: Algoritmo inicial

2.2. Calcular Calcular volumevolume::

3.3. Calcular Calcular pesopeso::

4.4. Calcular Calcular custocusto (peso × frete) (peso × frete)

espessuraAreaVolume espessuraAreaVolume

unidadesdensidadeVolumePeso unidadesdensidadeVolumePeso

fretePesoCusto fretePesoCusto

Page 44: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Exercício:: Pseudo-códigoExercício:: Pseudo-código

Algoritmo Algoritmo arruelaarruela

// Constantes// Constantes

const PI const PI = 3,1415= 3,1415

// Variáveis de entrada// Variáveis de entrada

float d_ext, d_intfloat d_ext, d_int

float espessura, densidade, unidades, fretefloat espessura, densidade, unidades, frete

// Variável de saída// Variável de saída

float custofloat custo

// Variáveis do programa// Variáveis do programa

float area, area_ext, area_int, volume, pesofloat area, area_ext, area_int, volume, peso

......

Page 45: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

Exercício:: Pseudo-código (cont.)Exercício:: Pseudo-código (cont.)

......

// Início// Início

ler(d_ext, d_int, espessura, densidade, unidades, frete)ler(d_ext, d_int, espessura, densidade, unidades, frete)

area_ext area_ext ←← pi * (d_ext/2) * (d_ext/2) pi * (d_ext/2) * (d_ext/2)

area_int area_int ←← pi * (d_int/2) * (d_int/2) pi * (d_int/2) * (d_int/2)

area area ←← area_ext – area_int area_ext – area_int

volume volume ←← area * espessura area * espessura

peso peso ←← volume * densidade * unidades volume * densidade * unidades

custo custo ←← peso * frete peso * frete

escrever (custo)escrever (custo)

fimfim

Page 46: Algoritmos e Estruturas de Dados Prof. Me. Claudio Benossi claudio@beno.com.br Portugol

QuestõesQuestões