• Nenhum resultado encontrado

9 7 6 5 5 4 3 3 1 M atlab R ápido e P rático

N/A
N/A
Protected

Academic year: 2021

Share "9 7 6 5 5 4 3 3 1 M atlab R ápido e P rático"

Copied!
12
0
0

Texto

(1)

Capítulo 4

Neste Capítulo

1

Criando programas em Matlab

3

Escopo de variáveis

3

Estruturas de repetição e seleção

4

O Jogo do Caos

5

Jogo de Cartas

5

Miscelânea

6

Exercícios

7

String de caracteres

9

Entrada e saída de dados UNESP

Programas e Arquivos

por Anibal Azevedo

Nesta seção serão abordadas técnicas de visualização de funções matemáticas a partir de gráficos de duas e três dimensões, ou ainda a visualização de resultados a partir de histogramas e gráficos de torta.

CRIANDO PROGRAMAS EM MATLAB

Uma grande vantagem do MATLAB é a possibilidade de se criar programas como as linguagens de programação C, C++, BASIC, Fortran ou JAVA. Duas grandes vantagens do MATLAB são:

 Uma biblioteca com um grande número de funções matemáticas disponíveis e devidamente testadas.

 Uma sintaxe simples que permite a rápida elaboração de programas, sem a necessidade de se preocupar com o tipo (inteira, ponto flutuante, vetor, matriz, etc) da variável.

 A construção de novas funções matemáticas que utilizam todos os recursos disponíveis (tópico desta seção).

Os arquivos de programa do MATLAB têm extensão “.m” e, por este motivo, são usualmente denominados de “m- files”. Existem dois tipos de “m-files”:

 Script: é uma seqüência de comandos do MATLAB e serve, basicamente, para automatizar algum processo repetitivo.

Não tem parâmetros de entrada, nem de saída, e utiliza as variáveis do espaço de trabalho.

 Função: Também é uma seqüência de comandos do MATLAB, mas aceita parâmetros de entrada e saída. Funções

O MATLAB possui um ambiente para edição de programas que pode ser acionado de duas formas:

 Na linha de comando digitando edit.

 Usando de ícones na barra de

ferramenta do MATLAB: .

A aparência típica de um programa Script em MATLAB é:

Para executar o arquivo é necessário acionar o botão próximo à barra

“Current Directory”, modificando o diretório corrente do MATLAB para aquele em que se encontra o Script

“exemplo1.m”. Isto resultará em:

Em seguida a seguinte seqüência de comandos pode ser digitada:

>> whos

>> help exemplo1

Exemplo de arquivo script.

exemplo1.m: desenha grafico f(x) = sin(x)*exp(x), -2*pi < x < 2*pi.

>> exemplo1

>> whos

Name Size Bytes Class

M atlab R ápido e P rático

(2)

A execução do comando resultará na figura:

Observe que o comando help exemplo1 lista o comentário colocado antes de qualquer comando do arquivo Script, como se exemplo1 fosse um novo comando do MATLAB.

Além disso, ao se executar o arquivo exemplo1, todas as variáveis do arquivo ficam disponíveis no espaço de trabalho.

Em relação às funções é necessário destacar três classes:

 Built-in: função interna do MATLAB que está implementada em seu núcleo.

O código deste tipo de função não é visível.

MATLAB m-file: função do MATLAB que está implementada em m-files. O código da função MATLAB m-file é visível e pode ser alterado. O comando which exibe o diretório no qual o m-file está localizado.

User m-file: função criada pelo usuário (funcao1.m a ser mostrada a seguir). É desta forma que novas funções, de acordo com aplicações específicas, poderão ser criadas.

Para saber a qual das três classes uma função pertence ou em qual diretório o arquivo está, use o comando which:

>> which sin built-in (C:\Program

Files\MATLAB\R2010a\toolbox\matlab

\elfun\@double\sin) % double method

A sintaxe do cabeçalho de uma função pode ser dada por:

 function

 [saida1, ..., saidan] = function

 function(entrada1, ..., entradan)

[saida1, ..., saidan] = function(entrada1, ..., entradan)

Onde: saida1,...,saidan representam os n dados de saída e entrada1,...,entradan são n dados de entrada.

Construindo o arquivo funcao1 como se segue:

Digitando no prompt (“>>”)do MATLAB a seqüência:

