Você está na página 1de 61

Introduo ao Scilab e

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

1.1 AMBIENTE DE TRABALHO E CONSOLE................................................................................................................................. 4


1.2 OPERAES E EXPRESSES MATEMTICAS ......................................................................................................................... 5
1.3 PRECEDNCIA DOS OPERADORES ...................................................................................................................................... 6
EXERCCIOS PROPOSTOS ....................................................................................................................................................... 7
1.4 VARIVEIS .................................................................................................................................................................... 8
1.5 VARIVEIS ESPECIAIS DO SCILAB ....................................................................................................................................... 9
1.6 NOMES DE VARIVEIS..................................................................................................................................................... 9
EXERCCIOS PROPOSTOS ....................................................................................................................................................... 9
1.7 FUNES PREDEFINIDAS ................................................................................................................................................. 9
EXERCCIOS PROPOSTOS ..................................................................................................................................................... 12
CAPTULO 2

INTRODUO A ALGORITMOS .................................................................................................13

2.1 ALGORITMO COMO UMA DESCRIO NARRATIVA .............................................................................................................. 14


2.2 ALGORITMO EM FLUXOGRAMA....................................................................................................................................... 15
2.2.1 Estrutura Condicional em Fluxograma ............................................................................................................ 17
CAPTULO 3

ENTRADA E SADA UTILIZANDO O SCINOTES ............................................................................19

3.1 FUNES INPUT E DISP.................................................................................................................................................. 20


3.2 FUNO PRINTF .......................................................................................................................................................... 21
3.3 COMENTRIOS ............................................................................................................................................................ 22
EXERCCIOS PROPOSTOS ..................................................................................................................................................... 23
CAPTULO 4

ESTRUTURA CONDICIONAL IF-THEN-ELSE .................................................................................24

4.1 ESTRUTURA CONDICIONAL SIMPLES ................................................................................................................................ 26


4.2 ESTRUTURA CONDICIONAL ANINHADA ............................................................................................................................. 26
4.3 OPERADORES RELACIONAIS ........................................................................................................................................... 28
4.4 OPERADORES LGICOS ................................................................................................................................................. 28
EXERCCIOS PROPOSTOS ..................................................................................................................................................... 29
CAPTULO 5

OPERAES COM VETORES ......................................................................................................31

5.1 ACESSANDO OS ELEMENTOS DE UM VETOR ....................................................................................................................... 31


5.2 MODIFICANDO UM VETOR ............................................................................................................................................ 32
5.3 UTILIZANDO O OPERADOR : PARA DEFINIR VETORES ....................................................................................................... 32
5.4 UTILIZANDO A FUNO LINSPACE .................................................................................................................................... 33
5.5 OPERAES COM VETORES............................................................................................................................................ 34
5.6 OUTRAS FUNES APLICADAS A VETORES ........................................................................................................................ 34
EXERCCIOS PROPOSTOS ..................................................................................................................................................... 35
CAPTULO 6

CONSTRUO DE GRFICOS .....................................................................................................36

6.1 GRFICOS DE FUNES ................................................................................................................................................. 36


6.1.1 Opes do Grfico ........................................................................................................................................... 37
6.1.2 Ttulo, Rtulos dos Eixos e Legenda ................................................................................................................ 39

6.1.3 Outras Opes do Grfico ............................................................................................................................... 40


6.2 O COMANDO SUBPLOT ................................................................................................................................................. 41
6.3 OUTROS TIPOS DE GRFICOS ......................................................................................................................................... 44
CAPTULO 7

OPERAES COM MATRIZES ....................................................................................................46

7.1 ACESSO AOS ELEMENTOS DA MATRIZ .............................................................................................................................. 47


7.2 ADICIONANDO E REMOVENDO LINHAS E COLUNAS ............................................................................................................. 48
7.3 OPERAES DE SOMA, SUBTRAO E MULTIPLICAO ....................................................................................................... 49
7.4 OUTRAS FUNES APLICADAS A MATRIZES....................................................................................................................... 50
7.5 RESOLUO DE SISTEMAS LINEARES ................................................................................................................................ 52
CAPTULO 8

ESTRUTURAS DE REPETIO.....................................................................................................54

8.1 ESTRUTURA DE REPETIO WHILE (ENQUANTO)................................................................................................................. 54


8.2 ESTRUTURA DE REPETIO FOR (REPITA PARA) ............................................................................................................... 57

Captulo 1
Introduo ao Scilab

Scilab um software livre, de computao numrica, que oferece um poderoso ambiente


computacional para aplicaes cientficas e de engenharia. O software mantido e
distribudo pela Scilab Enterprises e pode ser baixado gratuitamente pela Internet
(www.scilab.org). Atualmente, o Scilab utilizado em diversos centros educacionais e
industriais pelo mundo. Algumas das vrias atividades que podem ser realizadas no Scilab
so:

Operaes e simulaes matemticas,

Operaes com polinmios,

Construo de grficos,

Processamento de sinais,

Clculos estatsticos,

Operaes com matrizes,

Resoluo de equaes diferenciais,

Interpolao e aproximao,

Projeto e anlise de sistemas de controle.

1.1 Ambiente de Trabalho e Console


O ambiente de trabalho padro da verso 5.4.0 do Scilab apresentado a seguir. O ambiente
organizado em um conjunto de janelas menores que so encaixadas na janela principal. So
elas: Navegador de arquivos, Console do Scilab, Navegador de variveis e Histrico de comandos. A
janela Console do Scilab utilizada para a execuo de operaes diversas.

Introduo ao Scilab

Prof. Dr. Daniel A. Furtado

Figura 1.1 - Tela inicial do Scilab

O sinal de prontido --> indica que o Scilab aguarda a digitao de um comando ou


expresso, que deve ser finalizado pela tecla ENTER. Exemplos:
-->5+10
ans =
10.
-->10/4
ans =
2.5

Observe que o resultado precedido por ans de answer (resposta).

1.2 Operaes e Expresses Matemticas


As operaes bsicas da matemtica podem ser realizadas no Scilab por meio dos seguintes
operadores:
+

Soma

Subtrao

Multiplicao

Diviso

