Vous êtes sur la page 1sur 80

INTRODUO COMPUTAO

Macei, 2009






SUMRIO


LISTA DE FIGURAS ................................................................................................. v
LISTA DE TABELAS ................................................................................................ vi
1 Introduo...........................................................................................................7
1.1 Motivao.........................................................................................................7
1.2 Histrico e Desenvolvimento dos Computadores...................................................8
1.3 Sistemas de Computao ................................................................................. 12
1.3.1 Arquitetura................................................................................................... 13
1.3.1.1 Unidade de Entrada ................................................................................... 13
1.3.1.2 Memria.................................................................................................... 13
1.3.1.3 Unidade Central de Processamento (CPU) .................................................... 14
1.3.1.3.1 Unidade Lgica e Aritmtica..................................................................... 15
1.3.1.3.2 Unidade de Controle................................................................................ 15
1.3.1.4 Unidade de Sada....................................................................................... 15
2 Noes de Lgica e Algoritmos ............................................................................ 15
2.1 Noes de Lgica ............................................................................................ 15
2.2 Algoritmos ...................................................................................................... 16
2.2.1 Conceituao................................................................................................ 16
2.2.2 Refinamentos Sucessivos............................................................................... 18
2.2.3 Programa Computacional .............................................................................. 19
2.3 Linguagens de Programao............................................................................. 19
2.4 Introduo ao MATLAB .................................................................................... 22
2.4.1 Execuo do MATLAB.................................................................................... 23
2.4.2 Alguns Comandos Bsicos ............................................................................. 23
3 Tpicos Preliminares........................................................................................... 27
3.1 Tipos Primitivos............................................................................................... 28

3.2 Constantes...................................................................................................... 28
3.2.1 Constante Numrica...................................................................................... 28
3.2.2 Constante Lgica.......................................................................................... 28
3.2.3 Constante Literal .......................................................................................... 28
3.3 Variveis......................................................................................................... 29
3.4 Expresses Aritmticas .................................................................................... 30
3.4.1 Operadores Aritmticos................................................................................. 31
3.4.2 Prioridades................................................................................................... 32
3.5 Expresses Lgicas.......................................................................................... 33
3.5.1 Operadores Relacionais ................................................................................. 33
3.5.2 Operadores Lgicos ...................................................................................... 34
3.5.2 Prioridades................................................................................................... 36
3.6 Expresses Literais .......................................................................................... 37
3.7 Comando de Atribuio.................................................................................... 40
3.8 Comandos de Entrada e Sada .......................................................................... 40
3.9 Blocos ............................................................................................................ 44
4 Estruturas de Controle........................................................................................ 44
4.1 Estruturas Seqenciais..................................................................................... 44
4.2 Estruturas de Controle de Fluxo........................................................................ 46
4.2.1 Estruturas de Seleo (Condicional) ............................................................... 46
4.2.1.1 Seleo Simples......................................................................................... 46
4.2.1.2 Seleo Composta...................................................................................... 47
4.2.1.2 Seleo Encadeada .................................................................................... 48
4.2.1.4 Seleo de Mltipla Escolha ........................................................................ 49
4.2.1.5 Exerccios.................................................................................................. 49
4.3 Estruturas de Repetio ................................................................................... 51
4.3.1 Estruturas de Repetio Definidas .................................................................. 51
4.3.2 Estruturas de Repetio Indefinidas ............................................................... 54
4.3.2.1 Exerccios.................................................................................................. 55
5 Estruturas de Dados ........................................................................................... 57
5.1 Introduo...................................................................................................... 57
5.2 Variveis Compostas Homogneas.................................................................... 57
5.2.1 Variveis Compostas Homogneas Unidimensionais......................................... 58

5.2.2 Variveis Compostas Homogneas Multidimensionais...................................... 62
5.3 Variveis Compostas Heterogneas................................................................... 65
6 Modularizao.................................................................................................... 68
6.1 Introduo...................................................................................................... 68
6.2 Mdulos (Funes) .......................................................................................... 69
6.3 Argumentos (Parmetros) de Funes............................................................... 72
6.4 Valores de Retorno de Funes ........................................................................ 74
Referncias Bibliogrficas ...................................................................................... 80




v




LISTA DE FIGURAS


Figura 1 Stonehenge ............................................................................ 8
Figura 2 Exemplos de bacos ................................................................ 9
Figura 3 Rgua de clculo....................................................................10
Figura 4 Arquitetura bsica de um computador......................................13
Figura 5 Compilador ............................................................................20


vi




LISTA DE TABELAS


Tabela 1 Linguagens de programao...................................................20
Tabela 2 Prioridades das operaes ......................................................37


7
INTRODUO COMPUTAO


1 Introduo

Este primeiro captulo tem por objetivo motivar o leitor para o estudo do tema
Introduo Cincia da Computao, apresentar um breve histrico a respeito do
desenvolvimento dos computadores, a forma como esses so organizados e a
explicao de alguns termos tcnicos.

1.1 Motivao
Pode-se dizer que o estudo da introduo computao o primeiro passo em
direo ao conhecimento do mundo da tecnologia e funcionamento dos computadores.
O uso de computadores no dia-a-dia tem sido cada vez mais freqente. Em todas
as reas de estudo, pesquisa e trabalho eles so essenciais. Veja um exemplo simples
que serve para ilustrar esta afirmao.
Considere que se deseja fazer um levantamento para avaliar qual o melhor aluno
do ano de 2005 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 laborioso, 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 se possa usar um programa
computacional para fazer os clculos desejados. Em questo de segundos poderamos
ter a resposta desejada.
Mas qual programa usar? Existem duas alternativas: uma comprar um
programa comercial (e existem vrios) que possa ser utilizado para resolver o
problema. A outra 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, principalmente aqueles
relacionados Engenharia.
8
1.2 Histrico e Desenvolvimento dos Computadores
O objetivo deste item dissertar a respeito da descoberta do computador e a
sua evoluo ao longo do tempo.
Antes de apresentar o que e como surgiu o computador, define-se aqui o
termo informtica, criado na Frana por volta de 1962.

information automatique = informao automtica

