You are on page 1of 111

1

---+++

Departamento de Engenharia

Prof. Airton Jos Sachetim Garcia

Software SciLab
5.4.0

Londrina
2013
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

2
FACULDADE PITGORAS DE LONDRINA - PR
PROGRAMA DE GRADUAO EM ENGENHARIA
DEPARTAMENTO DE ENGENHARIA

Airton Jos Sachetim Garcia

Software SciLab 5.4.0

LONDRINA-PR
2013

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

SACHETIM GARCIA, Airton Jos.


Software SciLab 5.4.0 / SACHETIM GARCIA, Airton Jos.
Londrina: Faculdade Pitgoras, 2013.
112 f.
Coordenador: Fernando Ciriaco Dias Neto.
Matria (Algoritmo e Programao) Faculdade Pitgoras
Londrina / Pitgoras, 2013.
Referncias: f. 99-102
1. Gerncia de Redes. 2. SNMP. 3. NMS. I. sobrenome
orientador. II. Universidade Estadual de Londrina. Especializao em
Redes de Computadores e Comunicao de Dados. III. Gerncia de
redes protocolo SNMP.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

Sumrio
1

Introduo ............................................................................................................................. 7

SciLab - Interpretador de Clculos Numricos ...................................................................... 8


2.1

Objetivos ....................................................................................................................... 8

Interface Grfica do SciLab.................................................................................................... 9


3.1

Console ........................................................................................................................ 10

3.1.1

Algum conhecimento prvio necessrio ............................................................. 11

3.1.2

Sensibilidade ao tipo de letra .............................................................................. 12

3.1.3

Ajuda ................................................................................................................... 12

3.1.4

Constantes e variveis especiais ......................................................................... 12

3.1.5

Formato dos nmeros ......................................................................................... 13

3.1.6

Operadores aritmticos e relacionais ................................................................. 14

3.1.7

Prioridade de execuo dos operadores ............................................................. 14

3.1.8

Funes bsicas ................................................................................................... 15

3.1.9

Na linha de comandos ......................................................................................... 17

3.1.10

Manipulao e informao sobre o espao de trabalho..................................... 17

3.1.11

Lidar com pastas.................................................................................................. 18

3.2

Editor - SciNote............................................................................................................ 18

3.2.1
3.3
4

Docking - Ancorar ................................................................................................ 19

Salvar e imprimir todo o trabalho na janela de comandos ......................................... 20

Programando com SciLab .................................................................................................... 21


4.1

Elementos bsicos da linguagem ................................................................................ 22

4.1.1

Criando varivel Real ........................................................................................... 22

4.1.2

Nome de varivel ................................................................................................ 23

4.1.3

Comentrio e linha de continuao .................................................................... 24

4.1.4

Variveis matemticas pr-definidas .................................................................. 25

4.1.5

Expresses aritmticas ........................................................................................ 25

4.1.6

Funes Matemticas Comuns ........................................................................... 26

4.1.7

Funes de Arredondamento ............................................................................. 27

4.1.8

Variveis Booleanas ............................................................................................ 28

4.1.9

Nmeros complexos............................................................................................ 29

4.1.10

STRINGS ............................................................................................................... 30

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

5
4.1.11

O Comando Clear ................................................................................................ 32

4.1.12

Os Comandos Save e Load................................................................................... 32

4.1.13

FORMATO DE VISUALIZAO DOS NMEROS .................................................... 32

4.1.14

Varivel ANS ........................................................................................................ 33

4.2

Exerccios ..................................................................................................................... 34

4.2.1
5

Comandos de Entrada/Sada e Scripts ................................................................................ 40


5.1

Comandos de digitao (ENTRADA) de dados ............................................................ 40

5.2

Comandos de sada (MOSTRAR) de dados .................................................................. 40

5.2.1

A FUNO DISP ................................................................................................... 41

5.2.2

A FUNO PRINTF ............................................................................................... 41

5.3

ARQUIVOS DE SCRIPTS ................................................................................................ 43

5.3.1

CRIANDO ARQUIVOS DE SCRIPT .......................................................................... 43

5.3.2

EXECUTANDO ARQUIVOS DE SCRIPT................................................................... 45

5.3.3

Exemplos para exercitar ...................................................................................... 46

5.3.4

Outra maneira de executar um script ................................................................. 47

Estruturas de controle ......................................................................................................... 49


6.1

Estruturas de seleo .................................................................................................. 49

6.2

Estrutura de repetio ................................................................................................ 49

6.3

EXPRESSES BOOLEANAS ........................................................................................... 50

6.4

VARIVEIS BOOLEANAS ............................................................................................... 51

6.5

TIPOS DE DADOS PRIMITIVOS ..................................................................................... 51

6.6

Seleo condicional ..................................................................................................... 52

6.6.1

O comando IF ...................................................................................................... 52

6.6.2

A SELEO BIDIRECIONAL IF-ELSE-END............................................................... 53

6.6.3

Aninhamento ....................................................................................................... 54

6.7

Fazendo operaes com nmeros reais.............................................................. 34

Estruturas de repetio ............................................................................................... 61

6.7.1

LAOS .................................................................................................................. 61

6.7.2

While - LAO CONTROLADO LOGICAMENTE ...................................................... 61

6.7.3

FOR - LAO CONTROLADO POR CONTADOR ....................................................... 64

6.7.4

FOR - Laos Aninhado .......................................................................................... 68

Matrizes............................................................................................................................... 71
7.1

VETORES ...................................................................................................................... 71

7.2

Acessando Elementos do Vetor .................................................................................. 72

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

6
7.3

Criar uma matriz de valores reais................................................................................ 74

7.4

A matriz vazia [] ........................................................................................................... 74

7.5

Consulta a valores de uma matriz ............................................................................... 75

7.6

Trabalhando com elementos de uma Matriz .............................................................. 76

7.7

O operador dois pontos ":" ........................................................................................ 77

7.8

Funo eye .................................................................................................................. 80

7.9

Matrizes so dinmicas ............................................................................................... 81

7.10

Operador $ .................................................................................................................. 82

7.11

Operaes de baixo nvel ............................................................................................ 83

7.12

Exerccio resolvido - Matriz ......................................................................................... 85

7.13

VETORES DE STRING .................................................................................................... 88

7.14

ESTUDO DE CASO ........................................................................................................ 89

7.15

EXEMPLOS COM MATRIZES ......................................................................................... 92

7.15.1

Ordenao de Vetores ........................................................................................ 92

7.15.2

Gerando Nmeros Aleatrios.............................................................................. 94

7.15.3

SOLUO DE SISTEMAS DE EQUAES LINEARES .............................................. 95

7.16
8

Instruo BREAK e CONTINUE ..................................................................................... 95

Referncias ........................................................................................................................ 111

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

1 Introduo
Scilab um ambiente voltado para o desenvolvimento de software para resoluo de
problemas numricos.
O tutorial materializa a ensinar usurios iniciantes a desfrutar dos principais recursos do
pacote de software SciLab, que possui poderosas ferramentas matemticas para diversos
nveis, de alunos a profissionais.
Scilab uma linguagem de programao associada a uma rica coleo numrica de algoritmos
que cobrem muitos aspectos de problemas de computao.
Do ponto de vista do software, Scilab uma linguagem interpretada. Isto geralmente acelera o
processo de desenvolvimento, pois o usurio, atingi um alto nvel na utilizao da linguagem,
com um rico conjunto de recursos fornecidos pela biblioteca.
A linguagem Scilab pode compilar dinamicamente e vincular outras linguagens como Fortran e
C: desta forma, bibliotecas externas podem ser utilizados como se fosse uma parte do Scilab
construdo com recursos. Scilab tambm utiliza uma interfaces LabVIEW, uma plataforma e
ambiente de desenvolvimento para uma linguagem de programao visual.
Do ponto de vista de licena, o Scilab um software livre no sentido de que o usurio no
pagar por isso e Scilab um software de cdigo aberto.
Do ponto de vista cientfico, Scilab vem com muitos recursos. No prprio incio do Scilab, os
recursos foram concentrados na lgebra linear. Mas, rapidamente, o nmero de
funcionalidades foi expandido para cobrir muitas reas de computao cientifica. A seguir uma
pequena lista de suas capacidades:
1.
2.
3.
4.
5.

lgebra linear, matrizes esparsas,


Polinmios e funes racionais,
Interpolao, aproximao,
Linear, quadrtica e otimizao no linear,
Estatsticas.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

2 SciLab - Interpretador de Clculos Numricos


2.1 Objetivos
Ferramenta que permite a alunos iniciantes em lgica o exerccio de seu raciocnio num
ambiente prximo da realidade. Como professor desta disciplina e experincia de ensino tenho
notado que para iniciantes nota-se que a abstrao de "rodar o grego", ou seja, de executar
um programa apenas no papel, um grande obstculo (quase intransponvel para alguns) no
aprendizado das tcnicas de elaborao de algoritmos. Por outro lado, submeter um iniciante
aos rigores de uma lgica e linguagem de programao como C, C++, Pascal, tambm
complicadssimo.
O tutorial estende-se por dez captulos. O terceiro tem por finalidade proporcionar, de uma
maneira simples e suave, uma iniciao ao uso do Scilab.
O captulo quatro pretende ser uma transio para aplicaes mais avanadas. Os
conhecimentos de Scilab aqui introduzidos so-no atravs de exerccios simples de aritmtica,
matemtica e fsica elementares, recorrendo a conhecimentos que adquiriu nos ensinos bsico
e secundrio.
A criao, manipulao e anlise de vetores e matrizes preenchem o captulo quinto.
No sexto captulo inicio o leitor na utilizao dos vastos recursos do Scilab para criar grficos,
tirando o mximo benefcio da interface grfica das janelas dos grficos.
No stimo captulo introduzo outros comandos do Scilab, tidos como entre os mais
comumente utilizados.
A programao e os conceitos bsicos sobre o tema, no oitavo captulo.
O captulo nono ocupa-se da programao em Scilab e, finalmente, o decimo apresenta vrios
programas de aplicao.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

3 Interface Grfica do SciLab

figura 01 - Tela principal

Nesta seo, fazemos os nossos primeiros passos com Scilab e apresentar algumas tarefas
simples que podemos realizar com o intrprete.
Existem vrias maneiras de utilizar Scilab e os pargrafos seguintes apresentam trs mtodos:
1. usando o console no modo interativo,
2. usando a funo exec em um arquivo texto,
3. usando processamento em lote.
Apresentamos tambm a gesto das janelas grficas com o sistema de ancoragem.
Por fim, apresentamos duas principais caractersticas do Scilab: localizao do Scilab, que
fornece mensagens e pginas de ajuda no idioma do usurio.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

10

3.1 Console

figura 02 - Console
O primeiro caminho usar o Scilab de forma interativa, digitando comandos no console, fazer
anlise dos resultados e continuar o processo at que o resultado seja calculado.
Este documento feito de modo que os exemplos Scilab que so impressos aqui podem ser
copiados para o console. O objetivo que o aluno aprenda a usar Scilab.
Podemos observar o prompt inicial, representado pelo smbolo -->, que faz a marcao da
linha de comando e o cursor, ao lado do prompt. Nesse espao, podem ser realizados clculos
e compilados programas sem serem salvas alteraes. atravs dele tambm que pode ser
acessado o help do programa, atravs do comando help digitado no prompt, ser aberto uma
janela depois de o comando ser executado (apertando - se a tecla ENTER), contento uma lista
de todas as funes presentes.
Portanto, as operaes aritmticas so digitadas aps o smbolo e em seguida tecla-se
[ENTER].
Exemplo:
-->2+3 [ENTER]
ans =
5.
Outros exemplos:
-->5+6/2
ans =
8.
-->4^2 // 4 elevado a potncia de 2
ans =
16.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

11

3.1.1 Algum conhecimento prvio necessrio


Antes de iniciar algumas sesses convm dispor de algum conhecimento sobre certos tpicos
da linguagem do Scilab.
A forma geral dos comandos do Scilab a seguinte:
Entidade que recebe o
resultado=Funo do Scilab (objeto a que a funo se aplica, atributos).
Um exemplo. Obter o valor do logaritmo natural de 30 e atribui-lo varivel x, com o comando
log.
-->x=log(30)
x=
3.4011974
Outro exemplo. Usando o comando matrix, transformar os nmeros inteiros de 1 a 12, numa
matriz de 4 linhas e 3 colunas e atribui-la a M.
-->M=matrix(1:12, 4,3)
M=
1. 5. 9.
2. 6. 10.
3. 7. 11.
4. 8. 12.
O Scilab ordena os nmeros por colunas, mas pode-se obter uma ordenao por linhas, como
ser visto adiante.
Notou-se que uma sequncia de nmeros inteiros seguidos, tem a forma (Primeiro valor), (dois
pontos:), (ltimo valor).
Se os nmeros no forem inteiros seguidos, o intervalo entre eles introduzido do seguinte
modo:
Primeiro valor /dois pontos/intervalo/dois pontos/ltimo valor
Para criar o vetor linha z com os elementos 1, 1.1, 1.2,.. 2 procedem-se assim:
-->z=1:0.1:2
z=
1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.
Tambm podemos aplicar a funo log ao vetor z e obter outro vetor x dos logaritmos:
-->x=log(z)
x=
column 1 to 7
0. 0.0953102 0.1823216 0.2623643 0.3364722 0.4054651 0.4700036
column 8 to 11

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

12
0.5306283 0.5877867 0.6418539 0.6931472
Se terminarmos uma linha com ponto e vrgula, o Scilab no escreve a sada do comando no
monitor.
O Scilab trata todas as variveis como uma matriz. Um escalar, real ou complexo, visto como
uma matriz 1x1. Um vetor linha com n elementos visto como uma matriz 1xn. Um vetor
coluna como uma matriz nx1. O Scilab lida com matrizes de nmeros, polinmios, booleanas e
cadeias de caracteres (Springs).

3.1.2 Sensibilidade ao tipo de letra


O Scilab distingue entre maisculas e minsculas. Se escrever sin(2) ele devolve-lhe o
valor do seno de um ngulo; se escrever Sin(2) ele diz que a varivel Sin no foi definida.
3.1.3 Ajuda
Os dois comandos mais utilizados para acessar a ajuda sobre o Scilab so:
palavra-chave faz uma pesquisa a partir de uma palavra-chave.
help tpico obtm informao especfica sobre um s comando ou funo.
"A ajuda do Scilab pode abrir-se escrevendo help, a partir do menu "?", clicando o boto com o
mesmo smbolo, pressionando a tecla F1.
Os exemplos das entradas da ajuda esto numa caixa de texto que tm dois botes, no canto
superior direito. O boto da esquerda permite executar imediatamente todo o exemplo; o da
direita copia todo o exemplo para o SciNotes. Muito conveniente e prtico.
3.1.4 Constantes e variveis especiais
Esses so valores pr- definidos que podem ser usados diretamente na programao. A
maioria dessas variveis prefixada com o smbolo de porcentagem (%). Elas podem ser
acessadas atravs da digitao do comando whos no prompt de comando; importante
lembrar que, se o usurio definir alguma varivel antes de digitar whos, ela tambm aparecer
no workspace. Na tabela a seguir, temos a listagem de algumas delas, tal como aparecem na
janela.
%pi 3.1415927
%e 2.7182818
%i raiz quadrada de -1. Por exemplo, para entrar o complexo 2+4i escreve-se 2+4*%i
%inf infinito
%eps preciso mquina do Scilab
%nan Not a number

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

13
Estas variveis no podem ser apagadas, nem alteradas.
Um exemplo:
-->%eps
%eps =
2.220D-16
Temos mais duas importantes variveis: as variveis de localizao de diretrios SCI e PWD.
Para entend-las, digite-as no prompt de comandos.
SCI: diretrio onde o Scilab foi instalado.
PWD: diretrio onde o Scilab foi chamado, isto , de onde seu script est rodando.
Existem ainda funes para manipular arquivos e diretrios. A funo pwd mostra qual o
diretrio est sendo usado e chdir muda o diretrio de trabalho. importante lembrar que,
depois de usada chdir, o valor de pwd muda, mas PWD permanece inalterado.
Todas as variveis criadas durante os trabalhos no ambiente podem ser armazenadas em um
arquivo. O comando save usado para tal, com a seguinte sintaxe:
save (nome_do_arquivo.dat,variveis)
Para recuperar os valores das variveis, usa se o comando load e o comando clear usado
para limpar variveis no protegidas:
load (nome_do_arquivo,variveis)
O comando help, quando digitado sem caracterizao, abre uma listagem com todas as
funes presentes no programa. Se caracterizado, abre a mesma janela, porm com a funo
j aparecendo diretamente.
Alm de armazenar variveis, possvel criar uma memria de clculo,
salvando os comandos digitados em um arquivo, atravs do comando diary:
diary (nome_do_arquivo);
diary (0) // Fecha o comando
3.1.5 Formato dos nmeros
O Scilab no requer o prvio dimensionamento das variveis e separa a parte inteira da
decimal com um ponto. Por efeito os nmeros tm dez posies (incluindo o ponto).
Para aumentar este valor e passar a ter uma varivel longa usa-se format(n); varivel.
Por exemplo:
-->format (15);%pi

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

