92
1 Centro Universitário de Belo Horizonte Instituto de Engenharia e Tecnologia - IET 1 ALGORITMO E ESTRUTURAS DE DADOS PRÁTICAS DE LABORATÓRIO 2014/2 1 Rafael Pinheiro Amantéa

Apostila SCILAB 2015 1

Embed Size (px)

DESCRIPTION

Scilab Unibh

Citation preview

Page 1: Apostila SCILAB 2015 1

1

Centro Universitário de Belo Horizonte Instituto de Engenharia e Tecnologia - IET

1ALGORITMO E ESTRUTURAS DE DADOS

PRÁTICAS DE LABORATÓRIO

2014/2

1 Rafael Pinheiro Amantéa

Page 2: Apostila SCILAB 2015 1

2

Sumário

LINK PARA DOWNLOAD DO SOFTWARE SCILAB 4

INTRODUÇÃO 4

O AMBIENTE SCILAB 4

A JANELA CONSOLE SCILAB 4

JANELA DE COMANDO 5

A JANELA HISTÓRICO DE COMANDOS 6

SCINOTES 6

NAVEGADOR DE VARIÁVEIS 7

NAVEGADOR AJUDA 8

DESENVOLVENDO ARQUIVOS .SCE 8

DECLARAÇÃO DE VARIÁVEIS E CONSTANTES 9

COMANDOS BÁSICOS DE ENTRADA E SAÍDA 9

COMANDO DE SAÍDA 9

COMANDOS DE ENTRADA 11

OPERADORES 11

1. ESTRUTURA SEQUENCIAL 17

EXERCÍCIOS – ESTRUTURA SEQUENCIAL: 19

PROJETO FINAL 1 : CÁLCULO DE CARGA TÉRMICA PARA UMA

CÂMARA DE RESFRIAMENTO. 23

2. ESTRUTURA CONDICIONAL 26

O COMANDO IF – ELSE. 26

ESTRUTURA CONDICIONAL - IF-ELSEIF-ELSE 27

EXERCÍCIOS – ESTRUTURA CONDICIONAL: 29

PROJETO FINAL 2 : DESENVOLVIMENTO DE UM CONVERSOR DE

UNIDADES. 34

Page 3: Apostila SCILAB 2015 1

3

3. ESTRUTURAS DE REPETIÇÃO 37

3.1 O COMANDO “FOR” 37

3.2 O COMANDO “WHILE” 44

EXERCÍCIOS – LAÇOS DE REPETIÇÃO 48

4. VETORES E GRÁFICOS 51

INSERINDO VALORES EM UM VETOR 53

INSERÇÃO DIRETA 53

INSERÇÃO POR MEIO DE UM USUÁRIO 53

MOSTRANDO OS VALORES DE UM VETOR (SAÍDA DE DADOS) 53

SAÍDA DIRETA 53

SAÍDA POR LAÇO DE REPETIÇÃO 53

CONSTRUINDO GRÁFICOS 54

CONSTRUINDO GRÁFICOS 2D 54

AJUSTANDO TÍTULOS E EIXOS 56

EXERCÍCIOS - VETOR 64

PROJETO FINAL 3 : SIMULAÇÃO ! 66

5. MATRIZ 68

INSERINDO VALORES EM UMA MATRIZ 70

INSERÇÃO DIRETA 70

INSERÇÃO POR MEIO DE UM USUÁRIO 70

MOSTRANDO OS VALORES DE UMA MATRIZ (SAÍDA DE DADOS) 70

SAÍDA DIRETA 70

SAÍDA POR LAÇO DE REPETIÇÃO 70

PROJETO FINAL 4 : COMPREENDENDO MATRIZES PARA A GERAÇÃO DE GRÁFICOS

TRIDIMENSIONAIS 77

APENDICE 1 – GERAÇÃO DE NÚMEROS ALEATÓRIOS 84

APENDICE 2 – LISTA DE COMANDOS ÚTEIS EM SCILAB 89

Page 4: Apostila SCILAB 2015 1

4

Link para download do software SCILAB

http://www.scilab.org

Introdução

Existem várias abordagens para se ensinar os fundamentos do SCILAB. Este

material tem como objetivo fazer uma introdução ao SCILAB do ponto de

vista de um usuário da linguagem C.

Como C/C++ e outras linguagens de programação, o SCILAB, possui

operadores: aritméticos, lógicos, condicionais, repetição e outros mais.

Este capítulo vai introduzir a ferramenta SCILAB e explorar os seguintes

conceitos:

O ambiente SCILAB

Com o passar dos anos o SCILAB vêm se popularizando não apenas pela

versatilidade, mas também pela sua interface, que permite um ambiente

amigável e interativo em que algoritmos básicos e avançados, envolvendo

cálculos e simulações podem ser facilmente executados.

O SCILAB apresenta várias janelas que ajudam e permitem que todas as

atividades sejam realizadas pelo usuário. As janelas possuem funções

distintas e serão exemplificadas e explicadas nas seções a seguir.

A janela console SCILAB

A janela principal é chamada de console. Esta é a janela inicial onde as

principais interações no SCILAB acontecem. A janela console gerencia as

sub-janelas associadas a ela. Estas sub-janelas estão localizadas e visíveis

junto da janela console.

Page 5: Apostila SCILAB 2015 1

5

Figura 1 Janela console SCILAB

Janela de comando

A janela de comando é uma sub-janela em que o usuário pode digitar

comandos ou instruções a serem processadas no SCILAB. A janela de

comando vai mostrar o prompt --> , sinal que simboliza que o SCILAB está

pronto para receber instruções. Uma vez digitada a instrução e a tecla enter for digitada, a instrução é imediatamente executada.

Figura 2 Janela de comando SCILAB.

Page 6: Apostila SCILAB 2015 1

6

A janela Histórico de Comandos

A janela de histórico contém todos os comandos ou estruturas anteriormente

executadas na janela de comando.

Figura 3 Janela histórico de comandos

SciNotes

A janela SciNotes (editor) disponibiliza um espaço onde os arquivos .sci

poderão ser criados e editados para a execução. Arquivos .sci também

podem ser abertos ou re-editados e executados. Para ter acesso ao SciNotes

basta clicar na opção aplicativos da janela (principal) console SCILAB.

Page 7: Apostila SCILAB 2015 1

7

Figura 4 Janela do editor SciNotes

Navegador de variáveis

É a sub-janela onde são carregadas, consultadas e salvas as variáveis.

Figura 5 Janela navegador de variáveis

Perceba na figura acima que todas as variáveis que foram criadas, foram

listadas e classificadas quanto ao seu tipo, dimensão e visibilidade. Um duplo

clique em cada uma destas variáveis, na janela navegador de variáveis,

permitirá que você acesse o conteúdo da variável selecionada.

Page 8: Apostila SCILAB 2015 1

8

Navegador Ajuda

A janela ajuda permite acesso a todo o conteúdo de ajuda do SCILAB. Você

pode fazer a busca por informação de ajuda por diretórios organizados por

pacotes de aplicação, ou fazer uma busca por nome de comando, função ou

até mesmo aplicação desejada. Para acessar o conteúdo ajuda, basta clicar

no ícone da janela principal (console SCILAB). É importante salientar

que o help possui a descrição de todos os comandos e trechos práticos de

implementação, que podem ser copiados e colados no SciNotes e em

seguida executados.

Figura 6 Janela Ajuda.

Desenvolvendo arquivos .sce

Digitar um pequeno número de instruções na janela de comando pode ser

fácil e conveniente. Porém o aumento do número de instruções, ou o uso

aplicações mais complexas comprometem toda a praticidade e facilidade da

abordagem utilizando o prompt de comando ( --> ). Uma maneira mais

adequada é descrever estas instruções em um “arquivo texto”, onde a edição

é mais simples e depois solicitar ao SCILAB para carregar este arquivo e

executar estas instruções como se estivessem sido digitadas na janela de

Page 9: Apostila SCILAB 2015 1

9

comando. Desta maneira fica mais fácil para o usuário editar e modificar os

programas e identificar possíveis erros na execução. Este tipo de arquivo

texto contendo as instruções ao ( SCILAB ) é chamado de arquivo .sce. O

arquivo ganha este nome devido a extensão do nome do arquivo a ser

reconhecido pelo SCILAB ser “ .sce ”. Todo o nosso conteúdo será

trabalhado utilizando os arquivos “.sce”.

Declaração de variáveis e constantes

Assim como C/C++, o SCILAB possui algumas regras para a escolha dos

nomes na declaração de variáveis e constantes. Estas limitações devem ser

consideradas e estão descritas a seguir:

x Os nomes de variáveis e constantes devem ser compostos por letras,

números e / ou “underscores”. Os nomes também devem sempre

iniciar com letras.

x As variáveis ou constantes que por ventura vierem a ter palavras

compostas não podem ter espaços entre as palavras. Neste caso

aconselha-se fazer uso do “underscore” entre as palavras.

x O SCILAB é “case sensitive” (difere letras maiúsculas de letras

minúsculas), portanto a variável de nome “numero” é distinta da

variável “Numero”.

Comandos básicos de entrada e saída

Comando de saída

O comando de saída utilizado será o mprintf(). Ele permite mostrar

mensagens, valores de variáveis e/ou a combinação de ambos no prompt de

comando.

Sequência de chamada

mprintf(< texto >,< variável >)

Page 10: Apostila SCILAB 2015 1

10

O campo texto pode ser qualquer caracter, texto, equação ou uma

informação qualquer. A impressão do valor de uma variável pode ser feita por

meio da escolha do formato do tipo de dado seguido pelo nome da variável.

Veja o exemplo:

mprintf(“O valor da pressão 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:

x % Æ Deve ser incluído toda vez que se deseja especificar o formato

de uma variável.

x Tamanho (5 ou qualquer número) Æ Esta parte do comando é

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

decimal.

x Precisão (3 ou qualquer número) Æ Define a quantidade de casas

decimais que serão mostradas na saída.

x Tipo de dado (d,f,e,g,c,s) Æ Este tipo de informação é

necessária e as letras indicam o tipo de dado da variável como

indicado na tabela a seguir:

Tabela 1 Tipos de especificadores

Especificador Saída

%d Inteiro

%f Real

%e Exponencial

%g Menor formato possível

%c Caractere

%s String

Page 11: Apostila SCILAB 2015 1

11

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 contrário do comando mprintf() ele não permite

que valores de variáveis sejam mostrados conjugados com mensagens na

tela. Ao optar pelo comando disp(),você deverá optar por mostrar a

mensagem ou o valor da variável, 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 variável indicada. Veja um

exemplo:

temperatura=input(“Digite a temperatura de ajuste do forno: ”)

Após digitado um valor pelo usuário, este valor será atribuído à variável

temperatura.

Operadores

Após atribuir valores por meio do comando input() , o próximo passo é

então processar os valores por meio das seguintes opções de operadores.

Page 12: Apostila SCILAB 2015 1

12

Tabela 3 Operadores Aritméticos

Símbolo Significado

+ Adição

- Subtração

* Multiplicação

/ Divisão

^ Potência

= Atribuição

( ) Parênteses ( utilize-o

para impor regras)

Tabela 4 Operadores relacionais

Símbolo Significado

> Maior

>= Maior ou igual

< Menor

<= Menor ou igual

== Igualdade

~= Diferença

Page 13: Apostila SCILAB 2015 1

13

Tabela 5 Operadores lógicos

Símbolo Significado

& Operador e

| Operador ou

~ Negação

Para saber mais sobre a implementação de funções complexas (números

complexos), exponenciais (raiz quadrada e logaritmos), trigonométricas

(seno, cosseno, tangente), etc; vá até o menu ajuda e consulte como é feito o

uso da função de sua necessidade. Veja como é fácil:

Exemplo de como utilizar o ajuda em busca de uma função desconhecida

“ Eu gostaria de saber como eu faço para implementar o seno de um número

e a raiz quadrada de um número”

Passo 1: Vá até a janela principal do SCILAB e clique no botão ajuda

Passo 2: Na janela que se abrir você visualizará à esquerda da janela de

ajuda o seguinte menu de opções.

Page 14: Apostila SCILAB 2015 1

14

Figura 7 Pacotes de funções específicas do menu ajuda.

Passo 3: Escolha a pasta Funções Elementares. Você deverá visualizar as

novas opções de funções como na figura a seguir. Observe que você terá um

conjunto de funções relacionadas para diversos conteúdos como: números

complexos, funções exponenciais, operações com matrizes, ordenação e

procura de valores, trigonometria, etc.

Page 15: Apostila SCILAB 2015 1

15

Figura 8 Conjunto de funções elementares do menu ajuda.

Passo 4: Para visualizar como implementar o seno de um número vamos

abrir a pasta trigonometria e selecionar a função sin. Ao escolher a função

seno você deverá visualizar a seguinte janela;

Page 16: Apostila SCILAB 2015 1

16

Figura 9 Tela de ajuda para a função seno.

A janela apresentada na figura 9, possui informações do tipo nome,

sequência de chamamento, parâmetros, descrição e exemplos que podem

ser copiados, colados e executados no scinote.

Passo 5: Para calcular o seno de um número ou uma variável a partir das

informações encontradas no menu ajuda, devemos então 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 informação para calcular a raiz

quadrada de um número.

y = sqrt(x);

Page 17: Apostila SCILAB 2015 1

17

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 números

1 clear; 2 clc; 3 mprintf("Entre com dois numeros. \n"); 4 num1 = input(" Primeiro numero: "); 5 num2 = input(" Segundo numero: "); 6 soma = num1 + num2; 7 mprintf("\n O resultado da soma é %f ",soma); Linha 1: O comando clear limpa a memória do sistema.

Linha 2: O comando clc limpa a janela de saída do SCILAB.

Linhas 3 Mensagem para digitar 2 números

Linhas 4 e 5 : A função input() solicita dois valores ao usuário e armazena

os valores nas variáveis num1 e num2.

Linha 6: As duas variáveis são processadas utilizando o sinal + para realizar

a soma gerando um resultado, o qual é armazenado na variável soma.

Linha 7: O comando mprintf() mostra a mensagem de saída e o valor da

variável soma.

Comentários: Uma prática comum na programação em softwares de

computação científica é a utilização dos comandos clear e clc. Aconselhamos

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

Page 18: Apostila SCILAB 2015 1

18

Resumo do capítulo

Você aprendeu diversos recursos importantes do SCILAB neste capítulo,

incluindo a exibição de informações na tela do console, entrada de dados

pelo teclado e realização de cálculos. Após a leitura deste capítulo você

deverá será capaz de:

x Conhecer o Ambiente SCILAB e identificar as telas principais e suas

funções.

x Utilizar a Ajuda para consultar funções diversas e como utilizá-las.

x Inserir comentários para documentar programas e aprimorar sua

legibilidade.

x Identificar de maneira coerente os tipos das variáveis a serem

utilizadas.

x Escolher e declarar nomes coerentes para as variáveis. O SCILAB é

case-sensitive (diferencia letras maiúsculas de minúsculas).

x Realizar a saída de informações através da tela do console por meio

dos comandos mprintf e disp.

x Realizar a leitura de informações a partir do comando de entrada input.

x Utilizar de maneira correta os operadores aritméticos (tabela 3 –

pág12).

x Utilizar os parênteses para estabelecer uma hierarquia de operações

a serem realizadas. (Ex: Se uma operação tiver parênteses

aninhados, o conjunto mais interno dentro dos parênteses é avaliado

primeiro).

x Desenvolver algoritmos em SCILAB utilizando a estrutura de entrada,

processamento e saída.

Page 19: Apostila SCILAB 2015 1

19

Exercícios – estrutura sequencial:

Exercício 1. Determine se cada um dos exemplos é verdadeiro ou falso. Se

falso explique por quê.

a) Os comentários fazem com que o computador imprima o texto depois

de // na tela quando o programa executa.

b) O SCILAB considera que as variáveis numero e NuMeRo são

idênticas.

c) Os operadores aritméticos * , / , + e – têm todos, o mesmo nível de

precedência.

Exercício 2 Escreva instruções para cada uma das tarefas a seguir:

a) Solicite que o usuário digite um número.

b) Inserir um inteiro e atribuir o valor à variável valor.

c) Mostrar na tela “Este é um programa em SCILAB”.

Exercício 3 Escreva instruções ou comentários que realizam cada uma das

tarefas a seguir.

a) Solicite ao usuário que leia um número e o armazene-o na variável x.

b) Solicite ao usuário que leia um numero e armazene-o na variável y.

c) Solicite ao usuário que leia um numero inteiro e armazene-o na

variável z.

d) Compute o produto dos três inteiros contidos nas variáveis x, y e z e

atribua à variável produto.

e) Exiba a mensagem “O produto das três números é” seguida pelo valor

da variável produto.

Exercício 4. Faça um programa que solicite como entrada um valor de

temperatura em graus Celsius (oC). Após realizada a entrada faça a

conversão da temperatura para Kelvin (K). Após realizada a conversão

mostre na saída do seu programa a temperatura em Kelvin e a temperatura

Page 20: Apostila SCILAB 2015 1

20

em graus Celsius. Para realizar a conversão utilize a relação: K = °C + 273,15;

Veja um exemplo de como pode ser feita a saída do seu programa !

Figura 10 Solução exercício 1

Exercício 5: É hora de dar mais um passo a frente. Com base no seu

programa anterior, acrescente a ele a conversão da temperatura em graus

Celsius para Kelvin e graus Celsius para grau Fahrenheit. Mantenha o

mesmo padrão de saída sugerido, acrescentando a conversão para graus

Fahrenheit. Para realizar a conversão utilize a relação: K = °C + 273,15; °F = °C × 1,8 + 32

Exercício 6: Adaptado de Holloway e Holloway (2006). Suponha que a

altura h(t) de uma bola seja dada pela seguinte função;

h(t)= v0t gt2

2

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

Page 21: Apostila SCILAB 2015 1

21

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

determinado tempo t. Esteja certo de usar nomes adequados para variáveis e

para todos os símbolos da fórmula.

