2.2、对1中编写的程序采用子程序进行优化,并阐述子程序输入输出和内部算法实现的理由和心得(10分)。
一、解题思想
本做法主要是对于题2.1中运用子程序进行优化……,并且采用子程序的实现也有利于提高代码的可读性。
二、实现过程: 核心代码:
while ( ( $foundAt = index( $string,$tags,$offset ) ) > -1 ) {
$positions{ $foundAt } = $label++; $offset = $foundAt + 1; } print\
foreach ( 0 .. length( $string ) - 1 ) {
print $positions{ $_ } ? \ }
print \
foreach ( 0 .. length( $string ) - 1 ) {
print $positions{ $_ } ? $positions{ $_ } : \ } } 程序代码:
#!/usr/bin/perl
print\上传序列文件到d:盘中的perl下面,输入序列的文件名:\\n\$b=
open(FILE,\while(
chomp;
$string .=$_; }
print\
print \输入你想查找的酶切位点:\\n\chomp($tags=
print \我们将标记每一个酶切位点$tags:\\n\print\
10
&meiqie_site($string,$tags); sub meiqie_site {
my($strings,$tags)=@_; my $foundAt = 1; my $offset = 0; my $label = 1;
while ( ( $foundAt = index( $string,$tags,$offset ) ) > -1 ) {
$positions{ $foundAt } = $label++; $offset = $foundAt + 1; } print\
foreach ( 0 .. length( $string ) - 1 ) {
print $positions{ $_ } ? \ }
print \
foreach ( 0 .. length( $string ) - 1 ) {
print $positions{ $_ } ? $positions{ $_ } : \ } }
测试结果输出见图2-2:
图2-2:子程序优化2-1题测试输出 心得体会:
11
当然第一题如果做出来了的话,这道题就简单多了,只需要加一个子程序,通过对子程序的调用,将需要的参数传进去就好了,其他的什么也不用做。但是在做这道题的时候还是改了很久。因为做第一题的很多地方都不是很人性化,所以就加了一些个人的元素进去,能够自动的上传文档,然后就可以对任意序列进行分析。
2.3、进一步完善上面的程序,编写的系列酶切酶管理程序,实现酶切酶信息的添加、删除和修改,并简述理由和心得(20分)。
一、解题思想
本题中的要求实现添加、删显示功能,该子程序通过两层的循环实现二维数组的输出。count功能,该子程序使用index函数和while循环来实现位点信的不断循环运行,并提示用户可以通过相应的操作来退出程序。 二、实现过程: 核心代码:
if($c==1) {
print\输入你想增加的酶切位点名字:\\n\ chomp($d=
print\输入对应的酶切位点的序列:\\n\ chomp($e=
print\加入的酶切位点为:\\n\ $name{\
while(($f,$num)=each (%name)) {
$m=&meiqie_site($string,$num); printf(\ $f $num \\n\}
print\ goto here; }
elsif($c==2) {
print\输入你想修改的酶切位点名字:\\n\ chomp($d=
print\输入想改的酶切位点的序列是:\\n\ chomp($e=
print\修改后的酶切位点:\\n\ $name{\
while(($f,$num)=each (%name))
12
{
$m=&meiqie_site($string,$num); printf(\ $f $num \\n\}
print\ goto here; }
elsif($c==3) {
print\输入你想删除的酶切位点名字:\\n\ chomp($d=
print\输入删除的酶切位点的序列:\\n\ chomp($e=
print\删除后酶切位点结果为:\\n\ delete($name{\
while(($f,$num)=each (%name)) {
$m=&meiqie_site($string,$num); printf(\ $f $num \\n\}
print\ goto here; }
if($c==4) {
print\显示所有的酶切位点:\\n\ foreach (keys %hash) { $i++; print \ \\n\ }
while(($f,$num)=each (%name)) {
$m=&meiqie_site($string,$num); printf(\ $f $num \\n\ }
print\ goto here; }
if($c==5)
13
{
print\退出系统,谢谢使用!\}
程序代码:
#!/usr/bin/perl
print\上传序列文件到d:盘中的perl下面,输入序列的文件名:\\n\$b=
open(FILE,\while(
chomp;
$string .=$_; }
print\
print\欢迎来到酶切位点管理系统!\\n\ my %hash=(\=>\=>\=>\=>\=>\=>\
my @Tagged =keys %hash; #存放酶切位点的键值 $i=-1; here:
print\输入1增加酶切位点;\\n\print\输入2修改酶切位点;\\n\print\输入3删除酶切位点;\\n\
print\输入4显示所有的酶切位点;\\n\print\输入5推出酶切位点管理系统\\n\print\选择你需要的服务序号(1-5):\\n\chomp($c=
print\输入你想增加的酶切位点名字:\\n\ chomp($d=
print\输入对应的酶切位点的序列:\\n\ chomp($e=
print\加入的酶切位点为:\\n\ $name{\
while(($f,$num)=each (%name)) {
$m=&meiqie_site($string,$num); printf(\ $f $num \\n\}
print\
14