Você está na página 1de 73

CENTRO

UNIVERSITRIO UNA
INSTITUTO POLITCNICO

ALGORITMOS E LGICA DE PROGRAMAO


PRTICAS DE LABORATRIO
2014/1

Sumrio
LINK PARA DOWNLOAD DO SOFTWARE SCILAB

INTRODUO

O AMBIENTE SCILAB

A JANELA CONSOLE SCILAB

JANELA DE COMANDO

A JANELA HISTRICO DE COMANDOS

SCINOTES

NAVEGADOR DE VARIVEIS

NAVEGADOR AJUDA

DESENVOLVENDO ARQUIVOS .SCE

DECLARAO DE VARIVEIS E CONSTANTES

COMANDOS BSICOS DE ENTRADA E SADA

COMANDO DE SADA

COMANDOS DE ENTRADA

11

OPERADORES

11

1. ESTRUTURA SEQUENCIAL

17

EXERCCIOS ESTRUTURA SEQUENCIAL:

18

PROJETO FINAL 1 : CLCULO DE CARGA TRMICA PARA UMA CMARA DE


RESFRIAMENTO.

21

2. ESTRUTURA CONDICIONAL

24

O COMANDO IF ELSE.

24

ESTRUTURA CONDICIONAL - IF-ELSEIF-ELSE

25

EXERCCIOS ESTRUTURA CONDICIONAL:

27

PROJETO FINAL 2 : DESENVOLVIMENTO DE UM CONVERSOR DE UNIDADES.

30

3. ESTRUTURAS DE REPETIO

33

O COMANDO FOR

33

O COMANDO WHILE

38

EXERCCIOS LAOS DE REPETIO

41

4. VETORES E GRFICOS

44

INSERINDO VALORES EM UM VETOR

46

INSERO DIRETA

46

INSERO POR MEIO DE UM USURIO

46

MOSTRANDO OS VALORES DE UM VETOR (SADA DE DADOS)

46

SADA DIRETA

46

SADA POR LAO DE REPETIO

46

CONSTRUINDO GRFICOS

47

CONSTRUINDO GRFICOS 2D

47

AJUSTANDO TTULOS E EIXOS

49

EXERCCIOS - VETOR

57

PROJETO FINAL 3 : SIMULAO !

58

5. MATRIZES

60

INSERINDO VALORES EM UMA MATRIZ

61

INSERO DIRETA

62

INSERO POR MEIO DE UM USURIO

62

MOSTRANDO OS VALORES DE UMA MATRIZ (SADA DE DADOS)

62

SADA DIRETA

62

SADA POR LAO DE REPETIO

62

PROJETO FINAL 4 : COMPREENDENDO MATRIZES PARA A GERAO DE GRFICOS


TRIDIMENSIONAIS

67

Link para download do software SCILAB


http://www.scilab.org

Introduo
Existem vrias abordagens para se ensinar os fundamentos do SCILAB. Este
material tem como objetivo fazer uma introduo ao SCILAB do ponto de
vista de um usurio da linguagem C.
Como C/C++ e outras linguagens de programao, o SCILAB, possui
operadores: aritmticos, lgicos, condicionais, repetio e outros mais.
Este captulo vai introduzir a ferramenta SCILAB e explorar os seguintes
conceitos:

O ambiente SCILAB
Com o passar dos anos o SCILAB vm se popularizando no apenas pela
versatilidade, mas tambm pela sua interface, que permite um ambiente
amigvel e interativo em que algoritmos bsicos e avanados, envolvendo
clculos e simulaes podem ser facilmente executados.
O SCILAB apresenta vrias janelas que ajudam e permitem que todas as
atividades sejam realizadas pelo usurio. As janelas possuem funes
distintas e sero exemplificadas e explicadas nas sees a seguir.

A janela console SCILAB


A janela principal chamada de console. Esta a janela inicial onde as
principais interaes no SCILAB acontecem. A janela console gerencia as
sub-janelas associadas a ela. Estas sub-janelas esto localizadas e visveis
junto da janela console.

Figura 1 Janela console SCILAB

Janela de comando
A janela de comando uma sub-janela em que o usurio pode digitar
comandos ou instrues a serem processadas no SCILAB. A janela de
comando vai mostrar o prompt --> , sinal que simboliza que o SCILAB est
pronto para receber instrues. Uma vez digitada a instruo e a tecla enter
for digitada, a instruo imediatamente executada.

Figura 2 Janela de comando SCILAB.

A janela Histrico de Comandos


A janela de histrico contm todos os comandos ou estruturas anteriormente
executadas na janela de comando.

Figura 3 Janela histrico de comandos

SciNotes
A janela SciNotes (editor) disponibiliza um espao onde os arquivos .sci
podero ser criados e editados para a execuo. Arquivos .sci tambm
podem ser abertos ou re-editados e executados. Para ter acesso ao SciNotes
basta clicar na opo aplicativos da janela (principal) console SCILAB.

Figura 4 Janela do editor SciNotes

Navegador de variveis
a sub-janela onde so carregadas, consultadas e salvas as variveis.

Figura 5 Janela navegador de variveis

Perceba na figura acima que todas as variveis que foram criadas, foram
listadas e classificadas quanto ao seu tipo, dimenso e visibilidade. Um duplo
clique em cada uma destas variveis, na janela navegador de variveis,
permitir que voc acesse o contedo da varivel selecionada.

Navegador Ajuda
A janela ajuda permite acesso a todo o contedo de ajuda do SCILAB. Voc
pode fazer a busca por informao de ajuda por diretrios organizados por
pacotes de aplicao, ou fazer uma busca por nome de comando, funo ou
at mesmo aplicao desejada. Para acessar o contedo ajuda, basta clicar
no cone

da janela principal (console SCILAB). importante salientar

que o help possui a descrio de todos os comandos e trechos prticos de


implementao, que podem ser copiados e colados no SciNotes e em
seguida executados.

Figura 6 Janela Ajuda.

Desenvolvendo arquivos .sce


Digitar um pequeno nmero de instrues na janela de comando pode ser
fcil e conveniente. Porm o aumento do nmero de instrues, ou o uso
aplicaes mais complexas comprometem toda a praticidade e facilidade da
abordagem utilizando o prompt de comando ( --> ). Uma maneira mais
adequada descrever estas instrues em um arquivo texto, onde a edio
mais simples e depois solicitar ao SCILAB para carregar este arquivo e
executar estas instrues como se estivessem sido digitadas na janela de
comando. Desta maneira fica mais fcil para o usurio editar e modificar os
programas e identificar possveis erros na execuo. Este tipo de arquivo
texto contendo as instrues ao ( SCILAB ) chamado de arquivo .sci. O
arquivo ganha este nome devido a extenso

do nome do arquivo a ser

reconhecido pelo SCILAB ser .sci . Todo o nosso contedo ser trabalhado
utilizando os arquivos .sci.

Declarao de variveis e constantes


Assim como C/C++, o SCILAB possui algumas regras para a escolha dos
nomes na declarao de variveis e constantes. Estas limitaes devem ser
consideradas e esto descritas a seguir:

Os nomes de variveis e constantes devem ser compostos por letras,


nmeros e / ou underscores. Os nomes tambm devem sempre
iniciar com letras.

As variveis ou constantes que por ventura vierem a ter palavras


compostas no podem ter espaos entre as palavras. Neste caso
aconselha-se fazer uso do underscore entre as palavras.

O SCILAB case sensitive (difere letras maisculas de letras


minsculas), portanto a varivel de nome numero distinta da
varivel Numero.

Comandos bsicos de entrada e sada


Comando de sada
O comando de sada utilizado ser o mprintf(). Ele permite mostrar
mensagens, valores de variveis e/ou a combinao de ambos no prompt de
comando.
Sequncia de chamada
mfprintf(< texto >,< varivel >)
O campo texto pode ser qualquer caracter, texto, equao ou uma
informao qualquer. A impresso do valor de uma varivel pode ser feita por
meio da escolha do formato do tipo de dado seguido pelo nome da varivel.
Veja o exemplo:
mprintf(O valor da presso calculada %5.3f. \n,pressao)

O formato de uso deste comando semelhante ao formato utilizado para o


comando printf em C. No exemplo acima, o especificador de formato
%5.3f. Podemos interpretar este especificador como sendo:

% ! Deve ser includo toda vez que se deseja especificar o formato


de uma varivel.

Tamanho (5 ou qualquer nmero) ! Esta parte do comando


opcional e indica o tamanho total do valor mostrado, incluindo o ponto
decimal.

Preciso (3 ou qualquer nmero) ! Define a quantidade de casas


decimais que sero mostradas na sada.

Tipo de dado (d,f,e,g,c,s) ! Este tipo de informao


necessria e as letras indicam o tipo de dado da varivel como
indicado na tabela a seguir:

Tabela 1 Tipos de especificadores

Especificador

Sada

%d

Inteiro

%f

Real

%e

Exponencial

%g

Menor formato possvel

%c

Caractere

%s

String

10

Tabela 2 Caracteres de controle

Caracteres

Significado

\b

backspace

\n

Nova linha

\t

Tab

\\

Mostrar o caractere \

%%

Mostrar o caractere %

Uma alternativa para mostrar mensagens no prompt de comando o


comando disp(),ao contrrio do comando mprintf() ele no permite
que valores de variveis sejam mostrados conjugados com mensagens na
tela. Ao optar pelo comando disp(),voc dever optar por mostrar a
mensagem ou o valor da varivel, apenas um por comando. Veja no exemplo
a seguir:
disp( A temperatura medida no motor de 25 graus )

