Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo.
OPERACIONES CON CADENAS =~ Este operador es usado en las expresiones regulares para indicar la presencia de un patrón de comparación dentro de una variable que contiene una cadena de caracteres. $variableobjetivo =~ /patron a buscar/ Para buscar la palabra ejemplo dentro de una cadena Seria: $cadena=“Este es un ejemplo de busqueda”; $cadena =~ /ejemplo/ #SI se encuentra patron $cadena =~ /ejemplar/ #NO se encuentra patron
#!/usr/bin/perl #eje00ifbusqueda.pl $dna="aggtttttttatcggcccc"; if ($dna =~ /atg/ ){ print "Contiene inicio de gen \n"; }else{ print "No se encuentra patron de inicio\n"; } Ejemplo: buscar el inicio del gen (atg) en una cadena de dna imprimir si este se encuentra o no.
ARREGLOS, LISTAS, Listas de variables escalares Es una lista de datos de tipo escalar. Cada elemento de la lista es una variable escalar a la que se le asocia un valor. Las variables de tipo array se identifican por el prefijo Por = (10, 34, 12, 23, 33.6, 14, = (”A", = ("proteina", 12, "dna",31.234);
Los elementos de un array se referencían mediante índices. El primer elemento se referencia por el índice 0. Por ejemplo: $numeros[1]; # vale 34 $aminoacidos[2]; # vale ”Y" $mezcla[0]; # vale ”proteína"
Como obtener el numero de elementos de un $ultimo_subindice=$#nucleotidos;
#!/usr/bin/perl = (10, 34, 12, 23, 33.6, 14, = ("perro", "gato", = ("proteina", 4523, "dna",31.234); print " $numeros[2] \n"; print " $animales[0]\n"; print " $mezcolanza[1] $mezcolanza[4] \n"; Ejemplo Arreglos, accediendo elementos en un programa.
Que imprime en pantalla este programa? #!/usr/bin/perl print "Secuencia Proteina $amino[3]$amino[0]$amino[0]\n"; print "Secuencia Proteina 3 $amino3[3]-$amino3[0]-$amino3[0]\n"; print "Secuencia RNA $codones[3]$codones[0]$codones[0]\n";
FUNCIONES ASOCIADAS A ARREGLOS Función push y pop. push y pop permiten respectivamente insertar y extraer el último elemento de un arreglo. Por push push tres unodostres unodostrescuatro unodostrescuatrocinco unodostrescuatro cinco
Ejemplo visto dentro de un programa perl: #!/usr/bin/perl print " Contenido de la \n"; #insertamos un elemento en el arreglo y lo imprimimos push print " Contenido de la \n"; push print " Contenido de la \n"; print " Valor extraido $elemento \n"; print " Contenido de la \n";
Las funciones shift y unshift permiten respectivamente suprimir e insertar el primer elemento de un arreglo. Por unshift unshift C D E B C D E A BC D E B C D E A
#!/usr/bin/perl print " Contenido de la \n"; #insertamos un elemento en el arreglo y lo imprimimos unshift print " Contenido de la \n"; unshift print " Contenido de la \n"; print " Valor extraido $elemento \n"; print " Contenido de la \n"; Ejemplo visto dentro de un programa perl:
La función reverse invierte los valores del array mientras que la función sort los ordena en G AD F T T FD A G A DF G T
#!/usr/bin/perl print " Contenido de la \n"; print " Contenido de la print " Contenido de la \n"; Ejemplo visto dentro de un programa perl:
Las funciones split y join permiten transformar una cadena en una lista de caracteres. = split(/expresión/, cadena) $cadena = Ejemplo: $dna2=join G AC G T GACGT G-A-C-G-T
Ejemplo visto dentro de un programa perl: #!/usr/bin/perl #eje06splitjoin.pl $dna="GACGT"; print " Contenido de la variable print " Contenido de la \n"; $dna2=join print "valor de la variable 2 $dna2\n";
ESTRUCTURAS DE CONTROL
ESTRUCTURAS DE CONTROL CONDICIONALES
print “ Dame tu nombre \n“; $edad= ; If $edad>=18 { print “eres mayor de edad \n“; }else{ print “eres menor de edad \n“; } print “saliendo del programa “;
Las estructuras de control repetitivas permiten realizar un conjunto de sentencias ”N” veces, comúnmente se les llama ciclos, loop, bucles.
ESTRUCTURAS DE CONTROL REPETITIVAS
Condicion? verdadero falso Conjunto de instrucciones Representación de un ciclo mediante diagrama de flujo.
Cont=0 Cont<=0? Fin PCR Elevar temp 96 Descender temp 55 Elevar a 76 Incrementar Cont Verdad Falso Representacion de PCR en diagrama de flujo
Sentencias repetitivas en Perl: While Until For Foreach
Sintaxis sentencia While en pseudocodigo podría verse de la siguiente forma: Mientras (condicion sea verdadera) hacer{ todas las intrucciones contenidas en el bloque de intrucciones. }Fin bloque mientras
Sintaxis sentencia While: Mientras la condición sea verdadera entra al ciclo While (condicion){ instrucción 1; instrucción 2; instrucción N; }
Cont=0 Cont<=3 Fin PCR Elevar temp 96 Descender temp 55 Elevar a 76 Incrementar cont Verdadero Falso #!/usr/bin/perl #eje07pcrwhile.pl $cont=0; while ($cont < 30){ print “Elevando temp a 96\n”; print “descender temp a 55\n”; print “Elevando temp a 76\n”; $cont=$cont+1: } print “Finalizando PCR\n”; Ejemplo PCR en lenguaje de programación
Ejemplo 2 sentencia While. Leer una lista de números desde el teclado y sumar sus valores, hasta que se introduzca un numero negativo. #!/usr/bin/perl #eje08whileacumcont.pl $acumulador=0; $num_leido=0; while ($num_leido < 0){ print "Introduce un numero:"; $num_leido= ; $acumulador=$acumulador+$num_leido; }
Consideraciones importantes: -La condición debe tener un valor inicial, que asegure entrar al ciclo. -La condición debe ser modificada dentro del ciclo, para poder salir del ciclo. -Realizar la sangria de forma adecuada que permita la fácil lectura del programa.
#!/usr/bin/perl #eje08whileacumcont.pl $acumulador=0; $num_leido=0; while ($num_leido < 0){ print "Introduce un numero:"; $num_leido= ; $acumulador=$acumulador+$num_leido; } -La condición debe tener un valor inicial.
La condición debe ser modificada dentro del ciclo #!/usr/bin/perl $acumulador=0; $num_leido=0; while ($num_leido < 0){ print "Introduce un numero:"; $numero= ; $acumulador=$acumulador+$num_leido; }
Realizar la sangria de forma adecuada #!/usr/bin/perl $acum=0; $num_leido=0; while ($num_leido >= 0){ print "Introduce un numero:"; $numero= ; $acumulador=$acumulador+$num_leido;} #!/usr/bin/perl $acum=0; $num_leido=0; while ($num_leido >= 0){ print "Introduce un numero:"; $numero= ; $acumulador=$acumulador+$num_leido;}
#!/usr/bin/perl #eje08whileacumcont.pl $acum=0; $num_leido=0; while ($num_leido >= 0){ print "Introduce un numero:"; $numero= ; $acumulador=$acumulador+$num_leido; }#fin while #!/usr/bin/perl #eje08whileacumcont.pl $acum=0; $num_leido=0; while ($num_leido >= 0) { print "Introduce un numero:"; $numero= ; $acumulador=$acumulador+$num_leido; }#fin while Realizar la sangría de forma adecuada. CORRECTOS!!!
Ejercicio sentencia While. Leer una lista de números desde el teclado, sumar sus valores (excepto negativos), y obtener el promedio, hasta que se introduzca un numero negativo.
#!/usr/bin/perl #eje09whileleerpromedio.pl $acumulador=0; $num_leido=0; $contador_leidos=0; while ($num_leido >= 0){ print "Introduce un numero:"; $num_leido= ; if($num_leido>0){ $acumulador=$acumulador+$num_leido; $contador_leidos=$contador_leidos+1; } $promedio=$acumulador/$contador_leidos; print "Suma de numeros introducidos $acumulador\n"; print "Promedio: $promedio\n"; Ejercicio sentencia While. Leer una lista de números desde el teclado, sumar sus valores y obtener el promedio, hasta que se introduzca un numero negativo,.
Tarea 1 sentencia While. Almacenar en un arreglo las siguientes secuencias: gcgttaggacgtagctagctagctagctaattgggccc gcgaatgcatgcatgcattatacccacgatgcatcgat gcgaataattgcatgcatgcattatagctacgatgcat tacgtagaattcgatcgatgcatcgatctatagatgat acgtacgtacgatcgatgcatgacatgcaatttggtgg Determinar, si alguna de estas secuencias contienen alguna caja “tata” o el sitio de pegado de la enzima de restricción Ecori “aatt”, imprimir si alguna o ambas condiciones se prensentan en cada secuencia.
TAREA modificar el ejemplo anterior indicando en que posición de la cadena se encuentra la caja tata o el sitio de restricción, utilizando la funciones de arreglos revisadas anteriormente. TAREA modificar su ejemplo utilizando la función index.
Sintaxis sentencia Until: A diferencia del while, mientras la condición sea falsa entra al ciclo. until (condicion ){ instrucción 1; instrucción 2; instrucción N; }
#!/usr/bin/perl #eje09whileleerpromedio.pl $acumulador=0; $num_leido=0; while ($num_leido >= 0){ print "Introduce un numero:"; $num_leido= ; $acumulador=$acumulador+$num_leido; } #!/usr/bin/perl # eje10until.pl $acumulador=0; $num_leido=0; until ($num_leido < 0){ print "Introduce un numero:"; $num_leido= ; $acumulador=$acumulador+$num_leido; } print "Acumulador $acumulador\n"; while Until
Sintaxis sentencia foreach : Extrae el contenido del arreglo, agregándolo a la variable, el cual puede se utilizado dentro del ciclo. foreach variable ( lista ){ instrucción 1; instrucción 2; instrucción N; } Existen elementos en lista? verdadero falso Extrae elemento asignalo a variable T FD A G
#!/usr/bin/perl foreach $n print "nombre: $n \n"; }#for Ejemplo : Definir una lista y acceder a elle mediante ciclo foreach.
Ejemplo N: Leer una secuencia de dna del teclado, contar e imprimir la cantidad de nucleótidos a,g,c,t (cuantos de cada uno) se introdujeron, imprimir también cuantos inválidos se introdujeron.
# eje12foreachcontnucleotidos.pl $cont_g=0; $cont_a=0; $cont_t=0; $novalidos=0; print "Introduce una secuencia de dna :"; $dna= foreach $nucleotido print "Nucleotido $nucleotido \n"; if ( ($nucleotido eq 'a') or ($nucleotido eq 'A')){ $cont_a++; }elsif( ($nucleotido eq 'g') or ($nucleotido eq 'G')){ $cont_g++; }elsif( ($nucleotido eq 'c') or ($nucleotido eq 'C')){ $cont_c++; }elsif( ($nucleotido eq 't') or ($nucleotido eq 'T')){ $cont_t++; }else{ $novalidos++; }
TAREA N: Lo mismo que el ejemplo anterior, pero ahora calcular porcentaje de GCs tiene la secuencia, así como porcentajes de ATs contiene la misma
TAREA N: Lo mismo que el ejemplo anterior, pero ahora calcular porcentaje de GCs tiene la secuencia, asi como porcentajes de ATs contiene la misma
Sintaxis sentencia for : for (expresion inicial; condición de repeticion; incremento){ instrucción 1; instrucción 2; instrucción N; }
Sintaxis sentencia for : for (expresion inicial; condición de repeticion; incremento){ instrucción 1; instrucción 2; instrucción N; }
#!/usr/bin/perl #eje13for.pl for ($cont=1 ; $cont <=10 ; $cont++){ print "Valor de cont $cont \n"; }#for Ejemplo 4 for:
#!/usr/bin/perl #eje14forpcr.pl for ($cont=0 ; $cont < 30 ; $cont++){ print "*** Estamos en el ciclo $cont*** \n"; print "Elevando temp a 96 \n"; print "Descender temp a 55 temp a 96 \n"; print "Elevando temp a 76 \n"; }#for print "Finalizando PCR\n”; Ejemplo 5 el ciclo de PCR:
$ultimo_subindice=$#nombres; print "Numero de elementos: $num_elementos \n"; print "Ultimo subindice: $ultimo_subindice \n"; for ($i=0 ; $i<$num_elementos ; $i++){ print "$nombres[$i] \n"; }#for Ejemplo : Definir una lista y acceder a elle mediante ciclo for.
Ejemplo N: Leer una secuencia de dna del teclado, contar e imprimir la cantidad de nucleótidos a,g,c,t (cuantos de cada uno) se introdujeron, imprimir también cuantos inválidos se introdujeron, realizar el ejemplo con el ciclo for.
# eje15forcontnucleotidos.pl $cont_c=0; $cont_g=0; $cont_a=0; $cont_t=0; $novalidos=0; print "Introduce una secuencia de dna :"; $dna= for($i=0;$i<$numero_elementos;$i++){ $nucleotido=$lista[$i]; print "Nucleotido $nucleotido \n"; if ( ($nucleotido eq 'a') or ($nucleotido eq 'A')){ $cont_a++; }elsif( ($nucleotido eq 'g') or ($nucleotido eq 'G')){ $cont_g++; }elsif( ($nucleotido eq 'c') or ($nucleotido eq 'C')){ $cont_c++; }elsif( ($nucleotido eq 't') or ($nucleotido eq 'T')){ $cont_t++; }else{ $novalidos++; }
Sintaxis sentencia do while : Se ejecuta el ciclo al menos una vez, se repite el ciclo si la condición es VERDAD. do{ instrucción 1; instrucción 2; instrucción N; }while(condicion);
Sintaxis sentencia do until : Se ejecuta el ciclo al menos una vez, si la condición es FALSA el ciclo se repite. do{ instrucción 1; instrucción 2; instrucción N; }until(condicion);
#!/usr/bin/perl #eje16dowhile.pl $cont=1; do{ print ”Num de ciclo $cont \n"; $cont++; }while ($cont <=10); print "Fin de ciclo\n"; #!/usr/bin/perl #eje17dountil.pl $cont=1; do{ print ”Num de ciclo $cont \n"; $cont++; }until ($cont >10); print "Fin de ciclo\n"; do whiledo until
LAST #eje18last.pl $cont=0; while ($cont <30 ){ print "*** Estamos en el ciclo $cont*** \n"; print "Elevando temp a 96 \n"; print "Descender temp a 55 temp a 96 \n"; print "Elevando temp a 76 \n"; $cont=$cont+1; if ($cont == 3){ last; }#if }#for print "Finalizando PCR\n"; La instrucción last interrumpe la ejecución de la iteración actual y se ejecuta la instrucción que sigue al bloque.
NEXT #eje19next.pl $cont=0; while ($cont <5 ){ if ($cont == 2){ $cont=$cont+1; next; }#if print "*** Estamos en el ciclo $cont*** \n"; print "Elevando temp a 96 \n"; print "Descender temp a 55 temp a 96 \n"; print "Elevando temp a 76 \n"; $cont=$cont+1; }#for print "Finalizando PCR\n" La instrucción next interrumpe la ejecución del bloque de instrucción actual y prosigue la ejecución en la iteración siguente