Ou seja, informtica a cincia que estuda o tratamento automtico e racional
da informao com uso de equipamentos e procedimentos da rea de processamento
de dados. Trata do estudo e desenvolvimento de mquinas e mtodos para processar
informaes.
As principais funes da informtica so:
Desenvolvimento de novas mquinas;
Desenvolvimento de novos mtodos de trabalho;
Construo de aplicaes automticas;
Melhoria dos mtodos e aplicaes existentes.
Desde que o homem comeou a processar dados, ele tentou construir mquinas
que pudessem ajud-lo em seu trabalho. O computador eletrnico o resultado dessas
tentativas que vm sendo realizadas atravs dos tempos. Certamente, o computador
um dos principais produtos da cincia do sculo XX.
Para alguns pesquisadores, Stonehenge o primeiro computador feito pelo
homem. Trata-se de um monumento paleoltico constitudo de blocos de pedra de 3 a 6
metros de altura, construdo entre 2.600 a.C. a 1.700 a.C., na plancie de Salisbury, na
Gr-Bretanha. Em 1960 um astrnomo americano (utilizando computador!) mostrou
que se tratava de um meio capaz de prever eclipses lunares.

Figura 1 Stonehenge
9
Porm, a maioria dos estudiosos considera o baco o primeiro hardware da
histria da computao. Registros histricos de cerca de 2.000 a.C. comprovam que o
baco era utilizado no oriente. Consiste de uma tbua com hastes que trespassam
contas com formato lenticular com seo transversal hexagonal.

baco chins

baco japons
baco russo
Figura 2 Exemplos de bacos

O baco japons chamado de Soroban e foi trazido da china em 1622. O
Soroban comeou como um instrumento simples destinado a registrar valores e realizar
operaes de soma e subtrao. Posteriormente, foram desenvolvidas tcnicas de
multiplicao e diviso; atualmente, j so conhecidas tcnicas para extrao de razes
(quadrada e cbica), operao com horas, minutos e segundos e converso de pesos e
medidas. possvel trabalhar com nmeros inteiros, decimais e negativos.
O baco chegou ao Brasil em 1908 trazido por imigrantes. Sua verso moderna,
introduzida em 1953, teve sua tcnica de utilizao difundida pelo Prof. Fukutaro Kato,
em 1956.
Em 1621, o matemtico ingls William Outgred inventou a rgua de clculo,
considerada um dos primeiros dispositivos analgicos de computao.

10

Figura 3 Rgua de clculo

Em 1642/1647, o francs Blaise Pascal conseguiu somar e subtrair utilizando sua
mquina, conhecida como Pascalina, por meio de engrenagens mecnicas.
Em 1801, o matemtico francs Joseph Marie Jacquard consegue armazenar
informaes em placas perfuradas, para controle de mquinas de tecelagem. A
inveno gerou grande temor de desemprego.
Em 1820, uma mquina de calcular criada pelo francs Charles Thomas de
Colmar vende mais de 1.500 unidades. As Arithmometers, como eram chamadas, so
consideradas o primeiro sucesso de vendas no setor.
Em 1822, Ada Lovelace, filha do famoso poeta Lord Byron, contratada pelo
ingls Charles Babbage para programar sua ento criada mquina diferencial. Ada
considerada a primeira programadora do mundo.
Em 1854, George Boole estabelece os princpios binrios que seriam utilizados
posteriormente como base para o estudo de lgica matemtica.
Em 1880, Hermann Hollerith, constri uma mquina de tabulao, utilizada no
senso norte-americano.
Em 1896, Hermann Hollerith funda a Tabulating Machine Company.
Em 1911, Hollerith associa-se a outras empresas e a Tabulating Machine
Company passa a ser dirigida por Tomas Watson.
Em 1924 nasce a IBM (International Business Machine Corporation), resultado da
associao de Hollerith com Watson.
Em 1931 o primeiro computador analgico construdo pelo MIT (Massachusetts
Institute of Technology).
Em 1937, Howard Haiken, professor de matemtica de Harvard, convence Tomas
Watson da IBM a fabricar o primeiro computador eletromecnico, o MARK I.
11
Em 1939 surgiu o primeiro computador eletrnico digital, o ABC (Atanasoff Berry
Computer), que foi apresentado pelo professor de matemtica John Atanasoff.
Em 1943, a Inglaterra constri, com o auxlio de Alan Turing, dez computadores
Colossus I. Esse equipamento eletrnico digital, a vlvulas, foi utilizado para decifrar
cdigos militares dos alemes.
Em 1946 apresentado o primeiro grande computador eletrnico da poca, o
ENIAC (Electronic Numeric Integrator Analyser and Calculator). O ENIAC ocupava quase
200m
2
, pesava 30 toneladas e conseguia resolver 5.000 adies por segundo.
Em 1950, John von Neumann, Arthur Burks e Hermann Goldstine desenvolvem
conceitos de programao e operaes por nmeros binrios utilizados at hoje.
Em 1951, o UNIVAC I, primeiro computador a utilizar os conceitos de von
Neumann, produzido em escala comercial. Tinha 20 m
2
e pesava 5 toneladas.
Em 1953 lanado o computador IBM 701.
Em 1954 lanado o IBM 650, maior sucesso de vendas da dcada.
O ano de 1959 marca o fim dos computadores de primeira gerao, baseados
em vlvulas. Assim, a evoluo dos computadores pode ser dividida nas seguintes
etapas:
Computadores da 1
a
Gerao:
Utilizao de circuitos eletromecnicos e vlvulas.
Computadores da 2
a
Gerao:
Utilizao de transistores (controlam a passagem de corrente)
Reduo do tamanho e da potncia consumida;
Dispositivos mais robustos e confiveis.
Computadores da 3
a
Gerao:
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
a
Gerao:
Circuitos integrados em altssima escala
Integrao de milhares de transistores em uma nica pastilha.

Alm da evoluo acima, pode-se destacar a evoluo das telecomunicaes
usando a mesma tecnologia. Isso viabilizou o uso de recursos de telecomunicaes
12
(internet, por exemplo) aplicados computao, possibilitando o uso distncia de um
computador por um ou vrios usurios.

1.3 Sistemas de Computao
Um sistema de computao formado por usurios, software e hardware; cada
um desses componentes ser definido posteriormente.
O objetivo de um sistema de computao realizar o processamento dos dados,
que a execuo de processos sobre o dado original para transform-lo em uma
informao.
Software ou programa a parte lgica que dota o equipamento fsico com a
capacidade de realizar algum trabalho. O programa nada mais que uma seqncia de
instrues escritas em uma linguagem de programao, informando ao hardware o que
fazer em que ordem.
Hardware a parte fsica de um sistema de computao, ou seja, todos os
elementos materiais que o constitui (circuitos eletrnicos, dispositivos mecnicos,
eltricos e magnticos).
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 tambm utilizado em uma rgua de clculo (figura 3),
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 construdo 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
13
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 deste nosso curso.