14
%pi =
3.14159265359
3.1.6 Operadores aritmticos e relacionais

+ soma
- subtrao
* multiplicao
/ diviso
^ potncia. 3^2=9
< menor que
<= menor ou igual que
> maior que
>= maior ou igual que
<> ou ~= diferente de

3.1.7 Prioridade de execuo dos operadores

Alm dos operadores atrs introduzidos, o Scilab tem outros que sero apresentados adiante.
Os operadores agrupam-se em sete grupos de igual prioridade. Se um operador tem maior
prioridade que outro executado primeiro. Os sete grupos de prioridade dos operadores do
Scilab ordenados por ordem decrescente so:
( , .)
(^)
(* , / , \ , .* , ./ , .\ , .*. , ./. , .\. )
(+,-)
( == , > , < , <= , >= ,~= )
(&)
(|)
A prioridade inata aos operadores pode ser alterada com recurso a parnteses.
Por exemplo, 1+2^2=5 e

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

15
(1+2)^2 =9.
Do mesmo modo, 18/2+4=13 e
18/(2+4)=3.
3.1.8 Funes bsicas

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

16

3.1.8.1 Alguns exemplos


-->exp (1)
ans =
2.7182818
-->rand
ans =
0.0683740
Criemos uma matriz 3x3, de nmeros aleatrios com o comando rand:
-->A=rand (3,3)
A=
0.5608486 0.1985144 0.2312237
0.6623569 0.5442573 0.2164633
0.7263507 0.2320748 0.8833888
Agora achemos a raiz quadrada de cada elemento da matriz com o comando sqrt:
-->C=sqrt (A)
C=
0.7488983 0.4455495 0.4808573
0.8138531 0.7377380 0.4652561
0.8522621 0.4817414 0.9398876
-->D=gsort (A)
D=
0.8833888 0.5608486 0.2312237

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

17
0.7263507 0.5442573 0.2164633
0.6623569 0.2320748 0.1985144
3.1.9 Na linha de comandos
Para se mover o cursor na linha de comandos usar as teclas com setas como num processador
de texto. As teclas home (ou a combinao Ctrl-a) e end (ou a combinao Ctrl-e) levam ao
princpio e fim da linha respetivamente. As teclas de apagar texto usa se como no processador
de texto.
Ctrl+p chama a ltima linha de comando introduzida.
Se colocarmos o cursor no prompt e pressionarmos a tecla U a linha ou qualquer regio da
janela de comandos pode ser selecionada usando o mouse, copiada e colada no prompt ativo
ou noutro documento.
Uma linha de comandos que termine com um ponto e vrgula (;) no mostra ou no ecoa o
resultado na janela de comandos. Sem ponto e vrgula ecoa a operao, como se ilustrou atrs.
Uma alternativa a estas instrues usar o menu Edit e clicar em History.
Podem-se inserir comentrios precedidos de //.
Exemplo de insero de um comentrio, sem sada do resultado (; no fim do comando):
-->exp (1); //exponencial de 1
Num comando com vrias linhas, estas terminam com trs pontos, at ao Enter final. Numa
linha, pode-se introduzir mais de um comando, separados por ponto e vrgula.
-->a=2; b=5; z=a +b
z=
7.
Nos comandos anteriores crimos trs variveis, a, b, z. Os nomes de variveis podem comear
por uma letra ou %, seguido de outras letras, algarismos, ou caracteres especiais, como #. No
devem ter mais de 24 caracteres.
3.1.10 Manipulao e informao sobre o espao de trabalho
Quando trabalhamos no Scilab, alm das janelas visveis, o software guarda numa rea da
memria, chamada workspace (espao de trabalho) informao sobre as variveis e funes
existentes. Muitas vezes, em programas muito extensos, necessrio verificar que informao
existe no espao de trabalho para evitar repeties. Para esta finalidade, o Scilab disponibiliza
os seguintes comandos:
clc() limpa a janela dos comandos.
clc(n) limpa n linhas acima da atual linha de comandos e move o cursor para l.
clear() remove todas as variveis da memria.
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

18
clear x y remove as variveis x e y da memria.
whos lista as variveis longas.
who lista as variveis.
3.1.11 Lidar com pastas
Para lidar com ficheiros (abrir, guardar), mudar de diretrio e imprimir, a forma mais comum
de faz-lo usar o menu file, como num processador de texto, e selecionar o comando
desejado.

3.2
3.3 Editor - SciNote

figura 03 - SciNote - Editor


Scilab, a partir da verso 5.3 fornece um editor para editar scripts facilmente. A Figura 3
apresenta o editor durante a edio do "Ol Mundo!".
O editor pode ser acessado a partir do menu do console, sob Aplicativos > SciNote, ou do
console, como apresentado a seguir.
-> Editor ()
Este editor, gerncia vrios arquivos ao mesmo tempo, como apresentado na figura 3, onde
editamos vrios arquivos, ao mesmo tempo.
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

19
Existe muitas caractersticas que vale a pena mencionar neste editor. A maioria dos recursos
mais usados esto sob o menu Executar.
1. Carrega para o Scilab, executa os comandos do arquivo atual, como se fizssemos uma
copiar e colar. "Isto implica que as declaraes que no terminam com o ponto e
vrgula";" , o processo ir produzir uma sada no console.
2. Avalia o arquivo, executa as instrues que esto atualmente selecionadas.
3. Executa o Arquivo no Scilab, executa arquivo, como se ns usamos a funo exec. Os
resultados que so produzidos na console so apenas aqueles que esto associados
com as funes de impresso, tais como, por exemplo, disp.
particularmente adequado para uma sequncia de comandos interligados num algoritmo
com um determinado propsito, programas e funes definidas pelo desenvolvedor. Aqui as
instrues so previamente escritas no SciNotes o processador de texto do SciLab.
Trabalhar com o SciNotes no oferece nenhuma dificuldade a quem esteja familiarizado com
um processador de texto. Se passar o mouse sobre os seus cones surge a informao da
funo de cada um (abrir uma nova entrada de texto, abrir, abrir um arquivo C, salvar, etc.).
Podem ter-se vrios arquivos abertos e passar de um para outro, clicando o separador
respectivo.
3.3.1 Docking - Ancorar
Vamos abordar um procedimento de arranjo da interface grfica, denominado ancoragem
(docking). Como se pode verificar na figura 4, a janela do SciNotes uma barra azul. Se clicar
nela e arrastar, o SciNotes pode ser alojado no espao da console. Ali alojado, a mesma barra,
direita, passa a ter uma seta, que permite tirar o SciNotes para fora, e torn-lo novamente
uma janela independente, e o usual boto (X) de fechar, que permite encerrar o SciNotes.
Ver as figuras 3 e 4.

figura 04 - SciNote sobre o Console

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

20

figura 05 - SciNote ancorado no console

3.4 Salvar e imprimir todo o trabalho na janela de comandos


O ambiente de trabalho pode ser guardado, por exemplo, num disquete, no arquivo
meuficheiro com o comando save, ou clicando no menu FileSave.
-->save('A:\\meuarquivo.sci')
Para carregar, ler, o arquivo, clicar no menu FileLoad, na janela do console, escolher a opo
ver todos os arquivos e dar um duplo clique no arquivo pretendido.
Na janela do Scilab aparece:
-->load('D:\meuarquivo.sci');disp('file loaded');
file loaded
Para imprimir toda a sesso de trabalho presente na janela de comandos do Scilab, basta clicar
no cone que representa uma impressora.
Sugerimos, mais uma vez, que o aluno no faa uma leitura passiva deste tutorial, e sim
execute os comandos, nele apresentado, na janela do Scilab, e procure fazer clculos que j
anteriormente realizou numa calculadora, o que permite controlar os seus resultados.
Leitor, na sociedade atual, o conhecimento sobre tudo performativo.
Sabe quem sabe fazer.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

21

4 Programando com SciLab


Este captulo pretende ser uma transio para aplicaes mais avanadas. Para no
apresentarmos os conceitos no vazio, vamos servir-nos de exerccios simples de aritmtica,
matemtica e fsica elementares, recorrendo a conhecimentos que adquiriu nos ensinos
primrio e secundrio. As finalidades deste captulo so:
Desenvolver alguns procedimentos j anteriormente ilustrados.
Fazer operaes aritmticas com escalares
Utilizar funes trigonomtricas.
Criar um vetor simples e utiliz-lo como objeto de algumas funes.
Criar grficos com procedimentos simples.
Calcular permutaes, arranjos e combinaes.
Criar uma funo que permite obter permutaes, arranjos e combinaes.
Criar funes on-line.
Resolver um sistema de equaes lineares.
Iniciar-se na utilizao das cadeias de caracteres (Sting).
Criar e analisar uma funo polinomial.
Realizar operaes aritmticas com polinmios.
Limites.
Estatstica elementar.
Probabilidades elementares.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

22

4.1 Elementos bsicos da linguagem


Scilab uma linguagem interpretada, o que significa que podemos manipular as variveis em
uma forma muito dinmica. Nesta seo, apresentamos as caractersticas bsicas da
linguagem, ou seja, vamos mostrar como criar uma varivel real, e o que varivel real pode ser
aplicada em uma funo matemtica. Se Scilab prover apenas esses recursos, seria apenas
uma super calculadora de mesa. Felizmente, muito mais, e este o tema das demais sees,
onde vamos mostrar como gerenciar outros tipos de variveis, isto , valores booleanos,
nmeros complexos, inteiros e strings.
Parece estranho primeira vista, mas vale a pena afirmar desde o incio: em Scilab, tudo uma
matriz. Para ser mais preciso, devemos escrever: tudo real, complexo, boolean, string, inteiro e
variveis polinomiais so matrizes. listas e outras estruturas de dados complexos (tais como
tlists e mlists) no so matrizes (mas pode conter matrizes). Estas estruturas de dados
complexos no sero apresentadas neste documento
4.1.1 Criando varivel Real
No exemplo a seguir, criamos e definimos as variveis reais x para 1 e executamos uma
multiplicao sobre esta varivel. No Scilab, o operador "=" significa que queremos definir a
varivel, o lado esquerdo associado ao valor da direita. (o operador de comparao, est
associado a sintaxe do "==" operador).
-> x = 1
x=
1.
-> x = x * 2
x=
2.
O valor da varivel exibido cada vez que uma instruo executada. O comportamento pode
ser suprimido se a linha termina com o ponto e vrgula ";" , como no o exemplo a seguir.
-> y = 1;
-> y = y * 2;
Todos os operadores algbricos comuns so apresentados na figura 6, estando disponveis no
Scilab. Nota-se que o operador representado pelo chapu caractere "^", de modo que a
processo x2 no Scilab realizada pela expresso "x ^ 2" ou equivalentemente pela "x ** 2". O
apstrofo "'" operador ser apresentado em mais profundidade na prxima seo, que
apresenta os nmeros complexos.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

23

figura 06 - Operadores algbricos


O smbolo de atribuio = no significa igualdade matemtica, uma vez que o comando de
atribuio i = i+1 vlido, mas no representa igualdade matemtica.
Exemplo: digite estes comandos no console:
-->a = 2 // Atribui 2 para varivel a
a=
2.
-->b = 4 // Atribui 4 para varivel b
a=
4.
-->area = a*b // Atribui o produto de a e b,
area = // para varivel area
8.
-->b = b+1 // Incrementa uma unidade
b = // na varivel b
5.

4.1.2 Nome de varivel


Os nomes de variveis podem ser to longo como o usurio quiser, mas apenas primeiros 24
caracteres so tomados em considerao no Scilab. Para consistncia, devemos considerar
apenas o nome composto pelos 24 caracteres. Todas as letras ASCII de "a" a "z", de "A" a "Z" e
os dgitos de "0" at "9" so permitidos, e os caracteres "%", "_", "#", "!", "$", "?". Note que
embora os nomes de variveis, cuja primeira letra "%", tem um significado especial em
Scilab, como vimos que representa as variveis pr-definidas em matemticas.
Scilab sensvel caso (case sensitive), o que significa que letras maisculas e as letras
minsculas so consideradas diferentes para Scilab. No script a seguir, definimos as duas
variveis A e a e verifique que as duas variveis so consideradas diferentes para Scilab.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

24
-> A = 2
A=
2.
-> a = 1
a=
1.
-> A
A=
2.
-> a
a=
1.
-> c=A+a
c=
3
4.1.3 Comentrio e linha de continuao
Qualquer linha que comea com duas barras "/ /" considerado por Scilab como um
comentrio e ignorada. No h possibilidade de comentar um bloco de linhas, como por
exemplo com o "/ * ... * /" comentrios na linguagem C.
Quando uma instruo executvel longa demais para ser escrito em uma nica linha, as
linhas subseqentes so chamados de linhas de continuao. No Scilab, qualquer linha que
termina com dois pontos considerada ser o incio da prxima linha de comando.
Exemplos:
-> / / Este o meu comentrio.
-> x = 1 ..
->+ 2 ..
-> +3 ..
-> +4
x=
10.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

25
4.1.4 Variveis matemticas pr-definidas
No Scilab, diversas variveis matemticas so variveis pr-definidas, cujos nomes comeam
com um carter "%" por cento. As variveis que tm um significado matemtico esto
resumidos na figura 7.

figura 07 - variveis pr-definidas


No exemplo a seguir, usamos a varivel %pi para fazermos o clculo da expresso ;

-> c = cos (% pi)


c=
- 1.
-> s = sin (% pi)
s=
1.225D -16
-> c ^ 2 + s ^ 2
ans =
1.

4.1.5 Expresses aritmticas


Os operadores aritmticos combinam nmeros e variveis para formar expresses aritmticas.
Exemplos:
A+B*C
(NOTA1+NOTA2)/2
1/(a^2+b^2)
Alm dos operadores aritmticos podemos usar funes matemticas. Exemplos:
2+3*cos(x)

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

26
X^(2*sin(y))
2+3*tan(x)+K^2

4.1.6 Funes Matemticas Comuns


As principais funes matemticas do Scilab so mostradas na figura 8. O nmero PI () a
base do logaritmo natural e = 2,718281828... so representadas pelas variveis especiais %PI e
%e, respectivamente.

figura 8 - Matemtica
Exemplos:
-->cos(2*%pi) // coseno de 2 vezes PI
ans =
1.
-->%e^2 // 2,718281828 ao quadrado
ans =
7.389056098931
-->abs(-5) // valor absoluto
ans =
5.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

27
-->modulo(8,3) // Resto da diviso entre 8 e 3
ans =
2.
-->modulo(6,3)
ans =
0.
-->sign(-4)
ans =
- 1.
-->sign(5)
ans =
1.
4.1.7 Funes de Arredondamento
As principais funes de arredondamento do Scilab so mostradas na figura 9.

figura 9 - funes de arredondamento


Exemplos:
-->a = 34.885;
-->fix(a) // trunca a parte fracionria
ans =
34.
-->round(a) // arredonda para o inteiro mais prximo
ans =
35.
-->ceil(3.1) // arredonda para mais.
ans =
4.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

28
Outros exemplos so mostrados no quadro a seguir:

4.1.8 Variveis Booleanas


Variveis booleanas podem armazenar valores verdadeiro ou falso. No Scilab, verdade
escrito com %t ou %T e falso escrito com %f ou %F. A Figura 10 apresenta a comparao de
vrias operadores, que esto disponveis no Scilab. Esses operadores retornam valores
booleanos e tomam como argumentos de entrada todos os tipos de dados bsicos (ou seja,
nmeros reais e complexos, inteiros e literais).

figura 10 - operao de variveis e operadores


No exemplo a seguir, realizamos alguns clculos algbricos com Scilab booleanos.
booleans.
-->a=%T
a=
T
-->b = ( 0 == 1 )
b=
F
-->a&b
ans =
F

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

29
4.1.9 Nmeros complexos
Scilab fornece nmeros complexos, que so armazenados como pares de nmeros de ponto
flutuante.
A varivel pr-definida % i representa o nmero matemtico imaginrio i que satisfaz a
equao = -1. Todas as funes elementares previamente apresentadas antes, como sin, por
exemplo, so sobrecarregados para nmeros complexos. Isto significa que, se for feito calculo
com nro. complexo a sada ser nro. complexo. A Figura 11 apresenta funes que trata
nmeros complexos.

figura 11 - funes para nro. complexo


No exemplo a seguir, vamos definir a varivel x para 1 + i, e realizar vrias operaes bsicas
sobre x, como recuperar suas partes real e imaginria. Observe, tambm, como o operador
apstrofo, indicado por " ' ", usado para calcular o conjugado de um nmero complexo.
-->x= 1+ %i
x=
1. + i
--> isreal (x)
ans =
F
-->x'
ans =
1. - i
-->y=1- %i
y=
1. - i
-->real (y)
ans =
1.
-->imag (y)
ans =
- 1.
Ns finalmente verificamos que a igualdade:

(1 + i) (1 - i) = 1 -

=2

-->x*y
ans =2.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

30
Mais exemplos:

4.1.10 STRINGS
Strings so usados para toda e qualquer informao composta de caracteres alfanumricos
e/ou caracteres especiais (exemplo, #, $, &, %, ?, !, @, <, ~, etc). Os strings so envolvidos
por aspas duplas ou simples.
Exemplos:
-->a = "abcd"
a=
abcd
-->b = 'efgh'
b=
efgh
-->c = "Maria e Jose"
c=
Maria e Jose
Um das atividades mais comuns em programao a concatenao de strings. Concatenao
a juno de dois ou mais strings. Isto pode ser feito com o operador +.
-->a + b // Concatena abcd com efgh
ans =
abcdefgh
-->n = "Pedro"
n=
Pedro
-->m = "Paulo"
m=
Paulo
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

31
-->m + n // Concatena Paulo com Pedro sem ans = // espao entre eles.
PauloPedro
-->m + " e " + n // Concatena Paulo com Pedro
ans = // inserindo espaos entre eles.
Paulo e Pedro
Muitas vezes precisamos armazenar informaes que contm as aspas. Isto pode ser feito
repetindo as aspas.
Exemplos:
-->n = "O orculo disse ""conhea-te a ti mesmo"" para Socrtes."
n=
O orculo disse "conhea-te a ti mesmo" para Socrtes.
Algumas funes para manipulao de strings so mostradas da figura 12.

figura 12 - funes que manipulam strings


Exemplos:
-->m = "Pedro";
-->length(m) // Comprimento do string "Pedro"
ans =
5.
Para concatenar nmeros com strings use a funo string().
-->a = "a camisa " + string(10)
a=
a camisa 10
Para somar uma string com um nmero use evstr():
-->a = "12" + "34"
a=
1234
-->evstr(a) + 10
ans =

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

32
1244.

4.1.11 O Comando Clear


O comando clear apaga todas as variveis do Espao de Trabalho criadas pelo usurio.
Exemplo:
-->clear // Apaga todas as variveis
O comando clear seguido de nome de uma varivel apaga somente a varivel:
-->a = 2;
-->b = 3;
-->c = 4;
-->clear b; // Apaga somente b deixando as // outras variveis intactas.
O comando who mostra todas as variveis do Espao de Trabalho.
4.1.12 Os Comandos Save e Load
As variveis so apagadas quando o usurio termina a execuo do Scilab. Para us-las da
prxima vez que executar o Scilab, voc deve salva-las com o comando save (arquivo).
Por exemplo,
-->a = 2;
-->b = 3;
-->c = 4;
-->save("dados.dat");
As variveis foram salvas no arquivo dados.dat. O comando load(arquivo) usado para
recuperar variveis que foram salvas no arquivo.
Por exemplo,
-->clear // apaga todas as variveis
-->a+b // variveis a e b no existem
!--error 4 // porque foram apagadas
undefined variable : a
-->load("dados.dat"); // recupera as variveis a, b e c
-->a+b // Ok!
ans =
5.
4.1.13 FORMATO DE VISUALIZAO DOS NMEROS
O comando format modifica a quantidade de dgitos com que os nmeros so mostrados no
Scilab. Por exemplo, o comando
--> format(5)
far com que todos os nmeros sejam visualizados em 5 posies (incluindo o ponto decimal e
um espao para o sinal).
Por exemplo,

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

33
-->sqrt(3)
ans =
1.73
Para aumentar os nmeros de posies para 16, usa-se
-->format(16)
-->sqrt(3)
ans =
1.7320508075689
A raiz de 3 foi mostrada ocupando 16 posies (sendo uma posio para o ponto, um espao
reservado para o sinal, uma posio para a parte inteira e 13 posies para a parte fracionria).
O comando format ('e') mostra os nmeros em notao cientfica.
Por exemplo,
-->format('e')
-->2*%pi/10
ans =
6.283185307E-01
6.283185307E-01 significa :
Para retornar ao formato inicial usa-se,
-->format('v')
que chamado de formato de varivel. Vejamos outras formas de usar o comando
format:
-->format('v',10)
mostra os nmeros em formato de varivel com 10 posies.
-->format('e',8)
mostra os nmeros em notao cientfica com 8 posies.
4.1.14 Varivel ANS
Sempre que fazemos um clculo e no armazenar o resultado em uma varivel de sada, o
resultado armazenado na varivel padro ANS. Uma vez que definido, podemos usar esta
varivel como qualquer outra varivel Scilab.
Na sesso seguinte, calculamos exp (3) de modo a que o resultado armazenado na varivel
ans. Ento ns usamos o seu contedo como uma varivel regular.
-->exp (3)
ans =
20.08553692318766792368
-->t = log(ans)
t=
3.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

34
Em geral, a varivel ans deve ser utilizada apenas em um processo interativo, para progredir
no clculo sem uma nova varivel.
Na seo a seguir alguns exemplos, para serem feitos e treinados.

4.2 Exerccios
4.2.1 Fazendo operaes com nmeros reais.
1. Criar 3 varveis (a,b,c) e depois, calculamos uma expresso numrica com elas.
A expresso numrica ser:

2. Criemos um vetor linha cujos elementos so a,b,c, e depois calculamos a soma e o


produto dos seus elementos (comandos sum, prod, max).

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

35

3. A soma dos quadrados dos nmeros 3.5, 2/3, 0.5 obtm-se facilmente:

4. Criemos o vetor k e vamos distinguir os valores positivos dos negativos, com o


comando sign.

5. Os valores absolutos dos elementos do vetor k obtm-se com abs.

6. O comando int proporciona a parte inteira de um nmero:

7. Por sua vez, o comando modulo proporciona o resto da diviso de um nmero por
outro:
modulo (dividendo, divisor)

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

36

8. Podemos pedir a dimenso do vetor k, recorrendo ao comando size

9. Ilustremos o uso do comando round.


-->round(3.1)
ans =
3.
-->round(3.7)
ans =
4.
10. Criemos o vetor z utilizando os comandos ceil e floor:
-->z=[floor(3.7) 3.7 ceil(3.7)]
z=
3. 3.7 4.
11. Calcular o volume V de um cilindro com o dimetro do 5 cm e a altura de 13 cm.
-->V=%pi*(5/2)^2*13
V=
255.25440310417070577387
12. Lidemos agora com nmeros complexos, seguindo um procedimento semelhante.
Sabidos os valores de a, b e c queremos calcular a expresso:

-->a=-5+3*%i; b=-2+3*5*%i;c=6-2*%i;
-->A=(a+2*b)^3/(c*b-a)
A=
- 213.51146 - 369.06334i
13. Alternativamente podemos usar o comando imult:
-->2+imult(5)

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

37
ans =
2. + 5.i
14. Separemos a parte real da imaginria, de A, com os comandos real e imag:
-->real(A)
ans =
- 213.51146
-->imag(A)
ans =
- 369.06334

15. O que so variveis?


16. Quais os tipos primitivos de informao manipuladas pelo Scilab?
17. Assinale os identificadores (nomes de variveis) vlidas:
a) (X)
b) XMU2
c) AH!
d) NOTA1
e) 5NOTA
f)"NOTA1"
g) A[4]
h) A&B
i) A+B
j) I00001
k) NOTA/2
l) PEDROEPAULO
18. Escreva as declaraes aritmticas para o clculo das seguintes frmulas:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

38

19. Considere as variveis A=11, B=5, C=-4 e D=2. Calcule as expresses abaixo.
a) 3*modulo(A,3)-C
b) 2^(2*abs(C))/8
c) (A/B-fix(A/B)+sign(C)+2.8)^(15/B)
d) sqrt(cos(A)^2+sin(A)^2) + sin(D*%pi/4)
e) (A+C)/A * round(sign(C)+D/4)-fix(D/1.5)
20. Qual a primeira operao a ser executada em cada um dos comandos abaixo.
a) R + S - W d) X + Y + C * D
b) W1 + W2 / C ^ 2 e) A + D + B ^ 2 + E * 3
c) NOTA + MEDIA/N f) A * B / C * D
21. (Precedncia de operadores) Quais os resultados dos calculos a seguir (pense sobre isto
antes de fazer o SciLab) ?
2*3+4
2+3*4
2/3+4
2+3/4
22 (Pareteses) Quais os resultados dos calculos a seguir (pense sobre isto antes de fazer o
SciLab) ?
2 * (3 + 4)
(2 + 3) * 4
(2 + 3) / 4
3 / (2 + 4)

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

39
2.3 (Exponenciao) Quais os resultados dos calculos a seguir (pense sobre isto antes de fazer
o SciLab) ?
1.23456789 d10
1.23456789 e10
1.23456789e -5
2.4 (Funes) Quais os resultados dos calculos a seguir (pense sobre isto antes de fazer o
SciLab) ?
sqrt (4)
sqrt (9)
sqrt ( -1)
sqrt ( -2)
exp (1)
log(exp (2))
exp(log (2))
10^2
log10 (10^2)
10^ log10 (2)
sign (2)
sign ( -2)
sign (0)
2.4 (Trigonometria) Quais os resultados dos calculos a seguir (pense sobre isto antes de fazer o
SciLab) ?
cos (0)
sin (0)
cos(%pi)
sin(%pi)
cos(%pi /4) - sin(%pi /4)

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

40

5 Comandos de Entrada/Sada e Scripts


Veremos como fazer e executar comandos em sequncia no SciLab.

5.1 Comandos de digitao (ENTRADA) de dados


Para podermos solicitar dados ao usurio via teclado usando o comando input que tem duas
formas bsicas (uma para nmeros e outra para strings). A primeira delas, usada para solicitar
dados numricos, tem a seguinte forma:
<varivel> = input(<string> );
Esta funo mostra o texto <string> e em seguida solicita que o usurio digite um nmero. Por
fim, o nmero digitado atribudo a <varivel>.
Exemplo:
-->x = input ("Digite um nmero")
Digite um nmero-->10
x=
10.

A segunda forma do comando input usada para solicitar dados do tipo string ao usurio. Sua
forma :
<varivel> = input(<string>,"s");
Exemplo:
-->a = input("Digite alguma coisa","s")
Digite alguma coisa-->Ol
a=
Ol

5.2 Comandos de sada (MOSTRAR) de dados


Comandos de sada de dados fornecem ao usurio um meio de visualizar dados e o resultado
de algum processamento. A forma mais simples de visualizar dados no Scilab suprimir o
ponto e vrgula no final do comando como mostrado.
-->x = 3;
-->y = 4;
-->r = sqrt(x*x+y*y) // Com a omisso do ponto e virgula
r = // o resultado exibido
5.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

41

5.2.1 A FUNO DISP


A funo disp () outra maneira de exibir dados.
Por exemplo,
-->v0 = 2;
-->a = 4;
-->t = 3;
-->v = v0+a*t;
-->disp(v) // disp no mostra o nome da varivel
14.
Este exemplo concatena dois strings e exibe o resultado:
-->nome = "Maria";
-->disp("Seu nome " + nome)
Seu nome Maria
A funo disp freqentemente usada em conjunto com a funo string que converte um
nmero em string.
Por exemplo,
-->disp("A velocidade final " + string(v))
A velocidade final 14
Use a funo format para formatar a sada de dados numricos.
5.2.2 A FUNO PRINTF
printf um clone do comando de mesmo nome da linguagem de programao C.
A funo printf a forma mais flexvel de exibir dados porque produz uma sada formatada.
Por exemplo,
-->printf("Al mundo\n");
Al mundo
O caracter \n (chamado de new line) avisa ao comando printf para gerar uma nova linha.
Mais precisamente, \n move o cursor para o comeo da linha seguinte.
Por exemplo,
colocando \n aps o string Al faz com que printf gere uma nova linha aps Al:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

42

-->printf("Al\nmundo");
Al
mundo

5.2.2.1 A forma geral do comando printf :


printf(<formato>,<lista de dados> );
<formato> uma string descrevendo a forma com que a lista de dados ser exibida.
Exemplo:
-->A = 2;
-->printf("A varivel A contm o valor %g\n",A);
A varivel A contm o valor 2
Osmbolo %g (chamado de caractere de formatao) indica como cada varivel da lista de
dados ser exibido dentro da string de formatao <formato>. Neste ltimo exemplo, %g
substitudo pelo valor da varivel A no momento da impresso. No seguinte exemplo, as
variveis A e B substituiro os caracteres de formatao %g nas posies correspondentes:
-->A = 8/4;
-->B = A + 3;
-->printf("Os valores calculados foram %g e %g\n",A,B);
Os valores calculados foram 2 e 5
Mais exemplos:
-->printf("A = %g B = %g",A,B);
A=2B=5
-->printf("A = %g\nB = %g\n",A,B);
A=2
B=5
-->F = "Os valores calculados foram %g e %g";
-->printf(F,A,B);
Os valores calculados foram 2 e 5
Se a varivel for do tipo string, usa-se o caractere de formatao %s em vez de %g.
Por exemplo:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

43

-->nome = "Joao";
-->altura = 1.65;
-->printf("A altura de %s %g",nome, altura);
A altura de Joao 1.65

5.3 ARQUIVOS DE SCRIPTS


Digitamos comandos no console do Scilab para resolver problemas simples. Mas, se o nmero
de comandos para digitar grande, ento melhor salvar os comandos em um arquivo de
script.
Um arquivo de script um arquivo que contm um script, isto , uma sequncia de comandos
para ser executada pelo computador. Os comandos do arquivo de script so executados
automaticamente pelo Scilab da mesma forma que voc faria se os tivesse digitado no console.
Arquivos de script so arquivos de texto puro ou pleno, isto , arquivos sem formataes como
negrito, itlico e sublinhado e, por causa disso, eles podem ser criados em qualquer editor de
texto. O Scilab j contm um editor de textos (chamado SciNotes) que facilita a criao de
arquivos de script. Por isso recomendvel utilizar o SciNotes em vez de algum outro editor de
texto. Mas se voc quiser usar um editor diferente, como o Microsoft Word, tenha o cuidado
de salvar os arquivos como um arquivo texto. Caso contrrio, se o arquivo for salvo no formato
nativo (e.g., o formato doc doWord) podero conter caracteres especiais que causaro erros
no Scilab.
5.3.1 CRIANDO ARQUIVOS DE SCRIPT
Para criar arquivos de scripts, selecione a opo Aplicativos SciNotes ou clique no
cone correspondente na barra de ferramentas.

figuras 13 - chamada ao editor SciNotes

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

44
Criamos um arquivo de script, digitando comandos no editor:

figura 14 - editando um script

O prximo passo salvar o arquivo de script. Selecione a opo ARQUIVO SALVAR.


Digite o nome farenheit.sce (os nomes de arquivos de script possuem extenso .sce) e
selecione a pasta de sua preferncia para salvar o arquivo.

figura 14 - salvando script

O usurio pode criar novos arquivos de script selecionando a opo ARQUIVO NOVO. Os
passos para executar um script so mostrados na seo seguinte.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

45

5.3.2 EXECUTANDO ARQUIVOS DE SCRIPT


Para executar um script, clique no seguinte cone da barra de ferramentas:

figura 15 - executando um script


Alternativamente, pode-se executar um script teclando Ctrl+Shift+E, ou seja, teclando nas
teclas Ctrl, Shift e E simultaneamente ou selecionando a opo Executar do editor. Uma
terceira forma de executar um script a mostrado na sequncia.
A Figura 16 mostra a execuo do script farenheit.sce criado na Seo anterior. O Scilab
solicitou um nmero para fazer a converso de graus Farenheit em graus Celsius.
Digitou-se 50 e depois ENTER:

figura 16 - execuo do script

Se houver erros de digitao no script, ento poder ocorrer erros na sua execuo. Neste
caso, retorne ao editor e corrija o erro. Em seguida, siga os mesmos passos descritos
anteriormente: salve o script (selecione ARQUIVO SALVAR) e ento execute o script (tecle
Ctrl+Shift+E ou selecione EXECUTAR).

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

46

5.3.3 Exemplos para exercitar

Exerccio resolvido 1. Escreva um programa Scilab para calcular a distncia entre dois pontos
.x1; y1/ e .x2; y2/ no plano cartesiano. Os pontos so digitados pelo usurio.
A distncia entre dois pontos dada por:

Soluo:

Ao executar este script no Scilab. O resultado de uma possvel execuo seria:

Exerccio resolvido 2. Elabore um programa Scilab para calcular a resistncia equivalente entre
dois registores R1 e R2 em paralelo. Lembre-se que a resistncia equivalente entre dois
registores em paralelo dado por:

esta formula, tambm pode ser escrita

Soluo

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

47

5.3.4 Outra maneira de executar um script