Dica: Quais são as entradas deste problema? ( Que tipo de informação eu preciso do usuário 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 saída deste programa? Veja um exemplo !

Exercício 7, proposto por Holloway e Holloway (2006): Uma aproximação

ainda mais real pode ser feita para o problema apresentado no exercício

número 2. Desta vez temos uma equação que descreve a altura e outra

equação que descreve a velocidade após o lançamento.

Suponha que uma bola de massa qualquer seja arremessada para cima

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

lançamento h(t) no instante t? A resposta, se desprezamos a resistência do

ar e um conjunto de outras pequenas influências, é

Page 22: Apostila SCILAB 2015 1

22

v(t) = v0 gt

h(t)= v0t gt2

2

Onde = 9,81 m/s2 é a aceleração da gravidade na superfície da terra.

Escrevamos um código em SCILAB que solicita V0 e t e então informa as

particularidades da bola (velocidade e altura).

Exercício 8, proposto por Holloway e Holloway (2006). Consideremos um

problema da eletrônica. Suponha que nós tenhamos três resistores elétricos

montados em paralelos, como mostrado na figura abaixo, e gostaríamos de

tratá-lo como um simples resistor. Criemos um algoritmo para calcular a

resistência equivalente dos três resistores paralelos, mas tratado como um.

A lei de Ohm diz que a corrente I i através do i-ésimo resistor é proporcional

à queda da tensão V sobre o resistor, assim estas quantidades são

associadas por V = RiI i onde Ri é chamada a resistência do resistor. A

corrente total passando pelos três resistores é justamente a soma das três

correntes e a queda da tensão é a mesma para todos os três, assim:

I total =VR1

+VR2

+VR3

=V 1R1

+1R2

+1R3

Consequentemente, a lei de Ohm se aplica ao grupo completo de três

resistores, com a resistência Rparalela dada por:

1Rparalela

=1R1

+1R2

+1R3

Figura 11 Holloway e Holloway (2006).

Page 23: Apostila SCILAB 2015 1

23

Observe que tivemos que analisar o problema antes que pudéssemos

escrever qualquer código; frequentemente este é o caso, e a análise do

problema e a confecção da solução são usualmente mais difíceis do que a

implementação.

Escrevamos um código em SCILAB que solicita ao usuário os valores das

três resistências (R1 , R2 , R3) e retorna a resistência dos três em paralelo

(Rparalela).

PROJETO FINAL 1 : CÁLCULO DE CARGA TÉRMICA PARA UMA CÂMARA

DE RESFRIAMENTO.

A parcela de carga térmica englobada sob o título de diversos, é devida aos

equipamentos mecânicos, iluminação, pessoas e, demais elementos que

constituem fonte de calor no interior das câmaras.

Os equipamentos mecânicos são normalmente, os ventiladores dos UNIT

COOLERS cuja potência é 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 situação:

Motor e carga no interior da câmara;

Qmotor =Pc.v

motor

632 kcal / dia

em que:

“ ” é o número de horas de funcionamento por dia de equipamento;

“ ” é o rendimento do motor elétrico de acionamento.

A dissipação provocada pela iluminação é dada por;

Qiluminação = 0,86w A kcal /dia

motor

Page 24: Apostila SCILAB 2015 1

24

em que ;

“ W “ é a potencia da lâmpada (W/m2)

“ ” é o número de horas de funcionamento por dia de equipamento;

“A” é a área da câmara.

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 número de pessoas;

"q" o calor liberado por pessoa e por hora, o qual cresce com o

abaixamento de temperatura.

Prática !

Você deve ter percebido que as informações necessárias para o cálculo de

carga térmica devido a fatores diversos leva em consideração a quantidade

de pessoas, máquinas e lâmpadas no interior da câmara. Que tal

construirmos um programa em SCILAB para realizar estes cálculos? Para

isto leia com atenção o enunciado a seguir.

Elabore um programa para calcular a carga térmica de uma câmara frigorifica

com as seguintes características:

x Área da câmara 200 m2.

x Para realizar o transporte de carga dentro da câmara serão

necessários 10 homens/hora por 24 horas. (Utilize como 300 kcal/hora

o calor liberado por pessoa)

Page 25: Apostila SCILAB 2015 1

25

x Uma empilhadeira será utilizada 2 horas por dia. Ela possui um motor

com potência de 10 c.v. e eficiência 0,85.

x No interior da câmara teremos lâmpadas fluorescente especial para

baixas temperaturas na proporção de 10 W/m2 (acendimento 4

horas/dia).

x Serão previstas também lâmpadas germicidas na proporção de 2

W/m2 (acendimento 24 horas).

Utilize a saída a seguir como forma de conferir os seus resultados!

Após desenvolver o seu programa e verificar o funcionamento, realize

pequenas simulações variando a quantidade de pessoas, empilhadeiras ou

lâmpadas. Veja dentre estes três fatores qual é o responsável por dissipar

maior quantidade de calor dentro da câmara2.

Figura 12 Solução, projeto câmara de resfriamento.

2 Toda a formulação para o cálculo de carga térmica foi adaptada de COSTA,

ENNIO CRUZ da. Refrigeração. Editora Edgard Blucher, 3 edição, 2011.

Page 26: Apostila SCILAB 2015 1

26

2. ESTRUTURA CONDICIONAL A estrutura condicional permite que o programa usufrua de um mecanismo de

seleção e um conjunto de instruções em um processo qualquer.

O comando if – else.

Na indústria de um modo geral, ambientes com temperatura e umidade

relativa controlados são necessários para a manutenção da qualidade de

processos de fabricação e armazenamento.

Na indústria de refratários especificamente, a manutenção da umidade

relativa em baixos teores faz-se necessária no processo de composição de

moldes, tendo em vista que altas umidades relativas no ambiente podem

ocasionar danos significativos no processo de produção (lembre-se do saleiro

na sua casa em semanas chuvosas). Portanto, a direção da fábrica solicitou

ao engenheiro responsável que desenvolvesse uma lógica de controle de

umidade relativa no ambiente de composição de moldes da fábrica. Para que

os moldes atendessem aos padrões de qualidade da fábrica era necessário

que a umidade relativa ambiente fosse mantida abaixo de 40%. Caso

contrário uma mensagem de alerta deveria ser exibida.

O engenheiro responsável 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 padrões de qualidade da

fábrica.

Veja o código no exemplo 2.1 a seguir:

Page 27: Apostila SCILAB 2015 1

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 padrões"); 7 else

8 mprintf("\n -----ALERTA !!! ------ALERTA !!!! -------"); 9 mprintf("\n UMIDADE RELATIVA FORA DOS PADRÕES !!!");

10 end

11 mprintf("\n Fim de programa");

Linha 1: O comando clear limpa a memória do sistema.

Linha 2: O comando clc limpa a janela de saída do SCILAB.

Linha 3: Mostra mensagem na tela por meio do comando mprintf().

Linha 4: A função input() solicita o valor da umidade relativa e armazena o

valor na variável umidade .

Linhas 5 e 6: Verifica se a variável umidade possui um valor armazenado

menor ou igual a 0.4. Quando esta condição for verdadeira a mensagem é

mostrada.

Linhas 7 a 10: Caso a condição imposta na linha 5 seja falsa as mensagens

de alerta são mostradas na tela.

Estrutura condicional - if-elseif-else

Um exemplo prático da utilização deste comando pode ser encontrado no

menu ajuda do SCILAB. Veja um trecho de código 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 comparação com

viscosidades de outros líquidos. Se eu encher o mesmo copo com água, por

exemplo, o copo irá drenar mais rapidamente.

Page 28: Apostila SCILAB 2015 1

28

A viscosidade descreve a fricção 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 também varia em função da

temperatura com ilustra a tabela a seguir:

Tabela 6 Variação da viscosidade com a temperatura.

Temperatura (oF) 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 informações sobre a viscosidade dos fluidos, desenvolva um

programa em SCILAB que receba como entrada a temperatura do fluido e

mostre na saída a sua viscosidade. Veja o exemplo 2.2 a seguir.

1 mprintf("------------Cálculo 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) ");

Page 29: Apostila SCILAB 2015 1

29

13 else 14 mprintf("\n Valor inválido !!! ");

15 end

linhas 7, 9, 11: Por meio do comando elseif() as condições de temperatura

do fluido são verificadas. Repare que o operador lógico & foi necessário para

esta verificação.

Figura 13 Tela de saída para exemplo de cálculo de viscosidade

Resumo do capítulo

Neste capítulo mostramos as estruturas de condição única if e instrução de

condição composta if - else. Após a leitura deste capítulo você deverá

ser capaz de:

x Identificar a necessidade de uso de uma instrução do tipo condicional.

x Implementar por meio do SCILAB uma instrução do tipo condicional.

x Saber diferenciar as estruturas condicionais simples das estruturas

condicionais compostas e identificar aplicações diversas.

x Saber ler e interpretar as tabelas de operadores relacionais e lógicos

(tabelas 4 e 5 páginas 12 e 13).

x Utilizar os operadores relacionais e lógicos e criar condições simples e

ou compostas em estruturas condicionais.

Exercícios – estrutura condicional:

Exercício 1: Escreva instruções para cada uma das tarefas a seguir:

Page 30: Apostila SCILAB 2015 1

30

a) Solicite que o usuário digite um número.

b) Inserir um inteiro e atribuir o valor à variável valor.

c) Escreva a mensagem “O número digitado é maior ou igual

a zero” Se a variável valor for maior ou igual a zero.

Exercício 2 Escreva instruções ou comentários que realizam cada uma das

tarefas a seguir.

a) Solicite ao usuário que leia um número e o armazene-o na variável x.

b) Solicite ao usuário que leia um numero e armazene-o na variável 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 estão fora dos intervalos especificados

nas letras c) e d) e escreva na tela o valor de x e o valor de y.

Exercício 3: Questão adaptada de (IFTRN).

Sendo v1 = 15, v2 = 10, v3 = 5, v4 = 0, defina qual será a resposta

(verdadeiro ou falso) para as sentenças lógicas 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)

Page 31: Apostila SCILAB 2015 1

31

Exercício 4: Desenvolva um programa em SCILAB que receba como entrada

a temperatura do fluido e mostre na saída 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).

Exercício 5: Adaptado de Raymond e Kapuno Jr (2008). Desenvolva um

programa em SCILAB que recebe como entrada um valor de temperatura em

graus Celsius (oC) e retorne como saída a fase que se encontraria a água

nesta temperatura (sólido, líquido ou gasoso).

Exercício 6: Adaptado de Raymond e Kapuno Jr (2008). O número de

Reynolds pode ser utilizado para caracterizar diferentes regimes de

escoamento, tais como laminar, transição ou turbulento. O escoamento

laminar ocorre para baixos números de Reynolds (Re 2100), onde as forças

viscosas são dominantes, e é caracterizado por suave movimento do fluido.

O fluxo turbulento ocorre em um elevado número de Reynolds (Re> 4000) e

é dominado por forças de inércia, que tendem a produzir redemoinhos

aleatórios, vórtices e instabilidades. Para valores entre 2100 e 4000,

classificamos o escoamento como escoamento em transição.

Diante das informações sobre o número de Reynolds desenvolva um

programa em SCILAB que classifique um escoamento dado o número de

Reynolds.

Exercício 7: Implemente um algoritmo em SCILAB que retorne o valor da

função abaixo após receber um valor qualquer de entrada.

°¿

°¾

½

°¯

°®

dd

xxx

xxxf

3,32,3

2,22

Exercício 8: Vamos recordar o problema proposto no exercício 3 da

unidade1.

Page 32: Apostila SCILAB 2015 1

32

Suponha que uma bola de massa qualquer seja arremessada para cima

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

lançamento h(t) no instante t? A resposta, se desprezamos a resistência do

ar e um conjunto de outras pequenas influências, é

v(t) = v0 gt

h(t)= v0t gt2

2

Onde = 9,81 m/s2 é a aceleração da gravidade na superfície da terra.

O que aconteceria se jogássemos esta bola em outro planeta? Como

poderíamos fazer este tipo de estudo?

Que tal implementarmos um menu de opções e deixarmos que o usuário

escolha o planeta em que esta bola será jogada!?

Escrevamos um código em SCILAB que permita que o usuário escolha um

planeta em que quer jogar a bola e solicita v0 e t e então informa as

particularidades da bola (velocidade e altura). Aproveite o seu programa para

verificar qual a relação existente entre a gravidade, altura da bola e

velocidade da bola. Utilize a tabela a seguir para a sua implementação.

