Mudanças entre as edições de "AULA - Representação de Algoritmos. Constantes, Variáveis e Expressões."
(117 revisões intermediárias por 8 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | = | + | = 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. | |
− | Trata-se de uma sequência de passos para execução | ||
− | |||
− | + | EXERCÍCIO: Na forma textual, descrever as etapas 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 um algoritmo. | |
− | |||
− | === Como representar um algoritmo ? === | + | === Como representar um algoritmo? === |
Uma forma é representar na forma textual ordenada: | Uma forma é representar na forma textual ordenada: | ||
− | + | # Comprar a carne | |
− | + | # Colocar carvão na churrasqueira | |
− | + | # Acender o carvão | |
− | + | # Cortar a carne (picanha) | |
− | + | # Espetar a carne | |
− | + | # Salgar a carne | |
− | + | # Colocar a carne na churrasqueira | |
− | + | # Aguardar a carne ficar no ponto desejado | |
− | + | # Bater 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? É 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! | ||
− | + | 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=== | |
− | |||
− | |||
− | |||
− | + | {{collapse top | Exercícios}} | |
− | + | <!--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. | ||
+ | {{collapse bottom}} | ||
− | + | =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: | 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]] | ||
− | + | Ponto forte: | |
− | * | + | *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 à 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=== | ===Símbolos de um Fluxograma=== | ||
+ | |||
[[imagem:TabelaSimbolosFluxograma.jpg|450px]] | [[imagem:TabelaSimbolosFluxograma.jpg|450px]] | ||
− | + | 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? | 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 | + | No exemplo anterior podemos identificar três '''variáveis''' NUM1, NUM2 e MEDIA. |
− | Também podemos identificar uma | + | 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 */ | Ex: NUM1 = 5.5 /* NUM1 é uma variável real */ | ||
− | + | *'''Booleanas''': true ou false | |
Ex: RES = TRUE /* RES é uma variável booleana */ | Ex: RES = TRUE /* RES é uma variável booleana */ | ||
− | + | *'''caracter''': | |
Ex: LETRA = 'A' | Ex: LETRA = 'A' | ||
− | + | *'''alfanumérica''' | |
Ex: FRASE = "ALO MUNDO" | 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=== | ||
− | + | 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: | A instrução do algoritmo: | ||
Linha 118: | Linha 112: | ||
MEDIA = (NUM1 + NUM2) / 2 | MEDIA = (NUM1 + NUM2) / 2 | ||
− | será considerada como uma expressão | + | 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. | |
− | |||
− | Neste curso, para mantermos coerência com a | + | 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. | ||
+ | |||
+ | [[imagem:ExecucaoExpressao.jpg|450px]] | ||
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 156: | Linha 153: | ||
|} | |} | ||
− | O único operador desconhecido aqui é o resto, cujo significado é o resto entre dois números inteiros. Exemplo | + | 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= |
+ | |||
+ | 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]] | ||
+ | |||
+ | =Representando o algoritmo com pseudo-código= | ||
− | Uma possível representação em | + | Uma possível representação em pseudocódigo do fluxograma acima seria: |
− | < | + | <syntaxhighlight lang="C"> |
ALGORITMO MEDIA | ALGORITMO MEDIA | ||
VARIAVEIS | VARIAVEIS | ||
Linha 173: | Linha 178: | ||
LER NUM1 | LER NUM1 | ||
LER NUM2 | LER NUM2 | ||
− | MEDIA | + | 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). 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... | |
− | <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); | |
+ | |||
+ | return 0; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ===Exercícios=== | + | =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> | ||
+ | |||
+ | =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: | + | <!--[[imagem:Exercicio01_Progamacao_1_correto.jpg|300px]]/--> |
{{collapse bottom}} | {{collapse bottom}} | ||
</li> | </li> | ||
<li> | <li> | ||
− | Fazer um algoritmo na forma de fluxograma para calcular o DELTA de uma equação do segundo grau, dados os coeficientes ''a'' e '' | + | 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: | + | <!--[[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}} | ||
− | < | + | <!-- |
+ | <syntaxhighlight lang="C"> | ||
ALGORITMO CONVERSOR | ALGORITMO CONVERSOR | ||
VARIAVEIS | VARIAVEIS | ||
Linha 229: | 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 | + | um resistor, dado a tensão V aplicada sobre ele. Considere um resistor com R constante de 5kΩ . |
{{collapse top|Solução - Exercicio 05}} | {{collapse top|Solução - Exercicio 05}} | ||
− | < | + | <!-- |
+ | <syntaxhighlight lang="C"> | ||
ALGORITMO CIRCUITO | ALGORITMO CIRCUITO | ||
VARIAVEIS | VARIAVEIS | ||
− | V : | + | V : REAL |
− | I : | + | I : REAL |
− | R : | + | CONSTANTES |
+ | R : 5000 | ||
INICIO | INICIO | ||
LER V | LER V | ||
Linha 246: | Linha 294: | ||
MOSTRAR I | MOSTRAR I | ||
FIM | FIM | ||
− | </syntaxhighlight> | + | </syntaxhighlight> --> |
{{collapse bottom}} | {{collapse bottom}} | ||
</li> | </li> | ||
Linha 252: | 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}} | ||
− | < | + | <!-- |
+ | <syntaxhighlight lang="C"> | ||
ALGORITMO CIRCUITO 2 | ALGORITMO CIRCUITO 2 | ||
VARIAVEIS | VARIAVEIS | ||
− | V : | + | V : REAL |
− | I : | + | I : REAL |
− | + | P: REAL | |
− | + | CONSTANTES | |
+ | R : 5000 | ||
INICIO | INICIO | ||
LER V | LER V | ||
Linha 267: | Linha 317: | ||
FIM | FIM | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | --> | ||
{{collapse bottom}} | {{collapse bottom}} | ||
</li> | </li> | ||
<li> | <li> | ||
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}} | ||
+ | <syntaxhighlight lang="C"> | ||
+ | ALGORITMO CONVERSOR RAD | ||
+ | VARIAVEIS | ||
+ | rad : REAL | ||
+ | graus : REAL | ||
+ | INICIO | ||
+ | LER rad | ||
+ | graus = rad * 180/3.1415 | ||
+ | MOSTRAR graus | ||
+ | FIM | ||
+ | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
</li> | </li> | ||
<li> | <li> | ||
Linha 276: | Linha 340: | ||
− | <center>{{#ev:youtube|yifW9XueSaI | + | <center>{{#ev:youtube|yifW9XueSaI}} </center> |
Linha 300: | Linha 364: | ||
Veja este jogo: | Veja este jogo: | ||
− | <center>{{#ev:youtube|hLnuMXO95f8 | + | <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 360: | 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}}<!-- | ||
+ | <[[imagem:Exercicio_10_Programacao_1.jpg|450px]]/> | ||
+ | --> | ||
+ | {{collapse bottom}} | ||
</li> | </li> | ||
<li> | <li> | ||
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. | 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. | ||
+ | {{collapse top|Solução - Exercicio 11}} | ||
+ | [[imagem:Exercicio11_Programacao1.jpg|500px]] | ||
+ | {{collapse bottom}} | ||
</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<br /> | ||
+ | O--> <br /> | ||
+ | m=1Kg F=1N<br /> | ||
+ | {{collapse top|Solução - Exercicio 12}} | ||
+ | [[imagem:Exercicio12_Programacao1.jpg|500px]] | ||
+ | {{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:
- Comprar a carne
- Colocar carvão na churrasqueira
- Acender o carvão
- Cortar a carne (picanha)
- Espetar a carne
- Salgar a carne
- Colocar a carne na churrasqueira
- Aguardar a carne ficar no ponto desejado
- Bater a carne
- 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:
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
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.
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.
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
- Implementar o algoritmo em Artist - Puzzle 1 e construir um fluxograma. Mostrar para o professor.
- Implementar o algoritmo em Artist - Puzzle 2 e construir um fluxograma. Mostrar para o professor.
- Implementar o algoritmo em Artist - Puzzle 3 e construir um fluxograma. Mostrar para o professor.
- 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
-
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 -
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 - 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.
-
Implementar um algoritmo na forma de pseudocódigo para calcular a conversão de CELSIUS para Farenheit (ver [1]).
Solução - Exercicio 04 -
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 -
Incremente o exercício 5 para computar também a potência dissipada sobre o resistor.
Solução - Exercicio 06 -
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
-
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.
-
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
-
Implementar um fluxograma para computar a área e o comprimento de uma circunferência dado o RAIO.
Solução - Exercicio 10 - 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.
-
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
- 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. - 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).
- 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.