Uma forma alternativa de executar scripts atravs do comando exec. O comando exec tem a
forma:
exec(<script> )
Como exemplo, considere o script farenheit.sce descrito na seo acima.
-->exec("farenheit.sce");
Digite os graus Farenheit-->50
Equivale a 10 graus Celsius.
AVISO: este comando funciona somente se o arquivo de script estiver no diretrio atual do
scilab caso contrrio ocorrer um erro como este:
-->exec("farenheit.sce");
!--error 241
O arquivo "farenheit" no existe.
Resolva este problema alterando o diretrio atual: selecione ARQUIVO ALTERARODIRETRIO
ATUAL e depois escolha a pasta de farenheit.sce (i.e., c:nexemplos) na caixa de dilogo a eguir:

figura 17 - alterando diretrio


Agora o script deveria rodar sem problemas.
Alternativamente, o diretrio atual pode ser alterado com o comando chdir (ou
abreviadamente cd):

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

48
-->cd c:\exemplos; // altera o diretrio corrente
-->exec("farenheit.sce"); // executa o script
Digite os graus Farenheit-->50
Equivale a 10 graus Celsius.
Use o comando pwd para visualizar o diretrio de trabalho do Scilab:
-->pwd
ans =
c:\exemplos
Mesmo pertencendo a uma pasta diferente do diretrio atual, um script ainda pode ser
executado, desde que fornecido o caminho (do ingls, path) da pasta do script. Por
exemplo:
-->cd c:\outrodir // alterao do diretrio atual
-->exec('c:\exemplos\farenheit.sce');
Digite os graus Farenheit-->50
Equivale a 10 graus Celsius.
O comando unix_w permite a execuo de qualquer comando comum do DOS (no windows)
ou do shell (no Linux/Unix). Por exemplo, o comando DIR do DOS (utilizado para visualizar o
diretrio de trabalho) pode ser executado do seguinte modo:
-->unix_w('dir')

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

49

6 Estruturas de controle
Os programas desenvolvidos no captulo anterior basicamente liam (e/ou escreviam) variveis
e avaliavam expresses aritmticas atribuindo o resultado a uma varivel. Os comandos de tais
programas eram executados sequencialmente na ordem em que foram escritas, isto , de cima
para baixo e da esquerda para a direita. Vale dizer, porm, que bem poucos programas teis
podem ser construdos desta forma. De fato, necessrio adicionar dois mecanismos para
tornar os programas flexveis e poderosos:
1. As estruturas de seleo;
2. As estruturas de repetio.

6.1 Estruturas de seleo


So teis para implementar situaes que requerem a execuo de aes alternativas que
dependem de certas condies.
Exemplos:
Se a nota do aluno for maior que 7 ento avise que ele foi "aprovado"; caso contrrio
informe que ele est em recuperao.
Se a lmpada est queimada compre uma nova lmpada; caso contrrio acenda a
lmpada para ler o livro.
Compre ou venda aes da bolsa de valores de acordo se ndices econmicos sobem
ou descem, respectivamente.
Portanto, a estrutura de seleo um mecanismo para selecionar entre caminhos alternativos
de execuo comandos.

6.2 Estrutura de repetio


um mecanismo para repetir a execuo de uma sequncia de comandos. Os comandos que
implementam estes mecanismos so chamados de comandos de controle. So exemplos de
comandos de controle: IF, FOR e WHILE mostrados adiante. Uma estrutura de controle
formado por um comando de controle juntamente com o conjunto de comandos cuja
execuo ele controla.
Com estas trs estruturas:
1. Sequncia,
2. Seleo,
3. Repetio
possvel construir qualquer programa de computador (esta a tese principal da chamada
programao estrutura).
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

50
A estrutura de seleo ser estudada neste captulo e a estrutura de repetio no captulo
seguinte. O uso das estruturas de seleo requer o domnio das expresses booleanas
estudadas na seo seguinte.

6.3 EXPRESSES BOOLEANAS


O termo booleano, largamente usado na computao, uma homenagem ao matemtico e
lgico George Boole.
Da mesma forma que avaliar uma expresso aritmtica produz um valor numrico, avaliar
expresses booleanas produz um valor lgico (verdadeiro ou falso nas so tambm chamadas
de expresses lgicas). Uma expresso booleana simples usa os operadores relacionais para
comparar expresses aritmticas:

Por exemplo, suponha que a varivel A contm o valor 5. Ento temos:


A > 0 Verdadeiro
A == 3 + 1 Falso
2*A <> 5/10 + A Verdadeiro
As expresses booleanas podem ser combinadas usando os operadores booleanos:

Os operadores so definidos pelas seguintes tabelas (tambm chamadas de tabelas verdade):

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

51
Erro comum de programao: programadores principiantes costumam confundir o operador
Igual a (==) com o operador de atribuio (=).
Por exemplo, considere as seguintes atribuies A = 5, B = 1, C = 2, D = 8 e E = 3
Ento temos:
A > B | D > E Verdadeiro
~(A > B) Falso
A + 3 == 8 & A > B Verdadeiro

6.4 VARIVEIS BOOLEANAS


Da mesma forma que contedo de uma varivel pode ser um valor numrico ou um string, ela
pode conter um valor booleano (verdadeiro ou falso). Assim,
C = 1 > 2 C um varivel booleana com valor falso.
A = C | 2 > 10 A um varivel booleana com valor falso.
No Scilab, duas variveis especiais %t (do ingls, true) e %f (do ingls, false) representam o
valor verdadeiro e falso, respectivamente.
Exemplos:
B = %f
A = %t
C = A | B C contm um valor verdadeiro.

6.5 TIPOS DE DADOS PRIMITIVOS


O Scilab manipula trs tipos primitivos de informao que consta na maioria das linguagens de
programao tradicional:
1. O nmero real;
2. O tipo string;
3. O tipo booleano.
O Scilab no possui o tipo nmero inteiro (usado em muitas linguagens). O tipo da varivel
pode mudar toda vez que um valor lhe atribudo. O novo tipo ser o mesmo do ltimo valor
atribudo.
Exemplo:
A = 2.5; // A varivel A um nmero real.
A = "livro"; // Agora ela uma string.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

52

6.6 Seleo condicional


Nesta seo, descrevemos como fazer declaraes condicionais, isto , que apresentam a
declarao se. Ns apresentamos a instruo de seleo if. Apresentamos laos Scilab, ou seja,
ns apresentamos o for e while.
Ns finalmente apresentar dois principais comandos para tratar a sada incondicional destes
comandos, o break e continue.
6.6.1 O comando IF
Caracteriza-se por permitir a execuo de uma sequncia de comandos quando certas
condies, representadas por expresses booleanas, forem satisfeitas. A seleo simples tem a
seguinte forma:
if <expresso booleana>
<sequncia de comandos>
end
A sequncia de comandos s ser executada se a expresso booleana retornar um valor
verdadeiro.
Exerccio resolvido 1. Elaborar um programa para escrever a mdia de duas notas.
Se a mdia for maior que sete, o programa dever tambm escrever Parabns.
Soluo:

Comentrio. Este programa escreve a mdia do aluno, mas s executa a linha 6 se sua nota for
maior que 7.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

53
6.6.2 A SELEO BIDIRECIONAL IF-ELSE-END
Caracteriza-se por selecionar entre duas sequncias de comandos quando certas condies,
representadas por expresses booleanas, forem satisfeitas. A seleo bidirecional tem a
seguinte forma:
if <expresso booleana>
<primeira sequncia de comandos>
else
<segunda sequncia de comandos>
end
A primeira sequncia de comandos ser executada se a expresso booleana devolver um valor
verdadeiro, caso contrrio a segunda sequncia de comandos ser executada. Os seguintes
exemplos ilustram o comando de seleo bidirecional.
Exerccio resolvido 2. Elaborar um programa para ler quatro notas, calcular a mdia e informar
se o aluno passou de ano (aprovado) ou no (reprovado). A mdia para passar de ano 6.
Soluo:

Comentrio. O comando IF testa se a mdia maior que 6,0. Se sim, o programa executa o
comando da linha 9 que escreve Aluno aprovado. Caso contrrio, o programa executa a linha
11 que escreve Aluno reprovado.

Exerccio resolvido 3. Elaborar um programa para calcular o valor da funo:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

54

6.6.3 Aninhamento
Comandos de seleo podem ser aninhados de diversas formas criando ampla variedade de
construes como mostra os exemplos a seguir.
Exerccio resolvido 1. Elaborar um programa para escrever a situao do aluno. O aluno com
mdia maior ou igual a 7,0 ser aprovado. O aluno com mdia entre 5,0 e 7,0 ficar em
recuperao. Com mdia abaixo de 5,0, o aluno ser reprovado.
Soluo:

Comentrio.
Se a mdia for maior ou igual que 7 o programa escreve Aprovado (linha 11). Caso contrrio o
programa executa o segundo IF (aps o else). Aqui, temos um novo teste IF (aninhado dentro

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

55
de primeiro IF) que far o programa escrever Recuperao se mdia for maior ou igual a 5
(linha 14) ou, caso contrrio, Reprovado (linha 16).
Exerccio resolvido 2. Escreva um programa que leia trs nmeros e escreva o menor deles.
Soluo:

Veja dois casos um pouco mais complicados.


Exerccio resolvido.3. Elaborar um programa Scilab para ler trs medidas a, b e c. Depois
verificar se elas podem ser as medidas dos lados de um tringulo. Se forem, verificar ser se o
tringulo equiltero, issceles ou escaleno.
Soluo:
Para saber se trs medidas podem ser as medidas dos lados de um tringulo usamos o
seguinte propriedade da Geometria (conhecido como desigualdade triangular):
Em todo tringulo, cada lado menor que a soma dos outros dois. Portanto, se as medidas
satisfazem a desigualdade triangular acima ento elas formam um tringulo, caso contrrio
no formam um tringulo.
Relembrando, tambm, que os tringulos se classificam em:
1. Equiltero se tem trs lados de medidas iguais.
2. Issceles se tm dois lados de medidas iguais.
3. Escaleno se dois quaisquer lados no possuem medidas iguais.
Com as informaes acima, elaboramos o seguinte programa:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

56

Comentrio. Aps a leitura das medidas a, b e c (linhas 2-4), o programa verifica, na linha 6, se
estas medidas satisfazem a desigualdade triangular. Se sim, o programa classifica o tringulo
formado por a, b, e c (linhas 8-16) do seguinte modo. Na linha 8, se a expresso booleana a ==
b & b == c retornar verdadeiro ento todos os lados so iguais e portanto o tringulo
equiltero. Caso contrrio, o programa segue adiante para classificar o tringulo em issceles
ou escaleno. Se, porm, as medidas no satisfazem a desigualdade triangular da linha 6, ento
o programa no executa as linhas 8-16, e simplesmente escreve que a medidas no formam
um tringulo (linha 19).
Exerccio resolvido 4. (Equao do segundo grau). Dados os trs coeficientes a, b, c de uma
equao do segundo grau
, elaborar um algoritmo para calcular suas raizes
razes. O discriminante da equao dado por

-4ac. Para cada situao da seguinte

tabela, o algoritmo tomar a respectiva ao:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

57

Soluo

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

58

O Scilab manipula nmeros complexos automaticamente e por isso no era necessrio se


preocupar em manipular os nmeros complexos como foi feito no exemplo anterior. O mesmo
no acontece com algumas linguagens tradicionais. Por exemplo, em linguagem C, devemos
tomar cuidado com nmeros complexos pois se o discriminante da equao for um nmero

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

59
negativo ento a raiz quadrada gera um erro. Por exemplo, em C uma declarao equivalente a
esta
x1 = -b/(2*a) + sqrt(disc)/(2*a);
x2 = -b/(2*a) - sqrt(disc)/(2*a);
produzia um erro se o valor da varivel disc fosse negativo. O Scilab no gera erro ao calcular a
raiz quadrada de um nmero negativo. Ao invs disso, o Scilab produz um nmero complexo
automaticamente. A seguir mostrado uma outra verso do programa do exemplo anterior
(desta vez sem se preocupar se o discriminante negativo ou no):

Comentrio. O comando de sada de dados disp (linhas 28 e 30) foi usado porque o comando
printf no imprime nmeros complexos. Para saber se as razes so reais ou complexas, foi
utilizado uma funo especial isreal() do Scilab que devolve verdadeiro (%t) se seu argumento
for um nmero real, ou falso (%f) se seu argumento for um nmero complexo.
Exemplos:
-->isreal(1+3*%i)
ans =

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

60
F
-->isreal(3)
ans =
T
Portanto, as linhas 31-34 deste exemplo:
if isreal(x1)
printf("As razes so reais");
else
printf("As razes so complexas");
end
escreveram As razes so reais se x1 for um nmero real, caso contrrio, escreveram As
razes so complexas.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

61

6.7 Estruturas de repetio


6.7.1 LAOS
Computadores so frequentemente usados para repetir uma mesma operao muitas vezes.
Para fazer isso, utiliza-se uma estrutura de repetio. Ela faz com que um conjunto de
comandos seja executado zero, uma ou mais vezes. A estrutura de repetio , tambm,
chamado de lao (do ingls, loop). O conjunto de comandos que se repete em um lao
denominado de corpo do lao. H dois tipos de lao no Scilab:
1. Lao controlado logicamente;
2. Lao controlado por contador.
No lao controlado logicamente, os comandos (i.e., o seu corpo) so repetidos
indefinidamente enquanto uma certa expresso booleana for satisfeita. No lao controlado
por contador, os comandos so repetidos um nmero predeterminado de vezes.
Denomina-se iterao a repetio de um conjunto de comandos. Portanto, cada execuo do
corpo do lao, juntamente com a condio de terminao do lao, uma iterao. Nas sees
seguintes sero estudadas as estruturas de repetio do Scilab.
6.7.2 While - LAO CONTROLADO LOGICAMENTE
O lao while um lao controlado logicamente. Ele repete a execuo de um conjunto de
comandos (o seu corpo), mas verificando antes de executar os comandos se permitido
repeti-los ou no. O lao while tem a seguinte forma:
while <expresso booleana>
<conjunto de comandos>
end
Enquanto a <expresso booleana> for verdadeira o <conjunto de comandos> repetido
indefinidamente. No momento em que <expresso booleana> for falsa o <conjunto de
comandos> no ser mais repetido. Vale salientar que se <expresso booleana> for falsa da
primeira vez, o <conjunto de comandos> jamais ser executado.
A elaborao de programas com laos envolve, frequentemente, o uso de duas variveis com
funes especiais: os contadores e os acumuladores na qual sero mostradas a seguir.
Considere os seguintes clculos no console do Scilab:
-->i = 1
1.
-->i = i + 1
i=

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

62
2.
-->i = i + 1
i=
3.
-->i = i + 1
i=
4
Note que cada vez que a expresso i = i + 1 executada o valor da varivel i incrementado de
um. A varivel i da expresso i = i + 1 chamada de contador. Os exemplos a seguir ilustram o
uso do contador em laos while.
Exerccio resolvido 1. Calcular a mdia das notas de cinco alunos.
Soluo: este programa realiza a tarefa de ler as notas de um aluno e calcular a sua mdia. O
programa dever repetir esta tarefa cinco vezes (usando while). O contador usado para
contar o nmero de repeties.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

63

Comentrio.
O programa comea inicializando a varivel i com o valor um (linha 1). Por causa disso, a
expresso i <= 5 do lao while verdadeira. Ento o corpo do lao executado pela primeira
vez (primeira iterao). O lao while incrementa o valor da varivel i com o valor de um toda
vez que o corpo do lao (linhas 3-9) executado. Depois que o corpo do lao tem sido
executado cinco vezes (ou seja, aps cinco iteraes) a varivel i possui valor seis e a expresso
i <= 5 falsa. Por causa disso o lao termina e o programa passa a executar a linha seguinte
imediatamente aps o fim do lao (que a linha 11).
Agora, considere os seguintes clculos executados no console do Scilab:
-->soma = 20
soma =
20.
-->x = 2.5
x=
2.5
-->soma = 0
soma =
0.
-->soma = soma + x
soma =
2.5
-->soma = soma + x
soma =
5.
Qual o valor da varivel soma aps repetir a execuo do ltimo comando mais duas vezes? A
varivel soma da expresso soma = soma + x chamada de acumulador. Vejamos um exemplo.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

64
Exerccio resolvido 2. Elaborar um programa para calcular a soma de todos os inteiros entre 1 e
100.
Soluo:

Comentrio. O programa inicializa as variveis cont e soma com 1 e 0, respectivamente


(porque?). Cada vez que o corpo do lao executado, o valor de soma incrementado com o
valor corrente da varivel cont. Deste modo, a varivel soma assume os seguintes valores a
cada repetio do lao.
Boa programao: sempre se inicializa contadores e acumuladores.

6.7.3 FOR - LAO CONTROLADO POR CONTADOR


