You are on page 1of 65

INTRODUO COMPUTAO

William Wagner Matos Lira

UNIVERSIDADE FEDERAL DE ALAGOAS


CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA ESTRUTURAL

Adaptada ao FreeMat por:


J. Adeildo de Amorim
UNIVERSIDADE FEDERAL DE ALAGOAS
EIXO DA TECNOLOGIA
CAMPUS DO SERTO

SUMRIO
Parte 01
Introduo
Introduo ao FreeMat
Parte 02
Tipos Primitivos
o Variveis
o Constantes
Operadores
Expresses
Parte 03
Estruturas Sequenciais
Estruturas de Controle de Fluxo
o Estruturas de Seleo
o Estruturas de Repetio
Parte 04
Estruturas de Dados
o Estruturas Compostas Homogneas
 Estruturas Unidimensionais (Vetores)
 Estruturas Multidimensionais (Matrizes)
o Estruturas Compostas Heterogneas
 Registros
Parte 05
Modularizao (Funes)
Parte 06
Arquivos
o Conceito
o Organizao
o Manipulao

PARTE 01
Introduo
Noes de Lgica e Algoritmos
Introduo ao FreeMat
___________________________________________________

1.1 - Introduo
O uso de computadores no nosso dia-a-dia tem sido cada vez mais frequente. Em
todas as reas de estudo, pesquisa e trabalho eles so essenciais. Veja um exemplo
simples que serve para ilustrar esta afirmao.
Considere que desejamos fazer um levantamento para avaliar qual o melhor aluno do
ano de 2009 em uma determinada Universidade. Naturalmente, poderamos pegar as
cadernetas escolares de todos os alunos, calcular a mdia de suas notas e verificar
qual aluno obteve a maior mdia. Isso representa um trabalho muito labosioso, pois a
quantidade de informaes (dados) a serem levantados extremamente grande.
Mas e se tivermos um computador? Como ele pode ser til para resolver o nosso
problema? Simples. necessrio apenas garantir que todos os dados dos alunos
estejam armazenados em um computador e que ns possamos usar um programa
computacional para fazer os clculos desejados. Em questo de segundos poderamos
ter a resposta desejada.
Mas qual programa usar? Existem trs alternativas: uma comprar um programa
comercial (e existem vrios) que possa ser utilizado para resolver o problema. A outra
buscar uma alternativa livre que resolva o problema. A terceira desenvolvermos o
nosso prprio programa.
O presente curso tem com objetivo fornecer uma base terica e prtica para permitir o
aprendizado, capacitando o leitor a desenvolver programas computacionais para
resolver os mais diversos problemas do nosso cotidiano, pricipalmente aqueles
relacionados Engenharia.

1.1.1 - Histrico
A tarefa de processamento de dados consiste em tomar certa informao, process-la
e obter o resultado desejado.
Desde que o homem comeou a processar dados, ele tentou construir mquinas para
ajud-lo nessa tarefa. O computador digital o resultado de uma dessas tentativas que

vm sendo realizadas atravs dos sculos. Ele um dos principais produtos da cincia
do sculo XX. A evoluo dos computadores pode ser dividida nas seguintes etapas:

Computadores da 1 Gerao:
o Utilizao circuitos eletromecnicos e vlvulas
Computadores da 2 Gerao:
o Utilizao de transistores (controlam a passagem de correntes)
 Reduo do tamanho e da potncia consumida;
 Dispositivos mais robustos e confiveis
Computadores da 3 Gerao:
o Circuitos integrados
 Integrao de vrios transistores em uma nica embalagem com
a dimenso aproximada de um transistor;
 Maior potncia de clculo;
 Mais rpidos;
 Mais confiveis;
 Menores fisicamente
Computadores da 4 Gerao:
o Circuitos integrados em altissma escala
 Integrao de milhares de transistores em uma nica pastilha

Alm da evoluo acima, podemos destacar a evoluo das telecomunicaes usando


a mesma tecnologia. Isso viabilizou o uso de recursos de telecomunicaes (internet,
por exemplo) aplicados computao, possibilitando o uso distncia de um
computador por um ou vrios usurios.

1.1.2 O Computador
Existem dois tipos de computadores: Os analgicos e os digitais. Um termmetro
um exemplo de funcionamento por analogia, pois a dilatao de mercrio anloga
mudana de temperatura.
O princpio da analogia utilizado tambm em uma rgua de clculo, que pode ser
considerada como um computador analgico, onde as operaes de multiplicao e
diviso so executadas simplesmente somando-se ou subtraindo-se a distncia medida
na rgua externa quela marcada na rgua interna deslizante.
Um dos primeiros computadores analgicos de grande porte foi contrudo para prever
a altura das mars nos portos ingleses.
Os computadores analgicos de hoje so capazes, por exemplo, de simular as foras
que atuam numa represa ou as foras que atuam nas asas de um avio a partir da
voltagem eltrica.
Resumindo, os computadores analgicos so caracterizados por lidarem com
grandezas contnuas. Neles, as variveis do problema so representadas por tenses,
que so quantidades fsicas contnuas.

Ao contrrio dos computadores analgicos, que trabalham com grandezas fsicas, os


computadores digitais so capazes de somar, subtrair, multiplicar, dividir e comparar
atravs de pulsaes eltricas que, em ltima anlise, representam os dgitos 0
(ausncia de corrente) e 1 (presena de corrente).
Os computadores digitais sero o foco do nosso curso.

1.1.3 A Estrutura de um Computador Digital (Arquitetura)


O esquema de um computador digital dado pelo esquema da figura abaixo:
Memria

Unidade de
Entrada

Unidade de
Controle

Unidade de
Sada

Unidade Lgica
e Aritimtica
CPU

Ao conjunto de circuitos eletrnicos e dispositivos mecnicos d-se o nome de


hardware. Esse nome usado como referncia maquina propriamente dita, e no a
sua utilizao.
A seguir, so descritos cada componente do computador digital.

1.1.3.1 Unidade de Entrada


Esta unidade traduz informao de uma grande variedade de dispositivos em um
cdigo que a unidade central de processamento (CPU) capaz de entender. Em outras
palavras, ela capaz de traduzir nmeros, letras e imagens em pulsos eltricos que so
compreensveis ao computador. Alguns exemplos de unidades de entrada so o
teclado, unidades de discos (disquetes e cds, por exemplo), scanners, mouse, leitores
pticos, etc. As unidades de entrada tambm so conhecidas como perifricos.

1.1.3.2 Memria
o local fsico capaz de armazenar os dados e tambm os programas que iro
manipul-los. Tambm conhecida como memria RAM (Randon Access Memory).
Geralmente, a memria de alta velocidade utilizada para armazenar,
temporariamente, dados e programas que esto sendo processados, j que qualquer
6

programa, para ser executado, tem que estar nessa memria. Alm disso, as unidades
de controle e lgica e aritmtica se comunicam com cada um de seus bytes. Essa
memria costuma ser chamada de memria principal.
Ao menor item de informao binria d-se o nome de bit. A palavra bit uma
contrao de binary digit (dgito binrio) significando um dgito que pode assumir um
dos dois valores de estados diferentes 0 ou 1, tal qual um dgito decimal pode assumir
um dos dez valores 0, 1, 2, ..., 9.
Os bits so agrupados de modo a possibillitar ao usurio representar os dados e
programas que deseje. Denomina-se byte a um conjunto de bits. O nmero de bits que
formam um byte no fixo e dependem exclusivamente da mquina considerada. O
mais usual encontrar os bytes constitudos de 8 bits.
A memria do computador constituda por um conjunto de bits, sendo que o byte
recebe um endereo a fim de que os programas possam fazer referncia aos seus
dados.
A capacidade de um computador normalmente medida pelo tamanho da sua
memria.
Cada 1024 bytes representam 1 Kbyte (quilobyte). Cada 1024 kbytes representam 1
Mbyte (megabyte). 1024 Mbytes representam 1Gbyte (gigabyte). 1024 Gbytes
representam 1Tbyte (terabyte).

1.1.3.3 Unidade de Central de Processamento (CPU)


A Unidade Central de Processamento de um computador, devido a sua complexidade,
normalmente dividida em duas partes: unidade lgica e aritmtica, e unidade de
controle.
Devido ao desenvolvimento da microeletrnica possvel construir toda uma CPU em
uma nica pastilha de Silcio. Essa pastilha, ou chip, denomina-se microprocessador.
Como exemplo, podemos citar INTEL PENTIUM IV, MOTOROLA 6800, INTEL
CELERON , etc.
Os microprocessadores so classificados pelo comprimento, em bits, da unidade de
informao que so capazes de processar de uma s vez. Atualmente, os
microprocessadores mais usuais so os de 32 bits.
Resumindo, o microprecessador a unidade central de processamento (CPU) de um
microcomputador.
A seguir, so descritas as unidades que constituem a CPU.

1.1.3.3.1 Unidade Lgica e Aritimtica


Nesta unidade so realizados todos os clculos aritmticos (adio, subtrao,
multiplicao e diviso) e qualquer manipulao de dados (sejam eles numricos ou
no).

1.1.3.3.2 Unidade de Controle


a unidade responsvel pelo trfico de dados. Ela obtm dados armazenados na
memria e interpreta-os. Controla a transferncia de dados da memria para a unidade
lgica e aritmtica, da unidade de entrada para a mmoria e da memria para a
unidade de sada.

1.1.3.4 Unidade de Sada


Os dados processados so convertidos, por esta unidade, de impulsos eltricos em
palavras ou nmeros que podem ser disponibilizados ao usurio final. Exemplos
dessas unidades so o vdeo (monitor), impressoras, unidades de disco (disquetes e
CDs, por exemplo), etc. Assim como as unidades de entrada, as unidades de sada
tambm so conhecidas como perifricos.

1.2 Noes de Lgica e Algoritmos


Para compreeender melhor o processo de criao de programas computacionais,
necessrio entender os conceitos de lgica de programao e algoritmos, que sero
descritos nas sees seguintes.

1.2.1 Lgica de Programao


