Está en la página 1de 36

Facultad Politécnica, UNA

Departamento de Informática

Algoritmo (Homóloga)
Prof. #######

CADENAS

Desarrollado por Docentes del Área de Algoritmos


1
OBJETIVOS
• Comprender la importancia de la manipulación de cadenas a la hora
de resolver problemas algoritmos.
• Conocer la sintaxis para la representación y uso de cadenas dentro del
lenguaje SL.
• Conocer y usar las funciones predefinidas del SL para la manipulación
de cadenas.
• Analizar algunos programas de manipulación de cadenas escritos en
el lenguaje SL.
2
Situación 1
Pedro escribe cartas todos los días. A continuación un segmento de su
escrito:
Los funcionarios de la enbajada estarán
disponibles a partir del lunes para atender a
los ciudadanos. Las líneas telefónicas están
disponibles para cualquier consulta. Las citas
agendadas prebiamente serán tenidas en cuenta.

3
Situación 1
Pedro escribe cartas todos los días. A continuación un segmento de su
escrito:
Los funcionarios de la enbajada estarán
disponibles a partir del lunes para atender a
los ciudadanos. Las líneas telefónicas están
disponibles para cualquier consulta. Las citas
agendadas prebiamente serán tenidas en cuenta.

¿Hay algún problema con el texto?


4
Situación 2
Una empresa tiene el listado de los clientes:
RUC Nombre
5247852-8 Claudio Morel
42578367-5 Patricia Cantero
1235748-3 Fernando Cano

Se sabe que el número antes del guión representa el número de cédula


del cliente y la empresa necesita obtenerlos.

5
Situación 2
Una empresa tiene el listado de los clientes:
RUC Nombre
5247852-8 Claudio Morel
42578367-5 Patricia Cantero
1235748-3 Fernando Cano

Se sabe que el número antes del guión representa el número de cédula


del cliente y la empresa necesita obtenerlos.

¿Qué se puede hacer? 6


Situación 2
Una empresa tiene el listado de los clientes:
RUC Nombre
5247852-8 Claudio Morel
42578367-5 Patricia Cantero
1235748-3 Fernando Cano

Se sabe que el número antes del guión representa el número de cédula


del cliente y la empresa necesita obtenerlos.
¿Podemos escribir programas que nos ayuden en las situaciones planteadas? 7
Uso de cadenas

¿Qué problemas algorítmicos podemos resolver manipulando cadenas?

8
Uso de cadenas

¿Qué problemas algorítmicos podemos resolver manipulando cadenas?

¿Qué operaciones necesitamos para manipular cadenas?

9
Operaciones con cadenas
• Asignación: consiste en asignar una cadena a otra.
• Concatenación: consiste en unir dos cadenas o más para formar una
cadena de mayor tamaño.
• Búsqueda: consiste en localizar dentro de una cadena una subcadena
más pequeña.
• Extracción: se trata de sacar de una cadena una porción de la misma.
• Comparación: consiste en comparar dos cadenas.

10
Recapitulando…

11
¿Qué es una cadena?
• Es una secuencia finita de caracteres encerrada entre apóstrofos o
dobles comillas.

"Cadena 1" o 'Cadena 2'

• Cada carácter de la cadena está definido dentro del juego de


caracteres usado por la computadora.

12
Juego de caracteres
• Las computadoras solo entienden código binario (basado en dos
dígitos, 0 y 1)
• Los lenguajes de programación utilizan juegos de caracteres para
comunicarse con las computadoras.

13
Tabla ASCII (American Standard Code for Information Interchange)
Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex
0 00 NUL 16 10 DLE 32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p
1 01 SOH 17 11 DC1 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q
2 02 STX 18 12 DC2 34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r
3 03 ETX 19 13 DC3 35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s
4 04 EOT 20 14 DC4 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t
5 05 ENQ 21 15 NAK 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u
6 06 ACK 22 16 SYN 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v
7 07 BEL 23 17 ETB 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w
8 08 BS 24 18 CAN 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x
9 09 HT 25 19 EM 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y
10 0A LF 26 1A SUB 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z
11 0B VT 27 1B ESC 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B {
12 0C FF 28 1C FS 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C |
13 0D CR 29 1D GS 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D }
14 0E SO 30 1E RS 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~
15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F DEL

14
Tabla ASCII (American Standard Code for Information Interchange)
Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex
0 00 NUL 16 10 DLE 32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p
1 01 SOH 17 11 DC1 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q
2
3
¿Cómo se entiende esto?
02 STX 18 12 DC2 34 22 " 50 32 2 66 42 B 82 52 R
03 ETX 19 13 DC3 35 23 # 51 33 3 67 43 C 83 53 S
98
99
62 b
63 c
114
115
72 r
73 s
4 04 EOT 20 14 DC4 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t
5 05 ENQ 21 15 NAK 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u
6 06 ACK 22 16 SYN 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v
7 07 BEL 23 17 ETB 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w
8 08 BS 24 18 CAN 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x
9 09 HT 25 19 EM 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y
10 0A LF 26 1A SUB 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z
11 0B VT 27 1B ESC 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B {
12 0C FF 28 1C FS 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C |
13 0D CR 29 1D GS 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D }
14 0E SO 30 1E RS 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~
15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F DEL