Comandos de entrada
O comando de entrada de dados utilizado no SCILAB o comando
input(). Este comando permite que mensagens de texto sejam utilizadas
para indicar a entrada de valores para uma varivel indicada. Veja um
exemplo:
temperatura=input(Digite a temperatura de ajuste do forno: )

Aps digitado um valor pelo usurio, este valor ser atribudo varivel
temperatura.

Operadores
Aps atribuir valores por meio do comando input() , o prximo passo
ento processar os valores por meio das seguintes opes de operadores.

11

Tabela 3 Operadores Aritmticos

Smbolo

Significado

Adio

Subtrao

Multiplicao

Diviso

Potncia

Atribuio

()

Parnteses ( utilize-o
para impor regras)

Tabela 4 Operadores relacionais

Smbolo

Significado

>

maior

>=

Maior ou igual

<

Menor

<=

Menor ou igual

==

Igualdade

~=

Diferena

12

Tabela 5 Operadores lgicos

Smbolo

Significado

&

Operador e

Operador ou

Negao

Para saber mais sobre a implementao de funes complexas (nmeros


complexos), exponenciais (raiz quadrada e logaritmos), trigonomtricas
(seno, cosseno, tangente), etc; v at o menu ajuda e consulte como feito o
uso da funo de sua necessidade. Veja como fcil:

Exemplo de como utilizar o ajuda em busca de uma funo


desconhecida
Eu gostaria de saber como eu fao para implementar o seno de um nmero
e a raiz quadrada de um nmero
Passo 1: V at a janela principal do SCILAB e clique no boto ajuda
Passo 2: Na janela que se abrir voc visualizar esquerda da janela de
ajuda o seguinte menu de opes.

13

Figura 7 Pacotes de funes especficas do menu ajuda.

Passo 3: Escolha a pasta Funes Elementares. Voc dever visualizar as


novas opes de funes como na figura a seguir. Observe que voc ter um
conjunto de funes relacionadas para diversos contedos como: nmeros
complexos, funes exponenciais, operaes com matrizes, ordenao e
procura de valores, trigonometria, etc.

14

Figura 8 Conjunto de funes elementares do menu ajuda.

Passo 4: Para visualizar como implementar o seno de um nmero vamos


abrir a pasta trigonometria e selecionar a funo sin. Ao escolher a funo
seno voc dever visualizar a seguinte janela;

Figura 9 Tela de ajuda para a funo seno.

15

A janela apresentada na figura 9, possui informaes do tipo nome,


sequncia de chamamento, parmetros, descrio e exemplos que podem
ser copiados, colados e executados no scinote.
Passo 5: Para calcular o seno de um nmero ou uma varivel a partir das
informaes encontradas no menu ajuda, devemos ento executar o seguinte
comando:
y = sin(x);
Passo 6: Se executarmos os passos de 1 a 3 e selecionarmos a pasta
exponencial vamos chegar a seguinte informao para calcular a raiz
quadrada de um nmero.
y = sqrt(x);

16

1. ESTRUTURA SEQUENCIAL
Chegou a hora de tentarmos apresentar alguns exemplos e desenvolver
pequenos programas aplicando o que vimos anteriormente.
Veja o exemplo 1.1:
Desenvolva um programa que realize a soma entre dois nmeros

clear;

clc;

mprintf("Entre com dois numeros. \n");

num1 = input(" Primeiro numero: ");

num2 = input(" Segundo numero: ");

soma = num1 + num2;

mprintf("\n O resultado da soma %f ",soma);

Linha 1: O comando clear limpa a memria do sistema.


Linha 2: O comando clc limpa a janela de sada do SCILAB.
Linhas 3 Mensagem para digitar 2 nmeros
Linhas 4 e 5 : A funo input() solicita dois valores ao usurio e armazena
os valores nas variveis num1 e num2.
Linha 6: As duas variveis so processadas utilizando o sinal + para realizar
a soma gerando um resultado, o qual armazenado na varivel soma.
Linha 7: O comando mprintf() mostra a mensagem de sada e o valor da
varivel soma.

Comentrios:

Uma prtica comum na programao em softwares de

computao cientfica a utilizao dos comandos clear e clc. Aconselhamos


a voc a sempre utilizar esses dois comandos ao iniciar um novo programa!

17

Exerccios estrutura sequencial:


Exerccio 1. Faa um programa que solicite como entrada um valor de
temperatura em graus Celsius (oC). Aps realizada a entrada faa a
converso da temperatura para Kelvin (K). Aps realizada a

converso

mostre na sada do seu programa a temperatura em Kelvin e a temperatura


em graus Celsius. Para realizar a converso utilize a relao: K = C +
273,15;
Veja um exemplo de como pode ser feita a sada do seu programa !

Figura 10 Soluo exerccio 1

Exerccio 2: hora de dar mais um passo a frente. Com base no seu


programa anterior, acrescente a ele a converso da temperatura em graus
Celsius para Kelvin e graus Celsius para grau Fahrenheit. Mantenha o
mesmo padro de sada sugerido, acrescentando a converso para graus
Fahrenheit. Para realizar a converso utilize a relao: K = C + 273,15; F =
C 1,8 + 32

Exerccio 3: Suponha que a altura h(t) de uma bola seja dada pela seguinte
funo;

gt 2
h(t) = v0 t
2
18

em que:
V0 a velocidade inicial da bola em metros por segundo (m/s);
t

o tempo em segundos (s);

g a gravidade da terra = 9,81 m/s2

Escreva um programa que calcular a altura de uma bola em um


determinado tempo t. Esteja certo de usar bons nomes de variveis para
todos os smbolos da frmula.

Dica: Quais so as entradas deste problema? ( Que tipo de informao eu


preciso do usurio para que eu possa calcular a altura da bola?)
O que dever ser feito como processamento? ( O que este programa deve
fazer?)
O que voc espera como sada deste programa? Veja um exemplo !

Exerccio 3: Uma aproximao ainda mais real pode ser feita

para o

problema apresentado no exerccio nmero 2. Desta vez temos uma equao


que descreve a altura e outra equao que descreve a velocidade aps o
lanamento.

Suponha que uma bola de massa qualquer seja arremessada para cima
numa velocidade

v0

. Qual a velocidade v(t) e sua altura acima do


19

lanamento h(t) no instante t? A resposta, se desprezamos a resistncia do


ar e um conjunto de outras pequenas influncias,

v(t) = v0 gt
gt 2
h(t) = v0 t
2
Onde

= 9,81 m/s2 a acelerao da gravidade na superfcie da terra.

Escrevamos um cdigo em SCILAB que solicita

e t e ento informa as

particularidades da bola (velocidade e altura).


Exerccio 5. Consideremos um problema da eletrnica. Suponha que ns
tenhamos trs resistores eltricos montados em paralelos, como mostrado na
figura abaixo, e gostaramos de trat-lo como um simples resistor. Criemos
um algoritmo para calcular a resistncia equivalente dos trs resistores
paralelos, mas tratado como um.

A lei de Ohm diz que a corrente I i atravs do i-simo resistor proporcional


queda da tenso V sobre o resistor, assim estas quantidades so
associadas por V = Ri I i onde Ri chamada a resistncia do resistor. A
corrente total passando pelos trs resistores justamente a soma das trs
correntes e a queda da tenso

I total =

a mesma para todos os trs, assim:

!1 1 1$
V V V
+ + =V# + + &
R1 R2 R3
" R1 R2 R3 %

Consequentemente, a lei de Ohm se aplica ao grupo completo de trs


resistores, com a resistncia Rparalela dada por:

20

1
Rparalela

1 1 1
+ +
R1 R2 R3

Observe que tivemos que analisar o problema antes que pudssemos


escrever qualquer cdigo; frequentemente este o caso, e a anlise do
problema e a confeco da soluo so usualmente mais difceis do que a
implementao.
Escrevamos um cdigo em SCILAB que solicita ao usurio os valores das
trs resistncias (R1 , R2 , R3) e retorna a resistncia dos trs em paralelo
(Rparalela).

PROJETO FINAL 1 : CLCULO DE CARGA TRMICA PARA UMA CMARA


DE RESFRIAMENTO.
A parcela de carga trmica englobada sob o ttulo de diversos, devida aos
equipamentos mecnicos, iluminao, pessoas e, demais elementos que
constituem fonte de calor no interior das cmaras.
Os equipamentos mecnicos so normalmente, os ventiladores dos UNIT
COOLERS cuja potncia da ordem de 0,5 a 1 c.v. por cada T.R bombas,
empilhadeiras, etc.
O calor dissipado pelos mesmos pode ser calculado como segue,
dependendo da situao:
Motor e carga no interior da cmara;

Qmotor =

Pc.v
632
motor

kcal / dia

em que:
o nmero de horas de funcionamento por dia de equipamento;
motor o rendimento do motor eltrico de acionamento.

A dissipao provocada pela iluminao dada por;


21

Qilu min ao = 0,86w A

kcal / dia

em que ;
W a potencia da lmpada (W/m2)
o nmero de horas de funcionamento por dia de equipamento;
A a rea da cmara.

As pessoas por sua vez liberam pelo seu metabolismo, uma quantidade de
calor que nos dada por:

Qpessoas = n q

kcal / dia

em que:
"n" o nmero de pessoas;

"q" o calor liberado por pessoa e por hora, o qual cresce com o
abaixamento de temperatura.

