Вы находитесь на странице: 1из 6

ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS

FUNDAMENTOS DE PROGRAMACIN I
2017 I
LABORATORIO 16 ARRAY LISTS
MUTACIONES ADN
(NATIONAL UNIVERSITY OF SINGAPORE)
I

OBJETIVOS
Utiizar la clase ArrayList
Comparar el uso de ArrayList con el uso de Arrays
TIEMPO ESTIMADO:2 horas
II

CONSIDERACIONES DE EVALUACIN

No deber utilizar constructores no vistos en clase


Deber utilizar nombre de variables significativos
Deber realizar pruebas adicionales
El alumno deber indicar en su cdigo con quien colabor
El alumno ser requerido de realizar modificaciones en su cdigo y responder a preguntas sobre el
mismo
Todos los ejercicios debern traerse terminados en caso de ser tarea para la casa
Si tiene ejercicios sin terminar no importa, se revisar el avance y se discutir sobre las dificultades
encontradas.

III

POLITICA DE COLABORACION
La poltica del curso es simple, a menos que se exprese lo contrario en el laboratorio, sintase libre de
colaborar con sus compaeros en todos los laboratorios, pero debe notificar expresamente con quien ha
colaborado. La colaboracin con alumnos, que no estn matriculados en el curso est prohibida. Los
laboratorios y asignaciones han sido desarrollados para ayudarlo a comprender el material. Conozca su
cdigo y est preparado para revisiones individuales de cdigo. Durante las revisiones es probable que se le
pida realizar modificaciones y justificar sus decisiones de programacin. Cada uno de sus ejercicios debe
iniciar de la siguiente forma
IV

INDICACIONES GENERALES

a. Todos los ejercicios debern ser guardados en el mismo Proyecto


b. EL Proyecto deber tener el nombre del Laboratorio y el nombre del alumno, as por ejemplo:
Laboratorio 16 Juan Perez
c. Cada Clase deber tener el nombre del ejercicio, as por ejemplo :
Ejercicio1
d. Utilice nombres de variables significativos
e. Su cdigo deber estar correctamente indentado.
f. Deber pasar TODOS los casos de prueba

ACTIVIDADES

Un consejo: Programe Incrementalmente. Esto es ahora ms importante que nunca. Nuestros programas se
vuelven ahora mas largos y complicados. No trate de terminar el programa en un solo intento. Avance poco
a poco y vaya compilando.

Note que:

o Debe asumir que los datos de ingreso son correctos


o Debe utilizar la clase Scanner con System.in para ingreso de datos y System.out para salida
de datos.
o Debe utlizar println() en vez de print() para la ultima lnea que su programa genera como
salida.
o Solo debe utilizar un nico objeto de la clase Scanner, esto es no deben haber mas de una
variable de esta clase.
o Pruebe sus programas con sus propios datos.

1.2 Tarea

El cido Desoxirribonucleico (ADN) es un cido nucleico que contiene las instrucciones genticas utilizadas
en el desarrollo y funcionamiento de todo ser vivo y algunos virus. El rol principal de las molculas de ADN
es almacenar la informacin. El ADN es casi siempre comparado con un conjunto de planos, esto porque
contiene las instrucciones necesarias para construir o componer otras clulas, tales como protenas y
molculas RNA. Los segmentos de ADN que llevan la informacin gentica son llamados genes, pero otras
secuencias del ADN tienen propsitos estructurales, o estn involucrados en el uso de esta informacin
gentica. (Wikipedia).

Durante la reproduccin de clulas o bajo la exposicin a ciertos efectos (como la luz ultravioleta) pueden
ocurrir mutaciones a un segmento del ADN. Mientras mas mutaciones ocurran, puede ser desastroso
(causar cncer), tambin pueden ocurrir mutaciones ventajosas con un resultado evolutivo beneficioso.
En este ejercicio queremos simular los efectos de mutaciones en una cadena ADN. Por simplicidad, solo
consideraremos un subconjunto seleccionado de mutaciones de cromosomas. Simularemos las siguientes
mutaciones simplificadas.

o Amplificacin (amp): este inserta una copia duplicada de la regin especificada junto a ella.
o Eliminacin (del): elimina una regin seleccionada.
o Inversin (inv): invierte la orientacin de una regin especificada.

La primera lnea de ingreso corresponde a una cadena que representa la secuencia ADN. La segunda lnea
consiste en un entero positivo n que representa el nmero de mutaciones. Las siguientes n lneas
especifican las mutaciones, cada una en una sola lnea.

Cada lnea representando una mutacin consiste en

(1) el comando de mutacin (el cual puede Ser amp, del o inv),

(2) el ndice de inicio (incluido), y

(3) el ndice de fin (incluido). El primer carcter en la secuencia ADN tiene ndice 0. Todos los comandos son
en letra minscula.

Por ejemplo "amp 2 4" en "AGCTAGATT" resulta en "AGCTACTAGATT". Como CTA es la porcion de ADN a ser
duplicada la parte duplicada se muestra en azul para su referencia y mayor comprensin.

