Vous êtes sur la page 1sur 92

Programando com Scilab Verso 0.

25
E. G. M. de Lacerda Departamento de Engenharia de Computao e Automao (DCA) UFRN estefane@dca.ufrn.br 2 de Maio de 2011

Resumo Este curso apresenta a linguagem de programao do Scilab da mesma forma que um curso tradicional de introduo a programao. O Scilab um ambiente de programao dedicado a resoluo de problemas cientcos e de engenharia. Ele est disponvel1 para vrios sistemas operacionais tais como o Windows, Linux, Unix e MacOs. O material deste curso pode ser usado em qualquer um desses sistemas. Procure seu professor ou seu centro de computao local para informaes sobre como o Scilab est instalado localmente.

1 Pgina

do Scilab: http://www.scilab.org

Sumrio
1 Preliminares 1.1 Usando o Console do Scilab como uma Simples Calculadora 1.2 Variveis e o Comando de Atribuio . . . . . . . . . . . . 1.2.1 Regras para Formao de Nomes de Variveis . . . . 1.2.2 O Ponto e Vrgula . . . . . . . . . . . . . . . . . . 1.3 Expresses Aritmticas . . . . . . . . . . . . . . . . . . . . 1.3.1 Funes Matemticas Comuns . . . . . . . . . . . . 1.3.2 Funes de Arredondamento . . . . . . . . . . . . . 1.3.3 Ordem de Avaliao entre Operadores Aritmticos . 1.4 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Nmeros Complexos . . . . . . . . . . . . . . . . . . . . . 1.6 O Espao de Trabalho . . . . . . . . . . . . . . . . . . . . . 1.6.1 O Comando Clear . . . . . . . . . . . . . . . . . . 1.6.2 Os Comandos Save e Load . . . . . . . . . . . . . . 1.7 Formato de Visualizao dos Nmeros . . . . . . . . . . . . 1.8 Constantes Especiais do Scilab . . . . . . . . . . . . . . . . 1.9 A Varivel ans . . . . . . . . . . . . . . . . . . . . . . . . . 1.10 Ajuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquivos de Scripts 2.1 Comando de Entrada de Dados . . 2.2 Comandos de Sada de Dados . . . 2.3 Arquivos de Scripts . . . . . . . . 2.4 Criando Arquivos de Script . . . . 2.5 Executando Arquivos de Script . . 2.6 Exemplos . . . . . . . . . . . . . 2.7 Linhas de Comentrios . . . . . . 2.8 Alterando o Diretrio de Trabalho 1 1 2 3 3 3 4 4 5 6 8 9 9 9 10 11 11 11 11 13 13 13 15 16 17 18 19 19 21 21 22 23 23 23 24 25 26

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

Estruturas de Seleo 3.1 Estruturas de Controle . . . . . . . . . . 3.2 Expresses Booleanas . . . . . . . . . . . 3.3 Variveis Booleanas . . . . . . . . . . . . 3.4 Tipos de Dados Primitivos . . . . . . . . 3.5 Ordem de Avaliao entre os Operadores . 3.6 A Seleo Simples IF-END . . . . . . . . 3.7 A Seleo Bidirecional IF-ELSE-END . . 3.8 Aninhando Seletores . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

Estruturas de Repetio 4.1 Laos . . . . . . . . . . . . . 4.2 Lao Controlado Logicamente 4.3 Lao Controlado por Contador 4.4 Exemplos com Laos . . . . . 4.5 Laos Aninhados . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

32 32 32 35 36 39 42 42 43 45 48 49 52 52 54 55 58 58 61 64 65 66 67 68 69 72 72 73 74 74 74 75 76 78 78 79 80 81 81 83 84 86

Matrizes 5.1 Vetores . . . . . . . . . . . . . . . . . 5.1.1 Acessando Elementos do Vetor . 5.2 Matrizes Bidimensionais . . . . . . . . 5.3 Vetores de String . . . . . . . . . . . . 5.4 Estudo de Caso . . . . . . . . . . . . . 5.5 Exemplos com Matrizes . . . . . . . . 5.5.1 Ordenao de Vetores . . . . . 5.5.2 Gerando Nmeros Aleatrios . 5.5.3 Uma Aplicao de Matrizes . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

Manipulao Matricial 6.1 Construo de Matrizes . . . . . . . . . . . 6.2 Secionamento de Matrizes . . . . . . . . . 6.2.1 Indexao Linear . . . . . . . . . . 6.3 O Operador $ . . . . . . . . . . . . . . . . 6.4 Atribuio . . . . . . . . . . . . . . . . . . 6.5 Dimenso de Matrizes . . . . . . . . . . . 6.6 Operaes Escalar-Matriz . . . . . . . . . . 6.7 Operaes Matriz-Matriz . . . . . . . . . . 6.8 Soluo de Sistemas de Equaes Lineares . 6.9 Transposta de Matrizes Complexas . . . . . 6.10 Zeros e Ones . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

Funes 7.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Parmetros de Entrada e Sada . . . . . . . . . . . . . . 7.3 Funes Denidas pelo Usurio . . . . . . . . . . . . . 7.4 A Idia Bsica das Funes . . . . . . . . . . . . . . . . 7.5 Escopo de Variveis . . . . . . . . . . . . . . . . . . . . 7.5.1 Variveis Locais . . . . . . . . . . . . . . . . . 7.5.2 Variveis Globais . . . . . . . . . . . . . . . . . 7.6 Os Programas do Scilab . . . . . . . . . . . . . . . . . . 7.7 Passagem de Parmetros . . . . . . . . . . . . . . . . . 7.8 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . 7.9 O Comando return . . . . . . . . . . . . . . . . . . . . 7.10 Estudo de Caso: Um Programa de Estatstica . . . . . . 7.10.1 O Comando de Mltipla Escolha SELECT-CASE

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

Captulo

PRELIMINARES

N
1.1

ESTE captulo sero apresentados o ambiente de trabalho do Scilab e conceitos bsicos de programao como variveis, tipos de dados e expresses aritmticas.

USANDO O CONSOLE DO SCILAB COMO UMA SIMPLES CALCULADORA

O Scilab pode fazer operaes aritmticas com nmeros reais e complexos. Os operadores aritmticos so: Adio Subtrao Multiplicao Diviso Potenciao

C E B G

Quando o Scilab executado surge uma janela chamada de console do Scilab como mostrado na Figura a seguir. O console do Scilab o mecanismo usado pelo usurio para interagir com o Scilab por meio de comandos1 .

1 Em computao, esta forma de interagir com o computador chamada de Interface de Linha de Comandos. Consiste em digitar uma linha de texto representando um comando ou tarefa a ser executada pelo computador. parte fundamental de muitos softwares cientcos (e.g., Matlab, Maple) e est presente em vrias linguagens de programao (e.g., Python e Perl) e sistemas operacionais como Linux (Shell) e Windows (DOS e Powershell).

1.2 Variveis e o Comando de Atribuio / UFRN-DCA - 2 de Maio de 2011

Procure pelo smbolo:

-->
Ele chamado de prompt e indica que o console do Scilab est esperando um comando a ser digitado pelo usurio. Portanto, as operaes aritmticas so digitados aps o smbolo !b e em seguida tecla-se [ENTER]. Exemplo:
EEbPCQ ixi ns a SF

Outros exemplos:
EEbSCTGP ns a VF EEbRP ns a ITF GG R elevdo potni de P

1.2

VARIVEIS E O COMANDO DE ATRIBUIO

Uma varivel uma abstrao de uma clula ou um conjunto de clulas na memria do computador. Informaes so armazenas em variveis para posterior uso. Muitos programadores costumam a interpretar variveis como sendo um nome para uma posio na memria do computador. Fundamental na programao, o comando de atribuio usado para atribuir ou modicar a informao contida na varivel. No Scilab, usa-se o smbolo a para atribuio. O smbolo de atribuio a no Exemplo: digite estes comandos no console:
EEb a P a PF EEb a R a RF EEbre a B re a VF EEb a CI a SF GG GG snrement um unidde n vrivel GG GG etriui o produto de e pr vrivel re GG etriui R pr vrivel GG etriui P pr vrivel
signica igualdade matemtica, uma vez que o comando de atribuio i a iCI vlido, mas no representa igualdade matemtica.

1.3 Expresses Aritmticas / UFRN-DCA - 2 de Maio de 2011

1.2.1

Regras para Formao de Nomes de Variveis

Os nomes de variveis (tambm conhecidos por identicadores) devem seguir as seguintes regras: 1. Nomes de variveis comeam com uma letra seguido de letras, algarismos ou sublinhados. Por exemplo: elph, nots, eI, fPQ e ordoojeto; 2. Caracteres especiais no so permitidos. Isto , no permitido usar 5, 6, 8, 7, c, 3, d, `, ~, etc; 3. Caracteres acentuados no so permitidos; 4. Nomes de variveis so sensveis a maisculas e minsculas. Por exemplo, varivel elph diferente das variveis evre, lph e elhe. De acordo com as regras acima, os seguintes nomes de variveis so vlidos:

evre, , fI, fP, I, mtriul e wihse.


Porm, estes nomes de variveis so invlidos:

Sf, I, notI, eGf e d.


1.2.2 O Ponto e Vrgula

A ausncia ou presena do ponto e vrgula no nal de um comando do Scilab visualiza ou suprime, respectivamente, o resultado do clculo. Por exemplo, o resultado do seguinte comando, digitado com ponto e vrgula, suprimido:
EEbe a RCRPY EEb

Se este comando digitado sem ponto e vrgula, o resultado visualizado:


EEbe a RCRP e a PHF

Mais exemplos:
EEbaPY EEbaRY EEbreaB re a VF GG qui o ponto e vrgul foi GG suprimido porque preismos GG visulizr o resultdoF

1.3

EXPRESSES ARITMTICAS

Os operadores aritmticos combinam nmeros e variveis para formar expresses aritmticas. Exemplos:
eCfBg @xyeICxyePAGP IG@PCPA

1.3 Expresses Aritmticas / UFRN-DCA - 2 de Maio de 2011

Alm dos operadores aritmticos podemos usar funes matemticas. Exemplos:


PCQBos@xA @PBsin@yAA PCQBtn@xACuP

1.3.1

Funes Matemticas Comuns

As principais funes matemticas do Scilab so mostradas na Tabela 1.1. O nmero e a base do logaritmo natural e D 2; 718281828::: so representadas pelas variveis especiais 7pi e 7e, respectivamente. Exemplos:
EEbos@PB7piA ns a IF EEb7eP ns a UFQVWHSTHWVWQI EEbs@ESA ns a SF EEbmodulo@VDQA ns a PF EEbmodulo@TDQA ns a HF EEbsign@ERA ns a E IF EEbsign@SA ns a IF GG esto d diviso entre V e Q GG vlor soluto GG PDUIVPVIVPV o qudrdo GG oseno de P vezes s

1.3.2

Funes de Arredondamento

As principais funes de arredondamento do Scilab so mostradas na Tabela 1.2. Exemplos:


EEb a QRFVVSY EEbfix@A ns a GG trun prte frionri

1.3 Expresses Aritmticas / UFRN-DCA - 2 de Maio de 2011

Tabela 1.1: Funes Matemticas


s@xA os@xA osh@xA sin@xA sinh@xA tn@xA tnh@xA onj@xA os@xA osh@xA exp@xA img@xA log@xA logIH@xA rel@xA modulo@xDyA sign@xA sin@xA sinh@xA sqrt@xA tn@xA tnh@xA
Valor absoluto. Arco co-seno. Arco co-seno hiperblico. Arco seno. Arco seno hiperblico. Arco tangente. Arco tangente hiperblico. Conjugado. Co-seno. Co-seno hiperblico. Exponencial: e x . Parte imaginria de um nmero complexo. Logaritmo natural. Logaritmo na base 10. Parte real de um nmero complexo. Resto da diviso de x por y. Funo sinal: retorna o valor -1, +1 ou zero conforme o argumento x seja negativo, positivo ou nulo, respectivamente. Seno. Seno hiperblico. Raiz quadrada. Tangente. Tangente hiperblica.

Tabela 1.2: Funes de Arredondamento


eil@xA fix@xA floor@xA int@xA round@xA
Arredondamento na direo de mais innito (C1). Arredondamento na direo de zero (isto , devolve a parte inteira de um nmero). Arredondamento na direo de menos innito ( 1). Mesmo que fix. Arredondamento para o inteiro mais prximo.

QRF EEbround@A ns a QSF EEbeil@QFIA ns a RF GG rredond pr misF GG rredond pr o inteiro mis prximo

Outros exemplos so mostrados na Tabela 1.3.

1.3.3

Ordem de Avaliao entre Operadores Aritmticos

Para uma boa avaliao de uma expresso aritmtica necessrio se familiarizar com a ordem de avaliao dos operadores. Aqui, as regras importantes so: prioridade, associatividade e parnteses.

1.4 Strings / UFRN-DCA - 2 de Maio de 2011

Tabela 1.3: Exemplos de Funes de Arredondamento

x 1.75 1.5 1.25 -1.25 -1.5 -1.75

eil@xA 2 2 2 -1 -1 -1

floor@xA 1 1 1 -2 -2 -2

fix@xA 1 1 1 -1 -1 -1

round@xA 2 2 1 -1 -2 -2

Operaes de alta prioridade so realizadas primeiro do que as operaes de baixa prioridade. A ordem de prioridade entre os operadores a seguinte: Prioridade 1a 2a 3a Exemplos:
PCIHGS eCfGgCh BQCfQGPCI IHGS avaliada primeiro. fGg avaliada primeiro. fQ avaliada primeiro.

Operao Potenciao multiplicao, diviso Adio, subtrao

Associatividade da direita para a esquerda da esquerda para a direita da esquerda para a direita

Associatividade a regra usada quando os operadores tm a mesma prioridade. Por exemplo, para as operaes de adio e subtrao (que possuem mesma prioridade) a regra de associatividade diz que a operao mais a esquerda avaliada primeiro:

eEfCgCh
O mesmo vale para multiplicao e diviso:

eEf avaliada primeiro, porque est mais a esquerda.

eBfGgBh

eBf avaliada primeiro, porque est mais a esquerda.

No entanto, para potenciao, a regra da associatividade diz que a operao mais a direita deve ser avaliada primeiro:

efgh

gh avaliada primeiro, porque est mais a direita.

A ordem de prioridade pode ser alterada pelo uso do parnteses:

@eCRAGQ @eEfAG@gChA BQCf@QGPACI

eCR avaliada primeiro devido aos parnteses. eEf avaliada primeiro. Depois a adio. Por ltimo, a diviso. QGP avaliada primeiro.

1.4

STRINGS

Strings so usados para toda e qualquer informao composta de caracteres alfanumricos e/ou caracteres especiais (exemplo, 5, 6, 8, 7, c, 3, d, `, ~, etc). Os strings so envolvidos

1.4 Strings / UFRN-DCA - 2 de Maio de 2011

por aspas duplas ou simples. Exemplos:2 .


