Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
CATARINENSE – CÂMPUS LUZERNA.
APOSTILA DE PROGRAMAÇÃO EM OCTAVE
SUMÁRIO
1. Constantes,VariáveiseTiposdeDADOS.......................................................51.1. Constantes........................................................................................................51.2. Variáveis...........................................................................................................51.3. Nomedasvariáveis...........................................................................................61.4. VariavéisnoOctave..........................................................................................61.5. VARIÁVEISPRÉ-DEFINIDAS................................................................................71.6. TiposdeVariáveis.............................................................................................8
1.6.1. Inteiros.............................................................................................................81.6.2. Pontoflutuante................................................................................................91.6.3. String................................................................................................................91.6.4. Tiposdevariáveisdinâmicos..........................................................................10
1.7. LendoeimprimindovaloresnoOCTAVE..........................................................101.7.1. Imprimindovalores........................................................................................101.7.2. Lendoumvalor...............................................................................................12
1.8. Exemplo01–Lendodoisvaloreseapresentandoasoma................................121.9. EXERCÍCIOS.....................................................................................................131.10. ExercíciosProgramação................................................................................13
2. Sistemasdenumeração..............................................................................152.1. Sistemadenumeraçãodecimal.......................................................................152.2. Sistemadenumeraçãobinário........................................................................15
2.2.1. Convertendodedecimalparabinário............................................................162.3. Sistemadenumeraçãooctal...........................................................................16
2.3.1. Conversãodeoctalparadecimal...................................................................172.3.2. Conversãodedecimalparaoctal...................................................................172.3.3. Convertendodebinárioparaoctal.................................................................172.3.4. Conversãodeoctalparabinário.....................................................................18
2.4. Sistemadenumeraçãohexadecimal...............................................................182.4.1. Conversãodehexadecimalparadecimal.......................................................192.4.2. Conversãodedecimalparahexadecimal.......................................................192.4.3. Conversãodehexadecimalparabinário........................................................20
2.5. EndereçamentoeordemdeBytes...................................................................212.6. Representandostring......................................................................................212.7. Representaçãodeinteiros...............................................................................22
2.7.1. Codificaçãodeinteirossemsinal...................................................................222.7.2. Codificaçãodeinteiroscomsinal...................................................................22
2.8. Pontoflutuante...............................................................................................222.8.1. Númerosfracionáriosbinários.......................................................................232.8.2. RepresentaçãodepontoflutuantedeacordocomaIEEE.............................242.8.3. Convertendoumnúmerofracionáriodecimalparabinário...........................252.8.4. Convertendoumnúmerofracionáriobinárioparadecimal...........................25
3. Operadores................................................................................................273.1. OperadoresAritméticos..................................................................................27
3.2. Estadoslógicos................................................................................................283.3. OperadoresRelacionais...................................................................................283.4. OperadoresLógicos.........................................................................................293.5. EXERCÍCIOS.....................................................................................................31
4. Funções......................................................................................................324.1. Exercícios........................................................................................................33
5. COMANDOSDEDECISÃO............................................................................345.1. SE/IF..............................................................................................................345.2. SE...SENÃO/IF....ELSE....................................................................................35
5.2.1. Exercício.........................................................................................................355.3. IF/ELSEEncadeados.........................................................................................365.4. Váriosifs.........................................................................................................365.5. switch...CASE..................................................................................................375.6. EXERCÍCIOS.....................................................................................................39
6. Vetoresematrizes......................................................................................406.1. Criandovetoresematrizes..............................................................................406.2. Selecionandooualterandoovalordeumelemento........................................416.3. Matrizefunções.............................................................................................426.4. Ooperador“:”................................................................................................43
6.4.1. Criandosequênciasdeelementos..................................................................436.4.2. Selecionandoealterandolinhas,colunasouelementos...............................446.4.3. Localizandoaposiçãodeelementos(comandoFIND)...................................47
6.5. FINDemMatrizes............................................................................................486.5.1. Localizandoelementosemcolunas/linhasdematrizes.................................496.5.2. UtilizandoovalorretornadopeloFIND..........................................................496.5.3. ExemplosutilizandoocomandoFIND............................................................50
6.6. operadoresespeciasparainicializaçãodevetoresematrizes..........................506.6.1. Funçãoeye()...................................................................................................516.6.1. Funçãolinspace()............................................................................................526.6.2. Funçãoones...................................................................................................526.6.3. Funçãozeros...................................................................................................536.6.4. Funçãorand....................................................................................................54
6.7. EXERCÍCIOS.....................................................................................................55
7. Salvandoerecuperandodadosemarquivo................................................577.1. Salvandodadosemarquivo............................................................................57
7.1.1. Exemplo1.......................................................................................................577.1.2. Exemplo2.......................................................................................................58
7.2. Recuperandodadosdearquivos.....................................................................597.2.1. Exemplo1.......................................................................................................597.2.2. Exemplo2.......................................................................................................607.2.3. Exemplo3.......................................................................................................617.2.4. Exemplo4.......................................................................................................61
7.3. Exercícios........................................................................................................62
8. Gráficos......................................................................................................638.1. Gráficosem2dimensões................................................................................63
8.1.1. Inserindotítuloeajustandoeixos..................................................................648.1.2. Adicionandolegenda......................................................................................678.1.3. Outrosparâmetrosdográfico........................................................................69
8.1.3.1. Mudandoacordofundo.....................................................................................698.1.3.2. Linhasdegrade....................................................................................................69
9. ComandosdeRepetição.............................................................................739.1. Enquantox,Processar(WHILE...Loop)............................................................739.2. PARA...ATÉ...Seguinte(FOR...TO...Next)......................................................749.3. Casospráticoscomrepetição..........................................................................75
9.3.1. Exemplo01-Somandoosvalores..................................................................759.3.2. Exemplo02–Verificandoosdivisores...........................................................78
9.4. Exercícios........................................................................................................80
5
1. CONSTANTES, VARIÁVEIS E TIPOS DE DADOS. Variáveiseconstantessãooselementosbásicosqueumprogramamanipula.Uma
variáveléumespaçoreservadonamemóriadocomputadorparaarmazenarumtipodedadodeterminado.
1.1. CONSTANTES
Constanteéumdeterminadovalor fixoquenãosemodificaao longodo tempo,duranteaexecuçãodeumprograma.
1.2. VARIÁVEIS
Variável é a representação simbólica dos elementos de certo conjunto. Cadavariável corresponde a uma posição de memória, cujo conteúdo pode se alterado aolongodotempoduranteaexecuçãodeumprograma.Emboraumavariávelpossaassumirdiferentesvalores,elasópodearmazenarumvaloracadainstante.
Partindo de uma analogia, uma variável pode ser considerada como uma caixa,ondeotipodedadoquepodeserarmazenadonavariáveléotamanhodacaixa,mesmoprincípioaconteceemprogramação,umavariávelqueiráreceberumvalorlógicotemumtamanhoembytes(1byte)inferioraumavariávelqueiráreceberumvalorReal(4ou8bytes).
Total
34
Nome
Valor
Tipo
Figura1-Representaçãodeumavariável
Umavariávelécompostaportrêspartes:1. Nome:éorótulodacaixa;comoelairáseridentificada.2. Valor:oqueestáarmazenadodentrodacaixa.3. Tipo:sãoasdimensõesdacaixa,emcomputaçãoserefereaquantidadede
bitsdisponíveisparaarmazenamento.
6
1.3. NOME DAS VARIÁVEIS
Paraatribuironomeparaumavariável,algumasregrasdevemseobedecida:1. Onomedeumavariávelpodeterumoumaiscaracteres;2. NomesdevariáveisoufunçõesnoOctavedevemcomeçarcomumaletra,
oucomumdosseguintescaracteresespeciais:'%','_','#','!','$','?'.3. Ospróximos caracterespodem ser letrasouumdos seguintes caracteres
especiais:'_','#','!','$','?'4. Nomespodemsertãolongosquantosequeira,masapenasosprimeiros24
caracteresserãolevadosemconsideração.5. Letrasmaiúsculaseminúsculassãodiferentes.6. Nãopoderãoserutilizadosoutroscaracteresdiferentesdeletras,números
ousublinhado;
1.4. VARIAVÉIS NO OCTAVE
ParautilizarvariáveisnoOctave,precisamosapenasespecificaronomeeovalor:
>>a = 1; >> b = 2 b = 2
Percebaadiferençaquandoseutilizaosinal ‘;’.Quandoeleé inserido,oOctaveatribui o valor a variável normalmente, a retirada do sinal irá fazer com que o Octaveatribuaovalorigualmenteaopçãoanterioreimprimaovalornoterminal.
Realizarasomadevariáveiseatribuirparaumanovavariávelésimples:
>>c = a + b; >> c c = 3 >> d = a + a d = 2
Percebaqueparaverificarovalordeumavariável,bastaapenasdigitaronomedavariável(lembre-sequeosinal‘;’iráimpedirqueovalorsejaexibido).
Casoqueira,podeserincluídovaloresdiretamente:
>> 2 * 5 ans = 10 >> 2 * 5.1
7
ans = 10.200 >> 2 ^ 3 ans = 8 >> 2 / 5 ans = 0.40000
Observação: a utilização de espaço entre os valores e o sinal de operação éopcional.
Podemostambémapresentarosvaloresdevariávelatravésdocomandodisp:
>>a = 3; >> disp(a); 3
Eumasituaçãoespecialequandonãodefinimosavariávelqueiráserarmazendooresultado,nessecasooOctaveatribuiautomaticamenteoresultadoparavariávelans:
>>5 * 3; >> disp(ans); 15
1.5. VARIÁVEIS PRÉ-DEFINIDAS
Algumasvariáveisjápossuemvalorespré-definidos:
Constante DetalhesI,i,J,j NúmerosimagináriospurosInf,inf Infinito
NaN,nan Notanumber.Éoresultadodeoperaçõescomo'0/0ou'Inf-Inf'
SEEK_SETComandosopcionaisdafunçãofseekSEEK_CUR
SEEK_ENDeps Retornaaprecisãodocomputador
pi Arazãoentreacircunferênciadeumcírculoeseudiâmetro.Internamenteeleécomputadorpor`4.0*atan(1.0)'.
realmax Omaiornúmeroempontoflutuantequepodeserrepresentado
realmin Omenornúmeroempontoflutuantequepodeserrepresentado
stdin Retornarosnúmerosdosarquivoscorrespondenteaentradapadrão,saídapadrãoesaídadeerropadrão.stdout
8
stderr
e NúmerodeEulerouConstantedeNéper.Éaconstantequeresolveaequação:log(e)=1
>> pi ans = 3.1416 >> e ans = 2.7183 >> realmax ans = 1.7977e+308
1.6. TIPOS DE VARIÁVEIS
Apesardetransparentes,asvariáveispossuemtiposparafinsdearmazenamento.
1.6.1. Inteiros Em grande parte das linguagens de programação, números naturais (0,1, 2,
3,etc.)sãoconhecidoscomointeirossemsinal.Para valores inteiros pode ser definidos a quantidade de bits utilizados para
armazenamentodovalor.
• Uminteirocomsinaldenbitstemumafaixadevaloresde-2n-1até2n-1–1• Uminteirosemsinaldenbitstemumafaixadevaloresde0até2n–1
Por exemplo, se foremutilizados 8 bits para armazernar um inteiro, a escala de
valoresvão:• Inteirocomsinal:de-27(-128)até27–1(127)• Inteirosemsinal:de0até28–1(255)
y=int8(x) Uminteirocomsinalde8-bitsentre[−27,27−1]=[−128,127]y=uint8(x) Uminteirosemsinalde8-bitsentre[0,28−1]=[0,255]y=int16(x) Uminteirocomsinalde16-bitsentre[−215,215−1]=[−32768,32767]y=uint16(x) Uminteirosemsinalde16-bitsentre[0,215−1]=[0,65535]
y=int32(x) Uminteirocomsinalde32-bitsentre[−231,231−1]=[−2147483648,2147483647]
y=uint32(x) Uminteirosemsinalde32-bitsentre[0,232−1]=[0,4294967295]
9
1.6.2. Ponto flutuante O ponto flutuante é uma forma de representar números na forma racional
(envolvendofrações).Apadronizaçãodosnúmerosempontoflutuanteem1985,garantiuahomogeneidadeda representaçãoe cálculosdesse tipodenúmero.Antesdisso, cadafabricanteadotavaumaformaprópriaderepresentaretambémdeoperar,muitasvezesofatorprecisãoeradeixadoemsegundoplanoemfavordeummelhordesempenhodoscálculos.
EmOctaveasvariáveisporpadrãosãodouble,umtipodepontoflutuantede64bits,mesmoquandoonúmeroématematicamenteum inteiro.Napráticaumavariáveldoublepodearmazenarvaloresinteirosentre−252e252.
Para números reais, o double consegue armazernar valores entre2,22507385850720x10-308e1,7976931348623157 x 10308.
>> a = 3 * pi a = 9.4248 >> b = 1/3 b = 0.33333
O armazenamento em ponto flutuante tem problema de arredondamento,verifiqueoresultadodaequaçãoabaixo:
>> 0.5 - 0.4 -0.1 ans = -2.7756e-17
Outroproblemaquepodeaconteceréextrapolarolimitedearmazenamento: >>printf("%25d\n", 2^53 + 1); 9007199254740992 >>printf("%25d\n", 2^53 + 2); 9007199254740994 >>printf("%25d\n", 2^53 + 3); 9007199254740996.
Obs.:Ocomandoprintfserávistoemcapítuloaparte,maspararesumir,eleé
umcomandoquepermiteespecificarcommaisdetalhescomoseráapresentadaasaída.
1.6.3. String Stringssãocodificadascomoumasequênciadecaracteresterminadapelocarácter
nulo (valor 0). Cada carácter é umnúmero inteiro convertido atravésdeumadefiniçãoparaumcarácter.AtabelamaisutilizadaéaASCII,queapresentaaequivalênciadeváriossímbolosparaobinário.
10
Stringssãodelimitadaspelosinaldeaspasduplas(“e”),eaconcatenação(junçãodestrings)podeserfeitoutilizandooscolchetes:“[]”
>>x = "aula"; >>y = "programação"; >> [x y] ans = aulaprogramação
1.6.4. Tipos de variáveis dinâmicos Quando nos criamos e gerenciamos variáveis, Octave permite alterar o tipo da
variáveldinamicamente.Istosignificaquepodemoscriarumvalorrealelogoemseguidaalteraroconteúdodavariávelparaoutrotipo:
>> a = 5.1 a = 5.1000 >> a = "valor" a = valor
1.7. LENDO E IMPRIMINDO VALORES NO OCTAVE
Além do comando disp, o Octave possui o comando printf, um comando maisamploparaimprimirvalores.
1.7.1. Imprimindo valores Aimpressãodevaloresatravésdocomandoprintf:
a = 5
a
Início
Fim
>>a = 5; >> printf("O valor de a = %d\n", a); O valor de a = 5
Figura2-Imprimindovalores
11
Perceba que o printf possui alguns caracteres estranhos dentro das aspas, oprimeiro %d se refere ao tipo de dado esperado, outros formatos que poderão serutilizados:
Tabela1-Caracterescoringas
Caractere Descrição
%dou%i Númerodecimalinteiro.%f Númeroreal(pontoflutuante)%s String
O“\n”(barrainvertida)éosímboloindicadoparaaofinalrealizarumaquebrade
linhanahoradeapresentaroresultadoOutroexemplodeimpressão:
a = 5
a
Início
Fim
pi = 3.14
pi
>>a = 5; >>pi = 3.14; >> printf("A = %d, PI = %f\n", a, pi); A = 5, PI = 3.140000
Figura3-Imprimindo2valores
Numaoperaçãodessesvalores,fizemosduassaídasprintfs,umacomoresultadosendoimpressocomointeiroeoutracomonúmeroreal:
>>a = 5; >>pi = 3.14; >>printf("A = %d, PI = %f\n", a, pi); A = 5, PI = 3.140000 >>printf("Resultado 1: %d\n", a * pi); Resultado 1: 15
12
>>printf("Resultado 2: %f\n", a * pi); Resultado 1: 15.700000
Você irá perceber que o Resultado 1 será truncado, isso se deve a forma de
armazenamentodovalorRealquenahoraderealizaraapresentaçãonãoéapresentadodevidamente:
Resultado 1: 15 Resultado 2: 15.700000
1.7.2. Lendo um valor Paralerumvalordigitado,utilizamosafunçãoinput:
a
Início
Fim
a
>>a = input("Digite um valor: "); Digite um valor: 4 >>printf("Valor digitado: %d\n", a); Valor digitado: 4
Figura4-Lendoumvalor
1.8. EXEMPLO 01 – LENDO DOIS VALORES E APRESENTANDO A SOMA
Nesse exemplo iremos apresentar um programa que irá solicitar ao usuário que
digitedoisvaloreseapresenteasomadeles:
13
a+b
Início
Fim
a
b
>>a = input("Digite um valor de A: "); Digite um valor de A: 5 >>b = input("Digite um valor de B: "); Digite um valor de B: 3 >>printf("Resultado: %d", a + b); Resultado: 8
Figura5-Algoritmoparasomardoisvalores
1.9. EXERCÍCIOS
1. Convertaoexemploacimadeformaquepossarealizarasomadenúmerosreais.2. Indiqueosnomesdasvariáveisquesãoválidos.Justifiqueosnomesinválidos.
a. pesob. média_finalc. R$
d. inte. 1diaf. teste1
g. area.do.quadradoh. valorreali. a+b
1.10. EXERCÍCIOS PROGRAMAÇÃO
1. Façaumfluxograma/programaquerecebadoisvaloreseapresenteadivisão
entres.2. Façaumfluxograma/programaquerecebadoisvalores,uméabaseeoutroo
expoenteeapresenteoresultadodapotência3. Umfluxograma/programaquerecebaovalordoraiodeumcírculoeimprimaa
área.4. OSr.Josédomercadinhodaesquinasolicitouquevocêfaçaum
fluxograma/programaparaagilizarocálculodocustodasmaças.ElevendemaçaaovalordeR$10,00pordúzia.Oclientepodecompraremfraçãodemeiadúziaoudúziascompletas.Seuprogramadevereceberovalordedúziaseapresentaroresultado.
14
Exemplos:Digite a quantidade de dúzias: 4 Valor das maças = R$ 40.000000 Digite a quantidade de dúzias: 1.5 Valor das maças = R$ 15.000000
5. Façaumfluxograma/programaquerecebaosvaloresdoscatetosecalculeahipotenusadeumtriânguloretângulo(paracalculararaizutilizeafunçãosqrt(valor)).
Exemplos:Digite o valor do Cateto a: 2 Digite o valor do Cateto b: 4 O valor da hipotenusa é 4.472136 Digite o valor do Cateto a: 9 Digite o valor do Cateto b: 12 O valor da hipotenusa é 15.000000
15
2. SISTEMAS DE NUMERAÇÃO Utilizaranotaçãodecimaléinteressanteparanóssereshumanos,principalmente
pela associação como número de dedos. Porémpara o computador amanipulação dedados através dessa notação é atualmente inviável, e por isso, o computador utiliza arepresentação de informação através da notação binária (dois estados: ligado oudesligado,0ou1).
2.1. SISTEMA DE NUMERAÇÃO DECIMAL
Estamostãoacostumadoscomarepresentaçãodevaloresnoformatodecimalquepassa despercebido a forma como são compostos, por exemplo, o número 456 é acombinaçãode:
6 x unidades(peso1ou100) 5 x dezenas(peso10ou101) 4 x centenas(peso100ou102)Ououtraformaderepresentaçãoéatravésdopesodascasas:Valor 4 5 6Peso 106 105 104 103 102 101 100
Resultado 400 50 6Somando-seosresultados:
400+50+6=456Pareceumabrincadeira,maslembre-sequejáestamosacostumadoscomesse
sistemadenumeraçãoejásabemoscomorepresentarele.
2.2. SISTEMA DE NUMERAÇÃO BINÁRIO
Acodificaçãoutilizapelocomputarpossuiapenasdoisestadospossíveis,comisso
atabeladepesosutilizaabase2,ecomopodemosterapenasosvalores0e1nascasas,vamos fazerademonstraçãodequantovaleonúmero11100102 (percebao2subscritoapósonúmero,elerepresentaemqualbaseseestáapresentadoonúmero)
Valor 1 1 1 0 0 1 0Peso 26=64 25=32 24=16 23=8 22=4 21=2 20=1Resultado 64 32 16 0 0 2 0Somandoosresultados:
16
64+32+16+0+0+2+0=11410
2.2.1. Convertendo de decimal para binário Oprocessodeconversãodedecimalparabináriopodeserfeitodeduasformas,de
formaaexemplificarosprocessosvamosconverteronúmero35110parabinário:Método1–Dividindoonúmeropor2sucessivamente
351 2175 2350
1 350 87 28611
43 2421
21 2201
10 2100
5 241
2 220
1
Utilizandoosresultadosdetrásparafrente:
35110=1010111112Método2–SubtraçãodopesodascasasNessemétodo,precisoverificarsepossosubtrairovalordonúmeropelopesoda
casa, caso positivo, acrescento 1 (um) a saída e o resto da subtração é enviada para apróximacasa.Seonúmeroémenorqueopesodacasa,acrescento0(zero)paraasaídaecontinuoomesmonúmeronovalordapróximacasa.
Valor 351–256= 95 95-64= 31 31-16= 15-8= 7-4= 3-2= 1-1=0Peso 29=512 28=256 27=128 26=64 25=32 24=16 23=8 22=4 21=2 20=1Saída 1 0 1 0 1 1 1 1 1
Novamentechegamosaoresultado:
35110=1010111112
2.3. SISTEMA DE NUMERAÇÃO OCTAL
17
Paranóshumanos,entenderumasequênciade0e1éconfusoefazeraconversãodebinárioparadecimalexigecertocálculosparaseobterovalor,deformaasimplificaravisualizaçãodesequênciasdebitssãoutilizadosoutrosmétodosesistemadenumeração.Umdeleéooctal,queutilizaosnúmerode0a7,totalizando8possíveiscombinaçãoporcasa.
2.3.1. Conversão de octal para decimal Paraconverterumnúmeroemoctalparadecimalutilizamosoprocessodecasase
pesos,porexemplo,paraconverteronúmero7538paradecimalfizemos:Valor 7 5 3Peso 85=32.768 84=4096 83=512 82=64 81=8 80=1Resultado 7x64=448 5x8=40 3x1=3 Oresultadoserá:
448+40+3=49110
2.3.2. Conversão de decimal para octal Paraconverterumnúmeroemdecimalparaoctal,utilizamosoprocessodedivisão
sucessivaspor8.Vejaumexemplo,paraconverteronúmero89710paraoctal
897 88961
112 81120
14 886
1
Oresultadoé16018
2.3.3. Convertendo de binário para octal O real motivo de se utilizar o sistema de numeração octal deve-se a forma de
representar os números em binário. Por isso o sistema de conversão é simples, porémanteseinteressanteconheceronúmeroemoctaleseequivalenteembinário.
18
Tabela2-Equivalênciaoctal-bináriaOctal Binário
0 0001 0012 0103 0114 1005 1016 1107 111
Combasenessatabela,bastaapenasagruparacadatrêsbitsonúmeroembinário
e verificar seu equivalente em octal, caso necessário podemos preencher com zeros aesquerdanossonúmeroembinário.
Vejaoexemplo,paraconverteronúmero11001110112paraoctal:
1100111011}}}}3741
Resultado:11001110112=14738
2.3.4. Conversão de octal para binário. Paraaconversãodeoctalparabináriooprocessoéoinversodaqueleapresentado
anteriormente,utilizandoaTabela2utiliza-seaequivalênciadonúmeroemoctal Paraexemplificar,vamosconverteronúmero47328parabinário:
100111011010
4732 }}}}
Oresultadodaconversão:1001110110102
2.4. SISTEMA DE NUMERAÇÃO HEXADECIMAL
Deuma formaparecida ao sistemaoctal, o hexadecimal é utilizadoparamelhorvisualizar uma sequencia de bits, sendo inclusive muito mais utilizado que o octal. Deforma a completar a lista com 16 símbolos, após o 9 se inicia a utilização de letras,começandonoAatéoF,essaequivalênciaévistanaTabela3
19
Tabela3-EquivalênciaDecimal–Hexadecimal
Decimal Hexadecimal0 01 12 23 34 45 56 67 78 89 910 A11 B12 C13 D14 E15 F
2.4.1. Conversão de hexadecimal para decimal. Para a conversão utilizamos o sistema de casas agora com a base 16. Para
exemplo, vamos converter o número A5D (perceba a substituição da letra pela seuequivalentedecimal)
Valor A 5 DPeso 164=65536 163=4096 162=256 161=16 160=1Resultado 10x256=2560 5x16=80 13x1=13
Resultado=2560+80+13=265310
2.4.2. Conversão de decimal para hexadecimal O processo ocorre por divisão, sempre cuidando para o caso do resto formaior
que10devesersubstituídopelosualetraequivalente.Convertendoonúmero1205910paraabasehexadecimal:
20
12059 1612048(B)11
753 1647752
116232
(F)15
Resultado=2F1B16
2.4.3. Conversão de hexadecimal para binário Aconversãoentreessasbasessegueomesmoraciocíniodaconversãoentreoctal
ebinário,porémcom4casas,queéaquantidadedecasasnecessáriapararepresentaros16símbolosemhexadecimal.
Hexadecimal Binário Hexadecimal Binário0 0000 8 10001 0001 9 10012 0010 A 10103 0011 B 10114 0100 C 11005 0101 D 11016 0110 E 11107 0111 F 1111
A conversão acontece agrupando os binário em grupo de 4 e verificando seu
equivalenteemhexadecimal,oprocessoinversotambéméválido.Porexemplo,paraconverteronúmero1011110101012parahexadecimal:
101111010101}}}
B D 5
Ede1F816parabinário:
111111000
}}}1 F 8
21
2.5. ENDEREÇAMENTO E ORDEM DE BYTES
Os programas que utilizam vários bytes para armazenar dados, precisar de duas
informações:qualoendereçodearmazenamentoequalaordemdosbytesnamemória.Paradadosarmazenadosemváriosbytes,geralmenteumasequênciadebytescontínuosé reservado para esse dado. O endereço dado é o byte inicial, por exemplo, se umavariávelxéarmazenadanoendereço0x100,ovalordaexpressão&xé0x100.Portantoosquatrobytesdavariávelxsãoarmazenadosnosendereços0x100,0x101,0x102e0x103.
Aordemdosbyteséaformacomoosdígitosserãoarmazenamentosnoespaçodememória,podendoiniciarpelomaissignificativo(bigendian)oupelomenossignificativo(littleendian)1.Exemplosdearquiteturaquesãolittleendianincluem:x86(inclusivex86-64), 6502 (inclusive65802,65C816), Z80 (inclusiveZ180,eZ80etc.),MCS-48,8051,DECAlpha,AlteraNios,AtmelAVR,SuperH,VAX,ePDP-11.
Nossa forma de representar número é equivalente ao big endian, ondecomeçamosarepresentarumnúmerocomomaiorpesoprimeiroeaesquerda.Algumasarquitetura big endian são: Motorola 6800 e 68k, Xilinx Microblaze, IBM POWER,System/360eseussucessoresSystem/370,ESA/390,ez/Architecture.
Aindaháumconjuntodearquiteturaqueaordemdosbytespodeconfiguradonomomentodeinicialização,denominadasbi-endian.Sãoexemplodearquiteturabi-endianARM,PowerPC,Alpha,SPARCV9,MIPS,PA-RISCeIA-64.
Aseguirsegueumexemplodearmazenamentodovalor0x0A0B0C0DnasformasBigeLittleEndian:
0x103 0D0x102 0C0x101 0B0x100 0A
Figura6-BigEndian
0x103 0A0x102 0B0x101 0C0x100 0D
Figura7-LittleEndian
2.6. REPRESENTANDO STRING
String em C é codificado como uma sequência de caracteres terminada pelo
caracter nulo (valor 0). Cada caracter é um número inteiro convertido através de umadefiniçãoparaumcaracter.AtabelamaisutilizadaéaASCII,queapresentaaequivalênciadeváriossímbolosparaobinário,porexemploastring“arquitetura”será representadaconformemostraaFigura8,percebaqueocomputadoriráarmazenarovalorembinário.
Caracter a r q u i t e t u r a
Decimal 97 114 113 117 105 116 101 116 117 114 97
1 Protocolos seriais também são classificados quanto a ordem de envio das
informações.USB,RS-232,RS-422eRS-485sãoexemplosdepadrõesseriaisdotipolittle
22
Binário 1100001 1110010 1110001 1110101 1101001 1110100 1100101 1110100 1110101 1110010 1100001
Hexadecimal 61 72 71 75 69 74 65 74 75 72 61Figura8-Representaçãodecaracteres
2.7. REPRESENTAÇÃO DE INTEIROS
Existem diversas formas de representar um número inteiro, a princípio ocomputador é capaz de armazenar inteiros positivos apenas, porém, comoproceder seprecisar armazenar um número negativo? Esse capítulo irá tratar dessas formas derepresentação
2.7.1. Codificação de inteiros sem sinal Assumimosquearmazenamosuminteirocomalarguraω,ovetorquecontêmos
valores chamaremosdeň, uma sequênciadebits que será convertidopara inteiro semsinal.Aequaçãoquetranscreveaformadeconversãoéapresentadoaseguir:
𝐼!! = ň 𝑖 ×2!!!!
!!!
2.7.2. Codificação de inteiros com sinal2 Pararepresentarumnúmerocomsinaloprocessomaiscomuméocomplemento
de2.Eleutilizaobitmais significativodapalavracomosinal.Aexpressãoquedefineaformadeconversãoé:
𝐼!" = − ň ω− 1 ×2!!! + ň 𝑖 ×2!!!!
!!!
Por exemplo, qual o número emdecimal representadopelo número 110110102,percebaquealarguradovetoré8:Valor 1 1 0 1 1 0 1 0Peso 27=128 26=64 25=32 24=16 23=8 22=4 21=2 20=1Resultado 128 64 0 16 8 0 2 0
-(128)+64+16+8+2=-38
2.8. PONTO FLUTUANTE
2FimdomundoparaoLinuxesimilares,umproblemadelimitaçãonavariáveldearmazenamentoda
datanos sistemas compadrãoPOSIXpodemcausar problemas, o fim será as 03hrs14min07segde19deJaneirode2038.Paramaioresdetalhesprocurepor“Bug2038”
23
O ponto flutuante é uma forma de representar números na forma racional (envolvendofrações).Apadronizaçãodosnúmerosempontoflutuanteem1985garantiuahomogeneidadedarepresentaçãoecálculosdessetipodenúmero.Antesdisso,cadafabricanteadotavaumaformaprópria de representar e também de operar, muitas vezes o fator precisão era deixado emsegundoplanoemfavordeummelhordesempenhodoscálculos.
2.8.1. Números fracionários binários
Na nossa forma norma de representação de números fracionários decimais, utilizamos osistemadepesotambémnoladodireitodavírgulaqueseparaaparteinteiradafracionária.Porexemplo,onumero12,345seriarepresentadoassim:
Valor 1 2 3 4 5 Peso ... 101 100 10-1 10-2 10-3 ...Resultado 10 2 0,3 0,04 0,005
Oresultadoseriaasomadosresultados,ounaformamatemática:
𝐷 = 10!×𝑑[𝑖]!
!!!!
OndeDseriaonúmerodecimalfinal,maquantidadedecasasinteiras,nonúmerodecasasfracionárias,ed[i]apartedonúmerodecimalnacasai.
Poranalogia,considereagoraessaformapararepresentarosistemabinário,comomesmoprincípiodecasasepesos.Porexemplo,vamosrepresentaronúmero101.112
Valor 1 0 1 1 1 Peso ... 22=4 21=2 20=1 2-1=1/2 2-2=1/4 ...Resultado 4 0 1 1/2 1/4
Resultado = 5 !!
Arepresentaçãomatemáticaé:
𝐵 = 2!×𝑏[𝑖]!
!!!!
24
Porémessaformaderepresentarnúmerosfracionáriostemproblemasdeprecisão34,porexemplo, para representar o número 0,2 (1/5), não há formas precisão de representação,conformemostradonaTabela4.
Tabela4-aproximaçãode1/5
Representação Valor Decimal0,012 1/4 0,25100,00112 3/16 0,1875100,0011012 13/64 0,203125100,001100112 51/256 0,1992187510
2.8.2. Representação de ponto flutuante de acordo com a IEEE Com o padrão IEEE 754 de 1985, baseada num pequeno e consistente conjunto de
princípiostornouarepresentaçãoemnúmeroempontoflutuanteeleganteeentendível.
AIEEE754representaumnúmeronoformatoV=(-1)SxMx2eonde:
• S:sinaldonúmero,negativoédefinidoporS=1oupositivoS=0• M:Mantissa,éarepresentaçãodapartefracionária• e:expoentedabase.
AIEEE754padronizaoformatoemdoistamanhos,opontoflutuantedePrecisãosimpleseo de Precisão dupla. Cada um com diferentes tamanhos de campos conforme apresentadorespectivamentenasfigurasFigura9Figura10
bits 1 8 23
+- Expoente Mantissa
Figura9-Pontoflutuantedeprecisãosimples
bits 1 11 52
+- Expoente Mantissa
Figura10-Pontoflutuantedeprecisãodupla
O expoente é definido através do calculo com o bias, esse número é obtido através donúmerodebitsnoexpoentecomafórmula2k−1–1.Paraocasodeprecisãosimples,obiasé28−1–1=127.Paraopontoflutuantedeprecisãodupla,211−1–1=1023.
3 Um fato curioso sobre essa problema de representação foi na guerra doGolfo, para sabermais
detalhespesquisenumsitedebuscapor“erroarredondamentomíssilPatriot”.4AindapodemosverificarproblemasdearredondamentonoExcel,para issonumacélulaqualquer
insiraaequação=(0,5-0,4-0,1).Oresultadodeveriaser0.
25
2.8.3. Convertendo um número fracionário decimal para binário5 Deformaaexemplificaraconversão,vamosconsiderarumadefiniçãoprópriadotamanho
dopontoflutuante,osinalseráde1bit,oexpoentede3bits(biasiguala3)emantissade4bits,totalizando8bitsparaarmazenaronúmeroqueseránossoexemplo:2,625:
1. Paraaparteinteira,realiza-seaconversãonormaldedecimalparabinário:210=1022. Paraapartefracionária,faz-sesucessivasmultiplicaçõesdapartefracionáriapor2:
0,625×2=1,25 1 Retiraonúmerointeiroecontinuaaconta0,25 ×2=0,5 0 Gerou0,continuando...0,5 ×2=1,0 1 Gerou1erestou0,paraaqui.
Portanto,0,62510=0,1012
3. Juntandoaparteinteiraeapartefracionária,temos10.10124. Adicionandooexpoente:10.1012×205. Normalizando: 10.1012 × 20 = 1.01012 × 21 (verifique que foi deslocado o ponto
decimalumacasaparaadireita,porisso,oexpoenteaumentouumacasa).6. Mantissa:01017. Expoente:1+3=410=10028. Bitdesinalpositivo:09. Resultadoé01000101,emhexadecimal4516
Vamosparaoutroexemplo,converteronúmero -39887.5625parao formato IEEE754deprecisãosimples:
1. Aparteinteira:3988710=100110111100111122. Afração0,562510=0,10012
0,5625×2=1,125 1 Generate1andcontinuewiththerest.0,125 ×2=0,25 0 Generate0andcontinue.0,25 ×2=0,5 0 Generate0andcontinue.0,5 ×2=1,0 1 Generate1andnothingremains.
3. Aconversãocompleta:39887,562510=1001101111001111,100124. Normalizando:1001101111001111,10012=1,00110111100111110012×215.5. Mantissaé00110111100111110010000,oexpoenteé15+127=142=100011102,
bitdesinalé1.6. Portanto39887,5625é11000111000110111100111110010000=C71BCF9016
2.8.4. Convertendo um número fracionário binário para decimal. Oprocessoinverso,paraconverterC4A42A0016paradecimal,atravésdanormativaIEEEde
precisãosimples:
5Formadeconversãoretiradodehttp://sandbox.mc.edu/~bennet/cs110/flt/dtof.html
26
1. Convertendo:C4A42A0016=1100010010100100001010100000000022. Sinal:1=negativo3. Expoente:100010012=137–127(bias)=104. Mantissa:010010000101010000000002=0,28253173828125105. Aplicandoamantissaeoexpoente=1,28253173828125x210=-1313,312510
27
3. OPERADORES Osoperadoressãomeiospeloqualincrementamos,decrementamos,comparamos
eavaliamosdadosdentrodocomputador.Temostrêstiposdeoperadores:• OperadoresAritméticos• OperadoresRelacionais• OperadoresLógicos
3.1. OPERADORES ARITMÉTICOS
Osoperadoresaritméticossãoosutilizadosparaobterresultadosnuméricos.Alémdaadição,subtração,multiplicaçãoedivisão,háooperadorrestodadivisão.Ossímbolosparaosoperadoresaritméticossão:
Tabela5-Operadoresaritméticos
Operação SímboloAdição +Subtração -Multiplicação *Divisãopeladireita /Divisãopelaesquerda \Potência ^ou**Transpor ‘
Hádoisoperadoresparadivisão,umque segueo sentidonormal comoestamos
acostumados:>>2 / 4 ans = 0.5
Eoutroquefazoprocessocomosoperadoresinvertidos:
>>2 \ 4 ans = 2.
Paraapotência,podemserutilizadostantoosinal‘^’quanto‘**’:
28
>>2 ^ 2 ans = 4. >>2 ** 2 ans = 4.
Tabela6-HierarquiadasOperaçõesAritméticasNível Operação1º ()Parênteses2º *ou/(oqueaparecerprimeiro)3º +ou–(oqueaparecerprimeiro)
ExemploTotal = PRECO * QUANTIDADE 1 + 7 * 2 - 1 = 14 3 * (1 - 2) + 4 * 2 = 5
3.2. ESTADOS LÓGICOS
Emvárias linguagem,osoperadores relacionaise lógicossópodemretornardoisestados possíveis Verdadeiro ou Falso (em inglês True ou False) representado pelosnúmeros1e0respectivamente.
Porém,qualquervalordiferentede0(zero)seráconsideradoverdadeiro.Vejaalgunsexemplos:
>> 0 & 1 ans = 0 >>-1 & 2 ans = 1 >>1 & 2 ans = 1
3.3. OPERADORES RELACIONAIS
Os operadores relacionais são utilizados para comparar números. Os valores aseremcomparadospodemsernúmerosouvariáveis.
Estes operadores sempre retornam valores lógicos (Verdadeiro ou Falso). Paraestabelecerprioridadesnoquedizrespeitoaqualoperaçãoexecutarprimeiro,utilizeosparênteses.
29
Osoperadoresrelacionaissão:
Tabela7-OperadoresrelacionaisDescrição Símbolo
Iguala ==Diferente ~=ou!=Maiorque >Menorque <Maiorouiguala >=Menorouiguala <=
Exemplo:TendoduasvariáveisA=5eB=3Osresultadosdasexpressõesseriam:
Tabela8-ExemplodeexpressõesExpressão ResultadoA==B FALSOA!=B VERDADEIROA>B VERDADEIROA<B FALSOA>=B VERDADEIROA<=B FALSO
3.4. OPERADORES LÓGICOS
Os operadores lógicos servem para combinar resultados de expressões,retornandoseoresultadofinaléverdadeirooufalso.
Osoperadoreslógicossão:
Tabela9-OperadoreslógicosOperador Original EmOctave
e and &ou or |não not ~ou!
E/AND = Uma expressão AND (E) é verdadeira se todas as condições forem
verdadeiras
30
Tabela10-OperadorE1ºValor 2ºValor Resultado
F F FF V FV F FV V V
OR/OU=UmaexpressãoOR (OU)éverdadeirasepelomenosumacondição for
verdadeira
Tabela11-OperadorOU1ºValor 2ºValor Resultado
F F FF V VV F VV V V
NOT=Uma expressãoNOT (NÃO) inverte o valor da expressão ou condição, se
verdadeirainverteparafalsaevice-versa.
Tabela12-OperadorNÃO1ºValor Resultado
V FF V
Exemplos:SuponhaquetemostrêsvariáveisA=5,B=8eC=1.Osresultadosdasexpressõesseriam:
Tabela13-ExpressõesExpressão Resultado
A==B & B>C FALSOA~=B | B<C VERDADEIRO
A>B VERDADEIROA<B & B>C VERDADEIROA>=B | B==C FALSO
~ A<=B FALSO
31
3.5. EXERCÍCIOS
1) Tendo as variáveis SALARIO, IR e SALLIQ, e considerando os valores abaixo.Informeseasexpressõessãoverdadeirasoufalsas.
2) SabendoqueA=3,B=7eC=4,informeseasexpressõesabaixosãoverdadeirasoufalsas.
a)(A+C)>B ( )b)B>=(A+2) ( )c)C==(B–A) ( )d)(B+A)<=C ( )e)(C+A)>B ( )
3) Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões abaixo sãoverdadeirasoufalsas.
a)(A>C)&(C<=D) ( )b)(A+B)>10|(A+B)==(C+D) ( )c)(A>=C)&(D>=C) ( )
4) Faça um programa que solicite ao usuário que digite a base e a altura de umtriângulo.Emseguida,apresenteaáreadomesmo.
Área=(Base*Altura)/2
5) Crieumprogramaquesoliciteaousuárioquedigiteaquantidadedehorasedeminutos. Após isso, o programa deverá responder a quantidade de segundos nesseperíodo.
Segundos=(Quantidadedehoras*3600)+(Quantidadedeminutos*60)
6) Escrever um algoritmo para determinar o consumo médio de um automóvelsendofornecidaadistânciatotalpercorridapeloautomóveleototaldecombustívelgasto
Consumomédio=distânciatotal/totaldecombustívelgasto
7) A Loja Café comAçúcar está vendendo seus produtos em 5 (cinco) prestaçõessemjuros.Façaumprogramaquerecebaumvalordeumacompraemostreovalordasprestações.
32
4. FUNÇÕES Funções são formas de operar elementos de forma mais natural e são muito
utilizadasparamelhorarestruturaumprograma.Umafunçãocomeçacomapalavrachavefunctioneterminacomendfunctionveja
umexemplo:
>>function res=soma(a, b) >>res = a + b; >>endfunction >>soma(4, 5) ans = 9
DetalhandoaslinhasNa linhafunction res=soma(a, b) começamosumafunçãochamandoa
palavra function, logo em seguinda a variável res será responsável por pelo retornodedadosparao localemque foi chamado.Soma se refereaonomeda funçãoea ebosvaloresqueserãopassados.
Dentrodafunção,avariávelderetornores iráreceberoresultadodasomaeaofinaldafunçãoiráterseuvalorretornandoafunçãoquechamou.
Alinhasoma(4, 5)iráchamarafunçãocorrespondente,passandoosvalores4
e5,aofinalapresentadooresultado.Asintaxepadrãodafunçãoéaseguinte:Function [<retorno>]=<Nome_Função>(<lista de argumento>) <Processamento> endfunction
Oretornopodeserumaúnicavariávelouumconjuntodevariáveis,nessecasoalistadevariáveisderetornodevemserinseridasdentrodecolchetes(“[“e“]”)
Percebanopróximoexemplo,queafunçãoprocessaretornadoisvalores,umcom
oresultadodasomadosparâmetroseoutrocomasubtração:
>>function [soma, subtrai]=processa(a, b) >>soma = a + b; >>subtrai = a - b; >>endfunction >>[res_soma, res_sub] = processa(6, 4) res_soma = 10
33
res_sub = 2
4.1. EXERCÍCIOS
1. Escrevaumafunçãoquecalculeeretorneadistânciaentredoispontos(x1,y1)e(x2,y2).
2. Escreva uma função potencia(base, expoente) que, quando chamada,retornabaseexpoente.Porexemplo,potencia(3,4)deveretornar81.Assumaqueexpoenteéuminteiromaiorouiguala1.
3. Crie funções que recebam um valor de x e retorne o resultado dasseguintesequaçõesmatemáticas:
a. x+2b. x–2*xc. x2–4d. x3+2x2-6x+2
4. Façaumprogramaquerecebaosvaloresdea,beceatravésdaformuladeBhaskara,retorneasduasraízesdaexpressão.
34
5. COMANDOS DE DECISÃO Oscomandosdedecisãooudesviofazempartedastécnicasdeprogramaçãoque
conduzem a estruturas de programas que não são totalmente sequenciais. Com asinstruçõesdeSALTOouDESVIOpode-se fazercomqueoprogramaprocedadeumaououtra maneira, de acordo com as decisões lógicas tomadas em função dos dados ouresultadosanteriores.
5.1. SE / IF
Aestruturadedecisão“SE/IF”normalmentevemacompanhadadeumcomando,ou seja, se determinada condição for satisfeita pelo comando SE/IF então executedeterminadocomando.
A decisão é sempre composta por um ou mais operador relacional, equando mais de um operador relacional estiver na condição,obrigatoriamente deve-se utilizar o operador lógico para conectar asexpressões.
AdecisãosópodeserrespondidacomSimouNão
Imagine um algoritmo que determinado aluno somente estará aprovado se sua
médiaformaiorouiguala5.0,vejanoexemplodealgoritmocomoficaria.SEMEDIA>=5.0ENTÃO
ALUNOAPROVADOEmdiagramadeblocosficariaassim:
media = input("Digite a nota: ") if media >= 5 printf("Aprovado\n"); end
Figura11-ComandoIF
35
5.2. SE... SENÃO / IF....ELSE
Aestruturadedecisão“SE/SENÃO”,funcionaexatamentecomoaestrutura“SE”,com apenas uma diferença, em “SE” somente podemos executar comandos caso acondição seja verdadeira, diferente de “SE/SENÃO”, pois sempre um comando seráexecutado independente da condição, ou seja, caso a condição seja “verdadeira” ocomandodacondiçãoseráexecutado,casocontrárioocomandodacondição“falsa”seráexecutada.
Emalgoritmoficariaassim:SEMÉDIA>=5.0ENTÃO
ALUNOAPROVADOSENÃO
ALUNOREPROVADOOdiagramaeocódigoemOctave
media = input("Digite a nota: ") if media >= 5 printf("Aprovado\n"); else printf("Reprovado\n"); end
Figura12-UsodoSE/SENÃONo exemplo acima está sendo executada uma condição que, se for verdadeira,
executa o comando “APROVADO”, caso contrário executa o segundo comando“REPROVADO”.
5.2.1. Exercício
1) Façaumprogramaquesomedoisvalores,seoresultadofor0deveapareceramensagem“Zero”,casocontrário,“DiferentedeZero”.
36
5.3. IF/ELSE ENCADEADOS
Paraoexemplodadoanteriormentepodemospensaremtornaroprogramamaiselaborado,criandoasseguintessituações:
• Casooalunotirenotaabaixode5,sejaconsideradoreprovado.• Casooalunotenhanotamaiorouiguala5,porém,menordoque7estará
emexame.• Casooalunotenhanotamaiorouiguala7estaráaprovado.
AtenteasaídadoprimeiroIF,neleacondiçãomédia>=5garanteduassituações,
sefalsaentãoapresentaamensagemde“Reprovado”,seforverdadeiraentraparamaisumadecisãoIF.
No segundo IF não me preocupo se a média for maior do que 5, pois isso foiverificado no bloco anterior, com isso verifico agora se média >= 7 e as duaspossibilidades:“Exame”ou“Aprovado”.
media = input("Digite a nota: ") if media >= 5 if media >= 7 printf("Aprovado"); else printf("Exame"); end else printf("Reprovado"); end
Figura13-IFsencadeados
5.4. VÁRIOS IFS
Podemos também utilizar vários IFs em sequência para resolver o problema damédia:
37
media < 5Sim
Não
Reprovado
Fim
media
media >= 5 && media < 7
Sim
Não
Exame
media >= 7Sim
Não
Aprovado
media = input("Digite a nota: ") if media < 5 printf("Reprovado"); elseif media >= 5 & media < 7 printf("Exame"); elseif media >= 7 printf("Aprovado"); end
Figura14-IFemsequênciaNesse caso, deve-se tomar cuidado nas condições do IF, como queremos que
apenasumamensagemsejaexibida,acondiçãonãopodeseraplicadaparavárioscasos,porisso,quenosegundoIFtivemosquerealizarduascomparações.
5.5. SWITCH... CASE
A estrutura de decisão SWITCH/CASE é utilizada para testar, na condição, umaúnica expressão, queproduzum resultado, ou, então, o valordeumavariável, emqueestáarmazenadoumdeterminado conteúdo.Compara-se, então,o resultadoobtidonotestecomosvaloresfornecidosemcadacláusula“Caso”.
No exemplo do diagrama de blocos abaixo, é recebido uma variável “Valor” etestado seu conteúdo, caso uma das condições seja satisfeita, é apresentado o mêscorrespondente,casocontrárioéapresentadaamensagem“Nãoéummêsválido!”.
DiagramadeBloco:
38
Recebe Valor
Valor = 1
Valor = 2
Valor = 3
.
.
.
.
Valor = 12
Não
Não
Não
Sim
Sim
Sim
SimNão
Janeiro
Fevereiro
Março
Março
Não é um mês válido
Figura15-DiagramadeblocodoSwitch
EmOctave:
mes = input("Digite o mês:"); switch (mes) case 1 printf("Janeiro\n") case 2 printf("Fevereiro\n") case 3 printf("Março\n") case 4 printf("Abril\n") case 5 printf("Maio\n") case 6 printf("Junho\n") case 7 printf("Julho\n") case 8 printf("Agosto\n") case 9 printf("Setembro\n") case 10 printf("Outubro\n") case 11
39
printf("Novembro\n") case 12 printf("Dezembro\n") otherwise printf("Mês inválido\n") end
Figura16-Códigofontedoswitch
Outra formadeusaro comandoSwitch/caseé agrupandoasopçõese caso seja
umadela,ocomandoseráexecutado:
valor = input("Digite um valor:"); switch (valor) case {1, 2, 3} printf("Valor digitado foi 1, 2 ou 3\n") case {4, 5, 6} printf("Valor digitado foi 4, 5 ou 6\n") otherwise printf("Outro valor\n") end
5.6. EXERCÍCIOS
1. Osmoradores de uma localidade possuem um poço artesiano que distribui
águaparaacomunidade,acobrançaéfeitapeloconsumo,até10m3omoradorpagataxafixadeR$10,00, acimadessaquantidade,elepagaR$2,00pormetro cúbicoexcedente.Faça umprograma que receba a quantidade de litros gastos pelomorador e retorno ovalorquedeveserpago.
2. Faça um programa que leia um número inteiro e mostre uma mensagem
indicandoseépositivo,negativoouzero.
3. Crie umprograma que receba umnúmero inteiro e classifique-o empar ouímpar.Dica:a funçãomodulo(A,B)retornaorestodadivisãodonúmeroApeloB, porexemplo:modulo(5,2)iráapresentar1,enquantomodulo(6,2),apresentará0.
4. Elaboreumalgoritmoquedadaa idadedeumciclista classifique-oemumadasseguintescategorias:
InfantilA=5a7anosInfantilB=8a11anosJuvenilA=12a13anosJuvenilB=14a17anosAdultos=Maioresde18anos
40
6. VETORES E MATRIZES Vetoresematrizessãoconstruçõesespeciaisdevariáveis,sãoumagrupamentode
variáveis do mesmo tipo em que seus elementos são acessados através de índices. OOctavefoiprogramadoparalidarcomvetoresematrizesdeformaeficienteeelegante.
6.1. CRIANDO VETORES E MATRIZES
Paracriarumvetoroumatrizénecessárioconheceralgunssímbolosbásicos:
• Colchetes(“["e“]“):marcamoinícioeofimdeumamatriz;• Vírgula (“,“): separa os valores em colunas diferentes (também pode ser
utilizadooespaço(““)parasepararoselementos;• Pontoevírgula(“;”):separaosvaloresdediferenteslinhas.
Exemplosdecriaçãodevetores:
>>v1 = [1, 2, 3] % Vetor com uma linha e três colunas, elementos separados por vírgula
v1 = 1. 2. 3. >>v2 = [4 5 6] % Vetor com uma linha e três
colunas, elementos separados por espaço v2 = 4. 5. 6. >>v3 = [1; 2; 3] % Vetor com três linhas e uma
coluna v3 = 1. 2. 3.
Exemplosdecriaçãodematrizes:
41
>>m1 = [1, 2, 3; 4, 5, 6] % Matriz de 2 linhas e 3 colunas
m1 = 1 2 3 4 5 6 >>m2 = [4 5 6; 7 8 9] % Matriz de 2 linhas e 3
colunas m2 = 4 5 6 7 8 9 >>m3 = [10 11 12 % Criando uma matriz com quebra
de linhas >>13 14 15 >>16 17 18] m3 = 10 11 12 13 14 15 16 17 18
Oupode-secriarumamatrizvazia:
>>m4 = [] m4 = [](0x0)
6.2. SELECIONANDO OU ALTERANDO O VALOR DE UM ELEMENTO
Para selecionar ou alterar um elemento da matriz utilizar os índices de linha e
coluna,começandoacontarpelovalor1:
42
>>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >>A(1, 3) % Selecionar o elemento na linha 1,
coluna 3 ans = 3 >>A(2, 1) = 99 % altera o elemento da linha 2,
coluna 1 para 99 A = 1 2 3 99 5 6 7 8 9 10 11 12 13 14 15
6.3. MATRIZ E FUNÇÕES Funçõespodemrecebercomoparâmetrosdeentradavetoresematrizes:>>function y=soma2(x) >>y=x+2; >>endfunction >>A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >>res = soma2(A) res = 3 4 5 6 7 8 Outroexemplo: >>function [r1, r2]=opera(x) >>r1 = x + 2;
43
>>r2 = x – 2; >>endfunction >>A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >>[resSoma, resSub] = opera(A) resSoma = 3 4 5 6 7 8 resSub = -1 0 1 2 3 4
6.4. O OPERADOR “:”
Ooperador“:”éumoperadorcomváriasfinalidadesdentrodoOctave
6.4.1. Criando sequências de elementos No Octave, pode ser utilizado o operador “:” para criar uma sequência de
elementosnumvetor:
>>a = [1:10] a = 1 2 3 4 5 6 7 8 9 10 >>a = [1:2:10] a = 1 3 5 7 9 >>a = [2:2:10] a = 2 4 6 8 10 >>a = [2:1] % Cria uma sequência começando em 2 e
terminando em 1??
44
a = [](1x0) >>a = [2:-1:1] % Para criar uma sequência
decrescente é necessário especificar o passo com -1 a = 2 1 >>a = [10:-1:1] a =
10 9 8 7 6 5 4 3 2 1
Asintaxedeusodooperador:paraacriaçãodevetoreséoseguinte:
[A:B]CriarumasequênciaentreosnúmerosAeB,seovalordeBformaiordoqueA,ovetorcriadoévazio.
[A:X:B] Cria uma sequência começando em A, com intervalo X entre os
elementosatéovalorB,desdequeasequêncianãoultrapasseovalorB.Esse comando também pode ser utilizado para criar uma sequência
decrescente.Nessecasoovalordo incrementodevesernegativoeovalordeAdevesermaiordoqueB.
Pode-se criar vetores com linhas em cada uma como uma sequência
diferente,porémdeve-seatentaraonúmerodeelementosemcadalinhaquedeveserigual:
>>b = [1:2:10; 2:2:10] b = 1 3 5 7 9 2 4 6 8 10 >>c = [1:2:10; 2:2:10; 1:3:15] c = 1 3 5 7 9 2 4 6 8 10 1 4 7 10 13
6.4.2. Selecionando e alterando linhas, colunas ou elementos
45
Ooperador“:”podeserutilizadoparaselecionarlinhas,colunasouelementos:
>>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12] A = 1 2 3 4 5 6 7 8 9 10 11 12 >>B = A(:, 1) B = 1 4 7 10
NesseexemplofoicriadoamatrizA,depoisfoiselecionadotodasaslinhasatravés
dooperador“:”eapenasaprimeiracoluna;
>>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. >>B = A(2:4, 1) B = 4. 7. 10.
O comando pode ser utilizado para passar uma sequência de elementos, nesse
casofoiutilizadopararetornarentreaslinhase2e4apenasaprimeiracoluna
>>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. >>B = a(2:4, 1:2)
46
B = 4. 5. 7. 8. 10. 11.
Retornaaslinhas2a4eascolunas1e2.
>>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. >>B = A(1:2:5, :) B = 1. 2. 3. 7. 8. 9. 13. 14. 15.
Nesseexemplo,retornouapenasaslinhasímparescomtodasascolunas.
Ealterandoelementosdamatriz:
>>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. >>A(1, :) = 0 % altera da linha 1, todos os
elementos das colunas para 0 A = 0. 0. 0. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
47
>>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. >>A(1:2:5, :) = 0 % Altera as linhas 1, 3 e 5 de
todas as colunas com o valor 0 A = 0. 0. 0. 4. 5. 6. 0. 0. 0. 10. 11. 12. 0. 0. 0. >>A = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. >>A(1:2:5, 1:2) = 0 % Altera as linhas 1, 3 e 5,
colunas 1 e 2 com o valor 0 A = 0. 0. 3. 4. 5. 6. 0. 0. 9. 10. 11. 12. 0. 0. 15.
6.4.3. Localizando a posição de elementos (comando FIND) OcomandoFINDéutilizadoparaencontraraposição(ouposição)doselementos
quecoincidemcomapesquisa.Porexemplo,considereovetor:
48
>> X = [1 0 4 -3 0 0 0 8 6]; Eocomando>> indices = find(X == 0) indices = 2 5 6 7 Ocomando localizou todosos valores iguais a 0 (X ==0) e retornouasposições
desseselementos.Omesmoserveseovetorestiveremformadecoluna:>> X = [1; 0; 4; -3; 0; 0; 0; 8; 6]; >> indices = find(X == 0) indices = 2 5 6 7
6.5. FIND EM MATRIZES.
ParautilizerocomandoFINDemmatrizes,háalgumasdiferenças:>> X = [1 0 4; -3 0 0; 0 8 6] X = 1 0 4 -3 0 0 0 8 6 >> indices = find(X == 0) indices = 3 4 5 8
49
Nesseexemplo,ocomandoFINDretornouaposiçãolineardosvaloresiguaisa0.Aposiçãolinearédefinidapelacolunas,começandonocantosuperioresquerdo:
OsnúmerosemAzulrepresentamaposiçãodoselementos.
6.5.1. Localizando elementos em colunas/linhas de matrizes Podemos ainda procurar um elemento numa coluna ou linha especifica, nesse
caso, o comando FIND irá retornar o(s) elemento(s) na posição referente a coluna oulinha:
>> indices = find(X(:, 3) == 0) indices = 2 Nesseexemplo,ocomandoFINDiráprocuraremtodasaslinhasdacoluna3pelo
valoriguala0.
Retornandoaposição2.
6.5.2. Utilizando o valor retornado pelo FIND Aproveitandooexemploanterior,emquelocalizamosovalor0na3ªcoluna:>> indices = find(X(:, 3) == 0) indices = 2 Percebemosqueháovalor0na2ªlinhadareferidacoluna,comissovamosutilizar
essevalorpararetornaralinhatodaearmazenarnavariávelRes:>> Res = X(indices, :) Res =
50
-3 0 0 Graficamentefalando:
6.5.3. Exemplos utilizando o comando FIND VejaoutrosexemploscomousodocomandoFIND:>> indices = find(X(:, 2) == 0) indices = 1 2 Nessecaso,ocomandoFINDretornouduasocorrênciadevaloresiguaisa0,eno
momentodeselecionaraslinhas,quesãoutilizadosparaapresentaroresultado: >> Res = X(indices, :) Res = 1 0 4 -3 0 0 Oupodemosaindaquererqueeleretorneapenasa1ªocorrênciadoíndice:
>> Res = X(indices(1), :) Res = 1 0 4 Compareosdoiscasosparaentenderoquefoialterado.
6.6. OPERADORES ESPECIAS PARA INICIALIZAÇÃO DE VETORES E MATRIZES
NoOctavehácomandosespeciaisparadefinirvaloresdevetoresematrizes:
51
eye Criaumamatrizidentidadelinspace Criarumvetorlinearmenteespaçadoones Criaumvetoroumatrizcomunszeros Criaumvetoroumatrizcomzerosrand geraumamatrizcomvaloresaleatórios
6.6.1. Função eye() Afunçãoeye()criaumamatrizidentidade,queéumamatrizemqueoselementos
dadiagonalprincipalsãoiguaisa1,osoutroselementossãoiguaisa0.Exemplos:
>>id1 = eye(4, 4) id1 = 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. >>id2 = eye(4, 2) id2 = 1. 0. 0. 1. 0. 0. 0. 0. >>a = [1 2 3; 4 5 6; 7 8 9; 10 11 12] a = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. >>id = eye(a) id = 1. 0. 0. 0. 1. 0. 0. 0. 1. 0. 0. 0.
52
Asintaxedocomandoeye():
X = eye(m,n) X = eye(A)
Onde:
Ondemensãovaloresquerepresentamonúmerodelinhasecolunas.
A:umaoutraformadeconstruirumamatrizidentidade,passa-seumamatrizAeocomandoeye()constróiumamatrizidentidadecomasmesmasdimensõesdamatrizA.
6.6.1. Função linspace() Criaumvetorvetorialespaçadolinearmente.
>>linspace(1,2,11) ans = 1. 1.1 1.2 1.3 1.4 1.5 1.6
1.7 1.8 1.9 2. >>linspace(0,9,10) ans = 0. 1. 2. 3. 4. 5. 6. 7.
8. 9. >>linspace(0, 10, 5) ans = 0. 2.5 5. 7.5 10.
6.6.2. Função ones Geraumamatrizondetodososelementossãoiguaisa1 >>m1 = ones(1, 4) m1 = 1. 1. 1. 1. >>m2 = ones(3, 2) m2 =
53
1. 1. 1. 1. 1. 1. >>a = [1 2 3; 4 5 6] a = 1. 2. 3. 4. 5. 6. >>m3 = ones(a) m3 = 1. 1. 1. 1. 1. 1. Asformasdechamarafunçãoonesão:y=ones(m1,m2,...) y=ones(A) y=ones() Onde:
m1em2sãovaloresquerepresentamonúmerodeelementosemcadadimensão
A:umaoutraformadeconstruirumamatrizidentidade,passa-seumamatrizAeocomandoones()constróiumamatrizdeelementos1comasmesmasdimensõesdamatrizA.
6.6.3. Função zeros Semelhante a função ones, preenche uma matriz com os elementos iguais a 0
(zero):
>>m1 = zeros(1, 5) m1 = 0. 0. 0. 0. 0. >>m2 = zeros(3, 4) m2 = 0. 0. 0. 0. 0. 0. 0. 0.
54
0. 0. 0. 0. >>a = [1 2 3; 4 5 6; 7 8 9; 10 11 12] a = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. >>m = zeros(a) m = 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
Asintaxedafunçãozerosé:
y=zeros(m1,m2,..) y=zeros(A) y=zeros() Onde:
m1em2sãovaloresquerepresentamonúmerodeelementosemcadadimensão
A:umaoutraformadeconstruirumamatrizidentidade,passa-seumamatrizAeocomando zeros() constrói uma matriz de elementos 1 com as mesmas dimensões damatrizA.
6.6.4. Função rand Afunçãorandéutilizadaparacriarnúmerosematrizaleatórias
>>x=rand(3,3) x = 0.5667211 0.0568928 0.7279222 0.5711639 0.5595937 0.2677766 0.8160110 0.1249340 0.5465335 >>a = [1 2 3; 4 5 6]
55
a = 1. 2. 3. 4. 5. 6.
Asintaxedechamarafunçãorand:
rand(m1,m2,.. [,key]) rand(x [, key]) rand() rand(key) rand("seed" [,n]) rand("info")
Onde:
Semargumento"key",assintaxesabaixoproduzemmatrizesrandômicascomo
geradorrandômicocorrente.
rand(m1,m2)éumamatrizrandômicadedimensãom1porm2.
rand(m1,m2,..,mn)éumamatrizrandômicadedimensãom1porm2,..pormn.
rand() : sem argumentos, fornece um escalar cujo valormuda a cada vez que é
referenciado.
6.7. EXERCÍCIOS
1. Criaçãoeoperaçãodematrizes
a. Criar2matrizesAeB,comdimensões3X4.
b. CriaremCatransportadeA.
c. GerarD,somandoAeB.
d. GerarE,subtraindoBdeA.
e. GerarFcomamultiplicação,elementoaelemento,deAporB.
f. Adicionar5acadaelementodeB.
g. Apagartodasasvariáveisusadasatéestemomento.
56
2. Operaçãoemvetores:
a. GerarumvetorinteiroH,comovalorinicial6evalormáximo100,
comvariaçãoentreelementosde6.
b. GerarumvetorI,subtraindo2decadaumdosvaloresdeH.
c. Gerarumvetor J comamultiplicação,elementoaelemento,deH
porI.
3. InsiraamatrizX=[2797;3156;8425]noOctave,executeosseguintes
comandosedetalheovalorobtido
a. A=X(1,1:3)
b. B=X(1:2,1:2)
c. C=X(:,2:2:$)%Ooperador$éutilizadoparadesignarofimdasérie
d. D=X(1:2:$,:)
4. Detalheoquecadacomandoiráfazer:
a. x=[315912-10-12961]
x(x>0)=0
b. x=[315912-10-12961]
x(:,1:2:$)=2
c. x=[315912-10-12961]
y=x(x>10)
d. x=[315912-10-12961]
y=x(modulo(x,2)==0)
5. Faça:
a. Criar com a função rand a matriz realmat, de dimensões 7X5 e
multiplicá-lapor100.Depois utilizando a função int, modifique a
matrizmatdeformaquecontenhaapenasvaloresinteiros
b. Comamatrizmat obtida do itemanterior apresente a soma e o
produtodetodosseusvalores;
c. Aindasobreamatrizmatapresenteomaiorvalor,omenorvalore
amédiadosvalores
57
7. SALVANDO E RECUPERANDO DADOS EM ARQUIVO OOctavepossuidoiscomandosbásicos:saveeloadquepermitesalvarelerdados
de arquivos em vários formatos. Vale lembrar que esses comandos salvam apenas osdados,oscomandosdevemsersalvosemarquivosaparte.
7.1. SALVANDO DADOS EM ARQUIVO
Asintaxedocomandosaveéaseguinte:save [options] file [variables] Onde: Options:sãoasopçõesaceitapelocomando,asprincipaissão:
-append Adicionaonovoconteúdoaoarquivo,semdestruirosdadosanteriores-ascii Salvaosdadosnumarquivotextosimples,seminformaçõesamais-binary Salvaosdadosemformatobinário(oarquivoficamenor,masdedifícil
entendimentoseabertoporumeditordetexto)-text Salvaosdadosemformatotexto(padrão)-zip ou -z comprimeosdadoscomoalgoritimogzip
File:arquivoondeosdadosserãosalvos.Variables:podeserumaoumaisvariáveisqueterãoseuconteúdosalvono
arquivo.
7.1.1. Exemplo 1 Porexemplo,considereosseguintescomandos:>>a = [1 2 4; 6 8 4; 1 4 5];
>>save dados.txt a
Irásalvaroarquivo“dados.txt”comoseguinteconteúdo:
58
7.1.2. Exemplo 2 Seforemenviadostrêsvariáveisparaoarquivo:
>>a = [1 2 4; 6 8 4; 1 4 5]; >>b = 3.444; >>c = "texto";
>>save dados.txt a b cOarquivoresultantefica:
# Created by Octave 4.0.3, Mon Jan 22 14:20:37 2018 -02 <[email protected]>#name:a#type:matrix#rows:3#columns:3124684145
# Created by Octave 4.0.3, Mon Jan 22 14:29:30 2018 -02 <[email protected]>#name:a#type:matrix#rows:3#columns:3124684145#name:b#type:scalar3.444#name:c#type:string#elements:1#length:5texto
59
7.2. RECUPERANDO DADOS DE ARQUIVOS
Quandosequer lerosdadosdearquivo,utilizamosocomandoLoad,que temaseguintesintaxe:
load [options] file [variables]
options:Asopçõessãoparecidasasdoscomandosave:
-ascii Assumequeosdadosestãoemformatodetextosemnenhumcabeçalhoamais.
-binary Assumequeoarquivoestáemformatobinário-text Assumequeoarquivoestáemformatotexto
File:nomedoarquivoaserlido
Variables: Asvariáveisqueserãoarmazenadas
7.2.1. Exemplo 1 ParaexemplificarousodoLoad,vamospartirdoarquivo“dados.txt”criadocom
osseguintesdados:
Comopodeserobservado,osnúmerosestãoorganizadosnumamatrizde3linhaspor3colunas,dotipomatriz,comonome“AA”
Quandoexecutamosocomando:
>>load dados.txt
Serácriadoumavariávelcomonome“AA”eosdadosqueestãonoarquivo:>> AA
#name:AA#type:matrix#rows:3#columns:34561238910
60
AA = 4 5 6 1 2 3 8 9 10
7.2.2. Exemplo 2 Outroexemplo,dessavez,oarquivotemosseguintesdados:
Executandoocomando:
>>load dados.txt
Obteremosduasvariáveis:AAeBBcomosvalores:
>> AA AA = 4 5 6 1 2 3 8 9 10 >> BB BB = 11 12 13
#name:AA#type:matrix#rows:3#columns:34561238910#name:BB#type:matrix#rows:2#columns:3111213141516
61
14 15 16
7.2.3. Exemplo 3 Dessa vez, iremos querer carregar os dados de um arquivo sem a estrutura de
cabeçalho,apenasosdados:
Nessecaso,mudamosaformadeentradadocomandoload:>> a = load("dados.txt")
a = 4 5 6 1 2 3 8 9 10
Vejaqueantesdocomandoloadfoiespecificadaavariávelemqueosdadosserão
salvos.Casosejaoomitidoonomedavariável,serácriadaumacomomesmonomedoarquivo.
7.2.4. Exemplo 4 Casoseimaginequeparasalvarduasmatrizesbastacolocarumaabaixodaoutra:
Aotentarcarregarosdados,vamosapenas1matrizcomtodososvalores:>> a = load("arquivo.txt") a =
4561238910
4561238910123111213
62
4 5 6 1 2 3 8 9 10 1 2 3 11 12 13
Para recuperar duas matrizes separadas é necessário especificar os cabeçalhosparacadauma,comofeitonoexemplo2.
7.3. EXERCÍCIOS
1. Dadoalistadevaloresabaixo,crieumarquivocomessesvaloresefaçaaimportaçãonoOctave:
2. Faça um programa que leia 2 valores de um arquivo e verifique qual o
númeroémaior3. Façaumprogramaquerecebadoteclado2valoresesalveosdoisnúmeros
numarquivo.
25910111516171820
63
8. GRÁFICOS OOctavepermitecriardiversostiposdegráficosem2e3dimensões,paraisso,a
basedegráficoséconstruídaatravésdafunçãoplot.
8.1. GRÁFICOS EM 2 DIMENSÕES
Paracriarumgráfico2D,éutilizadoafunçãoplot,quenecessitadepelomenos2
parâmetros,umcomalistadevaloresdoeixoXeoutrocomosvaloresdeY:>>X = [-3:0.5:3] X = - 3. - 2.5 - 2. - 1.5 - 1. - 0.5 0. 0.5
1. 1.5 2. 2.5 3. >>Y = X.^2.-4 Y = 5. 2.25 0. - 1.75 - 3. - 3.75 - 4. - 3.75
- 3. - 1.75 0. 2.25 5. >>plot(X, Y) Eoresultado:
64
8.1.1. Inserindo título e ajustando eixos OOctavepermitequesecrietítuloseadicionerótulosnoseixosdosgráficos.Os
comandos:• title():adicionaumtítulonapartesuperiordográfico;• xlabel():adicionaumrótulonoeixodasabscissas;• ylabel():adicionaumrótulonoeixodasordenadas.
Adicionandoessescamposaoexemploanterior:>>X = [-3:0.5:3] X = - 3. - 2.5 - 2. - 1.5 - 1. - 0.5 0. 0.5
1. 1.5 2. 2.5 3. >>Y = X.^2.-4 Y = 5. 2.25 0. - 1.75 - 3. - 3.75 - 4. - 3.75
- 3. - 1.75 0. 2.25 5. >>plot(X, Y); >>xlabel("Valores de X"); >>ylabel("Valores de Y"); >>title("Teste de plotagem");
65
Podemos personalizar melhor o gráfico passando certos parâmetros para as
funçõesxlabel,ylabeletitle:Porexemplo:>>xlabel("Valores de X", "fontsize", 16); >>ylabel("Valores de Y", "fontsize", 16); >>title("Teste de plotagem","fontsize", 20);
Iráreproduziroseguintegráfico:
66
Algumaspropriedadesquepodemseralteradassão:
• “fontname”:Defineafonte,ovalorpassadodeveserumastring• “fontsize”:Defineotamanhodafonte.Ocomandoesperaumvalornumérico,
padrão10.Aunidadedemedidaédefinidapelocomandofontunits• “fontunits”:Defineaunidadedemedidadafonte,aceitaumasdasopções
"centimeters","inches","normalized","pixels","points".Opadrãoé"points".• “fontweight”:espessuradafonte,éaceitaumasdasopções:"bold","demi",
"light","normal",opadrãoé"normal".• “horizontalalignment”:defineoalinhamentohorizontal,osvaloresaceitossão:
"center","left","right",opadrãoé"left".• “verticalalignment”,definieoalinhamentovertical,valoresaceitos:"baseline",
"bottom","cap","middle”,"top".Opadrãoé"middle”.• “rotation”:Definearotaçãodotexto,ovaloraceitodevesernoformatonumérico
eémedidoemgraus• “color”:Acordotexto,ovaloraceitoéumacoreminglêsnoformatostring
Esseparâmetrospodemserpassadosnamesmalinhadeconfiguração.
Vejaoexemplo:
67
>>X = [-3:0.5:3]; >>Y = X.^2.-4; >>plot(X, Y); >>xlabel("Valores de X", "fontsize", 12, "color", "red",
"verticalalignment", "top" ); >>ylabel("Valores de Y", "fontsize", 12, "fontname",
"Courier", "fontweight", "demi", "rotation", 0 ); >>title("Teste de plotagem","fontsize", 20, "color",
"red");
Eoresultado:
8.1.2. Adicionando legenda Paraadicionarlegendasusa-seocomando:Legend( strings [,"location",pos][,"orientation", orient
][, opções ] ) onde:
• strings:ostextosqueirãoaparecernalegenda• "location":essecomandoéopcional,defineaposiçãodalegenda,casoseja
utilizado,oargumentoposdeveserumdesses:
68
pos Localizaçãodalegendanorth Topocentrosouth Baixocentroeast Centrodireitawest Centroesquerda
northeast Topodireita(padrão)northwest TopoEsquerdasoutheast Baixodireitasouthwest Baixoesquerdaoutside Podeseradicionadoaofinaldaposição,paracolocaracaixada
legendaforadaáreadográfico.Porexemplo“eastoutside”
• “orientation”:comandoopcional,defineaorientadaçãodalegenda,sefor
utilizado,ovalordeorientdeveser"vertical"(padrão)ou"horizontal".Vejaumexemplo:
>>legend("Valor de x", "location", "east", "orientation", "vertical");
AindaocomandoLegendpodeserexecutado,apenascomumdosargumentos:
69
"show" Mostraalegendanoplot"hide" Ocultaalegendanoplot"toggle" Alteraomodoentre"hide"e"show"(seestiveroculto,
exibeoploteseestiverexibindo,oculta)"boxon" Mostraumacaixaaoredordalegenda(padrão)
"boxoff" Ocultaumacaixaaoredordalegenda.
"right" Posicionaorótulodetexonoladodireitodofigura(padrão)
"left" Posicionaorótulodetexonoladoesquerdodofigura
"off" Apagaalegenda.
8.1.3. Outros parâmetros do gráfico Algunsoutroscomandosinteressanteparaaconfiguraçãodográfico:
8.1.3.1. Mudando a cor do fundo
AcordefundodajanelagráficadoOctaveébrancaporpadrão.Épossívelmudá-laatravésdocomando:
set( gca() , "color" , cor )Onde:gca()retornacomoparâmetroomanipuladordeeixosdajanelagráficacorrente,Oparâmetrocordeveserumacoreminglês
8.1.3.2. Linhas de grade
Aslinhasdegradepodeseradicionadasatravésdocomando:grid comaopções:
70
• on• off• minor• minoron• minoroff
Porexemplo:>>grid on
Iráproduziroseguintegráfico:
Pode-seaindainserirogridmenor:>>grid minor on
71
Paraajustaracordogrid,precisamosespecificaracoratravésdocomando:>> set(gca(), "xcolor", cor) >> set(gca(), "ycolor", cor) Porexemplo,parasetaracorverdeparaoeixoXeazulparaoY:>> set(gca(), "xcolor", "green") >> set(gca(), "ycolor", "blue")
72
73
9. COMANDOS DE REPETIÇÃO Utilizamos os comandos de repetição quando desejamos que um determinado
conjuntodeinstruçõesoucomandossejamexecutadosumnúmerodefinidoouindefinidodevezes,ouenquantoumdeterminadoestadoprevalecerouatéquesejaalcançado.
Essetipodeestruturaémuitoimportanteemprogramação,eseuusoéconstantenasdisciplinasdeprogramação.
Basicamenteumlaçoderepetiçãoécompostoportrêspartes:
1. Inicialização2. Verificaçãodacondição.3. Incremento/decremento
Nodiagramaaseguirsãoapresentasastrêspartes:
i <= 10
Sim
Não
i = i + 1
i = 0
Fim
2
3
1
i = 0 while i < 10 i = i + 1 end
Figura17-PartesdeumlaçoderepetiçãoQuanto ao formato da repetição, são basicamente três os formatos aceitos em
Octave:• Enquantox,processar(While...Loop);• Para...Até...Seguinte(For...To...Next).
9.1. ENQUANTO X, PROCESSAR (WHILE... LOOP).
Neste caso, o bloco de operações será executado enquanto a condição x forverdadeira. O teste da condição será sempre realizado antes de qualquer operação.Enquantoacondiçãoforverdadeiraoprocessoserepete.Podemosutilizaressaestruturaparatrabalharmoscomcontadores.
74
Emdiagramadeblocoaestruturaéaseguinte:
Figura18-DiagramaWhile
Exemplodecontador:
i <= 10Sim
Não
i = i + 1
i = 0
Fim
i
i = 0; while i < 10 i = i + 1; printf("%d\n", i); end
Figura19-LaçoWhile
9.2. PARA... ATÉ... SEGUINTE (FOR... TO... NEXT).
A construção do Laço For, em diagrama émuito semelhante com o laçoWhile,porémousodeleémaisabrangenteeflexível,vejaalgunsexemplos:
for i=1:10 printf("%d\n", i) end
75
Outroexemplo,dessavez,oforiráinteragirnumalista:a = [1,3,2,4]; for i=a disp(i); end
Nesseexemplo,avariávelaéumalistacom4elementos.Oforinteragesobrecada
objeto,imprimindoumdecadavez.
9.3. CASOS PRÁTICOS COM REPETIÇÃO
Para melhor ilustrar o uso dos laços de repetição iremos apresentar alguns
exemplospráticos:
9.3.1. Exemplo 01 - Somando os valores Atividade:Criarumprogramaparasomarosnnúmerospares.PartimosdolaçoderepetiçãojáapresentandoWhile:
i <= 10Sim
Não
i = i + 1
i = 0
Fim
i
i = 0; while i < 10 i = i + 1; end
Figura20-LaçoWhileComonãosabemosovalorden,iremoscriarumavariávelparaela,especificarum
valoreutilizarovalordencomolimitedolaçoderepetição.
76
i <= n
Sim
Não
i = i + 1
Fim
i
i = 0
n
i = 0; n = input("Digite o maior valor:"); while i <= n i = i + 1; printf("%d\n", i) end
Figura21-ModificaçõesnolaçobásicoSe for digitado o valor 5 (utilizaremos esse valor para o restante do exemplo)
perceba que o programa irá contar de 1 a 6, não coincidindo como esperado que eracontaraté5,pararesolverisso,vamosretirarosinalde“=”dacomparação.
A atividade proposta é somar os números pares, desconsiderando o 0 (zero) oprogramadeverealizaraseguinteconta:
Total = 2 + 4 + 6 + 8 + 10 Total = 30
Antesderealizarasoma,vamosapresentaressesvalores,comonossoprogramaapresentaosnúmerosde1a5,paraapresentarosvaloresparesbastamultiplicarmosovalordeipor2:
77
i < n
Sim
Não
i = i + 1
n = 5
Fim
i * 2
i = 0
i = 0; n = input("Digite o maior valor:"); while i < n i = i + 1; valor = i * 2; printf("%d\n", valor); end
Figura22-Imprimindovalorespares
Porenquantoapenasalteramosovalormostrado.
Agoravamoscriarumavariáveltemporáriaqueiráarmazenarparacadapassodolaçoodobrodovalordeievamosdeslocaroprintfparaofinal:
i < n
Sim
Não
i = i + 1
total = 0
Fim
n = 5
i = 0
total
total = total + (i * 2)
i = 0; n = input("Digite o maior valor:"); total = 0; while i < n i = i + 1; total = total + (i * 2) end printf("Valor final: %d\n", total)
Executando passo-a-passo a repetição se desdobra na seguinte forma (note que
apósocálculo,oresultadoéarmazenadoemtotal):
78
Etapa VariávelTotal
Variáveli Cálculoefetuado
1ᵒ 0 1 0+(1*2)= 22ᵒ 2 2 2+(2*2)= 63ᵒ 6 3 6+(3*2)= 124ᵒ 12 4 12+(4*2)= 205ᵒ 20 5 20+(5*2)= 30
Saída 30 Matematicamentefalandoafórmuladonossoexemploé:
𝑇𝑜𝑡𝑎𝑙 = 𝑖 ∗ 2!
! ! !
9.3.2. Exemplo 02 – Verificando os divisores. Atividade:Dadoumnúmeron,verificarentre2en–1quaissãoseusdivisores.ParafacilitararesoluçãovamospartirutilizandoolaçoderepetiçãoWhile:
i < n
Sim
Não
i = i + 1
Fim
n = 27
i = 0
i
i = 0; n = 27; total = 0; while i < n i = i + 1; printf("%d\n", i) end
Figura23-LaçoWhile
79
Comonãoprecisamososnúmero1eon,vamosfazerumamodificaçãonaordemdo conteúdo doWhile, começamos por imprimir o número n (com isso, apresentará ovalorden–1)einiciamosovalordei=2:
i < n
Sim
Não
i = i + 1
Fim
n = 27
i = 2
i
i = 2; n = 27; total = 0; while i < n printf("%d\n", i) i = i + 1; end
Figura24-ModificaçõesnolaçoWhile
Agora, iremos verificar se o valor de n pode ser dividido por i e a saída, caso
positivo:
i < n
Sim
Não
i = i + 1
Fim
n = 27
i = 0
n % i == 0
O número é divisível por i
Sim
Fim
Não
Figura25-Diagramadoprograma
80
i = 2; n = 27; total = 0; while i < n if mod(n, i) == 0 printf("O número %d é divisível por %i\n", n, i); end i = i + 1; end
Figura26-Código-fonte
9.4. EXERCÍCIOS
1) Apresente o total da soma obtido dos cem primeiros números inteiros(1+2...+99+100).
2) Faça um programa que a partir de dois números imprima os números do
intervaloexcluindoosvaloresdados.
3) Crieumprogramaquedadoumnúmeroeleimprimaatabuadadessenúmerode1a10.
4) Façaumprogramaque conte de 1 a 100 e a cadamúltiplo de 10 emita umamensagem:“Múltiplode10”.
5) Escrevaummétodoquerecebedoisnúmerosreaisaeberetornaasomadetodososnúmerosparesexistentesentreessesdois
6) Utilizandorepetição,calculeofatorialdeumnúmero.Lembre-sequeofatorialde0é1e,nãoexistefatorialdenúmerosnegativos.