Prtica !
Voc deve ter percebido que as informaes necessrias para o clculo de
carga trmica devido a fatores diversos leva em considerao a quantidade
de pessoas, mquinas e lmpadas no interior da cmara. Que tal
construirmos um programa em SCILAB para realizar estes clculos? Para
isto leia com ateno o enunciado a seguir.
Elabore um programa para calcular a carga trmica de uma cmara frigorifica
com as seguintes caractersticas:

rea da cmara 200 m2.

Para realizar o transporte de carga dentro da cmara sero


necessrios 10 homens/hora por 24 horas. (Utilize como 300 kcal/hora
o calor liberado por pessoa)
22

Uma empilhadeira ser utilizada 2 horas por dia. Ela possui um motor
com potncia de 10 c.v. e eficincia 0,85.

No interior da cmara teremos lmpadas fluorescente especial para


baixas temperaturas na proporo de 10 W/m2 (acendimento 4
horas/dia).

Sero previstas tambm lmpadas germicidas na proporo de 2


W/m2 (acendimento 24 horas).

Utilize a sada a seguir como forma de conferir os seus resultados!


Aps desenvolver o seu programa e verificar o funcionamento, realize
pequenas simulaes variando a quantidade de pessoas, empilhadeiras ou
lmpadas. Veja dentre estes trs fatores qual o responsvel por dissipar
maior quantidade de calor dentro da cmara1.

Figura 11 Soluo, projeto cmara de resfriamento.

Toda a formulao para o clculo de carga trmica foi adaptada de COSTA,

ENNIO CRUZ da. Refrigerao. Editora Edgard Blucher, 3 edio, 2011.


23

2. ESTRUTURA CONDICIONAL
A estrutura condicional permite que o programa usufrua de um mecanismo de
seleo e um conjunto de instrues em um processo qualquer.

O comando if else.
Na indstria de um modo geral, ambientes com temperatura e umidade
relativa controlados so necessrios para a manuteno da qualidade de
processos de fabricao e armazenamento.
Na indstria de refratrios especificamente, a manuteno da umidade
relativa em baixos teores faz-se necessria no processo de composio de
moldes, tendo em vista que altas umidades relativas no ambiente podem
ocasionar danos significativos no processo de produo (lembre-se do saleiro
na sua casa em semanas chuvosas). Portanto, a direo da fbrica solicitou
ao engenheiro responsvel que desenvolvesse uma lgica de controle de
umidade relativa no ambiente de composio de moldes da fbrica. Para que
os moldes atendessem aos padres de qualidade da fbrica era necessrio
que a umidade relativa ambiente fosse mantida abaixo de 40%. Caso
contrrio uma mensagem de alerta deveria ser exibida.
O engenheiro responsvel desenvolveu um programa em SCILAB que
recebia como entrada o valor da umidade relativa no ambiente e exibia uma
mensagem de alerta caso ela estivesse fora dos padres de qualidade da
fbrica.

Veja o cdigo no exemplo 2.1 a seguir:

24

clear;

clc;

mprintf("------------Software para controle de umidade relativa---- ");

umidade=input(" Digite a umidade relativa atual em decimal : ");

if (umidade<=0.4) then

6
7

mprintf("\n Umidade relativa dentro dos padres");


else

mprintf("\n -----ALERTA !!! ------ALERTA !!!! -------");

mprintf("\n UMIDADE RELATIVA FORA DOS PADRES !!!");

10

end

11

mprintf("\n Fim de programa");

Linha 1: O comando clear limpa a memria do sistema.


Linha 2: O comando clc limpa a janela de sada do SCILAB.
Linha 3: Mostra mensagem na tela por meio do comando mprintf().
Linha 4: A funo input() solicita o valor da umidade relativa e armazena o
valor na varivel umidade .
Linhas 5 e 6: Verifica se a varivel umidade possui um valor armazenado
menor ou igual a 0.4. Quando esta condio for verdadeira a mensagem
mostrada.
Linhas 7 a 10: Caso a condio imposta na linha 5 seja falsa as mensagens
de alerta so mostradas na tela.

Estrutura condicional - if-elseif-else


Um exemplo prtico da utilizao deste comando pode ser encontrado no
menu ajuda do SCILAB. Veja um trecho de cdigo disponibilizado:
Imagine um copo de isopor com um buraco no fundo. Se voc, em seguida,
derramar mel no copo voc vai achar que o copo drena muito lentamente.
Isso porque a viscosidade do mel grande em comparao com
viscosidades de outros lquidos. Se eu encher o mesmo copo com gua, por
exemplo, o copo ir drenar mais rapidamente.

25

A viscosidade descreve a frico interna de um fluido em movimento. Um


fluido com grande viscosidade resiste ao movimento. Um fluido com baixa
viscosidade flui facilmente.
A viscosidade uma propriedade dos fluidos que tambm varia em funo da
temperatura com ilustra a tabela a seguir:
Tabela 6 Variao da viscosidade com a temperatura.

Temperatura (oF)

Viscosidade (lb/ft/hr)

0 Temperatura 49

242

50 Temperatura 99

82,1

100 Temperatura 149

30,5

150 Temperatura 199

12,6

Temperatura 200

5,7

Diante das informaes sobre a viscosidade dos fluidos, desenvolva um


programa em SCILAB que receba como entrada a temperatura do fluido e
mostre na sada a sua viscosidade. Veja o exemplo 2.2 a seguir.
1

clear;

clc;

mprintf("------------Clculo da viscosidade de um fluido----------------");

4 temperatura=input(" Digite a temperatura do fluido em graus fahrenheit (F) 5: ");


5

if (temperatura<=49) then

6
7

mprintf("\n Viscosidade do fluido = 242 (lb/ft/hr) ");


elseif(temperatura>=50 & temperatura<100) then

8
9

mprintf("\n Viscosidade do fluido = 82.1 (lb/ft/hr) ");


elseif(temperatura>=100 & temperatura<150) then

10
11

mprintf("\n Viscosidade do fluido = 30.5 (lb/ft/hr) ");


elseif(temperatura>=150 & temperatura<200) then

12
13

mprintf("\n Viscosidade do fluido = 12.6 (lb/ft/hr) ");


else

14
15

mprintf("\n Viscosidade do fluido = 5.7 (lb/ft/hr) ");


end
26

linhas 7, 9, 11: Por meio do comando elseif() as condies de temperatura


do fluido so verificadas. Repare que o operador lgico & foi necessrio para
esta verificao.

Figura 12 Tela de sada para exemplo de clculo de viscosidade

Exerccios estrutura condicional:


Exerccio 1: Desenvolva um programa em SCILAB que receba como entrada
a temperatura do fluido e mostre na sada a viscosidade do fluido. Utilize a
tabela mostrada no exemplo 2 desta unidade. Voc dever fazer a leitura da
temperatura do fluido em graus Celsius na entrada (oC ).
Dica: Tenha cuidado com as unidades. Observe que a tabela que voc vai
utilizar est em graus Fahrenheit (oF) mas voc dever fazer a entrada em
graus Celsius (oC).
Exerccio 2: Desenvolva um programa em SCILAB que recebe como entrada
um valor de temperatura em graus Celsius (oC) e retorne como sada a fase
que se encontraria a gua nesta temperatura (slido, lquido ou gasoso).
Exerccio 4: O nmero de Reynolds pode ser utilizado para caracterizar
diferentes regimes de escoamento, tais como laminar, transio ou
turbulento. O escoamento laminar ocorre para baixos nmeros de Reynolds
( Re 2100 ), onde as foras viscosas so dominantes, e caracterizado por
suave movimento do fluido. O fluxo turbulento ocorre em um elevado nmero
de Reynolds ( Re > 4000 ) e dominado por foras de inrcia, que tendem a
produzir redemoinhos aleatrios, vrtices e instabilidades. Para valores entre
2100 e 4000, classificamos o escoamento como escoamento em transio.

27

Diante das informaes sobre o nmero de Reynolds desenvolva um


programa em SCILAB que classifique um escoamento dado o nmero de
Reynolds.
Exerccio 5: Implemente um algoritmo em SCILAB que retorne o valor da
funo abaixo aps receber um valor qualquer de entrada.

x < 2
2 x + 2,

f (x ) = 3,
2 x < 3
x,
3 x

Exerccio 6: Vamos recordar o problema proposto no exerccio 3 da


unidade1.
Suponha que uma bola de massa qualquer seja arremessada para cima
numa velocidade

v0 .

Qual a velocidade

v(t) e sua altura acima do

lanamento h(t) no instante t? A resposta, se desprezamos a resistncia do


ar e um conjunto de outras pequenas influncias,

v(t) = v0 gt
gt 2
h(t) = v0 t
2
Onde

= 9,81 m/s2 a acelerao da gravidade na superfcie da terra.

O que aconteceria se jogssemos esta bola em outro planeta? Como


poderamos fazer este tipo de estudo?
Que tal implementarmos um menu de opes e deixarmos que o usurio
escolha o planeta em que esta bola ser jogada!?
Escrevamos um cdigo em SCILAB que permita que o usurio escolha um
planeta em que quer jogar a bola e solicita v0 e t e ento informa as
particularidades da bola (velocidade e altura). Aproveite o seu programa para
verificar qual a relao existente entre a gravidade, altura da bola e
velocidade da bola. Utilize a tabela a seguir para a sua implementao.

28

Tabela 7 Gravidade dos planetas do sistema solar.

Planeta