O comando FOR o lao controlado por contador do Scilab. Ele repete a execuo de um
conjunto de comandos (i.e., o seu corpo) um nmero pr-determinado de vezes. Na forma
bsica, o lao FOR possui o nome de uma varivel (chamada de varivel de controle) e
especifica seu valor inicial e final e, opcionalmente, o tamanho do passo (ou incremento) da
varivel de controle.
O seguinte programa escreve a palavra disciplina 10 vezes:
for i=1:10
printf("disciplina\n");
end
Aqui a varivel de controle i assume, inicialmente, o valor um e o printf("disciplina\n")
executado. Note que o tamanho do passo foi omitido neste exemplo. Quando isto ocorre o
passo igual a um. Um passo igual a um indica que a varivel de controle incrementada de
um em cada iterao. O lao for, repete a execuo de printf("disciplina\n") e a varivel de
controle i incrementada para o valor 2. Da terceira vez que printf("disciplina\n") executado,
a varivel de controle i incrementada para o valor 3 e assim por diante at alcanar o valor
10 que o valor final. Outros exemplos seguem.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

65
Exerccio resolvido 1. Elabore um programa para escrever todos os nmeros pares inteiros
entre 1 e 50.
Soluo:

Comentrio. O primeiro nmero par 2, logo o varivel de controle deve iniciar com 2. Porque
os nmeros devem ser escritos de dois em dois, o passo deve ser igual a 2. O valor final na
varivel de controle , obviamente, 50.
Exerccio resolvido 2. Elabore um programa para calcular 5 (fatorial de 5).
Soluo:

Comentrio. Note que a cada interao do lao, a varivel fat assume os seguintes valores:

EXEMPLOS COM LAOS


Exerccio resolvido 3. Algoritmo para calcular o fatorial. Elabore um programa para calcular o
fatorial para qualquer valor n fornecido pelo usurio. Sabendo que:

Soluo:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

66

Exerccio resolvido 4. Exemplo de Somatrio.


Elabore um programa que calcule e escreve o valor de S.

Soluo: note que h uma relao entre numerador e denominador da seguinte forma:

Usaremos esta relao para calcular cada termo da srie no seguinte programa:

Exerccio resolvido 5. O Algoritmo de Euclides.


O Algoritmo de Euclides est presente no quinto livro de Euclides escrito por volta de 300 anos
antes de Cristo. Sua finalidade calcular o Mximo Divisor Comum (M.D.C.). Conhecido por
muitos estudantes, o Algoritmo de Euclides desempenha importante papel na matemtica, e
por isso interessante estud-lo. Para calcular o M.D.C. entre dois nmeros segue-se o
Algoritmo:
Passo 1. Leia duas variveis a e b
Passo 2. r = o resto da diviso entre a e b
Passo 3. a = b
Passo 4. b = r
Passo 5. Se o valor de r zero ento a o M.D.C. procurado e o programa termina; caso
contrrio volte ao passo 2.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

67
Seguindo este algoritmo manualmente, com um lpis e papel, possvel calcular o M.D.C.
entre 544 e 119, escrevendo a seguinte tabela:

O seguinte programa Scilab implementa o algoritmo de Euclides:

Exerccio resolvido 6. Usando um valor sentinela para interromper um lao Elabore um


programa que leia via teclado um conjunto de valores inteiros e positivos. O final do conjunto
conhecido pelo valor -1. Determine o maior valor deste conjunto.

Comentrio. A cada iterao a varivel valormax armazena o maior valor dos nmeros
digitados at ento. Portanto, no final, valormax armazenar o maior valor do conjunto.

Exerccio resolvido 7. A srie de Fibonacci.


A srie de Fibonacci se define como tendo os dois primeiros elementos iguais a um e cada
elemento seguinte igual a soma dois elementos imediatamente anteriores. Exemplo,
1; 1; 2; 3; 5; 8 : : :

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

68
Pede-se que escreva todos os elementos da srie de Fibonacci menor ou igual a N. O valor de
N fornecido pelo teclado.
Soluo:

6.7.4 FOR - Laos Aninhado


Considere o seguinte programa:
for j = 1:4
printf("x");
end
Este programa escreve quatro vezes o caracter x em uma linha como segue:
xxxx
Pode-se usar laos aninhados para produzir diversas linhas de xxxx, conforme ilustra do no
seguinte exemplo:
Exerccio resolvido 1. O seguinte programa gera uma sequencia de quatro xs por linha. O
nmero de linhas digitado pelo usurio.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

69
Comentrio. Este programa solicita ao usurio o nmero de linhas. Neste exemplo, o usurio
digitou 5 linhas. O programa, ento, escreve 5 linhas e em cada linha ele repete 4 vezes o
caractere x do seguinte modo. Inicialmente, o varivel i assume o valor 1 na linha 2. Em
seguida, a varivel j assume o valor 1. O lao interno das linhas 3-5 repetido 4 vezes
escrevendo 4 xs, ou seja, xxxx. Quando o lao interno termina (aps 4 repeties), o comando
printf("\n") da linha 6 cria uma nova linha. Em seguida, o end da linha 7 encontrada e o
programa retorna para a linha 2. Na linha 2, o valor da varivel i atualizado para 2. Em
seguida, o programa executa novamente o lao interno e o programa escreve novamente xxxx.
Novamente, o programa executa o comando printf("\n") gerando uma nova linha e o
programa retorna a linha 2, onde a varivel i atualizado para 3. Este lao continua at a
varivel i ser igual a 5.
O prximo programa escreve a tabuada de 1 at 10. Este programa usa o string de formatao
%f em vez de %g para que os dados permaneam alinhados na tabela da tabuada. O string de
formatao %f permite especificar o nmero de caracteres que ser ocupado pelo dado escrito
com printf e tambm o nmero de dgitos depois do ponto decimal. Por exemplo, o string
%5.2f escreva um nmero ocupando cinco caracteres com dois dgitos depois do ponto
decimal. Exemplo:
-->a = 223.345547867783;
-->printf("%5.2f",a);
23.35
O seguinte exemplo escreve a varivel a ocupando 10 caracteres com dois dgitos aps o ponto
decimal:
-->printf("%10.2f",a);
23.35
Usando cinco dgitos aps o ponto decimal:
-->printf("%10.5f",a);
23.34555
Exerccio resolvido 4.5.2. Elaborar um programa para escrever a tabuada de 1 at 10.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

70

Comentrio. Inicialmente, a varivel i assume o valor um na linha 3. Na linha 4, o programa


escreve o nmero um para indicar que a tabuada de um ser escrita mesma linha. Em seguida,
a varivel j assume o valor um. O lao interno das linhas 5-7 repetido 10 vezes escrevendo a
tabuada de um. Quando o lao interno termina (aps 10 repeties), o comando printf("\n")
da linha 8 gera uma nova linha. O programa retorna para a linha 3. Na linha 3, o valor da
varivel i atualizado para dois. Em seguida, o programa executa novamente o lao interno e
o programa escreve a tabuada de dois. Novamente, o programa executa o comando
printf("\n") gerando uma nova linha e o programa retorna a linha 3, onde a varivel i
atualizado para trs. A tabuada de trs ento escrita. Lao externo continua at a varivel i
ser igual a dez.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

71

7 Matrizes
Na linguagem Scilab, matrizes desempenham um papel central. Nesta seo, introduzimos
Matrizes Scilab e apresentam como criar e consultar matrizes. Ns tambm analisamos como
para acessar aos elementos de uma matriz, ou elemento por elemento.

7.1 VETORES
Matrizes unidimensionais so chamadas de vetores. Em um vetor possvel armazenar vrios
itens em uma nica varivel. Na Figura 18 mostrada uma varivel nota contendo as notas de
alunos. Os itens contidos em um vetor so chamados de elementos do vetor. Portanto, o vetor
nota possui dez elementos. Seus elementos podem ser acessados individualmente. Por
exemplo, nota(4) refere-se ao quarto elemento do vetor nota. O valor entre os parnteses de
nota(4) chamado de ndice ou subscrito e usado para individualizar um elemento do vetor.
Vetores podem ser construdos usando os colchetes [ e ]. Os elementos so envolvidos por
colchetes e separados por espaos (ou vrgula).

figura 18 - Vetor
-->nota(1) + nota(2) + nota(3)
ans =
22.5
Uma aplicao de vetores armazenar variveis indexadas da matemtica. Por exemplo, as
variveis indexadas x1 D 2, x2 D 4, x3 D 2 e x4 D 3 so armazenadas como:
-->x(1) = 2;
-->x(2) = 4;
-->x(3) = 2;
-->x(4) = 3;
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

72
ou equivalentemente como
-->x = [2 4 2 3];
Expresses matemticas tais como .x1 C x3/=x2 so efetuados do seguinte modo:
-->(x(1)+x(3))/x(2)
ans =
1.
Se o vetor for grande, pode-se usar o smbolo .. para continuar escrevendo da linha
seguinte. Exemplo:
-->b = [2 3 7 ..
-->9 8 4]
b=
! 2. 3. 7. 9. 8. 4. !

7.2 Acessando Elementos do Vetor


Os elementos de um vetor podem ser acessados de vrias maneiras. Por exemplo, considere as
variveis
a = [2 4 5 1 3];
i = 2;
Ento se tem
a(i+2) Devolve 1 porque acessa o quarto elemento (i+2 igual a 4) do vetor a.
a(a(4)) Devolve 2. Como valor de a(4) 1, avaliar a(a(4)) o mesmo avaliar a(1). Logo,
a(a(4)) igual a a(1) que, por sua vez, igual a 2.
a(a(3))+a(2*i) Devolve 4, porque a(a(3)) igual a(5) que, por sua vez, igual a 3. E a(2*i)
igual a(4), que igual a 1. Logo, a(a(3))+a(2*i) igual a 3 + 1 = 4.
* ndices com valor zero ou negativo no so vlidos no Scilab.
Exerccio resolvido 1. Calcular a mdia dos elementos do vetor nota dado na Figura
18.

Comentrio. Para somar os elementos do vetor, cada elemento foi acessado individualmente
e adicionado, um por vez, em um acumulador soma, atravs do lao for...end (linhas 3 a 5).

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

73

Exerccio resolvido 2. Ler dois vetores A e B de 10 elementos. Construir um vetor C tal que cada
elemento de C seja o dobro da soma entre os elementos correspondentes de A com B.
Escrever o vetor C.

Comentrio. O lao for...end, das linhas 1 a 3, faz a leitura de um elemento do vetor a de cada
vez. A leitura controlada pelo ndice que faz com que cada leitura seja armazenada em um
elemento diferente do vetor a. No lao for...end das linhas 7 a 9, o clculo de cada elemento
do vetor c controlado pelo ndice que faz com que seja somando os elementos
correspondentes de a e b.

Comentrio. A funo modulo (resto de uma diviso) verifica se o ndice do vetor C mpar ou
par porque se resto da diviso entre um nmero qualquer e dois diferente de zero ento ele
mpar (no divisvel por dois).

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

74

7.3 Criar uma matriz de valores reais


Existe uma sintaxe simples e eficiente para criar uma matriz com dados. Na seguencia uma
lista de smbolos para se criar matizes:
1. Colchetes "[" e "]" marcar o incio e o fim da matriz,
2. Vrgulas "," separar os valores das colunas,
3. ponto e vrgula ";" separar os valores das linhas.
A sintaxe a seguir pode ser utilizado para definir uma matriz, em que os espaos em branco
so opcionais (mas faz a linha ser mais fcil de ler) e "..." denota valores intermdios:
A = [a11, a12, ... , A1N; ... ; An1, an2, ... , Ann].
No exemplo a seguir, criamos uma matriz 2X3 de valores reais.
-> A = [1, 2, 3; 4, 5, 6]
A=
1. 2. 3.
4. 5. 6.
Vrios comandos Scilab criam matrizes a partir de um determinado tamanho, ou seja, a partir
de um nmero de linhas e colunas dados. Estas funes so apresentadas na figura 19. O mais
comumente utilizados so eye, zeros e one. Esses comandos recebem duas entradas de
argumentos, o nmero de linhas e colunas da matriz para gerar.

->A = ones (2 ,3)


A=
1. 1. 1.
1. 1. 1.

7.4 A matriz vazia []


Uma matriz vazia pode ser criada usando colchetes vazios, como a seguir sesso, em que
criamos uma matriz 0X0.
-->A=[]
A=
[]

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

75
Esta sintaxe exclui o contedo de uma matriz, de modo que a memria associada libertada.
-->a = zeros (5,5)
a =
0. 0. 0. 0.
0. 0. 0. 0.
0. 0. 0. 0.
0. 0. 0. 0.
0. 0. 0. 0.

0.
0.
0.
0.
0.

7.5 Consulta a valores de uma matriz


As funes na figura 20 consultam ou atualizar uma matriz.

figura 20 - funes de consulta e atualiza


A funo size retorna dois argumentos, nl e nc, que so o nmero de linhas e nmero de
colunas.
-->size(a)
ans =
5. 5.
-->[nl, nc] = size(a)
nc =
5.
nl =
5.
A funo size tem tambm a seguinte sintaxe :
nr = size ( A , sel ), sendo :
->nr = size (a,"r") retorna o nro de linhas
nr =
5.
-->nr = size (a,"c") retorna o nro de colunas
nr =
5.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

76
-->nr = size (a,"*") retorna o nro de elementos de uma matriz, ou seja, o produto de linha
pela coluna
nr =
25.

7.6 Trabalhando com elementos de uma Matriz


H varias maneira de trabalhar/acessar elemento da matriz:
1. Toda matriz, com a sintaxe, A;
2. Elemento por elemento com a sintaxe A(i, j);
3. Um intervalo de ndice subscritos, com a sintaxe de 2 pontos.
Para ter um acesso global a todos os elementos da matriz, use a varivel simples do nome, por
exemplo A, pode ser usado. Todas as operaes de lgebra elementares esto disponveis para
matrizes, tais como a adio de "+", a subtrao com "-", desde que as duas matrizes tenham o
mesmo tamanho. No script a seguir, podemos adicionar todos os elementos de duas matrizes.
-->A = ones (2 ,3)
A=
1. 1. 1.
1. 1. 1.
-->B = 2 * ones (2 ,3)
B=
2. 2. 2.
2. 2. 2.
-->A+B
ans =
3. 3. 3.
3. 3. 3.

Um elemento de uma matriz pode ser acessado diretamente com a sintaxe de A (i, j), desde
que i e j so ndices vlidos.
Ressaltamos que, por padro, o subscrito primeiro de uma matriz 1. Isto contrasta com
outras linguagens, tais como a linguagem C, por exemplo, onde o subscrito primeiro 0. Por
exemplo, suponha que A uma matriz nr X nc, onde nr o nmero de linhas e nc o nmero
de colunas. Portanto, o valor de A (i, j) tem um nico sentido se o subscrito i subscrito e j
satisfazerem 1 i nr e 1 j nc. Se o ndice no so vlido, gerado um erro, como a
seguir.
-->A = ones (2 ,3)
A=
1. 1. 1.
1. 1. 1.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

77
-->A(1 ,1)
ans =
1.
-->A(12 ,1)
!-- error 21
Invalid index .
-->A(0 ,1)
!-- error 21
Invalid index .
O acesso direto aos elementos da matriz com a sintaxe de A (i, j), deve ser usada somente
quando no h outros comandos de nvel mais alto no Scilab que possam ser usados. Na
verdade, o Scilab fornece muitas caractersticas que produzem clculos mais simples e mais
rpido, com base na vetorizao. Uma dessas caractersticas o operador, sinal de ":", que
muito importante na em situaes prticas.

7.7 O operador dois pontos ":"


A forma mais simples da sintaxe do operador, dois pontos, a seguinte:
v = i: j
onde i o valor do elemento inicial e termina no valor j sendo, i j. este cria o vetor v = (i, i +
1; ...; j). Na sesso seguinte, criamos um vetor de subscritos 2 para 4 em um comando.
-> v = 2:4
v=
2. 3. 4.
A sintaxe complexa configura o incremento usado ao gerar os subscritos, isto , o passo. A
sintaxe completa para o operador, :,
v = i: s: j
onde i o elemento de partida, j o elemento final e s o incremento. Este comando cria o
vetor v = (i, i + s; i + 2s; ...; i + ns) onde n o maior inteiro tal que (i + ns) j.
Na maioria das situaes, o incremento s positivo, mas tambm pode ser negativo,
decremento.
No exemplo seguinte, criamos um vetor crescente 3 para 10 com um passo (incremento) igual
a 2.
-->v = 3:2:10
v=
3. 5. 7. 9.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

78
Note-se que o ltimo valor do vector v i ns + = 9, que menor do que j = 10. A seguir,
apresentamos dois exemplos em que o passo negativo. No primeiro caso, o operador :, gera
decrescendo 10 para 4. No segundo exemplo, o operador do clon gera uma matriz vazia,
porque no existem valores inferiores a 3 e superior a 10, ao mesmo tempo.
-->v = 10: -2:3
v=
10. 8. 6. 4.
-->v = 3: -2:10
v=
[]
Com um vetor de subscritos, podemos acessar os elementos de uma matriz.
A (i: j, k: l)
onde i, j, k, l esto comeando e terminando subscritos. A sintaxe complexa
A (i: l s: j, k:: t),
onde s e t so as etapas.
Por exemplo, suponha que A uma matriz 5 X 5, e que ns queremos para acessar o lementos
ai, j para i = 1, 2 e j = 3, 4. Com a linguagem Scilab, isto pode ser feito em apenas uma
instruo, utilizando a sintaxe A (1:2,3:4), como mostra o seguinte exemplo.
-->A = testmatrix (" hilb " ,5)
A =
17. 24. 1.