>> clear all;

>> whos

>> [y] = funcao1(-pi,0.1,pi);

>> whos

Name Size Bytes Class

y 1x63 504 double array

Observe que apenas a variável y está disponível no espaço de trabalho, pois apenas ela foi especificada como variável de saída. Algumas outras observações sobre a execução da função funcao1:

 permite indicar os valores do parâmetros de início, fim e incremento de domínio do gráfico.

(3)

 cria e utiliza a variável x internamente e retorna o vetor na variável y no espaço de trabalho.

 a variável x não é criada no espaço de trabalho.

 para o intervalo [-, ] gera o gráfico a seguir:

ESCOPO DE VARIÁVEIS

O MATLAB armazena suas variáveis em na área de memória denominada espaço de trabalho.

As funções trabalham com variáveis locais, isto é, que ficam armazenadas em áreas de memória próprias, independente do espaço de trabalho do MATLAB.

Os escopos das variáveis do espaço de trabalho e das variáveis locais de funções são muito bem definidos:

 Variáveis do espaço de trabalho não são reconhecidas dentro das funções.

 Variáveis locais de funções não são reconhecidas no MATLAB.

Parâmetros de entrada e saída são a forma (interface) mais adequada para a troca de dados entre o espaço de trabalho do MATLAB e ambientes internos de funções.

Uma outra forma de compartilhamento de troca de dados entre o espaço de trabalho e funções são as variáveis globais.

Variáveis criadas no espaço de trabalho são reconhecidas por qualquer função que explicite sua categoria “global” em seu código. Acreditando que a utilização de variáveis globais pode fornecer um pequeno ganho imediato às custas de um grande prejuízo futuro na manutenção de um programa, não será detalhado como utilizar variáveis globais.

ESTRUTURAS DE REPETIÇÃO E SELEÇÃO

Um comando que permite a repetição de comandos por um número fixo de vezes é dado pelo comando for cuja sintaxe é:

>> for i=1:10 x(i) = cos(i*pi/10);

end

Dica de desempenho:

O MATLAB tem seu funcionamento otimizado para realizar operações matriciais e vetoriais. Portanto, sempre que possível, substitua um comando for por uma operação matricial e/ou vetorial. No exemplo anterior, o desempenho computacional do MATLAB seria superior se fosse utilizada a seguinte seqüência de comandos:

>> t = 1:10;

>> x = cos((pi*t)./10);

Para testes com diferença significativa de tempo, use n = 100000, por exemplo.

Para medir o tempo use tic e toc.

Na seqüência anterior, a primeira instrução diz: para i igual a 1 até 10, calcule todas as instruções até a próxima instrução de end. Assim, i assumirá o valor 1, depois 2, e assim por diante até o que i = 10, quando o loop termina.

A declaração i=1:10 é uma forma padrão que, também, é usada na criação de vetores e matrizes do MATLAB.

Elementos de vetores e matrizes criados no MATLAB podem ser usados dentro de um comando for:

>> for n = 1:4 for m = 6:-1:1 A(n,m) = n^3 + m^2;

end end

Uma outra estrutura de repetição é o while:

>> erro = 1;

>> num = 1;

>> while (1+erro) > 1 erro = erro/2;

num = num + 1;

end

Neste exemplo, “erro” começa com o valor 1. Enquanto (1 + erro) > 1 for verdadeiro, os comandos dentro do while serão executados. Uma vez que erro é continuamente dividido por dois, num dado momento ele será tão pequeno que somado a 1 o resultado não será maior que 1 (Isso acontece, pois o computador usa um número finito de dígitos para representar números). No momento que (1 + erro) > 1 torna-se falso o loop, criado pelo while, termina.

Além das estruturas de repetição, existem as estruturas de seleção como o if:

>> lapis = 10;

>> if (lapis > 1) lapis = lapis - 5 end

lapis = 5

(4)

Os comandos de repetição podem ser aninhados em conjunto com os comandos de seleção e vice-versa:

for I=1:m if I == J A(I,J) = 2;

elseif abs(I-J) == 1 A(I,J) = -1;

else

A(I,J) = 0;

end I = I + 1;

end

Observar que na seqüência anterior o comando if foi utilizado em conjunto com o comando elseif e else. O exemplo anterior poderia ter utilizado o comando switch:

for I=1:m val = abs(I – J);

switch val case 0 A(I,J) = 2;

case 1 A(I,J) = -1;

otherwise A(I,J) = 0;

end I = I + 1;

end

O JOGO DO CAOS

Os comandos for e if podem ser empregados para resolver uma série de problemas e criar diversos programas com comportamentos complexos.

Um exemplo interessante de utilização de if e for é dado pelo Jogo do Caos. O Jogo funciona da seguinte forma:

(1) Crie um triângulo eqüilátero cujos vértices p1, p2 e p3 com coordenadas (x1, y1), (x2, y2) e (x3, y3), respectivamente tal como ilustrado a seguir.

(2) Gere aleatoriamente as coordenadas (x,y) de um ponto P1 tal que x ∈ [0, x3] e y [0, y2]. Desenhe este ponto tal como ilustrado na figura dada a seguir.

(3) Selecione aleatoriamente, um dos três vértices. Crie um segmento de reta que une P1 a um dos vértices selecionados aleatoriamente. Depois, obtenha o ponto médio PM1 deste segmento de reta. Na figura dada a seguir o vértice escolhido foi o 1.

(4) Realize um novo sorteio entre um dos três vértices do triângulo. Depois, a partir do ponto PM1 trace um segmento de reta até o ponto escolhido e obtenha o ponto médio do mesmo. Na figura que segue, por exemplo, o vértice 2 foi sorteado.

(5) Repetir o processo de obtenção dos pontos médios até um número máximo de iterações.

Após executar os passos de (1)-(5), a figura a seguir é obtida:

A anterior é um fractal denominado triângulo de Sierpinski. Observe que ele possui a propriedade de ser autosimilar exato, isto é, uma porção dele é similar ao todo. Observe, também, que para observar o padrão fractal do triângulo de Sierpinski ilustrado na figura anterior foram necessárias 5000 iterações. Um número muito menor de iterações poderia

impedir a observação do

comportamento fractal do jogo do caos.

(5)

O código para o problema proposto anteriormente é dado por:

function fractal

% Vertices do triangulo inicial.

v1 = [0.0 0.0];

v2 = [50.0 100.0];

v3 = [100.0 0.0];

% Gera ponto inicial aleatorio dentro dos

% limites do desenho (0,0) ate (100,100).

p = rand(1,2)*100;

% Cria um grafico e pede para manter todos

% os pontos que forem desenhados.

title('Jogo do Caos');

hold on;

% Laco para percorrer aleatoriamente % pontos dentro do triangulo.

for i=1:5000 opt = rand;

% Se o vertice 1 foi selecionado.

if (opt < 0.33)

p(1) = p(1) + (v1(1) - p(1))/2;

p(2) = p(2) + (v1(2) - p(2))/2;

cor = 'r.';

% Se o vertice 2 foi selecionado.

elseif (opt < 0.66)

p(1) = p(1) + (v2(1) - p(1))/2;

p(2) = p(2) + (v2(2) - p(2))/2;

cor = 'b.';

% Se o vertice 3 foi selecionado.

else

p(1) = p(1) + (v3(1) - p(1))/2;

p(2) = p(2) + (v3(2) - p(2))/2;

cor = 'g.';

end

% Realizando o desenho do ponto atual.

plot(p(1),p(2),cor);

end

JOGO DE CARTAS

Imagine que você deseja jogar um jogo de cartas cuja probabilidade de ganhar é de 55% e a de perder é de 45% e são realizados 500 jogos. A vantagem é de 10 reais de lucro para cada cem reais jogados. Dado que se começa com uma aposta de 1 real e 10 reais de saldo inicial avaliar as seguintes estratégias de aposta:

Estratégia 1: Aposte tudo. Apostar tudo o que se tem a cada jogada. Se perder, estará fálido. Se ganhar, aposte tudo de novo no próximo jogo.

Estratégia 2: Quantia fixa. Aposte uma quantia fixa em cada jogo. Se ganhar sua quantia aumentará uma quantia fixa de cada vez. Se perder, sua riqueza encolherá a quantia apostada.

Estratégia 3: Martingale. Ou dobrar o dinheiro. Era popular entre jogadores franceses no século XVIII e consiste em dobrar a aposta quando se perde.

Quando se ganha a aposta volta a um montante fixado inicialmente.