Gravidade (m/s2)

Mercrio

3,7

Vnus

8,8

Terra

9,8

Marte

3,8

Jpter

26,4

Saturno

11,5

Urano

9,3

Netuno

12,2

Pluto

0,6

Veja um exemplo do menu de opes !

Figura 13 Exemplo menu de opes.

Exerccio 7: Dado o grfico abaixo, testar se um valor T qualquer fornecido


pelo usurio, pertence ao intervalo T0 T T1. Dados T0 = 5, T1 = 10, V0 = 1,
V1 = 2. Interprete os pontos preenchidos no grfico como ponto vlido e os
pontos vazios como pontos invlidos.
29

PROJETO FINAL 2 : DESENVOLVIMENTO DE UM CONVERSOR DE


UNIDADES.

Caro aluno a seguir apresentaremos algumas informaes importantes


para o desenvolvimento do seu conversor de unidades.

Algumas relaes de converso de unidades:


Fora:

1 N = 0,102 kgf= 0,2249 lbf


1 N = 1 kg m / s2

Presso:

1Pa = 1 N / m2 = 0,102 kgf / m2 = 0,000145 lbf / pol2


1 atm = 101.325 Pa
1 bar = 105 Pa
1 lbf / pol2 = 1 psi (pounds per square inch)

Energia:

1 J = 0,0009478 BTU = 0,00023884 kcal


1 BTU = 252 cal

Potncia:
HP

1 W = 3,412 BTU / h = 0,85984 kcal / h = 0,001359 CV = 0,001341

30

Prtica!
hora de desenvolver o seu prprio conversor de unidades. Voc dever
utilizar as informaes fornecidas no texto sobre converso de unidades. O
seu conversor dever ter um menu inicial com as seguintes opes
Temperatura
Fora
Presso
Energia
Potncia
O usurio dever escolher qual o tipo de unidade ele quer realizar a
converso. Aps o usurio realizar a escolha, ele dever escolher em
qual unidade o valor a ser convertido vai ser digitado.

Exemplo:

Caso o usurio escolha converter temperaturas ele vai selecionar a


opo referente temperatura no menu;

Aps ter selecionado temperatura ele dever escolher em qual


unidade de temperatura ser feita a entrada; Celsius, Kelvin ou
Fahrenheit.

Como sada o programa dever ento mostrar a temperatura digitada


pelo usurio em todas as trs unidades de temperatura.

31

Veja como exemplo a tela de sada aps utilizar o conversor

Figura 14 Exemplo de sada para o programa conversor de unidades

32

3. ESTRUTURAS DE REPETIO
O comando for
O comando for repete um conjunto de instrues a partir de um nmero
conhecido de repeties. Este comando segue o seguinte formato:

for varivel = incio : incremento : fim


Bloco de comandos
end

Exemplo
Em um exerccio do roteiro anterior analisamos a importncia do termo
gravidade (g), no modelo proposto;

v(t) = v0 gt
h(t) = v0 t gt 2 / 2
Analisaremos agora, qual o comportamento da velocidade e da altura diante
da variao do tempo. Perceba que tanto a velocidade v(t) , quanto a altura

h(t) , so em funo do tempo. Este tipo de anlise semelhante a


questionarmos; o que acontecer com a velocidade e altura da bola no
intervalo de tempo de 0 a 2 segundos? Mostre o comportamento a cada 0,5
segundos. Utilize como v0 = 15 (m/s).
Se voc fosse fazer esta anlise no seu caderno voc seria orientado pelo
seu professor de clculo a desenvolver o seguinte raciocnio:

33

Tabela 8 Exemplo de clculo manual.

T (s)

v(t) - (m/s)

h(t) (m)

15

0.5

10,095

6,274

5,190

10,095

1.5

0,285

11,464

-4.620

10,380

Este tipo de tratamento (manual), s vivel quando o nmero de repeties


pequeno. Imagine se precisarmos de observar o comportamento das
variveis diante de um nmero grande de repeties ? Veja o exemplo a
seguir !
O que acontecer com a velocidade e altura da bola no intervalo de tempo de
0 a 2 segundos? Mostre o comportamento a cada 0,1 segundos. Utilize como
v0 = 15 (m/s). Desenvolva um programa em SCILAB que mostre o resultado
da velocidade e da altura da bola para cada iterao. (exemplo 3.1)
1

clear;

clc;

g=9.81;

mprintf("Simulao do arremeo de uma bola no planeta terra \n\n");

v0 = input(" Digite a velocidade inicial do arremeo (m/s) : ");

mprintf("\n t (s) h(t) (m)

for t=0:0.1:2

altura= v0*t - (g*(t^2))/2;

velocidade = v0 - g*t;

10

mprintf("\n %2.2f

11

mprintf("\n");

12

v(t) (m/s)")

%2.2f

%2.2f ",t,altura,velocidade);

end

34

linha 7 Observe a estrutura do comando for. A varivel t a varivel de


controle. Ela foi inicializada com o valor 0, ser incrementada a cada 0,1
segundos at que t alcance o valor de 2 segundos.
linhas 8 a 11 Estas linhas constituem o bloco de comandos que ser
executado a cada iterao. Portanto a cada iterao os clculos so
efetuados nas linhas 8 e 9 e mostrados nas linhas 10 e 11.
Veja a sada dos resultados a seguir:

Figura 15 Tabela de soluo utilizando comando for

Como voc pode perceber, de maneira rpida e segura os clculos foram


efetuados e a simulao nos permite visualizar alguns resultados
interessantes.
A primeira observao que os resultados acima nos permitem fazer que as
equaes conseguem descrever o movimento de subida e decida da bola.
Veja os valores de altura durante a simulao. Do tempo 0 ao tempo 1,5 a
bola vai ganhando altura, at que no tempo = 1,5 segundos ela atinge a sua
altura mxima ! Aps 1,5 segundos a bola ento comea a perder altura.
De maneira semelhante a mesma anlise pode ser feita quanto a velocidade
da bola. Veja que no tempo 0 a bola sai com a velocidade mxima, a
35

velocidade v0 (15 m/s). A partir do tempo zero a velocidade vai diminuindo


at chegar ao tempo 1,5 segundos em que a sua velocidade igual a 0,29
(m/s) . A partir do tempo igual a 1,5 segundos a bola volta a ganhar
velocidade, desta vez com sinal negativo, ela est agora em uma trajetria
descendente, caindo !

Exemplo 2 : Somatrios
O uso de somatrios abrange diversas reas do conhecimento. Possui
aplicaes variadas em estatstica, cincia da computao, engenharias,
matemtica, fsica, qumica, etc.
Observe a tabela a seguir.
Tabela 9 Representao matemtica e em SCILAB para um somatrio

S = i

for i:1:n

i=0

s = s+i;
end

A tabela acima apresenta um paralelo entre a representao matemtica de


um somatrio e a sua implementao em SCILAB. Veja a seguir um exemplo
da implementao desta estrutura.
A temperatura ambiente de uma regio pode ser obtida a partir de um ajuste
de dados experimentais por uma srie de Fourier. A equao a seguir foi
obtida a partir dos dados experimentais de temperatura da cidade de Belo
Horizonte no ms de agosto de 2013.

T (t) = 19, 06 + 0, 211cos ( 0, 08721 t ) +[5.51sen(0, 08721 t)]


em que:

36

T = Temperatura ambiente ( oC );
t = tempo em horas.
Utilizando o modelo proposto para estimar a temperatura a partir da hora
fornecida desenvolva um programa em SCILAB que calcule a temperatura
mdia do ms de agosto. (Exemplo 3.2)
1
2
3
4
5
6
7
8
9
10

clear;
clc;
mprintf("Clculo da temperatura mdia no ms de agosto - 2013 \n\n");
soma = 0;
for t=0:720
temperatura = 19.06 + (0.211*cos(0.08721*t)) + (-5.51*sin(0.08721*t))
soma = soma + temperatura;
end
media = soma/720;
mprintf("\n A temperatura mdia do ms de agosto-2013 em BH foi de
%2.2f (C) ",media);

linha 4 Inicializa a varivel soma.


linha 5 A varivel t a varivel de controle. Ela foi inicializada com o valor 0,
ser incrementada a cada 1 hora at que t alcance o valor de 720 horas.
Perceba que quando o incremento for feito de 1 em 1 no necessrio
ajustar o incremento. Lembre-se t final foi ajustado como 720 horas, afinal em
um ms temos 30 dias de 24 horas.
linha 6 A varivel temperatura guarda o resultado da temperatura calculada
para a hora t.
linha 7 Nesta linha temos a implementao do somatrio. Em diversos livros
de algoritmos voc ir encontrar esta estrutura tambm chamada de
acumulador.
linha 9 A mdia calculada por meio da diviso do somatrio das
temperaturas pela quantidade de amostras.
linha 10 Mostra a mdia calculada.

37

Figura 16 Tela de sada aps processamento da mdia.


O Comando While
O comando while ou (enquanto em pseudocdigo) um comando de
repetio indicado para situaes em que no se conhece o nmero de
repeties a serem realizadas. Sua sintaxe em SCILAB a seguinte:
while (condio)
Bloco de comandos
end
Veja um exemplo de aplicao.
Nas indstrias qumica, agrcola e de alimentos muito comum o uso de
equaes empricas para estimar a secagem de diversos produtos. Estas
equaes so vlidas para determinadas faixas de temperaturas e umidades
relativas. O objetivo destas equaes estimar aps um determinado tempo
de secagem qual o teor de umidade do produto. Estas equaes possuem
formas diversificadas, uma das formas mais utilizadas conhecida pelo
seguinte formato:

U(t) = ekt

em que :
U(t) o teor de gua do produto,
t o tempo de secagem em horas,
k e n so parmetros que dependem do produto;

38

Um engenheiro qumico gostaria de conhecer o comportamento da secagem

de um determinado produto e decidiu elaborar um programa em SCILAB que


faa a simulao da secagem de um produto enquanto o teor de gua do
mesmo seja maior ou igual a 0,13. Mostre na tela a cada hora o valor do teor
de gua do produto. Utilize para a implementao os valores de 0,365 para k
e 0,663 para n. (Exemplo 3.3)
1
2
3
4
5
6
7
8

clear;
clc;
k=0.365;
n=0.663;
t=0;
teor_umidade=1;
mprintf("-------Simulao de secagem--------- \n\n");
mprintf("\n\t\t t(h)\t\t U(%%) ");

9
10
11
12

while(teor_umidade>=0.13)
teor_umidade= exp(-k*(t^n));
mprintf("\n\t\t %2.3f\t\t %2.2f ",t,teor_umidade*100);
t=t+1;

13

end

linhas 3 a 5 Inicializao das variveis.


linha 6 A varivel teor de umidade foi inicializada em 1 (equivalente a 100%).
Basta voc ver que para o tempo igual a zero a equao vale 1. Perceba a
importncia desta inicializao, esta inicializao que permite o programa
executar as instrues no bloco de comandos do comando while. Em outras
palavras esta inicializao torna a condio no comando while verdadeira e
assim permite a repetio do bloco de comandos.
Linhas 9 a 12 Bloco de comandos pertencente ao comando while. O teor de
umidade calculado, mostrado na tela e o tempo incrementado. Na linha 12
surge uma estrutura conhecida por muitos autores como contador. O
2

Informao o estudo da cintica de secagem de gros e alimentos de

extrema importncia para a manuteno da qualidade do produto e para o


projeto de secadores.

39

contador incrementado em 1 toda vez que um clculo efetuado e logo


aps mostrado na tela.
Veja a sada da simulao feita em SCILAB

Figura 17 Tela de sada para simulao de secagem.

Observe que a tabela de resultados mostrada na sada indica que, para o


produto simulado secar at 13% de umidade, precisaramos de 15 horas de
secagem.
Ser que voc saberia explicar, por que o ltimo resultado t = 15 horas
e U = 12,25% apareceu na lista de resultados ??? Este resultado deveria
ter aparecido ???

importante lembrar que o modelo proposto para a simulao da secagem

neste material est em uma forma extremamente simplificada. A simulao


de secagem em modelos complexos pode envolver programas com diversas
variveis e funes, podendo levar at dias para se obter os resultados
simulados.

40

Exerccios Laos de Repetio


Exerccio 1
Desenvolva um programa em SCILAB que calcule a exponenciao entre
dois nmeros x e y escolhidos pelo usurio (xy). Para realizar os clculos
voc no poder utilizar o comando (^).
Dica: A operao 53 deve ser feita da seguinte maneira: 5 x 5 x 5 = 125. A
operao de multiplicao foi repetida 3 vezes. Quais sero as entradas
deste programa ? Qual comando de repetio utilizar ?
Exerccio 2
Desenvolva um programa em SCILAB que receba como entrada o valor de
potncia em Watt (W) e converta este valor para BTU/h. Mostre na tela o
resultado da converso e em seguida pergunte ao usurio se ele deseja
realizar uma nova converso. O usurio dever digitar 0 (zero) para terminar
o programa. Veja na figura a seguir um exemplo de sada para este
programa.

Figura 18 Sada para converso de potncia

Exerccio 3
Devido ao uso frequente, a descarga da bateria de equipamentos eletrnicos
pode se comportar de acordo com a funo proposta a seguir;

y(t) = y0 2(

0,1)t

em que;
y0 a carga inicial da bateria;
y(t) a quantidade de carga aps t horas de uso.
41

a) Desenvolva um programa em SCILAB, que tenha como entrada a


carga inicial da bateria e mostre como sada a carga da bateria a cada
hora enquanto a carga fique maior ou igual a 1%.
b) Acrescente ao programa feito na letra a) um sistema de aviso que
obedea a seguinte tabela:
Carga (%)