15
Tabla ASCII (American Standard Code for Information Interchange)
Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex
0 00 NUL 16 10 DEL
DLE 32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p
1 01 SOH 17 11 DC1 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q
2 02 STX 18 12 DC2 34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r
3 03 ETX 19 13 DC3 35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s
4 04 EOT 20 14 DC4 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t
5 05 ENQ 21 15 NAK 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u
6 06 ACK 22 16 SYN 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v
7 07 BEL 23 17 ETB 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w
8 08 BS 24 18 CAN 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x
9 09 HT 25 19 EM 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y
10 0A LF 26 1A SUB 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z
11 0B VT 27 1B ESC 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B {
12 0C FF 28 1C FS 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C |
13 0D CR 29 1D GS 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D }
14 0E SO 30 1E RS 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~
15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F DEL

Caracteres de control: tienen nombres. En SL se representan con \ . NUL = carácter


nulo, BS=BackSpace, LF=Salto de línea, CR=Retorno de carro, etc. 16
Tabla ASCII (American Standard Code for Information Interchange)
Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex
0 00 NUL 16 10 DEL
DLE 32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p
1 01 SOH 17 11 DC1 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q
2 02 STX 18 12 DC2 34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r
3 03 ETX 19 13 DC3 35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s
4 04 EOT 20 14 DC4 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t
5 05 ENQ 21 15 NAK 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u
6 06 ACK 22 16 SYN 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v
7 07 BEL 23 17 ETB 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w
8 08 BS 24 18 CAN 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x
9 09 HT 25 19 EM 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y
10 0A LF 26 1A SUB 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z
11 0B VT 27 1B ESC 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B {
12 0C FF 28 1C FS 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C |
13 0D CR 29 1D GS 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D }
14 0E SO 30 1E RS 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~
15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F DEL

Caracteres imprimibles: las letras del alfabeto inglés, números, caracteres


especiales. 17
Codificación de caracteres

Codificación
Mensaje ASCII Mensaje Codificado (en binario)
"HOLA" 01001000 01001111 01001100 01000001
H=72 O=79 L=76 A=65

18
Codificación de caracteres

Codificación
Mensaje ASCII Mensaje Codificado (en binario)
"HOLA" 01001000 01001111 01001100 01000001
H=72 O=79 L=76 A=65

• En SL, la codificación utilizada es ASCII.


• Cada carácter requiere 1 byte u 8 bits. ASCII establece el uso de 7
bits (128 caracteres). El resto (los 128 caracteres restantes) se
denomina ASCII-Extendido, que varia de acuerdo al idioma.
19
Cadenas en SL
• Tipo de dato primitivo en SL.
• La longitud de la cadena es dinámica, autoajustándose de acuerdo al
contenido.

20
Uso de cadenas en SL
var
s1 : cadena
s2 : cadena = "Chau"
s3 = “\tHola\n"
s4 : cadena
inicio
s1 = "Algoritmo"

21
Uso de cadenas en SL Por defecto, las cadenas
Se inicializan como vacías
""
var
s1
s1 : cadena
A l g o r i t m o
s2 : cadena = "Chau"
s3 = “\tHola\n"
s2
s4 : cadena C h a u
inicio
s1 = "Algoritmo"
s3
\t H o l a \n
\t: Es el carácter tabulador (no imprimible)
\n : Es el carácter de fin de línea s4
22
Acceso a cada caracter
var
s : cadena
k : numerico
inicio
s = "Algoritmo"

desde k=1 hasta strlen(s) {


imprimir(s[k],"\n")
}

fin

23
Acceso a cada caracter
var
s : cadena
k : numerico
inicio
strlen(<id>): Retorna la longitud de la cadena
s = "Algoritmo"

desde k=1 hasta strlen(s) {


imprimir(s[k],"\n")
}

fin

Acceso a cada caracter como un vector

24
Acceso a cada caracter 1 2 3 4 5 6 7 8 9

A l g o r i t m o
var
s : cadena strlen(s) => 9
k : numerico
inicio
s = "Algoritmo" Impresión
k s[k]
desde k=1 hasta strlen(s) { -------------
imprimir(s[k],"\n") 1 "A"
} 2 "l"
3 "g"
fin 4 "o"
5 "r"
6 "i"
7 "t"
8 "m"
9 "o" 25
Operaciones con cadenas en SL
Comparación