Estratégia 4: Aposta proporcional.

Apostar uma fração do dinheiro dada pela vantagem. No caso anterior: ganho – perda = 10%. Portanto, deve-se apostar 10% do dinheiro em cada jogo.

Se ganhar aumenta em 10% e a aposta seguinte será 10% maior que a primeira.

Se perder, o dinheiro encolherá 10% e a segunda aposta será 10% menor do que a primeira.

A seguir segue uma função que avalia as estratégias descritas anteriormente.

function [a,b,c,d] = jogocartas(prob, valorinicial,aposta,njogos)

% Todas as estrategias comecam como o mesmo valor inicial.

a(1) = valorinicial;

b(1) = valorinicial;

c(1) = valorinicial;

d(1) = valorinicial;

mc = aposta;

% Realizando um laco de n jogadas.

for i=1:(njogos-1)

% Sorteio aleatorio: valor real entre 0 e 1.

value = rand();

% Verifica se o apostador ganhou.

if (value <= prob)

% Ganho da estrategia 1.

a(i+1) = a(i) + 2*a(i);

% Ganho da estrategia 2.

b(i+1) = b(i) + aposta;

% Ganho da estrategia 3.

c(i+1) = c(i) + mc;

mc = aposta; % Manter valor apostado.

% Ganho da estrategia 4.

d(i+1) = d(i) + (prob - (1 - prob))*d(i);

% Perdeu a aposta.

else

% Perda da estrategia 1.

a(i+1) = 0;

% Perda da estrategia 2.

b(i+1) = b(i) - aposta;

% Perda da estrategia 3.

c(i+1) = c(i) - mc;

mc = mc*2; % Dobrar aposta para recuperar perdas.

% Perda da estrategia 4.

d(i+1) = d(i) - (prob - (1 - prob))*d(i);

end end

% Desenhando as estrategias.

plot(1:njogos,a,'-y');

hold on;

plot(1:njogos,b,'--g');

plot(1:njogos,c,'-.b');

plot(1:njogos,d,'.r');

title('Evolução das Estratégias de Aposta');

legend('E1','E2','E3','E4');

MISCELÂNEA

O comando profile permite extrair relatórios com informações estatísticas de execução de programas. Para ativar e desativar este recurso digite profile on e profile off, respectivamente. Para que o MATLAB gere automaticamente relatórios estatísticos, em formato

“HTML”, sobre o desempenho da execução de algum comando digite profile report. Para ilustrar com um exemplo o uso do comando profile, foi criado o arquivo triangul_pascal.m:

(6)

Depois a seguinte seqüência de comando é utilizada:

>> profile on;

>> triangulo_pascal(50);

>> plot(-10:0.1:10,(-10:0.1:10).^2,'-r');

>> profile off;

>> profile report;

Como conseqüência do comando profile report, a seguinte tela de resultados irá aparecer:

Alguns outros comandos que podem ser usados na manipulação de dados dentro dos arquivos “.m” criados são:

Função Descrição

beep Faz o computador

emitir um beep.

disp(variavel) Mostra os resultados sem identificar os nomes das variáveis.

echo Controla a exibição

dos comandos dos arquivos M na janela de comandos.

input Solicita ao usuário que forneça algum dado de entrada.

keyboard Transfere

temporariamente o controle para o teclado (pressione return para

devolver o controle ao arquivo M de comandos que está sendo executado).

pause ou pause(n) Suspende a execução até que o usuário pressione alguma tecle ou suspende a execução por n segundos.

waitforbuttonpress Suspende a execução até que o

usuário pressione uma tecla ou um botão do mouse.

nargin Retorna o número

de parâmetros de entrada fornecido pelo usuário para a função.

nargout Retorn o número de parâmetros de saída fornecido na chamada da função.

break Termina a

execução de loop de um while ou for.

No caso de loops aninhados, ele termina o loop mais interno.

tic Inicia o relógio

para contar o tempo.

toc Termina o relógio

para contar o tempo (sempre deve ser usado depois de tic).

EXERCÍCIOS

(1) Crie arquivos executáveis *.m na forma de Script para resolver os seguintes problemas:

(i) Calcular o valor médio de uma seqüência de números qualquer (Vetor).

(ii) Calcular o fatorial de um número.

(2) Executar e explicar os seguintes trechos de programas de MATLAB:

% Problema 01 for i=1:n for j=1:n

A(i,j) = 1/(i+j-1);

end end

(7)

% Problema 02

while prod(1:n) < 1.e100 n = n+1;

end

% Problema 03 –‘3n+1’ da teoria dos

% números.

while 1

n = input(‘Entre n, negativo sai.’);

if (n <= 0), break, end while n > 1

n > 1

if rem(n,2) == 0 n = n/2;

else

n = 3*n + 1;

end end end

(3) Escreva um pequeno trecho de código MATLAB que use os comandos input e pause.

(4) Desenvolva um algoritmo que possibilite que o usuário possa criar um banco de dados que contém a nota e o RA de alunos. O usuário deve escolher a quantidade de nomes que deseja armazenar e deve visualizar a matriz de dados após a execução do algoritmo.

Segue o pseudo-código:

Pseudo-Código Procedure:

n := número de alunos para guardar Para i=1:n

Entrar com a nota e o RA.

Guardar nota e RA numa matriz.

end

Imprimir a matriz resposta na tela.

(5) Crie uma função que calcula o produto de uma matriz com um vetor por de duas formas: usando o loop for e o sinal “*”. Utilizando os comandos tic e toc, bem como o comando profile, avalie qual o método mais eficiente.

STRING DE CARACTERES

No MATLAB as strings de caracteres são vetores numéricos especiais, de código ASCII, que representam um texto:

>> t = 'Que tal esta string de caracteres

?'

t =

Que tal esta string de caracteres ?

>> size(t) ans = 1 35

>> whos

Name Size Bytes Class ans 1x2 16 double array t 1x35 70 char array

Para ver a estrutura fundamental da representação ASCII das strings de caracteres, basta realizar alguma operação aritmética com a string ou converter a mesma usando a função double:

>> u=double(t)

u =

Columns 1 through 13

81 117 101 32 116 97 108 32 101 115 116 97 32

Columns 14 through 26

115 116 114 105 110 103 32 100 101 32 99 97 114

Columns 27 through 35

97 99 116 101 114 101 115 32 63

A função char faz a transformação inversa:

>> char(u)

ans =

Que tal esta string de caracteres ?

Na verdade, as strings são vetores de caracteres:

>> t(4:20)

ans =

tal esta string

A concatenação de strings pode ser feita com o comando strcat:

>> a = 'A frase ';

>> b = 'esta ';

>> c = 'completa !';

>> d = '(in)';

>> e = strcat(a,b,d,c)

e =

A fraseesta(in)completa !

Para converter strings em números e vice-versa existem os comandos str2num e num2str, respectivamente.

(8)

>> k = '2.71' k =

2.71

>> k = str2num(k) + 1 k =

3.7100

>> k = num2str(k) k =

3.71

>> frase = 'O numero e = ';

>> frase = 'O numero e + 1 = ';

>> frase = strcat(frase,k) frase =

O numero e + 1 =3.71

Uma outra forma de se concatenar strings com número é utilizar os comandos fprintf e sprintf:

>> k = pi/exp(2) k =

0.4252

>> p = sprintf(' Pi / exp(2) = %8.4f ',k);

>> p

p =

Pi / exp(2) = 0.4252

>> fprintf(1,' Pi / exp(2) = %8.4f \n',k);

Pi / exp(2) = 0.4252

Observe que o comando sprintf concatena a string e o número em uma nova string, ao passo que fprintf apenas imprime o resultado na tela (o local de impressão do resultado é indicado com o primeiro parâmetro que, com valor igual a um, é o espaço de trabalho). É possível utilizar o comando fprintf para

imprimir dados em arquivos, bastando substituir o número um por uma variável que contenha um “ponteiro”

para um arquivo. Este “ponteiro” pode ser obtido usando-se o comando fopen e fclose:

>> fid = fopen('teste.txt','w');