Aviso

10% < carga 20%

Bateria fraca !

1% carga 10%

Conecte ao carregador

Dica: Procure identificar qual lao de repetio utilizar. Existe algum critrio
de parada ?
Veja um exemplo de sada para o exemplo 1

Figura 19 Exemplo de sada para o exerccio 1 - descarga de bateria

42

Exerccio 4 Vimos no exemplo que ilustra a utilizao de somatrios que a


temperatura ambiente de uma regio pode ser obtida a partir de um ajuste de
dados experimentais por uma srie de Fourier. A funo a seguir foi obtida a
partir dos dados experimentais de temperatura da cidade de Belo Horizonte
no ms de agosto de 2013.

T (t) = 19, 06 + 0, 211cos ( 0, 08721 t ) +[5.51sen(0, 08721 t)]


em que:
T = Temperatura ambiente ( oC );
t = tempo em horas.
Utilizando o modelo proposto para estimar a temperatura a partir da hora
fornecida desenvolva um programa em SCILAB que calcule e mostre as
seguintes informaes sobre a temperatura em Belo Horizonte nas primeiras
48 horas de agosto:
a) A temperatura mdia do dia
b) A maior temperatura registrada no dia
c) A menor temperatura registrada no dia
d) Quantas horas a temperatura ficou acima de 19 oC.
e) Quantas horas a temperatura ficou abaixo de 16 oC.

43

4. Vetores e grficos
Um vetor um tipo de varivel que pode armazenar um ou mais valores do
mesmo tipo de dado.
Vejamos como isto funciona na prtica. Imagine que voc precisa armazenar
os valores 15, 23, 40, 12, 37. At ento voc faria o seguinte raciocnio para
armazenar estes valores:

clear;
clc;
num1=15;
num2=23;
num3=40;
num4=12;
num5=37;
mprintf("\n Valor armazenado na varivel num1 = %i",num1);
mprintf("\n Valor armazenado na varivel num2 = %i",num2);
mprintf("\n Valor armazenado na varivel num3 = %i",num3);
mprintf("\n Valor armazenado na varivel num4 = %i",num4);
mprintf("\n Valor armazenado na varivel num5 = %i",num5);
Perceba que at ento no havia outra alternativa para voc armazenar estes
5 valores a no ser criando 5 variveis distintas para guardar o mesmo tipo
de valor. Perceba tambm que para mostrar os 5 valores na sada voc
precisaria de novas 5 linhas de comando para mostrar os 5 valores distintos
na sada do programa. Veja a sada aps a execuo do cdigo acima.

Figura 20 Exemplo de sada para diferentes variveis.

Este tipo de abordagem torna-se invivel na medida em que a quantidade de


dados a serem armazenados aumenta. Imagine se voc precisar armazenar
centenas ou milhes de dados do mesmo tipo ? (Isto ocorre com frequncia
na engenharia) O que voc faria ? Criar centenas ou milhes de variveis
44

para armazenar cada valor ser invivel. Nesta situao, a utilizao de um


vetor a sada mais indicada.
Que tal ento tentarmos armazenar os nossos 5 valores do exemplo
apresentado anteriormente em um vetor ? Deixe-me te mostrar como isto
ser feito. Observe o exemplo a seguir: (Exemplo 4.1)

1 clear;
2 clc;
3 num=[15 23 40 12 37];
4 for i=1:5
5

mprintf("\n O valor %i esta armazenado na posio %i do vetor num",num(i),i);

6 end
Vamos comear pela linha 3 do cdigo acima. Na linha 3 os nossos 5 valores
foram guardados em uma nica varivel chamada num. Isto um vetor ! Veja
a ilustrao abaixo:
num

15

23

40

12

37

A varivel num comporta-se como a ilustrao acima. Cada um dos 5 valores


ganhou um espao na varivel num e cada espao possui um ndice
responsvel por identificar em qual posio do vetor o valor foi armazenado.
Portanto o valor 15 est armazenado na posio 1; o valor 23 est
armazenado na posio 2; o valor 40 est armazenado na posio 3 ; o valor
12 est armazenado na posio 4 e o valor 37 est armazenado na posio
5.
Para compreender melhor esta associao entre posies e valores observe
as linhas 4 a 6 do cdigo acima. Para fazer a sada dos valores do vetor
num, utilizamos uma estrutura de repetio. A estrutura definida na linha 4
utiliza a varivel i como controle. Aproveitaremos ento a varivel i para
percorrer todo o vetor, executando o comando de sada, mostrando na tela o
valor armazenado ! num(i) para cada posio ! i como mostra a figura a
seguir.

45

Figura 21 Exemplo de sada de valores de um vetor

Inserindo valores em um vetor


A insero de valores em um vetor pode ser feita de diferentes maneiras. A
seguir apresentaremos as mais usuais.

Insero direta
num = [ 5 10 12 32 45 48 23 64 ... ];

Insero por meio de um usurio


for i=1:5
mprintf("Digite um valor para a posio %i do vetor",i);
num(i)=input("");
end

Mostrando os valores de um vetor (Sada de dados)


Sada direta
disp(num);

Sada por lao de repetio


for i=1:5
mprintf("\n O valor %i esta armazenado na posio %i ",vetor(i),i);
end

