apostilaic revisao5 william

Upload: anonymous-ycaimrhzqh

Post on 13-Jan-2016

10 views

Category:

Documents


1 download

DESCRIPTION

Apostila elaborada pelo Prof. William Wagner Matos Lira e adaptada pelo Prof. José Adeildo Amorim utilizada na disciplina Introdução à Computação dos cursos de Engenharia da UFAL.

TRANSCRIPT

  • 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

  • 4

    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

  • 5

    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.

  • 6

    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

    Controle

    Unidade Lgica

    e Aritimtica

    Unidade de

    Entrada

    Unidade de

    Sada

    CPU

    Memria

    Unidade de

    Controle

    Unidade Lgica

    e Aritimtica

    Unidade de

    Entrada

    Unidade de

    Sada

    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

  • 7

    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.

  • 8

    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

  • 9

    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

  • 10

    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

    Linguagem de

    Programao

    Linguagem de

    Mquina

    Compilador

    Como exemplo de linguagens de programao podemos citar o Fortran, C, C++, Pascal, Cobol, MATLAB, etc.

  • 11

    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

    -->

  • 12

    Finalizao dos comandos

    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

  • 13

    Visualizao de variveis

    Exemplo 06: como visualizar os valores armazenados em cada varivel

    --> a

    a = 5

    Outros comandos

    Exemplo 07: outros comandos

    Usar teclas 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

    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

    Error: Undefined function or variable b

  • 14

    % 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: --> e teclar 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 (, ) 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;

  • 15

    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.

  • 16

    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.

  • 17

    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; % varivel numrica

    b = 8.35; % varivel numrica

    s = 'c'; % caractere l = 1; % varivel lgica v = 'casa'; % 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:

    --> function = 8

    Exemplo 04: Detalhe interessante

    --> A = '1'; % caractere --> B = 1; % valor numrico 1

    % A e B so diferentes

    Erro: function uma palavra-chave (palavra reservada)

  • 18

    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 mod(x,y)

    Radiciao sqrt(x) Outros operadores sero apresentados ao longo do curso. Exemplo 06:

    --> 2^3 8

    Exemplo 07:

  • 19

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

    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

    Erro: no uma expresso aritmtica

  • 20

    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 Maior que

    >= Maior ou igual a == Igual a ~= Diferente de

    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 Os operadores lgicos so utilizados na formao de proposies lgicas compostas. No FreeMat, tais operadores so representados pelos seguintes comandos:

    & and

    | or

    ~ not

    Cuidado!

    Expresso Relacional

  • 21

    Exemplo 16: (Tabelas-Verdade)

    Negao

    A No A

    Falso Verdadeiro

    Verdadeiro Falso

    Conjuno

    A B A & B

    F F F

    F V F

    V F F

    V V V

    Disjuno No-Exclusiva

    A B A ou B

    F F F

    F V V

    V F V

    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

  • 22

    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.

  • 23

    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;

    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?

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

    x=(D-B)/(A-C)

    y=Ax+B

  • 24

    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

    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

    Expresso Lgica e/ou relacional

  • 25

    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 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;

    Expresso Lgica e/ou relacional

  • 26

    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.

  • 27

    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

  • 28

    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

  • 29

    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;

  • 30

    fim

    i = varivel de controle;

    vi = valor inicial atribudo a i;

    vf = valor final atribudo a i (condio de parada);

    passo = incremendo dado vriavel i. Exemplo 01: Calcular a mdia anual de 10 alunos.

    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 m s 1 10 10 2 5 15 3 5 20 4 8 28 5 7 35 6 10 45 7 5 50 8 6 56 9 4 60

    10 3 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;

    Acumulador

  • 31

    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 )

  • 32

    comando 1;

    comando 2;

    comando 3;

    end

    Exemplo 01: Calcular o valor de f(x) = x

    2 + 2 at que f(x) seja maior que 20.

    F = 0;

    while( f

  • 33

    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

  • 34

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

    termos da srie

    ...!8!6!4!2

    1)cos(8642

    +++=xxxx

    x

    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+Dy

    2=R

    2;

    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?

  • 35

    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 A R R O

    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).

    Numrico Caracteres

  • 36

    1 0 4 5 2 1

    7.5 3 1 O exemplo abaixo ilustra o exemplo de uma varivel composta que no classificada como homognea.

    C 3 5 1 L 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 2 3 4 5 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

    disp(A);

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

  • 37

    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

  • 38

    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(3) = 8

    V(x+2) V(4) = 3

    V(x*4) V(8) = 21

    V(V(x+y)) V(V(6)) = V(9) = 33

    V(x+y) V(6) = 9

    V(V(1)*V(4)) 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.

  • 39

    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

  • 40

    o Dois ndices (bidimensional) para endereamento A(1,1) = 1; A(2,1) = 5;

    A(1,2) = 4;

    A(2,2) = 3;

    1 4 5 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 2 3 4 1 2 3 2

    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);

  • 41

    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

  • 42

    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 (1, 2, 'Carro', 'Alagoas', 3.55) Homognea (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).

    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);

    Campos da

    varivel

  • 43

    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.

    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

    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.

    registro 1 registro 2 registro 3 registro 4

    1 registro 1 2 registro 2 3 registro 3 4 registro 4

  • 44

    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-B

    t.

    for i = 1:1:2

    for j = 1:1:3

    A(i,j) = input('A: '); end

    end

  • 45

    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 );

  • 46

    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)

  • 47

    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, subdivid-lo (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

    ClculosEntrada Sada

    Sal./MsSal./Dia Novo Sal. Classe Social

    Problema

    ClculosEntrada Sada

    Sal./MsSal./Dia 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 = input(Nome: , s);

    func.ano = input(Ano: );

    func.sal_mes = input(Salario Mensal: );

    func.sal_ano = input(Salario Anual: ); Exemplo 02: Entrada de dados usando funo

    function f = entrada

    f = { };

    f.nome = input(Nome: , s);

    f.ano = input(Ano: );

    f.sal_mes = input(Salario Mensal: );

    f.sal_ano = input(Salario Anual: );

  • 48

    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:

    function entrada

    Palavra-chave obrigatria

    Nome da funo

    -

    function entrada

    Palavra-chave obrigatria

    Nome da funo

    - 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.

    Mdulo Principal

    Chamar a funo entrada

    Chamar a funo calculos

    Chamar a funo imprime

    Exemplo: Mdulo principal

    function entrada

    .

    .

    .

    function imprime

    .

    .

    .

    % modulo principal

    entrada;

    imprime;

    Salvar no arquivo entrada.m

    Salvar no arquivo imprime.m

    Salvar em qualquer arquivo. Este o mdulo que deve ser executado.

  • 49

    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;

    function imprime

    disp(a);

    disp(b);

    disp(c);

    % modulo principal

    teste;

    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);

    Salvar no arquivo teste.m

    Salvar no arquivo imprime.m

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

  • 50

    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,

    function nome(a,b,...)

    Palavra-chave (obrigatria)

    Nome da funo (obrigtorio)

    Argumentos (opcional)

    - 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.

  • 51

    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;

    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

    Erro: A varivel c no est declarada em imprime.

  • 52

    x = input(Numero: );

    y = input(Numero: );

    z=produto(x,y);

    imprime(x,y,z);

    Resumindo,

    function c = nome(a,b,...)

    Palavra-chave (obrigatria)

    Nome da funo (obrigtorio)

    Argumentos (opcional)

    -

    Valor de Retorno (opcional) Notas:

    a. x, y e z so variveis locais no mdulo principal; b. z armazena uma cpia do valor de retorno da funo produto; c. a, b e c so variveis locais na funo produto; d. a, b e c so variveis locais na funo imprime; e. 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);

  • 53

    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

  • 54

    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 )

  • 55

    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;

  • 56

    end

    end

    m = soma / cont;

    % 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;

    Cuidado: tratar o caso onde a varivel cont igual a zero.

  • 57

    % modulo principal arquivo teste.m

    A = ler;

    media(a);

    disp(a.media); 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: );

    Erro: o campo media foi criado dentro da funo media. A varivel registro precisar ser atualizada..

  • 58

    % 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);

  • 59

    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.

    Estrutura de

    dados

    Variveis

    Simples

    Variveis

    Compostas

    Homogneas

    Heterogneas

    Estrutura de

    dados

    Variveis

    Simples

    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 Nome P1 P2 Mdia 000000001 Joo 000001001 Maria 000002002 Jos 000003221 Sebastio

    Outro exemplo claro de necessidade de armazenamento de dados a longo prazo so os editores de texto (por exemplo, o Word).

  • 60

    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) Insero de informaes no arquivo; b) Obteno de informaes armazenadas em um arquivo; c) Modificao de informaes armazenadas em um arquivo; d) 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

    Modificar dados

    1. Abrir gaveta do arquivo

    2. Achar ficha procurada

    3. Alterar os dados 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

    Eliminar dados

    1. Abrir gaveta do arquivo

    2. Achar ficha procurada

    3. Retirar ficha do arquivo

    4. Fechar gaveta do arquivo

    Consultar arquivo

    1. Abrir gaveta do arquivo

    2. Achar ficha procurada

    3. Copiar informaes da ficha

    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

    Acrescentar dados

    1. Abrir gaveta do arquivo

    2. Achar posio de insero

    3. Guardar ficha nova

    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

  • 61

    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 Nome P1 P2 Mdia 000000001 Joo 000001001 Maria 000002002 Jos 000003221 Sebastio

    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 1 Maria 2 Jos 3

    Sebastio 4 Matrcula P1 P2 Mdia 000000001 000001001 000002002 000003221

    Este tipo de arquivo no ser abordado neste curso.

    6.4 Manipulao de arquivos seqenciais

  • 62

    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

  • 63

    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.

  • 64

    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 Temperatura (oC)

    Janeiro 25 Fevereiro 27

    Maro 22 Abril 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:

  • 65

    Ms Temperatura (oC) Intensidade de Chuva (em mm)

    Janeiro 25 75 Fevereiro 27 81,5

    Maro 22 77 Abril 23 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.