Lo siguiente es siempre verdadero acerca del ingreso del ADN en cada punto de tiempo:

Siempre hay un comando, seguido por un espacio, seguido por un entero


(denotando un ndice de inicio), seguido por un espacio, seguido por un entero
(denotando un ndice final)

Siempre hay solo un espacio entre el comando y el ndice de inicio

Siempre hay solo un espacio entre el ndice de inicio y el ndice de fin.

Todos los ndices son inclusivos.

El ndice inicial es siempre menor o igual que el ndice final.

Todas las cadenas ADN consisten solamente en 4 posibles caracteres maysculas


que son 'A', 'T', 'C', 'G'.

El nmero de comandos es siempre exactamente igual a n.

El largo de la cadena ADN siempre ser al menos 1 o a lo mucho 1000.

El ingreso de los comandos de mutacin son SIEMPRE en letras minsculas.

Las mutaciones han sido ampliamente simplificadas y debe programarlas de acuerdo


a la descripcin dada.

La salida consiste en una sola lnea contiendo la cadena ADN mutada.


No tiene permitido trabajar con mtodos de la clase String. Tampoco tiene permitido trabajar con la clase
StringBuffer (Vea 1.5 Notas Importantes). Para ser ms especifico, solo puede trabajar con un ArrayList de
String.

1.3 Ejemplos de Ejecucin

Ejemplo de ejecucin 1

Ingrese cadeana adn -> AAAGGCCTTAGCTTAGATTACGATCG


Cantidad de mutaciones -> 1

Ingrese mutacion -> amp 2 7

AAAGGCCTAGGCCTTAGCTTAGATTACGATCG

Ejemplo de ejecucin 2
Ingrese cadena adn ->AAAGGCCTTAGCTTAGATTACGATCG
Cantidad de mutaciones ->2

Ingrese mutacion -> amp 2 7


Ingrese mutacion -> del 10 12

AAAGGCCTAGTTAGCTTAGATTACGATCG

Nota aclaratoria: Para una mejor compresin se muestra a continuacin paso a paso las transformaciones
de la cadena ADN

Ingrese cadena adn ->AAAGGCCTTAGCTTAGATTACGATCG

amp 2 7
AAAGGCCTAGGCCTTAGCTTAGATTACGATCG

del 10 12
AAAGGCCTAGTTAGCTTAGATTACGATCG

Ejemplo de ejecucin 3
Ingrese cadena adn -> AAAGGCCTTAGCTTAGATTACGATCG
Cantidad de mutaciones -> 3

Ingrese mutacion -> amp 2 7


Ingrese mutacion -> del 10 12
Ingrese mutacion -> del 0 2

GGCCTAGTTAGCTTAGATTACGATCG
Ejemplo de ejecucin 3
Ingrese cadena adn -> GGCCTTAGCTTAGATTACGATCG
Cantidad de mutaciones -> 1

Ingrese mutacion -> inv 1 5

GTTCCGAGCTTAGATTACGATCG

1.5 Notas importantes

Los Strings son inmutables esto significa que una vez que un objeto String ha sido creado, este no puede
ser modificado. Cuando realizamos la concatenacin de dos cadenas, realmente estamos creando un nuevo
string.

Por ejemplo, si tenemos el bucle mostrado a continuacin:

String s = "ABCDE";
String output = "";
for (int i = 0; i < s.length; i++)
{
output += "" + s.charAt(i) + s.charAt(i);
}
System.out.println(output);

Realmente se estarn creando mltiples objetos String en cada iteracin del bucle en la lnea azul. Esto es
bastante ineficiente en manejo de memoria, especialmente para strings bastante largos. El largo de la
cadena ADN es alrededor de de 3 billones de pares base.

Usted no tiene permitido realizar excesivas concatenaciones (como las mostradas en


el ejemplo).
No tiene permitido utilizar los mtodos de la clase String (esto buscando garantizar
el objetivo de la prctica: manipular un ArrayList).
Debe asumir que el largo de la cadena ADN es entre 1 y 1000 caracteres. Esto
significa que la cadena ADN nunca exceder los 1000 caracteres.
Debe asumir que los comandos de mutacin no deben resultar en un mensaje de
error "array index out of range" (error de ndice de arreglo fuera de rango).

Se le proporciona una cdigo parcial que no deber ser modificado

import java.util.*;

public class MutacionesArrayList


{

// Se recomienda crear tres metodos


// public staticic ArrayList<String amplificar(ArrayList<String> , int i, int f)
// public staticic ArrayList<String> eliminar(ArrayList<String> , int i, int f)
// public staticic ArrayList<String> invertir(ArrayList<String> , int i, int f)

public static void main(String[] args)


{
Scanner sc = new Scanner(System.in);
String adn = sc.next();
int contador = sc.nextInt(); // numero de mutaciones

int adnLargo = adn.length();


ArrayList<String> adnAL = new ArrayList<String>();
for (int i = 0; i < adn.length(); i++)
{
adnAL.add( adn.charAt(i));
}

/*
* Aqui se escribe su solucion
*/

}
}