Introdução à Programação de Computadores para Biologia. Subrotinas

Documentos relacionados
Introdução à Programação de Computadores para Biologia Expressões Regulares "regex" PROBLEMA (11)

Algoritmos e Programação

Programação PERL. Israel Tojal da Silva

Introdução à Programação de Computadores para Biologia. Arrays e Hashes

Introdução à linguagem Perl

Programação em Linguagens de Scripts Aula 12. Prof. Msc. Anderson da Cruz

Introdução à Lógica de Programação Utilizando Perl. Thiago Yukio Kikuchi Oliveira

Algoritmos e Programação

Aula 12: Funções. CI208 - Programação de Computadores. Prof. MSc. Diego Roberto Antunes

Programação de Computadores II

Introdução à Programação em C

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Primeiros programas.

IO.println(a+" * "+b+" = "+produto); } }

++ sobre a linguagem Perl

Introdução a Programação. Tipos Estruturados de Dados

Programação Funcional 9 a Aula Programas interativos

Seleção Múltipla Laços (while, do-while, for) AULA 05

4. Constantes. Constantes pré-definidas

Mais sobre a linguagem Perl

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

Programação I PRG Engenharia de Telecomunicações 2ª Fase Professor: Cleber Jorge Amaral

Entrada e saída. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

Arquivos. Introdução à Programação SI1

Fundamentos de Programação

A sintaxe básica para definir uma função é: function nome_da_função([arg1, arg2, arg3]) { Comandos;... ; [return <valor de retorno>]; }

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Computação 1 - Python Aula 11 - Teórica. programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 29

Instituto de Informática Estrutura de Dados II

Computação I (MAB120) DCC/UFRJ

Estruturas condicionais

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Introdução a Programação de Jogos

Aula de hoje. Funções. Introdução. Função. Definição de funções. Exemplo. SCC Introdução à Programação para Engenharias

Laboratório de Programação 1 Aula 04

Ambiente de Programação, rastreamento e entrada de dados. MCG114 Programação de Computadores I. Interpretador de Comandos. Interpretador de Comandos

MCG126 Programação de Computadores II

Compiladores - JFlex. Fabio Mascarenhas Monday, April 15, 13

Histórico. Perl (Practical Extraction and Report Language). Criada por Larry Wall em 1987.

Programação estruturada no Fortran 90-1

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

Linguagem C. Linguagem artificial e formal usada para comunicar instruções ao computador. Proposta por Dennis Ritchie entre 1969 e 1973.

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

Nesta aula... Diagramas da stack. Recursão. 1 Funções. 2 Valores booleanos e condicionais. 3 Execução condicional e recursão

Python Listas e Strings. Listas 23/11/2016. Por que usar listas? Listas. Listas - Solução. Listas - Problema

Vetores e Strings. printf ("\na string %s nao esta contida no vetor de %s", string, "strings.\n");

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Variáveis primitivas e Controle de fluxo

Aula 11: Modularização

Aula 8 Comandos de Seleção

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Ambiente de desenvolvimento

Aula 06 Introdução à Programação Matrizes

MC-102 Aula 02 Shell Interativa, Programa Básico, Variáveis, Atribuições, Tipos Simples. Instituto de Computação Unicamp

Modularidade - Funções e Procedimentos

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Compiladores - JFlex. Fabio Mascarenhas

Aula 18: Funções em C

Aula 4: Introdução à Linguagem C++

Comandos de Entrada e Saída. Prof. Alberto Costa Neto Programação em Python

Métodos Computacionais em Física

Oficina: Programação para Android com o App Inventor. Profª. Alana Gama Licencianda em Ciências da Computação IF Baiano Campus Senhor do Bonfim

3. Linguagem de Programação C

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Aula 25: Funções com Arrays

Aula 7: Estrutura de Decisão

1/ 26. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função