1.3.1 Arquitetura
Esta seo trata da estrutura de um computador digital.
O esquema de um computador digital pode ser representado pela figura 4.


Figura 4 Arquitetura bsica de um computador

A seguir, so descritos cada componente do computador digital.

1.3.1.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: teclado,
unidades de discos (disquetes e cds, por exemplo), scanners, mouse, leitores pticos,
etc. As unidades de entrada tambm so conhecidas como perifricos.

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

Memria
Unidade de
Controle
Unidade Lgica
e Aritmtica
Unidade de
Entrada
Unidade de
Sada
CPU
Memria
Unidade de
Controle
Unidade de
Entrada
Unidade de
Sada
CPU
14
Geralmente, a memria de alta velocidade utilizada para armazenar
temporariamente dados e programas que esto sendo processados, j que qualquer
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 possibilitar ao usurio representar os dados e
programas que deseje. Denomina-se byte a um conjunto de bits. Cada byte armazena o
equivalente a um caractere. 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 1 Gbyte (gigabyte).

1.3.1.3 Unidade 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.
15
Resumindo, o microprocessador a unidade central de processamento (CPU) de
um microcomputador.
A seguir, so descritas as unidades que constituem a CPU.

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

1.3.1.3.2 Unidade de Controle
a unidade responsvel pelo trfego 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 memria e da memria para
a unidade de sada.

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

2 Noes de Lgica e Algoritmos

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

2.1 Noes de Lgica
Lgica de programao significa o uso correto das leis do pensamento e de
processos de raciocnio para a produo de solues logicamente vlidas e coerentes,
que resolvam com qualidade os problemas que se deseja programar. Ou seja, a
tcnica de encadear pensamentos para atingir determinado objetivo.
16
A Lgica de programao pode ser representada em qualquer uma das inmeras
linguagens de programao, com a utilizao dos algoritmos.
O aprendizado dessa tcnica necessrio para quem deseja trabalhar com o
desenvolvimento de sistemas e programas computacionais.

2.2 Algoritmos
2.2.1 Conceituao
Algoritmo uma seqncia ordenada e sem ambigidades de passos finitos que
visam atingir um objetivo bem definido e, conseqentemente, levam soluo de um
problema.
Algoritmo no a soluo do problema. Algoritmo o conjunto de passos ou
aes (caminhos) que levam soluo de um dado problema.
Em um algoritmo importante salientar que:
Deve descrever exatamente as instrues que devem ser executadas e em que
seqncia.
A ordem dos passos deve ser precisamente determinada.
Eficiente: resolve o problema com um mnimo de recursos.
Eficaz: consegue resolver o problema em qualquer situao. Todas as situaes
de exceo que possam alterar o comportamento do algoritmo devem ser
especificadas e tratadas.

Existem vrias formas de representar os algoritmos, como, por exemplo:
descrio narrativa, fluxograma ou diagrama de blocos, pseudocdigos etc.
O exemplo abaixo ilustra o uso de um algoritmo do tipo descrio narrativa 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)
17

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;
7 Retirar o carto.

O algoritmo exatamente esta seqncia 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 algoritmos 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 o final de semana

1 Ver a previso do tempo;
2 Se fizer sol
ir praia;
Seno
Estudar;
3 Almoar;
4 Ver televiso;
5 Dormir.

Exerccio 2: Algoritmo para fazer uma prova

1 Ler a prova;
18
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
Pular para a prxima;

4 Entregar a prova.

2.2.2 Refinamentos Sucessivos
Um algoritmo considerado completo se os seus comandos forem do
entendimento do seu destinatrio.
Num algoritmo, um comando que no for do entendimento do destinatrio ter
de ser desdobrado em novos comandos, que constituiro um refinamento do comando
inicial. Por exemplo, o algoritmo para trocar uma lmpada queimada poderia ser:

1 Remova a lmpada queimada.
2 Coloque uma lmpada nova.

Detalhando ou refinando os passos:

1.1 Coloque uma escada embaixo da lmpada queimada.
1.2 Suba na escada at alcanar a lmpada queimada.
1.3 Gire a lmpada queimada no sentido anti-horrio at que ela se solte.
2.1 Escolha uma lmpada nova de mesma potncia da queimada.
2.2 Posicione a lmpada nova no soquete.
2.3 Gire a lmpada no sentido horrio at que ela se firme.
2.4 Desa da escada.
2.5 Guarde a escada.

19
Se um comando de um refinamento for um tanto vago, ele poder, por sua vez,
ser desdobrado em novos comandos, produzindo-se o refinamento de um refinamento,
e assim sucessivamente.

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

2.3 Linguagens de Programao
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, tornando-se pouco expressiva;
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.

20
Linguagem de
Programao
Linguagem de
Mquina
Compilador
Linguagem de
Programao
Linguagem de
Mquina
Compilador

Figura 5 Compilador

Como exemplo de linguagens de programao, podemos citar o Fortran, C, C++,
Pascal, Cobol, MATLAB etc.
O MATLAB, cujos detalhes 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
seqncia deste curso.
A tabela 1 apresenta uma genealogia de vrias linguagens de programao.
Observa-se que o ano associado a cada linguagem pode significar os anos do projeto
da linguagem, da sua implementao ou da sua primeira descrio publicada.

Tabela 1 Linguagens de programao

Linguagem Ano Criador
Linguagem
originria
Objetivo
FORTRAN 1954-57 J. Backus Computao numrica
ALGOL 60 1958-60 Comit FORTRAN Computao numrica
COBOL 1959-60 Comit
Processamento
de dados de negcios
LISP 1956-62 J. McCarthy Computao simblica
BASIC 1964
J. Kemeny
and T. Kurtz
FORTRAN Educacional
SIMULA 67 1967 O. -J. Dahl ALGOL 60 Simulao
Algol 68 1963-68 Comit ALGOL 60 Objetivos gerais
Pascal 1971 N. Wirth ALGOL 60 Educacional
PROLOG 1972 A. Colmerauer Inteligncia artificial
C 1972 D. Ritchie Algol 68 Programao de sistemas
Pascal atual 1975 P. Brinch Hansen Pascal Programao concorrente
Ada 1979 J. Ichbiah
Pascal
SIMULA 67
Objetivos gerais
Sistemas embutidos
Smalltalk 1971-80 A. Kay
SIMULA 67
LISP
Computao pessoal
C++ 1984 B. Stroutrup
C
SIMULA 67
Objetivos gerais
21
Tabela 1 Linguagens de programao