46

Construindo Grficos
Construindo grficos 2D
A construo de um grfico 2D em SCILAB pode ser feita por meio da funo
plot( ) . O forma bsica para o comando ;
plot(x,y)
em que x um vetor que contm os valores para a coordenada-x do grfico e
y o vetor que contm os valores para a coordenada-y do grfico.
Exemplo: Plote o grfico da funo

f (x) = 3x 2 + 4x +1 . Faa x variar no

intervalo de -5 a 4 com incrementos de 0,5. Veja o cdigo em SCILAB a


seguir;
Opo 1: Na opo 1 o vetor x declarado de maneira direta. Repare que o
vetor y automaticamente criado pelo SCILAB.

Basta atribuir a y a

expresso da funo desejada e o SCILAB realiza o clculo de y para cada


posio do vetor x. Em seguida a funo plot ( ) e os vetores x e y foram
utilizados para fazer o grfico da funo.

clear;
clc;
x = [-5 -4.5 -4 -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 4];
y = 3*x^2 + 4*x + 1;
plot(x,y);
Opo 2: A opo 2 apenas se difere da opo 1 quanto a criao do vetor x.
O vetor x foi criado a partir da funo linspace(valor 1, valor2 ,

valor 3 ). A funo linspace() funciona da seguinte maneira: o


primeiro valor dentro do parnteses representa o valor inicial do vetor a ser
criado, o segundo valor representa o fim do intervalo a ser criado e o ltimo
valor dentro do parnteses representa o nmero de elementos que sero
criados para este vetor.

clear;
clc;
x = linspace(-5,4,19);
y = 3*x^2 + 4*x + 1;
plot(x,y);
47

Opo 3. A opo 3 apresenta uma estrutura de criao dos vetores por


meio de laos de repetio. Os vetores x e y vo sendo criados na medida
em que as iteraes, ou repeties, vo acontecendo. Perceba que o
contador i a cada iterao utilizado para calcular um novo valor de x e um
novo valor de y para a posio i.

clear;
clc;
i=1;
x(1)=-5;
y(1)=3*x(1)^2 + 4*x(1) + 1;
while x(i)<4
i=i+1;
x(i)=x(i-1)+0.5;
y(i)= 3*x(i)^2 + 4*x(i) + 1;
end
plot(x,y);
O grfico a seguir

foi gerado para a funo proposta no exemplo.

Independente da opo escolhida pelo usurio para criar grfico da funo


proposta o resultado esperado o apresentado a seguir.

Figura 22 Janela de sada grfica.

48

Ajustando Ttulos e eixos


O SCILAB permite que faamos ajustes nos ttulos e eixos dos grficos. Veja
as opes disponveis:
title() Ajusta o ttulo na parte superior do grfico.
xlabel() Ajusta o ttulo para o eixo x.
ylabel() Ajusta o ttulo do eixo y.
Veja o cdigo e a nova figura aps a incluso dos comandos de formatao
de eixos e ttulos.

clear;
clc;
i=1;
x(1)=-5;
y(1)=3*x(1)^2 + 4*x(1) + 1;
while x(i)<=4
i=i+1;
x(i)=x(i-1)+0.5;
y(i)= 3*x(i)^2 + 4*x(i) + 1;
end
plot(x,y);
title("Grfico de f(x)= 3*x^2 + 4*x + 1");
xlabel("Eixo x");
ylabel("Eixo y");

49

Figura 23 Novo grfico aps formatao de ttulo e eixos.

DICA: Ajuda sobre diferentes estilos de linhas, cores e formataes


podem ser encontrados no menu ajuda ou clicando no menu editar aps
aparecer a janela do grfico. A figura a seguir ilustra o menu editar.

50

Figura 24 Opes de configurao de grfico

Figura 25 Editor de grfico.

51

Dica: para plotar um grfico com vrias curvas, siga o exemplo a


seguir:
Como plotar um grfico da funo f (x) = ax + b para diferentes
valores de a = ( 1, 3, 5, 7) e b = 1, no intervalo 0 x 10? Estude o
cdigo a seguir !
clear;
clc;
i=1;
b=1;
x(1)=0;
y1(1)=1*x + b;
y2(1)=3*x + b;
y3(1)=5*x + b;
y4(1)=7*x + b;
incremento=0.1;
while x(i)<10
i=i+1;
x(i)=x(i-1)+incremento;
y1(i)=1*x(i) + b;
y2(i)=3*x(i) + b;
y3(i)=5*x(i) + b;
y4(i)=7*x(i) + b;
end
plot(x,[y1 y2 y3]);
title("Grfico de f(x)= a*x^2 + b");
xlabel("X");
ylabel("Y");

Figura 26 Exemplo de grfico com mltiplos comportamentos.

52

Exemplo de aplicao: (exemplo 4.2)


Um engenheiro decidiu acompanhar o funcionamento do secador de gros
representado pela figura abaixo.

Figura 27 Secador de gros.

Para realizar esta inspeo, o engenheiro instalou um sensor de temperatura


na cmara de aquecimento de ar e um tubo de pitot para medir a velocidade
do ar na entrada da cmara de aquecimento. Para coletar as informaes de
temperatura e velocidade do ar durante s dez horas de funcionamento o
engenheiro desenvolveu um programa em SCILAB que fosse capaz de
coletar estas informaes a cada 0,5horas (meia hora) e mostrar:
a temperatura mdia na cmara de secagem;
a velocidade mdia do ar de secagem;
A maior temperatura e velocidade registradas durante as 10 horas;
A menor temperatura e velocidade do ar registradas durante as 10
horas;
Os grficos mostrando o comportamento da temperatura e velocidade
do ar durante as 10 horas.
Veja o cdigo fonte comentado e os resultados a seguir.
53

1 clear;
2 clc;
3 tempo(1)=0;
4 temperatura(1)=grand(1,"nor",70,5);
5 velocidade(1)=grand(1,"nor",1.5,0.1);
6 i=1;
7 while tempo(i)<10
8
i=i+1;
9
tempo(i)=tempo(i-1)+0.5;
10 temperatura(i)=grand(1,"nor",70,2.5);
11 velocidade(i)=grand(1,"nor",1.5,0.05);
12 end
13 scf(1);
14 title("Variao da velocidade durante 10 horas");
15 xlabel("Tempo (h)");
16 ylabel("Velocidade (m/s)");
17 plot(tempo,velocidade,'bo-');
18 scf(2);
19 title("Variao da Temperatura durante 10 horas");
20 xlabel("Tempo (h)");
21 ylabel("Temperatura (Celsius)");
22 plot(tempo,temperatura,'r-');
23 temperatura_media=mean(temperatura);
24 velocidade_media=mean(velocidade);
25 maior_temperatura=max(temperatura);
26 menor_temperatura=min(temperatura);
27 maior_velocidade=max(velocidade);
28 menor_velocidade=min(velocidade);
29 mprintf("\n ------Relatorio de experimento------------");
30 mprintf("\n A temperatura media durante as dez horas foi de %2.2f
31Celsius",temperatura_media);
32 mprintf("\n A velocidade media durante as dez horas foi de %2.2f
m/s",velocidade_media);
33 mprintf("\n A maior temperatura atingida durante as dez horas foi de %2.2f
Celsius", maior_temperatura);
34 mprintf("\n A menor temperatura atingida durante as dez horas foi de %2.2f
Celsius",menor_temperatura);
35 mprintf("\n A maior velocidade atingida durante as dez horas foi de %2.2f m/s",
maior_velocidade);
36 mprintf("\n A menor velocidade atingida durante as dez horas foi de %2.2f
m/s",menor_velocidade);

54

linhas 3 a 6 Observe que nestas linhas os vetores temperatura, tempo e velocidade so


inicializados na sua primeira posio (posio 1) com os valores de tempo inicial.
linhas 7 a 12 Nesta parte do cdigo feita a simulao da aquisio de dados a cada
tempo. Para isto foi utilizado o comando grand(1, distribuio normal, media, desvio
padro) , este comando gera nmeros aleatrios obedecendo uma distribuio normal,
uma mdia e um desvio padro pr definidos. Para cada tempo simulado valores de
temperatura e velocidade so gerados e armazenados em seus respectivos vetores. A
varivel i incrementada a cada iterao at que o critrio de parada (tempo<10) for
alcanado.
linhas 13 a 22. Nesta parte do cdigo so executados os comandos para a gerao dos
grficos (plot), ttulos das figuras (title) e ttulo das eixos (xlabel e ylabel). Os
comandos scf( ) do nome s janelas de grficos, identificando-os e permitindo criar
figuras distintas uma das outras.
linhas 23 a 28 Neste trecho foram calculadas as mdias atravs do comando mean( ),
os maiores e menores valores dos vetores, por meio dos comandos max( ) para o
maior valor e min( ) para o menor valor.
Sadas

Figura 28 Tela de sada em SCILAB para exemplo1 vetor.

55

Figura 29 Variao da velocidade do ar de secagem.

Figura 30 Variao da temperatura de secagem na cmara de secagem

56

Exerccios - Vetor
Exerccio 1 Faa um programa em SCILAB que solicite ao usurio a
digitao de 10 nmeros distintos. Armazene estes valores em um vetor. A
sada do seu programa dever mostrar ao usurio o valor digitado e as
posies em que estes valores foram armazenados no vetor.
Exerccio 2

Faa um programa em SCILAB para gerar o grfico das

seguintes funes, obedecendo os intervalos propostos. Voc saberia


interpret-los ?
a) seno(x); - x ;
b) cosseno(x); - x ;
c) ln(x); 0,001 x 10
d) ex; 0 x 10
e) f (x) = 1x 2 + 2x +1 ; qual intervalo utilizar ? Existe algum critrio para
escolher o intervalo ?