8.

23. 5.

7.

14. 16.

4.

13. 20. 22.

6.

15.

10. 12. 19. 21. 3.


11. 18. 25. 2.

9.

-->A(1:2,3:4)
ans =
1. 8.
7. 14.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

79

Existem muitas variaes sobre esta sintaxe, a figura 21 apresenta algumas das combinaes
possveis.

figura 20 - sintaxe dois pontos


Exemplos:
-->B = testmatrix (" hilb " ,3)
B =
8. 1. 6.
3. 5. 7.
4. 9. 2.

-->B([1 2] ,:)
ans =
8. 1. 6.
3. 5. 7.

-->B([2 1] ,:)
ans =
3. 5. 7.
8. 1. 6.
-->B([1 2] ,:) = B([2 1] ,:)
B =
3. 5. 7.
8. 1. 6.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

80
4. 9. 2.
Poderamos igualmente trocar as colunas da matriz B, com a indicao B (:, [3 1 2]).

7.8 Funo eye


A funo eye cria a matriz identidade com o tamanho que depende do contexto.
No exemplo seguinte, adicionar 3 nos elementos da diagonal da matriz A.
-->A = ones (3 ,3)
A=
1. 1. 1.
1. 1. 1.
1. 1. 1.
-->B = A + 3* eye ()
B=
4. 1. 1.
1. 4. 1.
1. 1. 4.
No exemplo seguinte, de definimos uma matriz de identidade B com a funo EYE dependendo
do tamanho da matriz A.
-->a = ones(3,3)
a =
1. 1. 1.
1. 1. 1.
1. 1. 1.

-->b = eye(a)
b =
1. 0. 0.
0. 1. 0.
0. 0. 1.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

81

Finalmente, pode-se usar a sintaxe do eye (m, n) a fim de criar uma matriz de identidade com
m linhas e n colunas.
-->c=eye(2,3)
c =
1. 0. 0.
0. 1. 0.

7.9 Matrizes so dinmicas


O tamanho de uma matriz pode crescer ou diminuir de forma dinmica, adaptando-se ao
tamanho da matriz com os dados que ela contm. Considere o seguinte exemplo, onde
definimos uma matriz 2 X 3.
-->d = [1,2,3;4,5,6]
d =
1. 2. 3.
4. 5. 6.
No exemplo seguinte, inserimos o valor 7 com os ndices de (3, 1). Isto cria a terceira linha da
matriz, define d (3: 7), uma entrada para o 7 e os outros valores da recm linha criada com
zeros.
-->d(3,7)=7
d =
1. 2. 3. 0. 0. 0. 0.
4. 5. 6. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 7.
O exemplo anterior mostra que as matrizes podem crescer. No exemplo seguinte, podemos
ver que tambm pode reduzir o tamanho de uma matriz. Isto feito usando operador "[]", a
fim de excluir a terceira coluna.
-->d(:,5)=[]
d =
1. 2. 0. 0.
4. 5. 0. 0.
0. 0. 0. 0.
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

82

Ns tambm podemos alterar a forma da matriz, com a funo matrix. A funo matrix
remodela uma matriz de origem em uma matriz alvo com um tamanho diferente. A
transformao realizada a cada coluna, por empilhamento dos elementos da matriz de
origem. No exemplo seguinte, remodelar a matriz A, que tem 3 X 2 = 6 elementos em um vetor
linha com 6 colunas.
-->a = [1 2 3; 4 5 6]
a =
1. 2. 3.
4. 5. 6.

-->b = matrix(a,1,6)
b =
1. 4. 2. 5. 3. 6.

7.10 Operador $
Normalmente, utiliza-se de subscrito para fazer referncia a partir do incio de uma matriz. Por
oposio, o operador dlar, "$" referncia elementos do fim da matriz.
O operador "$" substitui "o ndice correspondente ltima" linha ou coluna, dependendo do
contexto.
Vrios usos do operador dlar so apresentados na figura 21.

figura 21 - uso do operador $

No exemplo a seguir, considera-se a matriz:


-->A= testmatrix (" hilb " ,3)
A =
8. 1. 6.
3. 5. 7.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

83
4. 9. 2.
-->A($ -1,$ -2)
ans =
3.
O operador dlar "$" adiciona elementos dinamicamente no final de matrizes,noexemplo
seguinte, adicionar uma linha no final da matriz de Hilbert.
-->A($+1 ,:) = [1 2 3]
A =
8. 1. 6.
3. 5. 7.
4. 9. 2.
1. 2. 3.

7.11 Operaes de baixo nvel


Todos os operadores de lgebra comuns, como "+", "-", "*" e "/", esto disponveis com matriz
real . Nas prximas sees, vamos nos concentrar no exato significado desses operadores, de
modo que muita fonte de confuso seja evitada. As regras para o "+" e "-" operadores so
aplicados diretamente a partir da lgebra usual. Na sesso seguinte, somaremos duas matrizes
2 X 2.
-->A = [1 2
-->3 4]
A=
1. 2.
3. 4.
-->B=[5 6
-->7 8]
B=
5. 6.
7. 8.
-->A+B
ans =
6. 8.
10. 12.

Quando realizar uma adio de duas matrizes, se um operando for uma matriz 1 x 1 (ou seja,
um escalar), o valor de este escalar adicionado a cada um dos elementos da segunda matriz.
Esta caracterstica mostrada no exemplo seguinte:
-->A = [1 2
-->3 4]
A=

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

84
1. 2.
3. 4.
-->A + 1
ans =
2. 3.
4. 5.

figura 22 - operadora de matriz e operadores de elementos


A adio s possvel se as duas matrizes so do mesmo tamanho. No exemplo seguinte,
tentamos adicionar uma matriz 2 X 3 , com uma matriz 2 X 2 verifica-se que esta soma no
possvel.
-->A = [1 2
-->3 4]
A=
1. 2.
3. 4.
-->B = [1 2 3
-->4 5 6]
B=
1. 2. 3.
4. 5. 6.
-->A+B
!-- error 8
Inconsistent addition.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

85

7.12 Exerccio resolvido - Matriz

Pede-se:
a) Colocar a matriz A na memria do computador.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
b) Preencher a terceira coluna da matriz A com o valor zero.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
for i=1:5
a(i,3) = 0
end
c) Calcular a soma dos elementos da diagonal principal da matriz A e escrever o resultado.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
soma = 0;
for i=1:4
soma = soma + a(i,i);
end
printf("soma = %g\n",soma);
d) Calcular a soma dos quadrados dos elementos da segunda linha de A e escrever o resultado.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
soma = 0;
for i=1:4
soma = soma + a(2,i)^2;
end
printf("soma = %g\n",soma);

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

86
e) Somar de todos os elementos de A.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
soma = 0;
for i=1:5
for j=1:4
soma = soma + a(i,j);
end
end
f) Armazenar a soma de cada linha de A no vetor S
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
for i=1:5
soma = 0;
for j=1:4
soma = soma + a(i,j);
end
s(i) = soma;
end
g) Trocar a segunda linha com quarta linha.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
for j=1:4
aux = a(2,j)
a(2,j) = a(4,j);
a(4,j) = aux;
end
h) Escrever a matriz A.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
for i=1:5

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

87
for j=1:4
printf("%3.0f ",a(i,j));
end
printf("\n");
end
i) Ler uma matriz B de mesma dimenso que A. Efetuar a soma matricial A C B e armazenar o
resultado na matriz C.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
for i=1:5
for j=1:4
b(i,j) = input("Digite um nmero");
end
end
for i=1:5
for j=1:4
c(i,j) = a(i,j) + b(i,j);
end
end
j) Ler uma matriz B de mesma dimenso que A. Escrever IGUAIS se A for uma
matriz igual B. Caso contrrio, escrever DIFERENTES.
a = [3 1 2 4; 5 5 8 6; 8 10 11 5; 9 1 5 7; 2 3 8 8];
for i=1:5
for j=1:4
b(i,j) = input("Digite um nmero");
end
end
iguais = %t;
for i=1:5

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

88
for j=1:4
if a(i,j) <> b(i,j)
iguais = %f;
end
end
end
if iguais
printf("Iguais\n");
else
printf("Diferentes\n");
end
Exerccio 5.2.2. Elabore um programa para ler a matriz A, trocar a segunda linha com terceira
linha e escrever a matriz A.

7.13 VETORES DE STRING


Podemos construir vetores de strings. Por exemplo:
-->mes = ["jan" "fev" "mar" "abr" "jun" "jul" "ago" "set" "nov" "dez"];
O vetor mes foi construdo de tal modo que h uma correspondncia entre o nmero do ms e
o ndice do elemento. Por exemplo, o ms de nmero 11 (novembro) acessado pelo
elemento mes(11). Este fato usado para resolver o exerccio a seguir.
Exerccio resolvido. Elaborar um programa que leia o dia, o nmero de ms e o ano e escreva a
dada no formato D de MMM de AAAA(ou D de MMM de AA).
Por exemplo, se o dia 31, o ms 12 e o ano 2003, ento o programa dever escrever 1 de
dez de 2003.
Soluo:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

89
Comentrio. Porque a varivel nunmes contm o nmero do ms, o comando printf capaz
de escrever o nome do ms atravs do elemento mes(nunmes).
Exerccios
O que este programa escreve?

7.14 ESTUDO DE CASO


Esta seo ilustra a facilidade que as matrizes oferecem a programao de computadores.
Primeiramente, ser mostrado a soluo de um problema sem o uso de vetores visando
apontar as dificuldades deste procedimento. Em seguida, o mesmo problema ser resolvido
com o uso de vetores. Considere o problema:
Suponha uma turma com quatro alunos. Elaborar um programa que leia as quatro notas dos
alunos e seus respectivos nomes e escreva apenas os nomes com a nota acima da mdia.
Neste sentido, uma possvel soluo (sem vetores) seria a seguinte: Comumente o clculo da
mdia das notas pode ser efetuado pelo seguinte trecho de programa:
soma = 0;
for i = 1:4
nota = input("Digite a nota");
soma = soma + nota;
end
media = soma/4;

Esta abordagem no resolve o problema proposto porque precisamos comparar se cada nota
digitada maior que a mdia. Mas vale notar que as notas j foram perdidas no momento que
calculado a mdia na ltima linha (exceto a ltima nota que no foi perdida porque est
armazenada na varivel nota). Deste modo, no podemos comparar as mdia com as notas
(que foram perdidas). Portanto, a fim de evitar a perda das notas, necessrio armazenar cada
nota digitada em uma varivel diferente.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

90

Suponha que, ao invs de uma turma com quatro alunos, houvessem uma turma com cinco
alunos, ento teramos:
Suponha uma turma com cinco alunos. Elaborar um programa que leia as cinco notas dos
alunos e seus respectivos nomes e escreva apenas os nomes com a nota acima da mdia.
A soluo deste problema seria similar ao programa anterior, apenas acrescentando algumas
linhas (e.g., para ler a quinta nota). A soluo seria:

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

91

Novamente, suponha que, ao invs de uma turma com cinco alunos, houvesse uma turma com
dez alunos. Neste caso, um programa, para ler 10 notas, iria crescer bastante em tamanho (em
relao programa anterior) porque seria preciso ler 10 variveis para as notas (i.e., nota1,
nota2, ..., nota10) e 10 para os nomes de alunos, totalizando 20 variveis. Do mesmo modo,
para uma turma com 20 alunos, seria preciso ler 40 variveis, sendo as 20 notas e os 20 nomes
dos alunos.
Considere a situao que fosse preciso ler as notas de todas as turmas de um colgio com
10000 alunos. Ou seja, Suponha uma colgio com 10000 alunos. Elaborar um programa que
leia as 10000 notas dos alunos e seus respectivos nomes e escreva apenas os nomes com a
nota acima da mdia.
Este programa assume proporo gigantesca porque preciso ler 20000 variveis (10000 para
as notas e 10000 para os nomes de aluno) tornando-o impraticvel de ser programado (do
modo como foi feito antes). Note que as variveis, nota1, nota2, nota3, ... podem ser
substitudas por os elementos de um vetor, por exemplo,
nota(1), nota(2), nota(3), ....
Neste caso, cada elemento do vetor nota seria lida, uma de cada vez, por um lao for...end
atravs dos seus ndices. Vejamos a soluo usando vetores.

Comentrio. No lao for...end das linhas 3 a 6, as notas e os nomes de aluno so lido um de


cada vez. O acumulador soma, dentro do lao, soma todas as notas (uma por vez).
Os nomes dos alunos com nota acima da mdia so escritos no segundo lao for...end nas
linha 8 a 12. Cada nota comparada, uma de cada vez, com a mdia e caso a nota de ndice i
passe no teste, o correspondente nome do aluno de ndice i escrito.
A concluso que o uso de vetores permite ler e armazenar grande quantidade de notas (e
nomes) em um simples lao for...end reduzindo, deste modo, o tamanho de um programa cuja
elaborao sem o uso de vetores se torna impraticvel.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

92

7.15 EXEMPLOS COM MATRIZES


7.15.1 Ordenao de Vetores
A ordenao de elementos de um conjunto fundamental no dia a dia. Um exemplo bem
comum so as listas telefnicas cuja ordenao em ordem alfabtica possibilita rapidamente
encontrar um nmero de telefone. Outro exemplo a ordenao de livros por autor ou por
assunto em uma grande biblioteca. Por isso a ordenao uma atividade constantemente
solicitada em programao. Provavelmente, o algoritmo de ordenao mais conhecido da
computao chama-se o algoritmo da bolha.
A idia do algoritmo da bolha passar por todo o vetor comparando cada elemento
com o elemento seguinte (i.e., a(i) com a(i+1)) e troca-los caso estes dois elementos no
estejam na ordem apropriada. Por diversas vezes, o algoritmo repete a passada at o vetor
ficar completamente ordenado.
Vejamos como funciona este algoritmo para ordenar o a = [5 4 3 2 6].
A) Vetor inicial desordenado: a = [5 4 3 2 6]
Passo A.1 Comparar a(1) e a(2). Se a(1) > a(2), troque os dois elementos.
a = [4 5 3 2 6]
Houve troca do nmero 4 com o nmero 5.
Passo A.2 Comparar a(2) e a(3). Se a(2) > a(3), troque os dois elementos.
a = [4 3 5 2 6]
Houve troca do nmero 5 com o nmero 3.
Passo A.3 Comparar a(3) e a(4). Se a(3) > a(4), troque os dois elementos.
a = [4 3 2 5 6]
Houve troca.
Passo A.4 Comparar a(4) e a(5). Se a(4) > a(5), troque os dois elementos.
a = [4 3 2 5 6]
No houve troca porque a(4) no maior que a(5).
B) Repetio a iterao (porque o vetor ainda no est ordenado):
Passo B.1 Comparar a[1] e a[2]. Se a[1] > a[2], troque os dois elementos.
a = [3 4 2 5 6]
Houve troca do nmero 4 com o nmero 3.
Passo B.2 Comparar a[2] e a[3]. Se a[2] > a[3], troque os dois elementos.
a = [3 2 4 5 6]
Houve troca do nmero 4 com o nmero 2.
Passo B.3 Comparar a[3] e a[4]. Se a[3] > a[4], troque os dois elementos.
a = [3 2 4 5 6]
No houve troca.
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

93
Passo B.4 Comparar a[4] e a[5]. Se a[4] > a[5], troque os dois elementos.
a = [3 2 4 5 6]
Novamente no houve troca.
C) Repetio a iterao (porque o vetor no est ordenado)
Passo C.1 Comparar a[1] e a[2]. Se a[1] > a[2], troque os dois elementos.
a = [2 3 4 5 6]
Houve troca do nmero 3 com o nmero 2.
Passo C.2 Comparar a[2] e a[3]. Se a[2] > a[3], troque os dois elementos.
a = [2 3 4 5 6]
No houve troca.
Passo C.3 Comparar a[3] e a[4]. Se a[3] > a[4], troque os dois elementos.
a = [2 3 4 5 6]
No houve troca.
Passo C.4 Comparar a[4] e a[5]. Se a[4] > a[5], troque os dois elementos.
a = [2 3 4 5 6]
No houve troca.
D) Repetio a iterao.
(a) Passo D.1 Comparar a[1] e a[2]. Se a[1] > a[2], troque os dois elementos.
a = [2 3 4 5 6]
No houve troca.
(b) Passo D.2 Comparar a[2] e a[3]. Se a[2] > a[3], troque os dois elementos.
a = [2 3 4 5 6]
No houve troca.
(c) Passo D.3 Comparar a[3] e a[4]. Se a[3] > a[4], troque os dois elementos.
a = [2 3 4 5 6]
No houve troca.
(d) Passo D.4 Comparar a[4] e a[5]. Se a[4] > a[5], troque os elementos.
a = [2 3 4 5 6]
No houve troca.
E) Se no houve troca na ltima iterao ento pare porque o vetor j est ordenado.
O seguinte trecho de programa implementa o algoritmo da bolha para ordenar a vetor
a (supondo que o vetor a j foi lido e est na memria).

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

