Introdução à algoritmia
Carlos Santos
LabMM 3 - NTC - DeCA - UA
Aula 02, 14-09-2012
O que é um programa?

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

  • tem como objetivo 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.
O que é programar?

• É o acto de ordenar um conjunto de instruções pré-definidas de forma
  lógica, com o objetivo 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.
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,
   PHP, Actionscript, Pascal, Java, C, C++, Objective C,….);

5. Testar e corrigir erros;

6. Documentar o programa.
1. Definição do problema

• Identificar claramente:

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

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

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

   • Quais os limites dos dados?
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)
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 correta.
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 adoção de estratégias é não “desesperar” perante um problema
  que pode parecer demasiado complicado!
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 objetivos, 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.
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.)
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.
Características de um algoritmo

• Etapas fundamentais de um algoritmo:

  • entrada de dados (input)

  • processamento dos dados

  • output de dados (output)
Desafio para a próxima OT

• Exercício a lançar para recordar entrada e saída de dados com JavaScript

  • enunciado lançado online

  • resolução em casa

  • esclarecimento de dúvidas online e na OT
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 objetividade
Como “escrever” um algoritmo?

 • Fluxograma ou diagramas de blocos

   + representação por diagramas padronizados

   + objetivo 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 diretamente na
     linguagem de programação. Não deve ser considerada uma técnica de
     representação de algoritmos
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 um ou vários FIM

• Termos e expressões reservadas em MAIÚSCULAS
Pseudo-código
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

  + objetividade

  + clareza na interpretação

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

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

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




   X
   X X X
Fluxogramas

• Como desenhar?

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

  • Ferramentas específicas:

     • Aplicações locais:

        • Microsoft Visio

        • OmniGraffle (mac)

     • Online:

        • Gliffy
E “no antigamente”? :)




IBM Data Processing Techniques, Flowcharting
Techniques (1969)
http://www.fh-jena.de/~kleine/history/software/IBM-
FlowchartingTechniques-GC20-8152-1.pdf
Exemplos de aplicação

• um recurso com exemplos básicos (pseudo-código e fluxograma)

  • http://www.comp.dit.ie/rlawlor/prob_solv/flowcharts/ch03%20Flowchart
    %20and%20Pseudocode%20Examples.pdf
Como mudar um pneu furado de um carro?

• que passos são necessário?
Como mudar um pneu furado de um carro?




                               Ver possível solução em:
                               http://www.rff.com/flat_tire.htm
Exemplos

• exemplo da troca de pneu furado e outros exemplos com diferentes níveis de
  complexidade

  • http://www.rff.com/flowchart_samples.htm

(A02) LabMM3 - Introdução à programação

  • 1.
    Introdução à algoritmia CarlosSantos LabMM 3 - NTC - DeCA - UA Aula 02, 14-09-2012
  • 2.
    O que éum programa? • Um programa é um conjunto de instruções que: • tem como objetivo 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.
  • 3.
    O que éprogramar? • É o acto de ordenar um conjunto de instruções pré-definidas de forma lógica, com o objetivo 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.
  • 4.
    Passos a seguirno 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, PHP, Actionscript, Pascal, Java, C, C++, Objective C,….); 5. Testar e corrigir erros; 6. Documentar o programa.
  • 5.
    1. Definição doproblema • Identificar claramente: • Qual o objetivo final a atingir com a resolução do problema? • Quais os dados e que tipos de dados estão em causa? • Quais as variantes que o problema pode ter e em que situações? • Quais os limites dos dados?
  • 6.
    1. Definição doproblema • 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)
  • 7.
    2. Estratégias oumé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 correta.
  • 8.
    2. Estratégias oumé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 adoção de estratégias é não “desesperar” perante um problema que pode parecer demasiado complicado!
  • 9.
    3. Resolução doproblema • ... 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 objetivos, 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.
  • 10.
    Características de umalgoritmo 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.)
  • 11.
    Características de umalgoritmo • 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.
  • 12.
    Características de umalgoritmo • Etapas fundamentais de um algoritmo: • entrada de dados (input) • processamento dos dados • output de dados (output)
  • 13.
    Desafio para apróxima OT • Exercício a lançar para recordar entrada e saída de dados com JavaScript • enunciado lançado online • resolução em casa • esclarecimento de dúvidas online e na OT
  • 14.
    Como “escrever” umalgoritmo? 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 objetividade
  • 15.
    Como “escrever” umalgoritmo? • Fluxograma ou diagramas de blocos + representação por diagramas padronizados + objetivo 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 diretamente na linguagem de programação. Não deve ser considerada uma técnica de representação de algoritmos
  • 16.
    Pseudo-código • Português estruturadoe 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 um ou vários FIM • Termos e expressões reservadas em MAIÚSCULAS
  • 17.
  • 18.
    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 + objetividade + clareza na interpretação + facilita a transposição para qualquer linguagem de programação
  • 19.
    Fluxograma • Principais símbolosutilizados num fluxograma ou num diagrama de blocos (norma ISO 5807: 1985)
  • 20.
    Fluxograma • Principais símbolosutilizados num fluxograma ou num diagrama de blocos (norma ISO 5807: 1985) X X X X
  • 21.
    Fluxogramas • Como desenhar? • Papel e lápis são um excelente ponto de partida! • Ferramentas específicas: • Aplicações locais: • Microsoft Visio • OmniGraffle (mac) • Online: • Gliffy
  • 22.
    E “no antigamente”?:) IBM Data Processing Techniques, Flowcharting Techniques (1969) http://www.fh-jena.de/~kleine/history/software/IBM- FlowchartingTechniques-GC20-8152-1.pdf
  • 23.
    Exemplos de aplicação •um recurso com exemplos básicos (pseudo-código e fluxograma) • http://www.comp.dit.ie/rlawlor/prob_solv/flowcharts/ch03%20Flowchart %20and%20Pseudocode%20Examples.pdf
  • 24.
    Como mudar umpneu furado de um carro? • que passos são necessário?
  • 25.
    Como mudar umpneu furado de um carro? Ver possível solução em: http://www.rff.com/flat_tire.htm
  • 26.
    Exemplos • exemplo datroca de pneu furado e outros exemplos com diferentes níveis de complexidade • http://www.rff.com/flowchart_samples.htm