f)

$ t +1 0 t < 1
&
& 0 1 t < 2
f (t) = %
& 2t 2 t <3
&
0 t 3
'

(
&
&
)
&
&
*

Exerccio 3 Utilize o cdigo do programa em SCILAB desenvolvido no


exemplo de aplicao (secador de gros) e calcule novamente a temperatura
mdia, a velocidade mdia, a maior temperatura, a menor temperatura, e
maior velocidade e a menor velocidade. Desta vez voc no poder utilizar
as funes mean( ), max( ) e min( ). Voc dever desenvolver toda a lgica
para efetuar os clculos. Voc poder utilizar as funes mean( ), max( ) e
min( ) apenas para comparar os seus resultados obtidos com os resultados
obtidos pelas funes.

57

PROJETO FINAL 3 : Simulao !


No instante t=0 (min) um tanque contm Q0 (lb) de sal dissolvido em 100 (gal)
(cerca de 455 litros). Suponha que gua contendo 1/4 (lb) (cerca de 113g de
sal por galo) est entrando no tanque a uma taxa de r gales por minuto, e
que o lquido, bem misturado, est saindo do tanque mesma taxa. O
fenmeno ilustrado pela figura abaixo.

Figura 31 Tanque de gua com misturador.

A funo a seguir expressa a quantidade de sal Q(t) no tanque em qualquer


estante t.

Q(t) = 25 + (Q0 25)er t/100


Desenvolva um programa em SCILAB que simule a quantidade de sal
presente no tanque durante 100 minutos.
a) Como sada voc dever mostrar a quantidade de sal presente no
tanque e o tempo de simulao a cada 10 minutos. Utilize Q0 = 50 lb e
r = 3.
b) Faa um grfico mostrando o comportamento da quantidade de sal no
tanque durante os 100 minutos. Utilize Q0 = 50 lb e r = 3.
c) Faa um nico grfico contendo 4 curvas com as seguintes condies:

Curva 1: Dever representar a quantidade de sal em 100 minutos


com r = 3 e Q0 = 50 lb.

58

Curva 2: Dever representar a quantidade de sal em 100 minutos


com r = 3 e Q0 = 40 lb.

Curva 3: Dever representar a quantidade de sal em 100 minutos


com r = 3 e Q0 = 25 lb.

Curva 4: Dever representar a quantidade de sal em 100 minutos


com r = 3 e Q0 = 10 lb.

Interprete o fenmeno ilustrado pelo grfico !

d) O que aconteceria se o valor da taxa de fluxo aumentasse para 5 aps


20 minutos de simulao ? Utilize como condio de simulao Q0 =
50 lb. Mostre o grfico da simulao e interprete-o.
e) Qual seria a taxa de fluxo necessria (r) para que o valor de t no
exceda 45 minutos para alcanar o equilbrio ? Utilize Q0 = 50 lb.
Dica: O sistema entra em equilbrio quando Q(t) = 25.

59

5. Matrizes
Uma matriz um tipo de varivel que pode armazenar um ou mais valores do
mesmo tipo de dado, porm este armazenamento pode estar associado a
duas propriedades distintas. Esta associao para muitos chamada de
dimenso. Em vetores, associvamos o armazenamento de informao a
apenas uma propriedade, uma dimenso. Por exemplo, associa-se que o
vetor idade armazena diferentes idades; o vetor temperatura armazena
diferentes temperaturas, o vetor velocidade diferentes valores de velocidade,
etc. Quando tratamos de matrizes associamos os valores da matriz a duas ou
mais propriedades ou duas ou mais dimenses.
Veja um exemplo: (Exemplo 5.1)
Um engenheiro resolveu montar um sistema de aquisio de dados para
coletar os dados de presso do gs refrigerante e temperatura do gs
refrigerante em um sistema de refrigerao. Para isto o engenheiro instalou
em diferentes pontos do sistema trs sensores de presso e temperatura. O
engenheiro desenvolveu um programa em SCILAB que durante cinco horas
coletava as informaes dos sensores e armazenava as informaes a cada
hora. Veja o cdigo desenvolvido pelo engenheiro;
clear;
clc;
for tempo=1:5
for sensor=1:3
temperatura(tempo,sensor)=grand(1,"nor",70,2.5); //simula os sensores de
temperatura
pressao(tempo,sensor)=grand(1,"nor",250000,10000); //simula os sensores de
velocidade
end
end
disp("Matriz Temperatura (C)");
disp(temperatura);
disp("Matriz Pressao (Pa)");
disp(pressao);
A lgica utilizada pelo engenheiro foi de armazenar em uma matriz chamada
temperatura os dados dos trs sensores a cada hora durante 5 horas.
Veja a disposio dos valores como ficaria em formato de matriz.
60

Tabela 10 Matriz Temperatura

Tempo (h)

Sensor de

Sensor de

Sensor de

Temperatura (1)

Temperatura (2)

Temperatura (3)

1hora
2horas
3horas
4horas
5horas

A matriz temperatura foi organizada da seguinte maneira: para cada hora


foram registradas trs temperaturas distintas, uma para cada sensor.
Portanto a nossa matriz de duas dimenses (tempo,sensor) uma matriz
5x3 (5 linhas e 3 colunas). O mesmo raciocnio foi aplicado ao sensor de
presso.
Veja a sada aps executarmos o programa em SCILAB;

Figura 32 Sada das matrizes temperatura e presso

Inserindo valores em uma matriz


A insero de valores em uma matriz pode ser feita de diferentes maneiras. A
seguir apresentaremos as mais usuais.

61

Insero direta
Inicializando de maneira direta uma matriz 3 x 3.

matriz = [ 5 2 7; 1 0 -3; 3 10 -9];


Observe que o ; foi utilizado para distinguir uma linha de outra da
matriz.

Insero por meio de um usurio


Inicializando por meio de um usurio uma matriz 3 x 3.
for i=1:3
for j=1:3
mprintf("\n Digite um valor para a matriz na posicao linha %i coluna %i ",i,j);
matriz(i,j)=input(" ");
end
end

Mostrando os valores de uma matriz (Sada de dados)


Sada direta
disp(matriz);

Sada por lao de repetio


for i=1:3
for j=1:3
mprintf("\n Valor digitado para a matriz na posicao linha %i coluna %i =
%i",i,j,matriz(i,j));
end
end

62

Exemplo 5.2 Desenvolva em SCILAB um programa que permita ao usurio


preencher 2 matrizes quadradas A e B. Aps preencher as matrizes A e B o
usurio dever escolher de acordo com as opes abaixo, qual tipo de
operao ir realizar com as matrizes A e B para gerar uma matriz C com a
resposta da operao selecionada. Veja as opes:
1) Adio
2) Subtrao
3) Multiplicao elemento por elemento
4) Multiplicao de matrizes
5) Diviso elemento por elemento
Soluo
1 clc
2 clear
3 dimensao = input ('Informe a dimenso das duas matrizes quadradas: ');
4 mprintf("Para a matriz A ");
5 mprintf("\n\n");
6 for linha = 1:dimensao
7 for coluna = 1:dimensao
8
mprintf ("Elemento da matriz A posio A(%i,%i): ",linha,coluna);
9
A(linha,coluna) = input ("");
10 end
11 end
12 mprintf("Para a matriz B.");
13 for linha = 1:dimensao
14 for coluna = 1:dimensao
15
mprintf ("Elemento da matriz B posio B(%i,%i): ",linha,coluna);
16
B(linha,coluna) = input (" ");
17 end
18 end
19
20 mprintf("\n Matriz A ");
21 disp(A);
22 mprintf("\n Matriz B ");
23 disp(B);
24 mprintf("\n ______________________________________");
25 mprintf("\n 1) Adio ");
26 mprintf("\n 2) Subtrao ");
27 mprintf("\n 3) Multiplicao Elemento por Elemento");
28 mprintf("\n 4) Multiplicao de Matrizes ");
29 mprintf("\n 5) Diviso elemento por elemento ");
30 mprintf("\n\n");
63

31 operacao=input("Escolha a operao: ");


32 if operacao==1 then
33
C = A + B;
34
mprintf("\n Matriz C ");
35
disp(C);
36 elseif operacao==2 then
37
C = A - B;
38
mprintf("\n Matriz C ");
39
disp(C);
40 elseif operacao==3 then
41
C = A.*B;
42
mprintf("\n Matriz C ");
43
disp(C);
44 elseif operacao==4 then
45
C = A*B;
46
mprintf("\n Matriz C ");
47
disp(C);
48 elseif operacao==5 then
49
C = A./B;
50
mprintf("\n Matriz C ");
51
disp(C);
52 else
53
mprintf("\n Escolha invlida");
54 end
linha 3 A varivel dimenso armazena a dimenso das matrizes A e B. Este
valor escolhido pelo usurio.
linhas 6 a 18 Neste bloco de comandos do programa so feitas as leituras de
valores para as matrizes A e B. Observe que para realizar a operao de
leitura elemento por elemento necessrio o uso de dois laos de repetio.
O primeiro lao varia da posio 1 ao nmero de linhas. O segundo lao varia
da posio 1 ao nmero de colunas. Os ndices linha e coluna so
controlados pelos laos de repetio.
linhas 20 a 23 Nesta parte do programa so mostradas as matrizes A e B.
Observe que o comando disp( ) foi utilizado para realizar esta tarefa. Este
comando permite que as matrizes e vetores sejam mostrados na tela sem o
uso de laos de repetio.
linhas 24 a 30 Menu de opes para que o usurio escolha qual operao
deseja realizar com as matrizes A e B.
64

