Variáveis e estruturas sequenciais (Capítulo 5)

Transcrição

Variáveis e estruturas sequenciais (Capítulo 5)
BC-0005
Bases Computacionais da Ciência
Aula 05 – Lógica de Programação:
Variáveis e Estruturas sequenciais
Prof. Rodrigo Hausen
(baseado nos slides do Prof. Jesús P. Mena-Chalco)
1
Introdução
Programa é uma sequência de ordens (comandos,
instruções) dadas a um computador que, a partir de dados
inseridos, obtêm um resultado que será disponibilizado por
algum dispositivo de saída
Entrada
de Dados
2×5
Processamento
dos comandos de
um programa
Saída de
Dados
10
2
Introdução
Uma instrução é a informação que indica a um computador
uma ação elementar.
Para a construção de um programa é necessário um
conjunto de instruções colocadas em ordem sequencial
lógica: Algoritmo
3
Introdução
Algoritmo = “Receita”
Sequência lógica de passos executados até atingir um
objetivo ou solução de um problema
Toda “receita” deve ter:
ingredientes (dados de entrada)
passos da execução
resultado esperado (dados de saída)
Exemplos de situações onde uma sequência lógica e
ordenada de passos é necessária:
Fazer um bolo
Construir um robô para explorar um local desconhecido
Trocar uma lâmpada
4
Al-Khorezmi: Um Matemático pouco
conhecido
Matemático, astrônomo, astrólogo, geógrafo e autor Persa
(Bagdad, c.850)
Descreveu o sistema numérico atual a um nível
entendível.
al-Khwarizmi, Al-Khawarizmi, Al-Khawaritzmi ou al-Khowarizmi
O primeiro pensador algoritmico.
Selo postal (Rusia, 1983)
Comemorando o aniversário 1200
5
Objetivos da aula
Objetivo da aula:
Como fornecer instruções a um computador, de maneira
que ele possa nos auxiliar a resolver problemas:
Para isto precisamos de dois ingredientes:
Linguagem
Lógica
6
O conceito da instrução
As instruções diferem de acordo com a funcionalidade
da máquina:
7
Prática com Scilab
8
(1) Primeiro problema
Cálculo da área, perímetro e diagonal de um quadrado de
lado x.
x
x
Entrada: tamanho do lado x, onde x > 0
Saída: área, perímetro e diagonal de um quadrado de lado x
9
(1) Primeiro problema
-->x = 2;
-->area = x^2
area =
4.
-->perimetro = 4*x
perimetro =
8.
-->diagonal = sqrt(2)*x
diagonal =
2.8284271
10
(2) Ordem de operações
Na matemática, os parênteses destacam a prioridade
de cálculo: as contas dentro de parênteses são
resolvidas primeiro.
Podem ser usados vários tipos de parênteses, como
- Parênteses ( )
- Colchetes [ ], ou
- Chaves { },
mas estes servem apenas para uma melhor visualização
dos pares e não têm influência na ordem.
11
(2) Ordem de operações
-->4+2 - 6+10
ans =
10.
-->(4+2) - (6+10)
ans =
- 10.
12
(2) Ordem de operações
-->2+3*4-5
Qual seria a resposta?
Apenas pense na resposta, não use o scilab!
13
(2) Ordem de operações
-->2+3*4-5
ans =
9.
14
(2) Ordem de operações
-->2+3*4-5
ans =
9.
-->2+(3*4)-5
ans =
9.
15
(2) Ordem de operações
-->2+3*4-5
ans =
9.
-->2+(3*4)-5
ans =
9.
-->2+3*(4-5)
-->(2+3)*4-5
← -1
← 15
16
(2) Ordem de operações
-->1+2-3*4/2
Qual seria a resposta?
Apenas pense na resposta, não use o scilab!
17
(2) Ordem de operações
-->1+2-3*4/2
ans =
- 3.
-->(1+2)-3*(4/2)
ans =
- 3.
18
(2) Ordem de operações
-->1*(2*(3+4))
ans =
14.
-->1*2*3+4
ans =
10.
19
(2) Ordem de operações
--> 2*3+12/3
ans =
10.
20
(2) Ordem de operações
21
(2) Ordem de operações
--> x = 2*(3+12)/5-5
x =
1.
22
(2) Ordem de operações
-->factorial(3)+4
ans =
10.
23
(3) Série de Fibonacci
24
(3) Série de Fibonacci
https://www.youtube.com/watch?v=SjSHVDfXHQ4
25
(3) Série de Fibonacci
Os números de Fibonacci estão relacionados com um
número bem conhecido chamado razão áurea
i-ésimo número de Fibonacci pode ser aproximado pela
seguinte equação:
26
(3) Série de Fibonacci
-->i=0;
-->termo1 = (1+sqrt(5))/2
termo1 =
1.618034
-->termo2 = (1-sqrt(5))/2
termo2 =
- 0.6180340
-->(termo1^i - termo2^i)/sqrt(5)
ans =
0.
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
0.
27
(3) Série de Fibonacci
Converge para a razão áurea
28
(3) Série de Fibonacci
29
(3) Série de Fibonacci
30
(3) Série de Fibonacci
-->i=1;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
1.
-->i=2;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
1.
-->i=3;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
2.
31
(3) Série de Fibonacci
-->i=4;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
3.
-->i=5;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
5.
-->i=6;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
8.
32
(3) Série de Fibonacci
-->i=7;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
13.
-->i=8;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
21.
-->i=6;
-->floor( (termo1^i - termo2^i)/sqrt(5) )
ans =
34.
33
(4) Função Fibonacci
Ou: Menu Aplicativos → SciNotes
34
(4) Função Fibonacci
35
(4) Função Fibonacci
i = 10
termo1 = (1+sqrt(5))/2
termo2 = (1-sqrt(5))/2;
Fi = floor( (termo1^i - termo2^i)/sqrt(5) )
Em seguida, vá no menu
Executar → … arquivo com eco
ou pressione Ctrl + L
36
(4) Função Fibonacci
37
(4) Função Fibonacci
Altere as instruções para:
function Fi = fibonacci(i)
termo1 = (1+sqrt(5))/2
termo2 = (1-sqrt(5))/2;
Fi = floor( (termo1^i - termo2^i)/sqrt(5) )
endfunction
Em seguida, vá no menu
Executar →Salvar e executar
ou pressione F5.
Grave com o nome de fibonacci.sce
38
(4) Função Fibonacci
saída
entrada
function Fi = fibonacci(i)
passos
termo1 = (1+sqrt(5))/2
termo2 = (1-sqrt(5))/2;
Fi = floor( (termo1^i - termo2^i)/sqrt(5) )
endfunction
Importante! Se seu algoritmo deve ter algum
resultado na saída, pelo menos um dos passos
deve ser a atribuição de um valor à saída (retorno).
39
(4) Função Fibonacci
-->fibonacci(10)
ans =
54.
-->fibonacci(11)
ans =
89.
-->fibonacci(12)
ans =
143.
-->fibonacci(13)
ans =
232.
40
(4) Função Fibonacci
-->fibonacci([0:11])
ans =
0. 1. 1. 2. 3.
5.
8.
13.
21.
34.
54.
89.
41
(4) Função Fibonacci
-->r1 = fibonacci(30:1:33)
r1 =
832039. 1346268. 2178309.
-->r2 = fibonacci(34:1:37)
r2 =
5702886. 9227465. 14930351.
3524577.
24157816.
42
Variáveis
-->r1
r1 =
832039.
-->r2
r2 =
5702886.
1346268.
2178309.
9227465.
14930351.
3524577.
24157816.
-->whos -name r1
Name
Type
r1
constant
Size
1 by 4
Bytes
48
-->whos -name r2
Name
Type
r2
constant
Size
1 by 4
Bytes
48
43
Variáveis
-->c = r1+r2
c =
6534925.
10573733.
-->d = [r1 , r2]
d =
832039.
1346268.
17108660.
2178309.
27682393.
3524577.
5702886.
9227465.
14930351.
24157816.
-->e = [r1 ; r2]
e =
832039.
5702886.
1346268. 2178309.
9227465. 14930351.
3524577.
24157816.
44
(5) Função para desenhar função
cosseno
Crie um novo arquivo (Arquivo → Novo).
function grafcosseno(a, b, passo)
x = a:passo:b;
fx = cos(x);
clf();
plot(x, fx);
xlabel('x');
ylabel('cos(x)');
endfunction
Em seguida, vá no menu
Executar →Salvar e executar
ou pressione F5.
Grave com o nome de grafcosseno.sce
45
(5) Função para desenhar função
cosseno
entrada
function grafcosseno(a, b, passo)
x = a:passo:b;
fx = cos(x);
clf();
plot(x, fx);
xlabel('x');
ylabel('cos(x)');
endfunction
passos da
execução
Esta função faz algo, mas não retorna nada!
46
(5) Função para desenhar função
cosseno
-->grafcosseno(-30, 60, 0.5)
47
(5) Função para desenhar função
cosseno
-->grafcosseno(-30, 60, 1)
48
Atividade 05: Tidia-ae
Função em Scilab
Crie uma função em Scilab cparaf, que
faz a conversão de graus celsius para
fahrenheit.
A função recebe apenas 1 parâmetro c
(número real) que indica a temperatura
em graus celsius.
Ela retorna a temperatura correspondente em graus Fahrenheit.
A atividade deve ser enviada pelo Tidia-ae até às 17h do dia 20/julho.
- Arquivo a ser enviado: cparaf.sci
49
Para casa
●
Ler capítulo 5
●
Fazer a atividade 5 e entregar no Tidia
●
Quem quiser apresentar projeto no final do curso,
deve enviar via Tidia uma proposta (cenário) até as
17h do dia 20/jul (próxima quarta-feira)
→ Seu projeto pode ser um programa interessante
no Scilab
→ Pode ser um programa interessante usando o
Scratch (http://scratch.mit.edu)
→ Pode ser sobre seu projeto de BECN, caso você
use alguma das ferramentas ensinadas neste
curso, mas com foco no uso das ferramentas.
50