Tabela 7 Gravidade dos planetas do sistema solar.

Planeta Gravidade (m/s2)

Mercúrio 3,7

Vênus 8,8

Terra 9,8

Marte 3,8

Júpter 26,4

Saturno 11,5

Urano 9,3

Page 33: Apostila SCILAB 2015 1

33

Netuno 12,2

Plutão 0,6

Veja um exemplo do menu de opções !

Figura 14 Exemplo menu de opções.

Exercício 9: Olimpíada Brasileira de Informática – OBI2005 – Modalidade

Programação Nível 1

A Companhia de Taxi Tabajara (CTT) é uma das maiores empresas de

transporte do país. 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 bicombustíveis (carros que podem utilizar como

combustível tanto álcool quanto gasolina). Além do maior conforto para os

passageiros e o menor gasto com manutenção, com os novos carros é

possível uma redução adicional de custo: como o preço da gasolina está

sujeito a variações muito bruscas e pode ser vantagem, em certos

momentos, utilizar álcool como combustível. Entretanto, os carros possuem

um melhor desempenho utilizando gasolina, ou seja, em geral, um carro

percorre mais quilômetros por litro de gasolina do que por litro de álcool.

TAREFA

Você deve escrever um programa que, dados o preço do litro de álcool, o

preço do litro de gasolina e os quilômetros por litro que um carro

Page 34: Apostila SCILAB 2015 1

34

bicombustível realiza com cada um desses combustíveis, determine se é

mais econômico abastecer os carros da CTT com álcool ou com gasolina. No

caso de não haver diferença de custo entre abastecer com álcool ou gasolina

a CTT prefere utilizar gasolina.

ENTRADA

A entrada é composta por uma linha contendo quatro números reais com

precisão de duas casas decimais A, G, Ra e Rg, representando

respectivamente o preço por litro do álcool, o preço 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 padrão

(normalmente o teclado).

SAÍDA

A saída deve ser composta por uma única linha contendo o caractere ‘A’ se é

mais econômico abastecera frota com álcool ou o caractere ‘G’ se é mais

econômico ou indiferente abastecer a frota com gasolina.

A saída deve ser escrita no dispositivo de saída padrão (normalmente a tela).

RESTRIÇÕES

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 informações importantes para o desenvolvimento do seu conversor de unidades.

Page 35: Apostila SCILAB 2015 1

35

Algumas relações de conversão de unidades:

Força: 1 N = 0,102 kgf= 0,2249 lbf

1 N = 1 kg m / s2

Pressão: 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

Potência: 1 W = 3,412 BTU / h = 0,85984 kcal / h = 0,001359 CV = 0,001341 HP

Prática!

É hora de desenvolver o seu próprio conversor de unidades. Você deverá

utilizar as informações fornecidas no texto sobre conversão de unidades. O

seu conversor deverá ter um menu inicial com as seguintes opções

x Temperatura

x Força

x Pressão

x Energia

x Potência

O usuário deverá escolher qual o tipo de unidade ele quer realizar a

conversão. Após o usuário realizar a escolha, ele deverá escolher em

qual unidade o valor a ser convertido vai ser digitado.

Exemplo:

x Caso o usuário escolha converter temperaturas ele vai selecionar a

opção referente à temperatura no menu;

Page 36: Apostila SCILAB 2015 1

36

x Após ter selecionado temperatura ele deverá escolher em qual

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

Fahrenheit.

x Como saída o programa deverá então mostrar a temperatura digitada

pelo usuário em todas as três unidades de temperatura.

Veja como exemplo a tela de saída após utilizar o conversor

Figura 15 Exemplo de saída para o programa conversor de unidades

Page 37: Apostila SCILAB 2015 1

37

3. ESTRUTURAS DE REPETIÇÃO

3.1 O comando “for”

O comando “for” repete um conjunto de instruções a partir de um número

conhecido de repetições. Este comando segue o seguinte formato:

for variável = início : incremento : fim

Bloco de comandos

end

Exemplo

Em um exercício do roteiro anterior analisamos a importância do termo

“gravidade” (g), no modelo proposto;

v(t) = v0 gth(t)= v0t gt2 / 2

Analisaremos agora, qual o comportamento da velocidade e da altura diante

da variação do tempo. Perceba que tanto a velocidade v(t), quanto a altura

h(t) , são em função do tempo. Este tipo de análise é 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 análise no seu caderno você seria orientado pelo

seu professor de cálculo a desenvolver o seguinte raciocínio:

Page 38: Apostila SCILAB 2015 1

38

Tabela 8 Exemplo de cálculo 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ó é viável quando o número de repetições

é pequeno. Imagine se precisarmos de observar o comportamento das

variáveis diante de um número grande de repetições ? 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 iteração. (exemplo 3.1)

1 clear;

2 clc; 3 g=9.81;

4 mprintf("Simulação do arremeço de uma bola no planeta terra \n\n"); 5 v0 = input(" Digite a velocidade inicial do arremeço (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

Page 39: Apostila SCILAB 2015 1

39

linha 7 Observe a estrutura do comando for. A variável t é a variável 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 iteração. Portanto a cada iteração os cálculos são

efetuados nas linhas 8 e 9 e mostrados nas linhas 10 e 11.

Veja a saída dos resultados a seguir:

Figura 16 Tabela de solução utilizando comando for

Como você pode perceber, de maneira rápida e segura os cálculos foram

efetuados e a simulação nos permite visualizar alguns resultados

interessantes.

A primeira observação que os resultados acima nos permitem fazer é que as

equações conseguem descrever o movimento de subida e decida da bola.

Veja os valores de altura durante a simulação. Do tempo 0 ao tempo 1,5 a

bola vai ganhando altura, até que no tempo = 1,5 segundos ela atinge a sua

altura máxima ! Após 1,5 segundos a bola então começa a perder altura.

Page 40: Apostila SCILAB 2015 1

40

De maneira semelhante a mesma análise pode ser feita quanto a velocidade

da bola. Veja que no tempo 0 a bola sai com a velocidade máxima, a

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 trajetória

descendente, caindo !

Exemplo 2 : Somatórios

O uso de somatórios abrange diversas áreas do conhecimento. Possui

aplicações variadas em estatística, ciência da computação, engenharias,

matemática, física, química, etc.

Observe a tabela a seguir.

Tabela 9 Representação matemática e em SCILAB para um somatório

S= ii=0

n

for i:1:n

s = s+i;

end

A tabela acima apresenta um paralelo entre a representação matemática de

um somatório e a sua implementação em SCILAB. Veja a seguir um exemplo

da implementação desta estrutura.

A temperatura ambiente de uma região pode ser obtida a partir de um ajuste

de dados experimentais por uma série de Fourier (DUCHON e HALE 2012).

A equação a seguir foi obtida a partir dos dados experimentais de

temperatura da cidade de Belo Horizonte no mês de agosto de 2013.

Page 41: Apostila SCILAB 2015 1

41

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

média do mês de agosto. (Exemplo 3.2)

1 clear; 2 clc; 3 mprintf("Cálculo da temperatura média no mês 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 média do mês de agosto-2013 em BH foi de %2.2f (C) ",media);

linha 4 Inicializa a variável soma.

linha 5 A variável t é a variável 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” não é necessário

ajustar o incremento. Lembre-se t final foi ajustado como 720 horas, afinal em

um mês temos 30 dias de 24 horas.

linha 6 A variável temperatura guarda o resultado da temperatura calculada

para a hora t.

linha 7 Nesta linha temos a implementação do somatório. Em diversos livros

de algoritmos você irá encontrar esta estrutura também chamada de

acumulador.

linha 9 A média é calculada por meio da divisão do somatório das

temperaturas pela quantidade de amostras.

linha 10 Mostra a média calculada.

Page 42: Apostila SCILAB 2015 1

42

Figura 17 Tela de saída após processamento da média.

Resumo do item 3.1

Nesta seção mostramos a estrutura de repetição for. Após a leitura deste

capítulo você deverá ser capaz de:

x Identificar a necessidade de uso da estrutura de repetição for.

x Identificar os parâmetros que compõem o comando for (início,

incremento e fim) e implementar o comando for por meio do SCILAB.

x Identificar quando e como implementar somatórios.

Exercícios – Laços de repetição comando for

Exercício 1 Escreva uma instrução em SCILAB ou um conjunto de instruções

em SCILAB para realizar cada uma das seguintes tarefas:

a) Imprima os inteiros de 1 a 20 utilizando o comando for.

b) Imprima os números ímpares entre 1 e 9 utilizando o comando for.

Realize esta tarefa ajustando apenas os parâmetros de inicio,

incremento e fim do comando for.

c) Mostre a soma dos números pertencentes ao intervalo 45 e 55

inclusive.

Exercício 2 Faça um programa em SCILAB que faça a leitura de 3 valores e

mostre os valores digitados pelo usuário. Você deverá utilizar o comando for. Utilize como referência a tela de saída a seguir.

Page 43: Apostila SCILAB 2015 1

43

Figura 18 Exemplo de entrada e saída de dados utilizando estrutura de repetição

Exercício 3 Desenvolva um programa em SCILAB que calcule a

exponenciação entre dois números x e y escolhidos pelo usuário (xy). Para

realizar os cálculos você não poderá utilizar o comando (^).

Dica: A operação 53 deve ser feita da seguinte maneira: 5 x 5 x 5 = 125. A

operação de multiplicação foi repetida 3 vezes. Quais serão as entradas

deste programa ?

Exercício 4 Vimos no exemplo que ilustra a utilização de somatórios que a

temperatura ambiente de uma região pode ser obtida a partir de um ajuste de

dados experimentais por uma série de Fourier. A função a seguir foi obtida a

partir dos dados experimentais de temperatura da cidade de Belo Horizonte

no mês 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 informações sobre a temperatura em Belo Horizonte nas primeiras

48 horas de agosto:

a) A temperatura média do período

Page 44: Apostila SCILAB 2015 1

44

b) A maior temperatura registrada no período

c) A menor temperatura registrada no período

d) Quantas horas a temperatura ficou acima de 19 oC.

e) Quantas horas a temperatura ficou abaixo de 16 oC.

3.2 O Comando “While”

O comando while ou (enquanto em pseudocódigo) é um comando de