>> fprintf(fid,' Pi / exp(2) = %8.4f

\n',k);

>> fprintf(fid,' 3*(Pi / exp(2)) = %8.4f

\n',3*k);

>> fprintf(fid,' 5*(Pi / exp(2)) = %8.4f

\n',5*k);

>> fprintf(fid,' Fim de Arquivo \n');

>> fclose(fid);

Observe que o comando fopen tem um segundo parâmetro que especifica o propósito da abertura do arquivo (‘w’ = escreve dados, apagando o conteúdo anterior se existir o arquivo. Se não existir, cria o arquivo e escreve).

O arquivo “teste.txt” será gerado e terá o seguinte conteúdo:

Observe, ainda, que após abrir o arquivo com o comando fopen, é necessário fechar o mesmo com o comando fclose.

Erro comum:

Abrir um arquivo para escrever ou ler dados com fopen e não fechar o mesmo com fclose pode ocasionar uma série de problemas graves. Por exemplo, se um arquivo aberto para escrever dados não for fechado, então, o seu conteúdo aparecerá vazio, embora os comandos

para se escrever dados já tenham sido executados.

A utilização dos comandos fopen, fprintf e fclose será abordada, em detalhes, mais à frente.

Uma generalização do que faz str2num é executar uma string de caracteres como se fosse uma expressão do MATLAB. Isto é feito pelo comando eval, abreviação de “evaluation”, que interpreta qualquer string que seja aceita pela sintaxe do MATLAB:

>> for n = 1:5

eval(['V' num2str(n) ' = 1:n']) end

V1 = 1

V2 = 1 2

V3 = 1 2 3

V4 =

1 2 3 4

V5 =

1 2 3 4 5

Para reduzir o uso de eval, o MATLAB possui a função feval para os casos em que a função a ser utilizada já existe e é válida. Assim, o escopo de feval é limitado, mas isto a torna bem mais rápida que eval:

>> func = 'cos';

>> x = -pi:pi/2:pi;

>> y = feval(func,x)

(9)

y =

-1.0000 0.0000 1.0000 0.0000 - 1.0000

Informação complementar:

No exemplo anterior, o nome da função contida na variável “func” era uma função do MATLAB (“cos”).

Porém, este nome poderia ser de uma função criada pelo próprio usuário.

ENTRADA E SAÍDA DE DADOS Suponha que uma matriz “dados” tenha sido gerada por meio de uma função, ou ainda, um comando no espaço de trabalho. Para salvar esta matriz em um arquivo ASCII, cujos elementos estarão separados por um caracter

“delimitador”, o comando dlmwrite pode ser usado:

>> dados = [1:5; 6:10; 11:15]

dados =

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

>> dlmwrite('arq.txt',dados,';');

Esta seqüência de comandos irá gerar o arquivo de dados “arq.txt” cujo conteúdo é:

Caso o caracter delimitador não fosse especificado, então, a função assumiria que o caracter delimitador é “,”.

Para listar o conteúdo de um arquivo

“.m”, sem precisar abrir o arquivo através da interface gráfica do MATLAB, existe o comando type:

>> type arq.txt

1;2;3;4;5 6;7;8;9;10 11;12;13;14;15

Para carregar os dados de um determinado arquivo, cujos dados foram gravados por dlmwrite, usa-se dlmread:

>> clear all

>> whos

>> dados = dlmread('arq.txt',';')

dados =

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

>> whos

Name Size Bytes Class dados 3x5 120 double array

Grand total is 15 elements using 120 bytes

Para ler e armazenar dados em arquivos

“.mat” existem os comandos load e save:

>> A = [5:-1:1; 6:10];

>> B = A';

>> save file A B;

>> whos

Name Size Bytes Class A 2x5 80 double array B 5x2 80 double array Grand total is 20 elements using 160 bytes

>> clear all

>> whos

>> load file

>> whos

Name Size Bytes Class A 2x5 80 double array B 5x2 80 double array Grand total is 20 elements using 160 bytes

Informação complementar:

Os arquivos “.mat” têm formato binário e são próprios do MATLAB.

Não por acaso, é o formato de dados mais compacto e rápido disponível no MATLAB.

Ou forma de se utilizar load e save:

>> C = pi*eye(3);

>> D = pi*sin(exp(1))*ones(1,2);

>> save('file2','C','D');

>> clear all

>> whos

>> load('file2')

>> whos

Name Size Bytes Class C 3x3 72 double array D 1x2 16 double array

(10)

Para se escrever dados formatados, deve ser usado o comando fprintf. Para mostrar o uso deste comando foi construída a função “writedados.m”:

Ao digitar “writedados” no espaço de trabalho o arquivo “notas.txt” será construído:

(11)

Para se ler estes dados, usa-se fopen em conjunto com fgets e/ou fscanf e fclose, por meio da função “ledados.m”:

Ao digitar “ledados” no espaço de trabalho do MATLAB:

>> ledados

vstr =

NOTAS R.A.

Matriz = 1.0e+003 * 0.0050 4.2330 2.5370 0.0030 0.0071 4.2210 3.7320 0.0019 0.0043 3.8710

Observe que fgets lê a linha inteira, ao passo que fscanf pode tanto ler o conjunto de dados como uma matriz (como no exemplo), ou elemento por elemento (usando fscanf(fid,’ %8.4f

’)).

Além disso, os caracteres utilizados nos parâmetros de fscanf e para fopen são explicados nas tabelas a seguir:

Formatos de leitura para o fopen:

Parâmetro Funcionalidade

‘r’ Apenas para leitura

‘w’ Gravação e cria se necessário

‘a’ Anexação e cria se necessário

‘r+’ Leitura e gravação (não cria)

‘w+’ Trunca ou cria para leitura e gravação

‘a+’ Leitura e anexação e cria se necessário

‘W’ Grava sem fluxo automático

‘A’ Anexa sem fluxo automático

Caractere Descrição Exemplo

- Alinhamento à

esquerda

%-5.2d

+ Sempre imprime

sinal dos números

%+5.2d

0 Preenche

espaços ‘0’ no lugar de ‘ ‘

%05.2d

Formato Notação

%c caractere

%s cadeia de caracteres

%d decimal

%f ponto flutuante

%e exponencial

%x hex. ‘minúscula’

%X hex. ‘maiúscula’

%o octal

Exemplo Resultado fprintf(‘%c’, ’a’) a

fprintf(‘%s’, ’abc’) abc

fprintf(‘%5.3d’, pi) 3.142e+ 000 fprintf(‘%5.3f’, pi) 3.142 fprintf(‘%5.3e’, pi) 3.142e+000 fprintf(‘%x’, 27) 1b

fprintf(‘%X’, 27) 1B fprintf(‘%o’, 27) 33

Formatos de escrita para fprintf:

Carac. Nome Descrição

\b backspace Retorno de caractere

\f form feed Avanço de linha

\n new line Pula linha

\r carriage return

Retorno de linha

\t horizontal tab

Tabulação horiz.

\\ backslash Caractere \

\” quotation Caractere “

%% percent Caractere %

(12)

Algumas funções que podem auxiliar na manipulação de arquivos são listadas abaixo:

Comando Descrição dir Lista as funções e

subdiretórios do diretório atual

delete Remove um arquivo cd Muda o diretório atual pwd Retorna o diretório atual uigetfile Usando interface gráfica de

acordo com padrão para abertura de arquivos, fornecendo o nome e o diretório de um arquivo uisetfile Usando interface gráfica de

acordo com padrão para salvar arquivos, fornecendo o nome e o diretório de um arquivo

Referências

Documentos relacionados

A infecção leva a formas sintomáticas em até 70% dos infectados, sendo suas formas clínicas, nos pacientes sintomáticos, divididas em três fases: aguda ou febril, com duração de

Entre os assuntos que podiam provocar avaliações consideradas “erradas” pelos integralistas estavam: a relação entre o integralismo e o fascismo; a questão do

Se a readmissão ocorreu no segundo ano após o desligamento, destaca- ram-se os jovens com menos de 17 anos, com a 8ª série concluída ou ainda em andamento, remuneração média de um

As identidades são compreendidas, em geral, como características específicas de um grupo que os diferenciam de outros. Em relação aos espaços de confluência de

O trabalho de Ziul já teve destaque na mídia nacional diversas vezes, a exemplo da revista ‘Guitar Player’ brasileira (junho de 2010), a revista virtual GuitarLoad (janeiro de 2011),

recente do Ministério do Trabalho e Emprego ( RaiS) sobre emprego formal, um indicador relevante, dada a sua cobertura da economia formal do Estado e da Região

O potencial de economias de energia proveniente das medidas de eficiência energética estabelecidas nos acordos de racionalização dos consumos de energia dos PREn foi de 295 ktep,

Com base no exposto conclui-se que o nível de adequação da evidenciação social às recomendações da NBC T 15 das 23 empresas de capital aberto do estudo classificou-se em