Lgica de programao a tcnica de encadear pensamentos para atingir determinado
objetivo. O aprendizado dessa tcnica necessrio para quem deseja trabalhar com o
desenvolvimento de sistemas e programas computacionais.

1.2.2 Algoritmos
Algoritmo uma sequncia de passos finitos cujo objetivo solucionar um
determinado problema.
Algoritmo no a soluo do problema. Algoritmo o conjunto de passos ou aes
(caminhos) que levam soluo de um dado problema. O exemplo abaixo ilustra o
uso de um algoritmo para resolver um dado problema.
Exemplo 1:
Problema: Deseja-se falar com algum atravs de um telefone pblico. Como

proceder?
Soluo: Seguir os passos descritos no telefone (algoritmo)
1 Retirar o telefone do gancho;
2 Esperar o sinal;
3 Colocar o carto;
4 Discar o nmero;
5 Falar ao telefone;
6 Colocar o telefone no gancho.
O algoritmo exatamente esta sequncia de passos que foi utilizado para resolver o
problema proposto. como se fosse ensinar uma mquina a fazer alguma tarefa
especfica.
Normalmente, existem vrios caminhos que levam soluo de um problema.
Podemos concluir, ento, que existem diversos algortimos que podem ser utilizados
para encontrar uma soluo.
O aprendizado de algoritmos no uma tarefa muito fcil. S conseguimos utiliz-lo
racionalmente atravs de muitos exerccios prticos.
Exerccio 1: Algoritmo para trocar uma lmpada
1 Se a lmpada estiver fora de alcance, pegar a escada;
2 Pegar a lmpada;
3 Se a lmpada estiver quente, pegar um pano;
4 Tirar a lmpada queimada;
5 Colocar a lmpada boa.
Exerccio 2: Algoritmo para o final de semana
1 Ver a previso do tempo;
2 Se fizer sol
ir a praia;
Seno
Estudar;
3 Almoar;
4 Ver televiso;
5 Dormir.
Exerccio 3: Algoritmo para fazer uma prova
1 Ler a prova;
2 Pegar a caneta;
3 Enquanto houver questo em branco e enquanto o tempo no terminou faa
Se souber fazer a questo
Resolv-la;
Seno
9

Pular para a prxima;


4 Entregar a prova.

1.2.3 Programa Computacional


um algoritmo escrito em uma linguagem computacional (C, Fortran, Pascal,
MATLAB, etc). a traduo do algoritmo para uma linguagem que ser interpretada
pelo computador. O mais importante de um programa computacional a sua lgica, o
raciocnio utilizado para resolver o problema (ou seja, o algoritmo).

1.2.4 Linguagem Computacional


Para armazenar um algoritmo na memria do computador e para que ele possa, em
seguida, comandar as operaes a serem executadas, necessrio que ele seja
programado, ou seja, transcrito para uma linguagem que o computador possa
entender direta ou indiretamente.
Os computadores s podem executar diretamente os algoritmos expressos em
linguagem de mquina, que um conjunto de instrues capazes de ativar
diretamente os dispositivos eletrnicos do computador.
Essa linguagem tem vrios inconvenientes para os humanos:

Diferente para cada tipo de computador, pois depende da sua arquitetura;


Extremamente rudimentar;
Expressa em forma numrica (binria ou hexadecimal), tornando-se pouco
expressiva;
Difcil manipulao dos dados na memria.

Para suprir esses problemas, foram desenvolvidas linguagens em que a programao


feita atravs de uma notao matemtica e de algumas palavras reservadas. As
linguagens de programao so bem mais simples e podem ser facilmente entendidas
e utilizadas pelos usurios do computador.
Os programas escritos nessas linguagens so traduzidos para a linguagem de mquina
atravs de um programa especial chamado Compilador.
Linguagem de
Programao

Linguagem de
Mquina

Compilador

Como exemplo de linguagens de programao podemos citar o Fortran, C, C++,


Pascal, Cobol, MATLAB, etc.

10

O MATLAB, cujos detalhes da sua linguagem sero descritos nas sees seguintes,
tem uma caracterstica bem particular. Ele no s incorpora as caractersticas de uma
linguagem de programao, mas tambm do compilador. Isso ser visto com mais
detalhes na sequncia deste curso.
Por ser um pacote comercial, o MATLAB necessita de licenciamento para qualquer
tipo de utilizao. Para que, no futuro, o emprego dos conhecimentos oriundos da
disciplina Introduo Computao no fiquem dependentes da aquisio de um
programa comercial, ser adotada a alternativa de cdigo aberto FreeMat.

1.3 Introduo ao FreeMat


O FreeMat, disponvel atravs da licena GPL, um ambiente de cdigo aberto para
rpida criao de modelos cientficos e processamento de dados. Ele similar a
sistemas comerciais como MATLAB da Mathworks e IDL da Research Systems. Na
verso 4.0, utilizada neste curso, o FreeMat possui 95% de compatibilidade com o
MATLAB, o que facilitar o aprendizado do FreeMat por meio de apostilas j
desenvolvidas para MATLAB.
Duas caractersticas bsicas so essenciais no FreeMat. A primeira refere-se ao fato
dele ser uma linguagem de programao que pode ser usada para desenvolver
programas computacionais. A segunda est relacionada com o fato dele ser um
programa de computao numrica, podendo ser usado para resolver no s operaes
matemticas complexas, mas tambm auxiliar na soluo de problemas das mais
diversas reas, incluindo a Engenharia.
Este curso dar nfase ao uso do FreeMat como linguagem de programao,
permitindo a construo de programas computacionais para a soluo dos mais
diversos tipos de problemas.
Na realidade, ser visto uma noo geral e superficial do FreeMat como um todo.
Aqueles que tm um interesse maior no seu aprendizado, recomenda-se um estudo
mais aprofundado das referncias indicadas.

1.3.1 Execuo do FreeMat


O FreeMat possui basicamente duas reas de trabalho: a janela principal, onde
realizado o gerenciamento do FreeMat (e de suas tarefas); e a janela de comandos que
o principal local de interao com o programa.

1.3.2 Alguns Comandos Bsicos


Comando de Espera

-->

11

Finalizao dos comandos


<Enter>
Exemplo 01:
--> 5 * 3 + 4
ans = 19
Nota-se que o FreeMat funciona como calculadora (executa matemtica elementar).
Exemplo 02:
--> a = 5
--> b = 3
--> c = 4
--> a * b + c
ans = 19
Neste exemplo, = o comando de atribuio, e a, b, e c so variveis. Esses detalhes
sero vistos na prxima seo.
Uso do ponto e virgula
Exemplo 03: uso do ponto e vrgula
--> a = 5;
--> b = 3;
--> c = 4;
--> a*b + c
ans = 19
Limpando a tela
Exemplo 04: limpando a tela
--> clc
Esse comando no remove as variveis criadas. Elas continuam existindo.
Verificao de variveis
Exemplo 05: como verificar quais variveis esto sendo usadas
--> who
ans b
a c

12

Visualizao de variveis
Exemplo 06: como visualizar os valores armazenados em cada varivel
--> a
a=5
Outros comandos
Exemplo 07: outros comandos
Usar teclas < ou >

Comentrios
Usar o caracter %
Exemplo 09:
--> % a varivel b tem valor inicial = 5
--> b = 5;
Configurao de Janelas
Menu Tools
o Desselecionar History.
Comando clear
o Apagar uma varivel especfica;
o Apagar todas as variveis.
Exemplo 10:
--> clear b
--> b

Error: Undefined function or variable b

Comandos Save/Open
Salvar e ler os dados e informaes digitadas.
Arquivos .M de Comandos
So arquivos usados em problemas mais complexos. So arquivos de texto simples. O
Seu processamento feito atravs da sua execuo pelo FreeMat usando, para isso, o
Menu File/New File.
Exemplo 11: arquivo .M

13

% arquivo .M exemplo
a = 4;
b = 5;
c = 3;
a*b+c
Observaes importantes:
Salvar no diretrio de trabalho (na janela de comandos do FreeMat);
Executar: --> <nome do arquivo> e teclar <Enter> na linha de comando.

Funes de Entrada e Sada


Comandos usados para fornecer dados ao programa computacional ou imprimir
resultados na tela do computador.
input: Entrada de dados pelo teclado
Exemplo 12:
--> a = input( 'Escreva o numero a: ');
--> b = input( 'Entre com um nome: ', 's');
disp: Imprime na tela um valor
Exemplo 13: arquivo .M
a = input( 'a: ');
b = input( 'b: ');
c = input( 'c: ');
d = a*b + c;
disp(d);

Comando sprintf
Os dados que so apresentados no comando de sada disp podem ser formatados
utilizando o comando sprintf.
O seu formato :
sprintf (<especificaes de formato para cada varivel da lista>, <lista de variveis>)
Onde a especificao do formato tem a seguinte forma:
% I1.I2tipo, onde
 I1 um nmero inteiro indicando o quanto de espao existe para escrever
o nmero;

14

 I2 um nmero inteiro indicando o quanto deste espao definido por I1


ser considerado como a parte decimal;
 tipo assume os seguintes valores: d, i, o, u, x, X, f, e, E, g, G, c, s.
Exemplos:
1)
--> K = 5.5432;
--> D = 890.65;
--> Y = K * D;
--> disp( sprintf ('%2.0f %3.1f %6.3f', K, D,Y) )
Resultado que dever aparecer: 6 890.6 4937.051
2)
disp (sprintf ('um grau = %5.3f radianos', pi/180))
Resultado que dever aparecer: um grau = 0.017 radianos
Maiores informaes devem ser obtidas usando o comando help sprintf. Porm, na
verso 4.0, a ajuda do FreeMat pode ser melhor visualizada utilizando a sequncia:
Digite F1;
Clique na aba Search;
Digite o termo de busca no espao do Search Text.

15

PARTE 02
Variveis
Constantes
Operadores
Expresses
___________________________________________________

Esta seo descreve os principais tpicos preliminares usados na elaborao de


