Escolar Documentos
Profissional Documentos
Cultura Documentos
Programao de Computadores
Cursos de Engenharia
Daniel A. Furtado
Uberlndia
2014
Este documento foi escrito por Daniel A. Furtado e no pode ser reproduzido ou apropriado, total
ou parcialmente, sem a permisso do autor.
SUMRIO
CAPTULO 1
INTRODUO AO SCILAB........................................................................................................... 4
ESTRUTURAS DE REPETIO.....................................................................................................54
Captulo 1
Introduo ao Scilab
Construo de grficos,
Processamento de sinais,
Clculos estatsticos,
Interpolao e aproximao,
Introduo ao Scilab
Soma
Subtrao
Multiplicao
Diviso
Potenciao (
Exemplos:
-->2*6
ans =
12.
Introduo ao Scilab
-->2^3
ans =
8.
-->3+5-1
ans =
7.
Se necessrio, o comando clc (de clear console) pode ser utilizado para limpar o console.
Operao
Potenciao: ^
Multiplicao e diviso: *, /
Soma e subtrao: +, -
Exemplos:
-->4*3^2
ans =
36.
-->10+4/2
ans =
12.
-->2+3*4-1
ans =
13.
A ordem de avaliao das operaes pode ser definida utilizando-se os parnteses. Por
exemplo, caso seja necessrio resolver a expresso matemtica a seguir, os parnteses se
tornam essenciais.
Expresso matemtica:
Introduo ao Scilab
Outros exemplos:
Expresso Matemtica
Quando uma expresso envolve operadores de mesma prioridade, o Scilab avalia primeiro a
operao mais esquerda. Por exemplo, na expresso 5-3+1, os operadores de soma e
subtrao possuem a mesma prioridade. Assim, a operao 5-3 calculada primeiro e o
resultado (2) ento somado com 1, resultando em 3. Repare que o resultado seria diferente
caso a operao de adio fosse feita antes da subtrao. O mesmo acontece com expresso
10/5*2. A operao 10/5 calculada primeiro, pois est mais esquerda, e o resultado
multiplicado por 2. Esta regra denominada de associatividade esquerda.
Exerccios Propostos
Elabore expresses no SciLab correspondentes s expresses matemticas a seguir. Utilize o
menor nmero de parnteses possvel.
a) 10 + 20
b) 2 45
c)
d)
(resp: 7,2)
+1
(resp: 17)
e)
(resp: 32)
f)
(resp: 0,9)
g)
(resp: 2,2)
h)
+7
i)
(resp: 53,5)
(resp: 1,538...)
j)
Introduo ao Scilab
1.4 Variveis
Em computao, uma varivel corresponde a uma posio na memria do computador que
associada a um nome de identificao. As variveis so comumente utilizadas para armazenar
dados temporariamente, como nmeros, resultados de expresses, cadeia de caracteres ou
valores lgicos. No Scilab, as variveis podem ser definidas e utilizadas diretamente no
console. Veja o exemplo:
-->a = 10
a =
10.
-->b
b =
5.
-->c = 2*b + 1
c =
11.
-->soma = b + c
soma =
16.
Define uma nova varivel de nome soma para armazenar a soma das
-->b = b + 1
b =
6.
-->t = 'teste'
t =
teste
-->d = 30;
expresso 2 + 3.
variveis b e c.
-->clear b
-->clear
Introduo ao Scilab
e do nmero de
Euler, respectivamente:
-->%pi
%pi =
3.1415927
-->%e
%e =
2.7182818
Exemplos de nomes invlidos para variveis: &a, 5_a, +2, rea, nm, var@, rea total.
Exerccios Propostos
1. Defina uma varivel de nome x para armazenar o valor 8.
2. Acesse o contedo da varivel x.
3. Defina uma varivel de nome y como sendo igual a 2x + 1.
4. Atualize a varivel y acrescentando 2 ao seu contedo.
5. Acesse o contedo da varivel y.
6. Defina trs variveis a, b e c para armazenar valores de sua escolha.
7. Defina uma varivel de nome delta para armazenar o resultado de
8. Defina uma varivel z como sendo igual ao produto de x por y. Utilize o ponto-evrgula no final da expresso e verifique a diferena entre utiliz-lo ou no.
Introduo ao Scilab
10
-->y = sqrt(49)
y =
7.
Outros exemplos so as funes trigonomtricas sin e cos que calculam o seno e o cosseno,
respectivamente, de um ngulo em radianos.
Exemplos:
-->cos(%pi)
ans =
- 1.
-->sin(%pi/2)
ans =
1.
Descrio
Exemplos
abs
round
Introduo ao Scilab
11
floor
=
7.
-->floor(12)
ans =
12.
-->floor(-4.9)
ans =
-5.
ceil
=
8.
-->ceil(12)
ans =
12.
min
-->cos(%pi)
ans =
-1.
-->tan(45 * %pi/180)
ans =
1.
sind, cosd,
tand
asin, acos,
atan
log, log10,
log2
modulo
Introduo ao Scilab
12
Exerccios Propostos
1. Elabore expresses no Scilab que sejam equivalentes s expresses matemticas a seguir:
a)
Resp.: 16
b)
Resp.: 2.4771213
c)
Resp.: 9
d)
Resp.: 3.2188758
e)
Resp.: 0.9396926
f)
Resp.: 0.8660254
g)
Resp.: 6.2831853
h)
Resp.: 1
i)
Resp.: 0.7071068
j)
Resp.: 1
k)
Resp.: 145
l)
Resp.: 166.5
m)
Resp.: -484.99032
n) |
o)
p)
Resp.: 120.52786
Resp.: 14.202356
( )
Resp.: 27.897856
Resp.: 4
Resp.: 1
4. Fornea a expresso para arredondar o nmero 9.75 para o inteiro mais prximo.
5. Fornea a expresso para arredondar o nmero 9.75 para 9.
Introduo ao Scilab
13
Captulo 2
Introduo a Algoritmos
verificado
por
Donald
Knuth,
um
algoritmo
deve
ter
cinco
propriedades/capacidades:
1) Finitude. Um algoritmo deve sempre terminar aps um nmero finito de instrues.
2) Clareza. Cada passo do algoritmo deve ser especificado com clareza, preciso e sem
ambiguidade.
3) Entrada. Um algoritmo geralmente possui um ou mais elementos de entrada, que
devem ser fornecidos para a execuo adequada das instrues.
4) Sada. Um algoritmo produz um ou mais elementos de sada (ou resultado).
Introduo a Algoritmos
14
5) Eficcia. Um algoritmo deve ser eficaz. Todas as suas instrues devem ser passveis
de execuo em tempo finito.
Um algoritmo pode ser especificado de trs formas principais, que so: (1) descrio
narrativa, (2) fluxograma e (3) linguagem algortmica (pseudocdigo). Cada uma dessas
formas apresenta suas prprias vantagens e desvantagens e a escolha adequada pode
depender do tipo e da complexidade do problema a ser resolvido. Nesta captulo,
apresentamos brevemente as formas (1) e (2).
15
Desvantagens
Impreciso,
Possvel ambiguidade,
Extenso.
Smbolo
Significado
Oval (incio/fim)
Retngulo (processo)
Indica um
algoritmo.
Losango (deciso)
Paralelograma
(entrada/sada)
Crculo (conector)
Seta
processo
ou
operao
do
Introduo a Algoritmos
16
Incio
Entrada: manteiga, 2 fatias de po, 1
fatia de queijo e 1 de presunto
Fim
O algoritmo do Exemplo 2, j apresentado em descrio narrativa, pode ser especificado em
fluxograma da seguinte forma:
Incio
Entrada: comprimento, largura e
profundidade da piscina
Sada: VolumeL
Fim
Introduo a Algoritmos
17
A seta para a esquerda () empregada para indicar que, a partir desse ponto no algoritmo,
o termo VolumeM3 representar o resultado da expresso comprimento * largura * profundidade.
Esse termo utilizado no passo seguinte, onde o volume em litros calculado a partir do
volume em metros cbicos:
VolumeL VolumeM3 * 1000
ser tomada com base na anlise de uma condio. No exemplo citado, o losango indica que a
condio NotaFinal 70? deve ser avaliada. Caso ela seja verdadeira, ento a execuo do
algoritmo deve seguir pelo ramo indicado pela seta SIM. Caso contrrio (condio falsa),
ento a execuo deve seguir pelo ramo indicado pela seta NO.
Introduo a Algoritmos
18
Incio
Entrada: nota1, nota2, nota3
NotaFinal 70?
SIM
Mostrar Aprovado
NO
Mostrar Reprovado
Fim
Exemplo 4. Desenvolver um algoritmo, em fluxograma, para calcular e apresentar as razes
de uma equao do segundo grau (ax2 + bx + c = 0). O algoritmo deve receber os trs
coeficientes da equao, a, b e c, e apresentar mensagens adequadas de acordo com as
possveis razes.
Incio
LEIA a, b, c
D b2 4 a c
D > 0?
SIM
x1 (-b + ) / (2 a)
NO
D = 0?
SIM
x (-b) / (2 a)
x2 (-b - ) / (2 a)
Mostrar mensagem
Razes iguais:, x
Mostrar mensagem
Razes distintas:, x1, x2
NO
Mostrar mensagem
No h razes reais
Fim
Introduo a Algoritmos
19
Captulo 3
Entrada e Sada utilizando o SciNotes
20
input realiza uma operao de entrada de dados. Possibilita que um dado seja
solicitado ao usurio do programa (para que seja processado).
disp realiza uma operao de sada de dados. Permite exibir mensagens de texto na
tela ou valores de variveis (geralmente os resultados obtidos).
21
Tal expresso responsvel pela operao de entrada de dados que solicita a medida do lado
do quadrado ao usurio. Essa operao envolve trs aes bsicas:
1. Exibe a mensagem Informe a medida do lado de um quadrado na tela;
2. Aguarda at que o usurio informe um dado e pressione a tecla ENTER;
3. Armazena o dado informado pelo usurio na varivel lado.
Quando o usurio pressionar ENTER, o computador prosseguir com a execuo do
programa. A segunda linha responsvel pelo clculo da rea em si, cujo resultado
armazenado na varivel area. As duas ltimas linhas foram utilizadas para a apresentao
do resultado obtido (operao de sada). Na terceira linha, a funo disp tem o papel de
exibir a mensagem A rea do quadrado :. Em seguida, ela utilizada para apresentar o
contedo da varivel area.
A diferena que, com a funo printf, podemos apresentar a mensagem de texto juntamente
com o valor da varivel, de maneira formatada e utilizando um nico comando. O termo %f
foi utilizado para que o valor da varivel area pudesse ser adicionado mensagem.
Poderamos apresentar ao usurio uma mensagem de resultado um pouco mais elaborada,
incluindo, por exemplo, a medida do lado do quadrado para o qual a rea foi calculada.
Execute o programa a seguir e observe a alterao.
Exemplo 1c.
lado = input("Informe a medida do lado de um quadrado: ");
area = lado * lado;
printf("A rea do quadrado de lado %f %f", lado, area);
Observe que, neste caso, foi necessrio colocar o termo %f em dois locais da mensagem,
exatamente onde se deseja inserir os valores das variveis. Entretanto, as variveis em si
devem ser especificadas aps o fechamento das aspas, na ordem adequada. Para cada %f
22
%.2f o nmero ser apresentado com duas casas decimais (ao invs de seis casas,
quantidade padro quando se utilizada apenas %f).
Exemplo 2a. Programa que solicita ao usurio as medidas de uma sala retangular, em
metros, e calcula e apresenta a sua rea, em metros quadrados.
l = input("Informe a largura da sala, em metros: ");
c = input("Informe o comprimento da sala, em metros: ");
a = l * c;
printf("A rea da sala de largura %.2f e comprimento %.2f %.2f m2", l, c, a);
3.3 Comentrios
Comentrios so utilizados para documentar o programa, pois eles no so avaliados pelo
computador durante a sua execuo. No Scilab, todo o texto que colocado frente de //
tido como um comentrio de linha. O programa a seguir desempenha a mesma funo
daquele do Exemplo 2a, mas com a diferena de possuir alguns comentrios que o descreve.
Exemplo 2b.
// Programa que solicita ao usurio as medidas de uma sala retangular,
// em metros, e calcula e apresenta a sua rea, em metros quadrados.
l = input("Informe a largura da sala, em metros: ");
c = input("Informe o comprimento da sala, em metros: ");
a = l * c; // faz o clculo da rea
printf("A rea da sala de largura %.2f e comprimento %.2f %.2f m2", l, c, a);
23
Exerccios Propostos
Resolva os exerccios a seguir utilizando o editor SciNotes do Scilab.
1. Faa um programa que receba do usurio uma medida de temperatura, em Fahrenheit, e
converta para graus Celsius. Utilize a frmula
24
Captulo 4
Estrutura Condicional if-then-else
A estrutura condicional if-then-else (if = se; then = ento; else = seno) utilizada quando se
deseja executar um bloco de operaes ou outro, dependendo de uma condio ser
verdadeira ou falsa, respectivamente. A sua forma geral no Scilab ilustrada a seguir:
if (cond) then
Comando
Comando
Comando
else
Comando
Comando
Comando
end
C1;
C2;
Cn;
D1;
D2;
Dm;
Os termos C1, C2, ..., Cn e D1, D2, ..., Dm no cdigo acima representam comandos quaisquer,
como uma operao de soma ou um clculo de raiz quadrada e o termo cond representa uma
condio lgica qualquer, como raio > 0. A estrutura if-then-else indica que os comandos C1,
C2, ..., Cn devem ser executados pelo computador apenas quando a condio cond for
verdadeira e que os comandos D1, D2, ..., Dm devem ser executados apenas quando a
condio cond for falsa.
E outras palavras, ao executar um programa contendo o cdigo anterior, o computador ir
verificar se a condio cond verdadeira ou falsa. Se cond for verdadeira ento (then) o
computador partir para a execuo do primeiro bloco de comandos (C1, C2, ..., Cn os
comandos que antecedem a palavra else). Mas se cond for falsa, o computador executar apenas o
segundo bloco de comandos (D1, D2, ..., Dm os comandos que esto entre a palavra else
25
Exemplo 1. Deseja-se elaborar um programa que receba do usurio a medida do lado de uma
sala quadrada e calcule e apresente a sua rea. Entretanto, o programa deve calcular a rea da
sala apenas quando o valor informado pelo usurio for maior do que zero, pois no h sala com lado
negativo ou nulo. Caso o usurio informe um valor invlido (negativo ou zero), o programa
deve apenas apresentar uma mensagem notificando o fato.
lado = input("Informe a medida do lado da sala: ");
if (lado > 0) then
area = lado * lado;
printf("A area da sala %f", area);
else
printf("O valor informado invlido! ");
end
Execute o programa anterior pelo menos duas vezes. Na primeira execuo, informe um
valor positivo e ver a rea calculada. Da segunda vez, informe um valor negativo (ou zero),
e receber apenas uma mensagem notificando a medida incorreta.
Ao ser executado, o programa inicialmente solicita a medida ao usurio (linha 1). Assim que
o usurio digita o valor e pressiona a tecla ENTER, o computador armazena esse dado na
varivel lado. Na sequncia, o computador testar a condio lado > 0. Se o usurio digitou
um valor positivo, tal condio ser verdadeira. Assim, os comandos:
area = lado * lado;
(faz o clculo da rea e armazena na var. area)
printf("A area do quadrado %f", area);
(mostra na tela o resultado)
sero executados e o programa ser encerrado. Por outro lado, se o usurio informar um
valor negativo, ento os dois comandos do bloco then NO sero executados, mas sim o
nico comando do bloco else-end (pois a condio lado > 0 passa a ser falsa).
Exemplo 2. Programa que recebe do usurio dois nmeros quaisquer e em seguida verifica
se os nmeros fornecidos so iguais ou no.
n1 = input("Informe o primeiro nmero: ");
n2 = input("Informe o segundo nmero: ");
if (n1 == n2) then
printf("Os nmeros fornecidos so iguais");
else
printf("Os nmeros fornecidos so diferentes");
end
Observe que foi utilizado o operador relacional de igualdade do Scilab (==) para verificar
se os valores das variveis n1 e n2 so iguais. Diferente do operador de atribuio (que tem
um nico =), dois iguais so utilizados para fins de comparao.
26
27
estrutura if verifica se a condio delta > 0 verdadeira. Caso seja, ento as duas razes so
calculadas e o resultado apresentado. Caso contrrio (else), tem-se ainda duas
possibilidades (delta = 0 ou delta < 0) e para trata-las utilizou-se o segundo if.
importante observar que as condies tratadas no programa anterior poderiam ter sido
verificadas em uma ordem diferente, desde que a sequncia lgica das operaes se
mantivesse correta. O cdigo a seguir ilustra outra possibilidade:
a = input("Informe o coeficiente a da equao: ");
b = input("Informe o coeficiente b da equao: ");
c = input("Informe o coeficiente c da equao: ");
delta = b^2 4*a*c;
if (delta < 0) then
// Neste caso, no h razes reais
printf("No existem razes reais!");
else
if (delta == 0) then
// Neste caso, h apenas uma raiz distinta
x = (-b)/(2*a);
printf("Duas razes iguais: %.2f", x);
else
// Neste caso, temos duas razes distintas
x1 = (-b + sqrt(delta))/(2*a);
x2 = (-b - sqrt(delta))/(2*a);
printf("As razes da equao so %.2f e %.2f", x1, x2);
end
end
Exemplo 4. Deseja-se elaborar um programa que receba do usurio a altura e o sexo de uma
pessoa e calcule e apresente o seu peso ideal. As seguintes frmulas devem ser utilizadas
(onde h a altura em metros):
Para indicar o sexo masculino, o usurio dever informar o nmero 1. Para indicar o
feminino, o usurio dever informar o nmero 2. Caso um valor diferente de 1 e 2 seja
fornecido, ento o programa dever apresentar uma mensagem notificando o dado invlido.
O programa tambm dever verificar se a altura informada pelo usurio vlida (maior do
que zero).
28
Soluo:
clc;
h = input("Informe a altura da pessoa, em metros: ");
if (h > 0) then
sexo = input("Informe 1 para masculino ou 2 para feminino: ");
if (sexo == 1) then
pesoIdealM = (72.7 * h) 58;
printf("O peso ideal : %.2f", pesoIdealM);
else
if (sexo == 2) then
pesoIdealF = (62.1 * h) 44.7;
printf("O peso ideal : %.2f", pesoIdealF);
else
printf("Valor invlido para o sexo!");
end
end
else
printf("Altura invlida!");
end
Significado
==
Igual a
~=
Diferente de
>
Maior que
>=
Maior ou igual a
<
Menor que
<=
Menor ou igual a
29
Operador Lgico
Significado
Exemplo
Significado
&
e lgico
ou lgico
if (a == 0 | b == 0) ...
Negao
A&B
A|B
~A
F
V
F
Exerccios Propostos
1) Faa um programa para calcular a situao final de um aluno com base nas suas trs
notas semestrais. O programa deve solicitar as trs notas, soma-las e informar se o aluno
est aprovado (quando a soma das notas maior ou igual a 70) ou reprovado (soma das
inferior a 70).
2) Faa um programa que receba do usurio dois nmeros e apresente o menor deles.
3) Faa um programa que receba do usurio dois nmeros e em seguida apresente esses
nmeros na ordem crescente.
4) Analise os programas a seguir (sem execut-los no computador) e informe qual seria a
sua sada caso fossem executados.
a)
a = 2; b = 3; c = 1;
if (a > b) then
printf("%d",a);
else
if (b > c) then
printf("%d",b);
else
printf("%d",c);
end
end
b)
30
c)
d)
a = 1; b = 2; c = 3;
if (a < b & b > c) then
printf("%d",a);
printf("%d",b);
else
if (b < c) then
d = b + c;
printf("%d",d);
else
printf("%d",c);
end
printf("%d",a);
end
e = a + b + c;
printf("%d",e);
31
Captulo 5
Operaes com Vetores
No Scilab, os vetores (arrays) so utilizados para armazenar uma lista de elementos, como
nmeros ou caracteres, os quais podem ser acessados por meio de um ndice. Um vetor pode
ser do tipo linha ou do tipo coluna e pode ser definido por meio dos caracteres [ e ]. No caso
de um vetor linha, os elementos devem ser separados por vrgula ou espao. J um vetor
coluna deve ter os elementos separados por ponto-e-vrgula.
Exemplos:
-->a = [1 2 3 4]
(define um vetor linha de nome a contendo 4 elementos)
a =
1. 2. 3. 4.
___________________________________________________________________________________
-->b = [10, 20, 30]
(define um vetor linha de nome b contendo 3 elementos)
b =
10. 20. 30.
___________________________________________________________________________________
-->v1 = [5; 8; 1]
v1 =
5.
8.
1.
(define um vetor)
a =
7. 4. 12. 9.
32
-->a(3)
(acessa o terceiro elemento do vetor)
ans =
12.
___________________________________________________________________________________
-->a(1)
ans =
7.
33
Exemplos:
-->a = [0:2:10]
(cria um vetor a partir de zero, de dois em dois, at 10)
a =
0. 2. 4. 6. 8. 10.
___________________________________________________________________________________
-->b = [1:5:28]
(a partir de um, de cinco em cinco, limitado por 28)
b =
1. 6. 11. 16. 21. 26.
___________________________________________________________________________________
-->c = [-1:0.2:1]
(a partir de -1, com espaamento de 0.2, at 1)
c =
- 1. -0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8 1.
___________________________________________________________________________________
-->d = [5:-1:1]
b =
5. 4. 3. 2. 1.
Entretanto, o incremento pode ser omitido quando se deseja o valor 1. Veja os exemplos:
-->a = [2:6]
(a partir de 2, de um em um, at 6)
a =
2. 3. 4. 5. 6.
___________________________________________________________________________________
-->b = [-2:2]
b =
-2. -1. 0. 1. 2.
34
-->b = 2*a
(cada elemento do vetor b ter o dobro do respectivo elemento de a)
b =
2. 4. 6. 8
-->c = a + b
(os respectivos elementos so somados para a composio do vetor c)
c =
3. 6. 9. 12.
-->d = 2*a + 1
(cada elemento do vetor a multiplicado por dois e somado com 1)
d =
3. 5. 7. 9.
__________________________________________________________________________________
-->x = [-3:3]
x =
-3. -2. -1. 0. 1. 2. 3.
-->y = x^2
y =
9. 4. 1. 0. 1. 4. 9.
___________________________________________________________________________________
-->x = [-%pi/2, 0, %pi/2]
x =
-1.57 0 1.57
-->y = sin(x)
y =
-1
0
35
Exerccios Propostos
1.
2.
Aplique a funo
um vetor y2.
4.
5.
Aplique a funo
6.
7.
Defina um vetor de nome v2 contendo a sequncia de nmeros 1, 4, 7, 10, 13, ..., 97.
Defina um vetor de nome v3 contendo a sequncia de nmeros 90, 84, 78, 72, ..., 12.
Utilize os recursos adequados.
9.
espaados de 0.15.
36
Captulo 6
Construo de Grficos
O Scilab disponibiliza uma srie de recursos que possibilitam a construo de diversos tipos
de grficos, incluindo grficos de funes matemticas, grficos de barras e grficos do tipo
pizza. Este captulo faz uma breve introduo a alguns desses recursos.
para os
comandos do Exemplo 1.
p1
p2
p3
p4
p5
p6
p7
-3
-2
-1
Ao executar tal sequncia de comandos, no console do Scilab ou no SciNotes, ser criada uma
janela grfica, conforme ilustrado na Figura 6.1. A funo plot pressupe que os elementos
das respectivas posies dos dois vetores constituem os pares ordenados, os quais so
interligados por uma linha.
Antes de executar novamente o comando plot, pode ser necessrio limpar a janela grfica
para evitar que os grficos se sobreponham. Isto pode ser feito com o comando clf (de clear
figure). A janela grfica pode ser fechada manualmente ou pelo comando close.
Construo de Grficos
37
Uma maneira mais prtica de construir o grfico de uma funo utilizar os recursos do
Scilab para definio e manipulao de vetores, ao invs de definir explicitamente todos os
pontos em x e y. O grfico geralmente criado em trs passos:
1. Cria-se um vetor para armazenar os pontos de interesse em x. Isto pode ser feito
utilizando o operador : ou a funo linspace;
2. Aplica-se a funo matemtica de interesse sobre o vetor x, o que permitir a
obteno do vetor y;
3. Utiliza-se a funo plot em conjunto com os vetores x e y criados anteriormente.
Por exemplo, o grfico anterior poderia ter sido criado pela sequncia de comandos:
x = [-3:3];
y = x^2;
plot(x, y);
Construo de Grficos
38
Smbolo
Significado
Asterisco.
Smbolo +
Marcador o
Linha
Cor
Crculo (Letra o)
Losango diamond
Quadrado square
Linha slida
--
Linha tracejada
Linha pontilhada
Exemplo
Descrio
x = [-5:0.5:5];
y = x^2;
plot(x, y, '*');
azul (padro).
x = [-5:0.5:5];
y = x^2;
plot(x, y, '*-')
pontos.
Construo de Grficos
Resultado
39
Exemplos
Descrio
x = [-5:0.5:5];
y = x^2;
plot(x, y, '--ro');
o.
x = [-%pi:0.2:%pi];
y1 = sin(x);
plot(x,y1,'-*g');
y2 = cos(x);
plot(x,y2,'-dr');
Resultado
(verde) e cosseno
(vermelho). Valores de x no
intervalo [
],
espaados de 0.2.
x=linspace(1,10,50);
y = log2(x);
plot(x,y,'-sk');
Grfico da funo
para 50
pontos igualmente
espaados no intervalo
[1,10]. Marcador
quadrado e cor preta.
Construo de Grficos
40
Exemplo:
clf
x = [0:0.1:4*%pi];
y1 = sin(x);
y2 = cos(x);
plot(x,y1,'-*b');
plot(x,y2,'-dr');
xtitle('Funes seno e cosseno');
xlabel('Eixo X');
ylabel('Eixo Y');
legend('Seno', 'Cosseno');
//
//
//
//
//
insere o ttulo
insere o rtulo do eixo
insere o rtulo do eixo
insere uma legenda para
na respectiva ordem, as
horizontal x
vertical y
identificar,
duas curvas
Resultado:
OBS: possvel desenhar o grfico de diversas funes utilizando o comando plot uma nica
vez. Para o exemplo anterior, poderamos ter utilizado:
plot(x,y1,'-*b', x,y2,'-dr');
Construo de Grficos
41
Resultado:
Algumas das propriedades dos eixos e de outros elementos do grfico podem ser
configuradas visualmente. Bastar acessar a opo Editar Propriedades dos eixos da
janela do grfico. A janela de configurao exibida pelo Scilab apresentada na Figura 6.2.
Construo de Grficos
42
p posio da matriz a ser ativada, contada da esquerda para a direita, linha a linha.
Todos os comandos voltados para a insero e configurao de grficos tero efeito
sobre o grfico dessa posio.
No exemplo a seguir, seis grficos so colocados em uma mesma janela grfica. Eles so
organizados em uma matriz de duas linhas e trs colunas. Repare que a funo subplot
utilizada diversas vezes para ativar cada uma das posies de plotagem. O nmero de linhas e
o nmero de colunas permanecem inalterados (pois no desejamos alterar essa disposio),
mas a posio ativa de plotagem atualizada para cada novo grfico.
Exemplo:
// vetor x
x = [-3:0.1:3];
// Grfico 1
y1 = x^2;
subplot(2,3,1); // A janela ser div. em 2 linhas e 3 colunas. A 1 pos. ativada
plot(x,y1,'*-');
xtitle('Grfico 1: funo quadrtica');
// Grfico 2
y2 = x^3;
subplot(2,3,2); // Ativa a segunda posio de plotagem
plot(x,y2,'+-');
xtitle('Grfico 2: funo cbica');
// Grfico 3
y3 = sin(x);
subplot(2,3,3);
Construo de Grficos
43
plot(x,y3,'o-');
xtitle('Grfico 3: funo seno');
// Grfico 4
y4 = -x^2;
subplot(2,3,4);
plot(x,y4,'d-');
xtitle('Grfico 4: funo quadrtica 2');
// Grfico 5
y5 = -x^3;
subplot(2,3,5);
plot(x,y5,'p-');
xtitle('Grfico 5: funo cbica 2');
// Grfico 6
y6 = cos(x);
subplot(2,3,6);
plot(x,y6,'x-');
xtitle('Grfico 6: funo cosseno');
Resultado:
Figura 6.3 - Inserindo diversos grficos na mesma janela com a funo subplot.
Construo de Grficos
44
Grfico Resultante
clf;
x = [1,2,3,4];
bar(x, 0.5);
Construo de Grficos
45
clf;
x = [1,2,3,2];
bar(x, 0.9);
clf;
x = [1,2,3,4];
barh(x, 0.5);
clf;
pie([18,4,3],[0,1,0],['Aprovados',
'Rep.
por
falta',
'Rep.
por
nota']);
Construo de Grficos
46
Captulo 7
Operaes com Matrizes
Matrizes podem ser definidas no Scilab de maneira semelhante aos vetores. Os elementos
devem ser especificados entre colchetes. As linhas podem ser separadas por ponto-e-vrgula
ou ENTER e os elementos de uma mesma linha podem ser separados por vrgula ou espao.
Exemplos:
[
6.
4.
O operador : pode ser utilizado para especificar uma sequncia de elementos dentro de
uma mesma linha. Por exemplo, a matriz:
[
47
-->M(1,3)
ans =
5.
-->x = M(2,1)
x =
7.
-->M(1,2) = 10
M =
4.
7.
10.
3.
5.
8.
-->M(2,:)
ans =
4.
5.
-->M(2,:) = [7,8,9]
M =
1.
2.
3.
7.
8.
9.
48
-->M(:,3)
ans =
3.
6.
-->A = [1 9 6 0; 6 7 8 9; 5 1 6 8; 4 0 9 3]
A =
1.
9.
6.
0.
6.
7.
8.
9.
5.
1.
6.
8.
4.
0.
9.
3.
-->A(1:3,2:4)
ans =
9.
6.
7.
8.
1.
6.
49
-->A = [[5,5,5]; A]
A =
5.
5.
5.
3.
2.
1.
6.
5.
4.
1.
2.
3.
-->B = [[0;1], B]
B =
0.
1.
2.
1.
3.
4.
-->C(2,:) = []
C =
1.
2.
5.
6.
-->C(:,1) = []
C =
2.
6.
Observe que quando uma linha ou coluna excluda, as demais so reorganizadas para
ocupar o seu lugar.
50
-->B = A
B =
1.
3.
-->C = A + B
C =
2.
4.
6.
8.
-->D = A B
D =
0.
0.
0.
0.
-->E = A * B
E =
7.
10.
15.
22.
-->F = 2 * A + 1
F =
3.
5.
7.
9.
51
Exemplos:
-->A = [3,7,1;8,5,0]
A =
3.
7.
1.
8.
5.
0.
-->length(A)
ans =
6.
-->size(A)
ans =
2.
3.
-->[L,C]=size(A)
C =
3.
L =
2.
-->A = [A;[2,1,3]]
A =
3.
7.
1.
8.
5.
0.
2.
1.
3.
-->det(A)
ans =
- 125.
(calcula o determinante de A)
-->A'
ans =
3.
7.
1.
-->inv(A)
ans =
-0.12
0.192
0.016
8.
5.
0.
2.
1.
3.
(calcula a matriz inversa de A)
0.16
-0.056
-0.088
-->eye(3,3)
ans =
1.
0.
0.
1.
0.
0.
-->ones(3,3)
ans =
1.
1.
1.
1.
1.
1.
0.04
-0.064
0.328
(matriz identidade 3 x 3)
0.
0.
1.
(matriz 3 x 3 contendo apenas o valor 1)
1.
1.
1.
52
-->zeros(3,3)
ans =
0.
0.
0.
0.
0.
0.
-->rand(3,3)
ans =
0.2113249
0.7560439
0.0002211
(matriz nula 3 x 3)
0.
0.
0.
(matriz 3 x 3 de nmeros aleatrios)
0.3303271
0.6653811
0.6283918
0.8497452
0.6857310
0.8782165
) ( )
Assim, para encontrar o vetor soluo de um sistema linear, pode-se multiplicar a inversa da
matriz dos coeficientes do sistema (caso ela exista) pelo vetor coluna de seus termos
independentes. Por exemplo, o sistema linear anterior pode ser resolvido pelo programa:
A=[2,3;1,-1];
b=[19;-3];
s=inv(A)*b;
printf("x=%.1f,
Entretanto, o sistema ser possvel e determinado apenas quando a matriz dos coeficientes
possuir inversa, o que acontece quando o seu determinante diferente de zero. Assim,
convm verificar o determinante da matriz dos coeficientes antes de utilizar a funo inv.
Isto feito no exemplo a seguir.
Operaes com Matrizes
53
Exemplo 1. Faa um programa que receba do usurio uma matriz 3x3 correspondente aos
coeficientes de um sistema linear e um vetor coluna correspondente aos termos
independentes. O programa deve encontrar e apresentar a soluo do respectivo sistema,
caso ele seja possvel e determinado. Caso contrrio, uma mensagem adequada deve ser
apresentada.
A=input('Informe a matriz 3x3 dos coeficientes do sistema: ');
b=input('Informe o vetor coluna dos termos independentes: ');
if (det(A) ~= 0) then
s=inv(A)*b;
printf("x=%.1f, y=%.1f, z=%.1f", s(1), s(2), s(3));
else
printf('Sistema impossvel ou indeterminado');
end
54
Captulo 8
Estruturas de Repetio
Antes dos comandos serem executados pela primeira vez, a condio verificada. Caso ela
seja falsa, ento o bloco de comandos no ser executado nenhuma vez. Caso seja
verdadeira, ento o bloco de comandos ser executado enquanto a condio permanecer
verdadeira. Dessa forma, aps a execuo do ltimo comando dentro do bloco (comando n, no
exemplo acima), a condio novamente verificada, o que determina se os comandos
devero ser executados novamente ou no. O diagrama a seguir ilustra a lgica de
funcionamento da estrutura while.
Estruturas de Repetio
55
Estrutura while
Exerccios Resolvidos
Exemplo 1. Faa um programa que receba o valor do raio de um crculo e calcule a sua rea.
Caso o usurio informe um valor menor ou igual a 0 para o raio, o programa dever solicitar
repetidamente outro valor, at que o usurio informe um nmero positivo.
r = input('Informe o valor do raio do crculo: ');
while (r <= 0)
printf('Valor invlido!');
r = input('Informe um valor positivo para o raio: ');
end
area = %pi * r^2;
printf('A rea do crculo de raio %d %d', r, area);
Exemplo 3. Utilizando a estrutura while, faa um programa para ler nmeros inteiros do
teclado at que o nmero 0 seja lido. Ao trmino da leitura, o programa dever apresentar a
soma de todos os nmeros informados.
total = 0;
x = input('Digite o primeiro nmero: ');
while (x ~= 0)
total = total + x;
x = input('Digite o prximo nmero (ou 0 para encerrar): ');
end
printf('A soma dos nmeros informados : %d', total);
Estruturas de Repetio
56
Exemplo 4. Utilizando a estrutura while, faa um programa para ler nmeros inteiros do
teclado at que o nmero 0 seja lido. Ao trmino, o programa dever apresentar o maior
nmero lido (desconsiderando o valor 0).
x = input('Digite o primeiro nmero: ');
maior = x;
while (x ~= 0)
if (x > maior) then
maior = x
end
x = input('Digite o prximo nmero (ou 0 para encerrar): ');
end
printf('O maior nmero lido : %d', maior);
Exemplo 5. Utilizando a estrutura while, faa um programa para calcular o somatrio da srie
1 + 2 + 3 + ... + N. O valor N deve ser solicitado ao usurio.
N = input('Informe o valor de N: ');
i = 1;
soma = 0;
while (i <= N)
soma = soma + i;
i = i + 1;
end
printf('O somatrio %d', soma);
Estruturas de Repetio
57
op = 0;
while (op ~= 3)
clc;
printf('
Menu de Opes \n');
printf('\n 1 - Calcular a rea de uma sala retangular');
printf('\n 2 Calcular a rea de uma redonda');
printf('\n 3 Sair \n\n');
op = input('Informe a opo desejada: ');
clc;
if (op == 1) then
b = input('Informe a largura da sala (em metros): ');
a = input('Informe o comprimento da sala (em metros): ');
area = b * a;
printf('A rea da sala de larg. %d e comp. %d %d m2', b, a, area);
else
if (op == 2) then
d = input('Informe o dimetro da sala (em metros): ');
r = d / 2;
area = %pi*r^2;
printf('A area da sala %f m2', area);
end
end
input('Pressione ENTER para continuar');
end
printf('Fim do programa');
Exemplo 6. Faa um programa para calcular o somatrio dos nmeros pares menores que
um dado nmero N fornecido pelo usurio.
N = input('Informe o valor de N: ');
i = 2;
soma = 0;
while (i <= N)
soma = soma + i;
i = i + 2;
end
printf('O somatrio %d', soma);
expresso
1
2
n
Estruturas de Repetio
58
A expresso utilizada no lao for geralmente define um vetor de nmeros inteiros, que
indica o valor que a varivel receber durante cada ciclo de execuo. Por exemplo, o
programa a seguir exibe na tela os valores que a varivel i receber ao longo de sua execuo.
for i = 1:5
printf('\nValor da varivel i: %d', i);
end
da
da
da
da
da
varivel
varivel
varivel
varivel
varivel
i:
i:
i:
i:
i:
1
2
3
4
5
Embora o comando for possa ser empregado tambm em outros contextos, a forma ilustrada
a seguir a mais comum:
for varivel =
comando
comando
...
comando
end
Exerccios Resolvidos
Exemplo 1. Faa um programa utilizando a estrutura for para apresentar na tela todos os
nmeros inteiros do intervalo [1, N], onde N um nmero inteiro informado pelo usurio.
N = input('Informe o valor de N: ');
for i = 1:N
printf('\n %d', i);
end
Exemplo 2. Faa um programa utilizando a estrutura for para apresentar na tela todos os
nmeros inteiros pares do intervalo [0, N], onde N informado pelo usurio.
N = input('Informe o valor de N: ');
for i = 0:2:N
printf('\n %d', i);
end
Exemplo 3. Faa um programa utilizando a estrutura for para apresentar na tela a sequncia
de valores 100, 95, 90, 85, ..., 15, 10.
for i = 100:-5:10
printf('\n %d', i);
end
Estruturas de Repetio
59
Exemplo 5. Utilizando a estrutura for, faa um programa para ler um vetor de nmeros
inteiros e em seguir calcular o produto de todos os elementos do vetor.
v = input('Informe um vetor de valores: ');
n = length(v); // a funo length calcula o nmero de elementos de um vetor
produto = 1;
for i = 1:n
produto = produto * v(i);
end
printf('O produto dos elementos do vetor %d', produto);
Exemplo 6. Utilizando a estrutura for, faa um programa para somar todos os elementos da
matriz A = rand(50,100).
A = rand(50,100);
soma = 0;
for i = 1:50
for j = 1:100
soma = soma + A(i,j);
end
end
printf('A soma dos nmeros aleatrios gerados %d', soma);
Estruturas de Repetio
60
Referncias
1. BAUDIN, Michael. Introduction to Scilab. The Scilab Consortium, 2010.
2. KNUTH, D. E. Art of Computer Programming, Volume 1: Fundamental Algorithms. 3.
ed. Reading, Massachusetts: Addison-Wesley, 1997.
3. ASCENCIO, A. F. G. & CAMPOS, E. A. V. Fundamentos da programao de
computadores: Algoritmos, Pascal e C/C++. So Paulo: Pearson Prentice Hall, 2002.
4. www.scilab-enterprises.com
5. www.scilab.org
Estruturas de Repetio