repetição indicado para situações em que não se conhece o número de

repetições a serem realizadas. Sua sintaxe em SCILAB é a seguinte:

while (condição)

Bloco de comandos

end

Exemplo

Um programa foi desenvolvido para ler um conjunto não determinado de

valores e mostrar na saída;

a) o valor lido;

b) o quadrado do número lido;

c) o cubo do número lido;

d) a raiz quadrada do número lido;

e) se é par ou ímpar.

Para encerrar a digitação um número menor ou igual a zero deverá ser

digitado.

Veja uma sugestão de implementação para este problema no código a

seguir:

Page 45: Apostila SCILAB 2015 1

45

1 clear; 2 clc; 3 numero=input("Digite um número 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 número %d é ímpar ",numero); 15 end 16 mprintf("\n\n\n"); 17 numero=input("Digite um número inteiro"); 18 end

linhas 1 e 2 Limpa a memória e tela

linha 3 Inicialização da variável numero.

Linha 4 Início do bloco de repetições. É importante destacar a inicialização

da variável numero feita na linha 3. O valor atribuído a esta variável é quem

vai decidir se o algoritmo executará o bloco de repetições ou não. Lembrando

que o comando de repetição while é composto por uma condição. Caso a

condição seja verdadeira as instruções pertencentes ao corpo do comando

serão executadas, caso contrário o comando de repetição não é executado.

Na linha 4 em específico se a variável numero conter um valor igual ou

inferior a zero o comando while não será executado.

linha 11 Para verificar se um número é par ou não utilizou-se o comando

modulo(numero,2). Este comando retorna o resto da divisão de numero por 2. Consequentemente se o resto retornado for igual a zero, podemos

afirmar que a variável número contém um valor par.

Linhas 17 Uma nova leitura para a variável numero deve ser feita. Nesta

linha é que o programa possibilita ao usuário escolher um novo número para

uma nova sequência de processamento ou escolher um valor para terminar

laço de repetição.

Page 46: Apostila SCILAB 2015 1

46

Veja um exemplo de aplicação.

Nas indústrias química, agrícola e de alimentos é muito comum o uso de

equações empíricas para estimar a secagem de diversos produtos. Estas

equações são válidas para determinadas faixas de temperaturas e umidades

relativas. O objetivo destas equações é estimar após um determinado tempo

de secagem qual o teor de umidade do produto. Estas equações possuem

formas diversificadas, uma das formas mais utilizadas é conhecida pelo

seguinte formato (BROOKER et al, 1992):

U(t)= e ktn

em que :

U(t) é o teor de água do produto,

t é o tempo de secagem em horas,

k e n são parâmetros que dependem do produto;

3Um engenheiro químico gostaria de conhecer o comportamento da secagem

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

faça a simulação 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 implementação 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("-------Simulação de secagem--------- \n\n"); 8 mprintf("\n\t\t t(h)\t\t U(%%) ");

3 Informação o estudo da cinética de secagem de grãos e alimentos é de extrema

importância para a manutenção da qualidade do produto e para o projeto de secadores.

Page 47: Apostila SCILAB 2015 1

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 Inicialização das variáveis.

linha 6 A variável teor de umidade foi inicializada em 1 (equivalente a 100%).

Basta você ver que para o tempo igual a zero a equação vale 1. Perceba a

importância desta inicialização, é esta inicialização que permite o programa

executar as instruções no bloco de comandos do comando while. Em outras

palavras esta inicialização torna a condição no comando while verdadeira e

assim permite a repetição 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 cálculo é efetuado e logo

após mostrado na tela.

Veja a saída da simulação feita em SCILAB

Figura 19 Tela de saída para simulação de secagem.4

4 É importante lembrar que o modelo proposto para a simulação da secagem neste material está em uma forma extremamente simplificada. A simulação de secagem em modelos complexos pode envolver programas com diversas variáveis e funções, podendo levar até dias para se obter os resultados simulados.

Page 48: Apostila SCILAB 2015 1

48

Observe que a tabela de resultados mostrada na saída indica que, para o

produto simulado secar até 13% de umidade, precisaríamos 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 capítulo mostramos a estrutura de repetição while. Após a leitura

desta seção você deverá será capaz de:

x Identificar a necessidade de uso da estrutura de repetição while.

x Implementar o comando while por meio do SCILAB.

x Utilizar contadores e somatórios.

Exercícios – Laços de Repetição

Exercício 1

Faça um programa em SCILAB que faça a leitura de 5 valores e mostre os

valores digitados pelo usuário. Você deverá utilizar o comando while.

Exercício 2 Adaptado de Raymond e Kapuno Jr (2008)

Desenvolva um programa em SCILAB que receba como entrada o valor de

potência em Watt (W) e converta este valor para BTU/h. Mostre na tela o

resultado da conversão e em seguida pergunte ao usuário se ele deseja

realizar uma nova conversão. O usuário deverá digitar 0 (zero) para terminar

o programa. Veja na figura a seguir um exemplo de saída para este

programa.

Page 49: Apostila SCILAB 2015 1

49

Figura 20 Saída para conversão de potência

Exercício 3

Escreva um programa que mostre todos os números divisíveis por um

número indicado pelo usuário dentro de um intervalo também indicado pelo

usuário. O usuário 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 saída

a seguir.

Figura 21 Saída exemplo para o exercício 3

Exercício 4

Devido ao uso frequente, a descarga da bateria de equipamentos eletrônicos

pode se comportar de acordo com a função proposta a seguir;

y(t)= y0 ×2 0,1( )t

em que;

y0 é a carga inicial da bateria;

y(t) é a quantidade de carga após t horas de uso.

Page 50: Apostila SCILAB 2015 1

50

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

carga inicial da bateria e mostre como saída 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

obedeça a seguinte tabela:

Carga (%) Aviso

10% < carga ≤ 20% Bateria fraca !

1% ≤ carga ≤ 10% Conecte ao carregador

Dica: Procure identificar qual laço de repetição utilizar. Existe algum critério

de parada ?

Veja um exemplo de saída para o exemplo 1

Figura 22 Exemplo de saída para o exercício 1 - descarga de bateria

Page 51: Apostila SCILAB 2015 1

51

4. VETORES E GRÁFICOS

Um vetor é um tipo de variável que pode armazenar um ou mais valores do

mesmo tipo de dado.

Vejamos como isto funciona na prática. Imagine que você precisa armazenar

os valores 15, 23, 40, 12, 37. Até então você faria o seguinte raciocínio para

armazenar estes valores:

clear; clc; num1=15; num2=23; num3=40; num4=12; num5=37; mprintf("\n Valor armazenado na variável num1 = %i",num1); mprintf("\n Valor armazenado na variável num2 = %i",num2); mprintf("\n Valor armazenado na variável num3 = %i",num3); mprintf("\n Valor armazenado na variável num4 = %i",num4); mprintf("\n Valor armazenado na variável num5 = %i",num5);

Perceba que até então não havia outra alternativa para você armazenar estes

5 valores a não ser criando 5 variáveis distintas para guardar o mesmo tipo

de valor. Perceba também que para mostrar os 5 valores na saída você

precisaria de novas 5 linhas de comando para mostrar os 5 valores distintos

na saída do programa. Veja a saída após a execução do código acima.

Figura 23 Exemplo de saída para diferentes variáveis.

Este tipo de abordagem torna-se inviável na medida em que a quantidade de

dados a serem armazenados aumenta. Imagine se você precisar armazenar

centenas ou milhões de dados do mesmo tipo ? (Isto ocorre com frequência

na engenharia) O que você faria ? Criar centenas ou milhões de variáveis

Page 52: Apostila SCILAB 2015 1

52

para armazenar cada valor será inviável. Nesta situação, a utilização de um

vetor é a saída mais indicada.

Que tal então 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 posição %i do vetor num",num(i),i); 6 end

Vamos começar pela linha 3 do código acima. Na linha 3 os nossos 5 valores

foram guardados em uma única variável chamada num. Isto é um vetor ! Veja

a ilustração abaixo:

num = 15 23 40 12 37

1 2 3 4 5

A variável num comporta-se como a ilustração acima. Cada um dos 5 valores

ganhou um espaço na variável num e cada espaço possui um índice

responsável por identificar em qual posição do vetor o valor foi armazenado.

Portanto o valor 15 está armazenado na posição 1; o valor 23 está

armazenado na posição 2; o valor 40 está armazenado na posição 3 ; o valor

12 está armazenado na posição 4 e o valor 37 está armazenado na posição

5.

Para compreender melhor esta associação entre posições e valores observe

as linhas 4 a 6 do código acima. Para fazer a saída dos valores do vetor

num, utilizamos uma estrutura de repetição. A estrutura definida na linha 4

utiliza a variável i como controle. Aproveitaremos então a variável i para

percorrer todo o vetor, executando o comando de saída, mostrando na tela o

valor armazenado Æ num(i) para cada posição Æ i como mostra a figura a

seguir.

Page 53: Apostila SCILAB 2015 1

53

Figura 24 Exemplo de saída de valores de um vetor

Inserindo valores em um vetor

A inserção de valores em um vetor pode ser feita de diferentes maneiras. A

seguir apresentaremos as mais usuais.

Inserção direta

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

Inserção por meio de um usuário

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

Mostrando os valores de um vetor (Saída de dados)

Saída direta

disp(num);

Saída por laço de repetição

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

Page 54: Apostila SCILAB 2015 1

54

Construindo Gráficos

Construindo gráficos 2D

A construção de um gráfico 2D em SCILAB pode ser feita por meio da função

plot( ) . O forma básica para o comando é;

plot(x,y)

em que x é um vetor que contém os valores para a coordenada-x do gráfico e

y é o vetor que contém os valores para a coordenada-y do gráfico.

Exemplo: Plote o gráfico da função f (x)= 3x2 +4x+1 . Faça x variar no

intervalo de -5 a 4 com incrementos de 0,5. Veja o código em SCILAB a

seguir;

Opção 1: Na opção 1 o vetor x é declarado de maneira direta. Repare que o

vetor y é automaticamente criado pelo SCILAB. Basta atribuir a y a

expressão da função desejada e o SCILAB realiza o cálculo de y para cada

posição do vetor x. Em seguida a função plot ( ) e os vetores x e y foram