Linguagem Ano Criador
Linguagem
originria
Objetivo
Eiffel 1988 B. Meyer SIMULA 67 Objetivos gerais
Java 1995 SUN Microsystems C++ Computao em rede

Algumas observaes podem ser feitas a respeito das linguagens apresentadas
na tabela 1.
As linguagens FORTRAN e ALGOL 60 foram desenvolvidas como ferramentas
para resolver problemas cientficos numricos (sistemas de equaes, por exemplo), ou
seja, problemas envolvendo computao complexa e dados relativamente simples.
COBOL foi desenvolvido como uma ferramenta para resolver problemas de
processamento de dados de negcios, ou seja, problemas envolvendo computao
simples e grandes quantidades de dados estruturados, como por exemplo, uma
aplicao de folha de pagamento. A exceo do ALGOL 60 que originou outras
linguagens, como Pascal, mas no sobreviveu aos dias atuais , FORTRAN ainda est
entre as linguagens de programao mais utilizadas. As razes para este sucesso to
longo podem ser: a relutncia dos usurios em mudar para linguagens mais novas, por
causa de necessidade de compatibilidade com aplicaes existentes ou simplesmente
por medo da mudana; e o fato de que essa linguagem tem evoludo: FORTRAN 66,
FORTRAN 77 e FORTRAN 90.
SIMULA 67, um sucessor da linguagem ALGOL 60, introduziu o conceito de
classe, um esquema de modularizao que pode agrupar um conjunto de rotinas
relacionadas e estruturas de dados. Classes podem ser organizadas como hierarquias
de especializao crescente. O conceito de classe influenciou a maioria das linguagens
desenvolvidas aps o SIMULA 67, tais como: C++, Smalltalk, Java e Eiffel.
A linguagem de programao Pascal tambm obteve muito sucesso. Apesar de
ter sido concebida inicialmente como uma ferramenta para o ensino de programao
estruturada, houve uma rpida expanso de interesse em Pascal com o advento de
computadores pessoais de baixo custo. A principal vantagem da linguagem sua
simplicidade.
Tambm por razes de simplicidade, Basic outra linguagem que foi
desenvolvida no meio dos anos 60 e que foi muito popular. Melhorias recentes, como
22
Visual Basic, promoveram facilidades de alto nvel para o rpido desenvolvimento de
aplicaes interativas baseadas no ambiente windows.
A linguagem de programao C, desenvolvida no incio dos anos 70, hoje uma
das linguagens mais utilizadas por causa de sua potencialidade e eficincia para
programao de sistemas.
A verso atual de Ada apresentada em 1995, Ada 95, incorpora vrias melhorias
sobre a verso original, em particular, suporte para programao orientada a objetos.
As origens da programao orientada a objetos remontam linguagem de
programao Simula 67. Porm, este paradigma s ficou popular por causa do sucesso
do Smalltalk, no final dos anos 70, e do C++. A linguagem de programao C++ teve
xito na implantao de caractersticas de orientao a objetos em uma linguagem de
sucesso e amplamente acessvel como C. Isto permitiu que muitos programadores
migrassem de um paradigma de programao convencional para outro considerado
melhor. Eiffel outra linguagem orientada a objetos.
C++ parece estar ganhando aceitabilidade crescente como uma linguagem de
programao para fins diversos, primeiro porque suporta programao orientada a
objetos e segundo porque no requer o abandono de mtodos convencionais.
Uma direo importante para novos desenvolvimentos est na rea de
computao em rede. Java, derivado de C++ suportando mobilidade de cdigo na
Internet, pode ser visto como o ponto inicial de uma nova gerao de linguagens de
programao.
Por fim, importante dizer que a escolha da melhor linguagem depende da
aplicao. preciso aprender a lidar com uma variedade de linguagens e ser capaz de
migrar de linguagem a linguagem quando necessrio, ou seja, quando a aplicao
mudar. As linguagens evoluem e novas aparecem quando novas necessidades de
aplicao emergem.

2.4 Introduo ao MATLAB
O MATLAB um programa que incorpora duas caractersticas bsicas essenciais.
A primeira refere-se ao fato dele possuir uma linguagem de programao que pode
ser usada para desenvolver programas computacionais. A segunda est relacionada
com o fato de ser um programa de computao numrica, podendo ser usado para
23
resolver no s operaes matemticas complexas, mas tambm auxiliar na soluo de
problemas das mais diversas reas, incluindo a Engenharia.
Este curso d nfase ao uso do MATLAB 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 MATLAB como um todo.
queles que tm um interesse maior no seu aprendizado, recomenda-se um estudo
mais aprofundado das referncias indicadas.

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

2.4.2 Alguns Comandos Bsicos
Comando de Espera

>>

Finalizao dos comandos

<Enter>

Exemplo 01:

>> 5 * 3 + 4
ans = 19

Nota-se que o MATLAB funciona como calculadora (executa matemtica
elementar).



24
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


25
Exemplo 05: como verificar quais variveis esto sendo
usadas

>> who
ans b
a c

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

Exemplo 08:

>> % a varivel b tem valor inicial = 5
>> b = 5;

Configurao de Janelas

Menu View
26
o Passo 1: Selecionar Desktop Layout / Default;
o Passo 2: Desselecionar Command History.

Comando Clear
o Apagar uma varivel especfica;
o Apagar todas as variveis.

Exemplo 9:

>> clear b
>> b

>> clear

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 MATLAB usando,
para isso, o Menu File/New (M-File).

Exemplo 10: arquivo M

% arquivo M exemplo
a = 4;
b = 5;
c = 3;
a * b + c

Observaes importantes:

Salvar no diretrio de trabalho (na janela de comandos do MATLAB);
Erro
27
Executar: >> <nome do arquivo> ou RUN.

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

>> a = input(Escreva o numero a: );
>> b = input(Entre com um nome: ,
s);

disp: Imprime na tela um valor

Exemplo 12: arquivo M

a = input(a: );
b = input(b: );
c = input(c: );
d = a*b + c;
disp(d);

3 Tpicos Preliminares

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 MATLAB, adotada neste curso. Deve-se dedicar
ateno especial a este captulo, pois ele contm os fundamentos necessrios para a
compreenso dos seguintes.

RUN
28
3.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.

3.2 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.
Uma constante pode ser um nmero, um valor lgico ou uma seqncia de
caracteres quaisquer com algum significado para o problema em estudo. Conforme o
seu tipo, a constante classificada como sendo numrica, lgica ou literal.

3.2.1 Constante Numrica
A representao de uma constante numrica feita no sistema decimal,
podendo ser um nmero com parte fracionria ou no.
Ex.: 25
3.14
7.8E3 {7.8 x 10
3
}
2.5E-3 {2.5 x 10
-3
}