Potenciao (

Exemplos:
-->2*6
ans =
12.

Introduo ao Scilab

Prof. Dr. Daniel A. Furtado

-->2^3
ans =
8.
-->3+5-1
ans =
7.

Se necessrio, o comando clc (de clear console) pode ser utilizado para limpar o console.

1.3 Precedncia dos Operadores


Quando uma expresso envolve diversos operadores, o Scilab considera a ordem de
precedncia dos mesmos para avaliar a expresso:
Prioridade

Operao

Potenciao: ^

Multiplicao e diviso: *, /

Soma e subtrao: +, -

Exemplos:
-->4*3^2

Como o operador de potenciao tem maior prioridade em relao ao

ans =
36.

de multiplicao, a operao 3^2 avaliada primeiro e o seu resultado

-->10+4/2

4/2 avaliado primeiro, pois o operador de diviso tem prioridade

ans =
12.
-->2+3*4-1

(9) multiplicado por 4.

sobre o de adio. O resultado ento somado com 10.


3*4 avaliado primeiro.

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:

Expresso equivalente no Scilab: -->(10+4)/2

Repare que, se os parnteses no fossem utilizados, a expresso 10+4/2 no Scilab seria


equivalente expresso matemtica

, que diferente da expresso anterior (a primeira

expresso resulta em 7, enquanto a segunda resulta em 12).

Introduo ao Scilab

Prof. Dr. Daniel A. Furtado

Outros exemplos:
Expresso Matemtica

Expresso correspondente no Scilab


-->1/2 + 3/5 - 5/8
-->(3+2^5)/5
-->(5*(4+2)1)/(10+3^2)
-->(2^4+2^6)/(2^5-1)+20

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

Prof. Dr. Daniel A. Furtado

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.

A expresso a = 10 utilizada para definir uma varivel de nome a a fim de


armazenar o valor 10. O smbolo de igualdade denominado de operador de atribuio, uma
vez que atribui (armazena) o valor varivel. Aps ser definida, a varivel permanece
disponvel at que o Scilab seja fechado ou at que o usurio apague a mesma manualmente
(pode-se digitar o comando clear seguido do nome da varivel).
Outros exemplos:
-->b = 2 + 3
b =
5.

Define uma varivel de nome b para armazenar o resultado da

-->b
b =
5.

Acessa o contedo da varivel b, definida anteriormente.

-->c = 2*b + 1
c =
11.

Define uma nova varivel c para armazenar o resultado de (2*b + 1),

-->soma = b + c
soma =
16.

Define uma nova varivel de nome soma para armazenar a soma das

-->b = b + 1
b =
6.

Altera o valor da varivel b, adicionando 1 ao seu contedo.

-->t = 'teste'
t =
teste

Tambm possvel criar variveis para armazenar cadeias de

-->d = 30;

Define a varivel d. OBS: O ponto-e-vrgula utilizado para suprimir

expresso 2 + 3.

que resulta em 11.

variveis b e c.

caracteres (strings), desde que eles sejam especificados entre aspas.

a resposta imediata do Scilab.


-->d

Mostrar o contedo da varivel d

-->clear b

Apaga apenas a varivel b.

-->clear

Apaga todas as variveis definidas pelo usurio.

Introduo ao Scilab

Prof. Dr. Daniel A. Furtado

1.5 Variveis Especiais do Scilab


O Scilab disponibiliza ao usurio um conjunto de variveis pr-definidas. Algumas delas so
as variveis %pi e %e que armazenam os valores da constante matemtica

e do nmero de

Euler, respectivamente:
-->%pi
%pi =
3.1415927
-->%e
%e =
2.7182818

1.6 Nomes de Variveis


Os nomes das variveis devem ser escolhidos com ateno. Algumas regras so:

O nome da varivel no deve comear com um algarismo;

No so permitidos acentos, espaos ou caracteres especiais como: , !, ?, @ , etc;

Entretanto, o caractere sublinha _ permitido;

O Scilab faz distino entre letras minsculas e maisculas.

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.

1.7 Funes Predefinidas


O Scilab disponibiliza ao usurio uma vasta coleo de funes que realizam clculos
diversos e podem ser utilizadas diretamente no console. Por exemplo, a funo sqrt calcula a
raiz quadrada de um nmero (do ingls, square root - sqrt):
-->sqrt(9)
ans =
3.

Introduo ao Scilab

Prof. Dr. Daniel A. Furtado

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.

Para executar uma funo no Scilab, utiliza-se frequentemente a seguinte sintaxe:


nomeDaFuno ( argumentos_de_entrada )
Observe que os argumentos de entrada da funo devem ser passados entre parnteses, logo
aps o nome da funo. No Scilab, h funes que operam sobre zero, um ou vrios
argumentos de entrada. A funo sqrt apresentada anteriormente exige um nico
argumento. J a funo max, responsvel por calcular o maior dentre dois ou mais nmeros,
capaz de operar sobre diversos argumentos de entrada. Neste caso, eles devem ser
separados por vrgula:
-->max(3,4)
ans =
4.
-->max(6,3,5)
ans =
6.
-->max(2,6,3,5,12,8)
ans =
12.

Outros exemplos de funes:


Funo

Descrio

Exemplos

abs

Calcula o valor absoluto de um nmero -->abs(-5)


ans =
ou expresso.
5.

round

Arredonda um nmero para o inteiro -->round(5.1)


ans =
mais prximo.
5.
-->round(7.6)
ans =
8.
-->round(2.5)
ans = 3.

Introduo ao Scilab

Prof. Dr. Daniel A. Furtado

11

floor

Arredonda um nmero para o prximo -->floor(5.1)


ans =
inteiro menor. Se o valor j for inteiro,
5.
retorna o prprio.
-->floor(7.6)
ans

=
7.
-->floor(12)
ans =
12.
-->floor(-4.9)
ans =
-5.

ceil

Arredonda um nmero para o prximo -->ceil(5.1)


ans =
inteiro maior. Se o valor j for inteiro,
6.
retorna o prprio.
-->ceil(7.6)
ans

=
8.
-->ceil(12)
ans =
12.

min

Calcula o menor nmero de uma lista de -->min(3,8,5,2,7)


ans =
nmeros.
2.

sin, cos, tan

Calculam, respectivamente, o seno, o -->sin(%pi/2)


cosseno e a tangente de um ngulo (em ans =
1.
radianos).

-->cos(%pi)
ans =
-1.
-->tan(45 * %pi/180)
ans =
1.

sind, cosd,
tand
asin, acos,
atan
log, log10,
log2

Calculam, respectivamente, o seno, o -->sind(90)


cosseno e a tangente de um ngulo em ans =
1.
graus.
Calculam, respectivamente, o arco-seno, -->asin(1)
o arco-cosseno e o arco-tangente, com o ans =
1.5707963
resultado em radianos.
Calculam, respectivamente, o logaritmo -->log(%e)
de um nmero na base e (logaritmo ans =
1.
natural), na base 10 e na base 2.
-->log10(100)
ans =
2.

modulo

Calcula o resto da diviso inteira de um -->modulo(6,2)


ans =
nmero por outro.
0.
-->modulo(5,2)
ans =
1.

Introduo ao Scilab

Prof. Dr. Daniel A. Furtado

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

2. Calcule o resto da diviso inteira de 25 por 7.

Resp.: 4

3. Calcule o resto da diviso inteira de 11 por 2.

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

Prof. Dr. Daniel A. Furtado

13

Captulo 2
Introduo a Algoritmos

Os programas de computador podem ser desenvolvidos para solucionar problemas de


diversas reas do conhecimento. Durante o desenvolvimento desses programas, sempre
desejvel a busca por solues eficientes, que possam ser executadas pelo computador de
forma a atender os requisitos do problema e ao mesmo tempo minimizar o uso de recursos,
como o processador e a memria da mquina. Neste contexto, comum a busca pelas
solues que envolvam os melhores algoritmos.
Embora no exista uma definio formal universalmente aceita para algoritmo, o termo pode
ser definido informalmente como uma sequncia de instrues que levam soluo de um
dado problema. Por exemplo, uma simples sequncia de passos que descreve o processo de
preparao de um sanduche pode ser vista como um algoritmo, pois tais passos
correspondem s instrues que devem ser seguidas para que o problema fazer o
sanduche seja resolvido. No mundo real, muitos problemas de engenharia e de
computao so resolvidos desenvolvendo-se, inicialmente, um ou um conjunto de
algoritmos que solucionam o problema em questo. Posteriormente, tais algoritmos so
implementados em software utilizando-se uma linguagem de programao, como C++, C#
ou Java.
Conforme

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

Prof. Dr. Daniel. A. Furtado

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).