utilizados para fazer o gráfico da função.

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); Opção 2: A opção 2 apenas se difere da opção 1 quanto a criação do vetor x.

O vetor x foi criado a partir da função linspace(valor 1, valor2 ,

valor 3 ). A função linspace() funciona da seguinte maneira: o

primeiro valor dentro do parênteses 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 parênteses representa o número de elementos que serão

criados para este vetor.

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

Page 55: Apostila SCILAB 2015 1

55

plot(x,y);

Opção 3. A opção 3 apresenta uma estrutura de criação dos vetores por

meio de laços de repetição. Os vetores x e y vão sendo criados na medida

em que as iterações, ou repetições, vão acontecendo. Perceba que o

contador i a cada iteração é utilizado para calcular um novo valor de x e um

novo valor de y para a posição 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 gráfico a seguir foi gerado para a função proposta no exemplo.

Independente da opção escolhida pelo usuário para criar gráfico da função

proposta o resultado esperado é o apresentado a seguir.

Page 56: Apostila SCILAB 2015 1

56

Figura 25 Janela de saída gráfica.

Ajustando Títulos e eixos

O SCILAB permite que façamos ajustes nos títulos e eixos dos gráficos. Veja

as opções disponíveis:

title() Ajusta o título na parte superior do gráfico.

xlabel() Ajusta o título para o eixo x.

ylabel() Ajusta o título do eixo y.

Veja o código e a nova figura após a inclusão dos comandos de formatação

de eixos e títulos.

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;

Page 57: Apostila SCILAB 2015 1

57

end plot(x,y); title("Gráfico de f(x)= 3*x^2 + 4*x + 1"); xlabel("Eixo x"); ylabel("Eixo y");

Figura 26 Novo gráfico após formatação de título e eixos.

DICA: Ajuda sobre diferentes estilos de linhas, cores e formatações podem ser encontrados no menu ajuda ou clicando no menu editar após aparecer a janela do gráfico. A figura a seguir ilustra o menu editar.

Page 58: Apostila SCILAB 2015 1

58

Figura 27 Opções de configuração de gráfico

Figura 28 Editor de gráfico.

Page 59: Apostila SCILAB 2015 1

59

Dica: para plotar um gráfico com várias curvas, siga o exemplo a seguir:

Como plotar um gráfico da função f (x)= ax+b para diferentes

valores de a = ( 1, 3, 5, 7) e b = 1, no intervalo 0 ≤ x ≤ 10? Estude o código 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("Gráfico de f(x)= a*x^2 + b"); xlabel("X"); ylabel("Y");

Page 60: Apostila SCILAB 2015 1

60

Figura 29 Exemplo de gráfico com múltiplos comportamentos.

Exemplo de aplicação: (exemplo 4.2)

Um engenheiro decidiu acompanhar o funcionamento do secador de grãos

representado pela figura abaixo.

Figura 30 Secador de grãos (RODRIGUES, 2010)

Para realizar esta inspeção, o engenheiro instalou um sensor de temperatura

na câmara de aquecimento de ar e um tubo de pitot para medir a velocidade

Page 61: Apostila SCILAB 2015 1

61

do ar na entrada da câmara de aquecimento. Para coletar as informações 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 informações a cada 0,5horas (meia hora) e mostrar:

x a temperatura média na câmara de secagem;

x a velocidade média do ar de secagem;

x A maior temperatura e velocidade registradas durante as 10 horas;

x A menor temperatura e velocidade do ar registradas durante as 10

horas;

x Os gráficos mostrando o comportamento da temperatura e velocidade

do ar durante as 10 horas.

Veja o código 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("Variação da velocidade durante 10 horas"); 15 xlabel("Tempo (h)"); 16 ylabel("Velocidade (m/s)"); 17 plot(tempo,velocidade,'bo-'); 18 scf(2); 19 title("Variação da Temperatura durante 10 horas"); 20 xlabel("Tempo (h)"); 21 ylabel("Temperatura (Celsius)"); 22 plot(tempo,temperatura,'r-');

Page 62: Apostila SCILAB 2015 1

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 são inicializados na sua primeira posição (posição 1) com os valores de tempo inicial. linhas 7 a 12 Nesta parte do código é feita a simulação da aquisição de dados a cada tempo. Para isto foi utilizado o comando grand(1, distribuição normal, media, desvio padrão) , este comando gera números aleatórios obedecendo uma distribuição normal, uma média e um desvio padrão pré definidos. Para cada tempo simulado valores de temperatura e velocidade são gerados e armazenados em seus respectivos vetores. A variável i é incrementada a cada iteração até que o critério de parada (tempo<10) for alcançado. linhas 13 a 22. Nesta parte do código são executados os comandos para a geração dos gráficos (plot), títulos das figuras (title) e título das eixos (xlabel e ylabel). Os comandos scf( ) dão nome às janelas de gráficos, identificando-os e permitindo criar figuras distintas uma das outras. linhas 23 a 28 Neste trecho foram calculadas as médias através 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. Saídas

Page 63: Apostila SCILAB 2015 1

63

Figura 31 Tela de saída em SCILAB para exemplo1 vetor.

Figura 32 Variação da velocidade do ar de secagem.

Page 64: Apostila SCILAB 2015 1

64

Figura 33 Variação da temperatura de secagem na câmara de secagem

Resumo do capítulo 4

Neste capítulo mostramos o uso de vetores. Após a leitura deste capítulo

você deverá ser capaz de:

x Identificar a necessidade de uso de vetores.

x Inicializar um vetor de maneira direta ou por meio do usuário.

x Realizar a saída de dados de um vetor.

x Implementar operações de soma e busca de valores em um vetor.

x Plotar gráficos para as mais diversas aplicações.

Exercícios - Vetor

Exercício 1 Determine se cada um dos seguintes é verdadeiro ou falso. Se

falso justifique.

Page 65: Apostila SCILAB 2015 1

65

a) Para referir-se a uma localização 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 instrução for.

Exercício 2 Escreva instruções em SCILAB para realizar cada uma das

seguintes tarefas:

a) Exiba o valor do sétimo 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 posições de um

vetor B que contém 34 elementos.

Exercício 3 Faça um programa em SCILAB que solicite ao usuário a

digitação de 10 números distintos. Armazene estes valores em um vetor. A

saída do seu programa deverá mostrar ao usuário o valor digitado e as

posições em que estes valores foram armazenados no vetor.

Exercício 4 Faça um programa em SCILAB para gerar o gráfico das

seguintes funções, 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)=1x2 +2x+1 ; qual intervalo utilizar ? Existe algum critério para

escolher o intervalo ?

f) f (t) =

t +1 0 t <10 1 t < 22 t 2 t < 30 t 3

Page 66: Apostila SCILAB 2015 1

66

Exercício 5 Utilize o código do programa em SCILAB desenvolvido no

exemplo de aplicação (secador de grãos) e calcule novamente a temperatura

média, a velocidade média, a maior temperatura, a menor temperatura, e

maior velocidade e a menor velocidade. Desta vez você não poderá utilizar

as funções mean( ), max( ) e min( ). Você deverá desenvolver toda a lógica

para efetuar os cálculos. Você poderá utilizar as funções mean( ), max( ) e min( ) apenas para comparar os seus resultados obtidos com os resultados

obtidos pelas funções.

PROJETO FINAL 3 : Simulação !

No instante t=0 (min) um tanque contém 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 galão) está entrando no tanque a uma taxa de r galões por minuto, e

que o líquido, bem misturado, está saindo do tanque à mesma taxa. O

fenômeno é ilustrado pela figura abaixo.

Figura 34 Tanque de água com misturador. (Boyce e Diprima, 2012)

A função a seguir expressa a quantidade de sal Q(t) no tanque em qualquer

estante t.

Q(t)= 25+ (Q0 25)e r t/100

Desenvolva um programa em SCILAB que simule a quantidade de sal

presente no tanque durante 100 minutos.

Page 67: Apostila SCILAB 2015 1

67

a) Como saída você deverá mostrar a quantidade de sal presente no

tanque e o tempo de simulação a cada 10 minutos. Utilize Q0 = 50 lb e

r = 3.

b) Faça um gráfico mostrando o comportamento da quantidade de sal no

tanque durante os 100 minutos. Utilize Q0 = 50 lb e r = 3.

c) Faça um único gráfico contendo 4 curvas com as seguintes condições:

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

com r = 3 e Q0 = 50 lb.

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

com r = 3 e Q0 = 40 lb.

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

com r = 3 e Q0 = 25 lb.

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

com r = 3 e Q0 = 10 lb.

x Interprete o fenômeno ilustrado pelo gráfico !

d) O que aconteceria se o valor da taxa de fluxo aumentasse para 5 após

20 minutos de simulação ? Utilize como condição de simulação Q0 =

50 lb. Mostre o gráfico da simulação e interprete-o.

e) Qual seria a taxa de fluxo necessária (r) para que o valor de t não

exceda 45 minutos para alcançar o equilíbrio ? Utilize Q0 = 50 lb. Dica: O sistema entra em equilíbrio quando Q(t) = 25.

Page 68: Apostila SCILAB 2015 1

68

5. MATRIZ

Uma matriz é um tipo de variável que pode armazenar um ou mais valores do

mesmo tipo de dado, porém este armazenamento pode estar associado a

duas propriedades distintas. Esta associação para muitos é chamada de

dimensão. Em vetores, associávamos o armazenamento de informação a

apenas uma propriedade, “uma dimensão”. 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 dimensões.

Veja um exemplo: (Exemplo 5.1)

Um engenheiro resolveu montar um sistema de aquisição de dados para

coletar os dados de pressão do gás refrigerante e temperatura do gás

refrigerante em um sistema de refrigeração. Para isto o engenheiro instalou

em diferentes pontos do sistema três sensores de pressão e temperatura. O

engenheiro desenvolveu um programa em SCILAB que durante cinco horas

coletava as informações dos sensores e armazenava as informações a cada

hora. Veja o código 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 lógica utilizada pelo engenheiro foi de armazenar em uma matriz chamada

temperatura os dados dos três sensores a cada hora durante 5 horas.

Page 69: Apostila SCILAB 2015 1

69

Veja a disposição 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 três temperaturas distintas, uma para cada sensor.