EEb a 4d4 a d EEb a 9efgh9 a efgh EEb a 4wri e tose4 a wri e tose

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 C.
EEb C ns a defgh EEbn a 4edro4 n a edro EEbm a 4ulo4 m a ulo EEbm C n ns a uloedro EEbm C 4 e 4 C n ns a ulo e edro GG gonten ulo om edro GG inserindo espos entre elesF GG gonten ulo om edro sem GG espo entre elesF GG gonten d om efgh

Muitas vezes precisamos armazenar informaes que contm as aspas. Isto pode ser feito repetindo as aspas. Exemplos:
EEbn a 4y orulo disse 44onheEte ti mesmo44 pr ortesF4 n a y orulo disse 4onheEte ti mesmo4 pr ortesF

Algumas funes para manipulao de strings so mostradas da Tabela 1.4. Exemplos:


usar aspas duplas ou simples? A aspa simples tambm usado como operador de transposta hermitiana (mas isto no acarreta problemas de programao). Por isso melhor usar as aspas duplas que no possui tal duplo sentido e torna seu programa um pouco mais legvel.
2 Devemos

1.5 Nmeros Complexos / UFRN-DCA - 2 de Maio de 2011

Tabela 1.4: Funes de Manipulao de String


onvstr length prt strindex strt string evstr evl strsust
Retorna os caracteres de um string convertidos para maiscula ou minscula. Comprimento de um string. Extrai caracteres de um string. Procura a posio de um string dentro de outro. Concatena strings. Converte nmero para string. Converte string em nmero. Tambm avalia expresses aritmticas. Converte string em nmero. Tambm avalia expresses aritmticas. Substitui uma parte de um string por um outro string.

EEbm a 4edro4Y EEblength@mA ns a SF GG gomprimento do string 4edro4

Para concatenar nmeros com strings use a funo string@A.


EEb a 4 mis 4 C string@IHA a mis IH

Para somar uma string com um nmero use evstr@A:


EEb a 4IP4 C 4QR4 a IPQR EEbevstr@A C IH ns a IPRRF

1.5

NMEROS COMPLEXOS

No necessrio manuseio especial em Scilab para nmeros complexos. As operaes com nmeros complexos so to fceis como nos reais. A unidade imaginria representado por 7i, ou seja, 7i igual a sqrt@EIA. Exemplos:
x a Q C RB7i y a I E 7i zI a x E y zP a x B y zQ a x G y rel@zIA img@zIA s@xA tn@img@xADrel@xAA onj@zPA sin@xA

Parte real de zI Parte imaginria de zI Valor absoluto do nmero complexo Argumento do nmero complexo Conjugado Seno de um nmero complexo

1.6 O Espao de Trabalho / UFRN-DCA - 2 de Maio de 2011

1.6

O ESPAO DE TRABALHO

Quando um comando de atribuio como este:


EEbx a Q

digitado no Scilab, a varivel x armazenada em uma rea da memria do Scilab denominada de Espao de Trabalho (do ingls, workplace). O Espao de Trabalho uma parte da memria do computador que armazena as variveis criadas pelo console do Scilab e pelos arquivos de Script (mostrados adiante).

1.6.1

O Comando Clear

O comando ler apaga todas a variveis do Espao de Trabalho criadas pelo usurio. Exemplo:
EEbler GG epg tods vriveis

O comando ler seguido de nome de uma varivel apaga somente a varivel:


EEb a PY EEb a QY EEb a RY EEbler Y GG epg somente deixndo s GG outrs vriveis inttsF

O comando who mostra todas as variveis do Espao de Trabalho.

1.6.2

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 sve@rquivoA. Por exemplo,
EEb a PY EEb a QY EEb a RY EEbsve@4ddosFdt4AY

As variveis foram salvas no arquivo ddosFdt. O comando lod@rquivoA usado para recuperar variveis que foram salvas no arquivo. Por exemplo,
EEbler EEbC 3EEerror R undefined vrile X EEblod@4ddosFdt4AY GG pg tods s vriveis GG vriveis e no existem GG porque form pgds

GG reuper s vriveis D e

1.7 Formato de Visualizao dos Nmeros / UFRN-DCA - 2 de Maio de 2011

10

EEbC ns a SF

GG yk3

1.7

FORMATO DE VISUALIZAO DOS NMEROS

O comando formt modica a quantidade de dgitos com que os nmeros so mostrados no Scilab. Por exemplo, o comando
EEb formt@SA

far com que todas os nmeros sejam visualizados em 5 posies (incluindo o ponto decimal e um espao para o sinal). Por exemplo,
EEbsqrt@QA ns a IFUQ

Para aumentar o nmeros de posies para 16, usa-se


EEbformt@ITA EEbsqrt@QA ns a IFUQPHSHVHUSTVW

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 formt@9e9A mostra os nmeros em notao cientca. Por exemplo,
EEbformt@9e9A EEbPB7piGIH ns a TFPVQIVSQHUiEHI

TFPVQIVSQHUiEHI signica 6:283185307 10


EEbformt@9v9A

1.

Para retornar ao formato inicial usa-se,

que chamado de formato de varivel. Vejamos outras formas de usar o comando formt:
EEbformt@9v9DIHA

mostra os nmeros em formato de varivel com 10 posies.


EEbformt@9e9DVA

mostra os nmeros em notao cientca com 8 posies.

1.8 Constantes Especiais do Scilab / UFRN-DCA - 2 de Maio de 2011

11

1.8

CONSTANTES ESPECIAIS DO SCILAB

O Scilab possue vrias constantes pr-denidas. Algumas constantes pr-denidas no podem ser alteradas.
7pi 7eps 7inf 7nn 7i 7e 7t ou 7 7f ou 7p 7s 7z
O nmero . Constante que representa a preciso numrica da mquina. o menor nmero que, somado a 1, resulta em um nmero maior que 1 no computador. Representa innito 1. No numrico (do ingls, Not A Number). p 1. A base do logaritmo natural. Representa o valor booleano verdadeiro. Representa o valor booleano falso. Um polinmio com uma nica raiz em zero e s como o nome da varivel. A constante 7s denida como poly@HD9s9A. Um polinmio com uma nica raiz em zero e s como o nome da varivel. A constante 7z denida como poly@HD9z9A.

1.9

A VARIVEL ANS

A varivel ns (abreviao da palavra inglesa answer) armazena o valor corrente de sada do Scilab. Pode-se usar ns para efetuar clculos porque ela armazena o valor do ltimo clculo realizado. Exemplo:
EEbRCS ns a WF EEbos@nsACQ ns a PFHVVVTWU

1.10

AJUDA

O comando help informa sobre comandos e funes do Scilab. Por exemplo:


help os help eil
Informa sobre a funo que calcula o co-seno Informa sobre a funo eil

O comando propos procura comandos e funes utilizando uma palavra-chave. Por exemplo, se no sabemos o nome da funo que calcula o seno hiperblico, podemos digitar algo como
EEb propos hyperoli

e o Scilab mostrar todas a funes relacionadas com a palavra-chave hyperbolic.

1.11

EXERCCIOS

1. O que so variveis?

1.11 Exerccios / UFRN-DCA - 2 de Maio de 2011

12

2. Quais os tipos primitivos de informao manipuladas pelo Scilab? 3. Assinale os identicadores (nomes de variveis) vlidos: a) @A e) Sxye i) eCf b) wP f) xyeI j) sHHHHI c) er3 g) eR l) xyeGP d) xyeI h) e8f m) ihyievy

4. Escreva as declaraes aritmticas para o clculo das seguintes frmulas: 2h a) c D .h C 0:5d / ln p x b) z D 2e sin x p 2 c) m D 2 y C p 1 C p2 s sinaCb x aCb e) g D L 0:5 r 2 r 2 arcsin.h=r/ d) s D
1=2

h.r 2

h2 /

5. Considere as variveis eaII, faS, gaER e haP. Calcule as expresses abaixo. a) QBmodulo@eDQAEg b) P@PBs@gAAGV c) @eGfEfix@eGfACsign@gACPFVA@ISGfA d) sqrt@os@eAPCsin@eAPA C sin@hB7piGRA e) @eCgAGe B round@sign@gAChGRAEfix@hGIFSA 6. Qual a primeira operao a ser executada em cada um dos comandos abaixo. a) C E b) I C P G g P c) xye C wihseGx d) C C g B h e) e C h C f P C i B Q f) e B f G g B h

7. O que o Espao de Trabalho?

Captulo

ARQUIVOS DE SCRIPTS
Este captulo trata de programas sequenciais em Scilab. Sero apresentados comandos de entrada e sada alm de mostrar como editar e executar programas no Scilab.

2.1

COMANDO DE ENTRADA DE DADOS

Programas de computador podem solicitar dados do 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:

<variavel> a input@<string> AY
Esta funo mostra o texto <string> e em seguida solicita que o usurio digite um nmero. Por m, o nmero digitado atribudo a <variavel> . Exemplo:
EEbx a input@4higite um nmero4A higite um nmeroEEbIH x a IHF

A segunda forma do comando input usada para solicitar dados do tipo string ao usurio. Sua forma :

<variavel> a input@<string>D4s4AY
Exemplo:
EEb a input@4higite lgum ois4D4s4A higite lgum oisEEbyl yl a

2.2

COMANDOS DE SADA DE DADOS

Comandos de sada de dados fornece 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 nal do comando como mostrado na Seo 1.2.2. 13

2.2 Comandos de Sada de Dados / UFRN-DCA - 2 de Maio de 2011

14

EEbx a QY EEby a RY EEbr a sqrt@xBxCyByA r a SF GG gom omisso do ponto e virgul GG o resultdo exiido

A FUNO DISP
A funo disp@A outra maneira de exibir dados. Por exemplo,
EEbvH a PY EEb a RY EEbt a QY EEbv a vHCBtY EEbdisp@vA IRF GG disp no mostr o nome GG d vrivel

Este exemplo concatena dois strings e exibe o resultado:


EEbnome a 4wri4Y EEbdisp@4eu nome 4 C nomeA eu nome wri

A funo disp freqentemente usada em conjunto com a funo string que converte um nmero em string. Por exemplo,
EEbdisp@4e veloidde finl 4 C string@vAA e veloidde finl IR

Use a funo formt para formatar a sada de dados numricos.

A FUNO PRINTF
A funo printf a forma mais exvel de exibir dados porque produz uma sada for- printf um clone do comando de matada. Por exemplo,
EEbprintf@4el mundon4AY el mundo
mesmo nome da linguagem de programao C.

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 el faz com que printf gere uma nova linha aps el:
EEbprintf@4elnmundo4AY el mundo

2.3 Arquivos de Scripts / UFRN-DCA - 2 de Maio de 2011 A forma geral do comando printf :

15

printf@<formato>D<lista de dados> AY <formato> uma string descrevendo a forma com que a lista de dados ser exibida. Exemplo:
EEbe a PY EEbprintf@4e vrivel e ontm o vlor 7gn4DeAY e vrivel e ontm o vlor P

A smbolo 7g (chamado de caractere de formatao) indica como cada varivel da lista de dados ser exibido dentro da string de formatao <formato> . Neste ltimo exemplo, 7g substituido pelo valor da varivel A no momento da impresso. No seguinte exemplo, as variveis e e f substituiro os caracteres de formatao 7g nas posies correspondentes:
EEbe a VGRY EEbf a e C QY EEbprintf@4ys vlores luldos form 7g e 7gn4DeDfAY ys vlores luldos form P e S

Mais exemplos:
EEbprintf@4e a 7g f a 7g4DeDfAY e a P f a S EEbprintf@4e a 7gnf a 7gn4DeDfAY e a P f a S EEbp a 4ys vlores luldos form 7g e 7g4Y EEbprintf@pDeDfAY ys vlores luldos form P e S

Se a variavel for do tipo string, usa-se o caractere de formatao 7s em vez de 7g. Por exemplo:
EEbnome a 4too4Y EEbltur a IFTSY EEbprintf@4e ltur de 7s 7g4DnomeD lturAY e ltur de too IFTS

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

2.4 Criando Arquivos de Script / UFRN-DCA - 2 de Maio de 2011

16

Arquivos de script so arquivos de texto puro ou plano, 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 do Word) podero conter caracteres especiais que causaro erros no Scilab.

2.4

CRIANDO ARQUIVOS DE SCRIPT

Para criar arquivos de scripts, selecione a opo Aplicativos SciNotes1 ou clique no cone correspondente na barra de ferramentas.

Criamos um arquivo de script digitando comandos no editor:

Note que o arquivo de script acima contm comandos para converter graus Farenheit em graus Celsius.
1 As guras mostradas nesta seo podem no corresponder exatamente a verso do scilab que voc utilizando.

2.5 Executando Arquivos de Script / UFRN-DCA - 2 de Maio de 2011

17

O prximo passo salvar o arquivo de script. Selecione a opo ARQUIVO SALVAR. Digite o nome frenheitFse (os nomes de arquivos de script possuem extenso .sce) e selecione a pasta de sua preferncia para salvar o arquivo.

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

2.5

EXECUTANDO ARQUIVOS DE SCRIPT

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

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 Seo 2.8. A Figura 2.1 mostra a execuo do script frenheitFse criado na Seo 2.4. O Scilab solicitou um nmero para fazer a converso de graus Farenheit em graus Celsius. Digitou-se 50 e depois ENTER:

Figura 2.1: Executando um arquivo de script

2.6 Exemplos / UFRN-DCA - 2 de Maio de 2011

18

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

2.6

EXEMPLOS

Exerccio resolvido 2.6.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: q d D .x1 x2 /2 C .y1 y2 /2 Soluo:
I P Q R S T U V xI a input@4higite I d primeir oordend4AY yI a input@4higite I d primeir oordend4AY xP a input@4higite P d segund oordend4AY yP a input@4higite P d segund oordend4AY dx a xI E xPY dy a yI E yPY d a sqrt@dxBdx C dyBdyAY printf@4e distni 7gn4DdAY

Execute este script no Scilab. O resultado de uma possvel execuo seria: esultdo higite I d primeir oordendEEbP higite I d primeir oordendEEbQ higite P d segund oordendEEbS higite P d segund oordendEEbU e distni S Exerccio resolvido 2.6.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: 1 1 1 D C Req R1 R2 Esta frmula, tambm pode ser reescrita como: Req D Soluo:
I P Q R rI a input@4higite o vlor d primeir resistni @em ohmsA4AY rP a input@4higite o vlor d segund resistni @em ohmsA4AY req a @rIBrPAG@rICrPAY printf@4e resistni equivlente igul 7gn4DreqAY

R1 R2 R1 C R2

Execute este script no Scilab.

2.7 Linhas de Comentrios / UFRN-DCA - 2 de Maio de 2011

19

2.7

LINHAS DE COMENTRIOS
Boa programao: insira comentrios para explicar o funcionamento do programa

Comentrios podem ser inseridos em um programa para dar clareza e assim fazer as pessoas compreenderem o que nele est escrito. Comentrios so inseridos aps smbolo GG. O smbolo GG indica que o resto da linha (i.e., o comentrio) deve ser ignorado pelo Scilab. Um exemplo mostrado a seguir:
I P Q R S T GG rogrm pr lulr resistni equivlente de dois GG registores em prleloF rI a input@4higite o vlor d primeir resistni @em ohmsA4AY rP a input@4higite o vlor d segund resistni @em ohmsA4AY req a @rIBrPAG@rICrPAY printf@4e resistni equivlente igul 7gn4DreqAY