2.1 Algoritmo como uma Descrio Narrativa


Quando um algoritmo especificado na forma de uma descrio narrativa, utiliza-se a
linguagem natural (o prprio portugus) para descrever os seus passos.
Exemplo 1. Considere o problema preparar um misto quente. A sequncia de passos a
seguir constitui um algoritmo em descrio narrativa que o soluciona:
1) Preparar os ingredientes: manteiga, duas fatias de po, uma de queijo e uma de
presunto;
2) Passar a manteiga em ambas as fatias de po;
3) Colocar o presunto sobre uma fatia de po e o queijo sobre a outra;
4) Juntar as duas fatias, fechando o sanduche;
5) Colocar o sanduche em uma sanduicheira e aguardar at o po tostar;
6) Retirar o sanduche da sanduicheira.
Repare que o algoritmo composto por um conjunto finito de passos e tem um incio e um
fim. Os elementos de entrada so os ingredientes (manteiga, po, queijo e presunto) e a sada
o sanduche pronto. Os passos so claros e passveis de realizao.
Exemplo 2. Considere o problema Dadas as dimenses (em metros) de uma piscina
retangular, calcule a sua capacidade em litros de gua. Um algoritmo que o soluciona :
1) Receber as trs dimenses da piscina: largura, comprimento e profundidade;
2) Calcular o volume da piscina, em metros cbicos, multiplicando: largura x
comprimento x profundidade;
3) Calcular o volume da piscina em litros, multiplicando o volume em m3 por 1000;
4) Apresentar o volume em litros.
Exemplo 3. Considere o seguinte problema:
Dadas as trs notas de um aluno correspondentes a trs provas semestrais, calcular a sua nota final
(somatrio das trs notas) e apresentar a sua situao, que pode ser: APROVADO, caso a nota final
seja maior ou igual a 70; ou REPROVADO, caso a nota final seja inferior a 70.
A sequncia de passos a seguir constitui um algoritmo que o soluciona:
Introduo a Algoritmos

Prof. Dr. Daniel. A. Furtado

15

1) Receber as trs notas do aluno;


2) Calcular a nota final do aluno somando as trs notas recebidas;
3) Verificar se a nota final maior ou igual a 70;
4) Caso a nota final seja maior ou igual a 70, apresentar a mensagem APROVADO;
5) Caso contrrio (ou seja, nota final menor que 70), apresentar a mensagem
REPROVADO.
As principais vantagens e desvantagens de um algoritmo em descrio narrativa so:
Vantagem

Utiliza a linguagem natural, j conhecida.

Desvantagens

Impreciso,

Possvel ambiguidade,

Extenso.

2.2 Algoritmo em Fluxograma


Um algoritmo tambm pode ser especificado por meio de um diagrama. Neste caso, vrios
smbolos grficos so utilizados para a sua composio:
Nome

Smbolo

Significado

Oval (incio/fim)

Indica o incio ou o fim do algoritmo.

Retngulo (processo)

Indica um
algoritmo.

Losango (deciso)

Indica que uma deciso deve ser tomada e


que a execuo deve seguir por uma de duas
possveis direes.

Paralelograma
(entrada/sada)

Indica uma operao de entrada ou sada.

Crculo (conector)

Utilizado como ponto de juno de dois ou


mais ramos de execuo.

Seta

Indica a direo do fluxo de operaes.

processo

ou

operao

do

O algoritmo do Exemplo 1 apresentado anteriormente pode ser especificado, em fluxograma,


da seguinte forma:

Introduo a Algoritmos

Prof. Dr. Daniel. A. Furtado

16

Incio
Entrada: manteiga, 2 fatias de po, 1
fatia de queijo e 1 de presunto

Passar a manteiga em ambas as fatias de po


Colocar o presunto sobre uma fatia de po e o queijo sobre a outra

Juntar as duas fatias, fechando o sanduche


Colocar o sanduche em uma sanduicheira e aguardar at o po tostar

Retirar o sanduche da sanduicheira

Sada: sanduche pronto

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

VolumeM3 comprimento * largura * profundidade

VolumeL VolumeM3 * 1000

Sada: VolumeL

Fim

Introduo a Algoritmos

Prof. Dr. Daniel. A. Furtado

17

No fluxograma anterior, a etapa Entrada: comprimento, largura, profundidade utilizada


para expressar o fato de, nesse momento, as trs dimenses da piscina precisam ser
fornecidas, de alguma forma, para que a execuo do algoritmo possa prosseguir. A partir
desse passo, as trs medidas de dimenses sero representadas pelos termos comprimento,
largura e profundidade.
Ao invs de Entrada: comprimento, largura, profundidade, tambm comum o uso da
expresso LEIA comprimento, largura, profundidade, a qual mantm o mesmo significado.
Observe o passo:
VolumeM3 comprimento * largura * profundidade

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

