Está en la página 1de 4

Universidad de Talca

Escuela de Ingeniería en Desarrollo de Videojuegos y Realidad Virtual


Programación Estructurada - Semestre de Invierno

Conceptos Generales

A continuación, nos referiremos a los aspectos generales teóricos, necesarios para poder
abordar la última tarea del curso de programación estructurada.

Definiciones

• Secuencia: Cadena lineal, finita y ordenada de símbolos pertenecientes a un alfabeto. El


número de símbolos de la cadena representa su longitud.

• Alfabeto: Conjunto de símbolos diferentes usados para representar las secuencias.

ADN A = { a,c,g,t|u }
Proteínas A = { a,c,d,e,f,g,h,i,k,l,m,n,p,q,r,s,t,v,w,y }

ADN y proteínas son secuencias co-lineales.

Existen diversos alfabetos (carácter químico, funcional, estructural, etc.) en función de lo que se
desea expresar y mecanismos de traducción entre alfabetos.

La comparación

El objetivo (inicial y algorítmico) de comparar dos secuencias es encontrar la posición relativa de


ambas en las que se produzca mayor número de coincidencias entre sus componentes.

El valor "número de coincidencias" representaría la valoración de su parecido y podría darse en


valores absolutos o porcentuales (normalizado) dividiéndolo entre el máximo valor posible (la longitud
de la secuencia más corta).

Nota: el objetivo biológico de la comparación de secuencias se suele expresar en términos


de inferencia de relaciones estructurales, funcionales o evolutivas entre las secuencias.
A modo de ejemplo, en la Figura 1.0 se muestra el algoritmo de comparación a utilizar:

Figura 1.0

Algoritmo: Desplazar una de las secuencias debajo de la otra y contabilizar los residuos que
coinciden. El mejor alineamiento corresponde a la posición en que este valor es máximo (indicado al
lado derecho entre paréntesis)

Secuencias y más secuencias (enunciado)

Durante el semestre pasado los estudiantes de la carrera de Bioinformática que cursaban el


curso “Bioinformática I”, en la primera sección del curso estuvieron analizando el cómo “comparar
secuencias” y buscar patrones en ellas, dicho proceso no es sencillo; más aún, cuando consideramos
factores como mutaciones, penalizaciones, etc. (Conceptos que son ampliamente estudiados por esa
disciplina)

Como buenos compañeros de Facultad, hemos decidido poner en práctica las competencias
aprendidas en el curso de programación estructurada.
Se requiere realizar un programa escrito en C el cuál está dividido en dos partes:

Primero (Alineamiento entre secuencias A y B):

El programa debe permitir el ingreso de dos secuencias X (Puede utilizar las secuencias de
prueba adjuntadas al final de este documento) a las cuales, les llamaremos la secuencia A y B, de esta
manera, debemos realizar un alineamiento de las secuencias con el algoritmo mostrado en la Figura 1.0.
Se espera que, al término de dicho alineamiento, se le muestre al usuario el mayor número de
ocurrencias analizado por el programa y el significado de este bajo las siguientes clasificaciones:

• 100% - 90%: Las dos secuencias están muy relacionadas.


• 89% - 61%: Las dos secuencias están relacionadas probablemente ha habido mutaciones u otros
factores que las distan.
• 60% - 30%: Las dos secuencias tienen algo en común que deber ser analizado en detalle.
• 0% - 29%: Las secuencias no tienen ninguna relación significativa.

Nota: las secuencias tendrán como tamaño máximo 400 caracteres y serán de igual tamaño.

Segundo (Búsqueda de patrones con expresiones regulares):

Una expresión regular, a menudo llamado también patrón, es una expresión que describe un
conjunto de cadenas sin enumerar sus elementos. Específicamente, las expresiones regulares se
construyen utilizando los operadores unión, concatenación y clausura de Kleene.

Cuantificación: Un cuantificador tras un carácter especifica la frecuencia con la que éste puede
ocurrir. Los cuantificadores más comunes son +, ? y *:

• +: El signo más indica que el carácter al que sigue debe aparecer al menos una vez. Por
ejemplo, "GA+TA" describe el conjunto infinito GATA, GAATA, GAAAAATA etcétera.
• ?: El signo de interrogación indica que el carácter al que sigue puede aparecer como mucho
una vez. Por ejemplo, "GA?TATA" concuerda con ATATA o CCTATA.
• *: El asterisco indica que el carácter que lo precede puede aparecer cero, una, o más veces.
Por ejemplo, "G*AT" describe AT, GAT, GGAT, GGGAT, etcétera.

El programa debe permitir el ingreso de un patrón con los operadores anteriormente descritos
(?,*) de hasta 5 caracteres más el operador (el operador + es opcional, no intente realizarlo si no ha
hecho los operadores anteriores), en otras palabras consideramos un arreglo de tamaño 5:

0 1 2 3 4 5
G A T * A T

Es equivalente al patrón: GAT*AT, el buscará dentro de la secuencia A o B (según seleccione el


usuario) coincidencias pudiendo eventualmente no encontrar concurrencias. Si se encuentra el patrón,
entonces el programa debe entregarnos las posiciones de la secuencia objetivo y el patrón.
A considerar:

1.- Desarrolle un menú con las siguientes opciones:

<1>Ingresar secuencia A
<2>Ingresar secuencia B
<3>Comparación de A con B
<4>Ingresar patrón

Opción: X

• Usted debe ingresar las secuencias para poder trabajar


• Usted para poder ejecutar la opción 3, debe haber ingresado secuencia A y B
• Una vez que ingresa el patrón a buscar, inmediatamente usted debe preguntar ¿a cuál secuencia se le
aplicará el patrón? (A o B)
• Para ejecutar la opción 4, al menos una secuencia A o B debió haber sido ingresada en el programa.

Opcional con estrella: (no intente realizar esta actividad si no ha resuelto el problema anterior)

1. Agregue la opción: -a por argumento a su programa la cual permita cargar las secuencias por
argumento (modo de ejecución: mi_programa.exe -a acgtatat actatagt)
2. Agregue la opción: -ac por argumento la cual permita cargar las secuencias a y b y compararlas
(modo de ejecución mi_programa.exe -ac acgtatat actatagt)
3. Agregue la opción: -h por argumento la cual despliega la ayuda y comandos disponibles para su
programa.

Considerar que : 1) acgtatat representa una secuencia A y 2) actatagt representa una secuencia B.

Entrega final
La entrega final de la tarea debe hacerse a más tardar en la fecha y horas indicadas:

Jueves 30 de Junio de 2022 a las 20:00 P.M.

Usted debe entregar un informe escrito que incluya:

• Una descripción de la estrategia utilizada para resolver el problema, incluyendo la descripción de variables importantes y la forma en que el
programa interactúa con el usuario.
• No se aceptarán tareas fuera de plazo, por lo que trate de entregar su tarea antes de la fecha límite.
• Su proyecto debe ser implementado con funciones, y las estructuras vistas en clases.
• Se utilizará un programa para la comprobación de similitud de código, trabajos con más del 30% serán calificados con la nota mínima 1.0, así
también cualquier otro intento de copia.
• La presente tarea es individual.
• Las Fuentes que no compilen serán calificadas con la nota mínima.
• Recordar de usa el estándar K&R de indentación así también de comentar su código, y no declarar variables que no utilizará, ya que, será
penalizado.
• En la plataforma educandus, usted deberá subir un archivo.zip con su código.c con el siguiente nombre: apellido_nombre.c y el informe (Debe
especificar si realizó el opcional de su proyecto).

SEC_A: ATATATATGCGCGTACTGATCGAAATCGAAAAT
SEC_B: AAACCGTGTGCACACTTTTTGAAAACTTTGAC

También podría gustarte