| | | | |

2.2 Algoritmos e Programação

Compre o e-book deste material aqui!

Programar é criar um programa (um software) para ser executado em computador. Para isso, escreve-se um código em uma linguagem computacional (por exemplo, em Python), o qual é interpretado/compilado para gerar o programa final. Linguagens computacionais são técnicas, utilizam uma sintaxe simples, precisa e sem ambiguidades. Ou seja, para criarmos um programa com um determinado objetivo, precisamos escrever um código computacional técnico, que siga a sintaxe da linguagem escolhida e sem ambiguidades.

Um algoritmo pode ser definido uma sequencia ordenada e sem ambiguidade de passos para a resolução de um problema.

Exemplo 2.2.1.

O cálculo da área de um triângulo de base e altura dadas por ser feito com o seguinte algoritmo:

  1. 1.

    Informe o valor da base b.

  2. 2.

    Informe o valor da altura h.

  3. 3.

    abh2.

  4. 4.

    Imprima o valor de a.

Algoritmos para a programação são pensados para serem facilmente transformados em códigos computacionais. Por exemplo, o algoritmo acima pode ser escrito em Python como segue:

1b = float(input('Informe o valor da base.\n'))
2h = float(input('Informe o valor da altura.\n'))
3# cálculo da área
4a = b*h/2
5print(f'Área = {a}')

Para criar um programa para resolver um dado problema, começamos desenvolvendo um algoritmo para resolvê-lo, este algoritmo é implementado na linguagem computacional escolhida, a qual gera o programa final. Aqui, o passo mais difícil costuma ser o desenvolvimento do algoritmo. Precisamos pensar em como podemos resolver o problema de interesse em uma sequência de passos ordenada e sem ambiguidades para que possamos implementá-los em computador.

Um algoritmo deve ter as seguintes propriedades:

  • Cada passo deve estar bem definido, i.e. não pode conter ambiguidades.

  • Cada passo deve contribuir de forma efetiva na solução do problema.

  • Deve ter número finito de passos que podem ser computados em um tempo finito.

Observação 2.2.1.

(Mulher na Matemática.) A primeira pessoa a publicar um algoritmo para programação foi Augusta Ada King77endnote: 7Augusta Ada Byron King, Condessa de Lovelace, 1815 - 1852, matemática inglesa. Fonte: Wikipédia: Ada Lovelace.. O algoritmo foi criado para computar os números de Bernoulli88endnote: 8Jacob Bernoulli, 1655-1705, matemático suíço. Fonte: Wikipédia: Jakob Bernoulli..

2.2.1 Fluxograma

Fluxograma é uma representação gráfica de um algoritmo. Entre outras, usam-se as seguintes formas para representar tipos de ações a serem executadas:

  • Terminal: início ou final do algoritmo.

    [Uncaptioned image]
  • Linha de fluxo: direciona para a próxima execução.

    [Uncaptioned image]
  • Entrada: leitura de informação/dados.

    [Uncaptioned image]
  • Processo: ação a ser executada.

    [Uncaptioned image]
  • Decisão: ramificação do processamento baseada em uma condição.

    [Uncaptioned image]
  • Saída: impressão de informação/dados.

    [Uncaptioned image]
Exemplo 2.2.2.

O método de Heron99endnote: 9Heron de Alexandria, 10 - 80, matemático grego. Fonte: Wikipédia: Heron de Alexandria. é um algoritmo para o cálculo aproximado da raiz quadrada de um dado número x, i.e. x. Consiste na iteração

s(0) =approx. inicial, (2.1)
s(i+1) =12(s(i)+xs(i)), (2.2)

para i=0,1,2,,n, onde n é o número de iterações calculadas.

Na sequência, temos um algoritmo e seus fluxograma e código Python para computar a quarta aproximação de x, assumindo s(0)=x/2 como aproximação inicial.

Refer to caption
Figura 2.2: Fluxograma referente ao Exemplo 2.2.2.
  • Algoritmo

    1. 1.

      Entre o valor de x.

    2. 2.

      Se x0, faça:

      1. (a)

        sx/2

      2. (b)

        Para i=0,1,2,3, faça:

        1. i.

          s(s+x/s)/2.

      3. (c)

        Imprime o valor de s.

    3. 3.

      Senão, faça:

      1. (a)

        Imprime mensagem “Não existe!”.

  • Fluxograma

    Consulte a Figura 2.2.

  • Código Python

    Código 1: metHeron.py
    1x = float(input('Entre com o valor de x: '))
    2if (x >= 0.):
    3  s = x/2
    4  for i in range(4):
    5      s = (s + x/s)/2
    6  print(f'Raiz aprox. de x = {s}')
    7else:
    8  print(f'Não existe!')

O algoritmo tem um bug (um erro)! Consulte o Exercício 2.2.11.

Algoritmos escritos em uma forma próxima de uma linguagem computacional são, também, chamados de pseudocódigos. Na prática, pseudocódigos e fluxogramas são usados para apresentar uma forma mais geral e menos detalhada de um algoritmo. Usualmente, sua forma detalhada é escrita diretamente em uma linguagem computacional escolhida.

2.2.2 Exercícios

E. 2.2.1.

