Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Informá(caparaasCiênciaseEngenhariasVersão:C
(EngenhariaCivil)Aula5
PedroBarahona2016/17
Sumário
• CiclosWHILE.• IntroduçãoàsredesdecomputadoreseàInternet.• ObtençãodedadosdaInternetusandoMatlab.• Strings
§ Relaçãocomosvetores.§ Funçõessobrestrings.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 2
ProblemadoDiscoEstragado
• AsnotasdaavaliaçãoconYnuadosalunosde ICEestavamguardadasnumcomputadorcujodiscoavariou.Dainformaçãoqueseconseguiurecuperarob(vemosumamatriz,emquecada linhatemonºdeumalunoeanotadeumadasprovasdaavaliaçãoconYnuarealizadapeloaluno.
• Façaumprogramaquesinte(zeonúmerodenotasquetemosdecadaaluno. Por cada aluno que ocorra namatriz de entrada, deve obterumalinhacomonºdoalunoeonºdeprovasdaavaliaçãoconYnuadequetemosnota.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 3
Resolução–Problema[1]
1. Compreendertotalmenteoproblema.• Exemplodematrizesdeentradaedesaída:
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 4
Entrada
Saída
Resolução–Problema[2]
2. Caracterizaroproblema.
•Problema:contaronúmerodenotasporaluno.
•Entrada: matrizMcomduascolunas.
•Saída: matrizH,comduascolunas.
Porcadanúmerodis(ntonacoluna1deM,háumalinhaemHcomessenúmeroeoseunºdeocorrênciasnacoluna1deM.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 5
Resolução–Problema[3]
3. Generalizaroproblema(semprequeforpossível).• Quer-secalcularohistogramadacoluna1deM• SejaVovetorcomacoluna1deM:V=M(:,1);
•Problema:Histogramadeelementosdeumvetor.
•Entrada: vetorV.
•Saída: MatrizH,com2colunas.Porcadaelementodis(ntodeV,háumalinhaemHcomoelementoeonºdeocorrênciasdoelementoemV.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 6
Resolução–Algoritmo[1]
4. Desenharoalgoritmopararesolveroproblema.a) Conceberoalgoritmo,decompondooproblemaemsub-problemas.• ComocalcularohistogramadeV?
§ Cria-seamatrizHcoma1ªocorrência:H=[V(1),1]§ ParacadaelementoeldeV,excetooprimeiro:
« SejáháumalinhalinemHtalqueH(lin,1)==el,incrementa-seH(lin,2)emumaunidade;
« Senão,
acrescenta-seumanovalinhaemHcom[el,1].
• Problema:ProcurarelemH(:,1)
Procurar el em H(:,1)
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 7
Resolução–Algoritmo[2]
4. Desenharoalgoritmopararesolveroproblema.b) Iden(ficar,caracterizaregeneralizarcadasub-problema.
•Problema:Pesquisadeumelemento(numacolunadeumamatriz).
•Entrada: matrizM,inteirocol,elementoel.
•Saída: Seeles(vernacolunacoldeM,• asaídaéa(menor)linhalintalqueM(lin,col)contemel;
nocasocontrário,• asaídaézero.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 8
Resolução–Algoritmo[3]
4. Desenharoalgoritmopararesolveroproblema.b) Iden(ficar,caracterizaregeneralizarcadasub-problema.
•Problema:Pesquisadeumelemento(numvetor).
•Entrada: vetorV,elementoel.
•Saída: Seeles(veremV,• asaídaéa(menor)posiçãodeVquecontemel;
nocasocontrário,• asaídaézero.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 9
Resolução–Algoritmo[4]
4. Desenharoalgoritmopararesolveroproblema.c) Conceber o algoritmo, assumindo que os sub-problemas estão
resolvidos.Histograma(V):
§ Hß[V(1),1];§ ParacadaelementoeldeV,excetooprimeiro:
linhaçPesquisaelna“coluna1deH”Selinha≥1,
H(linha,2)çH(linha,2)+1;senão,
Hç[H;el,1]%acrescentaaHumalinhacom[el,1]
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 10
Resolução–Algoritmo[5]
5. Paracadasub-problema,desenharoalgoritmoparaoresolver.PesquisaemVdoelementoel:• ParadescobrirseelestáemV,ésemprenecessáriopercorrertodasas
posiçõesdeV?§ SeelestáemV,quandoéqueseconhecea(menor)posiçãodeel
emV?§ SeelnãoestáemV,quandoéqueseconcluiqueelnãoestáem
V?
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 11
Exemplo:Pesquisaem[3,9,5]
Exemplo:Pesquisade5queexisteem[3,9,5]• posç1;V(pos)≠5?Sim.Con(nua...• posç2;V(pos)≠5?Sim.Con(nua...• posç3;V(pos)≠5?Não.Portanto,V(pos)==5.
Emgeral:• QuandoelestáemV:
posç1EnquantoV(pos)≠elfaça-se posçpos+1
§ Nofim:decertezaqueV(pos)contemel.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 12
Exemplo:Pesquisaem[3,9,5]
Exemplo:Pesquisade7quenãoexisteem[3,9,5]posç1;V(pos)≠7?Sim.Con(nua...posç2;V(pos)≠7?Sim.Con(nua...posç3;V(pos)≠7?Sim.Con(nua...posç4;NãosepodeacederaV(pos);7nãoestáemV.
Emgeral:• Quandoel“estáounãoestá”emV:
posç1Enquantopos≤length(V)&&V(pos)≠elfaça-se posçpos+1§ Nofim: sepos≤length(V),decertezaqueV(pos)contémel;
sepos>length(V),decertezaqueVnãocontémel.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 13
Resolução–Algoritmo[6]
AlgoritmogeralparaPesquisaemV,doelementoel:posç1Enquantopos≤length(V)&&V(pos)≠elfaça-se posçpos+1Sepos≤length(V)então
%poséa(menor)posiçãodeVquetemel. resultadoçpossenão
%NenhumaposiçãodeVtemel. resultadoç0
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 14
Resolução–Programa
6. Para cada sub-problema (começando pelos mais simples),implementarorespe(voalgoritmoetestaro“sub-programa”.§ Pesquisa(V,el)
7. Implementar o algoritmo que resolve o problema e testar oprogramapedido.§ Histograma(V)
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 15
Implementação–Quequestões?
1. Como é que se pode executar umbloco de instruções umnúmeroarbitráriodevezes,dependendoessenúmerodaavaliação(repe(da)deumacondição?§ Noproblema:enquanto...faça-se....§ Resposta:comciclosWHILE
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 16
Sumário
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 17
• CiclosWHILE.• IntroduçãoàsredesdecomputadoreseàInternet.• ObtençãodedadosdaInternetusandoMatlab.• Strings
§ Relaçãocomosvetores.§ Funçõessobrestrings.
CicloWHILE
Operacionalmente:1. Acondiçãoéavaliada.
§ Se for verdadeira, executam-se as instruções e volta-se aopontodepar(da(while).
§ (Seforfalsa,nãosefazmaisnada.Terminaowhile.)
18
Sintaxe:
whilecondição instruçõesend
Exemplo:whilesemáforosestávermelhoaguardeend
Resolução–Programa[1]
• Podemos agora implementar a função pesquisa que resolve o sub-problemaencontrado.§ Começamospelasuadocumentação
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 19
function res = pesquisa(elemento, vetor)!% res = pesquisa(elemento, vetor)!% Se o elemento estiver no vetor,!% retorna a menor posicao do vetor que tem o elemento;!% no caso contrario, !% retorna 0 ! ... !end!
Resolução–Programa[2]
• Eagoraoseucódigo.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 20
function res = pesquisa(elemento, vetor)!% ...! pos = 1;
while pos <= length(vetor) && vetor(pos) ~= elemento
pos = pos + 1;
end
if pos <= length(vetor) % vetor(pos) == elemento.
res = pos;
else
res = 0; % O elemento nao ocorre no vetor.
end
end
Resolução–Programa[3]
• Quedevesertestado
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 21
>> V = [9 3 9 5];!>> pesquisa(3,V) % sem “;” - ecoa para o terminal !pos = 1!pos = 2!res = 2!ans = 2!>> pesquisa(7,V)!pos = 1!pos = 2!pos = 3!pos = 4!pos = 5!res = 0!ans = 0!>> p = pesquisa(9,V) % com “;” – nao ecoa para o terminal !p = 1!>>!
Resolução–Programa[4]
• Umavezimplementadaafunçãopesquisaqueresolveosub-problemaencontrado, passamos à função “principal” para cálculo dohistograma.§ Começamospelasuadocumentação
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 22
function hist = histograma( V )!% hist = histograma( V )!% Produz o histograma da sequencia V especificada.!% A matriz hist tem uma linha por cada elemento !% diferente de V, com o elemento na coluna 1 e !% o numero de ocorrencias do elemento em V na coluna 2.! ... !end!
Resolução–Programa[5]
• Eagoraoseucódigo.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 23
function hist = histograma( V ) % ...
hist = [ V(1), 1 ];
for i = 2 : length(V)
linha = pesquisa( V(i) , hist( : , 1) );
if linha >= 1 % Encontrou V(i) nesta linha.
% Incrementa o contador dessa linha.
hist(linha, 2) = hist(linha, 2) + 1;
else % V(i) ainda nao existe no histograma.
% Cria uma nova linha com o contador a 1.
hist = [ hist ; V(i), 1];
end
end end
Resolução–Programa[6]
• Quedevesertestado
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 24
>> V = [50123,15.1;! 50788, 9.9;! ...! 50401,11.9];!>> h = histograma(V) % com eco / sem ; !hist = 50123 1!hist = 50123 1! 50788 1!hist = 50123 1! 50788 1! 50401 1!hist = 50123 2! 50788 1! 50401 1!...!h = 50123 4! 50788 2! 50401 3!>>!!
Sumário
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 25
• CiclosWHILE.• IntroduçãoàsredesdecomputadoreseàInternet.• ObtençãodedadosdaInternetusandoMatlab.• Strings
§ Relaçãocomosvetores.§ Funçõessobrestrings.
Rede de computadores
• Umconjuntodecomputadoresqueestãointerligadoscomoobje(vodetrocarinformaçãoepar(lharrecursos.
Umarededecomputadoreséumainfra-estruturadetrocademensagensentreoscomputadoresquelheestãoligados,permi(ndooacessoarecursosremotoseau(lizaçãodeaplicações
distribuídas
Rede!Computador!
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 26
Numatransferênciaintervêmdoiscomputadoresearede
• Doiscomputadores§ Nóemissor:produzumasequênciadebytes(mensagem).§ Nórecetoroudes(natário:recebeessasequênciadebytes.
• Rede§ Meiosdeinterligação:cabos,atmosfera,…§ Equipamentos dedicados a assegurar que a mensagem é
transportadadonóemissoraonórecetor.
Rededecomputadores
UnidadeCentraldeProcessamento(CPU)
Memóriacentral
Eletrónicadecontrolodarede
UnidadeCentraldeProcessamento(CPU)
Memóriacentral
Eletrónicadecontrolodarede
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 27
Tiposderedes
• Redelocal(LAN,LocalAreaNetwork)§ Os computadores estão ligados diretamente, i.e., cada um pode
enviarbytesdiretamenteaqualqueroutro.§ Distânciaentrecomputadores(picamentemenorque1km.
• Rededelargaescala(WAN,WideAreaNetwork)§ O emissor e o des(natário estão em redes locais dis(ntas e é
precisoencaminharosbytesatravésdeequipamentoespecializado(routersegateways),capazdeescolheras ligaçõesquepermitemchegaraodes(no.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 28
Pacotes
• Comoéqueosbytesenviadospeloemissor chegamaodes(natário,quepodeestaramuitosmilharesdeKms?
• Cadacomputadortemumendereço.
• A informação é dividida em pacotes (sequências de bytes) e cadapacotetemoendereçododes(natário.
• Os pacotes são encaminhados individualmente pela rede da origematéaodes(no.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 29
Interligação de redes: exemplo
• Exemplo:§ 2LANsligadaspor3encaminhadores(routers)
Router
Router
Nó Nó
Nó
Rede Local 1
Nó Nó
Nó
Rede Local 2
Router
Ligação via satélite
Ligação fibra ótica
Ligação cabo
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 30
Interneteoencaminhamentodepacotes
• A Internetéuma interligaçãode redes locaisdeacordocomnormaspróprias.
• NaInternettodososcomputadores(ounós)têmumendereçoúnico(normalmente um número com 32 bits) chamado endereço IP(InternetProtocol).
• Quandoumacomputadoremiteumpacotedes(nadoaoutro,noutraLAN,entrega-oaoroutermaispróximo(queestánasuaredelocal).
• Osrouterspropagamopacoteatéestechegaraorouterdaredelocaldocomputadordedes(no,queentregaopacoteaodes(natário.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 31
Nº de máquinas na Internet
• EstecrescimentoémuitoinfluenciadopelosucessodaWeb.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 32
Computadoresa(vosnaInternet:distribuiçãogeográfica
ProjectoCarnaBotnet,2012
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 33
Endereçosdosnós
• EndereçoIPdonó(numérico/machinefriendly)§ Cons(tuídopor4bytes(32bits)
« representadopor4númerosentre0e255,separadosporpontos.
§ Iden(ficaunivocamenteocomputadornaInternet.§ Usadonoencaminhamentodasmensagensnarede.§ Exemplo:193.136.122.33
• Endereçosimbólicodonó(cadeiadecaracteres/userfriendly)§ Sãoaquelesnomesqueou(lizadorusa.§ Exemplo:www.google.com
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 34
Nomedonó
asc.di.fct.unl.pt
top-level domain (TLD)
organização nome da máquina
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 35
Domain Name System (DNS)
• Serviço de conversão de nomes “user friendly” em nomes “machine friendly”. § EsteserviçoresidenumnódaLAN(oudofornecedordeInternet).
• Invocado quando um nó tenta obter o endereço IP correspondente a um dado nome simbólico.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 36
TLDs do Domain Name System [1]
Top-LevelDomain U(lização biz Negócios com Comercial(EUA) edu Educação(EUA) info Informação gov Governo(EUA) mil Militar(EUA) net Rede org Semfinslucra(vos
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 37
• NasorganizaçõesnosEstadosUnidosotop-leveldomaincaracterizaoseu(podea(vidade.
TLDs do Domain Name System [2]
• As organizações com sede fora dos Estados Unidos usam um top-leveldomainqueéocódigodopaís(com2letras).
País TLD pt Portugal uk ReinoUnido es Espanha fr França nz NovaZelândia cn China … …
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 38
Árvore de domínios do DNS
Domínioraiz
Top-level domains …
… edu gov com uk pt
cmu
cs
google ibm up unl
fe fct
di
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 39
Relaçãocliente-servidor
• Na maioria das situações, as aplicações que usam a rede sãocons(tuídaspordoisprogramas.
• Um servidor pode servir vários clientes em simultâneo.
Porexemplo,Browser
Porexemplo,ServidorWeb
ProgramaCliente
ProgramaServidor
1. Cliente envia pedido
3. Servidor envia a resposta
Recurso
2. Servidor processa o pedido 4. Cliente
processa a resposta
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 40
Exemplosdeservidores
• ServidorWeb§ Recursos:ficheiroseprogramas.§ Serviços: obter ficheiros e gerar páginas dinâmicas executando
programasapedidodocliente.
• ServidordeMail§ Recurso:ficheiroscommensagens.§ Serviços: armazena mensagens ou encaminha-as para outros
servidoresdeMail.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 41
Exemplosdeclientes
• ClienteWeb§ Firefox,§ InternetExplorer,§ Safari,§ etc.
• ClientedeMail§ eMClient,§ MozillaThunderbird,§ OperaMail,§ Mail,§ LiveMail,etc.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 42
Protocolosdeaplicação
• Conjuntoderegrasquedefinemcomoéqueosbytesquecirculamnaredesãointerpretados.§ Oclienteeoservidortêmdeacordarpreviamenteosformatosdo
pedidoedaresposta;§ ExistemnormasparaimensosserviçosnaInternet.
• Exemplos:§ Protocolos Internet para consultar o DNS e obter o endereço IP
paraumnome;§ Protocolosdeaplicaçõesdeemail(SMTP);§ ProtocolosdeWeb(HTTP).
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 43
WWW−WorldWideWeb[1]
• PáginaWeb§ Um documento que contém informação (dados ou referências a
outrosdados).
• Link(hiper-ligação)§ Umaligação(referência)aoutrapáginaWeb.
• ProtocolodaWeb§ Protocolosdeaplicaçãoquepermitematrocadeinformaçãoentre
ocliente(browser)eoservidorWeb.§ HTTP-HyperTextTransferProtocol
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 44
WWW−WorldWideWeb[2]
• SiteWeb§ Conjunto de páginas Web relacionadas umas com as outras.
Fisicamente, correspondem a ficheiros armazenados numcomputadorespecífico.
• ServidorWeb-servidor§ Programaqueexecutanocomputadoremquea informaçãoestá
alojadaerespondeapedidosparaacessoapáginasWeb.
• BrowserWeb-cliente§ Programa que pede páginas Web pela rede aos servidores e as
mostraaou(lizador.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 45
URL−UniformResourceLocator
• UmaformanormalizadadeespecificaralocalizaçãodeumapáginaWeb.§ Protocolo(podeseromi(do);§ Nomedocomputador;§ Página.
• Osconteúdosiden(ficadospelosURLssãodediferentes(pos.§ Exemplos:ficheirosHTML,imagens,audioclips.
http://asc.di.fct.unl.pt/index.html
Protocolo Computador Nome DNS ou endereço IP: x.x.x.x
Página
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 46
HTML
• HyperTextMarkupLanguage(HTML)§ AlinguagemusadaparadescrevereformatarumapáginaWeb.§ Incluindocolocarimagenselinksnaspáginas
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 47
<h2id="center">Exercício1</h2><p>Recupereoscript<ahref="file_contaminacao.m">file_contaminacao.m</a>daaulaanterior,queaoserexecutadocriaavariável<b>contaminacao</b>,queregistaaconcentraçãodechumbonosoloemváriospontosequecontem:,<ol><li>naprimeiralinha,umnúmerode1a20,queiden(ficaopontodeamostragem;<li>nasegundalinha,aprofundidadedecadaamostra(emcm);e,<li>naterceiralinha,aconcentraçãodePb,empartespormilhão.</ol>
Sumário
• CiclosWHILE.• IntroduçãoàsredesdecomputadoreseàInternet.• ObtençãodedadosdaInternetusandoMatlab.• Strings
§ Relaçãocomosvetores.§ Funçõessobrestrings.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 48
Matlab–Funçãourlread
• Como é que se pode aceder ao conteúdo associado a um URL emMatlab?
[conteúdo,sucesso]=urlread(url)
• AfunçãourlreadacedeaoURLurleretorna:§ nastringconteúdooconteúdoob(do;§ nointeirosucessoovalortrue(1),seaoperaçãotevesucesso,ouo
valorfalse(0),seaoperaçãonãotevesucesso.
Afunçãoretornaduasen(dades.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 49
Matlab–Funçãourlwrite
• Comoéquesepode,emMatlab,transferirumficheirolocalparaumficheiroassociadoaumURL?
[nomeCompl,sucesso]=urlwrite(url,fichLocal)
• AfunçãourlwriteacedeaoURLurleguardaoconteúdoob(donumficheirolocalcomonomefichLocal.Retorna:
• nastringnomeComplonomecompletodoficheirolocal;• no inteiro sucessoovalor true (1), seaoperação teve sucesso,ouo
valorfalse(0),seaoperaçãonãotevesucesso.Afunçãoretornaduasen(dades.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 50
Exemplo
• ResolveroproblemainicialdasnotasdeICE,masagoraasnotasestãoagoradisponíveisnumficheirodetextonumsitecomURL:
http://site.example.com/ice/notas.txt!
• Este contém em cada linha o número de um aluno, número daavaliaçãoeanota(semelhanteàtabelainicial)
• Dispomosdasoluçãoanterior:function hist = histograma( V )!
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 51
Exemplo-Algoritmo
• Algoritmo:§ Obterasnotasdosite
« O uso de urlread pemite atribuir o texto a uma variável donossoprograma
§ Converternumamatrizsemelhanteàdoproblemainicial« Comoconverterotextonumamatrizdenúmeros?
§ Usarafunçãohistogramaanteriorpararesolveroproblema
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 52
Sumário
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 53
• CiclosWHILE.• IntroduçãoàsredesdecomputadoreseàInternet.• ObtençãodedadosdaInternetusandoMatlab.• Strings
§ Relaçãocomosvetores.§ Funçõessobrestrings.
Sumário
• CiclosWHILE.• IntroduçãoàsredesdecomputadoreseàInternet.• ObtençãodedadosdaInternetusandoMatlab.• Strings
§ Relaçãocomosvetores.§ Funçõessobrestrings.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 54
String–sequênciadecaracteres
• Umastringéumasequênciadecaracteres.• EmMatlab,
§ escreve-seasequênciadecaracteresentreaspasouplicas.
• Umcarácteré representadoporumnúmero, chamadoo códigodocarácter.
• UmadascodificaçõesdecaracteresmaisusadaséacodificaçãoASCII(AmericanStandardCodeforInforma(onInterchange).§ Outrascodificações:ISO8859eUnicode/UTF.
>> string = “Estudante na FCT/NOVA.”
string = Estudante na FCT/NOVA.
>>
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 55
Codificação ASCII
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 56
Caracteres de controlo, como o LF - mudança de linha, em MATLAB ‘\n’, iniciam-se no código 01 e vão até ao código 31
Dígitos
Caracteres de pontuação
Minúsculas
Maiúsculas
String–Vetordecaracteres
• Umastringéumvetordecaracteres.• EmMatlab,umastringéimplementadacomoumvetorde(códigos
de)caracteres.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 57
>> str = “Estudante na FCT/NOVA.” string = Estudante na FCT/NOVA. >> str(3) ans = t >> str(11:end) ans = na FCT/NOVA >> 1*str(11:end) % ???? 110 97 32 70 67 84 47 78 79 86 65 >> toascii(“n”) ans = 110 >>
• Stringspodemser“concatenadas”damesmaformaquevetores,jáquestringssãodefactovetoresdecaracteres.
• No entanto a concatenação pode igualmente ser feita com a funçãopre-definidastrcat.
Concatenaçãodestrings[1]
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 58
>> s1 = “esta string”; >> s2 = “vai crescer”; >> [s1, s2] ans = esta stringvai crescer >> s = [s1, “ “, s2] s = esta string vai crescer >> t = strcat(s1, “ “, s2) s = esta string vai crescer >>
Concatenaçãodestrings[2]
Exemplo:• Construir a sequência de 3 nomes (URLs), todos referentes a
ficheiros texto (extensão “.txt”), par(lhando a mesma base ediferindoapenasnoseu“número”§ h�p://ex.com/dados1.txt,
§ h�p://ex.com/dados2.txt,§ h�p://ex.com/dados3.txt.
>> base = ’http://ex.com/dados’; >> for num = 1:3 url = [base, num2str(num), ’.txt’] end url = http://ex.com/dados1.txt url = http://ex.com/dados2.txt url = http://ex.com/dados3.txt >> >>3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 59
Strings–Funçõespré-definidas[1]
• valorLógico=strcmp(str1,str2)§ Retorna:
« trueseasstringsstr1estr2sãoiguais;« false,nocasocontrário.
• valorLógico=strcmpi(str1,str2)§ Retorna:
« true se as strings str1 e str2 são iguais, ignorando as diferençasentremaiúsculaseminúsculas;
« false,nocasocontrário.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 60
>> strcmp(‘fct/UNL’, ‘FCT/unl’) ans = 0 >> strcmpi(‘fct/UNL’, ‘FCT/unl’) ans = 1 >>
Strings–Funçõespré-definidas[2]
• str2=toupper(str1)§ str2 é ob(da de str1, subs(tuindo todas as minúsculas pelas
correspondentesmaiúsculas.• str2=tolower(str1)
§ str2 é ob(da de str1, subs(tuindo todas as minúsculas pelascorrespondentesmaiúsculas.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 61
>> tolower(‘fct/UNL’) ans = fct/unl >> strcmp(‘fct/UNL’, ‘FCT/unl’) ans = 0 >> strcmp(toupper(‘fct/UNL’), toupper(‘FCT/unl’)) ans = 1 >> strcmp(toupper(‘fct/UNL’), toupper(‘FCT/unl’)) ans = 1 >>
Strings–Funçõespré-definidas[3]
Outrasfunçõespré-definidas,quesãobastanteu(lizadas• vetor=findstr(str1,str2)
§ SejamsMaioramaislongadasstringsstr1estr2esMenoramaiscurtadasstringsstr1estr2.
§ AfunçãoretornaasposiçõesnovetorsMaioremquecomeçaumasubstringigualasMenor.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 62
>> findstr(‘Universidade’, ‘i’)) ans = [3,8] >> findstr(‘a’, ‘abababa’) ans = [1, 3, 5,7] >> findstr(‘aba’, ‘abababa’) ans = [1, 3, 5] >>
Strings–Funçõespré-definidas[4]
• vetor=findstr(str1,str2,overlap)§ Seoverlap=true(≠0),
« retornaomesmoquefindstr(str1,str2).
§ Seoverlap=false(0),« assubstringsnãopar(lhamposiçõesemsMaior.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 63
>> findstr(‘a’, ‘abababa’, true) ans = [1, 3, 5,7] >> findstr(‘aba’, ‘abababa’, false) ans = [1, 5] >>
Strings–Funçõespré-definidas[5]
• Númerose strings representandonúmeros sãoen(dadesdiferentesenãodevemserconfundidos!
• Masexistemfunçõespré-definidasquepermitemasuaconversãonúmero = str2num( string ) string = num2str( numero )
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 64
>> n = str2num(“1.234”) % conversão para um numero “simples”!n = 1.234!>> v = str2num(“ 1 2,3, 4”) % conversão para um vetor!v = 1 2 3 4 !>> m = ‘ 1 2 3 ; 4 5 6 ‘ % conversão para uma matriz!m = 1 2 3 ! 4 5 6!>> m = “ 1 2 3 \n 4 5 6 “ % linhas separadas por \n (só com aspas)!m = 1 2 3 ! 4 5 6!>> s = num2str(2.5) ! !% conversão para uma string!s = 2.5!>> 1*s ! ! ! ! ! !% s é uma string !!!!ans = 50 46 53! !!>>!!
Strings–Funçõespré-definidas[6]
• Várias funções estão predefinidas para se poder saber qual o (po decaracteresqueasstringscontêm.
• Naturalmente, esses (pos podem ser ob(dos dos códigos ASCII doscaracteresu(lizados.§ Nota:umastringéimplementadacomoumvetorde(códigosdecaracteres)§ Asoperaçõessobrevetorespodemserusadasemstrings.
§ Mas existem algumas funções pré-definidas para obter esses (pos de umaformaindependentedocódigousado.3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 65
>> s = "Linha: 1;\n”;!s = Linha: 1!!>> k = length(s)!k = 10!>> 1*s!ans = 76 105 110 104 97 58 32 49 59 10!% L i n h a : _ 1 ; \n!>> isascii(s)!ans = 1 1 1 1 1 1 1 1 1 1!>>!
Strings–Funçõespré-definidas[6]
• Exemplos:
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 66
>> s = "Linha: 1;\n”;!>> 1*s!ans = 76 105 110 104 97 58 32 49 59 10!% L i n h a : _ 1 ; \n !>> isalpha(s)!ans = 1 1 1 1 1 0 0 0 0 0!>> isupper(s)!ans = 1 0 0 0 0 0 0 0 0 0!>> islower(s)!ans = 0 1 1 1 1 0 0 0 0 0!>> isalnum(s)!ans = 1 1 1 1 1 0 0 1 0 0!>> isdigit(s)!ans = 0 0 0 0 0 0 0 1 0 0!>> ispunct(s)!ans = 0 0 0 0 0 1 0 0 1 0!>> isspace(s)!ans = 0 0 0 0 0 0 1 0 0 1!>> iscntrl(s)!ans = 0 0 0 0 0 0 0 0 0 1!>>!
Exemplo
• Resolver o problema inicial das notas de ICE, mas agora as notas estãoagoradisponíveisnumficheirodetextonumsitecomURL:
http://icec.ssdi.di.fct.unl.pt/1617/teoricas/T05/tabela_notas.txt!
!
• Algoritmo:§ Obterasnotasdosite
« Usarurlreadparaatribuirotextoaumavariáveldonossoprograma
§ Converterotextonumamatrizsemelhanteàdoproblemainicial« Usarafunçãostr2numparaconverterotextonumamatrizdenúmeros.
§ Usarafunçãohistogramaanteriorpararesolveroproblema
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 67
Exemplo-Implementação
• Nestascondições,eassumindoqueoficheironourl temumatabeladenotasnumficheirotextoadequadamenteformatadas,oproblemaresolve-secomafunção
function sintese = notasDaRede(url) % sintese = notasDaRede( url ) % obtem o histograma das notas por aluno, % obtidas do url indicado. % Faz uso da funcao histograma anterior [texto, estado] = urlread( url );
%vamos assumir que estado == 1 notas = str2num( texto ); sintese = histograma( notas( : , 1) );
end
50123 15.150788 9.950401 12.750123 14.350123 17.050401 13.550123 10.450788 15.650401 11.9
<url>
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 68
Desafiopropostonº1
• Implementar uma função que, dada uma string, devolve uma stringcomosmesmoscaracteresmaspelaordeminversa.
• Exemplos:§ Afunçãoretorna‘ECI’quandochamadacom‘ICE’.§ Afunçãoretorna‘LNU-TCF’quandochamadacom‘FCT-UNL’
• Nota:Sendoumastringumvetor,afunçãoqueimplementarmosdevefuncionar quer para strings quer para quaisquer outros vetores,nomeadamentenuméricos.
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 69
Ideiabase:• Preencheranovastring(s2)comoscaracteresdastringoriginal(s1),com
asseguintescorrespondênciasdeíndices
• oudeumaformagenérica,
70
1 ← n 2 ← n-1 … n-1 ← 2 n ← 1
i ← n-i+1
Inversãodeumastring
Inversãodeumastring
• Uma vez compreendida a correspondência a função pode serimplementadacomumcicloFOR
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 71
function inv = inverteString( str ) % inv = inverteString(str) % Devolve uma string com os mesmos caracteres % de str mas % pela ordem inversa. inv = str; % Reserva espaco.
n = length(str); for i = 1 : n inv(i) = str(n – i + 1); end end
i ← n-i+1
• Algunstestes
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 72
>> s1 = “abcd”!s1 = abcd!>> s2 = inverteString(s2)!s2 = dcba!>> s3 = ‘esta string tem 29 caracteres’!s3 = ‘esta string tem 29 caracteres’!>> inverteString(s1)!ans = seretcarac 92 met gnirts atse!>> s4 = “”;!>> s5 = inverteString(s4)!s5 =!>> v = [1,2,3,4,5]!>> u = inverteString(v) % a funcao é generica (qualquer vetor)!u = 5 4 3 2 1!>> z = []!z = [](0x0)!>> w = inverteString(z)!w = [](0x0)!>>!!!
Inversãodeumastring
Desafiopropostonº2
• Implementarumafunçãoque,dadaumastringstr,retornaumastringcomoscaracteresdis(ntosqueaparecememstr§ Nota:Eliminarosrepe(dos.
function res = diferentes( vetor )
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 73
>> diferentes(”xpto1234”)!ans = xpto1234!>> diferentes(”abcacb1551”)!ans = abc15!>> !!
Funçãodiferentes
function res = diferentes( vetor )Algoritmo
• Ovetorrescomeçavazio:
• Procurarcadacaracter,vetor(i),noresatual.§ Senãooencontra,acrescenta-o.
• Paraprocurarumcaracteremresusarafunçãopesquisa,jádefinida.pos = pesquisa( vetor(i), res) § Senãoencontraretornapos=0
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 74
• Oalgoritmopodeserimplementadomuito“diretamente”
Funçãodiferentes
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 75
function res = diferentes( str ) % res = diferentes( str ) % Devolve a string str sem caracteres repetidos res = []; % O vetor res começa vazio % para todos os caracteres
for i = 1 : length(str) % se o caracter ainda não apareceu em res if pesquisa(str(i), res) == 0 % acrescenta-se ao res res = [res, str(i)] end
end end
Desafiopropostonº3
• DadaafunçãoF:
• Indiqueovalordavariávelnomeapósaexecuçãodoseguintecomandono
interpretador:nome=F('hVp://www.abc.edu/geology/tectonics.html','/');
• Resposta:‘tectonics.html’
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 76
function res = F( endereco, separador ) pos = length(endereco); while pos > 0 && endereco(pos) ~= separador pos = pos − 1; end res = endereco(pos + 1 : length(endereco)); end
Desafiopropostonº4
• Implementar uma função que, dadas duas strings str1 e str2, ascomparalexicograficamente(ordenadascomo“numdicionário”)e§ retorna1seastr1forlexicograficamenteanteriorastr2§ retorna0seastr1forigualàstr2§ retorna-1seastr2forlexicograficamenteanterioràstr1
function res = strbef( str1, str2 )
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 77
>> strbef(”maria”, “rita”)!ans = 1!>> strbef(”maria”, “maria”)!ans = 0!>> strbef(”mariana”, “maria”)!ans = -1!>>!!!
Funçãostrbef[1]
• Começamos pela documentação da função e da inicialização devariáveisauxiliares
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 78
function res = strbef( str1, str2 ) % res = lexico( str1, str2 ) % Retorna o valor da comparacao lexicografica % das strings str1 e str2 % 1: se str1 < str2; 0 se str1 = str2 ; -1 se str1 > str2 ...
end
Funçãostrbef[2]
• Depoisverifica-seseasstringsdiferemnumcaracter§ Malseencontreessecaracteradecisãoétomada§ Sóvaleapenatestaratéaoúl(mocaracterdastringmaiscurta
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 79
function res = lexico( str1, str2 ) % ... i = 1; % i e’ o caracter que se vai comparando decidido = 0; % booleano que indica se ja’ se sabe o resultado n = min(length(str1),length(str2)); % so’ se comparam as strigs ate´ao n-e´simo caracter while ! decidido && i <= n if str1(i) < str2(i) decidido = 1; res = +1; elseif str2(i) < str1(i) decidido = 1; res = -1; end i = i + 1; end ... end
Funçãostrbef[3]
• Senãosedecidiuatéaocomprimentodastringmaiscurta,então§ Astringmaiscurtaestá“antes”daoutra
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 80
function res = lexico( str1, str2 ) % ... ... % se ainda nao ha´ decisao, tem de se avaliar % nesse caso temos i = n + 1 % nesta altura i = n+1 if ! Decidido if length(str2) >= I % se str2 tem mais de n caracteres res = +1 % str1 e´ anterior elseif length(str1) >= i % se str1 tem mais de n caracteres res = -1 % str2 e´ anterior else res = 0 end end
Desafiopropostonº5
• Implementarumafunçãoque,dadasduasstrings,retorna1(true)seas strings forem iguais e retorna 0 (false) no caso contrário, masconsiderandoqueocarácter‘?’representaumcaracterqualquer.
function res = my_strcmp(str1, str2) !
• Sugestão:Semelhante(masmaissimples)queoexemploanterior
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 81
>> my_strcmp(”xpto123”, “xpto123”)!ans = 1!>> my_strcmp(”xpto???”, “????123”)!ans = 1!>> my_strcmp(”123???”, “???45”)!ans = 0!>>!!
• PhysicalModelinginMATLAB
• Capítulo4
• ConsultaromanualOctave
• Strings(3.1.1e5)
• While(10.3)
ParaestudarestaAula
3Abril2017 5:CiclosWHILE;RedeseInternet;Strings 82