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
Download

Módulo_05-2011