programas computacionais. Esses tpicos sero apresentados e inseridos dentro do
contexto da linguagem de programao utilizada pelo FreeMat, adotada neste curso.

2.1 Tipos Primitivos


So os tipos bsicos usados para armazenar as informaes relacionadas aos dados
utilizados pelo programa computacional. Podem ser constantes ou variveis, como
podem ser vistos a seguir.

2.1.1 Constantes
Um dado dito constante quando ele no sofre alteraes durante o decorrer do
tempo, ou seja, seu valor constante desde o incio at o final da execuo do
programa computacional.

2.1.2 - Variveis
Varivel um espao (endereo) na memria principal do computador usada para
armazenar um determinado tipo de dado. A uma varivel, associa-se um nome que
serve como referncia ao dado armazenado nesse espao na memria.
O contedo de uma varivel pode ser de diversos tipos: numrico (inteiro e real),
caractere, lgico, e outros. Normalmente, o estudo de algoritmos trabalha com os
tipos acima citados.
Na maioria das linguagens de programao, as variveis precisam ser explicitamente
declaradas. Na declarao de uma varivel, o seu tipo e seu nome devem ser
obrigatoriamente especificados.
Quando uma declarao de varivel encontrada no programa, reserva-se um espao
na memria para armazenar um dado tipo da varivel e associa-se o nome da varivel
a este espao.

16

Exemplo 01 Declarao de variveis


inteiro: a;
real: x;
caracter: s;
logico: l;
a = 5;
x = 8.34;
s = 'c';
l = VERDADEIRO;
Deve-se observar que na linguagem FreeMat, no existe uma diferena entre nmeros
inteiros e reais. Eles so tratados de uma mesma forma como variveis numricas.
Alm disso, o FreeMat no requer a declarao prvia dessas variveis. Isso feito
implicitamente quando a varivel est sendo usada pela primeira vez no programa
computacional.
Exemplo 02 Variveis no FreeMat
a = 5;
b = 8.35;
s = 'c';
l = 1;
v = 'casa';

% varivel numrica
% varivel numrica
% caractere
% varivel lgica
% sequncia de caracteres (string)

As seguintes regras bsicas devem ser atendidas no uso de variveis no FreeMat.

Palavra nica (sem espaos);


Maiscula Minscula;
Tamanho mximo = 31 caracteres;
Nome deve ser iniciado com letra;
Palavras-chaves (reservadas da linguagem) no podem ser usadas.

Exemplo 03:
Erro: function uma palavra-chave (palavra reservada)
--> function = 8

Exemplo 04: Detalhe interessante


--> A = '1';
--> B = 1;

% caractere
% valor numrico 1

% A e B so diferentes

17

2.2 Operadores e Expresses


Os operadores permitem combinar variveis e constantes, formando uma expresso
que pode ser avaliada e resultar em um valor. A seguir, sero descritos os principais
operadores da linguagem FreeMat.

2.2.1 Operador de Atribuio


Permite fornecer (atribuir) um valor a uma varivel. O comando utilizando para
definir esse operador =.
Exemplo 5:
--> A = 5;
--> B = 4;
--> C = A+mod(A,B);
Deve-se observar que esquerda do comando de atribuio deve existir apenas uma
varivel.

2.2.2 Operadores Aritmticos


Conjunto de smbolos que representam as operaes bsicas da matemtica. Os tipos
bsicos usados no FreeMat so:
Soma
Subtrao
Multiplicao
Diviso

+
*
/

Alm destes, existem outros imnportantes operadores que podem ser usados na
elaborao de programas computacionais.
Potenciao
Resto de diviso
Radiciao

^
mod(x,y)
sqrt(x)

Outros operadores sero apresentados ao longo do curso.


Exemplo 06:
--> 2^3
8
Exemplo 07:

18

--> mod(5,3)
2
Exemplo 08:
--> sqrt(9)
3
Expresses aritmticas so aquelas cujos operadores so aritmticos e os operandos
so constantes ou variveis numricas.
Exemplo 09:
--> c = 5 + 3;
Ou
--> a = 3;
--> b = 1;
--> c = 3 + a*b;
Exemplo 10:
--> a = 'teste'
--> b = a + 2

Erro: no uma expresso aritmtica

2.2.1.1 Prioridades
Existe uma ordem que define a precedncia (hierarquia) entre os operadores
aritmticos, como pode ser visto na tabela abaixo:
Parnteses mais internos
^, sqrt
*, /, mod
+, Exemplo 11:
--> 5 + 9 + 7 + 8/4
5+9+7+2
23
Exemplo 12:
-->1 + 5 + (2 + 3) * 4
1+5+5*4
1 + 5 + 20
26

2.2.3 Operadores e Expresses Relacionais e Lgicas


19

Os operadores relacionais e lgicos so usados para realizar comparaes entre dois


valores do mesmo tipo (constantes e variveis). O resultado produzido por um
operador relacional zero ou um. No FreeMat, no existe explicitamente o operador
lgico VERDADEIRO ou FALSO. Se o resultado de uma comparao for falso,
produz o valor zero. Caso contrrio, produz o valor um.
Os operadores relacionais do FreeMat so:
<
<=
>
>=
==
~=

Menor que
Menor ou igual a
Maior que
Maior ou igual a
Igual a
Diferente de

Cuidado!
Exemplo 13:
--> 2 * 4 == 24 / 3
8 == 8
1
Exemplo 14:
--> vf = (4*5+3) + 4 == 20/4 + 15;
--> vf
vf = 0
As expresses relacionais so aquelas cujos operadores so relacionais e cujos
operandos so relaes, variveis ou constantes do tipo lgico.
Exemplo 15:
--> A = 3;
--> B = 2;
--> (A + B) > 3

Expresso Relacional

Os operadores lgicos so utilizados na formao de proposies lgicas compostas.


No FreeMat, tais operadores so representados pelos seguintes comandos:
&
|
~

and
or
not

20

Exemplo 16: (Tabelas-Verdade)


Negao
A
Falso
Verdadeiro

No A
Verdadeiro
Falso

Conjuno
A
F
F
V
V
Disjuno No-Exclusiva
A
F
F
V
V

B
F
V
F
V

A&B
F
F
F
V

B
F
V
F
V

A ou B
F
V
V
V

As expresses lgicas so aquelas cujos operadores so lgicos ou relacionais e cujos


operandos so relaes, variveis ou constantes do tipo lgico.
Exemplo 17:
--> 2 < 5 & 15/3 == 5
v &v
V
--> 2 < 5 | 15/3 == 5
v|v
V
--> 2 < 5 | (~(15/3==5))
v | (~v)
v| f
V

21

PARTE 03
Estruturas Seqenciais e de
Controle de Fluxo
___________________________________________________
Na construo de algoritmos, utilizamos os conceitos de:
 variveis
 constantes
 atribuies
 operadores e expresses aritmticas, lgicas e relacionais
 comandos que traduzem esses conceitos de forma a representar o
conjunto de aes desejadas.
Para que esse conjunto de aes se torne vivel, necessrio estabelecer o fluxo de
execuo do algoritmo.
Isso possvel a partir do uso das estruturas bsicas de controle do fluxo de execuo
e das combinaes entre elas, permitindo a criao de algoritmos e programas
computacionais usados na soluo dos problemas. Essas estruturas so apresentadas
na presente seo.

3.1 - Estruturas Sequenciais


Correspondem a execuo do conjunto de aes primitivas em uma sequncia linear
de comandos de cima para baixo e da esquerda para direita (ou seja, na mesma ordem
em que foram escritas).
Exemplo 01: Calcular a mdia aritmtica de quatro notas semestrais quaisquer
fornecidas por um aluno.
N1 = input( 'Entre com a nota 1: ');
N2 = input( 'Entre com a nota 2: ');
N3 = input( 'Entre com a nota 3: ');
N3 = input( 'Entre com a nota 4: ');
MA = (N1+N2+N3+N4)/4;
disp('A media e: ');
disp(MA);
Neste exemplo, deve-se observar que o fluxo de execuo de cima para baixo, da
esquerda para a direita.

22

Exemplo 02: Fazer um programa que leia os coeficientes de uma equao do


primeiro grau do tipo y = Ax + B e calcule a sua raiz. Imprimir o resultado na tela
(questo da lista).
A = input( 'Coeficiente A: ');
B = input( 'Coeficiente B: ');
x = -B/A;
disp( 'A raiz e: ');
disp(x);
Exemplo 03: O clculo do ponto de interseo entre duas retas pode ser obtido
igualando-se as suas equaes. Baseado nessa informao, fazer um programa que
leia os coeficientes das equaes das retas e calcule o ponto de interseo. As retas
so definidas pelas equaes y = Ax+B e y = Cx + D. Imprimir o resultado.
A = input( 'Coeficiente A: ');
B = input( 'Coeficiente B: ');
C = input( 'Coeficiente C: ');
D = input( 'Coeficiente D: ');
x = (D-B)/(A-C);
y = A*x + B;

Ax+B = Cx + D; (A-C)x=(D-B)
x=(D-B)/(A-C)
y=Ax+B

disp( 'Coordenada X: ');


disp(x);
disp('Coordenada Y: ');
disp(y);
Exemplo 04: Fazer um programa para calcular a norma do vetor x = (x1, x2, x3), onde
os coeficientes devem ser lidos.
x1 = input( 'Coeficiente 1: ');
x2 = input( 'Coeficiente 2: ');
x3 = input( 'Coeficiente 3: ');
n = sqrt(x1*x1 + x2*x2 + x3*x3);
disp( 'A norma e: ');
disp(n);
E se eu desejar calcular o vetor unitrio?

23

3.2 Estruturas de Controle de Fluxo


As estruturas de controle de fluxo so fundamentais para qualquer linguagem de
programao. So estruturas que alteram o fluxo de execuo do programa. Sem elas
s haveria uma maneira do programa ser executado: de cima para baixo comando por
comando. No haveria condies, repeties ou saltos.
A linguagem FreeMat possui diversos comandos de controle de fluxo. possvel
resolver todos os problemas sem utilizar todas elas, mas deve-se notar que a elegncia
e facilidade de entendimento de um programa dependem do uso correto das estruturas
nos locais certos.

