Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
V
R
1
+
V
R
2
+
V
R
3
V
1
R
1
+
1
R
2
+
1
R
3
Consequentemente, a lei de Ohm se aplica ao grupo completo de trs
resistores, com a resistncia R
paralela
dada por:
1
R
paralela
1
R
1
+
1
R
2
+
1
R
3
Figura 11 Holloway e Holloway (2006).
23
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 (R
1
, R
2
, R
3
) e retorna a resistncia dos trs em paralelo
(R
paralela
).
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;
Q
motor
P
c.v
motor
632 kcal / dia
em que:
o nmero de horas de funcionamento por dia de equipamento;
o rendimento do motor eltrico de acionamento.
A dissipao provocada pela iluminao dada por;
Q
iluminao
0, 86w A kcal / dia
motor
24
em que ;
W a potencia da lmpada (W/m
2
)
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:
Q
pessoas
nq 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 m
2
.
- 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)
25
- 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/m
2
(acendimento 4
horas/dia).
- Sero previstas tambm lmpadas germicidas na proporo de 2
W/m
2
(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 cmara
2
.
Figura 12 Soluo, projeto cmara de resfriamento.
2
Toda a formulao para o clculo de carga trmica foi adaptada de COSTA,
ENNIO CRUZ da. Refrigerao. Editora Edgard Blucher, 3 edio, 2011.
26
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:
27
1 clear;
2 clc;
3 mprintf("------------Software para controle de umidade relativa---- ");
4 umidade=input(" Digite a umidade relativa atual em decimal : ");
5 if (umidade<=0.4) then
6 mprintf("\n Umidade relativa dentro dos padres");
7 else
8 mprintf("\n -----ALERTA !!! ------ALERTA !!!! -------");
9 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.
28
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 (
o
F) Viscosidade (lb/ft/hr)
0 Temperatura < 50 242
50 Temperatura < 100 82,1
100 Temperatura <150 30,5
150 Temperatura < 200 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 mprintf("------------Clculo da viscosidade de um fluido----------------");
2 temperatura=input(" Digite a temperatura do fluido em graus fahrenheit (F) 5: ");
3 if (temperatura>=0 & temperatura<50) then
4 mprintf("\n Viscosidade do fluido = 242 (lb/ft/hr) ");
5 elseif(temperatura>=50 & temperatura<100) then
6 mprintf("\n Viscosidade do fluido = 82.1 (lb/ft/hr) ");
7 elseif(temperatura>=100 & temperatura<150) then
8 mprintf("\n Viscosidade do fluido = 30.5 (lb/ft/hr) ");
9 elseif(temperatura>=150 & temperatura<200) then
10 mprintf("\n Viscosidade do fluido = 12.6 (lb/ft/hr) ");
11 elseif (temperatura>=200)
12 mprintf("\n Viscosidade do fluido = 5.7 (lb/ft/hr) ");
29
13 else
14 mprintf("\n Valor invlido !!! ");
15 end
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 13 Tela de sada para exemplo de clculo de viscosidade
Resumo do captulo
Neste captulo mostramos as estruturas de condio nica if e instruo de
condio composta if - else. Aps a leitura deste captulo voc dever
ser capaz de:
- Identificar a necessidade de uso de uma instruo do tipo condicional.
- Implementar por meio do SCILAB uma instruo do tipo condicional.
- Saber diferenciar as estruturas condicionais simples das estruturas
condicionais compostas e identificar aplicaes diversas.
- Saber ler e interpretar as tabelas de operadores relacionais e lgicos
(tabelas 4 e 5 pginas 12 e 13).
- Utilizar os operadores relacionais e lgicos e criar condies simples e
ou compostas em estruturas condicionais.
Exerccios estrutura condicional:
Exerccio 1: Escreva instrues para cada uma das tarefas a seguir:
30
a) Solicite que o usurio digite um nmero.
b) Inserir um inteiro e atribuir o valor varivel valor.
c) Escreva a mensagem O nmero digitado maior ou igual
a zero Se a varivel valor for maior ou igual a zero.
Exerccio 2 Escreva instrues ou comentrios que realizam cada uma das
tarefas a seguir.
a) Solicite ao usurio que leia um nmero e o armazene-o na varivel x.
b) Solicite ao usurio que leia um numero e armazene-o na varivel y.
c) Verifique se o valor de x maior que -3 ou valor de y menor que 0 e
escreva a mensagem O valor de x menor que 3 ou o
valor de y menor que zero.
d) Verifique se o valor de x maior que -3 e valor de y menor que 0 e
escreva a mensagem O valor de x menor que 3 e o
valor de y menor que zero.
e) Verifique se o valor de x e y esto fora dos intervalos especificados
nas letras c) e d) e escreva na tela o valor de x e o valor de y.
Exerccio 3: Questo adaptada de (IFTRN).
Sendo v1 = 15, v2 = 10, v3 = 5, v4 = 0, defina qual ser a resposta
(verdadeiro ou falso) para as sentenas lgicas abaixo.
I) (v1 = 10) E (v2 = 10)
II) (v1 = 15) E (v2 = 10)
III) (v1 = 15) E (v3 = v2)
IV) (v2 > 5) OU (v3 < 10)
V) (v4 = 1) OU (v3 = 4)
VI) (v2 = 10) OU (v4 = 5)
VII) (v1 > 10 E v2 < 15) E (v3 < 10 E v4 = 0)
VIII) (v1 < 10 E v2 > 15) OU (v3 > 5 OU v4 = 0)
31
Exerccio 4: 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 (
o
C ).
Dica: Tenha cuidado com as unidades. Observe que a tabela que voc vai
utilizar est em graus Fahrenheit (
o
F) mas voc dever fazer a entrada em
graus Celsius (
o
C).
Exerccio 5: Adaptado de Raymond e Kapuno Jr (2008). Desenvolva um
programa em SCILAB que recebe como entrada um valor de temperatura em
graus Celsius (
o
C) e retorne como sada a fase que se encontraria a gua
nesta temperatura (slido, lquido ou gasoso).
Exerccio 6: Adaptado de Raymond e Kapuno Jr (2008). 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.
Diante das informaes sobre o nmero de Reynolds desenvolva um
programa em SCILAB que classifique um escoamento dado o nmero de
Reynolds.
Exerccio 7: Implemente um algoritmo em SCILAB que retorne o valor da
funo abaixo aps receber um valor qualquer de entrada.
( )
s
< s
< +
=
x x
x
x x
x f
3 ,
3 2 , 3
2 , 2 2
Exerccio 8: Vamos recordar o problema proposto no exerccio 3 da
unidade1.
32
Suponha que uma bola de massa qualquer seja arremessada para cima
numa velocidade
v
0
. 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) v
0
gt
h(t) v
0
t
gt
2
2
Onde = 9,81 m/s
2
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 v
0
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.
Tabela 7 Gravidade dos planetas do sistema solar.
Planeta Gravidade (m/s
2
)
Mercrio 3,7
Vnus 8,8
Terra 9,8
Marte 3,8
Jpter 26,4
Saturno 11,5
Urano 9,3
33
Netuno 12,2
Pluto 0,6
Veja um exemplo do menu de opes !
Figura 14 Exemplo menu de opes.
Exerccio 9: Olimpada Brasileira de Informtica OBI2005 Modalidade
Programao Nvel 1
A Companhia de Taxi Tabajara (CTT) uma das maiores empresas de
transporte do pas. Possui uma vasta frota de carros e opera em todas as
grandes cidades. Recentemente a CTT modernizou a sua frota, adquirindo
um lote de 500 carros bicombustveis (carros que podem utilizar como
combustvel tanto lcool quanto gasolina). Alm do maior conforto para os
passageiros e o menor gasto com manuteno, com os novos carros
possvel uma reduo adicional de custo: como o preo da gasolina est
sujeito a variaes muito bruscas e pode ser vantagem, em certos
momentos, utilizar lcool como combustvel. Entretanto, os carros possuem
um melhor desempenho utilizando gasolina, ou seja, em geral, um carro
percorre mais quilmetros por litro de gasolina do que por litro de lcool.
TAREFA
Voc deve escrever um programa que, dados o preo do litro de lcool, o
preo do litro de gasolina e os quilmetros por litro que um carro
34
bicombustvel realiza com cada um desses combustveis, determine se
mais econmico abastecer os carros da CTT com lcool ou com gasolina. No
caso de no haver diferena de custo entre abastecer com lcool ou gasolina
a CTT prefere utilizar gasolina.
ENTRADA
A entrada composta por uma linha contendo quatro nmeros reais com
preciso de duas casas decimais A, G, Ra e Rg, representando
respectivamente o preo por litro do lcool, o preo por litro da gasolina, o
rendimento (km/l) do carro utilizando lcool e o rendimento (km/l) do carro
utilizando gasolina. A entrada deve ser lida do dispositivo de entrada padro
(normalmente o teclado).
SADA
A sada deve ser composta por uma nica linha contendo o caractere A se
mais econmico abastecera frota com lcool ou o caractere G se mais
econmico ou indiferente abastecer a frota com gasolina.
A sada deve ser escrita no dispositivo de sada padro (normalmente a tela).
RESTRIES
0.01 A 10.00
0.01 G 10.00
0.01 Ra 20.00
0.01 Rg 20.00
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.
35
Algumas relaes de converso de unidades:
Fora: 1 N = 0,102 kgf= 0,2249 lbf
1 N = 1 kg m / s
2
Presso: 1Pa = 1 N / m
2
= 0,102 kgf / m
2
= 0,000145 lbf / pol
2
1 atm = 101.325 Pa
1 bar = 10
5
Pa
1 lbf / pol
2
= 1 psi (pounds per square inch)
Energia: 1 J = 0,0009478 BTU = 0,00023884 kcal
1 BTU = 252 cal
Potncia: 1 W = 3,412 BTU / h = 0,85984 kcal / h = 0,001359 CV = 0,001341
HP
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;
36
- 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.
Veja como exemplo a tela de sada aps utilizar o conversor
Figura 15 Exemplo de sada para o programa conversor de unidades
37
3. ESTRUTURAS DE REPETIO
3.1 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) v
0
gt
h(t) v
0
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 v
0
= 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:
38
Tabela 8 Exemplo de clculo manual.
T (s) v(t) - (m/s) h(t) (m)
0 15 0
0.5 10,095 6,274
1 5,190 10,095
1.5 0,285 11,464
2 -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
v
0
= 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;
2 clc;
3 g=9.81;
4 mprintf("Simulao do arremeo de uma bola no planeta terra \n\n");
5 v0 = input(" Digite a velocidade inicial do arremeo (m/s) : ");
6 mprintf("\n t (s) h(t) (m) v(t) (m/s)")
7 for t=0:0.1:2
8 altura= v0*t - (g*(t^2))/2;
9 velocidade = v0 - g*t;
10 mprintf("\n %2.2f %2.2f %2.2f ",t,altura,velocidade);
11 mprintf("\n");
12 end
39
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 16 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.
40
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
velocidade v
0
(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
i 0
n
for i:1:n
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 (DUCHON e HALE 2012).
A equao a seguir foi obtida a partir dos dados experimentais de
temperatura da cidade de Belo Horizonte no ms de agosto de 2013.
41
T(t) 19, 06+0, 211cos 0, 08721t
( )
+[ 5.51sen(0, 08721t)]
em que:
T = Temperatura ambiente (
o
C );
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 clear;
2 clc;
3 mprintf("Clculo da temperatura mdia no ms de agosto - 2013 \n\n");
4 soma = 0;
5 for t=0:720
6 temperatura = 19.06 + (0.211*cos(0.08721*t)) + (-5.51*sin(0.08721*t))
7 soma = soma + temperatura;
8 end
9 media = soma/720;
10 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.
42
Figura 17 Tela de sada aps processamento da mdia.
Resumo do item 3.1
Nesta seo mostramos a estrutura de repetio for. Aps a leitura deste
captulo voc dever ser capaz de:
- Identificar a necessidade de uso da estrutura de repetio for.
- Identificar os parmetros que compem o comando for (incio,
incremento e fim) e implementar o comando for por meio do SCILAB.
- Identificar quando e como implementar somatrios.
Exerccios Laos de repetio comando for
Exerccio 1 Escreva uma instruo em SCILAB ou um conjunto de instrues
em SCILAB para realizar cada uma das seguintes tarefas:
a) Imprima os inteiros de 1 a 20 utilizando o comando for.
b) Imprima os nmeros mpares entre 1 e 9 utilizando o comando for.
Realize esta tarefa ajustando apenas os parmetros de inicio,
incremento e fim do comando for.
c) Mostre a soma dos nmeros pertencentes ao intervalo 45 e 55
inclusive.
Exerccio 2 Faa um programa em SCILAB que faa a leitura de 3 valores e
mostre os valores digitados pelo usurio. Voc dever utilizar o comando
for. Utilize como referncia a tela de sada a seguir.
43
Figura 18 Exemplo de entrada e sada de dados utilizando estrutura de repetio
Exerccio 3 Desenvolva um programa em SCILAB que calcule a
exponenciao entre dois nmeros x e y escolhidos pelo usurio (x
y
). Para
realizar os clculos voc no poder utilizar o comando (^).
Dica: A operao 5
3
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 ?
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, 08721t
( )
+[ 5.51sen(0, 08721t)]
em que:
T = Temperatura ambiente (
o
C );
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 perodo
44
b) A maior temperatura registrada no perodo
c) A menor temperatura registrada no perodo
d) Quantas horas a temperatura ficou acima de 19
o
C.
e) Quantas horas a temperatura ficou abaixo de 16
o
C.
3.2 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
Exemplo
Um programa foi desenvolvido para ler um conjunto no determinado de
valores e mostrar na sada;
a) o valor lido;
b) o quadrado do nmero lido;
c) o cubo do nmero lido;
d) a raiz quadrada do nmero lido;
e) se par ou mpar.
Para encerrar a digitao um nmero menor ou igual a zero dever ser
digitado.
Veja uma sugesto de implementao para este problema no cdigo a
seguir:
45
1 clear;
2 clc;
3 numero=input("Digite um nmero inteiro");
4 while numero>0
5 quadrado=numero^2;
6 mprintf("\n O Quadrado de %d = %2.2f",numero,quadrado);
7 cubo=numero^3;
8 mprintf("\n O cubo de %d = %2.2f",numero,cubo);
9 raiz=sqrt(numero);
10 mprintf("\n A raiz quadrada de %d = %2.2f",numero,raiz);
11 if modulo(numero,2)==0 then
12 mprintf("\n O numero %d par ",numero);
13 else
14 mprintf("\n O nmero %d mpar ",numero);
15 end
16 mprintf("\n\n\n");
17 numero=input("Digite um nmero inteiro");
18 end
linhas 1 e 2 Limpa a memria e tela
linha 3 Inicializao da varivel numero.
Linha 4 Incio do bloco de repeties. importante destacar a inicializao
da varivel numero feita na linha 3. O valor atribudo a esta varivel quem
vai decidir se o algoritmo executar o bloco de repeties ou no. Lembrando
que o comando de repetio while composto por uma condio. Caso a
condio seja verdadeira as instrues pertencentes ao corpo do comando
sero executadas, caso contrrio o comando de repetio no executado.
Na linha 4 em especfico se a varivel numero conter um valor igual ou
inferior a zero o comando while no ser executado.
linha 11 Para verificar se um nmero par ou no utilizou-se o comando
modulo(numero,2). Este comando retorna o resto da diviso de numero
por 2. Consequentemente se o resto retornado for igual a zero, podemos
afirmar que a varivel nmero contm um valor par.
Linhas 17 Uma nova leitura para a varivel numero deve ser feita. Nesta
linha que o programa possibilita ao usurio escolher um novo nmero para
uma nova sequncia de processamento ou escolher um valor para terminar
lao de repetio.
46
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 (BROOKER et al, 1992):
U(t) e
kt
n
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;
3
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 clear;
2 clc;
3 k=0.365;
4 n=0.663;
5 t=0;
6 teor_umidade=1;
7 mprintf("-------Simulao de secagem--------- \n\n");
8 mprintf("\n\t\t t(h)\t\t U(%%) ");
3
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.
47
9 while(teor_umidade>=0.13)
10 teor_umidade= exp(-k*(t^n));
11 mprintf("\n\t\t %2.3f\t\t %2.2f ",t,teor_umidade*100);
12 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
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 19 Tela de sada para simulao de secagem.
4
4
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.
48
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 ???
Resumo do item 3.2
Neste captulo mostramos a estrutura de repetio while. Aps a leitura
desta seo voc dever ser capaz de:
- Identificar a necessidade de uso da estrutura de repetio while.
- Implementar o comando while por meio do SCILAB.
- Utilizar contadores e somatrios.
Exerccios Laos de Repetio
Exerccio 1
Faa um programa em SCILAB que faa a leitura de 5 valores e mostre os
valores digitados pelo usurio. Voc dever utilizar o comando while.
Exerccio 2 Adaptado de Raymond e Kapuno Jr (2008)
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.
49
Figura 20 Sada para converso de potncia
Exerccio 3
Escreva um programa que mostre todos os nmeros divisveis por um
nmero indicado pelo usurio dentro de um intervalo tambm indicado pelo
usurio. O usurio deve entrar com um valor correspondente ao divisor e em
seguida ele ir fornecer o valor inicial e final do intervalo. Veja a tela de sada
a seguir.
Figura 21 Sada exemplo para o exerccio 3
Exerccio 4
Devido ao uso frequente, a descarga da bateria de equipamentos eletrnicos
pode se comportar de acordo com a funo proposta a seguir;
y(t) y
0
2
0,1
( )
t
em que;
y
0
a carga inicial da bateria;
y(t) a quantidade de carga aps t horas de uso.
50
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 22 Exemplo de sada para o exerccio 1 - descarga de bateria
51
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 23 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
52
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
1 2 3 4 5
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.
53
Figura 24 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
54
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;
55
plot(x,y);
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.
56
Figura 25 Janela de sada grfica.
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;
57
end
plot(x,y);
title("Grfico de f(x)= 3*x^2 + 4*x + 1");
xlabel("Eixo x");
ylabel("Eixo y");
Figura 26 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.
58
Figura 27 Opes de configurao de grfico
Figura 28 Editor de grfico.
59
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");
60
Figura 29 Exemplo de grfico com mltiplos comportamentos.
Exemplo de aplicao: (exemplo 4.2)
Um engenheiro decidiu acompanhar o funcionamento do secador de gros
representado pela figura abaixo.
Figura 30 Secador de gros (RODRIGUES, 2010)
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
61
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.
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-');
62
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);
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
63
Figura 31 Tela de sada em SCILAB para exemplo1 vetor.
Figura 32 Variao da velocidade do ar de secagem.
64
Figura 33 Variao da temperatura de secagem na cmara de secagem
Resumo do captulo 4
Neste captulo mostramos o uso de vetores. Aps a leitura deste captulo
voc dever ser capaz de:
- Identificar a necessidade de uso de vetores.
- Inicializar um vetor de maneira direta ou por meio do usurio.
- Realizar a sada de dados de um vetor.
- Implementar operaes de soma e busca de valores em um vetor.
- Plotar grficos para as mais diversas aplicaes.
Exerccios - Vetor
Exerccio 1 Determine se cada um dos seguintes verdadeiro ou falso. Se
falso justifique.
65
a) Para referir-se a uma localizao particular ou elemento dentro de um
vetor, especificamos o nome do vetor e o valor do elemento particular.
b) Um algoritmo que inicializa os elementos de um vetor de 15 elementos
como zero deve conter pelo menos uma instruo for.
Exerccio 2 Escreva instrues em SCILAB para realizar cada uma das
seguintes tarefas:
a) Exiba o valor do stimo elemento de um vetor.
b) Inicialize cada um dos cinco elementos de um vetor como 8.
c) Copie o vetor A de 11 elementos para as primeiras 11 posies de um
vetor B que contm 34 elementos.
Exerccio 3 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 4 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) e
x
; 0 x 10
e) f (x) 1x
2
+2x+1; qual intervalo utilizar ? Existe algum critrio para
escolher o intervalo ?
f) f (t)
t +1 0 t <1
0 1 t < 2
2 t 2 t < 3
0 t 3
66
Exerccio 5 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.
PROJETO FINAL 3 : Simulao !
No instante t=0 (min) um tanque contm Q
0
(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 34 Tanque de gua com misturador. (Boyce e Diprima, 2012)
A funo a seguir expressa a quantidade de sal Q(t) no tanque em qualquer
estante t.
Q(t) 25+(Q
0
25)e
r t/100
Desenvolva um programa em SCILAB que simule a quantidade de sal
presente no tanque durante 100 minutos.
67
a) Como sada voc dever mostrar a quantidade de sal presente no
tanque e o tempo de simulao a cada 10 minutos. Utilize Q
0
= 50 lb e
r = 3.
b) Faa um grfico mostrando o comportamento da quantidade de sal no
tanque durante os 100 minutos. Utilize Q
0
= 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 Q
0
= 50 lb.
- Curva 2: Dever representar a quantidade de sal em 100 minutos
com r = 3 e Q
0
= 40 lb.
- Curva 3: Dever representar a quantidade de sal em 100 minutos
com r = 3 e Q
0
= 25 lb.
- Curva 4: Dever representar a quantidade de sal em 100 minutos
com r = 3 e Q
0
= 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 Q
0
=
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 Q
0
= 50 lb.
Dica: O sistema entra em equilbrio quando Q(t) =25.
68
5. MATRIZ
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.
69
Veja a disposio dos valores como ficaria em formato de matriz.
Tabela 10 Matriz Temperatura
Tempo (h) Sensor de
Temperatura (1)
Sensor de
Temperatura (2)
Sensor de
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 35 Sada das matrizes temperatura e presso
70
Inserindo valores em uma matriz
A insero de valores em uma matriz pode ser feita de diferentes maneiras. A
seguir apresentaremos as mais usuais.
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
71
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
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
13 mprintf("Para a matriz B.");
14 for linha = 1:dimensao
15 for coluna = 1:dimensao
16 mprintf ("Elemento da matriz B posio B(%i,%i): ",linha,coluna);
17 B(linha,coluna) = input (" ");
18 end
19 end
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\n");
28
29 operacao=input("Escolha a operao: ");
30
31 if operacao==1 then
32 for i=1:dimensao
33 for j=1:dimensao
34 C(i,j)=A(i,j)+B(i,j);
35 end
72
36 end
37 mprintf("\n Matriz C ");
38 disp(C);
39 elseif operacao==2 then
40 for i=1:dimensao
41 for j=1:dimensao
42 C(i,j)=A(i,j)-B(i,j);
43 end
44 end
45 mprintf("\n Matriz C ");
46 disp(C);
47 else
48 mprintf("\n Escolha invlida");
49 end
linha 3 A varivel dimenso armazena a dimenso das matrizes A e B. Este
valor escolhido pelo usurio.
linhas 6 a 19 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.
Linhas 31 a 49 Bloco de comandos responsveis por realizar as operaes
com as matrizes de acordo com a opo escolhida pelo usurio.
Veja um exemplo de soluo a seguir:
73
Figura 36 Sada exemplo 1 matriz.
Resumo do captulo 5
Neste captulo mostramos o uso de matrizes. Aps a leitura deste captulo
voc dever ser capaz de:
- Identificar a necessidade de uso de matrizes.
- Inicializar uma matriz de maneira direta ou por meio do usurio.
- Realizar a sada de dados de uma matriz.
- Implementar operaes matemticas e busca de valores em uma
matriz.
- Plotar grficos de superfcie para as mais diversas aplicaes.
Exerccios Matriz
Exerccio 1 Determine se cada um dos seguintes verdadeiro ou falso. Se
falso justifique.
74
a) Para referir-se a uma localizao particular ou elemento dentro de uma
matriz, especificamos o nome do vetor e o valor do elemento
particular.
b) Um algoritmo que inicializa os elementos de uma matriz de dimenses
3x3 como zero deve conter pelo menos uma instruo for.
c) Um algoritmo que soma os elementos de uma matriz deve conter
instrues for aninhadas.
Exerccio 2 Considere uma matriz de dimenses 2 x 3;
a) Escreva uma instruo para criar esta matriz 2 x 3.
b) Quantas linhas possui esta matriz ?
c) Quantas colunas possui esta matriz ?
d) Quantos elementos possui esta matriz ?
e) Escreva todos os elementos da segunda linha desta matriz.
f) Escreva todos os elementos da terceira coluna desta matriz.
g) Escreva uma nica instruo que configura o elemento desta matriz na
linha 1 e coluna 2 como zero.
h) Escreva uma instruo for aninhada que inicializa cada elemento da
matriz como 0.
i) Escreva uma instruo for aninhada que insere os valores da matriz
a partir do usurio.
Exerccio 3 Desenvolva em SCILAB um algoritmo que faa a leitura de
valores para uma matriz 2 x 2. Aps a insero dos valores mostre;
- a matriz digitada pelo usurio,
- o maior valor da matriz,
- o menor valor da matriz.
Exerccio 4 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
o
C a 350
o
C com
75
incrementos de 50
o
C. Faa as converses de Celsius para Kelvin e
Fahrenheit. Veja um modelo de sada esperada.
Figura 37 Exemplo de sada exerccio 2 matriz.
Exerccio 5 Para que duas ou mais matrizes sejam consideradas iguais elas
devem obedecer a algumas regras:
- Devem ter a mesma ordem, ou seja, o mesmo nmero de linhas e o
mesmo nmero de colunas.
- Os elementos devem ser iguais aos seus correspondentes.
A partir dos conceitos acima, elabore um programa em SCILAB que solicite
ao usurio a digitao de duas matrizes 2x2. Aps a digitao das matrizes
verifique se as matrizes digitadas so iguais ou no.
Exerccio 6 (Olimpadas Nacionais de Informtica ; Portugal 2008)
Finalmente, o local do novo aeroporto de Lisboa est escolhido: Alcochete. O
aeroporto ter um imenso volume de avies sempre a decolar e a aterrizar.
Gerir todo este trfego areo no nada fcil. A misso dos controladores de
trfego areo precisamente garantir um fluxo de avies seguro. So eles
que, a partir da torre de controle, fornecem indicaes e autorizaes de vo,
de acordo com as caractersticas da aeronave e do contexto do momento.
Podem pedir aos pilotos para alterar fatores como a rota, a altitude ou a
velocidade. Programas de computador muito elaborados auxiliam os
controladores e garantem a eficcia do sistema.
Uma empresa que faz software de controle areo te contratou. Um dos
muitos sistemas instalados avisa do perigo de coliso entre dois avies. Se
dois avies estiverem prximos, um alarme dispara imediatamente.
76
Basicamente, a empresa quer que voc programe uma maneira eficiente de
detectar isto, descobrindo no meio de todo o trfego areo quais so os dois
avies mais prximos um do outro. Como simplificao, as posies dos
avies so dadas como em coordenadas (X,Y), em relao a uma
determinada origem. A altitude, direo e velocidade do avio podem ser
ignoradas. Se dois avies tiverem posies (X
1
,Y
1
) e (X
2
,Y
2
), a distncia entre
eles dada pela frmula X
1
X
2
( )
2
+ Y
1
Y
2
( )
2
.
O trecho de cdigo a seguir gera uma matriz com as coordenadas (x,y) para
a posio de 4 avies no espao areo.
for i=1:4
for j=1:2
coordenadas(i,j)=rand()*10;
end
mprintf("\n Coordenadas do avio %d ( %2.2f , %2.2f )",i,coordenadas(i,1),coordenadas(i,2));
end
A matriz foi organizada de modo que a linhas se referem ao avio e as
colunas se referem s suas coordenadas x e y.
Escreva um programa em SCILAB que dadas as localizaes (X,Y) de um
conjunto de avies, calcula qual o par de avies que est mais perto um do
outro. Utilize o trecho de cdigo disponibilizado acima para gerar a matriz que
contm as coordenadas dos quatro avies. Veja a seguir uma sugesto para
a tela de sada.
77
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 u(x, y) 5e
x+
7
3
y
. 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:
78
x y
0 0
0,75 0,75
1,5 1,5
2,25 2,25
3 3
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 !)
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
79
Utilizando o SCILAB para gerar o grfico da funo u(x, y) 5e
x+
7
3
y
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 3faremos 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
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);
80
3. A partir das coordenadas geradas x e y podemos ento calcular o
valor da funo u(x, y) 5e
x+
7
3
y
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);
81
Figura 38 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 !
Figura 39 Exemplo de grfico 3d com 100 pontos
PRTICA !!!
Exerccio 1. Utilize a metodologia descrita acima para plotar o grfico das
seguintes funes.
82
a) u(x, t) 5e
4
2
t
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 e
t
para 0 x 1 e t 0
d)
u(x, y) 5e
32 t
sen(4 x) 3e
128
2t
sen(8 x)+2e
200
2
t
sen(10 x)
Exerccio 2 A funo a seguir representa a distribuio de temperatura em
uma placa de 1cm de espessura durante o tempo (Hoffman,2001).
T(x, t)
800
2
( 1)
m
(2m+1)
2
sen[(2m+1) x]e
(2m+1)
2
2
t
m0
10
em que ;
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
83
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.
RODRIGUES, C. L. C. Sistema de controle automtico para um secador
de produtos agrcolas com reaproveitamento do ar de secagem. Tese de
Doutorado, Universidade Federal de Viosa, 2010.
DEITEL, H. M.; DEITEL, P. J. JAVA Como programar 6
a
edio. Pearson,
2005.
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.
OLIMPADA BRASILEIRA DE INFORMTICA. http://olimpiada.ic.unicamp.br/.
Acesso em 03/08/2014.
OLIMPADAS NACIONAIS DE INFORMTICA http://oni.dcc.fc.up.pt/2014/.
Acesso em 03/08/2014.
RAYMOND, KAPUNO JR. R. Programming for Chemical Engineers Using
C, C++, and MATLAB. Jones & Bartlett Learning, 2008.
84
APENDICE 1 GERAO DE NMEROS ALEATRIOS
Em diversas reas do conhecimento o uso de nmeros aleatrios em
algoritmos uma prtica trivial. Especificamente no aprendizado de
algoritmos a utilizao de nmeros aleatrios pode nos ajudar a simular
cenrios diversificados e situaes inesperadas. A partir de tais situaes
podemos criar e avaliar lgicas de programao independente de valores
digitados pelo programador e ou usurio, que muitas vezes podem escolher
valores tendenciosos lgica implementada.
A seguir apresentaremos como podemos gerar nmeros aleatrios utilizando
duas funes disponveis em SCILAB, a funo rand( ) e a funo grand(
). importante lembrar que as informaes mais detalhadas sobre a
utilizao destes comandos esto disponveis no menu Ajuda do
SCILAB.
1. A funo rand( )
A funo rand( ) a primeira funo que apresentaremos para gerao de
nmeros aleatrios. O cdigo a seguir mostra na tela 5 nmeros gerados
aleatoriamente pela funo rand( ).
mprintf("\n Gerando 5 nmeros aleatrios com a funo rand() \n");
for i=1:5
mprintf("\n\n %f ",rand());
end
Veja a sada no console aps a execuo do cdigo acima.
Figura 40 Exemplo de aplicao do comando rand( )
85
Algumas observaes devem ser feitas quanto ao uso do comando rand( ).
Perceba que os cinco nmeros gerados esto entre 0 e 1. Esta a primeira
caracterstica do comando. Ao gerar os valores o computador sempre vai
trabalhar na faixa de valores entre 0 e 1. Outra caracterstica que devemos
observar que o SCILAB como j dito anteriormente trabalha com as
variveis numricas apenas em formato real, portanto todos os valores
gerados pela funo rand( )estaro no formato real.
a. Gerando valores aleatrios inteiros a partir do comando
rand( )
Conforme j definido os valores gerados estaro sempre no formato real.
Portanto para utilizarmos os valores no formato inteiro devemos utilizar uma
outra funo disponvel no SCILAB a funo int( ), veja como fcil. O
cdigo a seguir vai gerar 5 valores inteiros aleatrios.
clear;
clc;
mprintf("\n Gerando 5 nmeros aleatrios inteiros com a funo rand() \n");
for i=1:5
mprintf("\n\n %f ",int(rand()));
end
Veja a tela de sada a seguir.
Figura 41 Utilizando a funo int( ) e rand( )
Mas o que aconteceu !? Esto todos os valores zerados ? Vamos ver o por
que disso ?
Os nmeros gerados aleatoriamente pela funo rand( ) esto no intervalo
entre 0 e 1. Portanto quando utilizamos a funo int( ) ficamos apenas
86
com a parte inteira do nmero gerado que era zero ! Veja um exemplo; se o
numero gerado para a varivel x foi x=0.867 e em seguida aplicamos a
funo int(x), consequentemente o resultado ser 0.
Veja ento como faramos para gerar 5 nmeros inteiros aleatrios entre 0 e
100.
mprintf("\n Gerando 5 nmeros inteiros aleatrios com a funo rand() \n");
for i=1:5
mprintf("\n\n %f ",int(100*rand()));
end
Observe que a nica modificao feita foi multiplicar os nmeros gerados
aleatoriamente por 100. Veja a sada a seguir;
Figura 42 Gerando nmeros aleatrios inteiros entre 0 e 100.
b. Gerando vetores e matrizes aleatoriamente por meio da
funo rand( )
A funo rand( ) acrescida das informaes de quantidade de linhas e
colunas tambm nos possibilita gerar automaticamente vetores e matrizes
com valores aleatrios. Se desejarmos gerar um vetor de 7 posies com
valores aleatrios basta acrescentarmos as seguintes informaes no
comando rand( ) veja;
vetor=rand(7,1);
Para gerar o vetor de 7 posies com valores aleatrios foi necessrio
acrescentar as informaes de linhas e colunas. Portanto o comando
rand(7,1) gerou valores para uma matriz de 7 linhas e 1 coluna, ou um vetor
87
com 7 posies. Experimente gerar uma matriz de valores aleatrios com 3
linhas e 5 colunas !.
2. A funo grand( )
Existem situaes em que necessitamos de gerar valores aleatrios,
entretanto estes valores devem respeitar uma faixa de valores desejados.
Imagine que voc criou toda a lgica de funcionamento de um radar que foi
instalado na avenida Cristiano Machado. A lgica simples, porm voc
precisa testar se a lgica do seu radar est funcionando. Em outras palavras
voc precisa verificar se os carros que passam com velocidades maiores que
60 km/h so registrados. Para testar a sua lgica voc vai precisar de simular
a velocidade dos carros que passam onde foi instalado o seu radar. Sabemos
que a velocidade mdia dos carros na avenida de 60 km/h, mas pode
acontecer que automveis trafeguem acima ou abaixo desta vel ocidade.
Surge ento o seguinte questionamento, como vou simular estes veculos
? Como vou garantir que os valores simulados estejam nesta faixa para
tornar o meu teste o mais prximo possvel da realidade ?
Resposta:
Utilizaremos ento a funo grand( ), como um gerador de nmeros
aleatrios.
Para garantir que os valores estejam na faixa usual de trfego na avenida, a
funo grand( ) nos permite escolher o valor mdio dos nmeros gerados e
seu desvio padro, todos estes obedecendo a uma distribuio de
probabilidade. Enfim a gerao dos nmeros aleatrios ser feita a partir da
seguinte configurao grand(5,1,nor,60,5). Tal configurao pode
ser interpretada como a funo grand vai gerar uma matriz de 5 linhas e uma
coluna (vetor de 5 posies) com valores aleatrios, obedecendo a
distribuio normal, de mdia 60 e desvio padro 5.
Veja a seguir o cdigo e a tela de sada a ps a sua execuo.
88
clear;
clc;
carros=grand(5,1,"nor",60,10);
for i=1:5
mprintf("\n Velocidade do carro %d = %f (km/h)",i,carros(i));
if carros(i)>60 then
mprintf(" Multado !!!");
end
end
Figura 43 Exemplo de uso do gerador de nmeros aleatrios grand( )
Lembre-se que para gerar apenas um valor basta alterar o comando para
grand(1,1,nor,60,5), gerando apenas um valor, no mais um vetor.
Todas as configuraes feitas para o comando rand( ) so vlidas para o
comando grand( )
89
APENDICE 2 LISTA DE COMANDOS TEIS EM SCILAB
A seguir apresenta-se uma lista com alguns comandos usuais em
programao e engenharia. Maiores detalhes sobre a utilizao destes
podem ser facilmente encontrados na seo Ajuda do SCILAB.
Esta lista no tem inteno de substituir o menu Ajuda do SCILAB. O menu Ajuda
deve ser a sua principal fonte de busca durante suas implementaes.
%i Unidade imaginria utilizada para nmeros complexos.
%inf - Retorna uma representao para um nmero infinito. ( ).
%pi - Retorna um valor aproximado para o nmero pi ().
abs( )- Retorna o valor absoluto de um elemento.
acos( ) Arco-cosseno.
acosh( ) Arco-cosseno hiperblico.
asec( ) Arco secante.
asech( ) Arco-secante hiperblico.
asin( ) Arco-seno.
asinh( ) Arco-seno hiperblico.
atan( ) Arco-tangente.
atang( ) Arco-tangente hiperblico.
break - Dentro de um lao for ou while loop, o comando break fora o
fim do lao.
cos( ) Cosseno.
cosh( ) Cosseno hiperblico.
cotg( ) Cotangente.
coth( ) Cotangente hiperblica.
det( ) Calcula o determinante de uma matriz.
90
disp( ) Exibio de variveis ou texto.
exp( ) Retorna o valor para a expresso e
x
.
eye( ) Matriz identidade.
factorial( ) Retorna o fatorial de um nmero.
fix( ) Arredonda em direo zero.
floor( ) - retorna uma matriz de inteiros feita a partir de
"arredondamentos para baixo".
gsort( ) Ordenao em ordem decrescente.
imag( ) Retorna a parte imaginria de um nmero complexo.
input( ) Comando de entrada de dados via usurio.
int( ) - retorna a parte inteira de um nmero real. o mesmo que fix.
inv( ) Retorna a matriz inversa.
linsolve( ) Resolvedor de equaes lineares.
linspace( ) Retorna um vetor linearmente espaado.
log( ) Retorna o valor para ln.
log10( ) Retorna o valor para o logaritmo na base 10.
log2( ) Retorna o valor para o logaritmo na base 2.
max( ) Retorna o maior valor de um vetor ou matriz.
mean( ) Retorna a mdia dos elementos de um vetor / matriz.
min( ) Retorna o menor valor de um vetor ou matriz.
modulo( ) retorna o resto da diviso de x por y (x e y inteiros).
nthroot( ) Retorna a n-sima raiz de um nmero.
plot( ) Grfico em 2D.
91
primes( ) Retorna todos os nmeros primos de 1 ao valor atribudo
funo.
rand( ) Gerador de nmeros aleatrios.
real( ) Retorna a parte real de um nmero complexo.
round( ) - arredonda os elementos de x para os inteiros mais prximos.
sec( ) Secante.
sech( ) Secante hiperblica.
sin( ) Funo seno.
sinh( ) Seno hiperblico.
solve( ) Solucionador de sistemas lineares.
sqrt( ) Retorna o valor para a raiz quadrada de um nmero.
sum( ) Retorna a soma dos elementos de um vetor ou matriz.
tan( ) Tangente.
tanh( ) Tangente hiperblica.
zeros( ) Gera uma matriz feita de zeros.
92