• Las cadenas en SL pueden compararse los operadores relacionales


(==, <>, >=, <=, > y < ).
• La comparación es caracter a caracter de la misma posición.
• Una cadena es mayor si la representación ASCII del caracter es mayor.

26
Operaciones con cadenas en SL
Comparación

• Las cadenas en SL pueden compararse los operadores relacionales


(==, <>, >=, <=, > y < ).
• La comparación es caracter a caracter de la misma posición.
• Una cadena es mayor si la representación ASCII del caracter es mayor.

“A” (65) < “B” (66) < “C” (67) < “D” (68) < .. < “Z” (90) <
.. < “a” (97) < … < “z”(122)
27
Operaciones con cadenas en SL
Concatenación

• Toma dos cadenas s1 y s2 y genera una tercera cadena que contiene


todos los caracteres de la primera cadena seguida de todos los
caracteres de la segunda.

28
Operaciones con cadenas en SL
Concatenación

s3, s1, s2 : cadena


s3 = s1 + s2

"Algoritmo" + " es fácil“ "Algoritmo es fácil"

29
Funciones predefinidas en SL
Función Retorna
ascii ( pos: numerico ) retorna cadena El carácter ASCII que se encuentra en la posición pos de la tabla.
lower (s : cadena ) numerico cadena Los caracteres alfabéticos de s convertidos a minúsculas.
ord (c : cadena ) retorna numerico La posición en que se encuentra en la tabla ASCII el carácter c
pos (s1, s2:cadena; p : numerico) La posición donde se inicia la cadena s2 dentro de s1 considerando
retorna numerico desde el carácter de s1 que se encuentra en p. Si p inicial es omitido,
se considera desde el inicio de s1. Si s2 no se encuentra en s1, retorna
0.
str (n,a, cant_dec:numerico; r:cadena) La representación cadena del número n, con cant_dec decimales (por
retorna cadena defecto 2), con un ancho total de a caracteres (por defecto 0) y, si
fuera necesario, rellenando a la izquierda con el carácter contenido en
r (por defecto un espacio).
30
Funciones predefinidas en SL
Función Retorna
strdup (s:cadena; cant: Replica la cadena s , cant veces
numerico)retorna cadena
strlen ( s: cadena) retorna numerico Retorna la cantidad de caracteres contenidos en la cadena s. La
cadena vacía ('') tiene longitud 0.
substr (s: cadena; inicio, cant: Extrae una subcadena de s, a partir del carácter que se encuentra en
numerico) retorna cadena inicio, cant caracteres. Si el parámetro cant se omite, se extrae hasta
el final de la cadena.
upper (s: cadena) retorna cadena Los caracteres alfabéticos de s convertidos a mayúsculas.
El valor numérico de lo que contiene s. Retorna 0 cuando lo que
val (s: cadena) retorna numerico contiene s no puede ser interpretado como un valor numérico.

31
Manipulando cadenas en SL
Problema

Leer una cadena S e imprimirla toda en mayúsculas. Utilizar la


propiedad de posicionamiento en la tabla ASCII de los caracteres. (
ascii() y ord()).

32
Manipulando cadenas en SL
Solución (1)
1 var
2 s : cadena
3 k : numerico
4 inicio
5 leer(s)
6
7 desde k=1 hasta strlen(s) {
8 si ( s[k] >= "a" and s[k] <= "z") {
9 s[k] = ascii( ord(s[k])-ord("a")+ord("A"))
10 }
11 }
12
13 imprimir(s)
14 33
15 fin
Manipulando cadenas en SL
Desafío

Leer una cadena S e imprimirla toda en mayúsculas. Utilizar la


propiedad de posicionamiento en la tabla ASCII de los caracteres. (
ascii() y ord()).

Tener en cuenta acentos y la ñ


Ejemplos:
árbol -> ÁRBOL
ñandú -> ÑANDÚ
Luego convertir en una subrutina 34
Manipulando cadenas en SL
Solución (2)
const
sMin = "áéíóúñ"
sMay = "ÁÉÍÓÚÑ"
var
s : cadena
k : numerico
p : numerico
inicio
cls()
imprimir("Introducir una cadena:")
leer(s)
imprimir("\nPasado de mayúsculas:",
aMayuscula(s))
35
fin
Manipulando cadenas en SL
Solución (2)
sub aMayuscula ( s : cadena ) retorna cadena
var
p,k : numerico
inicio
desde k=1 hasta strlen(s) {
si ( s[k] >= "a" and s[k] <= "z") {
s[k] = ascii( ord(s[k])- ord("a")+ord("A"))
sino
p = pos(sMin,s[k]) // Busco si existe un carácter especial
si ( p > 0 ) { // Si existe un carácter especial p > 0
s[k] = substr(sMay,p,1) // Reemplazo
}
}
}
retorna s 36
fin

También podría gustarte