2.8

ALTERANDO O DIRETRIO DE TRABALHO

Uma forma alternativa de executar scripts atravs do comando exe. O comando exe tem a forma:

exe@<script> A
Como exemplo, considere o script frenheitFse descrito na seo 2.4.
EEbexe@4frenheitFse4AY higite os grus prenheitEEbSH iquivle IH grus gelsiusF

AVISO: este comando funciona somente se o arquivo de script estiver no diretrio atual do scilab caso contrrio ocorrer um erro como este:
EEbexe@4frenheitFse4AY 3EEerror PRI y rquivo 4frenheit4 no existeF

Resolva este problema alterando o diretrio atual: selecione ARQUIVO ALTERAR O DIRETRIO ATUAL e depois escolha a pasta de frenheitFse (i.e., Xnexemplos) na caixa de dilogo a seguir:

2.8 Alterando o Diretrio de Trabalho / UFRN-DCA - 2 de Maio de 2011

20

Agora o script deveria rodar sem problemas. Alternativamente, o diretrio atual pode ser alterado com o comando hdir (ou abreviadamente d)2 :
EEbd XexemplosY GG lter o diretrio orrente

EEbexe@4frenheitFse4AY GG exeut o sript higite os grus prenheitEEbSH iquivle IH grus gelsiusF

Use o comando pwd para visualizar o diretrio de trabalho do Scilab:


EEbpwd ns a Xexemplos

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:
EEbd Xoutrodir EEbexe@9XexemplosfrenheitFse9AY higite os grus prenheitEEbSH iquivle IH grus gelsiusF GG ltero do diretrio tul

O comando unixw 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:
EEbunixw@9dir9A

2 Para executar um comando chdir (ou qualquer outro comando) automaticamente no inicio de uma sesso do Scilab, inclua ele no arquivo de script de congurao scilab.star.

Captulo

ESTRUTURAS DE SELEO
Este captulo introduz as expresses booleanas e as estruturas de seleo que permitem os programas tomarem decises.

3.1

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 exveis e poderosos: 1. As estruturas de seleo; 2. As estruturas de repetio. A 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. A 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: sp, py e rsvi 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,

21

3.2 Expresses Booleanas / UFRN-DCA - 2 de Maio de 2011

22

3. Repetio, possvel construir qualquer programa de computador (esta a tese principal da chamada programao estrutura). A estrutura de seleo ser estudada neste captulo e a estrutura de repetio no captulo 4. O uso das estruturas de seleo requer o domnio das expresses booleanas estudadas na seo seguinte.

3.2

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). Expresses booleanas so tambm chamadas de expresses lgicas. Uma expresso booleana simples usa os operadores relacionais para comparar expresses aritmticas: Operadores Relacionais Operador Descrio ` Menor que `a Menor ou igual a b Maior que ba Maior ou igual a aa Igual a `b ou a Diferente de Por exemplo, suponha que a varivel e contm o valor S. Ento temos:

e b H e aa Q C I PBe `b SGIH C e

Verdadeiro Falso Verdadeiro

As expresses booleanas podem ser combinadas usando os operadores booleanos: Operadores Booleanos Operador Descrio 8 E (conjuno) | Ou (disjuno no exclusiva) No (negao) Os operadores so denidos pelas seguintes tabelas (tambm chamadas de tabelas verdade):

e Verdadeiro Verdadeiro Falso Falso

f Verdadeiro Falso Verdadeiro Falso

e 8 f Verdadeiro Falso Falso Falso

e | f Verdadeiro Verdadeiro Verdadeiro Falso

~e Falso Falso Verdadeiro Verdadeiro

Por exemplo, considere as seguintes atribuies e a S, f a I, g a P, h a V e i a Q. Erro comum de programao: Ento temos:

e b f | h b i ~@e b fA e C Q aa V 8 e b f

Verdadeiro Falso Verdadeiro

programadores principiantes costumam confundir o operador Igual a (aa) com o operador de atribuio (a).

3.3 Variveis Booleanas / UFRN-DCA - 2 de Maio de 2011

23

3.3

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,

g a I b P e a g | P b IH

C um varivel booleana com valor falso. A um varivel booleana com valor falso.

No Scilab, duas variveis especiais 7t (do ingls, true) e 7f (do ingls, false) representam o valor verdadeiro e falso, respectivamente. Exemplos:

f a 7f e a 7t g a e | f

C contm um valor verdadeiro.

3.4

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 possue 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:
e a PFSY e a 4livro4Y GG e vrivel e um nmero rel GG egor el um string

3.5

ORDEM DE AVALIAO ENTRE OS OPERADORES

A ordem de avaliao entre todos operadores que j foram descritos dado na Tabela 3.1. Exemplos:

u | 8

e b f | h ` i ~@e b fA 8 e ` P

Primeiro realizada a operao 8. Seguindo com a operao |. Primeiro realizada a operao >, depois a operao <, por m a operao |. Primeiro realizada a operao b. Seguindo com a operao ~. Depois com a operao <. Por m com a operao 8.

Exerccio resolvido 3.5.1. Avaliar a seguinte expresso: ~@P`SA|RHGSaaIH8TCPbS. Soluo:

3.6 A Seleo Simples IF-END / UFRN-DCA - 2 de Maio de 2011

24

Tabela 3.1: Regras de prioridade e associatividade entre operadores 1a 2a 3a 4a 5a

6a 7a 8a

~ B G C E ` `a b ba aa `b ou a 8 |

no potenciao multiplicao diviso Adio Subtrao Menor que Menor ou igual a Maior que Maior ou igual a Igual a Diferente de e ou

da direita para a esquerda da direita para a esquerda da esquerda para a direita da esquerda para a direita da esquerda para a direita

da esquerda para a direita da esquerda para a direita da esquerda para a direita

~ @ P ` S A | RH G S aa IH 8 T C ~ 7t | RH G S aa IH 8 T C 7f | RH G S aa IH 8 T C 7f | V aa IH 8 T C 7f | V aa IH 8 V b 7f | V aa IH 8 7t 7f | 7f 8 7t 7f | 7f 8f

P P P P S

b b b b

S S S S

3.6

A SELEO SIMPLES IF-END

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 oolenb `sequni de omndosb end

A sequncia de comandos s ser executada se a expresso booleana retornar um valor verdadeiro. Exerccio resolvido 3.6.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:
I P Q R S T U notI a input@4digite primeir not4AY notP a input@4digite segund not4AY medi a @notICnotPAGPY printf@4u mdi 7gn4D7gA if medi b U printf@4rns34AY end

3.7 A Seleo Bidirecional IF-ELSE-END / UFRN-DCA - 2 de Maio de 2011

25

digite primeir notEEbUFS digite segund notEEbVFI u mdi UFV rns3

esultdo

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

3.7

A SELEO BIDIRECIONAL IF-ELSE-END

Caracteriza-se por selecionar entre duas sequncias de comandos quando certas condi- Boa es, representadas por expresses booleanas, forem satisfeitas. A seleo bidirecional programao: Sempre use tem a seguinte forma:
if `expresso oolenb `primeir sequni de omndosb else `segund sequni de omndosb end

endentao, ou seja, acrescente dois espaos antes dos comandos que esto aninhados no comando sp para melhorar a A primeira sequncia de comandos ser executada se a expresso booleana devolver legibilidade do um valor verdadeiro, caso contrrio a segunda sequncia de comandos ser executada. Os programa.

seguintes exemplos ilustram o comando de seleo bidirecional. Exerccio resolvido 3.7.1. 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:
I P Q R S T U V W IH II IP GG veitur ds nots notI a input@4higite IF not imestrl4AY notP a input@4higite PF not imestrl4AY notQ a input@4higite QF not imestrl4AY notR a input@4higite RF not imestrl4AY medi a @notI C notP C notQ C notRAGRY printf@4wedi a 7gn4DmediAY GG glulo d medi nul if medi b T printf@4eluno provdon4AY else printf@4eluno reprovdon4AY end higite IF not higite PF not higite QF not higite RF not wedi a VFQPS eluno provdo imestrlEEbVFR imestrlEEbUFQ imestrlEEbWFI imestrlEEbVFS esultdo

Comentrio. O comando sp 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.

3.8 Aninhando Seletores / UFRN-DCA - 2 de Maio de 2011

26

Exerccio resolvido 3.7.2. Elaborar um programa para calcular o valor da funo f .x/ D dado um valor x fornecido via teclado. Soluo:
I P Q R S T U x a input@4intre om o vlor de x4AY if x ba H f a xPCITY else f a HY endY printf@4y vlor d funo 7gn4DfAY intre om o vlor de xEEbP y vlor d funo PH esultdo

x 2 C 16 se x 0 0 se x < 0

3.8

ANINHANDO SELETORES

Comandos de seleo podem ser aninhados de diversas formas criando ampla variedade de construes como mostra os exemplos a seguir. Exerccio resolvido 3.8.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 car em recuperao. Com mdia abaixo de 5,0, o aluno ser reprovado. Soluo:
I P Q R S T U V W IH II IP IQ IR IS IT IU IV GG veitur ds nots notI a input@4higite IF not notP a input@4higite PF not notQ a input@4higite QF not notR a input@4higite RF not medi a @notI C notP C notQ C printf@4wedi a 7gn4DmediAY if medi ba U printf@4eprovdon4AY else if medi ba S printf@4euperon4AY else printf@4eprovdon4AY end end higite IF higite PF higite QF higite RF wedi a TFU eupero not not not not imestrlEEbUFQ imestrlEEbTFS imestrlEEbSFS imestrlEEbUFS esultdo imestrl4AY imestrl4AY imestrl4AY imestrl4AY notRAGRY

GG glulo d medi nul

3.8 Aninhando Seletores / UFRN-DCA - 2 de Maio de 2011

27

Comentrio. Se a mdia for maior ou igual que 7 o programa escreve Aprovado (linha 11). Caso contrrio o programa executa o segundo sp (aps o else). Aqui, temos um novo teste sp (aninhado dentro de primeiro sp) que far o programa escrever Recuperao se mdia for maior ou igual a 5 (linha 14) ou, caso contrrio, Reprovado (linha 16). Exerccio resolvido 3.8.2. menor deles. Soluo:
I P Q R S T U V W IH II IP IQ IR IS IT GG veitur dos nmeros a input@4higite um numero4AY a input@4higite um numero4AY a input@4higite um numero4AY GG hetermin o menor nmero if ` 8 ` menor a Y else if ` menor a Y else menor a Y end end printf@4y menor nmero 7gn4DmenorAY higite um numeroEEbP higite um numeroEEbQ higite um numeroEEbI y menor nmero I esultdo

Escreva um programa que leia trs nmeros e escreva o

Vejamos dois casos um pouco mais complicados. Exerccio resolvido 3.8.3. Elaborar um programa Scilab para ler trs medidas a, b e c. Depois vericar se elas podem ser as medidas dos lados de um tringulo. Se forem, vericar 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 classicam em: 1. Equiltero se tem trs lados de medidas iguais. 2. Issceles se tem dois lados de medidas iguais. 3. Escaleno se dois quaisquer lados no possuem medidas iguais. Com as informaes acima, elaboramos o seguinte programa:

3.8 Aninhando Seletores / UFRN-DCA - 2 de Maio de 2011

28

I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI

GG veitur ds medids a input@4higite primeir medid4AY a input@4higite segund medid4AY a input@4higite tereir medid4AY if ` C 8 ` C 8 ` C GG GG if aa 8 aa printf@4ringulo equiltero4AY GG else if aa | aa | aa printf@4ringulo isseles4AY GG else printf@4ringulo esleno4AY GG end end else printf@4xo um tringulon4AY end higite primeir medidEEbS higite segund medidEEbS higite tereir medidEEbQ ringulo isseles higite higite higite xo um primeir medidEEbS segund medidEEbQ tereir medidEEbI tringulo erifi se s medids formm um tringuloF rs ldos iguisF hois ldos iguisF odos os ldos so diferentesF

GG xo stisfez propriedde d GG desiguldde tringulrF esultdo

esultdo

Comentrio. Aps a leitura das medidas a, b e c (linhas 2-4), o programa verica, na linha 6, se estas medidas satisfazem a desigualdade triangular. Se sim, o programa classica o tringulo formado por a, b, e c (linhas 8-16) do seguinte modo. Na linha 8, se a expresso booleana aa 8 aa retornar verdadeiro ento todos os lados so iguais e portanto o tringulo equiltero. Caso contrrio, o programa segue adiante para classicar 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 3.8.4. (Equao do segundo grau). Dados os trs coecientes a, b, c de uma equao do segundo grau ax 2 C bx C c D 0, elaborar um algoritmo para calcular suas razes. O discriminante da equao dado por D b 2 4ac. Para cada situao da seguinte tabela, o algoritmo tomar a respectiva ao:

3.8 Aninhando Seletores / UFRN-DCA - 2 de Maio de 2011

29

Situao aD0ebD0 aD0eb0 a0ec D0

Ao Escrever que a equao degenerada. Calcular e escrever a nica raiz x D c=b. Calcular e escrever as duas razes: x1 D 0 x2 D b=a

a0ec 0e

Calcular e escrever as duas razes: p bC x1 D 2a p b x2 D 2a As razes so complexas. Escrever as partes real e imaginria das duas razes.

a0ec 0e<0

Soluo:
I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI PP PQ PR PS PT PU PV PW QH QI QP GG GG rogrm pr lulr s rzes de um equo do Po gru GG ainput@4higite o oefiiente X4AY ainput@4higite o oefiiente X4AY ainput@4higite o oefiiente X4AY if @aaHA 8 @aaHA GG iquo degenerdF printf@4iquo degenerdn4AY end if @aaHA 8 @`bHA GG iquo do Io gru printf@4iz ni em 7gFn4DEGAY end if @`bHA 8 @aaHA GG iquo do Po gru om rizes reis em H e EG x a EY printf@4izI a Hn4AY printf@4izP a 7gn4DxAY end if @`bHA 8 @`bHA dis a B E RBBY GG iquo do Po gru GG glulo do disriminnte

if dis ba H GG este do disriminnte GG izes reisF xI a EG@PBA C sqrt@disAG@PBAY xP a EG@PBA E sqrt@disAG@PBAY printf@4izI a 7gn4DxIAY printf@4izP a 7gn4DxPAY

3.8 Aninhando Seletores / UFRN-DCA - 2 de Maio de 2011

30

QQ QR QS QT QU QV QW RH

else GG izes omplexs pr a EG@PBAY pi a sqrt@s@disAAG@PBAY printf@4rte el a 7gn4DprAY printf@4rte smginri a 7gn4DpiAY end end higite o oefiiente XEEbI higite o oefiiente XEEbES higite o oefiiente XEEbT izI a Q izP a P higite o oefiiente XEEbH higite o oefiiente XEEbS higite o oefiiente XEEbIH iz ni em EPF higite o oefiiente XEEbP higite o oefiiente XEEbQ higite o oefiiente XEEbT rte el a EHFUS rte smginri a IFSTIPS esultdo

esultdo

esultdo

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 negativo ento a raiz quadrada gera um erro. Por exemplo, em C uma declarao equivalente a esta
xI a EG@PBA C sqrt@disAG@PBAY xP a EG@PBA E sqrt@disAG@PBAY

produzia um erro se o valor da varivel dis 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):
I P Q R S T U V W IH II IP IQ IR IS GG GG rogrm pr lulr s rzes de um equo do Po gru GG ist verso mnipul os nmeros omplexos diretmentoF ainput@4higite o oefiiente X4AY ainput@4higite o oefiiente X4AY ainput@4higite o oefiiente X4AY if @aaHA 8 @aaHA GG iquo degenerdF printf@4iquo degenerdn4AY end if @aaHA 8 @`bHA GG iquo do Io gru printf@4iz ni em 7gFn4DEGAY end