Scripts Perl. B.1 esearch2id.pl. 1 #!/usr/bin/perl -w. 2 use s t r i c t ; 3 use LWP: : S i m p l e ; # Função get. 5 # Definido a busca

Introdução à Linguagem Lua Variáveis e Expressões

char* prefixo (char* str, int n);

Computação eletrônica:

Organização de programas em Python. Vanessa Braganholo

FUNÇÕES O que são e que servem? Dividir para conquistar! Vantagens.

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Introdução à linguagem C

CURSO B SICO DE PERL

Programação Estruturada

Unidade 5: Introdução à Programação com Python Prof. Daniel Caetano

Arquivos O QUE É, COMO LER E MANIPULAR

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

Computação I - Python Aula 1 - Prática: Primeiros Passos- Função

1/ 23. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m

Introdução ao IDE Netbeans (Programação Java)

Computação 1 - Python Aula 12 - Teórica: Interação com o usuário e programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 25

Listas e Tuplas. Vanessa Braganholo

Algoritmos e Estruturas de Dados I (DCC/003) Variável Indexada Vetor

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias

Parte I. Introdução à Ciência da Computação I Modularização de Programas. SSC ICC1 Teórica

1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas

Introdução à Programação C

Strings e Arrays POO

Linguagem de Programação III

Transcrição:

Introdução à Programação de Computadores para Biologia Subrotinas FUNÇÕES PRÉ-DEFINIDAS Código para realizar uma tarefa específica Exemplos de funções que já vimos $newstring = substr ($str,1,4); @array = split (/\t/,$line); #retorna uma substring #quebra uma linha em um array push (@array, $num); #encaixa uma variável no fim #de um array chop($string); $primeiro = shift(@array); # remove último caracter # remove e retorna o primeiro # elemento de um array 1

FUNÇÕES PRÉ-DEFINIDAS Código para realizar uma tarefa específica Funções tem argumentos e retornam valores $newstring = substr ($str,1,4); Valor retornado: A função substr retorna uma string Argumentos: (STRING, INÍCIO, COMPRIMENTO) Função definida pelo usuário 2