Complete as lacunas.

  1. a)

    Programar é desenvolver um software para ser executado em um computador.

  2. b)

    Linguagens computacionais tem uma sintaxe simples, precisa e sem ambiguidades.

  3. c)

    Um algoritmo é uma sequência finita de passos bem definidos que permitem a resolução objetiva de um problema em tempo finito.

  4. d)

    Pseudocódigo é um algoritmo escrito em uma forma próxima de uma linguagem computacional.

Resposta.

a) programa/código/software. b) sintaxe. c) bem definidos; objetiva; finito. d) Pseudocódigo.

E. 2.2.2.

Complete as lacunas.

  1. a)

    Fluxograma é uma representação gráfica de um algoritmo.

  2. b)

    Em um fluxograma, terminal indicada o início ou final de um algoritmo.

  3. c)

    A linha de fluxo direciona para o próximo bloco de execução.

  4. d)

    A leitura de dados é indicada por um bloco de entrada em um fluxograma.

  5. e)

    Um bloco de processo indica uma ação a ser executada.

  6. f)

    Uma ramificação do algoritmo é indicada no seu fluxograma por um bloco de decisão.

  7. g)

    Em um fluxograma, o bloco de saída indica a impressão de um dado.

Resposta.

a) Fluxograma. b) terminal. c) linha de fluxo; execução. d) entrada. e) processo. f) decisão. g) saída.

E. 2.2.3.

Escreva um algoritmo/pseudocódigo e um fluxograma correspondente computar a média aritmética entre dois números x e y dados. Como desafio, tente escrever um código Python baseado em seu algoritmo.

Resposta.
  • Algoritmo

    1. Entre com os valores de x e y
    2. m = (x + y)/2
    3. Imprime m
    
  • Fluxograma

    [Uncaptioned image]
E. 2.2.4.

Escreva um algoritmo/pseudocódigo e um fluxograma correspondente para computar a área de um quadrado de lado l dado. Como desafio, tente escrever um código Python baseado em seu algoritmo.

Resposta.
  • Algoritmo

    1. Entre com o valor de l
    2. area = l*l
    3. Imprime area
    
E. 2.2.5.

Escreva um algoritmo/pseudocódigo e um fluxograma correspondente para computar a área de um retângulo de lados a,b dados. Como desafio, tente escrever um código Python baseado em seu algoritmo.

Resposta.
1. Entre com o valor de a
2. Entre com o valor de b
3. area = a*b
4. Imprime area
E. 2.2.6.

Escreva um algoritmo/pseudocódigo e um fluxograma correspondente para computar a área de um triângulo retângulo de dada hipotenusa h e um dos lados l dado. Como desafio, tente escrever um código Python baseado em seu algoritmo.

Resposta.
  • Algoritmo

    1. Entre com o valor de h
    2. Entre com o valor de l
    #  o outro cateto
    3. m = sqrt(h*h - l*l)
    4. area = m*l/2.
    5. Imprime area
    
  • Fluxograma

    [Uncaptioned image]
E. 2.2.7.

Escreva um algoritmo/pseudocódigo e um fluxograma correspondente para computar o zero de uma função afim

f(x)=ax+b, (2.3)

dados os coeficientes a e b. Como desafio, tente escrever um código Python baseado em seu algoritmo.

Resposta.
1. Entre com o valor de a
2. Entre com o valor de b
3. x0 = -b/a
4. Imprime x0
E. 2.2.8.

Escreva um algoritmo/pseudocódigo e um fluxograma correspondente para computar as raízes reais de um polinômio quadrático

p(x)=ax2+bx+c, (2.4)

dados os coeficientes a, b e c. Como desafio, tente escrever um código Python baseado em seu algoritmo.

Resposta.
1. Entre com o valor de a
2. Entre com o valor de b
3. Entre com o valor de c
#  discriminante
4. delta = b*b - 4.*a*c
#  raízes
5. x1 = (-b - sqrt(delta))/2.
6. x2 = (-b + sqrt(delta))/2.
7. Imprime x1 e x2
E. 2.2.9.

A Série Harmônica é defina por

k=11k:=11+12+13+ (2.5)

Escreva um algoritmo/pseudocódigo e um fluxograma corresponde para computar o valor da série harmônica truncada em k=n, com n dado. Ou seja, dado n, o objetivo é calcular

k=1n1k:=11+12++1n. (2.6)
Resposta.
  • Algoritmo

    1. Entre com o valor de n.
    2. s = 0.
    3. Para i = 1, 2, ... n:
    3.1. s = s + 1./i
    4. Imprime s
    
  • Fluxograma

    [Uncaptioned image]
E. 2.2.10.

Escreva um algoritmo/pseudocódigo e um fluxograma corresponde para computar o fatorial de um dado número natural n, i.e. computar

n!=123n. (2.7)
Resposta.
1. Entre com o valor de n
2. fat = 1
3. Para i = 2, ..., n:
3.1. fat = fat*i
4. Imprime fat
E. 2.2.11.

O algoritmo construído no Exemplo 2.2.2 tem um bug (um erro). Identifique o bug e proponha uma nova versão para corrigir o problema. Então, apresente o fluxograma da nova versão do algoritmos. Como desafio, busque implementá-lo em Python.

Resposta.

Dica: o bug ocorre quando x=0.


Envie seu comentário

As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Uso de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!