LabMM3 - Aula teórica 02

27
Introdução à algoritmia Carlos Santos LabMM 3 - NTC - DeCA - UA Aula 02, 15-09-2011

description

Introdução à algoritmia (conteúdos adaptados dos slides de edições anteriores da Unidade Curricular)

Transcript of LabMM3 - Aula teórica 02

Page 1: LabMM3 - Aula teórica 02

Introdução à algoritmia

Carlos SantosLabMM 3 - NTC - DeCA - UAAula 02, 15-09-2011

Page 2: LabMM3 - Aula teórica 02

O que é um programa?

• Um programa é um conjunto de instruções que:

• tem como objectivo a resolução de um ou vários problemas;

• é normalmente escrito com o apoio de uma linguagem de computador;

• é interpretado e executado por uma máquina/computador.

Page 3: LabMM3 - Aula teórica 02

O que é programar?

• É o acto de ordenar um conjunto de instruções pré-definidas de forma lógica, com o objectivo de resolver um problema.

• O que é a lógica ?

• “É a ciência que estuda as leis e critérios de validade que regem o pensamento e a demonstração, ou seja, ciência dos princípios formais do raciocínio.” (Manzano, 2000: 3)

• Usar o “raciocínio” lógico implica compreender os processos de geração de conhecimento, implica seguir uma sequência coerente e regular de acontecimentos.

Page 4: LabMM3 - Aula teórica 02

Passos a seguir no acto de programar

1. Definir o problema e identificar todas as suas especificidades;

2. Escolher a estratégia ou método para a resolução do problema;

3. Resolver o problema numa sequência lógica de instruções;

4. Codificar essas instruções numa linguagem de programação (JavaScript, Actionscript, Pascal, Java, C, C++, Objective C,….);

5. Testar e corrigir erros;

6. Documentar o programa.

Page 5: LabMM3 - Aula teórica 02

1. Definição do problema

• Identificar claramente:

• Qual o objectivo final a atingir com a resolução do problema?

• Quais os dados e que tipo de dados estão em causa?

• Quais as variantes que o problema pode ter e em que situações?

• Quais os limites dos dados?

Page 6: LabMM3 - Aula teórica 02

1. Definição do problema

• Para dar resposta a estas questões devem ser definidas:

• Especificações de entrada (input de dados)

• Especificações de saída (output de dados)

• Variações (condicionantes, variantes em função de determinadas condições)

Page 7: LabMM3 - Aula teórica 02

2. Estratégias ou métodos de resolução de problemas

• Estratégia Top-down

• baseada na divisão do problema em sub-problemas resolvendo um a um para chegar ao todo. Abordagem dos problemas gerais para a especificidade. Aplica-se a programação estruturada.

• Estratégia Bottom-up

• baseada na divisão do problema em sub-problemas mas partindo das especificidades conhecidas, evolui definindo as condições de combinação das especificidades num todo complexo.

• Estratégia tentativa-erro

• sequência de tentativas e experiências até atingir a solução correcta.

Page 8: LabMM3 - Aula teórica 02

2. Estratégias ou métodos de resolução de problemas

• E na prática?

• divisão entre estratégias não é totalmente “estanque”;

• uma combinação de métodos é aplicada dependendo do problema e da experiência do programador.

• 1ª regra na adopção de estratégias é não “desesperar” perante um problema que pode parecer demasiado complicado!

Page 9: LabMM3 - Aula teórica 02

3. Resolução do problema

• ... desenvolver um algoritmo capaz de dar resposta a todas as necessidades do problema.

• O que é um algoritmo?

• Um algoritmo é uma sequência de instruções delimitadas, um conjunto de passos claros e objectivos, que permitem resolver um problema ou problemas.

• O acto de construir algoritmos é programar!

• Descrever algoritmos consiste na representação gráfica ou numa linguagem próxima do homem dos processos de resolução e surge como um passo intermédio à codificação numa linguagem de computador.

Page 10: LabMM3 - Aula teórica 02

Características de um algoritmo

• Etapas fundamentais de um algoritmo:

• input de dados

• processamento

• output de dados

Page 11: LabMM3 - Aula teórica 02

Características de um algoritmo

Os algoritmos, segundo Donald E. Knuth, têm cinco características importantes:

• Finitude

• Todos os passos definidos num algoritmo têm de ter um fim previsto, não podem ser deixados condicionantes que levem à infinitude.

• Definitude

• Um algoritmo e os seus passos têm de ser definidos até à exaustão, não pode ser deixada qualquer ambiguidade que leve à indefinição de instruções para o computador.

(Donald E. Knuth, "Fundamental algorithms", V1 de "The Art of Computer Programming", 2ª edição, Addison-Wesley Publishing Company, Reading, Massachusetts, 1973.)

Page 12: LabMM3 - Aula teórica 02

Características de um algoritmo

• Entrada

• Para a definição de um algoritmo é necessário identificar os dados de entrada, se existirem.

• Saída

• O algoritmo procura a resolução de um problema e portanto terá de produzir dados de saída, é necessário identificar os dados ou métodos de saída.

• Eficácia

• Os passos de um algoritmo não devem ultrapassar um nível de complexidade que não possam ser entendidos ou executados pelo programador o que leva a problemas em implementar, testar e corrigir.

Page 13: LabMM3 - Aula teórica 02

Como “escrever” um algoritmo?

Diferentes técnicas de representação:

• Pseudo-código

+ linguagem próxima de língua natural