2.2.1 Estrutura Condicional em Fluxograma


Um algoritmo em fluxograma correspondente ao Exemplo 3 (problema para determinar a
situao final de um aluno) apresentado a seguir. Neste caso, utilizamos o smbolo
condicional losango (

). Este smbolo deve ser empregado quando uma deciso precisa

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

Prof. Dr. Daniel. A. Furtado

18

Incio
Entrada: nota1, nota2, nota3

NotaFinal 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

Prof. Dr. Daniel. A. Furtado

19

Captulo 3
Entrada e Sada utilizando o SciNotes

Todas as operaes e funes apresentadas no Captulo 1 foram executadas utilizando o


console do Scilab. Em geral, o console utilizado quando se deseja executar sequncias de
operaes no muito complexas ou extensas, ou quando se deseja obter um resultado
imediato dessas operaes. Entretanto, h situaes em que necessrio executar uma srie
de operaes envolvendo testes lgicos, repeties de clculos e interaes com o usurio.
Nesses casos, pode ser necessrio o desenvolvimento de um programa propriamente dito,
que poder ser salvo em um arquivo e executado quando necessrio. No Scilab, tais
programas (ou scripts) podem ser feitos utilizando o seu prprio editor de textos, o SciNotes.
Para abrir o SciNotes, clique na janela do console e depois no cone

(ver Figura 3.1).

Figura 3.1 Abrindo o editor SciNotes

Entrada e Sada utilizando o SciNotes

Prof. Dr. Daniel. A. Furtado

20

Figura 3.2 - Editor SciNotes

Assim que o SciNotes aberto, pode-se escrever a sequncia de comandos correspondente ao


programa e execut-lo (basta clicar no cone

ou pressionar a tecla F5).

3.1 Funes input e disp


Antes de apresentar um primeiro programa como exemplo, importante descrever duas
funes bsicas que so utilizadas com frequncia no SciNotes:

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).

O programa a seguir solicita ao usurio a medida do lado de um quadrado e ento calcula e


apresenta a sua rea. Para test-lo, copie os comandos para o editor SciNotes, salve o arquivo
e clique em executar

. Em seguida, ative a janela do console do Scilab para acompanhar a

sua execuo. Fornea um valor qualquer e pressione ENTER.


Exemplo 1a. Programa para calcular a rea de um quadrado.
lado = input("Informe a medida do lado de um quadrado: ");
area = lado * lado;
disp("A rea do quadrado : ");
disp(area);

Entrada e Sada utilizando o SciNotes

Prof. Dr. Daniel. A. Furtado

21

Os comandos que compem um programa feito no SciNotes sero executados pelo


computador sequencialmente, na ordem de suas linhas. Por exemplo, quando o programa
anterior for executado, o computador comear processando a expresso:
lado = input("Informe a medida do lado de um quadrado: ");

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.

3.2 Funo printf


No programa do Exemplo 1a, poderamos ter utilizado a funo printf ao invs da funo
disp. Vejo o exemplo:
Exemplo 1b. Utilizando a funo printf.
lado = input("Informe a medida do lado de um quadrado: ");
area = lado * lado;
printf("A rea do quadrado : %f", 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

Entrada e Sada utilizando o SciNotes

Prof. Dr. Daniel. A. Furtado

22

inserido na mensagem de texto, necessrio especificar uma varivel ou expresso que o


substituir na mensagem final:
printf("A rea do quadrado de lado %f %f", lado, area);

Alm de %f, outras formas comuns so:

%d utilizado quando a varivel ou expresso resulta em um nmero inteiro (ou


quando se deseja apresentar apenas a parte inteira de um nmero com casas
decimais)

%.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);

Exemplo 3. Programa que solicita ao usurio as medidas de uma piscina retangular, em


metros, e calcula e apresenta a sua capacidade, em litros.
l = input("Informe a largura da piscina, em metros: ");
c = input("Informe o comprimento da piscina, em metros: ");
p = input("Informe a profundidade da piscina, em metros: ");
v = l * c * p * 1000;
printf("A capacidade da pisc. de dimenses %.2f x %.2f x %.2f %.2f L.", l,c,p,v);

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);

Entrada e Sada utilizando o SciNotes

Prof. Dr. Daniel. A. Furtado

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

2. Faa um programa que receba do usurio as medidas da base e da altura de um tringulo


retngulo e calcule e apresente a sua rea.
3. Faa um programa que receba do usurio a medida do raio de um crculo e calcule e
apresente a sua rea.
4. Faa um programa que receba do usurio o dimetro e a profundidade (em metros) de
uma piscina redonda. O programa deve calcular e apresentar o volume da piscina em
metros cbicos e em litros (
, onde
e
).
5. Faa um programa que receba do usurio a largura, o comprimento e a profundidade de
uma piscina retangular (em metros) e calcule e apresente a quantidade total de azulejos
(em m2) necessria para cobrir a superfcie interna da piscina.

Entrada e Sada utilizando o SciNotes

Prof. Dr. Daniel. A. Furtado

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

e a palavra end (fim)).

Estrutura Condicional if-then-else

Prof. Dr. Daniel. A. Furtado

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.

Estrutura Condicional if-then-else

Prof. Dr. Daniel. A. Furtado

26

4.1 Estrutura Condicional Simples


O bloco else da estrutura if no obrigatrio. H situaes em que necessrio executar uma
srie de comandos caso uma condio seja verdadeira, mas que no necessrio executar
nada em especial caso essa condio seja falsa. Considere, por exemplo, que seja preciso
calcular a rea de um quadrado quando o lado informado pelo usurio for vlido, mas que
no seja necessrio apresentar nenhuma mensagem caso o usurio digite um valor invlido.
Isto feito no cdigo a seguir. Neste caso, no colocamos o bloco else.
lado = input("Informe a medida do lado da sala: ");
if (lado > 0) then
area = lado * lado;
printf("A area da sala %f", area);
end

4.2 Estrutura Condicional Aninhada


