miércoles, 1 de junio de 2011

Ejercicios con cadenas de caracteres y vectores numéricos.

1. Crea una función que tomando una cadena de texto como entrada coloque todas sus consonantes al principio y todas sus vocales al final de la misma, eliminando los blancos. Por ejemplo, pasándole la cadena "curso de programacion" una posible solución sería "rmcsrpdrgcnuoioaeoa". NOTA: como puede observarse, no importa el orden final en el que aparezcan las consonantes o las vocales entre sí (no tiene por qué coincidir con el posicionamiento original); basta con que se cumpla la condición de que las consonantes estén a la izquierda y las vocales a la derecha. Como contrapartida, NO PUEDES utilizar una segunda cadena auxiliar distinta de la original, sólo punteros y variables de tipos simples.

Solución

2.- Desarrolla una función que elimine los caracteres repetidos de una cadena de texto, incluidos los blancos. Por ejemplo, pasándole la cadena "curso de programacion" nos devolverá "curso depgamin"

Solución

3.- Implementa una función que tomando dos cadenas como entrada nos diga si la segunda es una subcadena de la primera y cuál es la primera posición a partir de la que esto ocurre. Así, pasando como argumentos "mi vecina tiene una bonita cocina" y "cina" devolverá 5 ya que en esa posición es donde se incluye el "cina" de "vecina". Aunque también está incluido en la palabra "cocina", esta inclusión es posterior, por lo que prevalece la primera. En caso de que la segunda cadena no fuese subcadena de la primera la función devolvería una posición inválida, por ejemplo, -1

Solución

4. Desarrolla una función que tomando como entrada una cadena de texto nos devuelva si es o no un palíndromo. Se denomina palíndromo a una palabra o frase que, ignorando los blancos, se lee igual de izquierda a derecha que de derecha a izquierda. Por ejemplo: "ligar es ser agil". Para simplificar le problema puedes suponer que se usan caracteres simples, es decir, sin tildes ni diéresis y todos en minúscula.


Solución

5.- Implementa una función que tomando como entrada una cadena de texto sea capaz de contabilizar el número de palabras. Ten en cuenta que entre dos palabras puede haber más de 1 blanco. También al principio y al final de la frase puede haber blancos redundantes. Por ejemplo, para la oración " puedo perdonarte por el daño que me has hecho pero, ¿como podré perdonarte por el mal que te has hecho a ti mismo? " devolvería el valor 23

Solución

6.- Crea una función que tome como entrada un número de D.N.I. y devuelva la letra correspondiente a dicho número. Para ello, debes dividir el número del D.N.I. entre 23 y seleccionar la letra correspondiente al resto obtenido en dicha división según la siguiente tabla de correspondencias:

Así, por ejemplo, al número 34.324.445 le corresponde la letra G ya que el resto resultante de dividir 34324445 entre 23 es 4.

Solución

7.- Según el historiador Cayo Suetonio el dictador perpetuus Julio César utilizaba un código cuando quería mantener en secreto un mensaje. Tomaba cada una de las 21 letras del albafeto latino (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, V) y las sustituía por otra letra situada n posiciones más a la derecha en el orden alfabético anterior. Así, si n=3, a la A le correspondería la D. Este simple código además de ser un código de sustitución es un código de rotación ya que para las últimas letras se vuelve a retomar el conteo por el principio. Esto es, de nuevo para n=3, a la S le correspondería la A. Ahondando en el ejemplo, para n=3 si el emperador afirmaba que "la suerte está echada" (ALEA IACTA EST) el mensaje cifrados sería DOHD LDFBD HAB.
Crea una función que codifique y otra que descodifique los mensajes cifrados con este sistema para un n positivo cualquiera.



Solución

8. Desarrolla un programa que permita a dos personas jugar al juego de sumar 15. Los jugadores juegan por turno y en cada turno el jugador debe seleccionar alguna de las casillas sin marcar del tablero.
Gana el primero que consiga sumar 15 sumando el valor de 3 de las casillas que ha marcado. Como ejemplo, veamos una partida:

Tenemos dos jugadores A y B. En cada turno, el jugador que le toca indica en qué casilla libre quiere jugar. Comienza el jugador A y decide marcar el 5; el jugador B, por su parte, marca el 3.

En la siguiente jugada el jugador A decide marcar el 2 y el B elige el 8 para evitar que A consiga 15 en la siguiente ronda.


Entonces A marca el número 4 para impedir que B sume 15 y al mismo tiempo consigue encarrilar la partida ya que suma 15 con 4+5+6 y con 2+4+9. Por lo que en la siguiente jugada, B sólo podrá seleccionar el 6 o el 9 para impedir una de las posibilidades pero entonces a A le bastará con seleccionar la otra para ganar.

B se decide a seleccionar el 6 para impedir que A sume 15 con 4+5+6

Pero como había previsto, A acaba ganando la partida al seleccionar el 9 y sumar 2+4+9=15

NOTA: el programa validará las entradas comprobando que el valor introducido corresponde a una casilla libre. Asimismo, avisará de quién ha sido el ganador cuando se llegue al final de una partida y se podrán jugar tantas partidas consecutivas como se desee. En cada partida debe iniciar el turno un jugador diferente. Por otra parte, llevará el recuento de cuántas partidas lleva ganadas cada jugador.

Solución

9.- Desarrolla un programa que lea un numero entero n positivo y muestre por pantalla las n! permutaciones sin repetición de los n primeros números naturales.

La solución consiste en generar ordenadamente las permutaciones. La primera que se ha de generar es la formada por los n números en el orden natural ascendente y la última que se obtiene es la formada por dichos números en orden inverso.

Primera: 1,2,3,...,n-1,n
Última: n, n-1, ..., 3,2,1

Diremos que una permutación Q es posterior a otra P si comparando sus números, uno a uno, de izquierda a derecha, se cumple que en el primer número diferente el número de Q es mayor que el de P. Así, para generar la permutación Q que sigue a una dada P se procede de la siguiente manera:

Sea la pemutación P=a1, a2, ..., an
a) Se busca de derecha a izquierda el primer número ai que sea menor que el que le sigue (ai< ai+1);
b) Se busca de derecha a izquierda el primer número aj que sea mayor que ai (aj>ai)
c) Se intercambian ambos números.
d) Se invierten los números que siguen a la posición i


Por ejemplo, si se están generando las permutaciones de 7 y sea P=5,6,3,7,4,2,1 entonces:

a) ai=3 (3<7)
b) aj=4 (4>3)
c) 5,6,4,7,3,2,1
d) 5,6,4,1,2,3,7

Por tanto la siguiente permutación Q=5,6,4,1,2,3,7


Solución

Solución alternativa usando backtracking recursivo



No hay comentarios:

Publicar un comentario en la entrada