3.2.1 Estruturas de Seleo (Condicional)


Essas estruturas permitem a escolha de um grupo de comandos a ser executado
quando determinadas condies so ou no satisfeitas (verdadeiro ou falso). Aqui, so
usados os conceitos de expresses lgicas e relacionais vistos anteriormente.

3.2.1.1 - Seleo Simples


Usada quando precisamos testar uma certa condio antes de executar uma ao. Seu
modelo descrito abaixo.
if < condio >
comando 1;
comando 2;
comando n;
end

Expresso Lgica
e/ou relacional

Exemplo 01: Clculo da mdia com verificao de aprovao.


N1 = input( 'Entre com a nota 1: ');
N2 = input( 'Entre com a nota 2: ');
N3 = input( 'Entre com a nota 3: ');
N4 = input( 'Entre com a nota 4: ');
MA = (N1+N2+N3+N4)/4;
disp( 'A media e: ');
disp(MA);
if( MA >= 7 )
disp( 'Aluno aprovado! ');
end

24

3.2.1.2 - Seleo Composta


Usado quando existir situaes em que duas alternativas dependem de uma mesma
condio (uma ser verdadeira e outra falsa).
if < condio verdadeira >
comando a-1;
comando a-2;
comando a-n;
else
comando b-1;
comando b-2;
comando b-n;
end

Expresso Lgica
e/ou relacional

Exemplo 02: clculo da mdia com verificao de aprovao e reprovao.


N1 = input( 'Entre com a nota 1: ');
N2 = input( 'Entre com a nota 2: ');
N3 = input( 'Entre com a nota 3: ');
N3 = input( 'Entre com a nota 4: ');
MA = (N1+N2+N3+N4)/4;
disp( 'A media e: ');
disp(MA);
if( MA >= 7 )
disp( 'Aluno aprovado! ');
else
disp( 'Aluno reprovado! ');
end

3.2.1.3 - Seleo Encadeada


Usada quando existe necessidade de agrupar-se vrias selees de forma encadeada.
if < condio1 >
comando a-1;
comando a-2;
comando a-n;
elseif < condio 2 >
comando b-1;
comando b-2;
comando b-n;
elseif < condio 3 >
if < condio 3-a >
comando c-1;

25

comando c-2;
comando c-n;
end
else
comando d-1;
comando d-2;
comando d-n;
end
Exemplo 03: clculo da mdia verificando aprovao, reprovao e final.
N1 = input( 'Entre com a nota 1: ');
N2 = input( 'Entre com a nota 2: ');
N3 = input( 'Entre com a nota 3: ');
N3 = input( 'Entre com a nota 4: ');
MA = (N1+N2+N3+N4)/4;
disp( 'A media e: ');
disp(MA);
if( MA >= 7 )
disp( 'Aluno aprovado! ');
elseif( MA < 5 )
disp( 'Aluno reprovado! ');
else
disp( 'Aluno na final');
end

3.2.1.4 - Seleo de Mltipla Escolha


Esse tipo de seleo uma alternativa para o uso da seleo encadeada if-else-if.
switch( variavel )
case v1:
comandos 1;
break;
case v2:
comandos 2;
break;
case vn:
comandos n;
break;
otherwise:
comandos;
break;
end
Deve observar que variavel no pode ser uma expresso.

26

Exemplo 04:
disp('digite 1: primeira opcao ');
disp('digite 2: segunda opao ');
disp('digite 3: terceira opcao ');
x = input( ' ');
switch( x )
case 1:
disp( 'Foi digitada a primeira opcao ');
break;
case 2:
disp( 'Foi digitada a segunda opcao ');
break;
case 3:
disp( 'Foi digitada a terceira opcao ');
break;
otherwise:
disp( 'Opcao nao existente ');
break;
end

3.2.1.5 - Exerccios
Exerccio 01: Escrever um algoritmo que leia 3 valores numricos e mostre-os em
ordem crescente.
A = input( 'Valor 1: ');
B = input( 'Valor 2: ');
C = input( 'Valor 3: ');
if( A < B )
if( B < C )
disp(A); disp(B); disp(C);
else
if( A < C )
disp(A); disp(C); disp(B);
else
disp(C); disp(A); disp(B);
end
end
elseif( A < C)
disp(B); disp(A); disp(C);
else
if( B < C )
disp(B); disp(C); disp(A);
else

27

disp(C); disp(B); disp(A);


end
end

Exerccio 02 Ler 3 nmeros, verificar se eles podem ou no ser lados de um


tringulo. Se sim, classificar o tringulo quanto os seus lados.
3 lados iguais: Equiltero
2 lados iguais: Isceles
Lados desiguais: Escaleno
A = input( 'Entre c/ o primeiro lado: ');
B = input( 'Entre c/ o segundo lado: ');
C = input( 'Entre c/ o terceiro lado: ');
if( A < B+C & B < A+C & C < A+B )
if( A == B & B == C )
Disp( 'Triangulo Equilatero! ');
elseif( A == B | B == C | A == C )
disp( 'Triangulo Isoceles! ');
else
disp( 'Triangulo Escaleno! ');
end
else
disp(Lados nao formam um triangulo!);
end
Exerccio 03 Criar um algoritmo que entre com o valor de x, calcule e imprima o
valor de f(x), onde
f(x) = (5x+3) / sqrt(x2 16)
x = input('Entre c/ o valor de x: ');
d = x^2 16;
if( d <= 0 )
disp( 'Nao existe solucao real! ' );
else
f = (5x+3)/sqrt(d);
disp('O valor de f e': ');
disp(f);
end
Exerccio 04 Escrever um programa que verifique se um dado nmero par ou
mpar (entre 0 e 100).
A = input( 'Entre c/ o numero: ');

28

if( A < 0 )
disp( 'O numero e menor que zero! ');
elseif( A > 100 )
disp( 'O numero e maior que cem! ');
else
if( mod(A,2) == 0 )
disp( 'O numero e par! ');
else
disp( 'O numero e impar! ');
End
End

3.2.2 - Estruturas de Repetio


Considere o seguinte algoritmo para o clculo da mdia bimestral de um aluno:
Exemplo 07:
P1 = input( 'Nota do trabalho: ');
P2 = input( 'Nota da prova: ');
Media = 0.3*P1 + 0.7*P2;
disp(Media);
E se eu desejar calcular a mdia dos 25 alunos da turma? Uma soluo repetir o
cdigo acima 25 vezes; outra opo rodar (executar) o programa acima 25 vezes.
No entanto, nem sempre essas solues so viveis.
A idia, ento, usar o mesmo trecho do cdigo acima sem a necessidade de
reescrev-lo. As estruturas usadas para implementar essa idia so chamadas
Estruturas de Repetio. Elas podem ser divididas em dois tipos bsicos:
 Estruturas de Repetio Definidas
 Estruturas de Repetio Indefinidas
Essas estruturas so vista na seqncia desta seo.

3.2.2.1 - Estruturas de Repetio Definidas


So estruturas de repetio com um nmero finito de repeties. Sua sntaxe dada
por:
para i de vi at vf de passo faa
comando 1;
comando 2;
comando 3;

29

fim
i
vi
vf
passo

= varivel de controle;
= valor inicial atribudo a i;
= valor final atribudo a i (condio de parada);
= incremendo dado vriavel i.

Exemplo 01: Calcular a mdia anual de 10 alunos.


Acumulador

s = 0;
for i = 1:1:10
m = input( 'media: ');
s = s + m;
end
media = s / 10;
disp(media);

O funcionamento do cdigo acima dado pela tabela abaixo:


i
1
2
3
4
5
6
7
8
9
10

m
10
5
5
8
7
10
5
6
4
3

s
10
15
20
28
35
45
50
56
60
63

Ao final da execuo, a varivel mdia vai armazenar o valor 63/10 = 6.3.


Exemplo 02: Calcular a soma dos 5 primeiros nmeros pares no-negativos.
soma = 0;
for i = 2:2:10
soma = soma + i;
end
disp(soma);
Ou
soma = 0;

30

for i = 1:1:5
soma = soma + 2*i;
end
disp(soma);
E se desejssemos calcular a soma dos 100 primeiros nmeros pares no-negativos? A
alterao seria apenas no limite da estrutura de repetio. Isso mostra a importao
desse tipo de estrutura.
Exemplo 03: Calcular a mdia bimestral de 10 alunos.
for i = 1:1:10
p1 = input( 'Nota do Trabalho: ');
p2 = input( 'Nota da Prova: ');
media = 0.3*p1 + 0.7*p2;
disp( 'Media');
disp(media);
end
Exemplo 04: Dado um nmero qualquer, calcular o seu fatorial.
x = input( 'Entre com um numero: ' );
fat = 1;
for i = 1:1:x
fat = fat * i;
end
disp(fat);

3.2.2.2 - Estruturas de Repetio Indefinidas


So estruturas onde no se conhece, a priori, quantas execues sero realizadas. Sua
sntaxe dada por:
enquanto ( expresso condicional )
comando 1;
comando 2;
comando 3;
fim
onde expresso condicional representa a condio de execuo do bloco.
No FreeMat,
while ( expresso condicional )
31

comando 1;
comando 2;
comando 3;
end
Exemplo 01: Calcular o valor de f(x) = x2 + 2 at que f(x) seja maior que 20.
F = 0;
while( f <= 20 )
x = input( 'Entre com x: ');
F = x^2 + 2;
disp(f);
end
As estruturas de repetio indefinida tambm podem ser usadas em problemas
definidos. No entanto, o inverso no verdade.
Exemplo 02: Calcular a mdia anual de 10 alunos usando while.
soma = 0;
cont = 1;
while( cont <= 10 )
m = imput( 'Media: ');
soma = soma + m;
cont = cont + 1;
end
media = soma/(cont 1);
disp(media);

3.2.2.3 - Exerccios
Exerccio 01: Jogo do Adivinha: Escolher um nmero de 0 a 100. Tente adivinhar o
nmero gerado. A cada tentativa, deve-se informar mais baixo, mais alto ou acertou.
Quando acertar, mostrar o nmero de tentativas.
Obs.: O comando randi(0,100) deve ser usado para gerar um nmero inteiro
aleatrio entre 0 e 100.
teste = 0;
soma = 0;
segredo = randi(0,100);
while( teste == 0 )
chute = input('Entre com um numero: ');

32

soma = soma + 1;
if( chute == segredo )
teste = 1;
disp( 'Acertou ');
disp( 'Tentativas: ');
disp(soma);
elseif( chute < segredo )
disp( 'Mais alto... ');
else
disp( 'Mais baixo...');
end
end
Exerccio 02: Jogo do Adivinha 2: O usurio pensa em um nmero entre 0 e 100 e
executa o programa. O computador chuta um valor. A cada chute, deve-se
informar se o computador acertou, mais alto ou mais baixo. Ao final, deve-se
informar o nmero de tentativas chutadas pelo computador.
teste = 0;
soma = 0;
segredo = input( 'Entre com um numero: ');
if( segredo >= 0 & segredo <= 100 )
Min = 0;
Max = 100;
while( teste == 0 )
chute = rand(Min,Max);
soma = soma + 1;
disp( 'Numero Chutado: ');
disp(chute);
if( chute == segredo )
teste = 1;
disp( 'Acertou');
disp('Tentativas: ');
disp(soma);
elseif( chute < segredo )
disp( 'Mais alto... ');
Min = chute;
else
disp( 'Mais baixo');
Max = chute;
end
end
end

33

Exerccio 03: Calcule o valor do cosseno de x (em radianos) usando os 20 primeiros


termos da srie

cos( x) = 1

x2
2!

x4
4!

x6
6!

x8
8!

+ ...

x = input( 'Entre com o valor do ngulo: ');


c = 0;
sinal = 1;
for i = 0:1:19
fat = 1;
for j = 1:1:2*i;
fat = fat * j;
end
c = c + sinal * x^(2*i)/fat;
sinal = -1 * sinal;
end
disp(c);
Exerccio 04: Fazer um programa seguindo as seguintes orientaes:
a) Leia os parmetros A e B da equao da reta dada por y = Ax+B;
b) Leia os parmetros C, D e R da equao do crculo dada por Cx2+Dy2=R2;
c) Leia as coordenadas (x,y) e verifique se esse ponto um dos pontos de
interseo entre a reta e o crculo dados. Um ponto de interseo se ele
atender as equaes das curvas dadas.
A = input( 'Entre com o parmetro A: ');
B = input( 'Entre com o parmetro B: ');
C = input( 'Entre com o parmetro C: ');
D = input( 'Entre com o parmetro D: ');
R = input( 'Entre com o parmetro R: ');
x = input( 'Entre com a coordenada X do ponto: ');
y = input( 'Entre com a coordenada Y do ponto: ');
If( A*x + B == y & C*x^2 + D*y^2 == R^2 )
disp(Ponto de intersecao.);
end
E se desejssemos os pontos de interseo?

