的时候没够将每一次滑动窗口的结果都归0然后在计算,结果导致结果很大,最大达到了几十万。后来打印的时候才发现自己的思路错了,所以后来觉得可以将每一个串窗计算出来的值存到一个二维数组中,然后打印这个二位数组,在有值的地方将打印出*,没有值的地方就打印空格。
第三题:结合图形和程序回答下面问题:
编程实现DNA序列向蛋白质序列转换,并可视化输出(20)。
一、解题思想
DNA要翻译首先必须的转录成为mRNA,然后再从mRNA翻译为蛋白质序列,并且在在翻表比对,在比对时采用的是if..elsif..else的控制结构,把该结构运用子程序给包含起来。
二、实现过程 核心代码:
for($j=1;$j<=$string_len;$j+=3)
程序代码: #!/usr/bin/perl
open (FILE,\@string =
print\转录后的序列为:\\n\$string=~tr/ATCG/UAGC/;
25
{
$mimazi=substr($string,$j,3);
print $hash{$mimazi};
} print\
print\
%hash=(\\
\UAU\
\UGG\
\CAG\
\,\
\T\
\\
\,\
for($i=1;$i<=$string_len;$i++) {
\
print\以第$i个碱基开始翻译得到的蛋白质序列为:\\n\ for($j=1;$j<=$string_len;$j+=3)
26
{
$mimazi=substr($string,$j,3);
print $hash{$mimazi};
} print\
} 输出结果见图;
图3-1:第3题得测试输出结果
心得体会:
本题一开始的思路就是直接用模式匹配,通过模式匹配,tr转化碱基,先将DNA序列转化为mRNA序列,得到的mRNA序列在通过与对用的氨基酸进行匹配,但是我发现氨基酸太多,这样匹配太复杂,最后决定用哈希表,通过密码子存为键值,而与其对应的值为其对应的氨基酸。这样直接截取转化而来的mRAN截取每三个碱基,然后在哈希表中打印出来。最后终于打印出自己想要的结果来了。
通过这几次的编程实验,其实我发现写程序有思路了之后慢慢写着走,慢慢的思路会越来越清晰。这样最后一定会出来结果的。
27
第四题:采用模块知识优化整理第三题程序,并根据自己经验结合图形和程序概述模块应用的好处和不足之处(20)。
一、解题思想
模块化就是把程序分割成为不同的小模块,然后设置好调用参数和调用关系把各个模块给连接起来实现整个程序的功能。能很好的体现出模块化的程序设计思想,不过为日后的改进打下了便利的基础。
二、实现过程 核心代码:
&trans($strings,$string_len); sub trans() {
for($i=1;$i<=$string_len;$i++) {
print\以第$i个碱基开始翻译得到的蛋白质序列为:\\n\ for($j=1;$j<=$string_len;$j+=3) {
$mimazi=substr($string,$j,3);
print $hash{$mimazi};
} print\
} }
程序代码: #!/usr/bin/perl
open (FILE,\
28
@string =
print\转录后的序列为:\\n\$string=~tr/ATCG/UAGC/; print\
%hash=(\\
\UAU\
\UGG\
\CAG\
\,\
\T\
\\
\,\
29