94

Comentrio. A varivel booleana HouveTroca indica se houve troca ou no aps a ltima


passada pelo vetor. A varivel HouveTroca assume o valor falso na linha 4, e se dentro do lao
interno for...end no houver troca ento a varivel HouveTroca continuar com valor falso
(isto far com que o lao while...end encerre a execuo do programa). Caso contrrio, a
varivel HouveTroca assume o valor verdadeiro na linha 10) (isto far com que o lao
while...end execute nova iterao).
A troca de um elemento com o elemento seguinte (i.e., a(i) com a(i+1)) realizado pelo trecho:
temp = a(i);
a(i) = a(i+1);
a(i+1) = temp;
A varivel temp uma varivel temporria usada apenas para guardar o valor de a(i) antes que
o mesmo seja perdido na atribuio a(i) = a(i+1).
Exerccio. Modifique trecho de programa que contm algoritmo da bolha para
colocar o vetor em ordem decrescente (troque o operador > por < na linha 6). Use esta
modificao para elaborar um programa para ler um vetor com 5 elementos, coloca-lo
em
ordem decrescente e escreve-lo.
7.15.2 Gerando Nmeros Aleatrios
Exerccio resolvido. Elabore um programa que, simulando lanamentos de dados,
calcule a freqncia de cada resultado aps 100 lanamentos.
Para resolver este problema utiliza-se a funo rand (tambm chamada de gerador de
nmeros aleatrios). Esta funo retorna um nmero diferente (aleatrio) cada vez que
chamada, por exemplo:
-->rand()
ans =
.4410204
-->rand()
ans =
.8859080

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

95

-->rand()
ans =
.6868068

Os nmeros aleatrios gerados por rand so nmeros fracionrios no intervalo. 0; 1.


No entanto, o problema pede para gerar nmeros inteiros aleatoriamente entre 1 e 6
de modo a simular o lanamento de um dado. Isto pode ser obtido com o seguinte
procedimento.
Primeiro, multiplica-se rand por 6 para gerar nmeros no intervalo.0; 6. Por exemplo:
7.15.3 SOLUO DE SISTEMAS DE EQUAES LINEARES
O Scilab foi especialmente projetado para simplificar clculos de lgebra Linear. Um dos
problemas mais comuns de lgebra Linear a soluo de sistemas de equaes lineares:

Este sistema tambm pode ser escrito na forma matricial Ax D b:

Iniciamos a soluo do sistema preparando as matrizes A e b:


-->A = [1 -1 2; 1 -1 -6; 4 0 1]
A=
! 1. - 1. 2. !
! 1. - 1. - 6. !
! 4. 0. 1. !
-->b = [5 0 5]'
b=
! 5. !
! 0. !
! 5. !

// A transposta importante!

O operador de diviso esquerda \ resolve o sistema, isto , o resultado de A\b a


soluo do sistema:1
-->A\b
ans =
! 1.09375 !
! - 2.65625 !
! 0.625 !

7.16 Instruo BREAK e CONTINUE


A instruo break interrompe um ciclo. Normalmente, usamos esta declarao em loops em
que, uma vez que alguma condio satisfeita, o ciclo deve ser interrompido. No exemplo a

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

96
seguir, usamos a instruo break, a fim de calcular a soma dos nmeros inteiros de 1 a 10.
Quando a varivel i maior do que 10, o ciclo interrompido.
s=0
i=1
while ( %t )
if ( i > 10 ) then
break
end
s=s+i
i=i+1
end
No fim do algoritmo o valor da variveis so:

s=
55.
i=
11.
A instruo continue faz o interpretador de ir para o prximo ciclo, de modo que as
declaraes no corpo do lao no so executadas neste momento. Quando a instruo
continue executada, Scilab ignora as outras declaraes e volta diretamente para a instruo
WHILE ou FOR e continua o ciclo.
No exemplo a seguir, vamos calcular a soma s = 1 + 3 + 5 + 7 + 9 = 25. A funo, mdulo (i, 2)
retorna 0 se o nmero i 2. Nesta situao, o script vai para o prximo ciclo.
s=0
i=0
while ( i< 10 )
i=i+1
if ( modulo ( i , 2 ) == 0 ) then
continue
end
s=s+i
end

Se o script anterior executado, os valores finais das variveis i e s so os seguintes:


-->s
s=
25.
-->i
i=
10.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

97

O algoritmo anterior pode ser realizado em uma chamada de funo s. Na verdade, o script a
seguir usa a funo sum, combinado com o operador pontos ":" e produz o mesmo resultado.
s = sum (1:2:10);

8 FUNES
8.1

INTRODUO

Quando o tamanho de um programa estende-se a centenas de linhas, o programa


torna-se
difcil de compreender e administrar. Por isso, dividir um grande programa
computacional
em partes menores para facilitar a compreenso (ou legibilidade) do problema uma
tarefa comum em programao de computadores. No Scilab, este trecho menor do
programa
chamado de funo. Funes so tambm chamadas de sub-rotinas, mdulos,
subprogramas ou subalgoritmos.
Funes so usados tambm para evitar repetio do mesmo cdigo no programa.
Por exemplo, suponha que seu programa tenha a tarefa de por em ordem crescente
vrias
listas de nmeros. Em vez de repetir o cdigo toda vez que for realizar esta tarefa,
voc escreve uma funo para ordenar listas numricas e depois chama a mesma
funo
sempre que for ordenar uma lista. Neste sentido, as funes apresentam as seguintes
vantagens:
a) Voc escreve o cdigo somente uma vez. b) Voc pode reutilizar a funo em
outros programas. c) Uma vez que voc tem corrigido todos os erros do programas
(i.e.,
depurado o programa), ele funcionara corretamente no importa quantas vezes voc
use
a funo.
Em resumo, funes so usadas para:
1. Dividir um grande programa em programas menores;
2. Repetir uma tarefa que realizada frequentemente sem ter que repetir o mesmo
cdigo em vrios lugares;
3. Aumentar a legibilidade do programa.
No Scilab j existem muitas funes prontas (pr-definidas), algumas delas
elementares
(cos(x) e sin(x)) e outras especficas para aplicaes em engenharia, matemtica,
fsica, e na estatstica. O objeto de estudo deste captulo so as funes definidas pelo
usurio. Isto , funes que so elaboradas pelos prprios usurios do Scilab.

8.2

PARMETROS DE ENTRADA E SADA

As funes recebem dados por meio de uma lista de parmetros de entrada, e retorna
resultados por uma lista de parmetros de sada. Por exemplo, a funo cos(x) recebe
um valor e retorna um valor, logo tem um parmetro de entrada e um de sada. A
funo,
modulo(x,y) recebe dois valores (o numerador e o denominador) e retorna um valor (o

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

98
resto). Logo, modulo(x,y) tm dois parmetros de entrada e um de sada. A funo
size(x), tem um parmetro de entrada e dois de sada. Por exemplo,
74
7.3 Funes Definidas pelo Usurio / UFRN-DCA - 13 de Junho de 2011 75
-->a = [1 2 3; 4 5 6]
a=
! 1. 2. 3. !
! 4. 5. 6. !
-->[l c] = size(a)
c=
3.
l=
2.

porque recebe uma matriz e devolve dois valores (o nmero de linhas e colunas).

7.3 FUNES DEFINIDAS PELO USURIO


A forma geral de uma funo :
function [y1,y2,...,ym] = nomedafuncao(x1,x2,x3,...,xn)
<comandos>...
endfunction
Onde,
function Palavra reservada que indica o inicio de uma funo.
nomedafuncao o nome da funo definido pelo usurio.
x1, x2, x3,..., xn parmetros de entrada.
y1, y2, y3,..., ym parmetros de sada.
<comandos> Comandos do Scilab a serem executados pela funo.
A declarao:
function [y1,y2,...,ym] = nomedafuncao(x1,x2,x3,...,xn)

o cabealho da funo e serve, entre outras coisas, para dar o nome da funo e
definir
a lista de parmetros de entrada e sada (tambm chamados de parmetros formais).
Quando h apenas um parmetro de sada, os colchetes podem ser omitidos. Por
exemplo, a seguinte funo tem apenas um parmetro de sada e um parmetro de
entrada.
Esta funo calcula o fatorial de um nmero:
1 function y = fat(n)
2 p = 1;
3 for i = n:-1:2
4 p = p*i;
5 end
6 y = p;
7 endfunction

Na linha de comando y = p da funo fat(x) atribudo o valor a ser retornado


pelo parmetro de sada y.
+ IMPORTANTE: Cada parmetro da lista de parmetros de sada de uma funo
necessrio aparecer a esquerda de pelo menos um comando de atribuio da
funo.
7.4 A Idia Bsica das Funes / UFRN-DCA - 13 de Junho de 2011 76
Quando a funo termina, o valor contido nos parmetros de sada so retornados ao
programa que chamou a funo.
Uma chamada (ou ativao) de funo a solicitao explcita para executar uma
funo. A seguinte chamada de funo no console do Scilab executa a funo fat:
-->fat(4)
ans =
120.

Quando ocorre a chamada fat(5), o valor 5 passado para a varivel n (o parmetro


de entrada de fat). Deste modo, a funo fat calcula o fatorial de n (igual a 5) e retorna

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

99
o valor contido no parmetro de sada y, ou seja, 120.
comum criarmos functions em um arquivo de script separado para ser utilizado em
vrios programas. Para isto digitamos a funo em um arquivo com extenso .SCI. Por
exemplo, fatorial.sci. Em seguida, usamos a funo exec() do Scilab para carregar o
arquivo fatorial.sci para dentro do Scilab. Por exemplo:
--> exec("fatorial.sci");

Neste comando, foi assumido que o arquivo fatorial.sci foi salvo no diretrio atual do
Scilab. Use a opo ARQUIVO ALTERAR O DIRETRIO ATUAL ou o comando
chdir() para mudar o diretrio atual do Scilab.
Uma funo definida pelo usurio tem o mesmo status de uma funo pr-definida do
Scilab e, portanto, pode ser usada do mesmo modo. Vejamos um exemplo.
Exerccio resolvido 7.3.1. Calcular o seguinte somatrio usando a funo fat definida
acima.
SD
X10
iD1

i . D 1. C 2. C : : : C 10.
Soluo:
1 soma = 0;
2 for j=1:10
3 soma = soma + fat(j);
4 end

Comentrio. Para executar este programa, o usurio deve, antes, carregar a funo
fat(). Isto pode ser feito atravs, por exemplo, da funo exec().

7.4 A IDIA BSICA DAS FUNES


Com as funes possvel escrever um programa e chama-lo quantas vezes quiser
em
diferentes pontos de um outro programa, geralmente, usando diferentes parmetros de
entrada. Se uma funo chamada, o controle de execuo dos comandos
transferido
para a funo. Quando a funo termina, o controle devolvido ao programa
chamador no
mesmo local em que a funo foi originalmente chamada (ver Figura 7.1). E o
programa
chamador continua executando os seus comandos a partir da linha imediatamente
depois
da chamada da funo.
Considere as seguintes funes
7.4 A Idia Bsica das Funes / UFRN-DCA - 13 de Junho de 2011 77
Programa
Principal
comandos
a=func1(b)
comandos
m=func2(n)
comandos
q=func3(p)
function y=func1(x)
comandos
endfunction
function y=func2(x)
comandos
endfunction
function y=func3(x)
comandos
b=func4(x)
comandos

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

100
endfunction
function y=func4(x)
comandos
endfunction

Figura 7.1: O programa principal chama as funes func1(), func2() e func3(). O


controle
transferido para as funes, mas sempre retorna ao programa principal. A funo
func3() chama func4() transferindo o controle para func4(). A funo func4(), quando
termina, retorna o controle ao programa chamador (que func3()).
1 function y = soma(x)
2 n = length(x); // calcula o tamanho do vetor
3 s = 0;
4 for i=1:n
5 s = s + x(i);
6 end
7 y = s;
8 endfunction
1 function y = media(x)
2 n = length(x);
3 y = soma(x)/n; // chama a funo soma
4 endfunction

E o programa principal que chama as funes.


1 ne = input("Qual o numero de elementos do vetor");
2 for i=1:ne
3 a(i) = input("digite um elemento");
4 end
5 s = soma(a);
6 m = media(a);
7 printf("soma = %g\n",s);
8 printf("media = %g\n",m);

No programa principal, a chamada da funo soma() (na linha 5) transfere o fluxo de


controle para a funo que, ao terminar, devolve o controle para o programa
chamador.
7.5 Escopo de Variveis / UFRN-DCA - 13 de Junho de 2011 78
O programa principal executa o comando da linha seguinte (linha 6) e chama a funo
media(). A funo media() chama a funo soma() (linha 3 da funo media()) que
devolve o controle para a funo media() que ento devolve o controle para o
programa
chamador.

7.5 ESCOPO DE VARIVEIS


Relembremos que as variveis definidas no console do Scilab e pelos scripts so
armazenadas
em uma rea da memria chamada de espao de trabalho. Por exemplo,
--> clear; // apaga todas as variveis do espao de trabalho
--> x = 2;
--> y = 3;

Como x e y esto na memria, esto o comando


--> z = x + y;

armazena 5 em z. Porm, seguinte comando causar um erro:


--> a = x + y + w

por que a varivel w no est no espao de trabalho (uma vez no foi definida no
console).
As variveis definidas pelas funes tambm no so armazenadas no espao de
trabalho.
Deste modo, estas variveis no so visveis no console. Por exemplo, a varivel p da
funo fat() no pode ser usada no console:
--> fat(3)

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

101
--> p + 1 // gera erro

porque p no esta definida no espao de trabalho. Neste caso, dizemos que p uma
varivel local da funo fat(). A seguir introduziremos os conceitos de variveis locais
e o globais.
7.5.1 Variveis Locais
Uma varivel dita ser local quando definida dentro de uma funo. Toda varivel
local
deixa de existir (torna-se invlida) quando a funo finalizada. Por isso, a varivel
local
dita ser visvel localmente na funo. As variveis locais tambm no podem alterar
as
variveis do espao de trabalho.
Vejamos um exemplo. Considere a seguinte funo:
1 function y = beta(x)
2 a = 3;
3 b = 2;
4 c = 5;
5 printf("a = %g b = %g c = %g\n",a,b,c);
6 y = a + b + c + x;
7 endfunction

e programa principal que usa esta funo


7.5 Escopo de Variveis / UFRN-DCA - 13 de Junho de 2011 79
1 a = 23;
2 b = 50;
3 c = 200;
4 w = beta(2);
5 printf("a = %g b = %g c = %g\n",a,b,c);

Quando ns executamos o programa principal no Scilab obtemos a seguinte resposta:


a=3b=2c=5
a = 23 b = 50 c = 200
Note que dentro da funo beta as variveis a, b e c possuem os valores 3, 2, e 5
respectivamente. Ao passo que, fora da funo beta, as variveis a, b e c possuem os
valores 23, 50, e 200 respectivamente. A explicao desta discordncia a seguinte:
as
variveis a, b, e c dentro da funo beta so locais e por isso deixam de existir to
logo
a funo termine. Scilab armazena as variveis locais da funo em uma local
diferente
das do espao de trabalho. Portanto, as variveis do espao de trabalho (a = 23, b =
50, c
= 200) no so alteradas pela funo.
O fato de que as variveis locais s poderem ser usadas internamente pela funo
elimina qualquer conflito que possa surgir, caso um programa (ou outras funes)
resolva
utilizar os mesmos nomes de variveis da funo. Uma forma de evitar este
comportamento
usar as variveis globais.
7.5.2 Variveis Globais
Para alterar as variveis do programa principal, temos que transforma-las em variveis
globais usando a declarao global. Por exemplo, considere a seguinte funo:
1 function y = gama(x)
2 global R;
3 global S;
4 R = 1;
5 S = 2;
6 t = 3;
7 printf("R = %g S = %g t = %g\n",R,S,t);

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

102
8 y = R + S + t + x;
9 endfunction

e programa principal que usa esta funo


1 global R;
2 global S;
3 R = 5;
4 S = 10;
5 t = 15;
6 u = gama(2);
7 printf("R = %g S = %g t = %g\n",R,S,t);

Quando ns executamos o programa principal no Scilab obtemos a seguinte resposta:


R=1S=2t=3
R = 1 S = 2 t = 15
7.6 Os Programas do Scilab / UFRN-DCA - 13 de Junho de 2011 80
Note que as variveis R e S do programa principal foram alteradas dentro da funo
Boa
programao: use
caixa alta para
nomes de variveis
globais para tornar
claro ao leitor que
so globais e para
no confundir com
variveis locais.