34

PARTE 04
Estruturas de Dados
___________________________________________________
Nas sees anteriores, foi feita uma diviso imaginria (numrico, caractere e lgico)
com o objetivo de tornar mais simples a classificao das informaes (dados) de um
programa.
No entanto, em muitas situaes esses recursos so escassos. Esta seo descreve
novos tipos de dados que so construdos e organizados a partir da composio dos
tipos primitivos vistos anteriormente. Esses novos tipos so conhecidos como
Estrutura de Dados e so classificados da seguinte forma:

Estrutura de Dados
o Variveis Compostas Homogneas;
 Unidimensionais (Vetores);
 Multidimensionais (Matrizes).
o Vriveis Compostas Heterogneas
 Registros

Essas novas variveis so descritas na sequncia desta seo.

4.1 - Variveis Compostas Homogneas


So estruturas de dados compostas de variveis do mesmo tipo primitivo, como
podem ser vistos nos exemplos abaixo:
3
8.5
7
5
C

Numrico

Caracteres

A varivel o todo (ou seja, o conjunto). Cada termo da varivel chamado de


elemento. Em ambos os exemplos, cada elemento tem o mesmo tipo primitivo
(nmeros e caracteres). Da a denominao Homogneo. Uma string (cadeia de
caracteres) uma varivel composta homognea.
Os exemplos acima so variveis compostas unidimensionais (tambm chamadas de
vetores).
O exemplo abaixo tambm ilustra uma varivel composta homognea. No entanto, ela
classificada como uma varivel composta multidimensional (conhecida como
matriz).
35

1
5
7.5

0
2
3

4
1
1

O exemplo abaixo ilustra o exemplo de uma varivel composta que no classificada


como homognea.
C

4.1.1 Vetores (Variveis compostas homegneas unidimensionais)


So estruturas de dados compostas de elementos do mesmo tipo primitivo e
armazenados em matrizes linha ou coluna. O exemplo abaixo ilustra a criao de um
vetor no FreeMat.
Exemplo 01:
--> A = 1:5
--> B = ones(1,10)
--> C = zeros(1,5)
O exemplo acima produz o seguinte vetor:
1

A seguir, mostrado outro exemplo para ilustrar o uso de vetores.


Exemplo 02:
--> % imprime o segundo elemento do vetor. 2 o ndice do vetor.
--> disp(A(2));
--> % Alterando o terceiro elemento do vetor.
--> A(3) = 10;
for i = 1:1:10
A(i) = 2*i 1;
end

1, 3, 5, 7, 9, , 19

disp(A);

36

Mas para que servem os vetores? Os exemplos abaixo serviro para responder tal
questo.
Exemplo 03:
% a) Clculo da mdia aritmtica de 10 notas
soma = 0;
for i = 1:1:10
x = input('Entre com a nota: ');
soma = soma + x;
end
media = soma / 10;
% b) Quais notas so maiores que a mdia?
A1 = input('Nota 1: ');
A2 = input('Nota 2: ');
A3 = input('Nota 3: ');
.
.
.
A10 = input('Nota 10: ');
media = (A1 + A2 + ... + A10) / 10;
if( A1 > media )
disp( A1 );
end
if( A2 > media )
disp( A2 );
end
.
.
.
Mas e se tivssemos 100 notas? A soluo acima seria invivel. O exemplo abaixo
usa vetor para resolver o mesmo problema.
Exemplo 04: Exemplo anterior usando vetores
soma = 0;
for i = 1:1:10
nota(i) = input('Entre c/ a nota: ');
soma = soma + nota(i);
end

37

media = soma / 10;


for i = 1:1:10
if( nota(i) > media )
disp(nota(i));
end
end
Exemplo 05: Fazer um programa que leia, some e imprima o resultado da soma entre
dois vetores de 10 posies.
for i = 1:1:10
A(i) = input('valor armazenado no vetor A: ');
B(i) = input('valor armazenado no vetor B: ');
C(i) = A(i) + B(i);
end
disp( C );
Exemplo 06: Fazer um programa que preencha um vetor de 100 elementos colocando
1 na posio correspondente a um nmero par e 0 a um nmero mpar.
for i = 1:1:100
if( mod(i,2) == 0 )
a(i) = 1;
else
a(i) = 0;
end
end
disp(a);
Exemplo 07: Seja o vetor V = {2, 6, 8, 3, 10, 9, 1, 21, 33, 14}. Seja tambm x = 2 e y
= 4.
V(x+1)
V(x+2)
V(x*4)
V(V(x+y))
V(x+y)
V(V(1)*V(4))

V(3) = 8
V(4) = 3
V(8) = 21
V(V(6)) = V(9) = 33
V(6) = 9
V(2*3) = V(6) = 9

Exemplo 08: Fazer um programa que leia um vetor de 10 posies e coloque-o em


ordem crescente, utilizando a seguinte estratgia:
Selecione o elemento do vetor que apresenta o menor valor;
Troque este elemento pelo primeiro;
Repita essas operaes envolvendo agora apenas os 9 elementos restantes, at
restar um nico elemento.

38

for i = 1:1:10
a(i) = input('A: ');
end
for j = 1:1:10
% inicializacao
menor = a(j);
posicao = j;
% selecionando o menor
for i = j:1:10
if( a(i) < menor )
menor = a(i);
posicao = i;
end
end
% troca
aux = a(j);
a(j) = menor;
a(posicao) = aux;
end
Sobre o exemplo acima, as seguintes questes devem ser observadas:
a) A varivel posicao armazena a posio do menor valor;
b) Uso de uma varivel auxiliar aux para fazer a troca de 2 nmeros.

4.1.2 - Variveis Compostas Multidimensionais (Matrizes)


So estruturas de dados compostas de elementos do mesmo tipo primitivo e
armazenados em formato matricial.

O Exemplo abaixo ilustra a diferena entre vetores e matrizes:


Vetores
o Um ndice (unidimensional) para endereamento
A(1) = 3;
A(2) = 7;

Matrizes
39

o Dois ndices (bidimensional) para endereamento


A(1,1) = 1;
A(2,1) = 5;
A(1,2) = 4;
A(2,2) = 3;
1
5

4
3

Nesse exemplo,

A uma matriz bidimensional 2x2;


A uma varivel;
Cada termo de A um elemento.

Para acessar um elemento de uma matriz precisamos de dois ndices. O primeiro


ndice corresponde a linha da matriz; o segundo coluna.
A(i,j) linha i, coluna j
--> A(3,4) = 2;
Aqui, o valor 2 atribudo ao elemento correspondente a linha 3, coluna 4 da matriz
A.
1

1
2
3

Alguns detalhes devem ser obsevados:


a) Uma matriz um conjunto de vetores;
b) Para utilizarmos um vetor, manipulamos um nico lao de repetio;
c) Para utilizarmos uma matriz, manipulamos tantos laos de repetio quanto forem
suas dimenses (bidimensional = 2 laos; tridimensional = 3 laos, etc).
Exemplo 09: Construir um programa para ler duas matrizes, efetuar a sua soma e
imprimir o resultado.
for i = 1:1:5
disp('linha');
disp(i);
for j = 1:1:5
a(i,j) = input('a: ');
b(i,j) = input('b: ');
c(i,j) = a(i,j) + b(i,j);

