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

61
rcera clase: Control de flujo del programa. Arreglos. Control de flujo repetitivo.

Upload: angeles-saavedra-franco

Post on 24-Jan-2016

244 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Tercera clase: Control de flujo del programa.

- Arreglos.

- Control de flujo repetitivo.

Page 2: 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

Page 3: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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.

Page 4: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 5: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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"

Page 6: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Como obtener el numero de elementos de un arreglo:

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

$num_elementos=@nucleotidos;

$ultimo_subindice=$#nucleotidos;

Page 7: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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.

Page 8: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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";

Page 9: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 10: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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";

Page 11: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 12: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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:

Page 13: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 14: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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:

Page 15: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 16: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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";

Page 17: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

ESTRUCTURAS DE CONTROL

Page 18: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

ESTRUCTURAS DE CONTROL CONDICIONALES

Page 19: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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 “;

Page 20: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Las estructuras de control repetitivas permiten realizar un conjunto de sentencias ”N” veces, comúnmente se les llama ciclos, loop, bucles.

Page 21: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

ESTRUCTURAS DE CONTROL REPETITIVAS

Page 22: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Condicion? verdadero

falso

Conjunto de instrucciones

Representación de un ciclo mediante diagrama de flujo.

Page 23: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 24: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Sentencias repetitivas en Perl:

While

Until

For

Foreach

Page 25: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 26: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Sintaxis sentencia While:

Mientras la condición sea verdadera entra al ciclo

While (condicion){

instrucción 1;

instrucción 2;

instrucción N;

}

Page 27: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 28: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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;}

Page 29: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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.

Page 30: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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.

Page 31: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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;}

Page 32: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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;}

Page 33: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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!!!

Page 34: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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.

Page 35: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo
Page 36: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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, .

Page 37: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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.

Page 38: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo
Page 39: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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.

Page 40: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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;

}

Page 41: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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

Page 42: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 43: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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.

Page 44: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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.

Page 45: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo
Page 46: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#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++; }}

Page 47: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 48: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 49: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Sintaxis sentencia for:

for (expresion inicial; condición de repeticion; incremento){

instrucción 1;

instrucción 2;

instrucción N;

}

Page 50: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

Sintaxis sentencia for:

for (expresion inicial; condición de repeticion; incremento){

instrucción 1;

instrucción 2;

instrucción N;

}

Page 51: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/usr/bin/perl#eje13for.plfor ($cont=1 ; $cont <=10 ; $cont++){ print "Valor de cont $cont \n";}#for

Ejemplo 4 for:

Page 52: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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:

Page 53: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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.

Page 54: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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.

Page 55: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#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++; }}

Page 56: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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);

Page 57: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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);

Page 58: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

#!/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

Page 59: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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.

Page 60: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo

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

Page 61: Tercera clase: Control de flujo del programa. - Arreglos. - Control de flujo repetitivo