3.2.2 Constante Lgica
um valor lgico, isto , que s pode ser falso ou verdadeiro, usado em
proposies lgicas, conforme ser visto mais adiante.

3.2.3 Constante Literal
Uma constante deste tipo pode ser qualquer seqncia de caracteres (letras,
dgitos ou smbolos especiais) com algum significado para o problema em estudo.
Ex.: Francisco P.A. Almeida
12345
*A!B?-
15/05/2006

29
Nota-se que um numeral escrito como literal considerado como uma seqncia
de dgitos, e no como uma constante numrica.

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

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 MATLAB, no existe uma diferena entre
nmeros inteiros e reais. Eles so tratados de uma mesma forma como variveis
numricas. Alm disso, o MATLAB no requer a declarao prvia dessas variveis. Isso
feito implicitamente quando a varivel est sendo usada pela primeira vez no
programa computacional.

30
Exemplo 02 Variveis no MATLAB
a = 5; % varivel numrica
b = 8.35; % varivel numrica
s = c; % caractere
l = 1; % varivel lgica
v = casa; % seqncia de caracteres (string)

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

Palavra nica (sem espaos);
Maiscula Minscula;
Tamanho mximo = 31 caracteres;
Nome deve ser iniciado com letra;
Palavras-chave (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

3.4 Expresses Aritmticas
Expresses aritmticas so aquelas que cujos operadores so aritmticos e os
operandos so constantes e/ou variveis do tipo numrico.
Os operadores permitem combinar variveis e constantes, formando uma
expresso que pode ser avaliada e resultar em um valor.
O conjunto de operaes bsicas adotado o que se conhece da matemtica, ou
seja:



Erro: function uma palavra-chave
31
adio subtrao
multiplicao diviso
potenciao radiciao

Observao: no permitido omitir o operador de multiplicao, o que comum
nas expresses matemticas. Isto evita confuso quanto aos nomes de variveis, pois
numa expresso da forma AB+C, como saber se AB o nome de uma varivel ou a
multiplicao de entre os contedos de duas variveis, cujos nomes so A e B?

3.4.1 Operadores Aritmticos
Conjunto de smbolos que representam as operaes bsicas da matemtica. Os
tipos bsicos usados no MATLAB so:

Soma +
Subtrao
Multiplicao *
Diviso /

Observao: por uma questo de uniformidade, na elaborao de algoritmos,
no permitido o uso de outros smbolos para as operaes acima, a exemplo de e
para multiplicao e diviso, respectivamente.

Alm destes, existem outros operadores importantes 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.


32
Exemplo 06:
2^3
8

Exemplo 07:
mod(5,3)
2
Exemplo 08:
sqrt(9)
3

Exemplo 08:
>> c = 5 + 3;
Ou
>> a = 3;
>> b = 1;
>> c = 3 + a*b;

Exemplo 09:
>> a = teste
>> b = a + 2

3.4.2 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
+, -


Erro: no uma expresso
33
Exemplo 10:
5 + 9 + 7 + 8/4
5 + 9 + 7 + 2
23

Exemplo 11:
1 + 5 + (2 + 3) * 4
1 + 5 + 5 * 4
1 + 5 + 20
26

3.5 Expresses Lgicas
comum nos algoritmos surgirem situaes em que a execuo de uma ao,
ou seqncia de aes, est sujeita a certa condio. Essa condio representada no
texto do algoritmo por meio de uma expresso lgica.
Assim, expresses lgicas so aquelas cujos operadores so lgicos ou
relacionais e cujos operandos so relaes, constantes e/ou variveis do tipo lgico.

3.5.1 Operadores Relacionais
Os operadores relacionais so usados para realizar comparaes entre dois
valores do mesmo tipo. Esses valores podem ser constantes, variveis ou expresses
aritmticas. O resultado produzido por um operador relacional sempre um valor
lgico. Como na linguagem C, no MATLAB no existe explicitamente o operador lgico
VERDADEIRO ou FALSO. Se o resultado de uma comparao for falso, produz o valor
zero; caso contrrio, valor um.
Os operadores relacionais so conhecidos da Matemtica, a saber:

= igual a < menor que
diferente de maior que ou igual a
> maior que menor que ou igual a

Os operadores relacionais do MATLAB so:

34
< Menor que
<= Menor que ou igual a
> Maior que
>= Maior que ou igual a
== Igual a
~= Diferente de


Exemplo 12:
2 * 4 == 24 / 3
8 == 8
1

Exemplo 13:
>> vf = (4*5+3) + 4 == 20/4 + 15;
>> vf
vf = 0

Exemplo 14:
A = 3;
B = 2;
(A + B) > 3

3.5.2 Operadores Lgicos
A lgebra das Proposies define trs conectivos usados na formao de novas
proposies a partir de outras j conhecidas. Estes conectivos so os operadores nas
expresses lgicas, a saber:

e para a conjuno
ou para a disjuno
no para a negao
Cuidado!
Expresso Relacional
35
A conjuno de duas proposies verdadeira se e somente se ambas as
proposies so verdadeiras.
A disjuno de duas proposies verdadeira se e somente se, pelo menos uma
delas for verdadeira.
Dada uma proposio p qualquer, uma outra proposio, chamada negao de
p, pode ser formada escrevendo-se falso que antes de p ou, se possvel, inserindo a
palavra no em p.
O resultado obtido de uma expresso lgica sempre um valor lgico (V ou F).
Os operadores lgicos so utilizados na formao de proposies lgicas
compostas. No MATLAB, tais operadores so representados pelos seguintes comandos:

& e
| ou
~ no

Exemplo 15: (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
36
F V V
V F V
V V V

Sejam p e q proposies, as tabelas-verdade podem ser apresentadas
resumidamente como:

p q p e q p ou q no p
F F F F V
F V F V V
V F F V F
V V V V F

Exemplo 15:
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

3.5.2 Prioridades
possvel ter mais de um operador lgico na mesma expresso. Em alguns
casos, conforme os valores envolvidos, a ordem em que so efetuadas as operaes
lgicas afeta o resultado final. Assim, igualmente ao que acontece nas expresses
aritmticas, tambm existe uma relao de prioridade entre os operadores lgicos. A
37
tabela 2 apresenta as prioridades entre todos os operadores conhecidos, visto que
podem estar presentes na mesma expresso lgica.

Tabela 2 Prioridades das operaes

Prioridade Operaes
1
a
aritmtico
2
a
relacional
3
a
no
4
a
e
5
a
ou

Tambm nas expresses lgicas, vrios nveis de parnteses podem ser
utilizados com a finalidade de estabelecer uma ordem de execuo entre os operadores
lgicos.

3.6 Expresses Literais
Uma expresso literal aquela formada por operadores literais e operandos que
so constantes e/ou variveis do tipo literal.
Supondo que A e B so variveis literais, a operao de concatenao fornece
como resultado um nico literal formado pelo contedo de A seguido do contedo de B.
No MATLAB, isso feito da seguinte forma:

Exemplo 16:
>>txt=Resultado;
>>txt1=[txt da Prova]; % Concatenao horizontal
>>txt1=strcat(txt,' da Prova')
txt1 =
Resultado da Prova



38
Exemplo 17:
>>txt=Resultado;
>>txt1=[txt; da Prova] % Concatenao vertical

A concatenao vertical com sinal ;s foi possvel porque as duas cadeias de
caracteres possuem o mesmo tamanho.
Cadeias de caracteres com nmeros diferentes de letras no podem ser
concatenadas com ;:

Exemplo 18:
>> txt1=[txt; 'da Prova']
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.

Nesse caso, deve-se usar a funo strvcat, que executa a concatenao,
ajustando os tamanhos das cadeias de caracteres com a incluso de espaos.

Exemplo 19:
>> txt1=strvcat(txt, 'da Prova')
txt1 =
Resultado
da Prova

Alm da concatenao de literais, comum a existncia de outras operaes
desta natureza. Por exemplo, no MATLAB, a funo numel informa o comprimento do
literal, ou seja, o nmero de caracteres.

Exemplo 20:
>> numel(txt)
ans =
9
39
possvel identificar qualquer caractere de um literal.

Exemplo 21:
>> txt(1)
ans =
R
>> n=numel(txt);
>> txt(n)
ans =
o

O smbolo : define intervalos de indexao.

Exemplo 22:
>> txt(1,1:2)
ans =
Re
>> txt(1,3:5)
ans =
sul
>> txt(1,6:7)
ans =
ta
>> txt(1,8:9)
ans =
do

A palavra-chave end indica fim de intervalo.
Exemplo 23:
>> txt(1,6:end)
ans =
tado
40
3.7 Comando de Atribuio
Permite fornecer (atribuir) um valor a uma varivel. O comando utilizando para
definir esse operador =.

Exemplo 24:
>> A = 5;
>> B = 4;
>> C = A+mod(A,B);

Deve-se observar que esquerda do comando de atribuio deve existir apenas
uma varivel.

3.8 Comandos de Entrada e Sada
Os algoritmos necessitam da entrada de dados para que possam efetuar as
operaes e clculos a fim de alcanar um resultado desejado (sada de dados).
Os comandos de entrada e sada so as ferramentas que determinam o
momento da entrada dos dados para o programa e a sada dos resultados obtidos pelo
computador.
A finalidade da entrada de dados atribuir o dado a ser fornecido pelo usurio
varivel identificada. Nos algoritmos, pode-se utilizar a palavra leia para a leitura de
variveis.

leia (x
1
, x
2
, x
3
, ..., x
n
)

onde x
1
, x
2
, x
3
, ..., x
n
so variveis, lidas na mesma linha.

Exemplo:
leia (A);
leia (altura, peso);

No MATLAB, a associao de um valor a uma varivel pode ser feita,
basicamente de 3 maneiras, a depender de onde e como a varivel definida:

41
A varivel definida e associada no editor de programas.

Exemplo 1
prova_escrita=8;
prova_pratica=9;
media=(prova_escrita+prova_pratica)/2

A varivel definida e associada na janela de comandos.

Exemplo 2
media=(prova_escrita+prova_pratica)/2
>> prova_escrita=8;
>> prova_pratica=9;
>> ex2
media =
8.5000

A varivel definida no editor de programas, mas um valor especfico atribudo
na janela de comandos quando o programa executado.

Exemplo 3
prova_escrita=input('Prova escrita= ');
prova_pratica=input('Prova pratica= ');
media=(prova_escrita+prova_pratica)/2

Para esse ltimo caso, o comando input utilizado para criar a varivel. A
forma do comando input :

nome_da_variavel=input(mensagem que mostrada na janela de comandos)

A finalidade da sada de dados exibir o contedo da varivel identificada.
Mostrar a resposta do problema. A palavra-chave escreva utilizada nos algoritmos.
42
escreva (x
1
, x
2
, x
3
, ..., x
n
);

Exemplo: escreva (A);
escreva (Altura = , altura, metros);
escreva (Voc tem , peso, kilos);

No MATLAB, dois comandos so muito usados para a sada de dados: disp e
fprintf. O comando disp mostra a sada na tela, enquanto que o comando fprintf
pode ser usado para mostrar a sada na tela ou salvar a sada em um arquivo.
O comando disp usado para mostrar os elementos de uma varivel sem
mostrar o nome da varivel, e para mostrar texto. O formato do comando disp :

disp (nome de uma varivel) ou disp(texto)

Apenas uma varivel pode ser mostrada em um comando disp.

Exemplo 4
prova_escrita=input('Prova escrita= ');
prova_pratica=input('Prova pratica= ');
media=(prova_escrita+prova_pratica)/2;
disp(media);

O comando fprintf pode ser usado para mostrar texto e dados na tela ou para
salva-los em um arquivo. Com esse comando (diferentemente do comando disp) a
sada pode ser formatada.
A utilizao do comando fprintf para mostrar texto tem a seguinte forma:

fprintf (texto)




43
Exemplo 5
prova_escrita=input('Prova escrita= ');
prova_pratica=input('Prova pratica= ');
media=(prova_escrita+prova_pratica)/2;
fprintf('Media= ');
disp(media);

Obs.: O comando fprintf no inicia uma nova linha.

Outros comandos podem ser utilizados junto com o comando fprintf:
\n comea uma nova linha;
\b Backspace;
\t tabulao horizontal
A utilizao do comando fprintf pode ser feita para mostrar uma mistura de
texto e dados numricos. Isso acontece, por exemplo, da seguinte forma:

fprintf(texto % 5.2f texto adicional, nome da varivel);

onde o smbolo % marca onde o nmero entra no texto; no exemplo, 5.2f a
formatao da varivel, no caso, so 5 dgitos, com 2 casas decimais e formatao com
ponto fixo. Outros exemplos so:

e notao exponencial com letra minscula;
E notao exponencial com letra maiscula;
f notao com ponto fixo;
i inteiro.

Exemplo 6
prova_escrita=input('Prova escrita= ');
prova_pratica=input('Prova pratica= ');
media=(prova_escrita+prova_pratica)/2;
fprintf('\nMedia=%6.2f',media);
44
O comando fprintf permite inserir mais de uma varivel dentro do texto:

fprintf(texto %...%..., varivel1,varivel2);

3.9 Blocos
Um bloco pode ser definido como um conjunto delimitado de aes a serem
executadas.
Para delimitar um bloco em um algoritmo, so utilizados delimitadores:

incio

fim

4 Estruturas de Controle

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.

4.1 Estruturas Seqenciais
Correspondem execuo do conjunto de aes primitivas em uma seqncia
linear de comandos de cima para baixo e da esquerda para direita (ou seja, na mesma
ordem em que foram escritas).

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

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 = Ax + B;
disp(Coordenada X: );
disp(x);
disp(Coordenada Y: );
disp(y);

Exemplo 04: Fazer um programa para calcular a norma do vetor x = (x
1
, x
2
,
x
3
), 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);
Ax+B = Cx + D; (A-C)x=(D-B)

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

y=Ax+B
46
4.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 MATLAB 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.

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

4.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: );
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!);
end
Expresso Lgica
e/ou relacional
47
4.2.1.2 Seleo Composta
Usada 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