40

end
end
disp(c);
4.1.3 - Exerccios
Exerccio 01: Construir um programa para ler uma matriz e calcular a sua
transposta.
for i = 1:1:5
for j = 1:1:5
A(i,j) = input('A: ');
B(i,j) = A(j,i);
end
end
disp(B);
Exerccio 02: Fazer um programa que leia os elementos de uma matriz 5x5 e escreva
a soma dos elementos da diagonal principal.
soma = 0;
for i = 1:1:5
for j = 1:1:5
A(i,j) = input('A: ');
end
soma = soma + A(i,i);
end
disp(soma);
Exerccio 03: Fazer um programa que calcule o produto de 2 matrizes.
A = 3x2
B = 2x4
for i = 1:1:3
for j = 1:1:2
A(i,j) = input('A: ');
end
end
for i = 1:1:2
for j = 1:1:4
B(i,j) = input('B: ');
end
end
for i = 1:1:3
for j = 1:1:4
41

C(i,j) = 0;
for k = 1:1:2
C(i,j) = C(i,j) + A(i,k) * B(k,j);
end
end
end

4.1.4 - Varveis Compostas Heterogneas (Registros)


So variveis compostas por diferentes tipos primitivos (Veja os exemplos abaixo).
Heterognea
Homognea

(1, 2, 'Carro', 'Alagoas', 3.55)


(0, 4, 30, 20)

Exemplo:
Passagem de nibus Formada por um conjunto de informaes logicamente
relacionadas, mas de tipos diferentes.

Nmero da passagem (numrico);


Origem e Destino (caracteres);
Data (caracteres);
Horrio (numrico);
Poltrona (numrico);
Distncia (numrico);
Fulmante (lgico: verdadeiro ou falso).

Campos da
varivel

Alguns detalhes que devem ser observados:


a) Varivel do tipo registro: passagem de nibus;
b) Cada campo do registro deve possuir um nome associado a ele.
Exemplo 01:
% criando um registro (varivel) chamado de B
B = { };
% criando os campos da varivel B e atribuindo valores a eles
B.marca = 'Fiat';
B.tipo = 'Palio';
B.cor = 'Preto';
B.ano = 2004;
B.placa = 'xyw1030';
disp(B);

42

Exemplo 02: Fazer um programa para ler informaes escolares de um aluno e


armazen-los em um registro. Os dados do aluno so nome, idade, nmero da
matrcula e srie que est cursando.
Aluno = { };
Aluno.nome = input('Nome: ', 's');
Aluno.idade = input('Idade: ');
Aluno.matri = input('Matricula: ');
Aluno.serie = input('Serie: ');
disp(Aluno);
E se ns desejamos armazenar informaes sobre vrios alunos? Isso pode ser feito a
partir da composio (combinao) entre variveis compostas homogneas e
heterogneas.
registro 1
registro 2
registro 3
registro 4
Exemplo 03:
for i = 1:1:4
aux = { };
aux.nome = input('Nome: ', 's');
aux.idade = input('Idade: ');
aux.matri = input('Matricula: ');
aux.serie = input('Serie: ');
aluno(i) = aux;
end
for i = 1:1:4
disp(aluno(i));
end
1
2
3
4

registro 1
registro 2
registro 3
registro 4

4.1.5 Exerccios
Exerccio 01: Fazer um programa que leia 5 nmeros e armazene-os em um vetor.
Criar um outro vetor contendo os nmeros mltiplos de 3. Imprim-los.

43

for i = 1:1:5
v(i) = input('Entre com o valor: ');
end
j = 0;
for i = 1:1:5
if( mod(v(i),3) == 0 )
j = j + 1;
w(j) = v(i);
end
end
% nao existe multiplos de 3
if( j == 0 )
disp('Nao existe multiplos de 3! ');
else
disp(w);
end
Exerccio 02: Fazer um programa que leia um vetor A com 5 elementos e construa
um vetor B da seguinte forma:
Ex.: A = (3, 8, 4, 2, 5)
B = (9, 4, 2, 1, 15);
for i = 1:1:5
A(i) = input('Entre com A: ');
end
for i = 1:1:5
if( mod(A(i),2) == 0 )
B(i) = A(i) / 2;
else
B(i) = 3*A(i);
end
end
disp(B);
Exerccio 03: Fazer um programa que leia 2 matrizes 2x3 e calcule uma terceira
matriz dada pela expresso R = 2*At-Bt.
for i = 1:1:2
for j = 1:1:3
A(i,j) = input('A: ');
end
end

44

for i = 1:1:2
for j = 1:1:3
B(i,j) = input('A: ');
end
end
for i = 1:1:2
for j = 1:1:3
AT(j,i) = A(i,j);
BT(j,i) = B(i,j);
end
end
for i = 1:1:3
for j = 1:1:2
R(i,j) = 2*AT(i,j) BT(i,j);
end
end
disp( R );
Exerccios 04: Fazer um programa para ler e armazenar informaes sobre n alunos.
As informaes so: nome, mdia, aprovado (S ou N) e sexo (M ou F). Pede-se
ainda para imprimir o nmero de mulheres aprovadas.
n = input('Numero de alunos');
for i = 1:1:n
aluno = { };
aluno.nome = input('Nome: ', 's');
aluno.media = input('Media: ');
aluno.aprov = input('Aprovado (S/N): ', 's');
aluno.sexo = input('Sexo (M/F): ', 's');
turma(i) = aluno;
end
num = 0;
for i = 1:1:n
if( turma(i).aprov == 'S' )
if( turma(i).sexo == 'F' )
num = num + 1;
end
end
end
disp( num );

45

PARTE 05
Modularizao
___________________________________________________

Uma tcnica para resolver problemas complexos a decomposio do problema em


vrios subproblemas.

Problemas Complexos
Tcnicas
Decomposio em subproblemas
Algumas vantagens so:

Dividir a complexidade do problema original, simplificando a sua resoluo;


Focalizar a ateno em problemas menores de cada vez, permitindo uma
melhor compreenso do todo.

O critrio adotado neste curso baseado na seguinte tcnica:

Dividir o problema em suas partes principais;


Analisar a diviso;
Se alguma parte ainda estiver complexa, decomp-la tambm;
Analisar o resultado, garantindo entendimento e coerncia.

5.1 - Mdulos (Funes)


Aps a decomposio do problema, pode-se construir sub-algoritmos ou mdulos
para cada subproblema obtido. Esses mdulos so as chamadas funes.
Exemplo: Gerenciamento Salarial
a) Dados
Nome
Ano Base
Salrio/Ms
Salrio/Ano (inclundo o 13o)
b) Pede-se
Clculo salrio/dia (20 dias/ms)
Clculo salrio/hora (8 horas/dia)

46

Novo salrio com aumento baseado no ndice da inflao


Classificao em classes sociais (A, B, C, D e E)

c) Sada (Resultados)
Nome
Salrio/Ms
Salrio/Ano
Classe Social
Quando temos um problema complexo, como visto acima, a idia , ento, subdividlo (decompor) em vrios subproblemas, utilizando mdulos (funes) para
representar, no algoritmo, a decomposio do problema.
Construir um mdulo significa construir um algoritmo em instncias menores. O
problema do exemplo acima ter 3 mdulos:
Problema

Entrada

Clculos

Sada

Sal./Dia

Sal./Ms

Novo Sal.

Classe Social

Mdulo 1 Entrada dos dados


Mdulo 2 a) Clculo do Novo Sal.;
b) Sal./Dia
c) Sal./Ms
d) Classe Social
Mdulo 3 sada dos dados
Exemplo 01: Entrada de dados da forma convencional
func = { };
func.nome
func.ano
func.sal_mes
func.sal_ano

= input(Nome: , s);
= input(Ano: );
= input(Salario Mensal: );
= input(Salario Anual: );

Exemplo 02: Entrada de dados usando funo


function f = entrada
f = { };
f.nome
f.ano
f.sal_mes
f.sal_ano

= input(Nome: , s);
= input(Ano: );
= input(Salario Mensal: );
= input(Salario Anual: );
47

Os exemplos so equivalentes. Apenas no caso 2 foi criada uma funo para ler os
dados do problema.
Alguns detalhes que devem ser observados no MATLAB:

Uma funo identificada pela palavra-chave function;


Todas funes tm um nome associado. Neste exemplo, o nome entrada;
Cada funo deve ser armazanada em um arquivo M separado (um arquivo
para cada funo);
O nome do arquivo deve ser igual ao nome da funo armazenada nele. No
exemplo acima, o arquivo deve se chamar entrada.m;
A varivel f, que um registro, s vlida dentro da funo entrada. Dizemos
que ela uma varivel local.

Resumindo:

Nome da funo
function entrada
Palavra-chave
obrigatria
Em um projeto maior, tambm seria necessrio criar funes para imprimir os dados,
fazer clculos numricos, etc.
Existe, ento, a necessidade de ligar as vrias funes do programa. Isso pode ser
feito no mdulo principal do programa.
Chamar a funo entrada
Mdulo Principal

Chamar a funo calculos


Chamar a funo imprime

Exemplo: Mdulo principal


function entrada
.
.
.

Salvar no arquivo
entrada.m

function imprime
.
.
.

Salvar no arquivo
imprime.m

% modulo principal
entrada;
imprime;

Salvar em qualquer arquivo. Este o


mdulo que deve ser executado.

48

A execuo interna do programa segue as diretrizes abaixo:

Linha 1 comentrio
Linha 2 chama (executa) a funo entrada
o Executa todos os comandos dessa funo
Linha 3 chama a funo imprime
o Executa todos os comandos dessa funo

Todas as variveis criadas dentro de uma funo s podem ser usadas na prpria
funo. Elas no existem fora deste contexto.
Exemplo: Uso de Variveis Locais
function teste
a=3;
b=2;
C=a*b;

Salvar no arquivo
teste.m