3.8 Aninhando Seletores / UFRN-DCA - 2 de Maio de 2011

31

IT IU IV IW PH PI PP PQ PR PS PT PU PV PW QH QI QP QQ QR QS QT

if @`bHA 8 @aaHA GG iquo do Po gru om rizes reis em H e EG x a EY printf@4izI a Hn4AY printf@4izP a 7gn4DxAY end if @`bHA 8 @`bHA GG iquo do Po gru dis a B E RBBY GG glulo do disriminnte xI a EG@PBA C sqrt@disAG@PBAY xP a EG@PBA E sqrt@disAG@PBAY printf@4izI a4AY disp@xIAY printf@4izP a4AY disp@xPAY if isrel@xIA printf@4es rzes so reis4AY else printf@4es rzes so omplexs4AY end end

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 isrel@A do Scilab que devolve verdadeiro (7t) se seu argumento for um nmero real, ou falso (7f) se seu argumento for um nmero complexo. Exemplos:
EEbisrel@ICQB7iA ns a p EEbisrel@QA ns a

Portanto, as linhas 31-34 deste exemplo:


if isrel@xIA printf@4es rzes so reis4AY else printf@4es rzes so omplexs4AY end

escreveram As razes so reais se xI for um nmero real, caso contrrio, escreveram As razes so complexas.

Captulo

ESTRUTURAS DE REPETIO
4.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 indenidamente 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 estudados as estruturas de repetio do Scilab.

4.2

LAO CONTROLADO LOGICAMENTE

O lao while um lao controlado logicamente. Ele repete a execuo de um conjunto de comandos (o seu corpo), mas vericando antes de executar os comandos se permitido repeti-los ou no. O lao while tem a seguinte forma:
while `expresso oolenb `onjunto de omndosb end

Enquanto a <expresso booleana> for verdadeira o <conjunto de comandos> repetido indenidamente. 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:
EEbi a I i a

32

4.2 Lao Controlado Logicamente / UFRN-DCA - 2 de Maio de 2011

33

IF EEbi a i C I i a PF EEbi a i C I i a QF EEbi a i C I i a RF

Note que cada vez que a expresso i a i C I executada o valor da varivel i incrementado de um. A varivel i da expresso i a i C I chamada de contador. Os exemplos a seguir ilustram o uso do contador em laos while. Exerccio resolvido 4.2.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.
I P Q R S T U V W IH II i a IY while i `a S notI a input@4higite IF not notP a input@4higite PF not notQ a input@4higite QF not notR a input@4higite RF not medi a @notI C notP C notQ C printf@4wedi a 7gn4DmediAY i a i C IY end printf@4pim do progrm4AY higite IF not higite PF not higite QF not higite RF not wedi a UFV higite IF not higite PF not higite QF not higite RF not wedi a TFWUS higite IF not higite PF not higite QF not higite RF not wedi a UFPUS higite IF not higite PF not higite QF not imestrlEEbUFS imestrlEEbVFP imestrlEEbVFQ imestrlEEbUFP imestrlEEbTFS imestrlEEbTFP imestrlEEbVFP imestrlEEbUFH imestrlEEbVFP imestrlEEbUFV imestrlEEbRFV imestrlEEbVFQ imestrlEEbTFS imestrlEEbUFI imestrlEEbVFQ

imestrl4AY imestrl4AY imestrl4AY imestrl4AY notRAGRY

esultdo

4.2 Lao Controlado Logicamente / UFRN-DCA - 2 de Maio de 2011

34

higite RF not wedi a UFIUS higite IF not higite PF not higite QF not higite RF not wedi a WFI pim do progrm

imestrlEEbTFV imestrlEEbWFI imestrlEEbVFS imestrlEEbWFQ imestrlEEbWFS

Comentrio. O programa comea inicializando a varivel i com o valor um (linha 1). Por causa disso, a expresso i `a S 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 `a S falsa. Por causa disso o lao termina e o programa passa a executar a linha seguinte imediatamente aps o m do lao (que a linha 11). Agora, considere os seguintes clculos executados no console do Scilab:
EEbsom a PH som a PHF EEbx a PFS x a PFS EEbsom a H som a HF EEbsom a som C x som a PFS EEbsom a som C x som a SF

Qual o valor da varivel som aps repetir a execuo do ltimo comando mais duas vezes? A varivel som da expresso som a som C x chamada de acumulador. Vejamos um exemplo. Exerccio resolvido 4.2.2. inteiros entre 1 e 100. Soluo: Elaborar um programa para calcular a soma de todos os

4.3 Lao Controlado por Contador / UFRN-DCA - 2 de Maio de 2011

35

Figura 4.1: O Lao py

I P Q R S T U

onta IY som a HY while ont `a IHH som a som C ontY ont a ont C IY end printf@4om totl a 7gn4DsomAY om totl a SHSH esultdo

Comentrio. O programa inicializa as variveis ont e som com 1 e 0, respectivamente (porque?). Cada vez que o corpo do lao executado, o valor de som incrementado com o valor corrente da varivel ont. Deste modo, a varivel som assume os seguintes valores a cada repetio do lao. Valor da varivel som 1 3 6 : : : 5050

Boa programao: sempre inicialize os contadores e acumuladores.

primeira iterao segunda iterao terceira iterao : : : ltima iterao

4.3

LAO CONTROLADO POR CONTADOR

O comando py 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 py possui o nome de uma varivel (chamada de varivel de controle) e especica seu valor inicial e nal e, opcionalmente, o tamanho do passo (ou incremento) da varivel de controle. Ver a Figura 4.1. O seguinte programa escreve a palavra disciplina 10 vezes:
for iaIXIH printf@4disiplinn4AY end

Aqui a varivel de controle i assume, inicialmente, o valor um e o printf@4disiplinn4A 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@4disiplinn4A e a varivel de controle i incrementada para o valor 2. Da terceira vez que printf@4disiplinn4A

4.4 Exemplos com Laos / UFRN-DCA - 2 de Maio de 2011

36

executado, a varivel de controle i incrementada para o valor 3 e assim por diante at alcanar o valor 10 que o valor nal. Outros exemplos seguem. Exerccio resolvido 4.3.1. Elabore um programa para escrever todos os nmeros pares inteiros entre 1 e 50. Soluo:
I P Q for iaPXPXSH printf@47g 4DiAY end esultdo P R T V IH IP IR IT IV PH PP PR PT PV QH QP QR QT QV RH RP RR RT RV SH

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 nal na varivel de controle , obviamente, 50. Exerccio resolvido 4.3.2. Elabore um programa para calcular 5 (fatorial de 5)
I P Q R S T ft a IY for ontaPXS ft a ft B ontY end printf@4y ftoril de S igul 7gn4DftAY esultdo

y ftoril de S igul IPH

Comentrio. Note que a cada interao do lao, a varivel ft assume os seguintes valores Valor da varivel ft 1 2 6 24 120

incio primeira iterao segunda iterao terceira iterao quarta iterao

4.4

EXEMPLOS COM LAOS

Exerccio resolvido 4.4.1. Algoritmo para calcular o fatorial. Elabore um programa para calcular o fatorial para qualquer valor n fornecido pelo usurio. Sabendo que: N D 1 2 3 ::: .N 1/ N;

0 D 1, por denio. Soluo:

4.4 Exemplos com Laos / UFRN-DCA - 2 de Maio de 2011

37

I P Q R S T

n a input@4intre om um nmero4AY ft a IY for ontaPXn ft a ft B ontY end printf@4y ftoril de 7g igul 7gn4DnDftAY intre om um nmeroEEbV y ftoril de V igul RHQPH esultdo

Exerccio resolvido 4.4.2. Exemplo de Somatrio. Elabore um programa que calcule e escreve o valor de S. 1 3 5 7 99 C C C C ::: C 1 2 3 4 50 Soluo: note que h uma relao entre numerador e denominador da seguinte forma: SD 2 denominador 1 D numerador

Usaremos esta relao para calcular cada termo da srie no seguinte programa:
I P Q R S s a HY for daIXSH s a s C @PBdEIAGdY end printf@4lor de a 7gn4DsAY lor de a WSFSHHV esultdo

Exerccio resolvido 4.4.3. 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 nalidade 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. Seguindo este algoritmo manualmente, com um lpis e papel, possvel calcular o M.D.C. entre 544 e 119, escrevendo a seguinte tabela:

4.4 Exemplos com Laos / UFRN-DCA - 2 de Maio de 2011

38

a 544 119 68 51 17

b 119 68 51 17 0

r.rest o/ 68 51 17 0

O seguinte programa Scilab implementa o algoritmo de Euclides:


I P Q R S T U V W a input@4higite um nmero4AY a input@4higite um nmero4AY r a IY while r `b H r a modulo@D AY a Y a rY end printf@4y wFhFgF 7gn4DAY

Exerccio resolvido 4.4.4. Usando um valor sentinela para interromper um lao Elabore um programa que leia via teclado um conjunto de valores inteiros e positivos. O nal do conjunto conhecido pelo valor -1. Determine o maior valor deste conjunto.
I P Q R S T U V W n a input@4higite um nmero inteiro positivo4AY vlormx a nY while n `b EI if n b vlormx vlormx a nY end n a input@4higite um nmero inteiro positivo4AY end printf@4lor mximo a 7gn4DvlormxAY

Comentrio. A cada iterao a varivel vlormx armazena o maior valor dos nmeros digitados at ento. Portanto, no nal, vlormx armazenar o maior valor do conjunto. esultdo higite um nmero inteiro positivoEEbPV higite um nmero inteiro positivoEEbIS higite um nmero inteiro positivoEEbVI higite um nmero inteiro positivoEEbQR higite um nmero inteiro positivoEEbQ higite um nmero inteiro positivoEEbEI lor mximo a VI Exerccio resolvido 4.4.5. A srie de Fibonacci. A srie de Fibonacci se dene 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 : : : Pede-se que escreva todos os elementos da srie de Fibonacci menor ou igual a N. O valor de N fornecido pelo teclado. Soluo:

4.5 Laos Aninhados / UFRN-DCA - 2 de Maio de 2011

39

I P Q R S T U V W IH II IP

n a input@4higite um numero inteiro positivo4AY printf@4xumeros de fioni menor ou igul 7gn4DnAY a IY a IY printf@47g 7g 4DDAY GG imprime os dois primeiros elementos a C Y GG lul o proximo elemento while @ `a nA printf@47g 4DAY a Y a Y a C Y GG lul o proximo elemento end esultdo higite um numero inteiro positivoEEbIHHH xumeros de fioni menor ou igul IHHH I I P Q S V IQ PI QR SS VW IRR PQQ QUU TIH WVU

4.5

LAOS ANINHADOS

Considere o seguinte programa:


for j a IXR printf@4x4AY 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 4.5.1. O seguinte programa gera uma sequencia de quatro xs por linha. O nmero de linhas digitado pelo usurio.
I P Q R S T U lin a input@4unts linhs4AY for i a IXlin for j a IXR printf@4x4AY end printf@4n4AY GG mudn d linh end unts linhsEEbS xxxx xxxx xxxx xxxx xxxx esultdo

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.5 Laos Aninhados / UFRN-DCA - 2 de Maio de 2011 4 repeties), o comando printf@4n4A 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@4n4A 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 7f em vez de 7g para que os dados permaneam alinhados na tabela da tabuada. O string de formatao 7f permite especicar 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 7SFPf escreva um nmero ocupando cinco caracteres com dois dgitos depois do ponto decimal. Exemplo:
EEb a PPQFQRSSRUVTUUVQY EEbprintf@47SFPf4DAY PQFQS

40

O seguinte exemplo, escreve a varivel ocupando 10 caracteres com dois dgitos aps o ponto decimal:
EEbprintf@47IHFPf4DAY PQFQS

Usando cinco dgitos aps o ponto decimal:


EEbprintf@47IHFSf4DAY PQFQRSSS

Exerccio resolvido 4.5.2. Elaborar um programa para escrever a tabuada de 1 at 10.


I P Q R S T U V W printf@4 I P Q R S T U V W IHn4AY printf@4 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEn4AY for iaIXIH printf@47PFHf 4DiAY for j a IXIH printf@47QFHf 4DiBjAY end printf@4n4AY end esultdo I P Q R S T U V W IH EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE I P Q R S T U V W IH P R T V IH IP IR IT IV PH Q T W IP IS IV PI PR PU QH R V IP IT PH PR PV QP QT RH S IH IS PH PS QH QS RH RS SH T IP IV PR QH QT RP RV SR TH U IR PI PV QS RP RW ST TQ UH V IT PR QP RH RV ST TR UP VH W IV PU QT RS SR TQ UP VI WH IH PH QH RH SH TH UH VH WH IHH

I P Q R S T U V W IH

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 nesta

4.5 Laos Aninhados / UFRN-DCA - 2 de Maio de 2011 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@4n4A 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@4n4A 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.

41

Captulo

MATRIZES
Matrizes so agregados de dados dentro de uma mesma varivel. Matrizes so agregados de dados homogneos no sentido de que os dados tm sempre mesmo tipo de contedo, ou seja, uma matriz pode conter somente dados numricos ou somente strings, mas no os dois simultaneamente 1 . No jargo da informtica, agregados de dados homogneos so frequentemente chamados de arrays ou arranjos. Preferimos o termo matriz (ao invs de array) porque mais usual no jargo da matemtica.

5.1

VETORES

Matrizes unidimensionais so chamados de vetores. Em um vetor possvel armazenar vrios itens em uma nica varivel. Na Figura 5.1 mostrada uma varivel not contendo as notas de alunos. Os itens contidos em um vetor so chamados de elementos do vetor. Portanto, o vetor not possui dez elementos. Seus elementos podem ser acessados individualmente. Por exemplo, not@RA refere-se ao quarto elemento do vetor nota. O valor entre os parnteses de not@RA 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). Exemplo,
EEbnot a VFI SFP WFP UFP TFS SFP VFS WFS TFS IHFHY

Os elementos do vetor so acessados da seguinte forma:


EEbnot@PA ns a SFP EEbnot@SA ns a TFS EEbnot@VA ns a WFS

Pode-se somar as trs primeiras notas do seguinte modo:


1 O Scilab tambm dispe de agregados de dados heterogneos que so chamados de listas e podem armazenar simultaneamente dados numricos e strings. Listas no sero estudados neste captulo.

42

5.1 Vetores / UFRN-DCA - 2 de Maio de 2011

43

Figura 5.1: Vetor com dez elementos

EEbnot@IA C not@PA C not@QA ns a PPFS

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:
EEbx@IA a PY EEbx@PA a RY EEbx@QA a PY EEbx@RA a QY

ou equivalentemente como
EEbx a P R P QY

Expresses matemticas tais como .x1 C x3 /=x2 so efetuados do seguinte modo:


EEb@x@IACx@QAAGx@PA ns a IF

Se o vetor for grande, pode-se usar o smbolo .. para continuar escrevendo da linha seguinte. Exemplo:
EEb a P Q U FF EEbW V R a 3 PF QF UF WF VF RF 3

5.1.1

Acessando Elementos do Vetor

Os elementos de um vetor podem ser acessados de vrias maneiras. Por exemplo, considere as variveis:

5.1 Vetores / UFRN-DCA - 2 de Maio de 2011

44

a P R S I QY i a PY

Ento tem-se:
@iCPA @@RAA
Devolve 1 porque acessa o quarto elemento (iCP igual a 4) do vetor . Devolve 2. Como valor de @RA 1, avaliar @@RAA o mesmo avaliar @IA. Logo, @@RAA igual a @IA que, por sua vez, igual a 2. Devolve 4, porque @@QAA igual @SA que, por sua vez, igual a 3. E @PBiA igual @RA, que igual a 1. Logo, @@QAAC@PBiA igual a 3 + 1 = 4.

ndices com valor zero ou negativo no so vlidos no Scilab.

@@QAAC@PBiA

Exerccio resolvido 5.1.1. Figura 5.1.


I P Q R S T

Calcular a mdia dos elementos do vetor not dado na

not a VFI SFP WFP UFP TFS SFP VFS WFS TFS IHFHY som a HY for iaIXIH som a som C not@iAY end printf@4wdi ds nots a 7gn4DsomGIHAY

Comentrio. Para somar os elementos do vetor, cada elemento foi acessado individualmente e adicionado, um por vez, em um acumulador som, atravs do lao forFFFend (linhas 3 a 5). Exerccio resolvido 5.1.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.
I P Q R S T U V W IH II IP for iaIXIH GG veitur de e e f @iA a input@4higite um vlor4AY end for iaIXIH @iA a input@4higite um vlor4AY end for iaIXIH @iA a PB@@iAC@iAAY GG glulo de g end for iaIXIH GG isreve de g printf@47g 4D@iAAY end

Comentrio. O lao forFFFend, das linhas 1 a 3, faz a leitura de um elemento do vetor de cada vez. A leitura controlado pelo ndice que faz com que cada leitura seja armazenado em um elemento diferente do vetor . No lao forFFFend das linhas 7 a 9, o clculo de cada elemento do vetor controlado pelo ndice que faz com que seja somando os elementos correspondentes de e . Exerccio resolvido 5.1.3. Ler dois vetores A e B de 10 elementos. Construir um vetor C tal que o elemento de ndice mpar de C seja igual ao elemento correspondente de A, caso contrrio, seja igual ao elemento correspondente de B. Por exemplo, IaaI, QaaQ, : : : . Mas, PaaP, RaaR, : : : . Escrever o vetor C.

5.2 Matrizes Bidimensionais / UFRN-DCA - 2 de Maio de 2011

45

I P Q R S T U V W IH II IP IQ IR IS IT

for iaIXIH GG veitur de e e f @iA a input@4higite um vlor4AY end for iaIXIH @iA a input@4higite um vlor4AY end for iaIXIH if modulo@iDPA`bH GG est se o ndie i mprF @iA a @iAY GG e for mpr @iA reee o vlor de @iA else @iA a @iAY GG e for pr @iA reee o vlor de @iA end end for iaIXIH GG isreve o vetor g printf@47g 4D@iAAY end

Comentrio. A funo modulo (resto de uma diviso) verica 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).

5.2

MATRIZES BIDIMENSIONAIS

Matrizes bidimensionais usam dois ndices para individualizar elementos. Na Figura 5.2 mostrada uma matriz. Matrizes so construdas usando colchetes. Cada linha da matriz separada por um ponto e vrgula e cada elemento de uma linha separado por espao (ou vrgula). Por exemplo, a seguinte matriz da matemtica, 2 3 4 AD 4 5 2 poderia ser construda pelo comando:
EEb a P Q RY R S P a 3 3 PF RF QF SF RF 3 PF 3

Alternativamente, mudando-se a linha (teclando enter) tambm separa as linhas da matriz. Exemplo:
EEb a P Q R EEb R S P a 3 3 PF RF QF SF RF 3 PF 3 GG tele enter qui

Os elementos so acessados com dois ndices. Por exemplo,


EEb@IDPA ns a QF

5.2 Matrizes Bidimensionais / UFRN-DCA - 2 de Maio de 2011

46

Figura 5.2: Matriz bidimensional

EEb@PDQA ns a PF EEb@IDQA ns a RF

Exerccio resolvido 5.2.1. Dado a matriz A: 2 3 1 2 4 6 5 5 8 6 6 A D 6 8 10 11 5 6 4 9 1 5 7 2 3 8 8 Pede-se: a) Colocar a matriz A na memria do computador.

3 7 7 7 7 5

a Q I P RY S S V TY V IH II SY W I S UY P Q V VY

b) Preencher a terceira coluna da matriz A com o valor zero.


a Q I P RY S S V TY V IH II SY W I S UY P Q V VY for iaIXS @iDQA a H end

c) Calcular a soma dos elementos da diagonal principal da matriz A e escrever o resultado.


a Q I P RY S S V TY V IH II SY W I S UY P Q V VY som a HY for iaIXR som a som C @iDiAY end printf@4som a 7gn4DsomAY

d) Calcular a soma dos quadrados dos elementos da segunda linha de A e escrever o resultado.

5.2 Matrizes Bidimensionais / UFRN-DCA - 2 de Maio de 2011

47

a Q I P RY S S V TY V IH II SY W I S UY P Q V VY som a HY for iaIXR som a som C @PDiAPY end printf@4som a 7gn4DsomAY

e) Somar de todos os elementos de A.


a Q I P RY S S V TY V IH II SY W I S UY P Q V VY som a HY for iaIXS for jaIXR som a som C @iDjAY end end

f) Armazenar a soma de cada linha de A no vetor S (ver Figura 5.2)


a Q I P RY S S V TY V IH II SY W I S UY P Q V VY for iaIXS som a HY for jaIXR som a som C @iDjAY end s@iA a somY end

g) Trocar a segunda linha com quarta linha.


a Q I P RY S S V TY V IH II SY W I S UY P Q V VY for jaIXR ux a @PDjA @PDjA a @RDjAY @RDjA a uxY end

h) Escrever a matriz A.
a Q I P RY S S V TY V IH II SY W I S UY P Q V VY for iaIXS for jaIXR printf@47QFHf 4D@iDjAAY end printf@4n4AY 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 Q I P RY S S V TY V IH II SY W I S UY P Q V VY for iaIXS for jaIXR @iDjA a input@4higite um nmero4AY end end for iaIXS for jaIXR

5.3 Vetores de String / UFRN-DCA - 2 de Maio de 2011

48

Figura 5.3: Soma das linhas da matriz A.


@iDjA a @iDjA C @iDjAY 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 Q I P RY S S V TY V IH II SY W I S UY P Q V VY for iaIXS for jaIXR @iDjA a input@4higite um nmero4AY end end iguis a 7tY for iaIXS for jaIXR if @iDjA `b @iDjA iguis a 7fY end end end if iguis printf@4sguisn4AY else printf@4hiferentesn4AY 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.

5.3

VETORES DE STRING

Podemos construir vetores de strings. Por exemplo:


EEbmes a 4jn4 4fev4 4mr4 4r4 4jun4 4jul4 4go4 4set4 4nov4 4dez4Y

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 5.3.1. 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 I de dez de PHHQ.

5.4 Estudo de Caso / UFRN-DCA - 2 de Maio de 2011

49

Soluo:
I P Q R S mes a 4jn4 4fev4 4mr4 4r4 4jun4 4jul4 4go4 4set4 4nov4 4dez4Y di a input@4higite o di4AY nunmes a input@4higite o numero do mes4AY no a input@4higite o no4AY printf@47g de 7s de 7gn4DdiDmes@nunmesADnoAY higite o higite o higite o P de r diEEbP numero do mesEEbR noEEbPHHQ de PHHQ esultdo

Comentrio. Porque a varivel nunmes contm o nmero do ms, o comando printf capaz de escrever o nome do ms atravs do elemento mes@nunmesA.

Exerccios
O que este programa escreve?
I P Q R S T U V poem@IA a 9um ros9Y poem@PA a 99Y for aIXQ for aIXP printf@47s 4Dpoem@AAY end end printf@97s9Dpoem@IAAY

5.4

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 diculdades 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:2
2

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 m de evitar a perda das notas, necessrio armazenar cada nota digitada em uma varivel diferente.

5.4 Estudo de Caso / UFRN-DCA - 2 de Maio de 2011

50

I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI

lunoI a input@4xome do luno4D4s4AY notI a input@4xot4AY lunoP a input@4xome do luno4D4s4AY notP a input@4xot4AY lunoQ a input@4xome do luno4D4s4AY notQ a input@4xot4AY lunoR a input@4xome do luno4D4s4AY notR a input@4xot4AY medi a @notICnotPCnotQCnotRAGRY if notI ba medi printf@47sn4DlunoIAY end if notP ba medi printf@47sn4DlunoPAY end if notQ ba medi printf@47sn4DlunoQAY end if notR ba medi printf@47sn4DlunoRAY end

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:
I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI PP PQ PR PS lunoI a input@4xome do luno4D4s4AY notI a input@4xot4AY lunoP a input@4xome do luno4D4s4AY notP a input@4xot4AY lunoQ a input@4xome do luno4D4s4AY notQ a input@4xot4AY lunoR a input@4xome do luno4D4s4AY notR a input@4xot4AY lunoS a input@4xome do luno4D4s4AY notS a input@4xot4AY medi a @notICnotPCnotQCnotRCnotSAGSY printf@4elo de lunos im d mdin4AY if notI ba medi printf@47sn4DlunoIAY end if notP ba medi printf@47sn4DlunoPAY end if notQ ba medi printf@47sn4DlunoQAY end if notR ba medi printf@47sn4DlunoRAY end if notS ba medi

5.4 Estudo de Caso / UFRN-DCA - 2 de Maio de 2011

51

PT PU

printf@47sn4DlunoSAY end

Novamente, suponha que, ao invs de uma turma com cinco alunos, houvessem 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., notI, notP, : : :, notIH) 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,

notI, notP, notQ, : : :


podem ser substitudas por os elementos de um vetor, por exemplo,

not@IA, not@PA, not@QA, : : :.


Neste caso, cada elemento do vetor nota seria lida, uma de cada vez, por um lao forFFFend atravs dos seus ndices. Vejamos a soluo usando vetores.
I P Q R S T U V W IH II IP som a HY GG umuldor ds nots for i a IXIHHHH luno@iA a input@4higite o nome do luno4D4s4AY not@iA a input@4xot4AY som a som C not@iAY end medi a somGIHHHHY GG lulo d medi for i a IXIHHHH if not@iA ba medi printf@47sn4Dluno@iAAY end end

Comentrio. No lao forFFFend das linhas 3 a 6, as notas e os nomes de aluno so lido um de cada vez. O acumulador som, dentro do lao, soma todas as notas (uma por vez). Os nomes dos alunos com nota acima da mdia so escritos no segundo lao forFFFend 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 forFFFend reduzindo, deste modo, o tamanho de um programa cuja elaborao sem o uso de vetores se torna impraticvel.

5.5 Exemplos com Matrizes / UFRN-DCA - 2 de Maio de 2011

52

5.5
5.5.1

EXEMPLOS COM MATRIZES


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. Um 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 car completamente ordenado. Vejamos como funciona este algoritmo para ordenar o a S R Q P T. A) Vetor inicial desordenado: a S R Q P T Passo A.1 Comparar a(1) e a(2). Se a(1) > a(2), troque os dois elementos. a R S Q P T 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 R Q S P T 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 R Q P S T Houve troca. Passo A.4 Comparar a(4) e a(5). Se a(4) > a(5), troque os dois elementos. a R Q P S T 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 Q R P S T 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 Q P R S T 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 Q P R S T No houve troca. Passo B.4 Comparar a[4] e a[5]. Se a[4] > a[5], troque os dois elementos. a Q P R S T 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 P Q R S T Houve troca do nmero 3 com o nmero 2.

5.5 Exemplos com Matrizes / UFRN-DCA - 2 de Maio de 2011

53

Passo C.2 Comparar a[2] e a[3]. Se a[2] > a[3], troque os dois elementos. a P Q R S T No houve troca. Passo C.3 Comparar a[3] e a[4]. Se a[3] > a[4], troque os dois elementos. a P Q R S T No houve troca. Passo C.4 Comparar a[4] e a[5]. Se a[4] > a[5], troque os dois elementos. a P Q R S T 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 P Q R S T No houve troca. (b) Passo D.2 Comparar a[2] e a[3]. Se a[2] > a[3], troque os dois elementos. a P Q R S T No houve troca. (c) Passo D.3 Comparar a[3] e a[4]. Se a[3] > a[4], troque os dois elementos. a P Q R S T No houve troca. (d) Passo D.4 Comparar a[4] e a[5]. Se a[4] > a[5], troque os elementos. a P Q R S T 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 (supondo que o vetor j foi lido e est na memria).
I P Q R S T U V W IH II IP IQ n a length@AY rouvero a 7tY while rouvero rouvero a 7fY for i a IX@nEIA if @iA b @iCIA temp a @iAY @iA a @iCIAY @iCIA a tempY rouvero a 7tY end end end GG ytem o tmnho do vetor

GG tro o elemento i om iCI GG rouve tro

Comentrio. A varivel booleana rouvero indica se houve troca ou no aps a ltima passada pelo vetor. A varivel rouvero assume o valor falso na linha 4, e se dentro do lao interno forFFFend no houver troca ento a varivel HouveTroca continuar com valor falso (isto far com que o lao whileFFFend encerre a execuo do programa). Caso contrrio, a varivel rouvero assume o valor verdadeiro na linha 10) (isto far com que o lao whileFFFend execute nova iterao). A troca de um elemento com o elemento seguinte (i.e., a(i) com a(i+1)) realizado pelo trecho:

5.5 Exemplos com Matrizes / UFRN-DCA - 2 de Maio de 2011

54

temp a @iAY @iA a @iCIAY @iCIA a tempY

