tercera clase: control de flujo del programa. - arreglos. - control de flujo repetitivo

Post on 24-Jan-2016

244 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 #!/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 arroba @. Por ejemplo:

@numeros = (10, 34, 12, 23, 33.6, 14, 9);@aminoacidos = (”A", ”R",”Y”,”D”,”C”);@mezcla = ("proteina", 12, "dna",31.234);

910 34 12 23 33.6 14

0 1 2 3 4 5 6

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 arreglo:

@nucleotidos=(‘a’,’g’,’c’,’t’);

$num_elementos=@nucleotidos;

$ultimo_subindice=$#nucleotidos;

#!/usr/bin/perl#eje01arreglosacceso.pl@numeros = (10, 34, 12, 23, 33.6, 14, 9);@animales = ("perro", "gato", "leon");@mezcolanza = ("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#eje02arreglosaminoacidos.pl

@amino = ('A','R','N','D','C','P');@codones=("GCC","AGG","AAU","GAU","UGU","CCU");@amino3=("Ala","Arg","Asn","Asp","Cys","Pro");

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 ARREGLOSFunción push y pop.

push y pop permiten respectivamente insertar y extraer el último elemento de un arreglo.

Por ejemplo:

@arreglo=("uno","dos","tres");

push (@arreglo,"cuatro");

push (@arreglo,"cinco");

$elemento=pop(@arreglo);

tres

uno dos tres

uno dos tres cuatro

uno dos tres cuatro cinco

uno dos tres cuatrocinco

Ejemplo visto dentro de un programa perl:

#!/usr/bin/perl#eje03poppush.pl@arreglo=("uno","dos","tres");

print " Contenido de la lista @arreglo \n";#insertamos un elemento en el arreglo y lo imprimimospush (@arreglo,"cuatro");print " Contenido de la lista @arreglo \n";push (@arreglo,"cinco");print " Contenido de la lista @arreglo \n";

$elemento=pop(@arreglo);

print " Valor extraido $elemento \n";print " Contenido de la lista @arreglo \n";

Las funciones shift y unshift permiten respectivamente suprimir e insertar el primer elemento de un arreglo. Por ejemplo:

@arreglo=(“C",”D",”E");

unshift (@arreglo,”B");

unshift (@arreglo,”A");

$elemento=shift(@arreglo);

C D E

B C D E

A B C D E

B C D E A

#!/usr/bin/perl#eje04shiftunshit.pl@arreglo=("C","D","E");

print " Contenido de la lista @arreglo \n";#insertamos un elemento en el arreglo y lo imprimimosunshift (@arreglo,"B");print " Contenido de la lista @arreglo \n";unshift (@arreglo,"A");print " Contenido de la lista @arreglo \n";

$elemento=shift(@arreglo);

print " Valor extraido $elemento \n";print " Contenido de la lista @arreglo \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 sentido creciente.@arreglo=("G","A","D","F","T");

@arreglo=reverse(@arreglo);

@arreglo=sort (@arreglo);

G A D F T

T F D A G

A D F G T

#!/usr/bin/perl#eje05sortreverse.pl@arreglo=("G","A","D","F","T");

print " Contenido de la lista @arreglo \n";@arreglo=reverse(@arreglo);print " Contenido de la lista @arreglo \n";@arreglo=sort (@arreglo);print " Contenido de la lista @arreglo \n";

Ejemplo visto dentro de un programa perl:

Las funciones split y join permiten transformar una cadena en una lista de caracteres.Sintaxis: @lista = split(/expresión/, cadena) $cadena = join(separador, @lista)Ejemplo:

$dna="GACGT";

@arreglo=split('',$dna);

$dna2=join ('-',@arreglo);

G A C 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 $dna\n";@arreglo=split('',$dna);print " Contenido de la lista @arreglo \n";$dna2=join ('-',@arreglo);print "valor de la variable 2 $dna2\n";

ESTRUCTURAS DE CONTROL

ESTRUCTURAS DE CONTROL CONDICIONALES

print “ Dame tu nombre \n“;$edad=<STDIN>;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 55Elevar 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 76Incrementar 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=<STDIN>; $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=<STDIN>; $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=<STDIN>; $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=<STDIN>;$acumulador=$acumulador+$num_leido;}

#!/usr/bin/perl$acum=0;$num_leido=0; while ($num_leido >= 0){print "Introduce un numero:";$numero=<STDIN>;$acumulador=$acumulador+$num_leido;}

#!/usr/bin/perl

#eje08whileacumcont.pl$acum=0;$num_leido=0;

while ($num_leido >= 0){ print "Introduce un numero:"; $numero=<STDIN>; $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=<STDIN>; $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=<STDIN>; 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=<STDIN>; $acumulador=$acumulador+$num_leido;}

#!/usr/bin/perl

#eje10until.pl$acumulador=0;$num_leido=0;

until ($num_leido < 0){ print "Introduce un numero:"; $num_leido=<STDIN>; $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 F D A G

#!/usr/bin/perl#eje11foreach.pl@nombres=("pedro","lucia","pepito","jorge","ana");

foreach $n (@nombres){ 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=<STDIN>;

@lista=split('',$dna);

foreach $nucleotido (@lista){ 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.plfor ($cont=1 ; $cont <=10 ; $cont++){ print "Valor de cont $cont \n";}#for

Ejemplo 4 for:

#!/usr/bin/perl#eje14forpcr.plfor ($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";}#forprint "Finalizando PCR\n”;

Ejemplo 5 el ciclo de PCR:

#!/usr/bin/perl

@nombres=("pedro","lucia","pepito","jorge","ana");

$num_elementos=@nombres;$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=<STDIN>;

@lista=split('',$dna);$numero_elementos=@lista;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 while do 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}#forprint "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;}#forprint "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

top related