Anda di halaman 1dari 2

Algoritmos II – 2010.

Prof. : Pablo Greenwood

Cadena: es una secuencia de caracteres encerrados entre comillas o apóstrofes. Es un tipo de dato
primitivo o básico de SL.

Puede incluirse cualquier caracter ASCII dentro de la cadena.


Puede incluirse también secuencias de escape para indicar retorno de carro (\n), tabulador(\t)

La longitud de la cadena crece dinámicamente, es decir no hace falta “dimensionar”.

Una cadena vacía es aquella que no tiene ningun caracter. Esto es “”.
Por defecto en SL , las cadenas son inicializadas como vacías.

Cuando dos cadenas aparecen como operandos de un operador relacional, cada caracter de la primera
cadena es comparado con el caracter que se encuentra en la segunda cadena en la misma posición desde la
izquierda. Se usan los pesos en la tabla ASCII para la comparación así “A” < “B” < “C” < “D”.

Una operación especial con cadenas es la denominada “concatenación”. El operador de concatenación esta
representado por el operador + (más). La concatenación consiste en tomar dos cadenas y generar una
tercera que contiene todos los caracteres de la primera cadena seguidos de los de la segunda.

Para más información consulte al libro “Introducción al lenguaje SL”.

Funciones predefinidas en el uso de cadenas

Función Retorna
ascii ( pos: numerico ) retorna cadena El carácter ASCII que se encuentra en la posición pos
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 defecto 2),
retorna cadena 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).
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 inicio, cant
numerico) retorna cadena 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.
val (s: cadena) retorna numerico El valor numérico de lo que contiene s. Retorna 0 cuando lo que contiene s no
puede ser interpretado como un valor numérico.
Algoritmos II – 2010.
Prof. : Pablo Greenwood.

Ejercicios

1. Hacer un programa que lea cuatro variables del tipo cadena y las concatene en una quinta cadena en orden ascendente. Luego imprimir la
quinta cadena. Cada cadena debe estar separada por un “#”
Ejemplo: dada las cadena : “HOLA”, “QUE TAL”, “ABUELO”, “BUENO”
La quinta cadena seria: “ABUELO#BUENO#HOLA#QUE TAL”

2. Leer N cadenas como máximo e imprimir la cadena más larga encontrada entre las N (o menos) leídas. N se lee al principio del proceso. Si
el usuario no quiere introducir más cadenas entonces debe escribir “terminar” de cualquier forma (en mayusculas, minúsculas o
combinación).

3. Leer una serie de cadenas e imprimir el promedio de longitudes de las cadenas leídas. La serie se termina de leer cuando la cadena
introducida es “FIN” (no tenerla en cuenta para el conteo).

4. Leer una cadena S e imprimir la cantidad de caracteres alfabeticos en minúsculas que existen ( 'a' – 'z'), la cantidad de caracteres
alfabéticos en mayúsculas ('A'-'Z'), la cantidad de dígitos ('0'-'9') y la cantidad de otros caracteres.

5. Leer una cadena S e imprimir el carácter que más repite. Si existen varios imprimir el primero que se encuentra.

6. Convertir un número en base 10 a base N donde N esta entre 10 y 20.

7. Escribir una función que reciba como parámetro dos cadenas. Debe retornar cuantas veces la primera cadena se repite en la segunda
cadena.

Ejemplos:
repeticion_cad( 'uno', 'unodosunodosuno uno dos tres') --> retornaria 4
repeticion_cad('hola', 'hola esto es una prueba de como se repite hola') -- > retornaria 2
repeticion_cad('hola', 'una prueba') -- > retornaria 0

8. Escribir una función que reciba como parámetro un caracter C, una cadena S y un número P por referencia . Retorna la longitud de la
secuencia mas larga de C que se repite en S. Si C tiene mas de un caracter retornar -1. Si C no se encuentra en S retornar 0. En P se debe
colocar la posicion donde empieza dentro de S la secuencia más larga. Si existen varias secuencias “mas largas” colocar en P la posición
de la primera.

Definición de la función:
subrutina sec_mas_larga( c, s : cadena; ref p : numerico) retorna numerico

Ejemplo:
sec_mas_larga( 'C', 'CCDDDCCCCEEEE', P) -> retornaria 4 y en P se colocaria 6
sec_mas_larga( 'D', 'CCDDDCCCCEEEE', P) -> retornaria 3 y en P se colocaria 3
sec_mas_larga( 'E', 'CCDDDCCCCEEEE', P) -> retornaria 4 y en P se colocaria 10
sec_mas_larga( 'F', 'CCDDDCCCCEEEE', P) -> retornaria 0 y en P se colocaria 0
sec_mas_larga( 'EX', 'CCDDDCCCCEEEE', P) -> retornaria -1 y en P se colocaria

9. Leer las cadenas SC1, SC2 y S. Reemplazar la subcadena SC1 en S por la subcadena SC2. Luego de resolver hacerlo como un función
que retorne la cadena S modificada.

10. Leer un número entero positivo, convertirlo a hexadecimal e imprimir la mitad derecha de sus dígitos hexadecimales seguido de la mitad
izquierda.

Si al convertido a hexadecimal, el número tiene una cantidad impar de dígitos, agregar un '0' como el primer dígito de la izquierda.

Ejemplos:
En decimal En hexadecimal Imprimir
123 7B B7
9378 24A2 A224
1764 6E4 -> 06E4 E406

OBSERVACIONES
• NO se pueden usar vectores ni matrices pues no existe límite en cuanto a la cantidad de dígitos del número.
• En hexadecimal, los dígitos son del '0' al '9' y de 'A' a 'F' (A es 10, B es 11, etc.)

11. Leer una cadena S que representa un número romano (menor o igual a 1000). Verificar si el mismo contiene solo caracteres que puede ser
números romanos en caso contrario imprimir un mensaje. Los símbolos usados son I,V,X,L,C,D,M.

12. Leer una cadena S que representa un número romano menor a 1000 y convertirlo a su equivalente decimal.
Si la cadena no representa un número romano válido entonces imprimir “Cadena no puede representar un número romano”.
Los símbolos usados son:
I=1, V=5, X=10, L=50, C=100, D=500, M=1000
Reglas:
• Si a la derecha de una cifra colocamos otra igual o menor, el valor de la primera queda aumentado con el de la segunda.
• Si a la izquierda de una cifra colocamos otra menor, el valor de esta se resta a la anterior.

Anda mungkin juga menyukai