A varivel temp uma varivel temporria usada apenas para guardar o valor de @iA antes que o mesmo seja perdido na atribuio @iA a @iCIA. Exerccio 5.5.1. Modique trecho de programa que contm algoritmo da bolha para colocar o vetor em ordem decrescente (troque o operador b por ` na linha 6). Use esta modicao para elaborar um programa para ler um vetor com 5 elementos, coloca-lo em ordem decrescente e escreve-lo.

5.5.2

Gerando Nmeros Aleatrios

Exerccio resolvido 5.5.2. 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 rnd (tambm chamada de gerador de nmeros aleatrios). Esta funo retorna um nmero diferente (aleatrio) cada vez que chamada, por exemplo:
EEbrnd@A ns a FRRIHPHR EEbrnd@A ns a FVVSWHVH EEbrnd@A ns a FTVTVHTV

Os nmeros aleatrios gerados por rnd 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 rnd por 6 para gerar nmeros no intervalo 0; 6. Por exemplo:
EEbTBrnd@A

Em seguida, usa-se a funo fix@A para gerar apenas nmeros inteiros entre 0 e 5 (inclusive). Por exemplo,
EEbfix@TBrnd@AA

Por m, adiciona-se o valor 1 na expresso anterior para gerar nmeros inteiros entre 1 e 6.
EEbfix@TBrnd@AACIA

e obtm-se, deste modo, nmeros inteiros aleatrios entre 1 e 6 na qual simula o lanamento de um dado como requerido. Ser utilizado, tambm, um vetor f que armazena a freqncia de cada dado. Por exemplo, o elemento f(1) armazena a freqncia do dado 1, o elemento f(2) armazena a freqncia do dado 2, e assim por diante. Soluo:

5.5 Exemplos com Matrizes / UFRN-DCA - 2 de Maio de 2011

55

I P Q R S T U V W IH II

for i a IXT f@iA a HY GG iniiliz o vetor de frequenis end for iaIXIHH r a fix@TBrnd@AACIY GG lnmento do ddo f@rA a f@rACIY GG diion I o ddo r end for iaIXT f@iA a f@iAGIHHY GG divide o vetor f por IHH pr oter frequeniF printf@4freqni do ddo 7IFHf a 7SFPf7n4DiDf@iAAY end

Uma possvel execuo do programa seria:


freqni freqni freqni freqni freqni freqni do do do do do do ddo ddo ddo ddo ddo ddo I P Q R S T a a a a a a HFIP7 HFIQ7 HFPW7 HFPP7 HFIQ7 HFII7 esultdo

5.5.3

Uma Aplicao de Matrizes

Exerccio resolvido 5.5.3. Alguns candidatos prestaram concurso para cinco vagas em uma empresa. Os resultados das provas do concurso esto armazenadas nas seguintes matrizes: Nome Ana Carlos Francisco Jos Magali Marcos Maria Marta Paulo Pedro Escreva um programa que: a) Armazene o nomes dos candidados em um vetor nome e as notas das provas em uma matriz nota 10 3. O smbolo FFF ser usado para continuar os comandos na linha seguinte.
nome a 4en4 4grlos4 4prniso4 FFF 4tos4 4wgli4 4wros4 FFF 4wri4 4wrt4 4ulo4 4edro4Y not a TFS VFH UFS TFI UFI VFQ VFI SFP UFSY UFPY VFQY TFHY FFF FFF FFF FFF

Matemtica 6,5 8,0 7,5 6,1 5,1 4,1 9,1 8,8 9,5 8,2

Portugus 7,1 8,3 8,1 5,2 6,1 5,5 8,9 8,5 9,3 8,5

Digitao 7,5 7,2 8,3 6,0 6,5 5,4 9,4 9,0 9,1 7,8

5.5 Exemplos com Matrizes / UFRN-DCA - 2 de Maio de 2011

56

SFI RFI WFI VFV WFS VFP

TFI SFS VFW VFS WFQ VFS

TFSY FFF SFRY FFF WFRY FFF WFHY FFF WFIY FFF UFVY

b) Calcule a mdia de cada candidato, armazene em um vetor media e escreva-o. Neste programa e nos seguintes assumido que o cdigo acima j est includo no programa.
I P Q R S T U V W IH II IP mDnasize@notAY for iaIXm som a HY for jaIXn som a somCnot@iDjAY end medi@iAasomGQY end printf@4xome wedin4AY GG linh de erio for iaIXm printf@47EIHs 7QFIfn4Dnome@iADmedi@iAAY end xome en grlos prniso tos wgli wros wri wrt ulo edro wedi UFH UFV VFH SFV SFW SFH WFI VFV WFQ VFP esultdo

c) Calcule e escreva a maior nota da prova de portugus e a nome do respectivo candidato.


I P Q R S T U V W mior a HFHY m a size@notDIAY for iaIXm if not@iDPA b mior mior a not@iDPAY imior a iY GG ermzen o ndie d mior notF end end printf@4e mior not de portugusX 7sD 7QFIfn4Dnome@imiorADmiorAY

d) Elabore um programa para escrever um relatrio dos candidatos em ordem de classicao dos candidados. O soluo desta questo mostrado no programa listado abaixo. Na primeira parte do programa (linhas 1-8), calcula-se a mdia da mesma maneira que no item(b) deste exerccio. Na segunda parte do programa (linhas 10-25) feita a ordenao dos vetores com o algoritmo da bolha. O vetor ordenado o vetor medi, mas

5.5 Exemplos com Matrizes / UFRN-DCA - 2 de Maio de 2011 note que para cada dois elementos trocados do vetor do medi tambm trocado os respectivos elementos do vetor nome para acompanhar a mesma ordem do vetor medi. Na ltima parte do programa (linha 27-30) impresso o relatrio dos candidatos.
I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI PP PQ PR PS PT PU PV PW QH mDnasize@notAY for iaIXm GG gomput s medis dos lunos som a HY for jaIXn som a somCnot@iDjAY end medi@iAasomGQY end GG ordeno e tro dos elementos rouvero a 7tY while rouvero rouvero a 7fY for i a IX@mEIA if medi@iA ` medi@iCIA temp a medi@iAY GG tro o elemento medi i om iCI medi@iA a medi@iCIAY medi@iCIA a tempY temp a nome@iAY GG tro o elemento nomeP i om iCI nome@iA a nome@iCIAY nome@iCIA a tempY rouvero a 7tY GG rouve tro end end end printf@4 xome wedin4AY GG linh de erio for iaIXm printf@47PFHfE 7EIHs 7QFIfn4DiDnomeP@iADmedi@iAAY end xome ulo wri wrt edro prniso grlos en wgli tos wros wedi WFQ WFI VFV VFP VFH UFV UFH SFW SFV SFH esultdo

57

IE PE QE RE SE TE UE VE WE IHE

Captulo

MANIPULAO MATRICIAL
A manipulao matricial uma das mais interessantes caractersticas do Scilab porque reduzem susbtancialmente a quantidade de linhas de cdigo e, frequentemente, torna o programa mais eciente.

6.1

CONSTRUO DE MATRIZES

O Operador Dois Pontos


O operador dois pontos usado para construir uma sequncia de valores. Este operador dene o valor inicial e nal da sequncia e o incremento entre os valores. O operador dois pontos tem a seguinte forma:
iniioXinrementoXfim

Exemplo,
EEbIXPXIS ns a 3 IF QF SF UF WF IIF IQF ISF 3

O incremento assume o valor de um se ele for omitido:


EEbIXS ns a 3 IF PF QF RF SF 3

Note que o operador dois pontos tambm usado no comando FOR.

Funes Aplicadas a Matrizes


Muitas funes comuns (e.g., sin@xA, os@xA, s@xA, etc) so denidas para receber valores e retornar valores. Mas quando recebem matrizes, estas funes operam elemento por elemento na matriz. Por exemplo, calcularemos o logaritmo natural de nmeros entre 10 e 20 separados por intervalos de 2,5:
EEbaIHXPFSXPH a 3 IHF IPFS ISF IUFS PHF 3

EEblog@A

GG funo plid d elemento

58

6.1 Construo de Matrizes / UFRN-DCA - 2 de Maio de 2011

59

ns 3

a PFQHPSVSI PFSPSUPVT PFUHVHSHP PFVTPPHHW PFWWSUQPQ 3

Calculo do seno entre 0 e


EEbsin@HX7piGRX7piA ns a 3 HF HFUHUIHTV IF

com incremento de =4:

HFUHUIHTV

IFPPSiEIT 3

Transposta de uma Matriz


O operador de transposio () constroi a transposta de uma matriz:
EEb a IY PY Q a 3 3 3 IF 3 PF 3 QF 3 GG e trnspost ger um vetor linh PF QF 3 GG m vetor olun

EEb9 ns a 3 IF

Concatenao de Matrizes
Uma operao muito comum a concatenao de matrizes. Por exemplo:
EEb a I P QY EEb a R S TY EEb ns a 3 IF PF QF RF SF TF 3

EEbY ns a 3 3 IF RF PF SF QF 3 TF 3

EbY S R Q ns a 3 3 IF SF PF RF QF 3 QF 3

Mais exemplos:
EEbd a P Q I PY Q R S RY S T U R d a 3 3 PF QF QF RF IF SF PF 3 RF 3

6.1 Construo de Matrizes / UFRN-DCA - 2 de Maio de 2011

60

SF

TF

UF

RF 3

EEbdY Y ns a 3 3 3 3 3 PF QF SF IF IF QF RF TF PF PF IF SF UF QF QF PF RF RF RF RF 3 3 3 3 3

EEbd 9 9 ns a 3 3 3 PF QF SF QF RF TF IF SF UF PF RF RF IF PF QF RF 3 SF 3 TF 3

Este programa produz um vetor de comprimento n:


I P Q R S n a IHY x a Y GG x iniilizdo om um mtriz vzi for ianXEIXI x a x iPY end

Vale resaltar que a concatenao s possvel se houver consistncia dimensional entre as matrizes. Por exemplo, o seguinte exemplo gera um erro por que o vetor c tem dimenses inconsistentes com os vetores a e b:
EEb a I P QY EEb a R S TY EEb a I P Q RY EEbY Y 3EEerror T inonsistent rowGolumn dimensions

linspace e logspace
Construmos um vetor de 5 elementos igualmente espaos entre 0 e 10 com o operador dois pontos da seguinte forma:
EEbIXHFIPSXIFS ns a 3 IF IFIPS IFPS IFQUS IFS 3

Note que precisamos conhecer o incremento de 0,125 para gerar o vetor acima. Se o incremento no conhecido, pode ser mais simples usar a funo linspe para gerar o vetor acima. Sua sintaxe
linspe@iniioDfimDnA

A funo linspe gera um vetor com n valores igualmente espaados comeando em iniio e terminando em fim. Exemplo:

6.2 Secionamento de Matrizes / UFRN-DCA - 2 de Maio de 2011

61

Tabela 6.1: Construo de Matrizes

x a iniioXfim x a iniioXinrementoXfim x a linspe@iniioDfimDnA x a logspe@iniioDfimDnA


a I P QY a V W PY

Cria um vetor linha que comea em iniio, incrementa em um e um at atingir fim. Cria um vetor linha que comea em iniio, incrementando de inremento at atingir fim. Cria um vetor linha com n valores igualmente espaados comeando em iniio e terminando em fim. Cria um vetor linha com n valores logaritmicamente espaados comeando em iniio e terminando em fim. Cria vetor linha com os elementos de e . Cria matriz com os elementos de na primeira linha e os elementos de na segunda linha.

x a Y x a Y Y

EEblinspe@IDIFSDSA ns a 3 IF IFIPS IFPS IFQUS IFS 3

A funo logspe@iniioDfimDnA gera n elementos logaritmicamente espaados. O primeiro elemento 10 elevado ao iniio e o ltimo elemento 10 elevado ao fim. Por exemplo:
EEblogspe@IDPDRA ns a 3 IHF PIFSRRQRU RTFRISVVV IHHF 3

O seguinte exemplo plota o grco da funo seno. A funo plotPd@xDyA cria um grco onde x e y so vetores de mesmo tamanho representando os pontos do eixo x e y de uma funo qualquer. Usamos 50 pontos no intervalo de 0 at 2 :
EEbx a linspe@HDPB7piDSHAY EEby a sin@xAY EEbplotPd@xDyAY

Na verdade, a funo plotPd@xDyA apenas conecta os pontos dados por meio de linhas retas. Portanto, para obter uma aparncia suave da curva do grco preciso uma quantidade suciente de pontos (no caso usamos 50 pontos). Um resumo das operaes construo de matrizes mostrado na Tabela 6.1.

6.2

SECIONAMENTO DE MATRIZES

O Scilab permite manipulao de parte da matriz (uma submatriz). Esta operao denominada de secionamento (do ingls, slicing). Considere o vetor:

6.2 Secionamento de Matrizes / UFRN-DCA - 2 de Maio de 2011

62

(a) v(2:4)

(b) a(1:3,2)

(c) a(2:3,1:3)

Figura 6.1: Secionamento de Matrizes


EEbv a P S T Q V v a 3 PF SF TF QF VF 3

Obtemos uma parte do vetor (subvetor) usando o comando v@PXRA que refere-se aos elementos 2, 3, e 4 do vetor v (ver Figura 6.1(a)):
EEbv@PXRA ns a 3 SF TF QF 3

Considere a matriz:
EEb a P Q IY U V RY P V V a 3 3 3 PF UF PF QF VF VF IF 3 RF 3 VF 3

@IXQDPA refere-se a segunda coluna da matriz (ver Figura 6.1(b)):


EEb@IXQDPA ns a 3 3 3 QF 3 VF 3 VF 3

@PXQDIXQA refere-se as linhas 2 e 3 da matriz (ver Figura 6.1(c)):


EEb@PXQDIXQA ns a 3 3 UF PF VF VF RF 3 VF 3

O operador dois pontos sem argumentos refere-se ao intervalo inteiro:


EEb@XDIA ns a 3 3 3 PF 3 UF 3 PF 3 GG refereEse segund linh VF RF 3 GG refereEse primeir olun

EEb@PDXA ns a 3 UF

6.2 Secionamento de Matrizes / UFRN-DCA - 2 de Maio de 2011

63

Para extrair a primeira e terceira linhas usamos:


EEb@I QDXA ns a 3 3 PF PF QF VF IF 3 VF 3

Note que este exemplo troca a coluna 1 da matriz pela coluna 3:


EEb@XDQXEIXIA ns a 3 3 3 IF RF VF QF VF VF PF 3 UF 3 PF 3

Vetores pode ser usados como ndice. Por exemplo,


EEbxaI P QY EEb@PDxA ns a 3 UF VF RF 3

Este exemplo extrai uma submatriz da matriz a:


EEb a I PY EEb@DA ns a 3 3 PF UF QF 3 VF 3

Para lembrar, mostramos a matriz novamente:


EEb a 3 3 3 PF UF PF QF VF VF IF 3 RF 3 VF 3

e um exemplo de concatenao de matriz:


EEb Y @IXPDXA ns a 3 3 3 3 3 PF UF PF PF UF QF VF VF QF VF IF RF VF IF RF 3 3 3 3 3

Apesar de no ser a maneira mais simples, a transposta da matriz pode ser calculada da seguinte forma:
EEb@XDIA9Y@XDPA9Y@XDQA9 ns a 3 3 3 PF QF IF UF VF RF PF 3 VF 3 VF 3

6.2 Secionamento de Matrizes / UFRN-DCA - 2 de Maio de 2011

64

Figura 6.2: Indexao Linear

6.2.1

Indexao Linear

A operao de indexar, com apenas um ndice, uma matriz bidimensional chamada de indexao linear. A matriz tratada como se fosse um longo vetor coluna formado pelas colunas da matriz (uma coluna abaixo da outra). Por exemplo, a Figura 6.2.1 mostra ndices lineares da seguinte matriz:
EEbe a P Q IY U V RY P V VY T R S e a 3 3 3 3 PF UF PF TF QF VF VF RF IF RF VF SF 3 3 3 3

A operao e@iA retorna elemento de A com o i-simo ndice linear. Exemplo:


EEbe@VA ns a RF

A operao e@XA retorna um vetor coluna construdo pelas colunas da matriz e:


EEbe@XA ns a 3 3 3 3 3 3 3 3 3 3 3 3 PF UF PF TF QF VF VF RF IF RF VF SF 3 3 3 3 3 3 3 3 3 3 3 3

6.3 O Operador $ / UFRN-DCA - 2 de Maio de 2011

65

Tabela 6.2: Secionamento de Matrizes Considere o vetor v de tamanho n.

e@vDXA e@XDvA e@XA e@vA

Extrai as linhas v@IA, v@PA, FFF, v@nA de A. Extrai as colunas v@IA, v@PA, FFF, v@nA de A. Retorna um vetor coluna construdo percorrendo as colunas da matriz e pela ordem crescente dos ndices da coluna. Extrai os elementos de e cujos ndices correspondem a v(1), v(2), ..., v(n), como se e fosse o vetor-coluna e@XA

Outros exemplos,
EEbe@PXSA ns a 3 3 3 3 UF PF TF QF 3 3 3 3

EEbe@P V IA ns a 3 3 3 UF 3 RF 3 PF 3

Um resumo de algumas operaes de secionamento de matrizes mostrado na Tabela 6.2.

6.3

O OPERADOR $

O operador $ representa o ltimo elemento do vetor. Por exemplo, considere o vetor:


EEbx a IHXEPXP x a 3 IHF VF TF RF PF 3

EEbx@QX6A ns a 3 TF RF

GG extri do tereiro elemento o ltimo elementoF PF 3

O operador $ pode ser utilizado para diversas operaes:


EEbx@6EIA ns a RF GG extri o penltimo elemento

6.4 Atribuio / UFRN-DCA - 2 de Maio de 2011

66

EEbx@IXPX6A ns a 3 IHF TF

GG extri os elementos om ndie impr PF 3

EEbx@6XEIXIA GG extri os elementos n ordem invers ns a 3 PF RF TF VF IHF 3

6.4

ATRIBUIO

Podemos atribuir matrizes para um bloco de outra matriz. Considere a matriz:


EEbe a P Q IY U R SY P I V e a 3 3 3 PF UF PF QF RF IF IF 3 SF 3 VF 3

O seguinte exemplo altera toda a segunda linha de A:


EEbe@PDXA a V U P e a 3 3 3 PF VF PF QF UF IF IF 3 PF 3 VF 3

Outro exemplo:
EEbe@XDIA a R e a 3 3 3 RF RF RF QF UF IF IF 3 PF 3 VF 3 GG y nmero R expndido pr preenher tod olun IF

Considere o vetor:
EEbv a P R U I QY EEbv@P RA a V v a 3 PF VF UF GG triui V pr o segundo e o qurto elemento de v VF QF 3

A seguir atribuimos uma matriz 2x2 para um bloco 2x2 da matriz A:


EEbe@PXQDIXPA a V WY I P e a 3 3 3 PF VF IF QF WF PF IF 3 SF 3 VF 3

Quando voc atribui uma matriz vazia a uma linha (ou coluna), ela eliminada. Por exemplo,

6.5 Dimenso de Matrizes / UFRN-DCA - 2 de Maio de 2011

67

EEbe@PDXA a e a 3 3 PF IF QF PF

GG e segund linh d mtriz e ser elimind IF 3 VF 3

Considere a matriz f:
EEbf a P QY S V f a 3 3 PF SF QF 3 VF 3

Considere tambm esta atribuio:


EEbf@QDRA a R f a 3 3 3 PF SF HF QF VF HF HF HF HF HF 3 HF 3 RF 3

Como a matriz B no possui a terceira linha e nem a quarta coluna, ela foi ampliada com os novos elementos assumindo valor zero.

6.5

DIMENSO DE MATRIZES

A funo length@A retorna o tamanho de um vetor. Por exemplo,


EEbv a E7piX7piGPX7pi v a 3 E QFIRISWPU EEblength@vA ns a SF E IFSUHUWTQ HF IFSUHUWTQ QFIRISWPU 3

A funo size@A retorna um vetor de dois elementos com o nmero de linhas e colunas de uma matriz. Por exemplo:
EEb a I P Q R SY Q R S T S a 3 3 IF QF PF RF QF SF RF TF SF 3 SF 3

EEbsize@A ns a 3 PF SF 3

Neste exemplo as dimenses so armazenadas nas variveis l e :


EEbl a size@A a l SF a PF

6.6 Operaes Escalar-Matriz / UFRN-DCA - 2 de Maio de 2011 As funes size@xDIA e size@xDPA retornam somente o nmero de linhas e colunas, respectivamente:
EEbsize@DIA ns a PF EEbsize@DPA ns a SF

68

As funes size@xD4r4A e size@xD44A so, respectivamente, idnticas as funes anteriores:


EEbsize@D4r4A ns a PF EEbsize@D44A ns a SF

Considere o vetor:
EEb a Q I P RY

Apesar de ser um vetor, interpretado, a seguir, como uma matriz 1x4. Por exemplo:
EEbsize@D44A ns a RF GG devolve o numero de oluns de

6.6

OPERAES ESCALAR-MATRIZ

Operaes entre escalar e matriz seguem a regras comuns da matemtica. Considere a matriz:
EEbe a I P Q RY S T U V e a 3 3 IF SF PF TF QF UF RF 3 VF 3

Exemplo de multiplicao:
EEbPBe ns a 3 3 PF IHF RF IPF TF IRF VF 3 ITF 3

Exemplos de diviso:

6.7 Operaes Matriz-Matriz / UFRN-DCA - 2 de Maio de 2011

69

EEbeGR ns a 3 3 HFPS IFPS HFS IFS HFUS IFUS IF 3 PF 3

EEbe@XDPAGP ns a 3 3 IF 3 QF 3

Exemplos de expresses:
EEbeEP ns a 3 E IF 3 QF EEbQBeEP ns a 3 3 IF IQF RF ITF UF IWF IHF 3 PPF 3 HF RF IF SF PF 3 TF 3

EEbSCQBe@IDXA ns a 3 VF IIF IRF IUF 3

6.7

OPERAES MATRIZ-MATRIZ

Operaes de adio e subtrao entre matrizes seguem a regras comuns da matemtica:


EEbe a I P Q RY S T U V e a 3 3 IF SF PF TF QF UF RF 3 VF 3

EEbf a Q I Q VY Q W T S f a 3 3 QF QF IF WF QF TF VF 3 SF 3

EEbeCf ns a 3 3 RF VF QF ISF TF IQF IPF 3 IQF 3

EEbPBeEf ns a 3 E IF 3 UF QF QF QF VF HF 3 IIF 3

6.7 Operaes Matriz-Matriz / UFRN-DCA - 2 de Maio de 2011

70

A operao de multiplicao tambm segue as regras comuns da matemtica:


EEbe a I P Q RY S T U V e a 3 3 IF SF PF TF QF UF RF 3 VF 3 GG vetorEolun

EEbv a PY QY RY S v a 3 3 3 3 PF QF RF SF 3 3 3 3

EEbeBv ns a 3 3 RHF 3 WTF 3

Multiplicar matrizes de dimenses incompatveis causam erros:


EEb a P Q S IY EEbeB 3EEerror IH inonsistent multiplition

Naturalmente, a multiplicao de e pela transposta de vlida:


EEbeB9 ns a 3 3 PUF 3 UIF 3

O operador de multiplicao pontuada (.*) realiza uma multiplicao elemento por elemento entre matrizes. Considere as matriz:
EEbe a I P Q RY S T U V e a 3 3 IF SF PF TF QF UF RF 3 VF 3

EEbf a Q I Q VY Q W T S f a 3 3 QF QF IF WF QF TF VF 3 SF 3

Multiplicao pontuada:
EEbeFBf ns a 3 3 QF ISF PF SRF WF RPF QPF 3 RHF 3

6.7 Operaes Matriz-Matriz / UFRN-DCA - 2 de Maio de 2011

71

Do mesmo modo, a diviso elemento por elemento, requer o uso do ponto (diviso pontuada):
EEbeFGf ns a 3 3 HFQQQQQQQ IFTTTTTTU PF HFTTTTTTU IF IFITTTTTU HFS 3 IFT 3

Existe tambm a ponteno elemento por elemento que tambm requer o uso do ponto (potenciao pontuada): Em geral, o Scilab
EEbeFP ns a 3 3 IF PSF RF QTF WF RWF ITF 3 TRF
utiliza menos laos que as linguagens de programao tradicionais devido sua habilidade de substituir laos por alguma operao matricial.

Exemplo de expresso:
EEbeF@PCIACfGP ns a 3 3 PFS IPTFS VFS PPHFS PVFS QRTF TVF 3 SIRFS 3

A seguinte expresso:
EEbPFe ns a 3 3 PF QPF RF TRF VF IPVF ITF 3 PSTF 3

eleva 2 a cada um dos elementos de e. Exerccio resolvido 6.7.1. Calcular o valor da funo f .x/ D sin.x/ cos.x/ para xD 2 3 8 ; ;:::; 8 8 8 8 ;

Em muitas linguagens de programao este problema seria utilizar um lao FOR, como por exemplo:
I P Q R S T x a 7piGV X 7piGV X 7piY a sin@xAY a os@xAY for iaIXV y@iA a @iAB@iAY end

No Scilab possivel substituir o lao FOR por uma multiplicao pontuada:


I P x a 7piGV X 7piGV X 7piY y a sin@xAFBos@xAY

6.8 Soluo de Sistemas de Equaes Lineares / UFRN-DCA - 2 de Maio de 2011

72

6.8

SOLUO DE SISTEMAS DE EQUAES LINEARES

O Scilab foi especialmente projetado para simplicar clculos de Algebra Linear. Um dos problemas mais comuns de Algebra Linear a soluo de sistemas de equaes lineares: 8 x2 C 2x3 D 5 < x1 x1 x2 6x3 D 0 : 4x1 C x3 D 5 Este sistema tambm pode ser escrito na forma matricial Ax D b: 3 2 3 32 2 5 x1 1 1 2 4 1 1 6 5 4 x2 5 D 4 0 5 5 x3 4 0 1 Iniciamos a soluo do sistema preparando as matrizes A e b:
EEbe a I EI PY e a 3 3 3 IF E IF IF E IF RF HF I EI ETY R H I

PF 3 E TF 3 IF 3 GG e trnspost importnte3

EEb a S H S9 a 3 3 3 SF 3 HF 3 SF 3

O operador de diviso esquerda resolve o sistema, isto , o resultado de e a soluo do sistema:1


EEbe ns a 3 IFHWQUS 3 3 E PFTSTPS 3 3 HFTPS 3

6.9

TRANSPOSTA DE MATRIZES COMPLEXAS

Se a matriz possue nmeros complexos, o operador de transposio () produz a transposta conjugada, ou seja, aplica a transposio e a conjugao complexa na matriz. Por exemplo:
EEb a 7i PC7i SY EICPB7i QB7i 7i a 3 i 3 E IF C PFi EEb9 ns a
1 O operador de diviso a direita = denido em termos do operador de diviso esquerda: A=b = (A'nb')'.

PF C i QFi

SF 3 i 3

6.10 Zeros e Ones / UFRN-DCA - 2 de Maio de 2011

73

Tabela 6.3: Transposta de Matrizes Complexas Seja e e f matrizes reais. Considere a matriz complexa: a e C 7iBf Ento:
9 a e9 E 7iBf9 F9 a e9 C 7iBf9

3 E i 3 PF E i 3 SF

E IF E PFi 3 E QFi 3 E i 3

Use o operador de transposio pontuada (.) para produzir a transposta sem operao de conjugao:
EEbF9 ns a 3 3 3 i PF C i SF E IF C PFi 3 QFi 3 i 3

Um resumo mostrado na Tabela 6.3

6.10

ZEROS E ONES

Captulo

FUNES
7.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 o compreenso 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 funo sempre que for ordenar uma lista. Neste sentido, as funes apresentam as seguintes vantagens: 1) voc escreve o cdigo somente uma vez. 2) voc pode reutilizar a funo em outros programas. 3) 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 freqentemente sem ter que repetir o mesmo cdigo em vrios lugares; 3. Aumentar a legibilidade do programa. No Scilab j existem muitas funes prontas (pr-denidas), algumas delas elementares (os@xA e sin@xA) e outras especcas para aplicaes em engenharia, matemtica, fsica, e na estatstica. O objeto de estudo deste captulo so as funes denidas pelo usurio. Isto , funes que so elaboradas pelos prprios usurios do Scilab.