+ facilidade de representação e entendimento

- pode conduzir a erros de interpretação

- menor objectividade

Page 14: LabMM3 - Aula teórica 02

Como “escrever” um algoritmo?

• Fluxograma ou diagramas de blocos

+ representação por diagramas padronizados

+ objectivo e sintético

- exige o conhecimento dos símbolos e métodos de representação de processos

• Linguagem de programação

• programadores experimentes têm a capacidade e o conhecimento necessário para escrever soluções de problemas directamente na linguagem de programação. Não deve ser considerada uma técnica de representação de algoritmos

Page 15: LabMM3 - Aula teórica 02

Pseudo-código

• Português estruturado e simplificado para evitar redundâncias

• Menos rigoroso que as L.P. para facilitar o entendimento

• Cada expressão deve ser colocada numa linha separada, usar a indentação

• Colocar comentários precedidos de *

• Cada algoritmo deve ser delimitado por INICIO e 1 ou vários FIM

• Termos e expressões reservadas em MAIÚSCULAS

• Exemplo ferramenta: http://fernando.softdr.com/produtos/ipe.html

Page 16: LabMM3 - Aula teórica 02

Pseudo-código

Page 17: LabMM3 - Aula teórica 02

Pseudo-código (exemplo)

• Exemplo de um algoritmo para lavar a roupa na máquina (1) - 3 passos

INICIO

Colocar a roupa na máquina

Iniciar o programa de lavagem

Retirar a roupa da máquina

FIM

Page 18: LabMM3 - Aula teórica 02

Pseudo-código (exemplo)

• Exemplo de um algoritmo para lavar a roupa na máquina (2)

INICIOColocar a roupa na máquinaFechar o óculo da máquinaColocar detergente na máquinaIniciar o programa de lavagemREPETIR ENQUANTO o programa não termina

ver estado do programaFIM DE REPETIÇÃO Retirar a roupa da máquina

FIM

Page 19: LabMM3 - Aula teórica 02

Pseudo-código (exemplo)

• Exemplo de um algoritmo para lavar a roupa na máquina (3)

INICIOSE óculo da máquina fechado

ENTÃO abrir óculo da máquinaFIM SEColocar a roupa na máquinaFechar o óculo da máquinaColocar detergente na máquina (...)Iniciar o programa de lavagemEXECUTAR programa de lavagemREPETIR ENQUANTO o programa não termina

ver estado do programaFIM DE REPETIÇÃO Abrir óculo da máquinaRetirar a roupa da máquinaFechar óculo da máquina

FIM

Page 20: LabMM3 - Aula teórica 02

Fluxograma

• Conceito

• Representação padronizada, pela utilização de símbolos definidos, da sequência de instruções e processos lógicos de um algoritmo.

• Vantagens

+ objectividade

+ clareza na interpretação

+ facilita a transposição para qualquer linguagem de programação

Page 21: LabMM3 - Aula teórica 02

Fluxograma

• Principais símbolos utilizados num fluxograma ou num diagrama de blocos (norma ISO 5807: 1985)

Page 22: LabMM3 - Aula teórica 02

Fluxogramas

• Como desenhar?

• Papel e lápis são sempre um excelente ponto de partida!

• Ferramentas específicas:

• Aplicações locais:

• Microsoft Visio

• OmniGraffle (mac)

• Online:

• Gliffy

• ...

Page 23: LabMM3 - Aula teórica 02

Fluxograma (exemplo)

• Exemplo de um algoritmo para lavar a roupa na máquina (1) - 3 passos

INICIO

Colocar a roupa na máquina

Iniciar o programa de lavagem

Retirar a roupa da máquina

FIM

Page 24: LabMM3 - Aula teórica 02

Fluxograma (exemplo)

• Exemplo de um algoritmo para lavar a roupa na máquina (2)

INICIOColocar a roupa na máquinaFechar o óculo da máquinaColocar detergente na máquinaIniciar o programa de lavagemREPETIR ENQUANTO o programa não termina

ver estado do programaFIM DE REPETIÇÃO Retirar a roupa da máquina

FIM

Page 25: LabMM3 - Aula teórica 02

Fluxograma (exemplo)

• Ex. de um algoritmo para lavar a roupa na máquina (3)

INICIOSE óculo da máquina fechado

ENTÃO abrir óculo da máquinaFIM SEColocar a roupa na máquinaFechar o óculo da máquinaColocar detergente na máquina (...)Iniciar o programa de lavagemEXECUTAR programa de lavagemREPETIR ENQUANTO o programa não termina

ver estado do programaFIM DE REPETIÇÃO Abrir óculo da máquinaRetirar a roupa da máquinaFechar óculo da máquina

FIM

Page 26: LabMM3 - Aula teórica 02

Outras questões a resolver...

• E se a máquina de lavar estivesse a funcionar?

• (sugestões de outros problemas...)

Page 27: LabMM3 - Aula teórica 02

Fluxograma (exemplo)

• Ex. de um algoritmo para lavar a roupa na máquina (3)

INICIOSE óculo da máquina fechado

ENTÃO abrir óculo da máquinaFIM SEColocar a roupa na máquinaFechar o óculo da máquinaColocar detergente na máquina (...)Iniciar o programa de lavagemEXECUTAR programa de lavagemREPETIR ENQUANTO o programa não termina

ver estado do programaFIM DE REPETIÇÃO Abrir óculo da máquinaRetirar a roupa da máquinaFechar óculo da máquina

FIM