function imprime
disp(a);
disp(b);
disp(c);

Salvar no arquivo
imprime.m

% modulo principal
teste;
imprime;

Erro: a, b e c no existem em imprime.

A soluo para resolver problemas como este o uso de Argumentos de Funes e


Valores de Retorno de Funes.
Alguns comandos usados at agora so, na realizada, funes pr-definidas pelo
prprio Matlab. Como exemplo, podemos citar as funes disp, input, sqrt, mod, sin,
cos, log, etc.
Uma funo interessante a funo plot. Ela pode ser usada para fazer grficos
usando o Matlab.
Exemplo: Uso da funo plot
X = [1, 5, 3];
Y = [2, 2, 4];
plot(X,Y);

49

5.2 - Argumentos (Parmetros) de Funes


So as entradas que as funes vo receber. So atravs delas que passamos
parmetros para as funes.
Exemplo 01: Fazer um programa, usando funes, para calcular e imprimir o
produto de dois nmeros
% arquivo produto.m
function produto(a,b)
c = a*b;
disp(c);
% arquivo principal: teste.m
produto(3,5);
produto(2,3);
x = input(X: );
y = input(Y: );
produto(x,y);
Resumindo,

Nome da funo (obrigtorio)


function nome(a,b,...)
Argumentos (opcional)
Palavra-chave
(obrigatria)
Notas:
a. a, b e c so variveis locais;
b. Na primeira chamada da funo produto, o valor 3 copiado para a varivel
local a e o valor 5 para b;
c. As variveis x e y so validas apenas no mdulo principal. Elas no podem ser
acessadas dentro da funo produto;
d. Uma funo pode ser chamada n vezes;
e. O nmero de argumentos de uma funo deve ser compatvel entre a sua
definio e a sua execuo.

50

Mas desejvel que exista uma funo especifica para imprimir separadamente o
valor do produto.
Se fizermos,
% arquivo produto.m
function produto(a,b)
c = a*b;
% arquivo imprime.m
function imprime
disp(c);
% arquivo principal: teste.m
x = input(Numero: );
y = input(Numero: );
produto(x,y);
imprime;

Erro: A varivel c no est declarada em


imprime.

A soluo para resolver o problema acima a utilizao de Valores de Retorno de


Funes.

5.3 Valores de Retorno de Funes


Permite que determinadas informaes geradas dentro de uma funo possam ser
retornadas por ela.

Exemplo: Fazer um programa para calcular e imprimir o produto de dois nmeros.


% arquivo produto.m
function c = produto(a,b)
c = a*b;
% arquivo imprime.m
function imprime(a,b,c)
disp(a);
disp(b);
disp(c);
% arquivo principal: teste.m

51

x = input(Numero: );
y = input(Numero: );
z=produto(x,y);
imprime(x,y,z);
Resumindo,

Nome da funo (obrigtorio)


function c = nome(a,b,...)
Argumentos (opcional)
Palavra-chave
(obrigatria)
Valor de Retorno (opcional)
Notas:
a.
b.
c.
d.
e.

x, y e z so variveis locais no mdulo principal;


z armazena uma cpia do valor de retorno da funo produto;
a, b e c so variveis locais na funo produto;
a, b e c so variveis locais na funo imprime;
essas variveis contm valores diferentes em ambas as funes.

5.4 Exerccios
Exerccio 01 Implemente uma funo para calcular a rea de um tringulo. Essa
funo recebe como argumentos a base e a altura do tringulo correspondente.
Escreva o mdulo principal.
% arquivo area.m
function a = area( b, h )
a = 0.5 * b * h;

% modulo principal teste.m


a1 = area(3,4);
disp(a1);
a2 = area(1,2);
disp(a2);

52

Exerccio 02: Fazer um programa que leia 3 nmeros e armazene-os em um vetor.


Calcular um novo vetor gerado pelos fatoriais desses nmeros. Imprimir ambos os
vetores.
% modulo 1 entrada.m
function v = entrada
for I = 1:1:3
v(i) = input( V: );
end
% modulo 2 fatorial.m
function f = fatorial( v )
for i = 1:1:3
fat = 1;
for j = 1:1:v(i)
fat = fat * j;
end
f(i) = fat;
end
% modulo 3 saida.m
function saida( v, f )
for I = 1:1:3
disp(v(i));
disp(factorial :)
disp(f(i));
end
% modulo principal exem.m
x = entrada;
y = fatorial(x);
saida(x,y);
Exerccio 03 Exerccio 01 modificado
% arquivo entrada.m
function [a,b] = entrada

53

a = input( Entre com a base: );


b = input( Entre com a altura: );

% arquivo area.m
function a = area( b, h )
a = 0.5 * b * h;

% arquivo saida.m
function saida( b, h, area )
disp( Base: );
disp( b );
disp( Altura: );
disp( h );
disp( Area: );
disp( area );

% modulo principal arquivo teste.m


[b,h] = entrada;
a = area( b, h );
saida(b, h, a);
Exerccio 04 Fazer uma funo que receba um vetor de nmeros reais e o seu
tamanho, e retorne o menor elemento do vetor. Inicialmente, deve-se criar uma
funo para ler o vetor recebendo como argumento o nmero de elementos
desejados. Escrever tambm o mdulo principal.
% arquivo ler.m
function a = ler(n)
for i = 1:1:n
a(i) = input( A: );
end

% arquivo menor.m
function m = menor(a,n)
m = a(1);
for I = 1:1:n
if(a(i) < m )

54

m = a(i);
end
end

% arquivo imprime.m
function imprime(m)
disp(O menor valor e);
disp(m);

% modulo principal arquivo teste.m


x = ler(10);
y = menor(x,10);
imprime(y);
Exerccio 05 Fazer um programa seguindo as orientaes abaixo:
a) Criar uma funo para ler um vetor. Essa funo deve receber como
argumento o nmero de elementos que devem ser lidos e retornar o vetor
criado;
b) Criar uma funo para calcular a mdia dos elementos positivos de um
vetor. Essa funo recebe como argumentos o vetor e o seu tamanho,
retornando o resultado da operao realizada;
c) Criar uma funo para imprimir os seguintes dados: nmero de elementos
do vetor, o vetor correspondente e a mdia calculada;
d) Escrever o mdulo principal considerando 10 elementos.
% arquivo ler.m
function v = ler(n)
for i = 1:1:n
v(i) = input( V: );
end

% arquivo media.m
function m = media(v,n)
soma = 0;
cont = 0;
for i = 1:1:n
if( v(i) > 0 )
soma = soma + v(i);
cont = cont + 1;

55

end
end
m = soma / cont;

Cuidado: tratar o caso onde a varivel


cont igual a zero.

% arquivo imprime.m
function imprime(v, n, m)
disp(n);
disp(v);
disp(m);

% modulo principal arquivo teste.m


a = ler(10);
m = media(a,10);
imprime(a, 10, m);
Agora vamos analisar o seguinte exemplo:
Exerccio 06
a) Fazer uma funo para criar um registro e armazenar o nome e as quatros
notas de um aluno. A funo deve retornar o registro criado;
b) Criar uma funo que calcule a mdia das notas, armazenando-a no
mesmo registro. Note que a funo recebe como argumento o registro;
c) Escrever o mdulo principal.
% arquivo ler.m
function r = ler
r = { };
r.nome = input(Nome: , s);
r.p1 = input(P1: );
r.p2 = input(P2: );
r.p3 = input(P3: );
r.p4 = input(P4: );

% arquivo media.m
function media(r)
m = (r.p1 + r.p2 + r.p3 + r.p4)/4;
r.media = m;

56

% modulo principal arquivo teste.m


A = ler;
media(a);
disp(a.media);

Erro: o campo media foi criado dentro da funo


media. A varivel registro precisar ser atualizada..

Exerccio 07: Exemplo 06 corrigido


% arquivo ler.m
function r = ler
r = { };
r.nome = input(Nome: , s);
r.p1 = input(P1: );
r.p2 = input(P2: );
r.p3 = input(P3: );
r.p4 = input(P4: );

% arquivo media.m
function r = media(r)
m = (r.p1 + r.p2 + r.p3 + r.p4)/4;
r.media = m;

% modulo principal arquivo teste.m


a = ler;
a = media(a);
disp(a.media);
Exerccio 08: Gerenciamento Salarial
% arquivo ler.m
function r = ler
r = { };
r.nome = input(Nome: , s);
r.anobase = input(Ano Base: );
r.salmes = input(Salario/Ms: );
r.salano = input(Salario/Ano: );

57

% arquivo calc0.m: Aumento Salarial


function r = calc0(r)
r.salmes = 1.10 * r.salmes;
r.salano = 1.10 * r.salano;

% arquivo calc1.m: Salrio/dia


function r = calc1(r)
r.saldia = r.salmes/30

% arquivo calc2.m: Salrio/hora


function r = calc2(r)
r.salhora = r.saldia/8

% arquivo calc3.m: Classe Social


function r = calc3(r)
if( r.salmes > 240 )
r.classe = E;
elseif( r.salmes > 1000 )
r.classe = D;
.
.
end

% Modulo Principal
A = entrada;
A = calc0(A);
A = calc1(A);
A = calc2(A);
A = calc3(A);
imprime(A);

58

PARTE 06
Arquivos
___________________________________________________

Como dito anteriormente, um aspecto fundamental na formulao de programas


computacionais a estrutura de dados usada para representar e armazenar as
informaes (dados) do problema a ser resolvido.
Variveis
Simples
Estrutura de
dados
Variveis
Compostas

Homogneas
Heterogneas

No entanto, em muitos problemas prticos, a quantidade de informaes a ser