Portanto a nossa matriz de duas dimensões (tempo,sensor) é uma matriz

5x3 (5 linhas e 3 colunas). O mesmo raciocínio foi aplicado ao sensor de

pressão.

Veja a saída após executarmos o programa em SCILAB;

Figura 35 Saída das matrizes temperatura e pressão

Page 70: Apostila SCILAB 2015 1

70

Inserindo valores em uma matriz

A inserção de valores em uma matriz pode ser feita de diferentes maneiras. A

seguir apresentaremos as mais usuais.

Inserção 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.

Inserção por meio de um usuário

Inicializando por meio de um usuário 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 (Saída de dados)

Saída direta

disp(matriz);

Saída por laço de repetição

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

Page 71: Apostila SCILAB 2015 1

71

Exemplo 5.2 Desenvolva em SCILAB um programa que permita ao usuário

preencher 2 matrizes quadradas A e B. Após preencher as matrizes A e B o

usuário deverá escolher de acordo com as opções abaixo, qual tipo de

operação irá realizar com as matrizes A e B para gerar uma matriz C com a

resposta da operação selecionada. Veja as opções:

1) Adição

2) Subtração

Solução

1 clc; 2 clear; 3 dimensao = input ('Informe a dimensão 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 posição 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 posição 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) Adição "); 26 mprintf("\n 2) Subtração "); 27 mprintf("\n\n"); 28 29 operacao=input("Escolha a operação: "); 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

Page 72: Apostila SCILAB 2015 1

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 inválida"); 49 end

linha 3 A variável dimensão armazena a dimensão das matrizes A e B. Este

valor é escolhido pelo usuário.

linhas 6 a 19 Neste bloco de comandos do programa são feitas as leituras de

valores para as matrizes A e B. Observe que para realizar a operação de

leitura elemento por elemento é necessário o uso de dois laços de repetição.

O primeiro laço varia da posição 1 ao número de linhas. O segundo laço varia

da posição 1 ao número de colunas. Os índices linha e coluna são

controlados pelos laços de repetição.

linhas 20 a 23 Nesta parte do programa são 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 laços de repetição.

linhas 24 a 30 Menu de opções para que o usuário escolha qual operação

deseja realizar com as matrizes A e B.

Linhas 31 a 49 Bloco de comandos responsáveis por realizar as operações

com as matrizes de acordo com a opção escolhida pelo usuário.

Veja um exemplo de solução a seguir:

Page 73: Apostila SCILAB 2015 1

73

Figura 36 Saída exemplo 1 matriz.

Resumo do capítulo 5

Neste capítulo mostramos o uso de matrizes. Após a leitura deste capítulo

você deverá ser capaz de:

x Identificar a necessidade de uso de matrizes.

x Inicializar uma matriz de maneira direta ou por meio do usuário.

x Realizar a saída de dados de uma matriz.

x Implementar operações matemáticas e busca de valores em uma

matriz.

x Plotar gráficos de superfície para as mais diversas aplicações.

Exercícios – Matriz

Exercício 1 Determine se cada um dos seguintes é verdadeiro ou falso. Se

falso justifique.

Page 74: Apostila SCILAB 2015 1

74

a) Para referir-se a uma localização 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 dimensões

3x3 como zero deve conter pelo menos uma instrução for.

c) Um algoritmo que soma os elementos de uma matriz deve conter

instruções for aninhadas.

Exercício 2 Considere uma matriz de dimensões 2 x 3;

a) Escreva uma instrução 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 instrução que configura o elemento desta matriz na

linha 1 e coluna 2 como zero.

h) Escreva uma instrução for aninhada que inicializa cada elemento da

matriz como 0.

i) Escreva uma instrução for aninhada que insere os valores da matriz

a partir do usuário.

Exercício 3 Desenvolva em SCILAB um algoritmo que faça a leitura de

valores para uma matriz 2 x 2. Após a inserção dos valores mostre;

x a matriz digitada pelo usuário,

x o maior valor da matriz,

x o menor valor da matriz.

Exercício 4 Escreva um programa em SCILAB que mostre na tela uma

tabela de conversão de temperaturas. Esta tabela deve mostrar a conversão

de temperaturas em graus Celsius na faixa de 150 oC a 350 oC com

Page 75: Apostila SCILAB 2015 1

75

incrementos de 50 oC. Faça as conversões de Celsius para Kelvin e

Fahrenheit. Veja um modelo de saída esperada.

Figura 37 Exemplo de saída exercício 2 matriz.

Exercício 5 Para que duas ou mais matrizes sejam consideradas iguais elas

devem obedecer a algumas regras:

x Devem ter a mesma ordem, ou seja, o mesmo número de linhas e o

mesmo número de colunas.

x Os elementos devem ser iguais aos seus correspondentes.

A partir dos conceitos acima, elabore um programa em SCILAB que solicite

ao usuário a digitação de duas matrizes 2x2. Após a digitação das matrizes

verifique se as matrizes digitadas são iguais ou não.

Exercício 6 (Olimpíadas Nacionais de Informática ; Portugal – 2008)

Finalmente, o local do novo aeroporto de Lisboa está escolhido: Alcochete. O

aeroporto terá um imenso volume de aviões sempre a decolar e a aterrizar.

Gerir todo este tráfego aéreo não é nada fácil. A missão dos controladores de

tráfego aéreo é precisamente garantir um fluxo de aviões seguro. São eles

que, a partir da torre de controle, fornecem indicações e autorizações de vôo,

de acordo com as características 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 eficácia do sistema.

Uma empresa que faz software de controle aéreo te contratou. Um dos

muitos sistemas instalados avisa do perigo de colisão entre dois aviões. Se

dois aviões estiverem próximos, um alarme dispara imediatamente.

Page 76: Apostila SCILAB 2015 1

76

Basicamente, a empresa quer que você programe uma maneira eficiente de

detectar isto, descobrindo no meio de todo o tráfego aéreo quais são os dois

aviões mais próximos um do outro. Como simplificação, as posições dos

aviões são dadas como em coordenadas (X,Y), em relação a uma

determinada origem. A altitude, direção e velocidade do avião podem ser

ignoradas. Se dois aviões tiverem posições (X1,Y1) e (X2,Y2), a distância entre

eles é dada pela fórmula X1 X2( )2 + Y1 Y2( )2 .

O trecho de código a seguir gera uma matriz com as coordenadas (x,y) para

a posição de 4 aviões no espaço aéreo.

for i=1:4 for j=1:2 coordenadas(i,j)=rand()*10; end mprintf("\n Coordenadas do avião %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 avião e as

colunas se referem às suas coordenadas x e y.

Escreva um programa em SCILAB que dadas as localizações (X,Y) de um

conjunto de aviões, calcula qual o par de aviões que está mais perto um do

outro. Utilize o trecho de código disponibilizado acima para gerar a matriz que

contém as coordenadas dos quatro aviões. Veja a seguir uma sugestão para

a tela de saída.

Page 77: Apostila SCILAB 2015 1

77

PROJETO FINAL 4 : Compreendendo matrizes para a geração de

gráficos tridimensionais

A geração de gráficos tridimensionais não é uma tarefa trivial. Apesar do

SCILAB conseguir simplificar de maneira considerável a criação destes

gráficos precisamos entender o conceito de matriz que está por trás dos

comandos em SCILAB que facilitam a criação destes gráficos.

Vamos tomar como exemplo a função u(x, y) = 5e x+

73y. Para plotarmos o

gráfico desta função 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 função que

queremos plotar o gráfico 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 espaçados entre 0 x 3 e 0 y 3 , portanto os pontos que

queremos calcular o valor da função são:

Page 78: Apostila SCILAB 2015 1

78

x y

0 0

0,75 0,75

1,5 1,5

2,25 2,25

3 3

É importante lembrar que a nossa função, é uma função em duas dimensões,

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 subdivisão de pontos para uma função 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 após a subdivisão dos pontos podemos então calcular o valor da

função nas coordenadas, conforme ilustrado a seguir.

Tabela 12 Matriz de solução para a função 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

Page 79: Apostila SCILAB 2015 1

79

Utilizando o SCILAB para gerar o gráfico da função u(x, y) = 5e x+

73y

Vamos agora aprender então como executar todos os passos descritos

acima utilizando o SCILAB.

1. Para gerar os intervalos das funções ; 0 x 3 e 0 y 3faremos uso

da função linspace( ). Conforme explicado no capítulo de vetores a

função linspace(valor1, valor2, valor3 ) funciona da seguinte

maneira; o primeiro valor dentro do parênteses 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 parênteses representa

o número de elementos que serão 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);

Page 80: Apostila SCILAB 2015 1

80

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

valor da função u(x, y) = 5e x+

73y 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 gráfico

para a função 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);

Page 81: Apostila SCILAB 2015 1

81

Figura 38 Exemplo de gráfico 3d utilizando o comando mesh().

5. Que tal aumentarmos o número de pontos para 100 ao invés de 5 ?

Veja o resultado desta modificação !

Figura 39 Exemplo de gráfico 3d com 100 pontos

PRÁTICA !!!

Exercício 1. Utilize a metodologia descrita acima para plotar o gráfico das

seguintes funções.

Page 82: Apostila SCILAB 2015 1

82