Função definida pelo usuário Organização (manter, atualizar, compar@lhar) Divisão de trabalho (simplificar) sub SUB_NAME { # Fazer alguma coisa sub printhello { print "Hello World!\n"; sub bark { print "Au-Au\n"; Função definida pelo usuário Organização (manter, atualizar, compar@lhar) Divisão de trabalho (simplificar) 3

Definição pelo usuário Em qualquer ponto do script Geralmente, todas juntas, no início ou fim # Sintaxe da definicao de subrotinas, separadas do script principal # Antes de cada subrotina, um comentario detalhado com o nome da subrotina, sua funcao, os inputs e outputs sub subname { # Bloco de comandos para fazer alguma coisa # Nao esquecer a indentacao! Definição pelo usuário Em qualquer ponto do script Geralmente, todas juntas, no início ou fim # Sintaxe da definicao de subrotinas, separadas do script principal # Antes de cada subrotina, um comentario detalhado com o nome da subrotina, sua funcao, os inputs e outputs sub subname { # Bloco de comandos para fazer alguma coisa # Nao esquecer a indentacao! 4

Definição pelo usuário Em qualquer ponto do script Geralmente, todas juntas, no início ou fim # Sintaxe da definicao de subrotinas, separadas do script principal # Antes de cada subrotina, um comentario detalhado com o nome da subrotina, sua funcao, os inputs e outputs sub subname { # Bloco de comandos para fazer alguma coisa # Nao esquecer a indentacao! Chamada da subrotina Em qualquer ponto do script Podem ser passados argumentos A subro@na pode retornar valores subname(); subname($arg, "arg", 1); $res = subname($arg, "arg", 1); @res = subname($arg, "arg", 1); # nao sao passados argumentos # nenhum valor eh retornado # sao passados 3 argumentos # nenhum valor eh retornado # sao passados 3 argumentos # retorna uma escalar # sao passados 3 argumentos # retorna um array 5

Utilização 1. No Eclipse, New > New Perl Project; aula08 2. No Eclipse, New > New Perl File; exemplo01.pl 2. Copiar #exemplo01 da página da disciplina; 3. U@lizar a subro@na em um script; 4. Qual a função da subro@na? Utilização Exemplo1.pl #/usr/bin/perl/ exemplo01(); sub exemplo01 { for ($i = 0; $i < 40; $i++) { $base = int(rand(4)); if ($base == 0) { print "A"; next; if ($base == 1) { print "T"; next; if ($base == 2) { print "C"; next; if ($base == 3) { print "G"; next; print "\n"; 6

Utilização Exemplo1.pl Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Darwin:~ Tatiana$ perl exemplo01.pl >>out.txt Utilização out.txt CAAACCAGCCCTGAGCGTCCGTTTACGAAACGACCGCCCA GTCGTGATCTGTAGATCGTACACGTGCCGCATTTTACAAT GGCCAGACGTGCGAGGAAAGTAGTAAAAGGCGATCTGTTG GATGTTTTAGTCATACCACCGATAGTTTCCTTGATGTCTT TTGGAATAGTATACTGTACGCTATTGCTGAGGTGCCGCCC TTTCTACAACGACTACTACGCCACCACTTCGGCGGGGTGC AATAAGGTCAATAGTGTTGATATTGCCTAATTTCGAAGTC CCCGTTCTGGTGGTCTCTAGCGCGCCCTCGGACGCCGACG AGTTCTTGGCTTCGGTTTGTTTGTCAGATTATGCGATTCA GATAACAACTCGATCCAGTACCTGTACCACGGTAGTCTCC 7

Argumentos No Eclipse, alterar a subro@na para passar como argumento, o tamanho desejado da sequencia; Use a subro@na passando o argumento de 100 nt. Variável @_ recebe os argumentos de subro@nas Argumentos No Eclipse, alterar a subro@na para passar como argumento, o tamanho desejado da sequencia; Use a subro@na passando o argumento de 100 nt. #/usr/bin/perl/ seqaleatoria(100); sub seqaleatoria { $tamanho = $_[0]; for ($i = 0; $i < $tamanho; $i++) { $base = int(rand(4)); if ($base == 0) { print "A"; next; if ($base == 1) { print "T"; next; if ($base == 2) { print "C"; next; if ($base == 3) { print "G"; next; print "\n"; 8

Alguns truques 1. No Eclipse, New > New Perl File; seqaleatoria.pl 2. Copiar #exemplo02 da página da disciplina; 3. Execute o script; 4. Qual a função do comando "$length = shir 40;"? 5. Qual a função do bloco "unless ($i%70) {print"\n";"? Alguns truques seqaleatoria.pl #/usr/bin/perl/ seqaleatoria(200); seqaleatoria(); sub seqaleatoria { $tamanho = shift 40; for ($i = 0; $i < $tamanho; $i++) { unless ($i%70) { print "\n" ; $base = int(rand(4)); if ($base == 0) { print "A"; next; if ($base == 1) { print "T"; next; if ($base == 2) { print "C"; next; if ($base == 3) { print "G"; next; print "\n"; 9

Alguns truques seqaleatoria.pl #/usr/bin/perl/ seqaleatoria(200); sub seqaleatoria { $tamanho = shift 40; for ($i = 0; $i < $tamanho; $i++) { unless ($i%70) { print "\n" ; $base = int(rand(4)); if ($base == 0) { print "A"; next; if ($base == 1) { print "T"; next; if ($base == 2) { print "C"; next; if ($base == 3) { print "G"; next; print "\n"; print vs return 10

print vs return 1. No Eclipse, New > New Perl File; exemplo01.pl 2. Copiar #exemplo03 da página da disciplina. 1. No Eclipse, New > New Perl File; soma.pl 2. Copiar #exemplo03 da página da disciplina. soma(12, 20); sub soma { ($n1, $n2) = @_; $res = $n1 + $n2; print $res; print vs return 11

print vs return E se quisermos u@lizar o valor da soma em outra etapa do script? $valor = soma(12, 20); $resultado = $valor*5; print "$resultado\n"; print vs return E se quisermos u@lizar o valor da soma em outra etapa do script? Alterar a subro@na soma para retornar o valor. $valor = soma(12, 20); $resultado = $valor*5; print "$resultado\n"; 12

print vs return E se quisermos u@lizar o valor da soma em outra etapa do script? Alterar a subro@na soma para retornar o valor. sub soma { ($n1, $n2) = @_; $res = $n1 + $n2; print $res; print vs return E se quisermos u@lizar o valor da soma em outra etapa do script? Alterar a subro@na soma para retornar o valor. $valor = soma(12, 20); $resultado = $valor*5; print "$resultado\n"; sub soma { ($n1, $n2) = @_; $res = $n1 + $n2; return $res; 13

print vs return seqaleatoria.pl #/usr/bin/perl/ seqaleatoria(200); sub seqaleatoria { $tamanho = shift 40; for ($i = 0; $i < $tamanho; $i++) { unless ($i%70) { print "\n" ; $base = int(rand(4)); if ($base == 0) { print "A"; next; if ($base == 1) { print "T"; next; if ($base == 2) { print "C"; next; if ($base == 3) { print "G"; next; print "\n"; print vs return Como u@lizar o resultado da subro@na seqaleatoria em uma segunda etapa do script? Exemplo 04, fazer complemento reverso: ALGORITMO: 1. Gerar sequência aleatória; 2. Inverter a sequência; 3. Gerar o complemento. 14

print vs return Como u@lizar o resultado da subro@na seqaleatoria em uma segunda etapa do script? Exemplo 04, fazer complemento reverso: ALGORITMO: 1. Gerar sequencia aleatória; 2. Inverter a sequencia; 3. Gerar o complemento. Copiar exemplo 4; Alterar a subro@na seqaleatoria para retornar a sequência gerada. comseqaleatoria.pl #/usr/bin/perl/ print vs return # gerar sequencia aleatoria com a subrotina seqaleatoria $tamanho = 200; $sequencia = seqaleatoria($tamanho); # inverter a sequencia $revseq = reverse($sequencia); # gerar o complemento reverso $revseq =~ tr/atcg/atcg/; # imprimir (fasta) print "\>seq\n"; for ($i = 0; $i < $tamanho; $i+=70) { print substr($revseq,$i,70), "\n"; 15

comseqaleatoria.pl print vs return sub seqaleatoria { $seq = ""; $tamanho = shift 40; for ($i = 0; $i < $tamanho; $i++) { $base = int(rand(4)); if ($base == 0) { $seq.= "A"; next; if ($base == 1) { $seq.= "T"; next; if ($base == 2) { $seq.= "C"; next; if ($base == 3) { $seq.= "G"; next; return $seq; Alguns truques 1. No Eclipse, New > New Perl File; local_global.pl 2. Copiar #exemplo05 da página da disciplina 16

GLOBAL vs LOCAL my vs our local_global.pl O que aconteceu com $valor? # $valor como variavel global $valor = 0; print "Antes da subrotina, valor \= $valor.\n"; soma(12, 20); print "Antes da subrotina, valor \= $valor.\n"; sub soma { ($n1, $n2) = @_; $valor = $n1 + $n2; GLOBAL vs LOCAL my vs our local_global.pl O que aconteceu com $valor? # $valor como variavel local $valor = 0; print "Antes da subrotina, valor \= $valor.\n"; soma(12, 20); print "Antes da subrotina, valor \= $valor.\n"; sub soma { ($n1, $n2) = @_; my $valor = $n1 + $n2; 17

Declarando variáveis GLOBAL vs LOCAL my vs our # Declarando variáveis my $x; # OK my $x, $y, $z; # INCORRETO my ( $x, $y, $z ); # OK my $x; my $y; my $z; # OK # Inicializando variáveis my $x = 0; # OK my $x = ""; # OK my $x = my $y = my $z = 0; # OK my $x = my $y = my $z = ""; # OK PERL SCRIPT ESTRUTURA Minha estrutura preferida: #!/caminho/para/perl # cabecalho do script # declaracao e inicializacao de variaveis # captura dos argumentos # corpo do script # subrotinas Ver exemplo06 na página da disciplina; 18

exemplo06: PERL SCRIPT ESTRUTURA ## --------------------------------------------------------------------- ## ## ## ## SCRIPT: seqaleatoria.pl 03.11.2014 ## ## ## ## DESCRIPTION: script para exemplificar subrotinas ## ## ## ## USAGE: perl seqaleatoria.pl ## ## ## ## AUTHOR: Tatiana Torres tttorres at ib.usp.br ## ## ## ## --------------------------------------------------------------------- ## use strict; ## Declaracao de variaveis my $tamanho; my $sequencia; my $revseq; exemplo06: PERL SCRIPT ESTRUTURA ## MAIN ## # criar a sequencia aleatoria $tamanho = 200; $sequencia = seqaleatoria($tamanho); # inverter a sequencia $revseq = reverse($sequencia); # gerar o complemento reverso $revseq =~ tr/atcg/atcg/; # imprimir (fasta) print "\>seq\n"; for (my $i = 0; $i < $tamanho; $i+=70) { print substr($revseq,$i,70), "\n"; 19

exemplo06: PERL SCRIPT ESTRUTURA ## ## ## subrotina para gerar sequencias aleatorias de nucleotideos ## argumento: tamanho da sequencia (numero de nucleotideos) ## retorna: string com uma sequencia aleatoria sub seqaleatoria { my $seq = ""; my $tamanho = shift 40; # default: $tamanho = 40 for (my $i = 0; $i < $tamanho; $i++) { my $base = int(rand(4)); if ($base == 0) { $seq.= "A"; next; if ($base == 1) { $seq.= "T"; next; if ($base == 2) { $seq.= "C"; next; if ($base == 3) { $seq.= "G"; next; return $seq; exemplo06: PERL SCRIPT ESTRUTURA ## ## ## subrotina para gerar sequencias aleatorias de nucleotideos ## argumento: tamanho da sequencia (numero de nucleotideos) ## retorna: string com uma sequencia aleatoria sub seqaleatoria { my $seq = ""; my $tamanho = shift 40; # default: $tamanho = 40 for (my $i = 0; $i < $tamanho; $i++) { my $base = int(rand(4)); if ($base == 0) { $seq.= "A"; next; if ($base == 1) { $seq.= "T"; next; if ($base == 2) { $seq.= "C"; next; if ($base == 3) { $seq.= "G"; next; return $seq; 20

PASSANDO ARGUMENTOS @_ e referências $valor = soma(1,4,6,7,9); Argumentos em @_: $_[0] tem valor 1 $_[1] tem valor 4 $_[2] tem valor 6 $_[3] tem valor 7 $_[4] tem valor 9 PASSANDO ARGUMENTOS @_ e referências $seq = restricao("ecori", "HaeIII", "HindIII"); Argumentos em @_: $_[0] tem valor EcoRI $_[1] tem valor HaeIII $_[2] tem valor HindIII 21

PASSANDO ARGUMENTOS @_ e referências @nome = ("EcoRI", "HaeIII", "HindIII"); @sitio = ("GAATTC", "GGCC", "AAGCTT"); $sequencia = restricao(@nome, @sitio); PASSANDO ARGUMENTOS @_ e referências @nome = ("EcoRI", "HaeIII", "HindIII"); @sitio = ("GAATTC", "GGCC", "AAGCTT"); $sequencia = restricao(@nome, @sitio); Argumentos em @_: $_[0] tem valor EcoRI $_[1] tem valor HaeIII $_[2] tem valor HindIII $_[3] tem valor GAATTC $_[4] tem valor GGCC $_[5] tem valor AAGCTT 22

PASSANDO ARGUMENTOS exemplo07 (solução 1): @_ e referências ## MAIN ## $sequencia = restricao($#nome, @nome, $#sitio, @sitio); ## ## sub restricao { my @nome; my @sitio; my $lastindex = shift; for (my $i = 0; $i <= $lastindex; $i++) { $nome[$i] = shift; $lastindex = shift; for (my $i = 0; $i <= $lastindex; $i++) { $sitio[$i] = shift; # bloco de comandos para usar os arrays PASSANDO ARGUMENTOS @_ e referências exemplo08 (solução 2, passando referencias): ## MAIN ## $sequencia = restricao(\@nome, \@sitio); ## ## sub restricao { my ($ref1, $ref2) = @_; my @a1 = @{$ref1; my @a2 = @{$ref2; # bloco de comandos para usar os arrays print "@nome\n"; print "@sitio\n"; 23

PASSANDO ARGUMENTOS REFERÊNCIAS Passando referência de arrays: subrotina(\@arr); Usando arrays: sub subrotina { my ($arrref) = @_; my @array = @{$arrref; #... Passando referência de hash: subrotina(\%hash); Usando hashes: sub subrotina { my ($hashref) = @_; my %hash = %{$hashref; #... RETORNANDO VARIÁVEIS REFERÊNCIAS Retornando referência de arrays: sub listatel { my @tel; $info[0] = <STDIN>; #nome $info[1]= <STDIN>; #tel return \@info; Retornando referência de hashes: sub listatel { my %info; $info{"nome" = <STDIN>; $info{"tel" = <STDIN>; return \%info; Recuperando arrays no script: my $telref = listatel(); my @tel = @{$telref; Recuperando hashes no script: my $telref = listatel(); my %tel = %{$telref; 24

MÓDULOS Conjunto de subrotinas comseqaleatoria.pl MÓDULOS Conjunto de subrotinas aula08.pm ## Modulo com as minhas subrotinas ## Script para exemplificar subrotinas use strict; use aula08; ## Declaracao de variaveis my $tamanho; my $sequencia; my $revseq; # criar a sequencia aleatoria $tamanho = 200; $sequencia = seqaleatoria($tamanho); # inverter a sequencia $revseq = reverse($sequencia); # gerar o complemento reverso $revseq =~ tr/atcg/atcg/; # imprimir (fasta) print "\>seq\n"; for (my $i = 0; $i < $tamanho; $i+=70) { print substr($revseq,$i,70), "\n"; ## modulo aula08 sub seqaleatoria { sub seqaleatoria { $seq = ""; $tamanho $seq = ""; = shift 40; for $tamanho ($i = = 0; shift $i < $tamanho; 40; $i++) { for ($i $base = 0; = int(rand(4)); $i < $tamanho; $i++) { if $base ($base = int(rand(4)); == 0) { $seq.= "A"; next; if ($base == 1) 0) { $seq.= "T"; "A"; next; if ($base == 2) 1) { $seq.= "C"; "T"; next; if ($base == 3) 2) { $seq.= "G"; "C"; next; if ($base == 3) { $seq.= "G"; next; return $seq; return $seq; sub soma { ($n1, $n2) = @_; $valor = $n1 + $n2; return $valor; 1; 25

comseqaleatoria.pl MÓDULOS Conjunto de subrotinas aula08.pm ## Modulo com as minhas subrotinas ## Script para exemplificar subrotinas use strict; use aula08; ## Declaracao de variaveis my $tamanho; my $sequencia; my $revseq; # criar a sequencia aleatoria $tamanho = 200; $sequencia = seqaleatoria($tamanho); # inverter a sequencia $revseq = reverse($sequencia); # gerar o complemento reverso $revseq =~ tr/atcg/atcg/; # imprimir (fasta) print "\>seq\n"; for (my $i = 0; $i < $tamanho; $i+=70) { print substr($revseq,$i,70), "\n"; ## modulo aula08 sub seqaleatoria { sub seqaleatoria { $seq = ""; $tamanho $seq = ""; = shift 40; for $tamanho ($i = = 0; shift $i < $tamanho; 40; $i++) { for ($i $base = 0; = int(rand(4)); $i < $tamanho; $i++) { if $base ($base = int(rand(4)); == 0) { $seq.= "A"; next; if ($base == 1) 0) { $seq.= "T"; "A"; next; if ($base == 2) 1) { $seq.= "C"; "T"; next; if ($base == 3) 2) { $seq.= "G"; "C"; next; if ($base == 3) { $seq.= "G"; next; return $seq; return $seq; sub soma { ($n1, $n2) = @_; $valor = $n1 + $n2; return $valor; 1; MÓDULOS Conjunto de subrotinas No terminal Darwin:Aula08 Tatiana$ perl seqaleatoria.pl Can't locate aula08.pm in @INC (@INC contains: /Library/ Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 / Network/Library/Perl/5.12/darwin-thread-multi-2level / Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4 / System/Library/Perl/5.12/darwin-thread-multi-2level / System/Library/Perl/5.12 /System/Library/Perl/Extras/ 5.12/darwin-thread-multi-2level /System/Library/Perl/ Extras/5.12.) at seqaleatoria.pl line 16. BEGIN failed--compilation aborted at seqaleatoria.pl line 16. Darwin:Aula08 Tatiana$! 26

MÓDULOS Conjunto de subrotinas No terminal Darwin:Aula08 Tatiana$ perl seqaleatoria.pl Can't locate aula08.pm in @INC (@INC contains: /Library/ Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 / Network/Library/Perl/5.12/darwin-thread-multi-2level / Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4 / System/Library/Perl/5.12/darwin-thread-multi-2level / System/Library/Perl/5.12 /System/Library/Perl/Extras/ 5.12/darwin-thread-multi-2level /System/Library/Perl/ Extras/5.12.) at seqaleatoria.pl line 16. BEGIN failed--compilation aborted at seqaleatoria.pl line 16. Darwin:Aula08 Tatiana$! No terminal MÓDULOS Conjunto de subrotinas Darwin:Aula08 Tatiana$ perl -V ###varias linhas### @INC: /Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12. Darwin:Aula08 Tatiana$! 27

comseqaleatoria.pl MÓDULOS Conjunto de subrotinas aula08.pm ## Modulo com as minhas subrotinas ## Script para exemplificar subrotinas use lib '/Users/Tatiana/eclipse/modulos/'; use strict; use aula08; ## Declaracao de variaveis my $tamanho; my $sequencia; my $revseq; # criar a sequencia aleatoria $tamanho = 200; $sequencia = seqaleatoria($tamanho); # inverter a sequencia $revseq = reverse($sequencia); # gerar o complemento reverso $revseq =~ tr/atcg/atcg/; # imprimir (fasta) print "\>seq\n"; for (my $i = 0; $i < $tamanho; $i+=70) { print substr($revseq,$i,70), "\n"; ## modulo aula08 sub seqaleatoria { sub seqaleatoria { $seq = ""; $tamanho $seq = ""; = shift 40; for $tamanho ($i = = 0; shift $i < $tamanho; 40; $i++) { for ($i $base = 0; = int(rand(4)); $i < $tamanho; $i++) { if $base ($base = int(rand(4)); == 0) { $seq.= "A"; next; if ($base == 1) 0) { $seq.= "T"; "A"; next; if ($base == 2) 1) { $seq.= "C"; "T"; next; if ($base == 3) 2) { $seq.= "G"; "C"; next; if ($base == 3) { $seq.= "G"; next; return $seq; return $seq; sub soma { ($n1, $n2) = @_; $valor = $n1 + $n2; return $valor; 1; Alguns truques 1. No Eclipse, New > New Perl File; testemodulo.pl 2. No Eclipse, New > New Perl File; aula08.pm 3. Alterar o exemplo06 para que as subro@nas sejam transferidas para o modulo aula08.pm 28

comseqaleatoria.pl MÓDULOS Conjunto de subrotinas aula08.pm ## Modulo com as minhas subrotinas ## Script para exemplificar subrotinas use lib qw(/users/tatiana/eclipse/aula08/); use strict; use aula08; ## Declaracao de variaveis my $tamanho; my $sequencia; my $revseq; # criar a sequencia aleatoria $tamanho = 200; $sequencia = seqaleatoria($tamanho); # inverter a sequencia $revseq = reverse($sequencia); # gerar o complemento reverso $revseq =~ tr/atcg/atcg/; # imprimir (fasta) print "\>seq\n"; for (my $i = 0; $i < $tamanho; $i+=70) { print substr($revseq,$i,70), "\n"; ## modulo aula08 sub seqaleatoria { sub seqaleatoria { $seq = ""; $tamanho $seq = ""; = shift 40; for $tamanho ($i = = 0; shift $i < $tamanho; 40; $i++) { for ($i $base = 0; = int(rand(4)); $i < $tamanho; $i++) { if $base ($base = int(rand(4)); == 0) { $seq.= "A"; next; if ($base == 1) 0) { $seq.= "T"; "A"; next; if ($base == 2) 1) { $seq.= "C"; "T"; next; if ($base == 3) 2) { $seq.= "G"; "C"; next; if ($base == 3) { $seq.= "G"; next; return $seq; return $seq; sub soma { ($n1, $n2) = @_; $valor = $n1 + $n2; return $valor; 1; EXERCÍCIOS 1 Fazer uma subro@na para ler arquivos no formato FASTA e uma segunda subro@na para imprimir as sequências também no formato FASTA, mas com o número de caracteres por linha indicado pelo usuário. 2A. Usando o arquivo de saida do blast da aula passada (chom_out_blast_res.txt), fazer um script que imprima os Hits que apresentem Evalue menor que 1e05. Nao imprima somente o BestHit. Use uma subro@na para verificar se o Evalue é menor que 1e05.2. 2B. Mude o script para que o valor limite (máximo) do Evalue a ser selecionado seja passado por parâmetro na chamada do programa. A subro@na deverá retornar a linha com o Hit que foi selecionado. Imprima o Hit fora da subro@na. 3. Combinando 1 e 2. Ler a saída do BLAST e o arquivo de sequências; gerar a tabela com os hits abaixo do Evalue desejado e produzir uma saída com as sequências das queries selecionadas. 29

(0,5 P2) Fazer um SCRIPT para: DESAFIO ENTREGA ATÉ 17/11 (VIA E-MAIL) 1. Ler sequências (e qualidades) no formato FASTA e armazenar em dois hashes: %seq e %qual (subro@na numero 1) 2. Buscar UM sí@o de enzima de restrição indicado pelo usuário em todas as sequências (subro@na numero 2). Armazenar o nome das sequências que possuem o si@o de reconhecimento e sua posição na sequências. 3. Para as sequências COM o sí@o indicado, converter sequências e qualidades no formato FASTA (amazenadas nos hashs %seq e %qual) para formato FASTQ (subro@na numero 3). Gerar um novo arquivo de saída, indicando a posição do sí@o na DESCRIÇÃO da sequencia. Ver descrição de FASTQ e tabela de conversão no WIKIPEDIA. ENTRADA: arquivosequencias.fasta e arquivoqualidades.fasta SAIDA: arquivosequenciascomsi@o.fastq Testem antes de enviar! 30