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
 
(99 revisões intermediárias por 7 usuários não estão sendo mostradas)
Linha 1: Linha 1:
== AULA 1 ==
+
= Objetivos =
  
=== Como fazer um churrasco ===
+
*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.
  
Vamos observar atentamente este vídeo para iniciarmos o nosso curso de programação:
+
= Conceito de Algoritmo =
  
<center>{{#ev:youtube|U0xSYIXE9vo#!}} </center>
+
=== 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 18: 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 receita de um bom churrasco corresponde a um algoritmo.
a um algoritmo.
 
  
=== Como representar um algoritmo ? ===
+
=== Como representar um algoritmo? ===
  
 
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 40: 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? ===
  
 +
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!
  
=== E para quem são os algoritmos? ===
+
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.
  
Uma receita de bolo é apropriada para ser executada
+
Um PROGRAMA implementa um algoritmo. É o algoritmo materializado na forma de uma sequência de instruções.
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!
 
  
Neste curso vamos nos concentrar no desenvolvimento de
+
===Para praticar===
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
+
{{collapse top | Exercícios}}
materializado na forma de uma sequência de instruções.
+
<!--1. Crie uma sequência lógica para emprestar um livro na biblioteca do IFSC.-->
 
+
1.Descreva com detalhes a sequência lógica para trocar um pneu de um carro.
Neste sentido, vamos entender minimamente o funcionamento de um computador (próxima aula)
+
{{collapse bottom}}
  
===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 72: Linha 64:
 
[[imagem:FluxogramaMediaDoisNumeros.jpg|150px|center]]
 
[[imagem:FluxogramaMediaDoisNumeros.jpg|150px|center]]
  
Pontos fortes:
+
Ponto forte:
*permite fácil entendimento do algoritmo, mesmo para pessoas leigas;
+
*Permite fácil entendimento do algoritmo, mesmo para pessoas leigas.
  
 
Ponto fraco:
 
Ponto fraco:
*a descrição das estrutura dos dados inexiste. O usuário deve descrevê-los a parte. Neste caso os dados
+
*A descrição das estrutura dos dados inexiste. O usuário deve descrevê-los à parte.
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]]
  
===Teste de Mesa===
+
EXERCÍCIO EM SALA: Elaborar um fluxograma para somar dois números e multiplicar o resultado desta soma pelo primeiro número.
 
 
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.
 
  
[[imagem:TesteMesaMediaDoisNumeros.jpg|650px]]
+
=Variáveis, Constantes e Expressões=
 
 
===Constantes, Variáveis===
 
  
 
Algoritmos operam sobre dados. O que podem ser estes dados?
 
Algoritmos operam sobre dados. O que podem ser estes dados?
  
Variáveis e Constantes
+
===Variáveis e Constantes===
 
   
 
   
No exemplo anterior podemos identificar três variáveis NUM1, NUM2 e MEDIA
+
No exemplo anterior podemos identificar três '''variáveis''' NUM1, NUM2 e MEDIA.
Também podemos identificar uma CONSTANTE. O número 2.
+
Também podemos identificar uma '''constante''', o número 2.
  
*Tipo de Variáveis:
+
Tipo de variáveis:
  
**'''Numéricas''': '''reais''' e '''inteiras'''
+
*'''Numéricas''': '''reais''' e '''inteiras'''
 
  Ex: NUM1 = 5.5 /* NUM1 é uma variável real */
 
  Ex: NUM1 = 5.5 /* NUM1 é uma variável real */
**'''Booleanas''': true ou false
+
*'''Booleanas''': true ou false
 
  Ex: RES = TRUE /* RES é uma variável booleana */  
 
  Ex: RES = TRUE /* RES é uma variável booleana */  
**'''caracter''':  
+
*'''caracter''':  
 
  Ex: LETRA = 'A'
 
  Ex: LETRA = 'A'
**'''alfanumérica'''
+
*'''alfanumérica'''
 
  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.
  
 
===Expressões===
 
===Expressões===
  
Expressões sentenças que relacionam variáveis e constantes através de operadores matemáticos
+
Expressões são sentenças que relacionam variáveis e constantes através de operadores matemáticos e que RESULTAM em um valor.
e que RESULTAM em um valor.
 
  
 