manipulada muito grande. O armazenamento dessas informaes na memria RAM
(que permanece em uso durante a execuo do programa computacional) do
computador , as vezes, invivel. Alm disso, o uso contnuo do mesmo programa
vrias vezes pode necessitar o armazenamento em grande escala de dados todas as
vezes que o programa executado.
Por exemplo, considere um programa para armazenar as informaes (nome e nmero
de matrcula) de todos os alunos da Universidade Federal de Alagoas. Alm disso, tal
programa deve tambm ser capaz de receber todas as notas de cada aluno, a medida
que elas forem sendo obtidas. E no final, calcular a mdia final e informar se o aluno
foi ou no aprovado.
Mas como as notas devem ser fornecidas a medida que elas so obtidas, ento
necessrio a execuo do programa inmeras vezes. Da surge a seguinte pergunta:
como possvel armazenar tais informaes permanentemente no computador se os
dados armazenados na memria RAM temporrio (ou seja, s esto ativos durante a
execuo do programa computacional)?
Matrcula
000000001
000001001
000002002
000003221

Nome
Joo
Maria
Jos
Sebastio

P1

P2

Mdia

Outro exemplo claro de necessidade de armazenamento de dados a longo prazo so os


editores de texto (por exemplo, o Word).

59

Para atender a essas demandas, existem os arquivos de dados cujo conceito visto na
seo seguinte.

6.1 Conceito
Um arquivo um conjunto de dados armazenados em um dispositivo de memria
secundria (por exemplo, o disco rgido do computador).
Uma estrutura de dados bastante utilizada na manipulao de dados armazenados em
arquivos so os registros (conjunto de informaes logicamente relacionadas).
O fato do arquivo ser armazenado em uma memria secundria o torna independente
em relao aos programas computacionais. Ou seja, um arquivo pode ser criado,
consultado, processado e eventualmente removido por programas computacionais
distintos.

6.2 Organizao de Arquivos


As operaes bsicas que podem ser realizadas em um arquivo so:
a)
b)
c)
d)

Insero de informaes no arquivo;


Obteno de informaes armazenadas em um arquivo;
Modificao de informaes armazenadas em um arquivo;
Excluso de informaes de um arquivo.

A manipulao dessas operaes feita de forma semelhante para todo e qualquer


arquivo, independente de como foi concebido. Para exemplificar, considera-se um
arquivo de livros de uma biblioteca, onde duas atitudes so possveis:
a) No caso de se um leitor, procura-se a informao sobre a localizao de um
certo livro atravs das fichas que registram o acervo;
b) Como funcionrio, manipula-se (inserir, modificar ou remover) alguma
informao a respeito de algum livro.
Ento, para realizar essas aes, podemos imaginar os seguintes algoritmos bsicos:
Consultar arquivo
1. Abrir gaveta do arquivo
2. Achar ficha procurada
3. Copiar informaes da ficha
4. Fechar gaveta do arquivo

Acrescentar dados
1. Abrir gaveta do arquivo
2. Achar posio de insero
3. Guardar ficha nova
4. Fechar gaveta do arquivo

Modificar dados
1. Abrir gaveta do arquivo
2. Achar ficha procurada
3. Alterar os dados da ficha
4. Fechar gaveta do arquivo

Eliminar dados
1. Abrir gaveta do arquivo
2. Achar ficha procurada
3. Retirar ficha do arquivo
4. Fechar gaveta do arquivo

60

Pode-se observar que os algoritmos apresentados so bastante semelhantes (os passos


1 e 4, por exemplo, so iguais e necessrios em todos os casos).

6.3 Concepo dos arquivos


Quando criamos um arquivo, usamos determinado padro de comportamento que
estabelece o modo pelo qual os dados so armazenados no arquivo. A disposio
desses dados (informaes) em um arquivo podem favorecer a realizao de
determinadas operaes em relao as outras. Em relao a sua concepo, existem
basicamente dois tipos de arquivos:
a) Concepo seqencial: os dados so obtidos ou inseridos no arquivo em
ordem seqencial. Esses dados esto armazenados de forma contnua, um aps
o outro. Neste caso, para obter uma determinada informao, necessrio
percorrer todo o arquivo at que tal informao seja encontrada.
Por exemplo, para achar a nota de Jos no arquivo abaixo, necessrio
percorrer todo o arquivo at encontrar a informao desejada.
Matrcula
000000001
000001001
000002002
000003221

Nome
Joo
Maria
Jos
Sebastio

P1

P2

Mdia

b) Concepo direta: o acesso aos dados do arquivo realizado em ordem


aleatria. Uma informao inicial indica a posio no arquivo onde
determinada informao est localizada.
Por exemplo, os dados de Jos no arquivo abaixo esto localizados em uma
linha previamente estabelecida no arquivo.
Joo
Maria
Jos
Sebastio
Matrcula
000000001
000001001
000002002
000003221

P1

1
2
3
4
P2

Mdia

Este tipo de arquivo no ser abordado neste curso.

6.4 Manipulao de arquivos seqenciais

61

6.4.1 Abrindo arquivos


No se pode obter qualquer informao de um arquivo sem antes abri-lo. Em qualquer
linguagem computacional, os comandos responsveis pela abertura de arquivos
necessitam do nome do arquivo a ser aberto e retornam uma referncia para o arquivo
aberto. Informaes adicionais podem ser necessrias para executar esta ao.
No Matlab, a abertura de um arquivo realizada da seguinte forma:
fp = fopen( nome_do_arquivo, tipo_do_arquivo)
onde:
 nome_do_arquivo o nome do arquivo a ser aberto;
 tipo_do_arquivo indica qual ao ser realizada sobre o arquivo
o leitura (r);
o gravao (w);
o insero em um arquivo j existente (a).
 fp referncia para o arquivo. Se fp for igual a -1, algum erro ocorreu na
abertura deste arquivo.
Exemplo:
fp = fopen( 'c:/temp/exemplo01.dat', 'w' );

6.4.2 Fechando arquivos


Todo arquivo aberto deve ser fechado para evitar que os dados fiquem expostos a
agentes externos. No Matlab, o encerramento de um arquivo de feito a partir da
utilizao da seguinte funo:
fclose( fp)
onde:
 fp referncia para um arquivo aberto anteriormente.
6.4.3 Gravando dados em um arquivo
Como dito anteriormente, na concepo seqencial, os dados so gravados no arquivo
de forma contnua. Cada linguagem computacional possui comando especficos para a
realizao destas aes. No caso do Matlab, o comando (funo) utilizada para a
gravao de dados em arquivos o seguinte:
fprintf( fp, especificaes de formato para cada varivel da lista, lista de variveis)
onde a especificao do formato tem a seguinte forma:
% I1.I2tipo

62

 I1 um nmero inteiro indicando o quanto de espao existe para escrever


o nmero;
 I2 um nmero inteiro indicando o quanto deste espao definido por I1
ser considerado como a parte decimal;
 tipo assume os seguintes valores: d, i, o, u, x, X, f, e, E, g, G, c, s.
Exemplo: Fazer um programa para ler o nome de 5 alunos e suas respectivas mdias
e armazen-las em um arquivo de dados. As informaes sobre os alunos devem ser
armazenadas em registros.

6.4.3 Lendo dados de um arquivo


Como dito anteriormente, na concepo seqencial, os dados so gravados no arquivo
de forma contnua. Cada linguagem computacional possui comandos especficos para
a leitura dessas informaes. No caso do Matlab, o comando (funo) utilizado para a
leitura dos dados em arquivos o seguinte:
a = fscanf( fp, especificaes de formato para cada varivel da lista, num_dados)
onde a especificao do formato tem a seguinte forma:
%tipo
 tipo assume os seguintes valores: d, i, o, u, x, X, f, e, E, g, G, c, s.

63

Exemplo: Fazer um programa para ler de um arquivo o nome de 5 alunos e suas


respectivas mdias. As informaes sobre os alunos devem ser armazenadas em
registros. Na seqncia, calcular a mdia da turma.

6.5 Exerccios
1 Deseja-se fazer um programa para armazenar informaes sobre temperatura associados a
cada ms do ano de 2005 em Macei. Essas informaes devem ser armazenadas em um
arquivo, conforme tabela abaixo:
Ms
Janeiro
Fevereiro
Maro
Abril

Temperatura (oC)
25
27
22
23

O programa deve seguir as informaes abaixo:


a) Criar uma funo para ler as informaes necessrias, armazenando-as em registros.
Essa funo deve retornar o vetor de registros criado;
b) Criar uma funo para imprimir em um arquivo as informaes geradas no item
anterior. Essa funo recebe como argumento o vetor de registros;
c) Fazer o mdulo principal.
2 Considerando o arquivo gerado na questo anterior, fazer um programa para fornecer os
dados de chuva associados a cada ms do ano de 2005 em Macei, gravando-as, juntamente
com os dados j existentes, em um novo arquivo. Seguir as orientaes abaixo:

64

Ms
Janeiro
Fevereiro
Maro
Abril

Temperatura (oC)
25
27
22
23

Intensidade de Chuva (em mm)


75
81,5
77
76,25

a) Criar uma funo para ler o arquivo gerado na questo anterior, armazenando-as em
um vetor de registros. Esse vetor deve ser retornado por essa funo;
b) Criar uma funo que fornea a intensidade de chuva para cada ms armazenado no
vetor de registros. Cada registro desse vetor deve ser atualizado com a respectiva
intensidade. Essa funo recebe como argumento o vetor de registros e retorna o
mesmo vetor atualizado;
c) Criar uma funo para gravar um arquivo com as informaes atualizadas (ms,
temperatura e intensidade de chuva). Essa funo recebe como argumento o vetor de
registros contendo as informaes necessrias;
d) Escrever o mdulo principal.
3 Considerando o arquivo gerado na questo anterior, fazer um programa para calcular a
temperatura mdia de 2005 e imprimir na tela o nome dos meses com temperatura inferior a
mdia. Seguir as orientaes abaixo:
a) Criar uma funo para ler o arquivo gerado na questo anterior, armazenando-as em
um vetor de registros. Esse vetor deve ser retornado por essa funo;
b) Criar uma funo que recebe como argumentos o vetor de registros e calcula a
temperatura mdia em 2005. Essa mdia deve ser retornada pela funo;
c) Criar uma funo que recebe como argumentos o vetor de registros e a mdia
calculada anteriormente e imprime na tela o nome dos meses com temperaturas
menores que a mdia;
d) Fazer o mdulo principal.

65