Expresso
L i /
48
4.2.1.2 Seleo Encadeada
Usada quando existe a necessidade de agrupar 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;
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



49
4.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;
case v2:
comandos 2;
case vn:
comandos n;
otherwise:
comandos;
end

Deve observar que varivel no pode ser uma expresso.

Exemplo 04:
disp(digite 1: primeira opcao);
disp(digite 2: segunda opcao);
disp(digite 3: terceira opcao);
case 1:
disp( Foi digitada a primeira opcao);
case 2:
disp( Foi digitada a segunda opcao);
case 3:
disp( Foi digitada a terceira opcao);
Otherwise:
disp( Opcao nao existente);
End

4.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
50
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
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: Eqiltero
2 lados iguais: Issceles
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 Eqiltero!);
elseif A == B | B == C | A == A
disp(Triangulo Issceles!);
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(x
2
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


51
Exerccio 04 Escrever um programa que verifique se um dado nmero par
ou mpar (entre 0 e 100).
A = input(Entre c/ o numero: );
if A < 0
disp(O numero e menor que zero!);
elseif A > 100
disp(O numero e maior que zero!);
else
if mod(A,2) == 0
disp(O numero e par!);
else
disp(O numero e impar!);
end
end

4.3 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 de todos os alunos da turma? (21, por exemplo)
Uma soluo repetir o cdigo acima 21 vezes; outra opo rodar (executar) o
programa acima 21 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.

4.3.1 Estruturas de Repetio Definidas
So estruturas de repetio com um nmero finito de repeties. Sua sintaxe
dada por:
52

para i de vi at vf de passo p faa
comando 1;
comando 2;
M
comando n;
fim

i = varivel de controle;
vi = valor inicial atribudo a i;
vf = valor final atribudo a i (condio de parada);
p = incremento/decremento dado varivel 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
53
Ao final da execuo, a varivel mdia vai armazenar o valor 63/10 = 6.3.
Se o valor do incremento (p) omitido, considera-se p=1 (for i = 1:10).
Se vi = vf, o lao executado uma vez.
Se vi > vf e p > 0 ou se vi < vf e p < 0, o lao no executado.

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

Ou

soma = 0;
for i = 0: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);