Linhas 31 a 54 Bloco de comandos responsveis por realizar as operaes


com as matrizes de acordo com a opo escolhida pelo usurio. Perceba que
o SCILAB uma linguagem prepara para trabalhar com matrizes e vetores,
portanto veja que;
para somar duas matrizes foi utilizado o comando (+);
para subtrair duas matrizes foi utilizado o comando ( - );
para multiplicar elemento por elemento foi utilizado o comando ( .* )
para multiplicar duas matrizes foi utilizado o comando (*);
para dividir duas matrizes elemento por elemento foi utilizado o
comando ( . / );
Veja um exemplo de soluo a seguir:

Figura 33 Sada exemplo 1 matriz.

65

Exerccio 1 Desenvolva em SCILAB um algoritmo que faa a leitura de


valores para uma matriz 4 x 4. Aps a insero dos valores mostre a matriz
digitada pelo usurio, o maior valor da matriz e o menor valor da matriz.

Exerccio 2 Escreva um programa em SCILAB que mostre na tela uma


tabela de converso de temperaturas. Esta tabela deve mostrar a converso
de temperaturas em graus Celsius na faixa de 150 oC a 350
incrementos de 50

C com

C. Faa as converses de Celsius para Kelvin e

Fahrenheit. Veja um modelo de sada esperada.

Figura 34 Exemplo de sada exerccio 2 matriz.

Exerccio 3 Desenvolva um programa em SCILAB que a partir das matrizes


A, B e C realize as seguintes operaes :

! 5 0 $
! 4 2 $
! 1 1 $
A =#
& B =#
& C =#
&
" 2 6 %
" 0 2 %
" 3 2 %
a) A + B C ( O apstrofe simboliza a matriz transposta)
b) 2A-3B-(-C);
c) (A-4) + C;
d) (A-C);

66

PROJETO FINAL 4 : Compreendendo matrizes para a gerao de


grficos tridimensionais
A gerao de grficos tridimensionais no uma tarefa trivial. Apesar do
SCILAB conseguir simplificar de maneira considervel a criao destes
grficos precisamos entender o conceito de matriz que est por trs dos
comandos em SCILAB que facilitam a criao destes grficos.
Vamos tomar como exemplo a funo

7
x+ y
3
u(x, y) = 5e

. Para plotarmos o

grfico desta funo a primeira coisa a fazer conhecer para quais valores
de x e y desejamos calcular u(x, y) . Vamos supor que desejamos saber o
valor de u(x, y) para 0 x 3 e 0 y 3 . timo, agora temos a funo que
queremos plotar o grfico e o intervalo definido para x e y. O passo seguinte
decidir em quais coordenadas (x,y) eu quero calcular o valor de u(x, y) .
Vamos supor que eu queira calcular o valor de u(x, y) em 5 pontos
igualmente espaados entre 0 x 3 e 0 y 3 , portanto os pontos que
queremos calcular o valor da funo so:
x

0,75

0,75

1,5

1,5

2,25

2,25

importante lembrar que a nossa funo, uma funo em duas dimenses,


portanto para cada coordenada x temos os pares com as coordenadas y
gerando assim o conjunto de pontos (malha) ilustrado a seguir (uma matriz !)
:

67

Tabela 11 Exemplo de uma subdiviso de pontos para uma funo bidimensional.

u(0, 3)

u(0.75, 3)

u(1.5, 3)

u(2.25, 3)

u(3, 3)

u(0, 2.25)

u(0.75, 2.25)

u(1.5, 2.25)

u(2.25, 2.25)

u(3, 2.25)

u(0,1.5)

u(0.75,1.5)

u(1.5,1.5)

u(2.25,1.5)

u(3,1.5)

u(0, 0.75)

u(0.75, 0.75)

u(1.5, 0.75)

u(2.25, 0.75)

u(3, 0.75)

u(0, 0)

u(0.75, 0)

u(1.5, 0)

u(2.25, 0)

u(3, 0)

Finalmente aps a subdiviso dos pontos podemos ento calcular o valor da


funo nas coordenadas, conforme ilustrado a seguir.

Tabela 12 Matriz de soluo para a funo u(x,y).

5.0

2.36

1.11

0.52

0.2489

28.77

13.59

6.42

3.03

1.43

165.57

78.21

36.94

17.45

8.24

952.83

450.08

212.60

100.42

47.43

5483.16

2590.06

1223.45

577.92

272.99

Utilizando o SCILAB para gerar o grfico da funo

7
x+ y
u(x, y) = 5e 3

Vamos agora aprender ento como executar todos os passos descritos


acima utilizando o SCILAB.
1. Para gerar os intervalos das funes ; 0 x 3 e 0 y 3 faremos uso
da funo linspace( ). Conforme explicado no captulo de vetores a
funo linspace(valor1, valor2, valor3 ) funciona da seguinte
maneira; o primeiro valor dentro do parnteses representa o valor
inicial do vetor a ser criado, o segundo valor representa o fim do
intervalo a ser criado e o ltimo valor dentro do parnteses representa
68

o nmero de elementos que sero criados para este vetor. Portanto se


quisermos 5 pontos dentro do intervalo 0 x 3 e 5 pontos dentro do
intervalo 0 y 3 utilizaremos o comando da seguinte forma;
intervalox=linspace(0,3,5);
intervaloy=linspace(0,3,5);

2. Para gerar a matriz ilustrada pela tabela 11 utilizaremos o comando


meshgrid(). O comando meshgrid() recebe os pontos gerados pelo
comando linspace( ) e gera as coordenadas x e y, conforme a tabela
11.
[x,y]=meshgrid(intervalox,intervaloy);

69

3. A partir das coordenadas geradas x e y podemos ento calcular o


valor da funo

7
x+ y
3
u(x, y) = 5e

para cada ponto gerado.

for i=1:5
for j=1:5
u(i,j)= 5*exp(-x(i)+((7/3)*y(i)));
end
end
4. Finalmente por meio das matrizes x, y e u podemos gerar o grfico
para a funo proposta. Veja um exemplo utilizando o comando
mesh().
intervalox=linspace(0,3,5);
intervaloy=linspace(0,3,5);
[x,y]=meshgrid(intervalox,intervaloy);
for i=1:5
for j=1:5
u(i,j)= 5*exp(-x(i,j)+((7/3)*y(i,j)));
end
end
mesh(x,y,u);

Figura 35 Exemplo de grfico 3d utilizando o comando mesh().

5. Que tal aumentarmos o nmero de pontos para 100 ao invs de 5 ?


Veja o resultado desta modificao !

70

Figura 36 Exemplo de grfico 3d com 100 pontos

PRTICA !!!
Exerccio 1. Utilize a metodologia descrita acima para plotar o grfico das
seguintes funes.
a) u(x, t) = 5e

4 2t

sen(2 x) para 0 x 1 e t 0

b) u(x, t) = sen( x)cos( t) para 0 x 1 e t 0


c)

u(x, t) = 1+ x et para 0 x 1 e t 0
2t

32 t
sen(4 x) 3e128 sen(8 x) + 2e200 t sen(10 x)
d) u(x, y) = 5e

Exerccio 2 A funo a seguir representa a distribuio de temperatura em


uma placa de 1cm de espessura durante o tempo.

T (x, t) =

800

10

(1)m

2
m=0 (2m +1)

sen[(2m +1) x]e

(2m+1)2 2 t

em que ;
71

T (x, t) a temperatura na posio x da placa no tempo t.

a condutividade trmica da placa.


Construa um grfico tridimensional com a distribuio de temperatura da
placa. Lembre-se a espessura de 1cm portanto seu intervalo para x ser
0 x 1 e 0 t 10

72

REFERNCIAS BIBLIOGRFICAS
ASCENCIO, A. F. G; CAMPOS, E. A. V. Fundamentos da Programao de
Computadores Algoritmos, Pascal, C/C++ e Java. 3 edio, Pearson,
2012.
BOYCE,W. E.; DIPRIMA, R. C. Elementary Differential Equations and
Boundary Value Problems. Wiley, 10th Edition, 2012.
BROOKER, D.B.; BAKKER-ARKEMA, F.W.; HALL, C.W. Drying and storage
of oilseeds, The AVI Publishing Company, New York, 1992. 450p
COSTA, E. Da Cruz . Refrigerao. Editora Edgard Blucher, 3 edio, 2011.
DUCHON, C.; HALE, R. Time series analysis in meteorology and
climatology. An introduction. Wiley, 2012.
HOFFMAN, J. D; FRANKEL, S. Numerical Methods for Engineers and
Scientists. CRC Press; 2 edition, 2001.
HOLLOWAY, J. P.; HOLLOWAY, J. P. Introduo Programao para
Engenharia - Resolvendo Problemas com Algoritmos. Editora Ltc, 2006.
KUO, B.C; GOLNARAGHI, F. Automatic Control Systems. Wiley; 8 edition
2002.
RAYMOND, KAPUNO JR. R. Programming for Chemical Engineers Using
C, C++, and MATLAB. Jones & Bartlett Learning, 2008.

73