possvel utilizar a estrutura condicional if dentro de outra, tanto no bloco then quando no
bloco else. Uma vez iniciado outro if, bastar seguir as mesmas regras descritas anteriormente.
Exemplo 3. Deseja-se elaborar um programa para calcular as razes reais de uma equao do
2 grau, caso elas existam. O programa deve solicitar ao usurio os coeficientes a, b e c que
definem a equao (

Neste exemplo, h trs possibilidades para se tratar:


1. A equao pode ter duas razes distintas;
2. A equao pode ter duas razes iguais (uma raiz distinta);
3. A equao pode no ter razes reais
Portanto, ser necessrio o emprego de duas estruturas condicionais:
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, h duas razes que precisam ser calculadas
x1 = (-b + sqrt(delta))/(2*a);
x2 = (-b - sqrt(delta))/(2*a);
printf("As razes da equao so %.2f e %.2f", x1, x2);
else
if (delta == 0) then
// Neste caso, h apenas uma raiz distinta
x = (-b)/(2*a);
printf("Duas razes iguais: %.2f", x);
else
printf("No existem razes reais!");
end
end

Estrutura Condicional if-then-else

Prof. Dr. Daniel. A. Furtado

27

O programa apresentado solicita os trs coeficientes ao usurio e em seguida calcula o valor


do discriminante (

, que armazenado na varivel delta. Na sequncia, a primeira

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 homens: peso ideal = (72.7 * h) 58

Para mulheres: peso ideal = (62.1 * h) 44.7

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).

Estrutura Condicional if-then-else

Prof. Dr. Daniel. A. Furtado

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

4.3 Operadores Relacionais


O Scilab disponibiliza ao usurio um conjunto de operadores relacionais, que inclui os j
utilizados == e >. Esses operadores so ilustrados na Erro! Fonte de referncia no encontrada..
Operador

Significado

==

Igual a

~=

Diferente de

>

Maior que

>=

Maior ou igual a

<

Menor que

<=

Menor ou igual a

Tabela 4.1 - Operadores relacionais do Scilab

4.4 Operadores Lgicos


Em todos os exemplos anteriores, na estrutura condicional if, utilizou-se uma expresso
lgica simples (if delta > 0, if n1 == n2, etc.). Entretanto, os operadores lgicos do Scilab
podem ser utilizados para a formao de expresses lgicas mais complexas (que envolvem,
por exemplo, duas ou mais condies). Tais operadores so apresentados na Tabela 4.2.

Estrutura Condicional if-then-else

Prof. Dr. Daniel. A. Furtado

29

Operador Lgico

Significado

Exemplo

Significado

&

e lgico

if (a > 0 & a < 10)...

Verifica se o valor da varivel a


maior que 0 e menor que 10.

ou lgico

if (a == 0 | b == 0) ...

Verifica se alguma das variveis


(a ou b) tem valor igual a zero.

Negao

if ~(a < 0) ...

Verifica se o valor da varivel a


NO menor que zero. Isto
equivalente condio a >= 0

Tabela 4.2 - Operadores lgicos do Scilab

A&B

A|B

~A

F
V
F

Tabela 4.3 - Tabela verdade dos operadores lgicos

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)

a = 10; b = 20; c = 10;


if (a == b | a == c) then
printf("%d",a);
else
printf("%d",b);
end

Estrutura Condicional if-then-else

Prof. Dr. Daniel. A. Furtado

30

c)

a = 10; b = 10; c = 20;


if (a == b & a == c) then
printf("%d",a);
else
printf("%d",c);
end

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);

Estrutura Condicional if-then-else

Prof. Dr. Daniel. A. Furtado

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 coluna de nome v1 contendo 3 elementos)

5.1 Acessando os Elementos de um Vetor


Os elementos de um vetor linha ou coluna podem ser acessados individualmente por meio
de um ndice. Deve-se colocar o nome do vetor seguido da posio do elemento entre
parnteses.
Exemplos:
-->a = [7, 4, 12, 9]

(define um vetor)

a =
7. 4. 12. 9.

Operaes com Vetores

Prof. Dr. Daniel A. Furtado

32

-->a(3)
(acessa o terceiro elemento do vetor)
ans =
12.
___________________________________________________________________________________
-->a(1)
ans =
7.

(acessa o primeiro elemento do vetor)

5.2 Modificando um Vetor


Tambm possvel modificar os elementos de um vetor, adicionar novos elementos ou at
mesmo exclu-los. Veja os exemplos:
-->a = [6 4 8 3]
(define um vetor linha de nome a contendo 4 elementos)
a =
6. 4. 8. 3.
___________________________________________________________________________________
-->a(4) = 15
(altera o quarto elemento do vetor a para o valor 15)
a =
6. 4. 8. 15.
___________________________________________________________________________________
-->a(1) = a(1) + 2
(adiciona 2 ao primeiro elemento do vetor a)
a =
8. 4. 8. 15.
___________________________________________________________________________________
-->a = [a, 17]
(adiciona o elemento 17 no final do vetor a)
a =
8. 4. 8. 15. 17.
___________________________________________________________________________________
-->a = [13, a]
(adiciona o elemento 13 no incio do vetor a)
a =
13. 8. 4. 8. 15. 17.
___________________________________________________________________________________
-->a(7) = 6
(adiciona o elemento 6 no final do vetor a (outra forma))
a =
13. 8. 4. 8. 15. 17. 6.
___________________________________________________________________________________
-->a(3) = []
(apaga o terceiro elemento do vetor a)
a =
13. 8. 8. 15. 17. 6.

5.3 Utilizando o Operador : para Definir Vetores


Vetores com elementos sequenciais podem ser definidos por meio do operador : (dois
pontos). Neste caso, deve-se especificar o incremento ou o decremento desejado para que os
elementos do vetor sejam calculados automaticamente. Sua forma geral :

[inicio : incremento (ou decremento) : valor limite ]

Operaes com Vetores

Prof. Dr. Daniel A. Furtado

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.