7.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 os@xA recebe um valor e retorna um valor, logo tem um parmetro de entrada e um de sada. A funo, modulo@xDyA recebe dois valores (o numerador e o denominador) e retorna um valor (o resto). Logo, modulo@xDyA 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 Denidas pelo Usurio / UFRN-DCA - 2 de Maio de 2011

75

EEb a I P QY R S T a 3 3 IF RF PF SF QF 3 TF 3

EEbl a size@A a l QF a PF

porque recebe uma matriz e devolve dois valores (um nmero de linha e colunas).

7.3

FUNES DEFINIDAS PELO USURIO

A forma geral de uma funo :

funtion yIDyPDFFFDym a nomedfuno@xIDxPDxQDFFFDxnA `omndosbFFF endfuntion


Onde,

funtion nomedfuno xID xPD xQDFFFD xn yID yPD yQDFFFD ym `omndosb


A declarao:

Palavra reservada que indica o inicio de uma funo. o nome da funo denido pelo usurio. parmetros de entrada. parmetros de sada. Comandos do Scilab a serem executados pela funo.

funtion yIDyPDFFFDym a nomedfuno@xIDxPDxQDFFFDxnA

o cabealho da funo e serve, entre outras coisas, para dar o nome da funo e denir a lista de parmetros de entrada e sada (tambm chamados de parmetros formais). Quando h apenas um parmetro de sada os cochetes 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:
I P Q R S T U funtion y a ft@nA p a IY for ianXEIXP p a pBiY end y a pY endfuntion

Na linha de comando y a p da funo ft@xA atribudo o valor a ser retornado pelo parmetro de sada y.

7.4 A Idia Bsica das Funes / UFRN-DCA - 2 de Maio de 2011

76