A instrução do algoritmo:
 
A instrução do algoritmo:
Linha 121: Linha 112:
 
  MEDIA = (NUM1 + NUM2) / 2  
 
  MEDIA = (NUM1 + NUM2) / 2  
  
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 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...
  
O operador '=' é um OPERADOR DE ATRIBUIÇÃO e indica que a expressão do lado direito
+
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.
do '=' será atribuída a variável do lado esquerdo.
 
  
Neste curso, para mantermos coerência com a Linguagem C, consideraremos que a expressão
+
[[imagem:ExecucaoExpressao.jpg|450px]]
como um todo resulta no valor que é atribuído a variável.
 
  
 
Notar que a expressão de atribuição não se trata de uma IGUALDADE MATEMÁTICA. Uma expressão viável pode ser:
 
Notar que a expressão de atribuição não se trata de uma IGUALDADE MATEMÁTICA. Uma expressão viável pode ser:
Linha 159: Linha 153:
 
|}
 
|}
  
O único operador desconhecido aqui é o resto, cujo significado é o resto entre dois números inteiros. Exemplo, se B possui o valor 9, então o resultado da atribuição na expressão:
+
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
 
  A = B%2
 +
 
será 1.
 
será 1.
  
===Representando o algoritmo com pseudo-código===
+
=Teste de Mesa=
  
Uma possível representação em pseudo-código do fluxograma acima seria:
+
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.
  
<code>
+
[[imagem:TesteMesaMediaDoisNumeros.jpg|650px]]
 +
 
 +
=Representando o algoritmo com pseudo-código=
 +
 
 +
Uma possível representação em pseudocódigo do fluxograma acima seria:
 +
 
 +
<syntaxhighlight lang="C">
 
ALGORITMO MEDIA
 
ALGORITMO MEDIA
 
VARIAVEIS
 
VARIAVEIS
Linha 176: Linha 178:
 
   LER NUM1
 
   LER NUM1
 
   LER NUM2
 
   LER NUM2
   MEDIA = (NUM1+NUM2)/2
+
   MEDIA <- (NUM1+NUM2)/2
 
   MOSTRAR MEDIA
 
   MOSTRAR MEDIA
 
FIM
 
FIM
 
</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.
 +
 
 +
  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===
+
Abaixo um programa em C implementando o algoritmo de cálculo da média de dois números.
  
<syntaxhighlight lang=c>
+
OBSERVE que uma pessoa que não conhece a sintaxe da linguagem terá um pouco de dificuldade de entender...
 +
 
 +
<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;
   prinft("media = %f\n", media);
+
   printf("media = %f\n", media);
 +
 
 +
  return 0;
 +
}
 +
</syntaxhighlight>
 +
 
 +
=Representando o algoritmo em linguagem Java=
 +
 
 +
<syntaxhighlight lang="java">
 +
import java.util.Scanner;
 +
 
 +
class ProgramaSomaNumeros {
 +
 
 +
    public static void main(String[] args) {   
 +
        Scanner teclado = new Scanner(System.in);
 +
        int numA;
 +
        int numB;
 +
        float media;
 +
 
 +
        numA = teclado.nextInt();
 +
        numB = teclado.nextInt();
 +
        media = (float)(numA + numB)/2;
 +
        System.out.printf("Média igual a %.2f\n", media);
 +
        teclado.close();
 +
    }
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Exercícios===
+
=Exercícios do Code.org=
 +
 
 +
# Implementar o algoritmo em [https://studio.code.org/s/artist/stage/1/puzzle/1 Artist - Puzzle 1] e construir um fluxograma. Mostrar para o professor.
 +
# Implementar o algoritmo em [https://studio.code.org/s/artist/stage/1/puzzle/2 Artist - Puzzle 2] e construir um fluxograma. Mostrar para o professor.
 +
# Implementar o algoritmo em [https://studio.code.org/s/artist/stage/1/puzzle/3 Artist - Puzzle 3] e construir um fluxograma. Mostrar para o professor.
 +
# Implementar o algoritmo em [https://studio.code.org/hoc/5 AngryBird - 5] e construir um fluxograma. Mostrar para o professor.
 +
 
