Mudanças entre as edições de "AULA - Representação de Algoritmos. Constantes, Variáveis e Expressões."

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(2 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 10: Linha 10:
 
=== Como fazer um churrasco ===
 
=== Como fazer um churrasco ===
  
O que tem o churrasco com a nossa aula??
+
O que tem o churrasco com a nossa aula??  Trata-se de uma sequência de passos para execução de um objetivo.
  Trata-se de uma sequência de passos para execução
 
de um objetivo.
 
  
EXERCÍCIO: Na forma textual, descrever as etapas
+
EXERCÍCIO: Na forma textual, descrever as etapas para fazer um bom churrasco.
para fazer um bom churrasco.
 
  
 
=== O que é um algoritmo ===
 
=== O que é um algoritmo ===
Linha 21: Linha 18:
 
Um [http://pt.wikipedia.org/wiki/Algoritmo algoritmo] pode ser visto como uma sequência de instruções ou operações que resolvem um dado problema.
 
Um [http://pt.wikipedia.org/wiki/Algoritmo algoritmo] pode ser visto como uma sequência de instruções ou operações que resolvem um dado problema.
  
A receita de um bom churrasco corresponde a um algoritmo.
+
A receita de um bom churrasco corresponde a um algoritmo.
  
 
=== Como representar um algoritmo? ===
 
=== Como representar um algoritmo? ===
Linha 27: Linha 24:
 
Uma forma é representar na forma textual ordenada:
 
Uma forma é representar na forma textual ordenada:
  
1. Comprar a carne
+
# Comprar a carne
2. Colocar carvão na churrasqueira
+
# Colocar carvão na churrasqueira
3. Acender o carvão
+
# Acender o carvão
4. Cortar a carne (picanha)
+
# Cortar a carne (picanha)
5. Espetar a carne
+
# Espetar a carne
6. Salgar a carne
+
# Salgar a carne
7. Colocar a carne na churrasqueira
+
# Colocar a carne na churrasqueira
8. Aguardar a carne ficar no ponto desejado
+
# Aguardar a carne ficar no ponto desejado
9. Bater a carne
+
# Bater a carne
10.Servir a carne
+
# Servir a carne
  
 
Outras formas são mais apropriadas para o uso no meio computacional:
 
Outras formas são mais apropriadas para o uso no meio computacional:
Linha 42: Linha 39:
 
* fluxogramas
 
* fluxogramas
  
A PENSAR: É possível mudar a ordem das instruções?
+
A PENSAR: É possível mudar a ordem das instruções?  É possível paralelizar algumas instruções?
  É possível paralelizar algumas instruções?
 
  
 
=== E para quem são os algoritmos? ===
 
=== E para quem são os algoritmos? ===
  
Uma receita de bolo é apropriada para ser executada  
+
Uma receita de bolo é apropriada para ser executada por um ser humano.  Um procedimento de como trocar um pneu também.  Mas muitas vezes queremos que o algoritmo seja executado por uma máquina! O computador é perfeito para isto!
por um ser humano.  
 
  Um procedimento de como trocar um pneu também.  
 
  Mas muitas vezes queremos que o algoritmo seja executado  
 
por uma máquina! O computador é perfeito para isto!
 
  
Nesta disciplina vamos nos concentrar no desenvolvimento
+
Nesta disciplina vamos nos concentrar no desenvolvimento de algoritmos simples, desde a sua concepção até a sua implementação (e depuração) através de uma LINGUAGEM DE PROGRAMAÇÃO - a linguagem C, por exemplo.
de algoritmos simples, desde a sua concepção até a sua
 
implementação (e depuração) através de uma LINGUAGEM DE
 
PROGRAMAÇÃO - a linguagem C, por exemplo.
 
  
Um PROGRAMA implementa um algoritmo. É o algoritmo  
+
Um PROGRAMA implementa um algoritmo. É o algoritmo materializado na forma de uma sequência de instruções.
materializado na forma de uma sequência de instruções.
 
  
 
===Para praticar===
 
===Para praticar===
Linha 70: Linha 58:
 
=A Descrição de Algoritmos usando Fluxogramas=
 
=A Descrição de Algoritmos usando Fluxogramas=
  
Um fluxograma é uma linguagem semi-gráfica que pode ser utilizada  
+
Um fluxograma é uma linguagem semi-gráfica que pode ser utilizada para descrição de algoritmos.
para descrição de algoritmos.
 
  
 
Exemplo: O algoritmo de cálculo da média de dois números:
 
Exemplo: O algoritmo de cálculo da média de dois números:
Linha 85: Linha 72:
 
Neste caso, os dados LIDOS serão ARMAZENADOS em áreas de "memória" específicas rotuladas por um nome. São as "variáveis".
 
Neste caso, os dados LIDOS serão ARMAZENADOS em áreas de "memória" específicas rotuladas por um nome. São as "variáveis".
  
Observe no exemplo anterior que nada é dito sobre as variáveis NUM1, NUM2 e MEDIA.
+
Observe no exemplo anterior que nada é dito sobre as variáveis NUM1, NUM2 e MEDIA.
  
 
===Símbolos de um Fluxograma===
 
===Símbolos de um Fluxograma===
 +
 
[[imagem:TabelaSimbolosFluxograma.jpg|450px]]
 
[[imagem:TabelaSimbolosFluxograma.jpg|450px]]
  
Linha 118: Linha 106:
 
  Ex: FRASE = "ALO MUNDO"
 
  Ex: FRASE = "ALO MUNDO"
  
E como estas variáveis armazenam os dados? Depende da linguagem usada.
+
E como estas variáveis armazenam os dados? Depende da linguagem usada.
  
Uma sequência de caracteres é chamada de "string", em inglês. Usaremos bastante este termo alternando com cadeia de caracteres.
+
Uma sequência de caracteres é chamada de "string", em inglês. Usaremos bastante este termo alternando com cadeia de caracteres.
  
 
===Expressões===
 
===Expressões===
Linha 132: Linha 120:
 
será considerada como uma expressão que usa os operadores '+', '/' e '='.
 
será considerada como uma expressão que usa os operadores '+', '/' e '='.
  
O operador '=' é um OPERADOR DE ATRIBUIÇÃO e indica que a expressão do lado direito
+
O operador '=' é um OPERADOR DE ATRIBUIÇÃO e indica que a expressão do lado direito do '=' será atribuída a variável do lado esquerdo.
do '=' será atribuída a variável do lado esquerdo.
 
  
Observe a necessidade dos parênteses para garantir a PRECEDÊNCIA das operações. Uma expressão da forma:
+
Observe a necessidade dos parênteses para garantir a PRECEDÊNCIA das operações. Uma expressão da forma:
 
  MEDIA = NUM1 + NUM2 / 2 (neste caso primeiro será dividido NUM2 por 2 e depois somado com NUM1. NÃO é a média...
 
  MEDIA = NUM1 + NUM2 / 2 (neste caso primeiro será dividido NUM2 por 2 e depois somado com NUM1. NÃO é a média...
  
Neste curso, para mantermos coerência com a linguagem C, consideraremos que a expressão
+
Neste curso, para mantermos coerência com a linguagem C, consideraremos que a expressão como um todo resulta no valor que é atribuído a variável.
como um todo resulta no valor que é atribuído a variável.
 
  
 
[[imagem:ExecucaoExpressao.jpg|450px]]
 
[[imagem:ExecucaoExpressao.jpg|450px]]
Linha 197: Linha 183:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Note que agora informamos quais variáveis existem e de que tipo elas são (inteiras e real).
+
Note que agora informamos quais variáveis existem e de que tipo elas são (inteiras e real).  Notar também que a flecha '<-' foi usada como operador de ATRIBUIÇÃO. Nas nossas aulas, poderemos usar tanto a flecha como o '='. Este último é usado na linguagem C.
  Notar também que a flecha '<-' foi usada como operador de ATRIBUIÇÃO. Nas nossas aulas,  
+
 
poderemos usar tanto a flecha como o '='. Este último é usado na linguagem C.
+
  Em algumas literaturas é sugerido usar verbos no IMPERATIVO. Aqui apresentamos instruções com verbos no INFINITIVO. A instrução LER seria então LEIA. A instrução MOSTRAR seria MOSTRE...
  
 
=Representando o algoritmo em linguagem C=
 
=Representando o algoritmo em linguagem C=
Linha 205: Linha 191:
 
Abaixo um programa em C implementando o algoritmo de cálculo da média de dois números.  
 
Abaixo um programa em C implementando o algoritmo de cálculo da média de dois números.  
  
OBSERVE que uma pessoa que não conhece a sintaxe da linguagem terá um pouco de dificuldade de entender...
+
OBSERVE que uma pessoa que não conhece a sintaxe da linguagem terá um pouco de dificuldade de entender...
  
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
#include <stdio.h>
 
#include <stdio.h>
  
main()
+
int main(void)
 
{
 
{
   int num1,num2;
+
   int num1, num2;
 
   float media;
 
   float media;
  
   scanf("%d",&num1);
+
   scanf("%d", &num1);
   scanf("%d",&num2);
+
   scanf("%d", &num2);
   media = (num1+num2)/2.0;
+
   media = (num1 + num2) / 2.0;
 
   printf("media = %f\n", media);
 
   printf("media = %f\n", media);
 +
 +
  return 0;
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição das 09h36min de 9 de março de 2023

Objetivos

  • Conceituar algoritmo.
  • Utilizar variáveis, constantes e expressões nas instruções do algoritmo.
  • Representar algoritmos na forma de fluxogramas e pseudocódigo.
  • Utilizar teste de mesa para verificar o funcionamento do algoritmo.

Conceito de Algoritmo

Como fazer um churrasco

O que tem o churrasco com a nossa aula?? Trata-se de uma sequência de passos para execução de um objetivo.

EXERCÍCIO: Na forma textual, descrever as etapas para fazer um bom churrasco.

O que é um algoritmo

Um algoritmo pode ser visto como uma sequência de instruções ou operações que resolvem um dado problema.

A receita de um bom churrasco corresponde a um algoritmo.

Como representar um algoritmo?

Uma forma é representar na forma textual ordenada:

  1. Comprar a carne
  2. Colocar carvão na churrasqueira
  3. Acender o carvão
  4. Cortar a carne (picanha)
  5. Espetar a carne
  6. Salgar a carne
  7. Colocar a carne na churrasqueira
  8. Aguardar a carne ficar no ponto desejado
  9. Bater a carne
  10. Servir a carne

Outras formas são mais apropriadas para o uso no meio computacional:

  • pseudo-código
  • fluxogramas

A PENSAR: É possível mudar a ordem das instruções? É possível paralelizar algumas instruções?

E para quem são os algoritmos?

Uma receita de bolo é apropriada para ser executada por um ser humano. Um procedimento de como trocar um pneu também. Mas muitas vezes queremos que o algoritmo seja executado por uma máquina! O computador é perfeito para isto!

Nesta disciplina vamos nos concentrar no desenvolvimento de algoritmos simples, desde a sua concepção até a sua implementação (e depuração) através de uma LINGUAGEM DE PROGRAMAÇÃO - a linguagem C, por exemplo.

Um PROGRAMA implementa um algoritmo. É o algoritmo materializado na forma de uma sequência de instruções.

Para praticar

Exercícios

1.Descreva com detalhes a sequência lógica para trocar um pneu de um carro.

A Descrição de Algoritmos usando Fluxogramas

Um fluxograma é uma linguagem semi-gráfica que pode ser utilizada para descrição de algoritmos.

Exemplo: O algoritmo de cálculo da média de dois números:

FluxogramaMediaDoisNumeros.jpg

Ponto forte:

  • Permite fácil entendimento do algoritmo, mesmo para pessoas leigas.

Ponto fraco:

  • A descrição das estrutura dos dados inexiste. O usuário deve descrevê-los à parte.

Neste caso, os dados LIDOS serão ARMAZENADOS em áreas de "memória" específicas rotuladas por um nome. São as "variáveis".

Observe no exemplo anterior que nada é dito sobre as variáveis NUM1, NUM2 e MEDIA.

Símbolos de um Fluxograma

TabelaSimbolosFluxograma.jpg

EXERCÍCIO EM SALA: Elaborar um fluxograma para somar dois números e multiplicar o resultado desta soma pelo primeiro número.

Teste de Mesa

O teste de mesa serve para acompanharmos passo a passo a execução de um algoritmo, verificando e atualizando a cada momento o valor das diversas variáveis envolvidas no processamento do algoritmo. Observe no exemplo abaixo que as "caixas" (áreas de armazenamento) correspondentes as variáveis estão inicialmente com valores indeterminados. A medida que as instruções são executadas estas variáveis são atualizadas.

TesteMesaMediaDoisNumeros.jpg

Variáveis, Constantes e Expressões

Algoritmos operam sobre dados. O que podem ser estes dados?

Variáveis e Constantes

No exemplo anterior podemos identificar três variáveis NUM1, NUM2 e MEDIA. Também podemos identificar uma constante, o número 2.

Tipo de variáveis:

  • Numéricas: reais e inteiras
Ex: NUM1 = 5.5 /* NUM1 é uma variável real */
  • Booleanas: true ou false
Ex: RES = TRUE /* RES é uma variável booleana */ 
  • caracter:
Ex: LETRA = 'A'
  • alfanumérica
Ex: FRASE = "ALO MUNDO"

E como estas variáveis armazenam os dados? Depende da linguagem usada.

Uma sequência de caracteres é chamada de "string", em inglês. Usaremos bastante este termo alternando com cadeia de caracteres.

Expressões

Expressões são sentenças que relacionam variáveis e constantes através de operadores matemáticos e que RESULTAM em um valor.

A instrução do algoritmo:

MEDIA = (NUM1 + NUM2) / 2 

será considerada como uma expressão que usa os operadores '+', '/' e '='.

O operador '=' é um OPERADOR DE ATRIBUIÇÃO e indica que a expressão do lado direito do '=' será atribuída a variável do lado esquerdo.

Observe a necessidade dos parênteses para garantir a PRECEDÊNCIA das operações. Uma expressão da forma:

MEDIA = NUM1 + NUM2 / 2 (neste caso primeiro será dividido NUM2 por 2 e depois somado com NUM1. NÃO é a média...

Neste curso, para mantermos coerência com a linguagem C, consideraremos que a expressão como um todo resulta no valor que é atribuído a variável.

ExecucaoExpressao.jpg

Notar que a expressão de atribuição não se trata de uma IGUALDADE MATEMÁTICA. Uma expressão viável pode ser:

X = X + 1

Significa que o valor da variável X deve ser somado com a constante 1 sendo o resultada da expressão colocado em X.

Operadores Aritméticos

Os operadores aritméticos que usaremos neste curso serão os disponíveis no C:

Operador Significado
+ adição
- subtração
* multiplicação
/ divisão
% resto

O único operador desconhecido aqui é o resto, cujo significado é o resto da divisão entre dois números inteiros. Exemplo: se B possui o valor 9, então o resultado da atribuição na expressão

A = B%2

será 1.

Representando o algoritmo com pseudo-código

Uma possível representação em pseudocódigo do fluxograma acima seria:

ALGORITMO MEDIA
VARIAVEIS
   NUM1: INTEIRO
   NUM2: INTEIRO
   MEDIA: REAL
INICIO
   LER NUM1
   LER NUM2
   MEDIA <- (NUM1+NUM2)/2
   MOSTRAR MEDIA
FIM

Note que agora informamos quais variáveis existem e de que tipo elas são (inteiras e real). Notar também que a flecha '<-' foi usada como operador de ATRIBUIÇÃO. Nas nossas aulas, poderemos usar tanto a flecha como o '='. Este último é usado na linguagem C.

 Em algumas literaturas é sugerido usar verbos no IMPERATIVO. Aqui apresentamos instruções com verbos no INFINITIVO. A instrução LER seria então LEIA. A instrução MOSTRAR seria MOSTRE...

Representando o algoritmo em linguagem C

Abaixo um programa em C implementando o algoritmo de cálculo da média de dois números.

OBSERVE que uma pessoa que não conhece a sintaxe da linguagem terá um pouco de dificuldade de entender...

#include <stdio.h>

int main(void)
{
  int num1, num2;
  float media;

  scanf("%d", &num1);
  scanf("%d", &num2);
  media = (num1 + num2) / 2.0;
  printf("media = %f\n", media);

  return 0;
}

Exercícios do Code.org

  1. Implementar o algoritmo em Artist - Puzzle 1 e construir um fluxograma. Mostrar para o professor.
  2. Implementar o algoritmo em Artist - Puzzle 2 e construir um fluxograma. Mostrar para o professor.
  3. Implementar o algoritmo em Artist - Puzzle 3 e construir um fluxograma. Mostrar para o professor.
  4. Implementar o algoritmo em AngryBird - 5 e construir um fluxograma. Mostrar para o professor.
O CONCEITO DE VARIÁVEL FOI USADO NESTES EXERCÍCIOS?

Exercícios

  1. Fazer um algoritmo na forma de fluxograma para calcular o valor y de uma função de uma reta dado x. Identifique quem são as variáveis e constantes do problema.
    Solução - Exercicio 01

    Exercicio01 Progamacao 1 correto.jpg

  2. Fazer um algoritmo na forma de fluxograma para calcular o DELTA de uma equação do segundo grau, dados os coeficientes a, b e c. OBS: .
    Solução - Exercicio 02

    Exercicio02 Programacao1 correto.jpg

  3. Apresente uma variação de solução do exercício (2) usando apenas duas variáveis para armazenamento de dados. Apresente também um TESTE DE MESA para o algoritmo proposto.
  4. Implementar um algoritmo na forma de pseudocódigo para calcular a conversão de CELSIUS para Farenheit (ver [1]).
    Solução - Exercicio 04
    ALGORITMO CONVERSOR
    VARIAVEIS
      Celsius: FLOAT  
      Fahrenheit: FLOAT  
    INICIO
      LER Celsius
      Fahrenheit = Celsius * (9/5) + 32
      MOSTRAR Fahrenheit
    FIM
    
  5. Implementar um algoritmo na forma de pseudo-código para calcular a corrente sobre um resistor, dado a tensão V aplicada sobre ele. Considere um resistor com R constante de 5kΩ .
    Solução - Exercicio 05
    ALGORITMO CIRCUITO
    VARIAVEIS
     V : REAL
     I : REAL
    CONSTANTES
     R : 5000
    INICIO
      LER V
      I = V/R
      MOSTRAR I
    FIM
    
  6. Incremente o exercício 5 para computar também a potência dissipada sobre o resistor.
    Solução - Exercicio 06
    ALGORITMO CIRCUITO 2
    VARIAVEIS
     V : REAL
     I : REAL
     P: REAL
    CONSTANTES
     R : 5000
    INICIO
      LER V
      I = V/R
      MOSTRAR I
      P = V*I
      MOSTRAR P
    FIM
    
  7. Implementar um algoritmo na forma de pseudo-código para converter um ângulo em radianos para graus.
    Solução - Exercicio 07
    ALGORITMO CONVERSOR RAD
    VARIAVEIS
      rad : REAL
      graus : REAL
    INICIO
      LER rad
      graus = rad * 180/3.1415
      MOSTRAR graus
    FIM
    
  8. O problema da raposa, do milho e da galinha.


    EXERCÍCIO 8A: Descrever na forma de etapas um 
    solução para o problema da raposa, do milho e da galinha.
    
    Note que somente é possível escrever o algoritmo se tivermos uma solução para o problema.
    
    Solução

    1 - O homem leva a galinha ao outro lado do rio.

    2 - O homem leva o milho ao outro lado do rio.

    3 - O homem volta com a galinha para o lado inicial do rio e deixa o milho.

    4 - O homem leva a raposa para o outro lado do rio onde está o milho.

    5 - O homem ele volta ao lado inicial do rio e leva a galinha para o lado do rio onde está o milho e a raposa.

  9. Torres de Hanoi Veja este jogo:

    (a)Escrever na forma de etapas numeradas a solução para o problema das torres de Hanói usando 3 discos.

    Solução - 3 Discos

    7 Passos

    1 - Disco um para o terceiro pino

    2 - Disco dois para o segundo pino

    3 - Disco um para o segundo pino

    4 - Disco tres para o terceiro pino

    5 - Disco um para o primeiro pino

    6 - Disco dois para o terceiro pino

    7 - Disco um para o terceiro pino

    (b) Escrever na forma de etapas numeradas a solução para o problema das torres de Hanói usando 4 discos.

    Solução - 4 Discos

    15 Passos

    1 - Disco um para o segundo pino

    2 - Disco dois para o terceiro pino

    3 - Disco um para o terceiro pino

    4 - Disco tres para o segundo pino

    5 - Disco um para o primeiro pino

    6 - Disco dois para o segundo pino

    7 - Disco um para o segundo pino

    8 - Disco quatro para o terceiro pino

    9 - Disco um para o terceiro pino

    10 - Disco dois para o primeiro pino

    11 - Disco um para o primeiro pino

    12 - Disco tres para o terceiro pino

    13 - Disco um para o segundo pino

    14 - Disco dois para o terceiro pino

    15 - Disco um para o terceiro pino

  10. Implementar um fluxograma para computar a área e o comprimento de uma circunferência dado o RAIO.
    Solução - Exercicio 10

    Exercicio 10 Programacao 1.jpg

  11. Implementar um fluxograma para ler um número complexo (ler por partes) no formato retangular e apresentar o módulo e o ângulo EM GRAUS do mesmo (formato polar). Suponha que você dispõe de uma função ATG() que calcula o arco em radianos de uma dada tangente.
    Solução - Exercicio 11

    Exercicio11 Programacao1.jpg

  12. Implementar um fluxograma para apresentar a velocidade no instante T (a ser fornecido) de um corpo de massa 1Kg que está inicialmente parado (em T=0) e submetido a força F também fornecida como entrada. Despreze atrito.
    Considere:
    Vi=0
    O-->
    m=1Kg F=1N
    Solução - Exercicio 12

    Exercicio12 Programacao1.jpg

  13. Faça um algoritmo para computar o desvio padrão de uma população representada por 7 números reais. Suponha que você dispõe de uma função SQRT() que permite computar a raiz quadrada de um número. Usar:
    (extraído da wikipedia [2])
    (extraído da wikipedia [3])
    SUGESTÃO: computar primeiramente a média OBS: Notar que o desvio padrão acima é de uma população. O desvio padrão de uma amostra usa a divisão por , mas isto é uma discussão para a disciplina da estatística.
  14. Faça um algoritmo para calcular o coeficiente angular e o coeficiente linear de uma reta DADOS dois pontos P(p1,p2) e Q (q1,q2).
  15. Apresente um fluxograma para resolver a expressão: X=A*B+C*D*E+F^2. Os valores de A,B,C,D,E,e F devem ser fornecidos como entrada do algoritmo mas você DEVE tentar usar o MENOR número possível de variáveis, ou seja, tente reaproveitar variáveis para armazenamento dos dados de entrada. Você pode inclusive reaproveitar a variável usada para armazenar o valor de X. Apresente um TESTE DE MESA. Faça a mão livre.