Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Novarella en 5 Noviembre 2018, 00:09 am



Título: EJERCICIO VALIDACIÓN DE TOKENS
Publicado por: Novarella en 5 Noviembre 2018, 00:09 am
¡Buenas amigos de ElHacker.net!

Recién estoy empezando a estudiar una Licenciatura en Computación y tengo un problema con una tarea enviada por mi profesora, de verdad que solicito ayuda, por más que intento no logro comprender la asignación; cabe destacar que lo único que comprendo es que hay que usar la libreria Iostream en c++ para entrada y salida de datos; junto a una declaración de variables tipo string.


La transmisión de datos es un punto de gran importancia, ya que permite la interacción entre los sistemas y la posibilidad de intercambiar
información, por ello una de las tendencias en el desarrollo web se refiere a la autenticación por
medio de tokens aleatorios.

 El funcionamiento es el siguiente, el usuario se autentica en la aplicación
por medio de un par usuario/contraseña, si la combinación es correcta el servidor le asigna un token.

A partir de este paso cada petición que se haga debe estar acompañada del token generado, para
validar que el usuario que realiza la petición tiene permiso de acceso a los datos solicitados. Para
este propósito se requiere que los estudiantes de Algoritmos y Programación diseñen e implementen
un programa en lenguaje C++ que, permita generar tokens de autenticación a partir de unas
condiciones y verificar su validez.

Al comienzo se debe indicar al programa con un número la acción a realizar a partir de un
número entero 1 (caso verificar) o 2 (caso generar). La siguiente línea identificara dos distancias i y
j , donde 2 ≤ i ≤ 5 y 1 ≤ j ≤ 6 .

CASO VERIFICAR
1. La siguiente línea será una cadena de caracteres de tamaño 7 .

2. La cadena a verificar está compuesta por cuatro letras y tres números (no se toma en cuenta
la letra “ñ”). En el caso que la cadena posea un carácter distinto a los especificados se debe
imprimir “NO VALIDA” y finalizar el programa.

3. La cadena se divide condicionalmente en tres partes: las tres primeras letras, la letra de
centro y los tres últimos números.

4. La cadena deben cumplir las siguientes condiciones para pasar el proceso de verificación
exitosamente:
a. La primera condición se aplica a las 3 primeras letras de la cadena, en ella se verifica
si a partir de la primera letra se mantiene una secuencia de distancia i , si i = 2 un
ejemplo válido sería “aCe”. Además se debe tomar en cuenta que el abecedario será
circular, es decir, por lo tanto si la primera letra es una “Z” una cadena válida para la
condición sería “ZbD”.
b. La segunda condición se aplica a la última parte de la cadena (3 últimos números),
en ella se verifica si a partir del primer número se mantiene una secuencia de
distancia j , si j = 3 un ejemplo válido sería “036”. Además se debe tomar en cuenta
que solo serán usados los números del 0-9, por ende se trataran de manera circular,
es decir, si el primer número es un “9” la cadena válida para la condición sería “925”.
c. La tercera y última condición se aplica sobre la letra del centro de la cadena, ya que
está representada por ultimo número de la misma, es decir si el último número es “0”,
la letra central debe ser una “a” o “A”.


a-A/b-B/c-C/d-D/e-E/f-F/g-G/h-H/i-I/j-J
  0    1    2    3     4    5    6     7   8   9

5. Si se cumplen todas las condiciones explicadas anteriormente se debe imprimir “VALIDA” y
finalizar el programa. En caso contrario se debe imprimir “NO VALIDA” y finalizar el programa.
Ejemplo con i = 2 y j = 3 :
ZbDb581 -  Cadena a verificar
ZbD - Se verifica si se cumple la condición de distancia i entre letras
581 - Se verifica si se cumple la condición de distancia j entre números
b Se verifica si la letra del centro corresponde con la del último número de la cadena


CASO GENERAR
1. La siguiente línea será una cadena de caracteres de tamaño 2 .
2. La cadena está compuesta por 1 letra y 1 número (no se toma en cuenta la letra “ñ”). En caso
que la cadena posea un carácter distinto a los especificados se debe imprimir “NO VALIDA” y
finalizar el programa.
3. La cadena se divide en dos partes la letra inicial y el número final. Para poder generar una
cadena válida se deben cumplir los siguientes pasos:
a. A partir de la letra ingresada se crea la primera parte de la cadena aplicando una
secuencia de distancia i entre letras.
b. A partir del número ingresado se crea la última parte de la cadena aplicando una
secuencia de distancia j entre números.
c. A partir del último número generado en el paso anterior se busca la letra
correspondiente y se coloca en el centro de la cadena final.
4. Si se genera exitosamente una de las posibilidades válidas, a partir de las condiciones
explicadas anteriormente se debe imprimir la cadena creada y finalizar el programa.
Ejemplo con i = 3 y j = 4 :
W3 - Cadena ingresada.
WZC - Se crea la primera parte de la cadena final a partir de una secuencia de distancia i
entre letras.
371 - Se crea la última parte de la cadena final a partir de una secuencia de distancia j
entre números.
B - Con el último número generado se busca la letra correspondiente a colocar en el
centro de la cadena final.
WZCB371 Cadena final.

EJEMPLOS


ENTRADA SALIDA

1
2 3
dfHE814
VALIDA

1
3 4
CFga714
NO VALIDA

1
5 5
Avqa050
NO VALIDA

1
5 5
#eta453
NO VALIDA

2
2 3
t5
tvxb581

2
1 6
hj
NO VALIDA

2
4 5
4$
NO VALIDA

CONDICIONES GENERALES :

● El proyecto debe ser desarrollado en el lenguaje de programación C++, y será corregido con el
compilador GNU g++.
● No se pueden usar estructuras de datos como Arreglos, Matrices, Registros u Orientado a
Objetos.
● Todos los datos se deben leer desde teclado, no se acepta lectura desde archivos.
● No se deben agregar menús, formatos y textos que no cumplan con el establecido.
● Solo puede hacer uso de estructuras condicionales y librerías del lenguaje estándar para la
lectura desde el teclado y escritura en pantalla. No se aceptará el uso de otras librerías .
● Se deben realizar las validaciones respectivas en los datos de entrada, con el fin de asegurar
el robusto funcionamiento del programa.
● Las letras podrán ser tanto minúsculas como mayúsculas .