a) u(x, t)= 5e 4 2tsen(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 tsen(4 x) 3e 128 2t sen(8 x)+2e 200 2tsen(10 x)

Exercício 2 A função a seguir representa a distribuição de temperatura em

uma placa de 1cm de espessura durante o tempo (Hoffman,2001).

T(x, t)= 800 2

( 1)m

(2m+1)2sen[(2m+1) x]e (2m+1)2 2 t

m=0

10

em que ;

T(x, t) é a temperatura na posição x da placa no tempo t.

é a condutividade térmica da placa.

Construa um gráfico tridimensional com a distribuição de temperatura da

placa. Lembre-se a espessura é de 1cm portanto seu intervalo para x será

0 ≤ x ≤ 1 e 0 ≤ t ≤ 10

Page 83: Apostila SCILAB 2015 1

83

REFERÊNCIAS BIBLIOGRÁFICAS

ASCENCIO, A. F. G; CAMPOS, E. A. V. Fundamentos da Programação de Computadores Algoritmos, Pascal, C/C++ e Java. 3ª edição, 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 . Refrigeração. Editora Edgard Blucher, 3 edição, 2011.

RODRIGUES, C. L. C. Sistema de controle automático para um secador de produtos agrícolas com reaproveitamento do ar de secagem. Tese de Doutorado, Universidade Federal de Viçosa, 2010.

DEITEL, H. M.; DEITEL, P. J. JAVA Como programar 6a edição. 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. Introdução À Programação para Engenharia - Resolvendo Problemas com Algoritmos. Editora Ltc, 2006.

KUO, B.C; GOLNARAGHI, F. Automatic Control Systems. Wiley; 8 edition 2002.

OLIMPÍADA BRASILEIRA DE INFORMÁTICA. http://olimpiada.ic.unicamp.br/. Acesso em 03/08/2014.

OLIMPÍADAS NACIONAIS DE INFORMÁTICA 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.

Page 84: Apostila SCILAB 2015 1

84

APENDICE 1 – GERAÇÃO DE NÚMEROS ALEATÓRIOS

Em diversas áreas do conhecimento o uso de números aleatórios em

algoritmos é uma prática trivial. Especificamente no aprendizado de

algoritmos a utilização de números aleatórios pode nos ajudar a simular

cenários diversificados e situações inesperadas. A partir de tais situações

podemos criar e avaliar lógicas de programação independente de valores

digitados pelo programador e ou usuário, que muitas vezes podem escolher

valores tendenciosos à lógica implementada.

A seguir apresentaremos como podemos gerar números aleatórios utilizando

duas funções disponíveis em SCILAB, a função rand( ) e a função grand(

). É importante lembrar que as informações mais detalhadas sobre a

utilização destes comandos estão disponíveis no menu Ajuda do SCILAB.

1. A função rand( )

A função rand( )é a primeira função que apresentaremos para geração de

números aleatórios. O código a seguir mostra na tela 5 números gerados

aleatoriamente pela função rand( ).

mprintf("\n Gerando 5 números aleatórios com a função rand() \n"); for i=1:5 mprintf("\n\n %f ",rand()); end

Veja a saída no console após a execução do código acima.

Figura 40 Exemplo de aplicação do comando rand( )

Page 85: Apostila SCILAB 2015 1

85

Algumas observações devem ser feitas quanto ao uso do comando rand( ).

Perceba que os cinco números gerados estão entre 0 e 1. Esta é a primeira

característica do comando. Ao gerar os valores o computador sempre vai

trabalhar na faixa de valores entre 0 e 1. Outra característica que devemos

observar é que o SCILAB como já dito anteriormente trabalha com as

variáveis numéricas apenas em formato real, portanto todos os valores

gerados pela função rand( )estarão no formato real.

a. Gerando valores aleatórios inteiros a partir do comando rand( )

Conforme já definido os valores gerados estarão sempre no formato real.

Portanto para utilizarmos os valores no formato inteiro devemos utilizar uma

outra função disponível no SCILAB a função int( ), veja como é fácil. O

código a seguir vai gerar 5 valores inteiros aleatórios.

clear; clc; mprintf("\n Gerando 5 números aleatórios inteiros com a função rand() \n"); for i=1:5 mprintf("\n\n %f ",int(rand())); end Veja a tela de saída a seguir.

Figura 41 Utilizando a função int( ) e rand( )

Mas o que aconteceu !? Estão todos os valores zerados ? Vamos ver o por

que disso ?

Os números gerados aleatoriamente pela função rand( ) estão no intervalo

entre 0 e 1. Portanto quando utilizamos a função int( ) ficamos apenas

Page 86: Apostila SCILAB 2015 1

86

com a parte inteira do número gerado que era zero ! Veja um exemplo; se o

numero gerado para a variável x foi x=0.867 e em seguida aplicamos a

função int(x), consequentemente o resultado será 0.

Veja então como faríamos para gerar 5 números inteiros aleatórios entre 0 e

100.

mprintf("\n Gerando 5 números inteiros aleatórios com a função rand() \n"); for i=1:5 mprintf("\n\n %f ",int(100*rand())); end

Observe que a única modificação feita foi multiplicar os números gerados

aleatoriamente por 100. Veja a saída a seguir;

Figura 42 Gerando números aleatórios inteiros entre 0 e 100.

b. Gerando vetores e matrizes aleatoriamente por meio da função rand( )

A função rand( ) acrescida das informações de quantidade de linhas e

colunas também nos possibilita gerar automaticamente vetores e matrizes

com valores aleatórios. Se desejarmos gerar um vetor de 7 posições com

valores aleatórios basta acrescentarmos as seguintes informações no

comando rand( ) veja;

vetor=rand(7,1);

Para gerar o vetor de 7 posições com valores aleatórios foi necessário

acrescentar as informações de linhas e colunas. Portanto o comando

rand(7,1) gerou valores para uma matriz de 7 linhas e 1 coluna, ou um vetor

Page 87: Apostila SCILAB 2015 1

87

com 7 posições. Experimente gerar uma matriz de valores aleatórios com 3

linhas e 5 colunas !.

2. A função grand( )

Existem situações em que necessitamos de gerar valores aleatórios,

entretanto estes valores devem respeitar uma faixa de valores desejados.

Imagine que você criou toda a lógica de funcionamento de um radar que foi

instalado na avenida Cristiano Machado. A lógica é simples, porém você

precisa testar se a lógica do seu radar está funcionando. Em outras palavras

você precisa verificar se os carros que passam com velocidades maiores que

60 km/h são registrados. Para testar a sua lógica você vai precisar de simular

a velocidade dos carros que passam onde foi instalado o seu radar. Sabemos

que a velocidade média dos carros na avenida é de 60 km/h, mas pode

acontecer que automóveis trafeguem acima ou abaixo desta velocidade.

Surge então o seguinte questionamento, como vou simular estes veículos ? Como vou garantir que os valores simulados estejam nesta faixa para tornar o meu teste o mais próximo possível da realidade ?

Resposta:

Utilizaremos então a função grand( ), como um gerador de números aleatórios.

Para garantir que os valores estejam na faixa usual de tráfego na avenida, a função grand( ) nos permite escolher o valor médio dos números gerados e seu desvio padrão, todos estes obedecendo a uma distribuição de probabilidade. Enfim a geração dos números aleatórios será feita a partir da seguinte configuração grand(5,1,”nor”,60,5). Tal configuração pode

ser interpretada como “a função grand vai gerar uma matriz de 5 linhas e uma coluna (vetor de 5 posições) com valores aleatórios, obedecendo a distribuição normal, de média 60 e desvio padrão 5”.

Veja a seguir o código e a tela de saída a pós a sua execução.

Page 88: Apostila SCILAB 2015 1

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 números aleatórios grand( )

Lembre-se que para gerar apenas um valor basta alterar o comando para grand(1,1,”nor”,60,5), gerando apenas um valor, não mais um vetor.

Todas as configurações feitas para o comando rand( ) são válidas para o comando grand( )

Page 89: Apostila SCILAB 2015 1

89

APENDICE 2 – LISTA DE COMANDOS ÚTEIS EM SCILAB

A seguir apresenta-se uma lista com alguns comandos usuais em

programação e engenharia. Maiores detalhes sobre a utilização destes

podem ser facilmente encontrados na seção “Ajuda” do SCILAB.

Esta lista não tem intenção de substituir o menu “Ajuda” do SCILAB. O menu “Ajuda” deve ser a sua principal fonte de busca durante suas implementações.

%i – Unidade imaginária utilizada para números complexos.

%inf - Retorna uma representação para um número infinito. ( ∞ ).

%pi - Retorna um valor aproximado para o número pi (π).

abs( )- Retorna o valor absoluto de um elemento.

acos( ) – Arco-cosseno.

acosh( ) – Arco-cosseno hiperbólico.

asec( ) – Arco secante.

asech( ) – Arco-secante hiperbólico.

asin( ) – Arco-seno.

asinh( ) – Arco-seno hiperbólico.

atan( ) – Arco-tangente.

atang( ) – Arco-tangente hiperbólico.

break - Dentro de um laço for ou while loop, o comando break força o

fim do laço.

cos( ) – Cosseno.

cosh( ) – Cosseno hiperbólico.

cotg( ) – Cotangente.

coth( ) – Cotangente hiperbólica.

det( ) – Calcula o determinante de uma matriz.

Page 90: Apostila SCILAB 2015 1

90

disp( ) – Exibição de variáveis ou texto.

exp( ) – Retorna o valor para a expressão ex.

eye( ) – Matriz identidade.

factorial( ) – Retorna o fatorial de um número.

fix( ) – Arredonda em direção à zero.

floor( ) - retorna uma matriz de inteiros feita a partir de

"arredondamentos para baixo".

gsort( ) – Ordenação em ordem decrescente.

imag( ) – Retorna a parte imaginária de um número complexo.

input( ) – Comando de entrada de dados via usuário.

int( ) - retorna a parte inteira de um número real. É o mesmo que fix.

inv( ) – Retorna a matriz inversa.

linsolve( ) – Resolvedor de equações lineares.

linspace( ) – Retorna um vetor linearmente espaçado.

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 média dos elementos de um vetor / matriz.

min( ) – Retorna o menor valor de um vetor ou matriz.

modulo( ) – retorna o resto da divisão de x por y (x e y inteiros).

nthroot( ) – Retorna a n-ésima raiz de um número.

plot( ) – Gráfico em 2D.

Page 91: Apostila SCILAB 2015 1

91

primes( ) – Retorna todos os números primos de 1 ao valor atribuído à

função.

rand( ) – Gerador de números aleatórios.

real( ) – Retorna a parte real de um número complexo.

round( ) - arredonda os elementos de x para os inteiros mais próximos.

sec( ) – Secante.

sech( ) – Secante hiperbólica.

sin( ) – Função seno.

sinh( ) – Seno hiperbólico.

solve( ) – Solucionador de sistemas lineares.

sqrt( ) – Retorna o valor para a raiz quadrada de um número.

sum( ) – Retorna a soma dos elementos de um vetor ou matriz.

tan( ) – Tangente.

tanh( ) – Tangente hiperbólica.

zeros( ) – Gera uma matriz feita de zeros.

Page 92: Apostila SCILAB 2015 1

92