54
4.3.2 Estruturas de Repetio Indefinidas
So estruturas onde no se conhece, a priori, quantas execues sero
realizadas. Sua sintaxe dada por:

enquanto ( expresso condicional)
comando 1;
comando 2;
M
comando n;
fim

onde expresso condicional representa a condio de execuo do bloco.

No Matlab,

while ( expresso condicional)
comando 1;
comando 2;
M
comando n;
end

Exemplo 01: Calcular o valor de f(x) = x
2
+ 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.



55
Exemplo 02: Calcular a mdia anual de 10 alunos usando while.
soma = 0;
cont = 1;
while cont <= 10
m = input(Media: );
soma = soma + m;
cont = cont + 1;
end
media = soma/(cont 1);
disp(media);

4.3.2.1 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 randint(1,1,[0,100]) deve ser usado para gerar um
nmero inteiro aleatrio.
teste = 0;
soma = 0;
segredo = randint(1,1,[0,100]);
while teste == 0
chute = input(Entre com um numero: );
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 = randint(1,1,[Min,Max]);
56
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

Exerccio 03: Calcule o valor do cosseno de x (em radianos) usando os 20
primeiros termos da srie
...
! 8 ! 6 ! 4 ! 2
1 ) cos(
8 6 4 2
+ + + =
x x x x
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
Cx
2
+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: );
57
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

5 Estruturas de Dados

5.1 Introduo
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 Variveis Compostas Heterogneas
Registros

Essas novas variveis so descritas na seqncia desta seo.

5.2 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
Caractere
58
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).

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

5.2.1 Variveis Compostas Homogneas 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 MATLAB.

Exemplo 01:
>> A=(0:2:10)
>> B=ones(2,3)
>> C=zeros(3,2)

O exemplo acima produz o seguinte vetor:

A =
0 2 4 6 8 10
59
B =
1 1 1
1 1 1
C =
0 0
0 0
0 0

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:10
A(i) = 2*i 1;
end
disp(A);

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: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 );
1, 3, 5, 7, 9, ,
60
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:10
nota(i) = input(Entre c/ a nota: );
soma = soma + nota(i);
end
media = soma / 10;
for i = 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: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:100
if mod(i,2) == 0
a(i) = 1;
else
a(i) = 0;
end
end
disp(a);

61
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 19 elementos
restantes, at restar um nico elemento.
for i = 1:10
a(i) = input(A: );
end
for j = 1:10
% inicializacao
menor = a(j);
posicao = j;
% selecionando o menor
for i = j:10
if a(i) < menor
menor = a(i);
posicao = i;
end
end
% troca
aux = a(j);
a(j) = menor;
a(posicao) = aux;
end
disp(a);

Sobre o exemplo acima, as seguintes questes devem ser observadas:

a) A varivel posio armazena a posio do menor valor;
b) Uso de uma varivel auxiliar aux para fazer a troca de 2 nmeros.
62
5.2.2 Variveis Compostas Homogneas Multidimensionais
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
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 linha da matriz; o segundo a coluna.