 +
O CONCEITO DE VARIÁVEL FOI USADO NESTES EXERCÍCIOS?
 +
 
 +
=Exercícios=
  
 
<ol>
 
<ol>
 
<li>
 
<li>
Fazer um algoritmo na forma de fluxograma para calcular o valor y de uma função de uma reta <math> y = 5x+2 </math> dado x. Identifique quem são as variáveis e constantes do problema.
+
Fazer um algoritmo na forma de fluxograma para calcular o valor y de uma função de uma reta <math> y = 5x+2 </math>, dado x. Identifique quem são as variáveis e constantes do problema.
 
{{collapse top|Solução - Exercicio 01}}
 
{{collapse top|Solução - Exercicio 01}}
[[imagem:Exercicio01_Progamacao_1_correto.jpg‎|300px]]
+
<!--[[imagem:Exercicio01_Progamacao_1_correto.jpg‎|300px]]/-->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</li>
 
</li>
Linha 212: Linha 253:
 
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: <math>DELTA=b^2-4ac</math>.
 
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: <math>DELTA=b^2-4ac</math>.
 
{{collapse top|Solução - Exercicio 02}}
 
{{collapse top|Solução - Exercicio 02}}
[[imagem:Exercicio02_Programacao1_correto.jpg|400px]]
+
<!--[[imagem:Exercicio02_Programacao1_correto.jpg|400px]]-->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</li>
 
</li>
 
<li>
 
<li>
Apresente uma variação de solução do exercício (2) usando apenas duas variáveis para armazenamento de dados.
+
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.
 
</li>
 
</li>
 
<li>
 
<li>
Implementar um algoritmo na forma de pseudocódigo para calcular a conversão de CELSIUS para Farenheit.
+
Implementar um algoritmo na forma de pseudocódigo para calcular a conversão de CELSIUS para Farenheit (ver [https://www.infoescola.com/fisica/conversao-de-escalas-termometricas/]).
 
{{collapse top|Solução - Exercicio 04}}
 
{{collapse top|Solução - Exercicio 04}}
<code>
+
<!--
 +
<syntaxhighlight lang="C">
 
ALGORITMO CONVERSOR
 
ALGORITMO CONVERSOR
 
VARIAVEIS
 
VARIAVEIS
Linha 232: Linha 274:
 
FIM
 
FIM
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
-->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</li>
 
</li>
 
<li>
 
<li>
 
Implementar um algoritmo na forma de pseudo-código para calcular a corrente sobre
 
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 ohm.
+
um resistor, dado a tensão V aplicada sobre ele. Considere um resistor com R constante de 5k&Omega; .
 
{{collapse top|Solução - Exercicio 05}}
 
{{collapse top|Solução - Exercicio 05}}
<code>
+
<!--
 +
<syntaxhighlight lang="C">
 
ALGORITMO CIRCUITO
 
ALGORITMO CIRCUITO
 
VARIAVEIS
 
VARIAVEIS
Linha 250: Linha 294:
 
   MOSTRAR I
 
   MOSTRAR I
 
FIM
 
FIM
</syntaxhighlight>
+
</syntaxhighlight> -->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</li>
 
</li>
Linha 256: Linha 300:
 
Incremente o exercício 5 para computar também a potência dissipada sobre o resistor.
 
Incremente o exercício 5 para computar também a potência dissipada sobre o resistor.
 
{{collapse top|Solução - Exercicio 06}}
 
{{collapse top|Solução - Exercicio 06}}
<code>
+
<!--
 +
<syntaxhighlight lang="C">
 
ALGORITMO CIRCUITO 2
 
ALGORITMO CIRCUITO 2
 
VARIAVEIS
 
VARIAVEIS
Linha 272: Linha 317:
 
FIM
 
FIM
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
-->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</li>
 
</li>
Linha 277: Linha 323:
 
Implementar um algoritmo na forma de pseudo-código para converter um ângulo em radianos para graus.
 
Implementar um algoritmo na forma de pseudo-código para converter um ângulo em radianos para graus.
 
{{collapse top|Solução - Exercicio 07}}
 
{{collapse top|Solução - Exercicio 07}}
<code>
+
<syntaxhighlight lang="C">
 
ALGORITMO CONVERSOR RAD
 
ALGORITMO CONVERSOR RAD
 
VARIAVEIS
 
VARIAVEIS
Linha 294: Linha 340:
  
  
<center>{{#ev:youtube|yifW9XueSaI#!}} </center>
+
<center>{{#ev:youtube|yifW9XueSaI}} </center>
  
  
Linha 318: Linha 364:
 
Veja este jogo:
 
Veja este jogo:
  
<center>{{#ev:youtube|hLnuMXO95f8#!}} </center>
+
<center>{{#ev:youtube|hLnuMXO95f8}} </center>
  
 
(a)Escrever na forma de etapas numeradas a solução para o problema  das torres de Hanói usando 3 discos.
 
(a)Escrever na forma de etapas numeradas a solução para o problema  das torres de Hanói usando 3 discos.
Linha 378: Linha 424:
 
<li>
 
<li>
 
Implementar um fluxograma para computar a área e o comprimento de uma circunferência dado o RAIO.
 
Implementar um fluxograma para computar a área e o comprimento de uma circunferência dado o RAIO.
{{collapse top|Solução - Exercicio 10}}
+
{{collapse top|Solução - Exercicio 10}}<!--
[[imagem:Exercicio_10_Programacao_1.jpg|450px]]
+
<[[imagem:Exercicio_10_Programacao_1.jpg|450px]]/>
 +
-->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</li>
 
</li>
Linha 389: Linha 436:
 
</li>
 
</li>
 
<li>
 
<li>
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.
+
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.<br />
 
+
Considere:<br />
       Vi=0
+
       Vi=0<br />
       O-->  
+
       O--> <br />
       m=1Kg    F=1N
+
       m=1Kg    F=1N<br />
 
{{collapse top|Solução - Exercicio 12}}
 
{{collapse top|Solução - Exercicio 12}}
 
[[imagem:Exercicio12_Programacao1.jpg|500px]]
 
[[imagem:Exercicio12_Programacao1.jpg|500px]]
 
{{collapse bottom}}
 
{{collapse bottom}}
 +
</li>
 +
<li> Faça um algoritmo para computar o desvio padrão <math>\sigma</math> 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:<br />
 +
 +
<math>\sigma = \sqrt{\frac{1}{N} \sum_{i=1}^N (x_i - \mu)^2}</math> (extraído da wikipedia [https://pt.wikipedia.org/wiki/Desvio_padr%C3%A3o])<br />
 +
 +
<math>\mu  = \frac{1}{N} \sum_{i=1}^N x_i</math> (extraído da wikipedia [https://pt.wikipedia.org/wiki/Desvio_padr%C3%A3o])<br />
 +
 +
SUGESTÃO: computar primeiramente a média <math>\mu</math>
 +
 +
OBS: Notar que o desvio padrão acima é de uma população. O desvio padrão  <math>S</math> de uma amostra usa a divisão por <math>N-1</math>, mas isto é uma discussão para a disciplina da estatística.
 +
<li>
 +
Faça um algoritmo para calcular o coeficiente angular <math>a</math> e o coeficiente linear <math>b</math> de uma reta  <math> y = ax+b </math> DADOS dois pontos P(p1,p2) e Q (q1,q2).
 +
</li>
 +
<li>
 +
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.
 
</li>
 
</li>
 
</ol>
 
</ol>

Edição atual tal como às 19h31min de 28 de julho 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.

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.

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

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;
}

Representando o algoritmo em linguagem Java

import java.util.Scanner;

class ProgramaSomaNumeros {

    public static void main(String[] args) {     
        Scanner teclado = new Scanner(System.in);
        int numA;
        int numB;
        float media;

        numA = teclado.nextInt();
        numB = teclado.nextInt();
        media = (float)(numA + numB)/2;
        System.out.printf("Média igual a %.2f\n", media);
        teclado.close();
    }
}

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
  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
  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
  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
  6. Incremente o exercício 5 para computar também a potência dissipada sobre o resistor.
    Solução - Exercicio 06
  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
  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.