Aula 6 Módulo 5 3 Ambiente e Linguagem Scilab 3.1 Compiladores, Interpretadores e Sistemas Operacionais 3.2 Scilab 3.2.1 Variáveis e Comandos de Atribuição 3.2.2 Programas Scilab 3.2.3 Comandos input, if e printf UFMG DCC001 2011-2 DCC 001 Programação de Computadores 2° Semestre de 2011 Prof. Osvaldo Carvalho 1 Processadores e Linguagens de Baixo Nível Memória Ciclo de Instrução Lê instrução corrente Interpreta Determina próxima instrução Se não for um desvio, é a que está no endereço consecutivo Esta é a metáfora que um programador de linguagens de baixo nível deve seguir ao construir programas UFMG DCC001 2011-2 2 Inconvenientes da Programação em Baixo Nível Extremamente detalhada e propensa a erros Instruções refletem arquitetura específica de cada computador Programas em baixo nível não são portáteis UFMG DCC001 2011-2 3 Assemblers (Montadores) Nós vimos o processo de montagem manual de uma instrução escrita com mnemônicos Usado por programadores na década de 40; No início dos anos 50 foi desenvolvido o primeiro assembler : programa que traduz programa em linguagem de montagem para programa em linguagem de máquina (executável por um computador) UFMG DCC001 2011-2 4 A Linguagem Fortran Idéia de usar linguagens para facilitar a programação foi adiante Em 1954 a linguagem FORTRAN foi definida por um grupo da IBM Primeiro compilador – programa que traduz programas em linguagem de alto nível para programas em linguagem de máquina – foi escrito em assembler, em um IBM 704 – com 15K de memória UFMG DCC001 2011-2 5 Proposta original FORTRAN UFMG DCC001 2011-2 6 Algumas Linguagens de Programação Existem atualmente milhares de linguagens de programação que usam o mesmo paradigma (estilo) imperativo de Fortran: Cobol (1959), Basic (1964), Pascal (1970), C (1971), C++ (1983), Python (1991), PHP (1995), Java (1995) etc. Linguagens de outros paradigmas: LISP (1958), Scheme (), SML (1978), Haskell (1998) (paradigma funcional), Prolog () (paradigma lógico) etc. UFMG DCC001 2011-2 7 Compiladores, Interpretadores, Sistema Operacional UFMG DCC001 2011-2 8 Matlab Criado no fim dos anos 70 por Cleve Moler Lançado comercialmente em 1984 pela empresa MathWorks Voltado para engenheiros e cientistas Grande facilidade para manipulação de matrizes (MatLab = Matrix Laboratory) Mesmo nome para linguagem e ambiente de desenvolvimento e execução UFMG DCC001 2011-2 9 Scilab Desenvolvido desde 1990 por pesquisadores do INRIA e da École Nationale des Ponts et Chaussées (França) Muito semelhante ao MatLab – e gratuito! http://www.scilab.org É também um interpretador Linguagem e sistema têm o mesmo nome Versão atual: 5.3.1 UFMG DCC001 2011-2 10 Linguagem de alto nível Aprendizado exige dedicação, tempo, paciência (como aprendizado de uma linguagem natural) UFMG DCC001 2011-2 11 Ambiente Scilab Inclui interpretador (de comandos e programas) Inclui editor (SciNotes) Emite mensagens de erros sintáticos e lógicos (que ocorrem durante a exeçução, como divisão por zero) Ambiente requer familiarização para uso eficaz UFMG DCC001 2011-2 12 Tela Inicial Scilab Barra de Menus Atalhos para funções comuns “Prompt” de Comandos UFMG DCC001 2011-2 13 Variáveis e Comandos de Atribuição – 1 “a” é nome de variável , que passa a existir, e armazena valor (10, no caso) Scilab “ecoa” -->a = 10 valor recebido pela a = variável 10. -->b = 2^10 b = Exponenciação 1024. Valor recebido pode ser -->c = a+b expressão aritmética c = (que usa variáveis já 1034. inicializadas) UFMG DCC001 2011-2 14 Variáveis Lugares na memória (nomes de variáveis identificam seus endereços na memória) Programador não precisa saber qual é esse lugar Regras para nomes de variáveis Primeiro caractere deve ser letra ou '%', '_', '#', '!', '$‘ ,‘?‘ Demais podem ser letra, dígito ou '_', '#', '!', '$‘,'?' UFMG DCC001 2011-2 15 Exemplos de Nomes de Variáveis Válidos: a, A, jose, total_de_alunos, #funcionarios Não válidos 1Aluno (primeiro caractere é um dígito) total de alunos (há espaços) José (há caractere acentuado) UFMG DCC001 2011-2 16 Comando de Atribuição Sintaxe: <variável alvo> = <expressão> <variável alvo> passa a existir (se já não existia) Se já existia, valor anteriormente armazenado é perdido Semântica:<expressão> é avaliada e resultado da avaliação é atribuído à <variável alvo> Construção básica da programação em Scilab (e de todas linguagens do paradigma imperativo) UFMG DCC001 2011-2 17 Variáveis e Comandos de Atribuição - 2 -->d = a+x !--error 4 Undefined variable: x -->b = 2*b Expressão pode conter a b = variável alvo 2048. Variáveis usadas na devem estar definidas ‘*’ denota multiplicação UFMG DCC001 2011-2 18 Variáveis e Comandos de Atribuição – 3 -->a = %pi a = 3.1415927 -->b = 2*%pi; Valor pré-definido como a melhor aproximação em ponto flutuante de 64 bits de “;” suprime eco automático -->c = cos(a) + sqrt(b) c = O Scilab oferece um muitas 1.5066283 funções pré-definidas (sqrt = square root). UFMG DCC001 2011-2 19 Help - Funções Elementares do Scilab UFMG DCC001 2011-2 20 Expressões Aritméticas Expressões podem ser complicadas A ordem em que operadores são aplicados não é óbvia: Qual valor o comando x = 2^3*4 atribui a x, ou 23 . 4 = 8.4 = 32 ? 23.4 = 212 = 4096 UFMG DCC001 2011-2 21 Prioridades entre Operadores Prioridade Operação 1a Potenciação 2a Multiplicação, divisão Adição, subtração 3a Associatividade Da direita para a esquerda Da esquerda para a direita Da esquerda para a direita Parênteses podem alterar prioridades UFMG DCC001 2011-2 22 Prioridades e Parênteses -->2^3*4 ans = -->2^(3*4) ans = -->2^3^4 ans = -->2^(3^4) ans = -->(2^3)^4 ans = -->2*3+4 ans = -->2*(3+4) ans = UFMG DCC001 2011-2 32. 4096. 2.418D+24 Recomendação: use parênteses; é mais seguro 2.418D+24 4096. 10. 14. Notação Scilab (e Fortran, e C, e Java, e ...) para 2.418 x 1024 23 Equações de Segundo Grau: O Scilab como Calculadora - 1 Equação Raízes (reais se ∆>0) Calcular as raízes para a = 534.2765, b = 9987.3431 e c = 225.7690 UFMG DCC001 2011-2 24 Equações de Segundo Grau: O Scilab como Calculadora – 2 Inicialização -->a = 534.2765 a = 534.2765 -->b = 9987.3431 b = 9987.3431 -->c = 225.7690 c = 225.769 UFMG DCC001 2011-2 25 Equações de Segundo Grau: O Scilab como Calculadora – 3 Cálculo das Raízes -->delta = b^2 - 4*a*c delta = 99264530. -->r1 = (-b+sqrt(delta))/(2*a) r1 = - 0.0226329 -->r2 = (-b-sqrt(delta))/(2*a) r2 = - 18.670578 UFMG DCC001 2011-2 26 Erros Comuns Escrever delta = b^2 – 4ac, omitindo os operadores de multiplicação Erro de sintaxe, detectado pelo Scilab Escrever r1 = (-b+sqrt(delta))/2*a , o que na verdade calcula b .a r1 2 Erro de semântica, que só pode ser descoberto por testes UFMG DCC001 2011-2 27 Verificando os Resultados “ans” é o nome de uma variável que recebe valores de expressões sem variável alvo -->a*r1^2 + b*r1 + c ans = 3.865D-12 -->a*r2^2 + b*r2 + c ans = - 2.274D-13 UFMG DCC001 2011-2 28 Equações de Segundo Grau: O Scilab como Calculadora – 4 Ganhos com relação a uma calculadora de mão: Variáveis evitam re-digitações Resultados intermediários são memorizados Fórmulas facilitam a composição de expressões Problema Nova equação, redigitação das fórmulas Solução Usar o Scilab como interpretador de programas UFMG DCC001 2011-2 29 Programas Scilab Programas são arquivos UTF-8, contendo somente caracteres sem formatação, com a terminação .sce Um arquivo-programa contém comandos Scilab Um programa é construído usando o editor SciNotes Um programa é executado seguindo o menu Execute/Load into Scilab do editor SciNotes Sua execução ~equivale à digitação na console dos comandos no arquivo UFMG DCC001 2011-2 30 O Editor SciNotes Use sempre o SciNotes para construir programas Nunca use o Word, pois ele introduz informação de formatação UFMG DCC001 2011-2 31 Equações de Segundo Grau: Programa Scilab – Eq2g1.sce UFMG DCC001 2011-2 32 Menu Executar UFMG DCC001 2011-2 33 Equações de Segundo Grau: Programa Scilab – Eq2g_1_0.sce Para uma nova equação, basta substituir no programa os valores dos novos coeficientes As chances de erros de digitação são consideravelmente diminuídas Entretanto, a prática de modificar programas a cada execução não é recomendada O melhor é fazer com que o programa leia os valores dos coeficientes a cada execução; estes valores devem ser fornecidos pelo usuário UFMG DCC001 2011-2 34 Equações de Segundo Grau: Programa Scilab – Eq2g_2_0.sce - 1 // Cálculo das raízes de uma // equação de 2o grau Diálogo com o usuário // Entrada dos coeficientes a = input("Valor de a:"); b = input("Valor de b:"); c = input("Valor de c:"); UFMG DCC001 2011-2 35 Equações de Segundo Grau: Programa Scilab – Eq2g_2_0.sce - 2 // Cálculo das raízes de uma equação // de 2o grau a = input("Digite o valor de a:") b = input("Digite o valor de b:") c = input("Digite o valor de c:") delta = b^2 - 4*a*c r1 = (-b+sqrt(delta))/(2*a) r2 = (-b-sqrt(delta))/(2*a) UFMG DCC001 2011-2 36 Execução do Programa Eq2g2.sce Digite a = 1. Digite b = 2. Digite c = 3. delta - 8. r1 = - 1. r2 = - 1. UFMG DCC001 2011-2 o valor de a:1 o valor de b:2 o valor de c:3 = + 1.4142136i - 1.4142136i 37 O Programa Eq2g3.sce – Especificação O programa só deverá calcular as raízes quando elas forem reais A saída do programa deverá ser uma frase como “As raízes são xxxx e xxxx”, quando as raízes forem reais, e senão, “As raízes são complexas.” UFMG DCC001 2011-2 38 O Comando if if <condição> then <bloco “então”> else <bloco “senão”> end UFMG DCC001 2011-2 39 Cláusula else vazia if <condição> then <bloco “então”> else // Nada end UFMG DCC001 2011-2 if <condição> then <bloco “então”> end 40 Equações de Segundo Grau: Programa Scilab – Eq2g_3.sce - 2 //Cálculo e impressão das raízes delta = b^2 - 4*a*c; if delta > 0 then r1 = (-b+sqrt(delta))/(2*a); r2 = (-b-sqrt(delta))/(2*a); printf("Raízes: %g e %g.",r1,r2); else printf("Raízes complexas.") end UFMG DCC001 2011-2 41 Palavras-chave de um Comando if Início do comando Fim da condição e começo do bloco “então” if delta < 0 then Fim do bloco printf('Raízes complexas!'); “então” e else começo do r1 = (-b + sqrt(delta))/(2*a);bloco “senão” r2 = (-b - sqrt(delta))/(2*a); printf('r1=%g e r2=%g.',r1,r2) end Fim do bloco “senão” e fim do comando UFMG DCC001 2011-2 42 Partes de um comando if <condição> <bloco “então”> if delta < 0 then printf('Raízes complexas!'); else r1 = (-b + sqrt(delta))/(2*a); r2 = (-b - sqrt(delta))/(2*a); printf('r1=%g e r2=%g.',r1,r2) end <bloco “senão”> UFMG DCC001 2011-2 43 Operadores Relacionais > maior que >= maior ou igual a < menor que <= menor ou igual a == igual a <> ou ~= UFMG DCC001 2011-2 diferente de 44 “Indentação” if delta < 0 then printf('Raízes complexas!'); else r1 = (-b + sqrt(delta))/(2*a); r2 = (-b - sqrt(delta))/(2*a); printf('r1=%g e r2=%g.',r1,r2) end if delta < 0 then printf('Raízes complexas!'); else r1 = (-b + sqrt(delta))/(2*a); r2 = (-b - sqrt(delta))/(2*a); printf('r1=%g e r2=%g.',r1,r2) end UFMG DCC001 2011-2 Mais legível Menos legível 45 “Indentação” Para o Scilab, os dois programas são absolutamente equivalentes, mas... Para nós, humanos, a disposição do texto do programa afeta (e muito) a legibilidade (o que se aplica à correção de programas pelo professor e pelos monitores: a indentação é exigida) Blocos “então” e “senão” são mais facilmente identificados com indentação. Os possíveis fluxos de execução ficam mais claros. UFMG DCC001 2011-2 46 Objetivos do Módulo - 1 Conhecer a arquitetura básica de software empregada no desenvolvimento e execução de programas de alto nível Conhecer a sintaxe Scilab para variáveis, expressões, literais e comandos de atribuição Saber procurar por funções numéricas e transformar uma fórmula matemática em uma expressão Scilab UFMG DCC001 2011-2 47 Objetivos do Módulo - 2 Saber utilizar Scilab como uma calculadora Conhecer funcionalidades básicas do ambiente Scilab para criação e execução de programas Saber utilizar comando input para solicitar e obter dados do usuário em tempo de execução de um programa UFMG DCC001 2011-2 48 Objetivos do Módulo - 3 Conhecer expressões lógicas e operadores relacionais Saber prever possíveis computações de um programa com comando if Ser capaz de construir programa que utilize comando if Ser capaz de utilizar comando printf para controlar formato de saída de dados de um programa UFMG DCC001 2011-2 49 Conclusões Scilab é muito mais fácil de usar do que linguagens de máquina Interface de comandos é muito boa para pequenos cálculos e para testar comandos. Para implementar cálculos mais complexos é (muito +) adequado construir programas UFMG DCC001 2011-2 50 Conclusões Na linguagem Scilab encontramos construções importantes como if-then-else, e também detalhes, como a inclusão ou não de um “;” ao fim de um comando, ou os códigos %g ou %f de conversão em um printf, Operações como salvar ou executar um programa também merecem sua atenção. Não tenha medo! Na dúvida, faça experimentos – o Scilab não estraga. UFMG DCC001 2011-2 51