63
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 observados:

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:5
disp(linha);
disp(i);
for j = 1:5
a(i,j) = input(a: );
b(i,j) = input(b: );
c(i,j) = a(i,j) + b(i,j);
end
end
disp(c);





64
Exerccios
Exerccio 01: Construir um programa para ler uma matriz e calcular a sua
transposta.
for i = 1:5
for j = 1:5
A(i,j) = input(A: );
end
end
for i = 1:5
for j = 1:5
B(i,j) = A(j,i);
end
end
disp(B);

Exerccio 02: Fazer um programa que leia os elementos de uma matriz 5x5 e
calcule o seu trao (soma dos elementos da diagonal principal).
for i = 1:5
for j = 1:5
A(i,j) = input(A: );
end
end
traco = 0;
for i = 1:5
traco = traco + A(i,i);
end
disp(traco);

Exerccio 03: Fazer um programa que calcule o produto de 2 matrizes.
A = 3x2
B = 2x4
for i = 1:3
for j = 1:2
A(i,j) = input(A: );
end
end
for i = 1:2
for j = 1:4
B(i,j) = input(B: );
end
end
for i = 1:3
for j = 1:4
C(i,j) = 0;
for k = 1:2
C(i,j) = C(i,j) + A(i,k) * B(k,j);
end
end
end
65
5.3 Variveis Compostas Heterogneas
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);
Fumante (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);

Exemplo 02: Fazer um programa para ler informaes escolares de um aluno
e armazen-las 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: , s);
Aluno.serie = input(Serie: );
disp(Aluno);
Campos
d
66
E se ns desejarmos 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: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:4
disp(aluno(i));
end



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. Imprimi-los.
for i = 1:5
v(i) = input(Entre com o valor: );
end
j = 0;
for i = 1:5
if mod(v(i),3) == 0
j = j + 1;
w(j) = v(i);
end
registro 1
registro 2
registro 3
registro 4
1 registro 1
2 registro 2
3 registro 3
4 registro 4
67
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:5
A(i) = input(Entre com A: );
end
for i = 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*A
t
-B
t
.
for i = 1:2
for j = 1:3
A(i,j) = input(A: );
end
end
for i = 1:2
for j = 1:3
B(i,j) = input(B: );
end
end
for i = 1:2
for j = 1:3
AT(j,i) = A(i,j);
BT(j,i) = B(i,j);
end
end
for i = 1:3
for j = 1:2
R(i,j) = 2*AT(i,j) BT(i,j);
end
end
disp( R );
68
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: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:n
if turma(i).aprov == S
if turma(i).sexo == F
num = num + 1;
end
end
end
disp( num );

6 Modularizao

6.1 Introduo
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:

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

6.2 Mdulos (Funes)
Aps a decomposio do problema, pode-se construir subalgoritmos ou mdulos
para cada subproblema obtido. Esses mdulos so as chamadas funes.

Exemplo: Gerenciamento Salarial
a) Dados
Nome
Ano Base
Salrio/Ms
Salrio/Ano (incluindo o 13
o
)
b) Pede-se
Clculo salrio/dia (20 dias/ms)
Clculo salrio/hora (8 horas/dia)
Novo salrio com aumento baseado no ndice da inflao
Classificao em classes sociais (A, B, C, D e E)
c) Sada (Resultados)
Nome
Salrio/Dia
Salrio/Hora
Novo salrio
Classe Social

Quando temos um problema complexo, como visto acima, a idia , ento,
dividi-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
Clculos Entrada Sada
Sal./Ms Sal./Dia Novo Sal. Classe Social
Problema
Clculos Entrada Sada
Sal./Ms Sal./Dia Novo Sal. Classe Social


70
Mdulo 1 Entrada dos dados
Mdulo 2 a) Clculo do Novo Salrio;
b) Salrio/Dia
c) Salrio/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: );

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 as funes tm um nome associado. Neste exemplo, o nome entrada;
Cada funo deve ser armazenada 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:

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

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

Salvar no arquivo
entrada.m
Salvar no arquivo
imprime.m
Salvar em qualquer arquivo. Este o
mdulo que deve ser executado.
72
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);

6.3 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)
Salvar no arquivo
teste.m
Salvar no arquivo
imprime.m
Erro: a, b e c no existem em
imprime.
73
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.

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: );
74
y = input(Numero: );
produto(x,y);
imprime;

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

6.4 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
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;
Erro: A varivel c no est declarada
em imprime.
75
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.

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

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:3
v(i) = input( V: );
end

% modulo 2 fatorial.m
function f = fatorial( v )
for i = 1:3
fat = 1;
for j = 1:v(i)
fat = fat * j;
end
f(i) = fat;
end

% modulo 3 saida.m
function saida( v, f )
for I = 1:3
disp(v(i));
disp(factorial :)
disp(f(i));
end

% modulo principal exem.m
x = entrada;
76
y = fatorial(x);
saida(x,y);

Exerccio 03 Exerccio 01 modificado
% arquivo entrada.m
function [a,b] = entrada
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:n
a(i) = input( A: );
end

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

% arquivo imprime.m
function imprime(m)
77
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:n
v(i) = input( V: );
end

% arquivo media.m
function m = media(v,n)
soma = 0;
cont = 0;
for i = 1:n
if v(i) > 0
soma = soma + v(i);
cont = cont + 1;
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:
Cuidado: tratar o caso onde a
varivel cont igual a zero.
78

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;

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


Erro: o campo media foi criado dentro da funo
media. A varivel registro precisar ser atualizada.
79
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: );

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






80
Referncias Bibliogrficas

CHAPMAN, S.J. (2003). Programao em MATLAB para engenheiros. So Paulo:
Thomson.
FARRER, H. et al. (1999). Programao estruturada de computadores: algoritmos
estruturados. 3.ed. Rio de Janeiro: LTC.
FEDELI, R.D.; POLLONI, E.G.F.; PERES, F.E. (2003). Introduo cincia da
computao. So Paulo: Thomson.
GHEZZI, C.; JAZAYERI, M. (1997). Programming language concepts. 3.ed. John Wiley &
Sons.
GILAT, A. (2005). MATLAB: an introduction with applications. 2.ed. John Wiley & Sons.
GUIMARES, A.M.; LAGES, N.A.C. (2001). Introduo cincia da computao. Rio de
Janeiro: LTC.
LIRA, W.W.M. (2005). Introduo computao. CTEC-UFAL. Apostila.
MARQUES, M.A. (2005). Introduo cincia da computao. So Paulo: LCTE.
MATSUMOTO, .Y. (2004). MATLAB 7: fundamentos. 1.ed. So Paulo: rica.