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