Diferenças entre edições de "Strings, Horas e Datas"
(→Exercício) |
(→Exercício) |
||
Linha 127: | Linha 127: | ||
# Pegue numa frase, contendo espaços, maiúsculas e minúsculas e verifique se é um [http://pt.wikipedia.org/wiki/Pal%C3%ADndromo palíndromo]. Use, por exemplo, a frase: '''"A base do teto desaba"''' | # Pegue numa frase, contendo espaços, maiúsculas e minúsculas e verifique se é um [http://pt.wikipedia.org/wiki/Pal%C3%ADndromo palíndromo]. Use, por exemplo, a frase: '''"A base do teto desaba"''' | ||
+ | # Dado o nome completo de uma pessoa, calcule o apelido. Ou seja, aplique uma composição de funções a um nome de maneira a ficar só com o apelido. | ||
{| class="collapsible collapsed wikitable" | {| class="collapsible collapsed wikitable" | ||
Linha 148: | Linha 149: | ||
>> all(fraselimpa == fliplr(fraselimpa)) | >> all(fraselimpa == fliplr(fraselimpa)) | ||
ans = 1 | ans = 1 | ||
+ | </syntaxhighlight> | ||
+ | |- | ||
+ | | 2 | ||
+ | | Apelido: do último espaço até ao fim | ||
+ | | <syntaxhighlight>>> nome = 'Jorge Gustavo Rocha' | ||
+ | nome = Jorge Gustavo Rocha | ||
+ | >> nome(find(isspace(nome))(end):end) | ||
+ | ans = Rocha | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} |
Revisão das 00h58min de 9 de outubro de 2013
Em Octave, podem-se representar e manipular strings, isto é, cadeias de caracteres.
Constantes
Uma string consiste numa sequência de caracteres. Um string pode ser declarada usando " (aspas) ou ' (pelicas).
Exemplo:
"asterix"
'asterix'
Como há carateres especiais como o newline (para indicar o fim de linha), nas strings delimitadas por aspas, é necessário usar o caracter especial '\' para indicar os caracteres especiais. Por exemplo:
octave:30> x = "Os Lusíadas\nLuís Vaz de Camões" x = Os Lusíadas Luís Vaz de Camões
As aspas podem ser inseridas usando o '\'. Exemplo:
octave:31> x = "Os \"Patrícios\""
x = Os "Patrícios"
Alternativamente, a string anterior podia ser introduzida com ', sem necessidade de usar o '\' para indicar os caracteres especiais.
octave:32> x = 'Os "Patrícios"' x = Os "Patrícios"
Nas sequências delimitadas por ', o único caracter especial é a própria '. Para escrever uma string com ', usa-se:
octave:33> x = 'Vitorino d''Almeida' x = Vitorino d'Almeida
Representação interna de strings
Cara caracter é internamente representado por um código. A função toascii devolve o código do(s) caracter(es).
octave:35> toascii('asterix') ans = 97 115 116 101 114 105 120
Significa que o caracter 'a' é representado internamente pelo número 97, o 's' pelo número 115 e assim sucessivamente.
Inversamente, a função char devolve o caracter correspondente a um determinado código.
octave:38> char(97) ans = a
Uma string é representada internamente como um vetor. Ou seja, a string 'bruno' é representada internamente como o vetor:
[98, 114, 117, 110, 111]
Usando a função whos comprova-se que a variável x é um vetor com a dimensão 1x5.
octave:54> x = 'bruno' x = bruno octave:55> whos Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== x 1x5 5 char Total is 5 elements using 5 bytes
Assim sendo, utilizando as funções toascii e char podemos apresentar a string ora com os respetivos códigos, ora com os caracteres.
octave:49> x = 'bruno' x = bruno octave:50> y = toascii(x) y = 98 114 117 110 111 octave:51> z = char(y) z = bruno
Exercício
- Pegue numa string e converta-a numa mensagem secreta, adicionando 3 ao código de cada letra da mensagem.
- Pegue numa string e escreva-a ao contrário.
- Pegue numa string e verifique se é um palíndromo. Veja a lista de palíndromos.
Soluções dos exercícios | Resumo | Resposta |
---|---|---|
1 | mensagem secreta | x = bruno >> char(x+3) ans = euxqr |
2 | Escrever string ao contrário | >> x = 'diana' x = diana >> fliplr(x) ans = anaid |
3 | É palíndromo? | >> f = 'sopapos' f = sopapos >> f == fliplr(f) ans = 1 1 1 1 1 1 1 >> all(f == fliplr(f)) ans = 1 |
Exercício
- Pegue numa frase, contendo espaços, maiúsculas e minúsculas e verifique se é um palíndromo. Use, por exemplo, a frase: "A base do teto desaba"
- Dado o nome completo de uma pessoa, calcule o apelido. Ou seja, aplique uma composição de funções a um nome de maneira a ficar só com o apelido.
Soluções dos exercícios | Resumo | Resposta |
---|---|---|
1 | Filtrar os espaços e passar tudo para minúsculas | >> frase = 'A base do teto desaba' frase = A base do teto desaba >> fliplr(frase) ans = abased otet od esab A >> frase(frase != ' ') ans = Abasedotetodesaba >> lower(frase(frase != ' ')) ans = abasedotetodesaba >> fraselimpa = lower(frase(frase != ' ')) fraselimpa = abasedotetodesaba >> all(fraselimpa == fliplr(fraselimpa)) ans = 1 |
2 | Apelido: do último espaço até ao fim | >> nome = 'Jorge Gustavo Rocha' nome = Jorge Gustavo Rocha >> nome(find(isspace(nome))(end):end) ans = Rocha |