gama(). Isto aconteceu porque usamos a comando global. Porm a varivel t no foi
alterada pela funo gama() porque no uma varivel global, ou seja, a varivel t
no
foi declarada como global, permanecendo como uma varivel local.
Conclumos que variveis locais so visveis somente dentro na funo, mas variveis
globais podem ser visveis tanto dentro como fora de uma funo. Variveis globais
so,
portanto, uma forma de compartilhar uma varivel entre a funo e o programa
chamador.
A declarao global deve ser usado tanto no programa chamador como na funo (e
em qualquer funo que venha a compartilhar a mesma varivel). A declarao global
opcional quando uma varivel, apesar de ser global, no modificada pela funo.
Por
exemplo, considere a funo:
1 function y = eta(x)
2 global S
3 S = x+3;
4 y = R + S;
5 endfunction

e o programa principal que usa esta funo:


1 global S
2 R = 5;
3 S = 10;
4 u = eta(2);
5 printf("u = %g \n",u);

Claramente, as variveis R e S so globais, mas somente a varivel S foi declarada


global por que ela modificada pela funo eta(). A varivel global R no precisa ser
declarada global porque no modificada pela funo eta().

7.6 OS PROGRAMAS DO SCILAB


Existem no Scilab dois tipos de programas:
1. Arquivo de comandos.
(a) uma sequncia de comandos do Scilab;
(b) Possuem extenso de arquivo .SCE (mas no obrigatrio);

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

103
(c) executado pelo comando exec();
(d) Armazena suas variveis em uma rea chamada Espao de Trabalho (Workplace).
2. Arquivo de funes.
(a) uma sequncia de functions (sub-rotinas);
(b) Possuem extenso de arquivo .SCI;
(c) carregado pelo comando exec();
(d) Armazena suas variveis em uma rea prpria. Essas variveis so chamadas
de locais.
7.7 Passagem de Parmetros / UFRN-DCA - 13 de Junho de 2011 81

7.7 PASSAGEM DE PARMETROS


Funes podem ter zero, um ou mais de um parmetros de entrada. Por exemplo,
uma
funo com o seguinte cabealho possui um parmetro de entrada:
function x = fatorial(n)

Esta outra function tem trs parmetros de entrada:


function x = zeta(a,b,c)

Esta funo no tem parmetros de entrada:


function y = psi()

Um parmetro de sada pode ser um nmero, um vetor ou uma matriz. A seguinte


Funo possui trs parmetros de sada (e trs de entrada):
1 function [x, y, z] = beta(a, b, c)
2 a = a/2;
3 b = b/2;
4 c = c/2;
5 printf("a=%g b=%g c=%g\n",a,b,c);
6 x = a;
7 y = b;
8 z = c;
9 endfunction

Considere o seguinte programa principal


1 a = 10;
2 b = 20;
3 c = 30;
4 r1 = 2;
5 r2 = 4;
6 r3 = 6;
7 [d1, d2, d3] = beta(r1,r2,r3)
8 printf("a=%g b=%g c=%g\n",a,b,c);
9 printf("d1=%g d2=%g d3=%g\n",d1,d2,d3);

Este programa chama beta() e passa os parmetros r1, r2 e r3 do seguinte modo:


o valor de r1 colocado em a, o valor de r2 colocado em b e o valor de r3
colocado
em c. Do mesmo modo, a funo retorna os parmetros x, y e z para as variveis d1,
d2
e d3, respectivamente. O resultado do programa
Resultado
a=1 b=2 c=3
a=10 b=20 c=30
d1=1 d2=2 d3=3

7.8 EXEMPLOS
Exerccio resolvido 7.8.1. Ler trs pontos .x1; y1/, .x2; y2/ e .x3; y3/ do plano cartesiano
representando os vrtices de um tringulo. Calcular a rea do tringulo.
Da geometria, tem-se o seguinte fato: se a, b e c so as medidas dos lados de um
tringulo, ento a rea deste tringulo dada por:
area D
p
s.s a/.s b/.s c/
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

104
7.8 Exemplos / UFRN-DCA - 13 de Junho de 2011 82
onde s o semi-permetro dado por:
sD
aCbCc
2
Para calcular os lados do triangulo ser usado a funo dist para calcular a distncia
entre dois pontos .x1; y1/ e .x2; y2/ no plano cartesiano:
1 function d = dist(x1,y1,x2,y2)
2 d = sqrt((x2-x1)^2+(y2-y1)^2);
3 endfunction

Usando as frmulas acima, uma soluo para o problema a seguinte:


1 x1 = input("digite x1");
2 y1 = input("digite y1");
3 x2 = input("digite x2");
4 y2 = input("digite y2");
5 x3 = input("digite x3");
6 y3 = input("digite y3");
7
8 // Clculo dos lados do tringulo
9
10 a = dist(x1,y1,x2,y2); // medida do lado A
11 b = dist(x1,y1,x3,y3); // medida do lado B
12 c = dist(x2,y2,x3,y3); // medida do lado C
13
14 s = (a+b+c)/2; // semiperimetro
15
16 area = sqrt(s*(s-a)*(s-b)*(s-c));
17
18 printf("rea do tringulo = %g\n",area);

Exerccio resolvido 7.8.2. Elaborar uma funo inverte() que receba um vetor X.
A funo retorna um vetor x invertido. Por exemplo, se a funo recebe |[2 1 8 5]|, ela
retorna [5 8 1 2].
Soluo:
1 function y = inverte(x)
2 n = length(x);
3 for i=1:n
4 y(i) = x(n+1-i);
5 end
6 endfunction

Exerccio resolvido 7.8.3. Muitas funes matemticas podem ser calculadas por meio
de um somatrio infinito de termos. Em cada caso, a preciso aumenta medida que
mais
termos na srie so considerados. Um exemplo, a funo cos x:
cos x D 1
x2
2.
C
x4
4.

x6
6.
C
Para clculos prticos, este somatrio infinito devem terminar aps um nmero finito
de
termos (penalizando a preciso do resultado). Preparar uma funo para calcular o
coseno

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

105
(funo COSENO.x; n/), com duas variveis de entrada, onde a primeira varivel
de entrada x e a segunda varivel de entrada o nmero de termos a serem
utilizados
nos clculos.
Soluo
7.9 O Comando return / UFRN-DCA - 13 de Junho de 2011 83
1 function y = coseno(x,n)
2 s = 1;
3 for i=1:n
4 num = x^(2*i);
5 den = fat(2*i);
6 sinal = (-1)^i;
7 s = s + sinal*num/den;
8 end
9 y = s;
10 endfunction

Funo auxiliar para calcular o fatorial:


1 function x = fat(n)
2 p = 1;
3 for i=n:-1:2
4 p = p*i;
5 end
6 x = p;
7 endfunction

Exerccio resolvido 7.8.4. Elaborar uma funo membro que receba um nmero e um
vetor. Uma funo retorna o valor %t se o nmero existe no vetor. Caso contrrio, a
funo retorna %f.

7.9 O COMANDO RETURN


Normalmente uma funo termina aps executar a ltima linha. O comando return,
porm,
pode interromper a execuo de uma function em qualquer ponto do programa. Por
exemplo,
1 function [maxdc, indic] = mdc(a, b)
2 // Esta funo calcula o mximo divisor de dois
3 // nmeros a e b positivos.
4 // indic retorna 1 se o clculo do m.d.c. teve xito
5 // retorna 0 se os dados de entrada foram
6 // inadequados.
7
8 indic = 0;
9 maxdc = 0;
10 if round(a) <> a | round(b) <> b
11 return; // Aqui o comando return interrompe
12 // o programa.
13 end
14 if a < 1 | b < 1
15 return; // Aqui tambm o comando return
16 // interrompe o programa.
17 end
18 if a < b
19 t = a;
20 a = b;
21 b = t;
22 end
23 indic = 1;
24 r = 1;

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 13 de Junho de


2011 84

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

106
25 while r <> 0
26 r = modulo(a, b);
27 a = b;
28 b = r;
29 end
30 maxdc = a;
31 endfunction

7.10 ESTUDO DE CASO: UM PROGRAMA DE ESTATSTICA


Ser elaborado nesta seo um programa para calcular as seguintes estatsticas de
conjuntos
de valores digitados pelos usurio e armazenado no vetor x D .x1; x2; : : : ; xn/.
soma.x/ D
Xn
iD1
xi

mdia.x/ D
1
n
Xn
iD1
xi

varincia.x/ D
1
n1
Xn
iD1

.xi mdia.x//2
desvio padro.x/ D
p
varincia.x/
O primeiro programa de estatstica mostrado abaixo no emprega a tcnica da
subrotina.
Tornando-se grande e mais complexo.
PROGRAMA VERSO 1 - Sem sub-rotinas
1 printf("Meu Programa de Estatstica Versao 1");
2 n = input("Digite o numero de elementos");
3 for i=1:n
4 x(i) = input("Digite um nmero entre 1 e 10");
5 end
6 printf("Opcao 1 - Soma\n");
7 printf("Opcao 2 - Mdia\n");
8 printf("Opcao 3 - Desvio padro\n");
9 printf("Opcao 4 - Varincia\n");
10 opcao = input("Digite sua opcao");
11
12 if opcao == 1
13 soma = 0;
14 for i=1:n
15 soma = soma + x(i);
16 end
17 printf("A soma igual a %g",soma);
18 end
19
20 if opcao == 2
21 soma = 0;
22 for i=1:n
23 soma = soma + x(i);
24 end

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

107
25 media = soma/n;
26 printf("A mdia igual a %g",media);

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 13 de Junho de


2011 85
27 end
28
29 if opcao == 3
30 soma = 0;
31 for i=1:n
32 soma = soma + x(i);
33 end
34 media = soma/n;
35 d = 0;
36 for i = 1:n
37 d = d + (x(i)-media)^2;
38 end
39 dpad = sqrt(d/(n-1));
40 printf("O desvio padro igual a %g",dpad);
41 end
42
43 if opcao == 4
44 soma = 0;
45 for i=1:n
46 soma = soma + x(i);
47 end
48 media = soma/n;
49 d = 0;
50 for i = 1:n
51 d = d + (x(i)-media)^2;
52 end
53 var = d/(n-1);
54 printf("A varincia igual a %g",var);
55 end

O programa 2, mostrado a seguir, emprega a tcnica de modularizao, que divide o


programa em partes menores tornando-o mais fcil de compreender.
PROGRAMA VERSO 2 - Com sub-rotinas
O programa principal:
1 printf("Meu Programa de Estatstica Versao 2");
2
3 n = input("Digite o nmero de elementos");
4 for i=1:n
5 x(i) = input("Digite um nmero entre 1 e 10");
6 end
7
8 printf("Opo 1 - Soma\n");
9 printf("Opo 2 - Mdia\n");
10 printf("Opo 3 - Desvio padro\n");
11 printf("Opo 4 - Varincia\n");
12 opcao = input("Digite sua opo");
13
14 if opcao == 1
15 printf("A soma igual a %g",soma(x));
16 end
17
18 if opcao == 2
19 printf("A mdia igual a %g",media(x));
20 end
21

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 13 de Junho de


2011 86
Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

108
22 if opcao == 3
23 printf("O desvio padro igual a %g",dpad(x));
24 end
25
26 if opcao == 4
27 printf("A varincia igual a %g",var(x));
28 end

As sub-rotinas:
1 // Funo soma
2 function y = soma(x)
3 n = length(x);
4 s = 0;
5 for i=1:n
6 s = s + x(i);
7 end
8 y = s;
9 endfunction
10
11 // Funo mdia
12 function y = media(x)
13 n = length(x);
14 y = soma(x)/n;
15 endfunction
16
17 // Funo varincia
18 function y = var(x)
19 n = length(x);
20 m = media(x);
21 d = 0;
22 for i = 1:n
23 d = d + (x(i)-m)^2;
24 end
25 y = d/(n-1);
26 endfunction
27
28 // Funo Desvio Padro
29 function y = dpad(x)
30 y = sqrt(var(x));
31 endfunction

Note que para calcular a varincia foi usado a funo mdia, evitando assim a
repetio
de cdigo. Alis, como j foi dito, evitar a repetio de cdigo uma das vantagens
de usar sub-rotinas. A funo length(x) usada no cdigo acima explicada na prxima
seo.
7.10.1 O Comando de Mltipla Escolha SELECT-CASE
O comando SELECT-CASE conveniente para testar se uma expresso igual a
uma
lista de valores diferentes. A sintaxe do SELECT-CASE :
select <expresso>
case <valor1> then
<comandos> ...
case <valor2> then
<comandos> ...
7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 13 de Junho de
2011 87
case <valor i> then
<comandos> ...
else

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

109
<comandos> ...
end
end
Se <expresso> for igual a <valor1> ento o primeiro case executado. Se
<expresso>
for igual a <valor2> ento o segundo case executado. E assim por diante. O
comando else executado se todas as comparaes do comando case forem falsas.
PROGRAMA VERSO 3 - Com o comando SELECT-CASE
1 printf("Meu Programa de Estatstica Versao 3");
2
3 n = input("Digite o nmero de elementos");
4 for i=1:n
5 x(i) = input("Digite um nmero entre 1 e 10");
6 end
7
8 printf("Opo 1 - Soma\n");
9 printf("Opo 2 - Mdia\n");
10 printf("Opo 3 - Desvio padro\n");
11 printf("Opo 4 - Varincia\n");
12 opcao = input("Digite sua opo");
13
14 select opcao
15 case 1 then
16 printf("A soma igual a %g\n",soma(x));
17 case 2 then
18 printf("A mdia igual a %g\n",media(x));
19 case 3 then
20 printf("O desvio padro igual a %g\n",dpad(x));
21 case 4 then
22 printf("A varincia igual a %g\n",var(x));
23 end

A seguir o programa 3 incrementado em dois aspectos:


1. Usa um loop que repete o menu at o usurio digitar a opo 0;
2. Verifica se o usurio digitou uma opo invlida usando o comando ELSE.
PROGRAMA VERSO 4 - Verso Final
1 printf("Meu Programa de Estatstica Versao 4");
2 n = input("Digite o nmero de elementos");
3 for i=1:n
4 x(i) = input("Digite um nmero entre 1 e 10");
5 end
6
7 opcao = 1;
8 while opcao <> 0
9 printf("\n");
10 printf("Opo 1 - Soma\n");
11 printf("Opo 2 - Mdia\n");
12 printf("Opo 3 - Desvio padro\n");
13 printf("Opo 4 - Varincia\n");

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 13 de Junho de


2011 88
14 printf("Opo 0 - Fim\n");
15 opcao = input("Digite sua opo");
16 select opcao
17 case 1
18 printf("A soma igual a %g\n",soma(x));
19
20 case 2
21 printf("A mdia igual a %g\n",media(x));
22

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

110
23 case 3
24 printf("O desvio padro igual a %g\n",dpad(x));
25
26 case 4
27 printf("A varincia igual a %g\n",var(x));
28
29 case 0
30 printf("At a logo\n");
31
32 else
33 printf("Voc digitou uma opo invlida\n");
34 end
35 end

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

111

9 Referncias
[1] Atlas - Automatically Tuned Linear Algebra Software. http://math-atlas.
sourceforge.net.
[2] Cecill and free software. http://www.cecill.info.
[3] C Bunks, J.-P. Chancelier, F. Delebecque, C. Gomez, M. Goursat,
R. Nikoukhah, and S. Steer. Engineering and Scienti_c Computing With Scilab.
Birkhauser Boston, 1999.
[4] Stephen L. Campbell, Jean-Philippe Chancelier, and Ramine Nikoukhah.
Modeling and Simulation in Scilab/Scicos. Springer, 2006.
[5] J.-P. Chancelier, F. Delebecque, C. Gomez, M. Goursat, R. Nikoukhah, and
S. Steer. Introduction _a Scilab, Deuxi_eme _ Edition. Springer, 2007.
[6] Intel. Intel Math Kernel Library. http://software.intel.com/en-us/
intel-mkl/.
[7] Sylvestre Ledru. Di_erent execution modes of Scilab. http://wiki.scilab.
org/Different_execution_modes_of_Scilab.
[8] Sylvestre Ledru and Yung-Jang Lee. Localization. http://wiki.scilab.org/
Localization.
[9] Sylvestre Ledru, Pierre Mar_echal, and Simon Gareste. Atoms. http://wiki.
scilab.org/ATOMS.
[10] Sylvestre Ledru, Pierre Mar_echal, and Cl_ement David. Code conventions
for the Scilab programming language. http://wiki.scilab.org/Code%
20Conventions%20for%20the%20Scilab%20Programming%20Language.
[11] Cleve Moler. Numerical computing with Matlab.
[12] Flexdock project. Flexdock project home. https://flexdock.dev.java.net/.
[13] The Scilab Consortium. Scilab. http://www.scilab.org.

Algoritmo-Pseudocdigo com Scilab

Prof. Airton J.S.Garcia

You might also like