IMPORTANTE: Cada paramtro da lista de parmetros de sada de uma funo necessrio aparecer a esquerda de pelo menos um comando de atribuio da funo. Quando a funo termina, o valor contido nos paramtros 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 ft:
EEbft@RA ns a IPHF

Quando ocorre a chamada ft@SA, o valor 5 passado para a varivel n (o parmetro de entrada de ft). Deste modo, a funo ft calcula o fatorial de n (igual a 5) e retorna o valor contido no paramtro de sada y, ou seja, 120. Para criar uma function, digitamos a funo em um arquivo com extenso .SCI. Por exemplo, fatorial.sci. Em seguida, usamos a funo getf@A do Scilab para carregar o arquivo fatorial.sci para dentro do Scilab. Por exemplo:
EEb getf@4ftorilFsi4AY

Neste comando, foi assumido que o arquivo fatorial.sci foi salvo no diretrio corrente do Scilab. Use o comando hdir@A para mudar o diretrio corrente do Scilab. Uma funo denida pelo usurio tem o mesmo status de uma funo pr-denida 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 denida acima. 10 X SD i D 1 C 2 C : : : C 10
i D1

Soluo:
I P Q R som a HY for jaIXIH som a som C ft@jAY end

Comentrio. Para executar este programa, o usurio deve, antes, carregar a funo ft@A. Isto pode ser feito atravs, por exemplo, da funo getf@A.

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 - 2 de Maio de 2011


Programa Principal comandos a=func1(b) comandos m=func2(n) comandos q=func3(p) function y=func2(x) comandos endfunction

77

function y=func1(x) comandos endfunction

function y=func3(x) comandos b=func4(x) comandos 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()).

I P Q R S T U V I P Q R

funtion y a som@xA n a length@xAY GG lul o tmnho sdo vetor s a HY for iaIXn s a s C x@iAY end y a sY endfuntion funtion y a medi@xA n a length@xAY y a som@xAGnY GG hm funo som endfuntion

E o programa principal que chama as funes.


I P Q R S T U V ne a input@4ul o numero de elementos do vetor4AY for iaIXne @iA a input@4digite um elemento4AY end s a som@AY m a medi@AY printf@4som a 7gn4DsAY printf@4medi a 7gn4DmAY

No programa principal, a chamada da funo som@A (na linha 5) transfere o uxo de controle para a funo que, ao terminar, devolve o controle para o programa chamador.

7.5 Escopo de Variveis / UFRN-DCA - 2 de Maio de 2011

78

O programna principal executa o comando da linha seguinte (linha 6) e chama a funo medi@A. A funo medi@A chama a funo som@A (linha 3 da funo medi@A) que devolve o controle para a funo medi@A que ento devolve o controle para o programa chamador.

7.5

ESCOPO DE VARIVEIS

Relembremos que as variveis denidas no console do Scilab e pelos scripts so armazenadas em uma rea da memria chamada de espao de trabalho. Por exemplo,
EEb lerY EEb x a PY EEb y a QY GG pg tods s vriveis do espo de trlho

Como x e y esto na memria, esto o comando


EEb z a x C yY

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


EEb a x C y C w

por que a varivel w no est no espao de trabalho (uma vez no foi denida no console). As variveis denidas 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 ft@A no pode ser usada no console:
EEb ft@QA EEb p C I GG ger erro

porque p no esta denida no espao de trabalho. Neste caso, dizemos que p uma varivel local da funo ft@A. A seguir introduziremos os conceitos de variveis locais e o globais.

7.5.1

Variveis Locais

Uma variavel dita ser local quando denida dentro de uma funo. Toda varivel local deixa de existir (torna-se invlida) quando a funo nalizada. 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:
I P Q R S T U funtion y a et@xA a QY a PY a SY printf@4 a 7g a 7g y a C C C xY endfuntion

a 7gn4DDDAY

e programa principal que usa esta funo

7.5 Escopo de Variveis / UFRN-DCA - 2 de Maio de 2011

79

I P Q R S

a PQY a SHY a PHHY w a et@PAY printf@4 a 7g

a 7g

a 7gn4DDDAY

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

a Q a P a S a PQ a SH a PHH
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 variaveis locais s poderem ser usadas internamente pela funo elimina qualquer conito que possa sugir, 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 glol. Por exemplo, considere a seguinte funo:
I P Q R S T U V W funtion y a gm@xA glol Y glol Y a IY a PY t a QY printf@4 a 7g a 7g y a C C t C xY endfuntion

t a 7gn4DDDtAY

e programa principal que usa esta funo


I P Q R S T U glol Y glol Y a SY a IHY t a ISY u a gm@PAY printf@4 a 7g

a 7g

t a 7gn4DDDtAY

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

a I a I

a P a P

t a Q t a IS

7.6 Os Programas do Scilab / UFRN-DCA - 2 de Maio de 2011 Note que as variveis e do programa principal foram alteradas dentro da funo gm@A. Isto aconteceu porque usamos a comando glol. Porm a varivel t no foi alterada pela funo gm@A porque no uma varivel global, ou seja, a varivel t no foi declarada como global, permanecendo como uma varivel local. Concluimos 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 glol deve ser usado tanto no programa chamador como na funo (e em qualquer funo que venha a compartinhar a mesma varivel). A declarao glol opcional quando uma varivel, apesar de ser global, no modicada pela funo. Por exemplo, considere a funo:
I P Q R S funtion y a et@xA glol a xCQY y a C Y endfuntion

80

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.

e o programa principal que usa esta funo:


I P Q R S glol a SY a IHY u a et@PAY printf@4u a 7g n4DuAY

Claramente, as variveis e so globais, mas somente a varivel foi declarada glol por que ela modicada pela funo et@A. A varivel global no precisa ser declarada glol porque no modicada pela funo et@A.

7.6

OS PROGRAMAS DO SCILAB

Existem no Scilab dois tipos de programas: 1. Arquivo de comandos. (a) uma seqncia de comandos do Scilab; (b) Possuem extenso de arquivo .SCE (mas no obrigatrio); (c) executado pelo comando exec; (d) Armazena suas variveis em uma rea chamada Espao de Trabalho (Workplace). 2. Arquivo de funes. (a) uma seqncia de functions (sub-rotinas); (b) Possuem extenso de arquivo .SCI; (c) carregado pelo comando getf; (d) Armazena suas variveis em uma rea prpria. Essas variveis so chamadas de locais.

7.7 Passagem de Parmetros / UFRN-DCA - 2 de Maio 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:
funtion x a ftoril@nA

Esta outra function tem trs parmetros de entrada:


funtion x a zet@DDA

Esta funo no tem parmetros de entrada:


funtion y a psi@A

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):
I P Q R S T U V W funtion xD yD z a et@D D A a GPY a GPY a GPY printf@4a7g a7g a7gn4DDDAY x a Y y a Y z a Y endfuntion

Considere o seguinte programa principal


I P Q R S T U V W a IHY a PHY a QHY rI a PY rP a RY rQ a TY dID dPD dQ a et@rIDrPDrQA printf@4a7g a7g a7gn4DDDAY printf@4dIa7g dPa7g dQa7gn4DdIDdPDdQAY

Este programa chama et@A e passa os parmetros rI, rP e rQ do seguinte modo: o valor de rI colocado em , o valor de rP colocado em e o valor de rQ colocado em . Do mesmo modo, a funo retorna os parmetros x, y e z para as variveis dI, dP e dQ, respectivamente. O resultado do programa esultdo aI aP aQ aIH aPH aQH dIaI dPaP dQaQ

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: p area D s.s a/.s b/.s c/

7.8 Exemplos / UFRN-DCA - 2 de Maio de 2011

82

onde s o semi-permetro dado por: 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: sD
I P Q funtion d a dist@xIDyIDxPDyPA d a sqrt@@xPExIAPC@yPEyIAPAY endfuntion

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


I P Q R S T U V W IH II IP IQ IR IS IT IU IV xI yI xP yP xQ yQ a a a a a a input@4digite input@4digite input@4digite input@4digite input@4digite input@4digite xI4AY yI4AY xP4AY yP4AY xQ4AY yQ4AY

GG glulo dos ldos do tringulo a dist@xIDyIDxPDyPAY a dist@xIDyIDxQDyQAY a dist@xPDyPDxQDyQAY s a @CCAGPY GG medid do ldo e GG medid do ldo f GG medid do ldo g GG semiperimetro

re a sqrt@sB@sEAB@sEAB@sEAAY printf@4re do tringulo a 7gn4DreAY

Exerccio resolvido 7.8.2. Elaborar uma funo inverte@A que receba um vetor X. A funo retorna um vetor x invertido. Por exemplo, se a funo recebe |[2 1 8 5]|, ela retorna S V I P. Soluo:
I P Q R S T funtion y a inverte@xA n a length@xAY for iaIXn y@iA a x@nCIEiAY end endfuntion

Exerccio resolvido 7.8.3. Muitas funes matemticas podem ser calculadas por meio de um somatrio innito 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 x4 C 2 4 x6 C 6

Para clculos prticos, este somatrio innito devem terminar aps um nmero nito de termos (penalizando a preciso do resultado). Preparar uma funo para calcular o coseno (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 - 2 de Maio de 2011

83

I P Q R S T U V W IH

funtion y a oseno@xDnA s a IY for iaIXn num a x@PBiAY den a ft@PBiAY sinl a @EIAiY s a s C sinlBnumGdenY end y a sY endfuntion

Funo auxiliar para calcular o fatorial:


I P Q R S T U funtion x a ft@nA p a IY for ianXEIXP p a pBiY end x a pY endfuntion

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

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,
I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI PP PQ PR funtion mxdD indi a md@D A GG ist funo lul o mximo divisor de dois GG nmeros e positivosF GG indi retorn I se o lul do mFdFF teve xito GG retorn H se os ddos de entrd form GG indequdosF indi a HY mxd a HY if round@A `b | round@A `b returnY GG equi o omndo return interrompe GG o progrmF end if ` I | ` I returnY GG equi tmm o omndo return GG interrompe o progrmF end if ` t a Y a Y a tY end indi a IY r a IY

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 2 de Maio de 2011

84

PS PT PU PV PW QH QI

while r `b H r a modulo@D AY a Y a rY end mxd a Y endfuntion

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 mdia.x/ D varincia.x/ D
n X i D1

xi
n

1X xi n
i D1

n 1 i D1 p desvio padro.x/ D varincia.x/

n X .xi

mdia.x//2

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


I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI PP PQ PR PS PT printf@4weu rogrm de isttsti erso I4AY n a input@4higite o numero de elementos4AY for iaIXn x@iA a input@4higite um nmero entre I e IH4AY end printf@4ypo I E omn4AY printf@4ypo P E wdin4AY printf@4ypo Q E hesvio pdron4AY printf@4ypo R E rinin4AY opo a input@4higite su opo4AY if opo aa I som a HY for iaIXn som a som C x@iAY end printf@4e som igul 7g4DsomAY end if opo aa P som a HY for iaIXn som a som C x@iAY end medi a somGnY printf@4e mdi igul 7g4DmediAY

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 2 de Maio de 2011

85

PU PV PW QH QI QP QQ QR QS QT QU QV QW RH RI RP RQ RR RS RT RU RV RW SH SI SP SQ SR SS

end if opo aa Q som a HY for iaIXn som a som C x@iAY end medi a somGnY d a HY for i a IXn d a d C @x@iAEmediAPY end dpd a sqrt@dG@nEIAAY printf@4y desvio pdro igul 7g4DdpdAY end if opo aa R som a HY for iaIXn som a som C x@iAY end medi a somGnY d a HY for i a IXn d a d C @x@iAEmediAPY end vr a dG@nEIAY printf@4e vrini igul 7g4DvrAY 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:
I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI printf@4weu rogrm de isttsti erso P4AY n a input@4higite o nmero de elementos4AY for iaIXn x@iA a input@4higite um nmero entre I e IH4AY end printf@4ypo I E omn4AY printf@4ypo P E wdin4AY printf@4ypo Q E hesvio pdron4AY printf@4ypo R E rinin4AY opo a input@4higite su opo4AY if opo aa I printf@4e som igul 7g4Dsom@xAAY end if opo aa P printf@4e mdi igul 7g4Dmedi@xAAY end

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 2 de Maio de 2011

86

PP PQ PR PS PT PU PV

if opo aa Q printf@4y desvio pdro igul 7g4Ddpd@xAAY end if opo aa R printf@4e vrini igul 7g4Dvr@xAAY end

As sub-rotinas:
I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI PP PQ PR PS PT PU PV PW QH QI GG puno som funtion y a som@xA n a length@xAY s a HY for iaIXn s a s C x@iAY end y a sY endfuntion GG puno mdi funtion y a medi@xA n a length@xAY y a som@xAGnY endfuntion GG puno vrini funtion y a vr@xA n a length@xAY m a medi@xAY d a HY for i a IXn d a d C @x@iAEmAPY end y a dG@nEIAY endfuntion GG puno hesvio dro funtion y a dpd@xA y a sqrt@vr@xAAY endfuntion

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@xA 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 :

selet `expressob se `vlorIb then `omndosb FFF se `vlorPb then `omndosb FFF

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 2 de Maio de 2011

87

se `vlor ib then `omndosb FFF else `omndosb FFF 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


I P Q R S T U V W IH II IP IQ IR IS IT IU IV IW PH PI PP PQ printf@4weu rogrm de isttsti erso Q4AY n a input@4higite o nmero de elementos4AY for iaIXn x@iA a input@4higite um nmero entre I e IH4AY end printf@4ypo I E omn4AY printf@4ypo P E wdin4AY printf@4ypo Q E hesvio pdron4AY printf@4ypo R E rinin4AY opo a input@4higite su opo4AY selet opo se I then printf@4e se P then printf@4e se Q then printf@4y se R then printf@4e end

som igul 7gn4Dsom@xAAY mdi igul 7gn4Dmedi@xAAY desvio pdro igul 7gn4Ddpd@xAAY vrini igul 7gn4Dvr@xAAY

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. Verica se o usurio digitou uma opo invlida usando o comando ELSE.

PROGRAMA VERSO 4 - Verso Final


I P Q R S T U V W IH II IP IQ printf@4weu rogrm de isttsti erso R4AY n a input@4higite o nmero de elementos4AY for iaIXn x@iA a input@4higite um nmero entre I e IH4AY end opo a IY while opo `b H printf@4n4AY printf@4ypo printf@4ypo printf@4ypo printf@4ypo

I P Q R

E E E E

omn4AY wdin4AY hesvio pdron4AY rinin4AY

7.10 Estudo de Caso: Um Programa de Estatstica / UFRN-DCA - 2 de Maio de 2011

88

IR IS IT IU IV IW PH PI PP PQ PR PS PT PU PV PW QH QI QP QQ QR QS

printf@4ypo H E pimn4AY opo a input@4higite su opo4AY selet opo se I printf@4e som igul 7gn4Dsom@xAAY se P printf@4e mdi igul 7gn4Dmedi@xAAY se Q printf@4y desvio pdro igul 7gn4Ddpd@xAAY se R printf@4e vrini igul 7gn4Dvr@xAAY se H printf@4et logon4AY else end end printf@4o digitou um opo invlidn4AY