(de 5, com decremento de -1, at 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.

(a partir de -2, de um em um, at 2)

5.4 Utilizando a Funo linspace


A funo linspace do Scilab pode ser utilizada para definir vetores contendo um nmero
especfico de elementos igualmente espaados dentro de um intervalo. Neste caso, no
necessrio saber o incremento (ou decremento), pois o mesmo ser calculado
automaticamente. Sua forma geral :
linspace(incio, fim, nmero_de_elementos)
Exemplos:
-->x1=linspace(1, 3, 5)
(vetor com 5 elementos igualmente espaados de 1 a 3)
x1 =
1. 1.5 2. 2.5
3.
___________________________________________________________________________________
-->x2=linspace(-5, 5, 30) (vetor de 30 elementos igualmente espaados de -5 a 5)
x2 =
-5. -4.6 -4.3 -3.9 -3.6
...
3.9 4.3 4.6 5.
___________________________________________________________________________________
-->x3=linspace(-%pi, %pi, 40) (vetor com 40 elementos espaados de x3 =
-3.14 -2.98
...
2.98 3.14

Operaes com Vetores

Prof. Dr. Daniel A. Furtado

34

5.5 Operaes com Vetores


Os operados matemticos e diversas funes do Scilab tambm podem ser aplicados a
vetores. O resultado das operaes depender do contexto empregado.
Exemplos:
-->a = [1 2 3 4]
a =
1. 2. 3. 4.

(define um vetor de nome a)

-->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

(a funo seno ser aplicada a cada valor de x)


1

5.6 Outras Funes Aplicadas a Vetores


O Scilab disponibiliza um conjunto de funes que podem ser aplicadas a vetores. Algumas
dessas funes so:

length retorna o nmero de elementos de um vetor.

sum calcula o somatrio dos elementos de um vetor.

prod calcula o produto dos elementos de um vetor.

norm calcula a norma de um vetor.

Operaes com Vetores

Prof. Dr. Daniel A. Furtado

35

Exerccios Propostos
1.

Defina um vetor linha de nome

2.

Aplique a funo matemtica

para conter os valores 3, 8, 1, 5, 2.


a todos os elementos do vetor x definido

anteriormente e armazene o resultado em um vetor y1.


3.

Aplique a funo

a todos os elementos de x e armazene o resultado em

um vetor y2.
4.

Defina um vetor coluna de nome x2 contendo os elementos 1, 10, 100, 1000.

5.

Aplique a funo

6.

Defina um vetor de nome v1 contendo os nmeros inteiros no intervalo [5, 100].

7.

Defina um vetor de nome v2 contendo a sequncia de nmeros 1, 4, 7, 10, 13, ..., 97.

aos elementos de x2 e armazene o resultado no vetor y2.

Utilize os recursos adequados.


8.

Defina um vetor de nome v3 contendo a sequncia de nmeros 90, 84, 78, 72, ..., 12.
Utilize os recursos adequados.

9.

Defina um vetor de nome v4 contendo nmeros de

espaados de 0.15.

10. Defina um vetor de nome v5 contendo 80 nmeros igualmente espaados no intervalo


[

]. Utilize os recursos adequados.

Operaes com Vetores

Prof. Dr. Daniel A. Furtado

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.

6.1 Grficos de Funes


Grficos de funes de uma varivel podem ser construdos no Scilab por meio da funo
plot. Os valores das abcissas (x) e os valores das ordenadas (y) a serem utilizados no grfico
podem ser especificados em vetores. Por exemplo, o grfico da funo
valores de

para os

apresentados na tabela a seguir, pode ser construdo pela sequncia de

comandos do Exemplo 1.
p1

p2

p3

p4

p5

p6

p7

-3

-2

-1

Exemplo 1. Construo de um grfico pela especificao de uma srie de pares ordenados.


x = [-3, -2, -1, 0, 1, 2, 3];
y = [9, 4, 1, 0, 1, 4, 9];
plot(x, y);

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

Prof. Dr. Daniel A. Furtado

37

Figura 6.1 Grfico da funo


7 pontos no intervalo [-3, 3].

construdo com a funo plot do Scilab. Foram considerados

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);

// define o vetor x. Neste caso, com pontos de -3 a 3, espaados de 1.


// o valores de y so calculados a partir de x

6.1.1 Opes do Grfico


possvel alterar diversas caractersticas do grfico, como o tipo de linha, a cor e o tipo de
marcador. Tais opes so comumente especificadas entre aspas, da seguinte forma:
plot(vetor x, vetor y, 'opes')

onde opes representa um conjunto caracteres que define os detalhes do grfico.


Algumas das opes aceitas pelo Scilab so apresentadas na Tabela 6.1. Elas podem ser
especificadas em qualquer ordem, desde que estejam dentro das aspas.

Construo de Grficos

Prof. Dr. Daniel A. Furtado

38

Smbolo

Significado

Asterisco.

Smbolo +

Marcador o

Linha

Cor

Crculo (Letra o)

Losango diamond

Quadrado square

Linha slida

--

Linha tracejada

Linha pontilhada

Cor vermelha - red

Cor verde green

Cor azul blue

Cor amazela - yellow

Cor preta black

Tabela 6.1 - Algumas opes da funo plot

Exemplo

Descrio

x = [-5:0.5:5];

Os pontos aparecem com o

y = x^2;

marcador *. No h linha. Cor

plot(x, y, '*');

azul (padro).

x = [-5:0.5:5];

Grfico com o marcador * e

y = x^2;

com linha slida conectando os

plot(x, y, '*-')

pontos.

Construo de Grficos

Resultado

Prof. Dr. Daniel A. Furtado

39

Exemplos

Descrio

x = [-5:0.5:5];

Linha tracejada, na cor

y = x^2;

vermelha, com o marcador

plot(x, y, '--ro');

o.

x = [-%pi:0.2:%pi];

Dois grficos sobrepostos

y1 = sin(x);

utilizando duas vezes o

plot(x,y1,'-*g');

comando plot. Funo seno

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.

6.1.2 Ttulo, Rtulos dos Eixos e Legenda


O grfico, seus eixos e as curvas podem receber rtulos de identificao por meio das funes:

xtitle insere um ttulo para o grfico

xlabel insere um rtulo para o eixo

Ylabel insere um rtulo para o eixo

legend insere uma legenda para identificao das sries

Construo de Grficos

Prof. Dr. Daniel A. Furtado

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');

6.1.3 Outras Opes do Grfico


Detalhes sobre os eixos podem ser especificados por meio da funo gca (get current axes),
que retorna uma varivel especial para manipulao dos eixos do grfico. Tal varivel d
acesso s diversas propriedades dos eixos, que podem ser configuradas pelo usurio.
Algumas dessas propriedades so:
x_location posio do eixo x. Pode ser top, middle ou bottom;
y_location posio do eixo y. Pode ser left, middle ou right;

Construo de Grficos

Prof. Dr. Daniel A. Furtado

41

axes_visible indica se os eixos devem ser mostrados on ou no off;


isoview utiliza escalas isomtricas para os eixos. Pode ser on ou off;
Exemplo:
clf
x = [0:0.1:2*%pi];
y1 = sin(x);
y2 = cos(x);
plot(x,y1,'-*b', x,y2,'-dr');
xtitle('Funes seno e cosseno Escalas isomtricas');
legend('Seno', 'Cosseno');
a = gca();
// obtm o manipulador de eixos
a.isoview = 'on';
// utiliza escalas isomtricas
a.x_location = 'middle';
// o eixo x ser mostrado no centro

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.

6.2 O Comando subplot


O comando subplot utilizado para inserir diversos grficos em uma mesma janela. O
comando divide a janela grfica em uma matriz de m x n clulas, onde em cada clula
possvel inserir um grfico. Sua forma de uso :
subplot(m, n, p)
onde:

m nmero de linhas em que se deseja dividir a janela grfica

n nmero de colunas em que se deseja dividir a janela grfica

Construo de Grficos

Prof. Dr. Daniel A. Furtado

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.

Figura 6.2 - Janela de configurao das propriedades dos eixos

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

Prof. Dr. Daniel A. Furtado

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

Prof. Dr. Daniel A. Furtado

44

6.3 Outros Tipos de Grficos


O Scilab tambm disponibiliza funes para a construo de outros tipos de grficos,
incluindo grficos de barras verticais, grficos de barras horizontais e grficos do tipo pizza.
As funes so:
bar para grficos de barras verticais;
barh para grficos de barras horizontais;
pie para grficos do tipo pizza.
Tais funes so comumente utilizadas da seguinte forma:
bar(vetor_de_nmeros, <largura_das_barras>)
barh(vetor_de_nmeros, <largura_das_barras>)
pie(vetor_de_nmeros, <espaamento_fatias>, <rtulos_fatias>)
onde:
vetor_de_nmeros: vetor contendo os valores que definem, de maneira
proporcional, o comprimento de cada barra (ou o tamanho de cada fatia da pizza);
largura_das_barras: nmero entre 0 e 1 que determina a largura das barras (0 =
largura mnima, 1 = largura mxima). Este dado opcional.
espaamento_fatias: vetor de nmeros que especificam se a respectiva fatia da
pizza deve aparecer afastada (nmero diferente de 0) ou grudada no centro da
pizza (valor 0);
rtulos_fatias: vetor contendo os rtulos, entre aspas, correspondentes s fatias
da pizza.
Veja alguns exemplos:
Comandos

Grfico Resultante

clf;
x = [1,2,3,4];
bar(x, 0.5);

Construo de Grficos

Prof. Dr. Daniel A. Furtado

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

Prof. Dr. Daniel A. Furtado

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:
[

-->A = [1,2,3; 2,5,1; 7,4,9]


A =
1.
2.
3.
2.
5.
1.
7.
4.
9.
-->B = [2 1; 3 2; 4 3]
B =
2.
1.
3.
2.
4.
3.
-->C = [9 8 7 6
-->1 2 3 4]
C =
9.
8.
7.
1.
2.
3.

6.
4.

O operador : pode ser utilizado para especificar uma sequncia de elementos dentro de
uma mesma linha. Por exemplo, a matriz:
[

pode ser definida pelo comando:


--> D = [1:5; 6:10; 12:2:20]

Operaes com Matrizes

Prof. Dr. Daniel A. Furtado

47

7.1 Acesso aos Elementos da Matriz


Aps definir a matriz, um elemento especfico pode ser acessado utilizando-se a notao
, onde A o nome da matriz, i o nmero da linha e j nmero da coluna onde o
elemento se encontra.
Exemplos:
-->M = [4,9,5; 7,3,8]
M =
4.
9.
5.
7.
3.
8.

(define uma matriz M)

-->M(1,3)
ans =
5.

(Acessa o elemento da 1 linha e 3 coluna de M)

-->x = M(2,1)
x =
7.

(Acessa o elemento da 2 linha e 1 coluna de M e o armazena em x)

-->M(1,2) = 10
M =

(Altera o elemento da 1 linha e 2 coluna de M para o valor 10)

4.
7.

10.
3.

5.
8.

Acessando uma Linha Inteira


Especifica-se o nmero da linha e coloca-se : para a coluna.
-->M = [1,2,3; 4,5,6]
M =
1.
2.
3.
4.
5.
6.

(define uma matriz M)

-->M(2,:)
ans =
4.
5.

(acessa toda a 2 linha de M)


6.

-->M(2,:) = [7,8,9]
M =
1.
2.
3.
7.
8.
9.

(altera toda a 2 linha de M. Repare no novo vetor linha)

Acessando uma Coluna Inteira


Especifica-se o nmero da coluna e coloca-se : para a linha.
-->M = [1,2,3; 4,5,6]
M =
1.
2.
3.
4.
5.
6.

Operaes com Matrizes

(define uma matriz M)

Prof. Dr. Daniel A. Furtado

48

-->M(:,3)
ans =
3.
6.

(acessa toda a 3 coluna de M)

-->M(:,2) = [20; 30]


M =
1.
20.
3.
4.
30.
6.

(altera toda a 2 coluna de M. [20;30] um vetor coluna)

Acessando uma Submatriz


Tambm possvel acessar uma parte da matriz envolvendo mais de uma linha ou coluna.
Neste caso, deve-se especificar o intervalo de linhas e o intervalo de colunas que envolvem a
parte desejada. No exemplo a seguir, acessamos a submatriz de A indicada pela linha
tracejada.

-->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.

(acessa a submatriz de A: da linha 1 3, da coluna 2 4)


0.
9.
8.

7.2 Adicionando e Removendo Linhas e Colunas


Adicionando Linhas Matriz
-->A = [3 2 1; 6 5 4]
A =
3.
2.
1.
6.
5.
4.

(define uma matriz A)

-->A = [A; [1,2,3]]


A =
3.
2.
1.
6.
5.
4.
1.
2.
3.

(adiciona a linha [1,2,3] no final da matriz A)

Operaes com Matrizes

Prof. Dr. Daniel A. Furtado

49

-->A = [[5,5,5]; A]
A =
5.
5.
5.
3.
2.
1.
6.
5.
4.
1.
2.
3.

(adiciona a linha [5,5,5] no incio da matriz A)

Adicionando uma Nova Coluna


-->B = [1, 2; 3, 4]
B =
1.
2.
3.
4.

(define uma matriz B)

-->B = [B, [5;6]]


B =
1.
2.
5.
3.
4.
6.

(adiciona a coluna [5;6] no final da matriz B)

-->B = [[0;1], B]
B =
0.
1.
2.
1.
3.
4.

(adiciona a coluna [0;1] no incio da matriz B)


5.
6.

Removendo uma Linha ou Coluna


-->C = [1, 2; 3, 4; 5, 6]
C =
1.
2.
3.
4.
5.
6.

(define uma matriz C)

-->C(2,:) = []
C =
1.
2.
5.
6.

(exclui a 2 linha da matriz C)

-->C(:,1) = []
C =
2.
6.

(exclui a 1 coluna da matriz C)

Observe que quando uma linha ou coluna excluda, as demais so reorganizadas para
ocupar o seu lugar.

7.3 Operaes de Soma, Subtrao e Multiplicao


As operaes de soma, subtrao e multiplicao de matrizes podem ser realizadas com os
prprios operadores matemticos +, - e *, respectivamente. Entretanto, preciso que as
matrizes operadas sejam compatveis, de acordo com as restries matemticas. Veja os
exemplos:

Operaes com Matrizes

Prof. Dr. Daniel A. Furtado

50

-->A = [1,2; 3,4]


A =
1.
2.
3.
4.

(define uma matriz A)

-->B = A
B =
1.
3.

(define uma matriz B igual matriz A)


2.
4.

-->C = A + B
C =
2.
4.
6.
8.

(calcula a soma das matrizes A e B e armazena em C.


As matrizes precisam ter as mesmas dimenses)

-->D = A B
D =
0.
0.
0.
0.

(calcula a diferena das matrizes A e B)

-->E = A * B
E =
7.
10.
15.
22.

(calcula o produto matricial de A por B.


O nmero de colunas da primeira deve ser igual ao
nmero de linhas da segunda)

-->F = 2 * A + 1
F =
3.
5.
7.
9.

(operao com escalares. Cada elemento da matriz A


multiplicado por 2 e somado com 1, resultando em uma
nova matriz F)

7.4 Outras Funes Aplicadas a Matrizes

length(A) retorna o nmero total de elementos da matriz A;

sum(A) calcula o somatrio dos elementos de A;

det(A) calcula o determinante da matriz quadrada A;

inv(A) calcula a inversa da matriz quadrada A (se houver);

A' calcula a matriz transposta de A;

diag(A) retorna a diagonal principal da matriz A na forma de um vetor coluna;

size(A) retorna as dimenses de A (o nmero de linhas e o nmero de colunas);

eye(m,n) define uma matriz

contendo 1s na diagonal principal e 0s nas

demais posies (matriz identidade);

zeros(m,n) define uma matriz nula de tamanho

ones(m,n) define uma matriz

onde todos os elementos so iguais a 1;

rand(m,n) define uma matriz

de nmeros aleatrios entre 0 e 1.

Operaes com Matrizes

Prof. Dr. Daniel A. Furtado

51

Exemplos:
-->A = [3,7,1;8,5,0]
A =
3.
7.
1.
8.
5.
0.

(define uma matriz A)

-->length(A)
ans =
6.

(obtm o nmero total de elementos de A)

-->size(A)
ans =
2.
3.

(obtm o nmero de linhas e o nmero de colunas de A)

-->[L,C]=size(A)
C =
3.
L =
2.

(obtm as dimenses de A, armazenando nas vars. L e C)

-->A = [A;[2,1,3]]
A =
3.
7.
1.
8.
5.
0.
2.
1.
3.

(adiciona uma nova linha em A)

-->det(A)
ans =
- 125.

(calcula o determinante de A)

-->A'
ans =
3.
7.
1.

(calcula a matriz transposta de A)

-->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.

Operaes com Matrizes

Prof. Dr. Daniel A. Furtado

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

7.5 Resoluo de Sistemas Lineares


Para resolver um sistema de equaes lineares no Scilab, pode-se consider-lo como uma
multiplicao de matrizes e realizar o clculo da matriz inversa. Por exemplo, considere o
seguinte sistema:
{
Esse sistema pode ser representado pela multiplicao de matrizes:
(

) ( )

que pode ser representada, de forma sucinta, por:


onde A a matriz dos coeficientes, b o vetor coluna dos termos independentes e s o vetor
soluo ( ). Ao multiplicar os dois lados da equao pela matriz inversa de A, obtemos:

que resulta na equao:

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,

// define a matriz dos coeficientes


// define o vetor coluna dos termos independentes
// resolve o sistema linear
y=%.1f", s(1), s(2)); // apresenta a soluo do sistema

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

Prof. Dr. Daniel A. Furtado

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

Um sistema linear da forma

tambm pode ser resolvido no Scilab utilizando-se o

operador \. Neste caso, a soluo dada por: s = A \ b.

Operaes com Matrizes

Prof. Dr. Daniel A. Furtado

54

Captulo 8
Estruturas de Repetio

8.1 Estrutura de Repetio while (enquanto)


A estrutura de repetio while (em portugus, enquanto) utilizada quando se deseja
repetir a execuo de um bloco de comandos enquanto uma determinada condio for
verdadeira. Sua forma geral de uso no Scilab :
while (condio)
comando 1
comando 2
...
comando n
end

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

Prof. Dr. Daniel. A. Furtado

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 2. Faa um programa para exibir na tela a mensagem Ol 100 vezes.


i = 1;
while (i <= 100)
printf('\nOl!');
i = i + 1;
end

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

Prof. Dr. Daniel. A. Furtado

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);

Exemplo 6. Faa um programa que apresente na tela o seguinte menu de opes:


Menu de Opes
1 Calcular a rea de uma sala retangular
2 Calcular a rea de uma redonda
3 Sair
Informe a opo desejada:
O programa dever voltar ao menu aps a execuo da opo escolhida pelo usurio e dever
ser encerrado apenas quando o usurio escolher a opo 3 (sair). Quando a opo 1 for
escolhida, por exemplo, o programa dever solicitar as dimenses da sala retangular,
calcular e mostrar a sua rea.

Estruturas de Repetio

Prof. Dr. Daniel. A. Furtado

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);

8.2 Estrutura de Repetio for (repita para)


A estrutura de repetio for comumente empregada quando se deseja repetir a execuo de
um bloco de comandos para cada valor que uma varivel assume a partir de uma expresso.
A forma geral de utilizao da estrutura for no Scilab :
for varivel =
comando
comando
...
comando
end

expresso
1
2
n

Estruturas de Repetio

Prof. Dr. Daniel. A. Furtado

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

O programa anterior produz o seguinte resultado:


Valor
Valor
Valor
Valor
Valor

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

valorInicial : incremento(ou decremento) : limiteSuperior(inferior)


1
2
n

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

Prof. Dr. Daniel. A. Furtado

59

Exemplo 4. Utilizando a estrutura for, faa um programa para calcular o somatrio 20 + 21 +


22 + ... + 2N. O valor N deve ser informado pelo usurio.
N = input('Informe o valor de N: ');
soma = 0;
for i = 0:N
soma = soma + 2^i;
end
printf('A soma dos valores %d', soma);

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

Prof. Dr. Daniel. A. Furtado

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

Prof. Dr. Daniel. A. Furtado