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