相補配列の翻訳
 

Study C販売のご案内
Study Cのオンライン販売を行っております。
是非ご利用ください。

 今回は塩基配列のそうほ配列を翻訳してアミノ酸配列を生成するプログラムを作成します。
DNA塩基配列から相補配列を生成」と「アミノ酸配列表記の変換」を合成すればよいだけですが、両者ともサブルーチン(関数)の形になっていないのでそのまま合成するのは難しいと思います。 まずは、相補配列を取得するサブルーチンを作成します。

                                                                               
#include <stdio.h>

char	*get_complement(char *str);

main()
{
	char	*str;

	str = "acgtaaccggttatgctata";
	printf("%s\n", str);
	printf("%s\n", get_complement(str));
}


char	*get_complement(char *str)
{
	static char
		result[100];
	char	ch;
	int	i, j, len;

	len = strlen(str);
	j = 0;
	for (i = 0; ; i++) {
		if(*(str+i) == '\0')
			break;
		ch = *(str+(len-i-1));
		switch(ch){
		case 'a': ch = 't'; break;
		case 'A': ch = 'T'; break;
		case 'g': ch = 'c'; break;
		case 'G': ch = 'C'; break;
		case 'c': ch = 'g'; break;
		case 'C': ch = 'G'; break;
		case 't': ch = 'a'; break;
		case 'T': ch = 'A'; break;
		}
		result[j++] = ch;
	}
	result[j] = '\0';
	return(result);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...

 このプログラムは、相補配列の結果をresultという固定サイズの配列にセットしています。 実用で使う場合には、malloc()関数などで必要なサイズの領域を確保するように変更したほうがよいでしょう。

 相補配列の取得結果をアミノ酸配列に変換するように変更したのが次のプログラムです。

                                                                               
#include <stdio.h>

char	*trans_tbl[4] = {
	 	"FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",
		"TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG",
		"TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG",
		"TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG"
	};


char	*get_complement(char *str);

main()
{
	char	*str, *seq;
	int	i1;
	char	cno1, cno2, cno3;
	int	conv;

	str = "acgtaaccggttatgctata";
	printf("%s\n", str);
	seq = get_complement(str);

	for(;;){
		cno1 = *seq;
		cno2 = *(seq+1);
		cno3 = *(seq+2);
		if(cno1 == '\0' || cno2 == '\0' || cno3 == '\0')
			break;

		if(cno1 >= 'a' && cno1 <= 'z'){
			cno1 = cno1 - 'a' + 'A';
		}
		if(cno2 >= 'a' && cno2 <= 'z'){
			cno2 = cno2 - 'a' + 'A';
		}
		if(cno3 >= 'a' && cno3 <= 'z'){
			cno3 = cno3 - 'a' + 'A';
		}
		conv = '*';
		for(i1 = 0; i1 < 64; i1++){
			if(trans_tbl[1][i1] == cno1 &&
			   trans_tbl[2][i1] == cno2 &&
			   trans_tbl[3][i1] == cno3){
				conv = trans_tbl[0][i1];
				break;
			}
		}
		putchar(conv);
		seq += 3;
	}
}


char	*get_complement(char *str)
{
	static char
		result[100];
	char	ch;
	int	i, j, len;

	len = strlen(str);
	j = 0;
	for (i = 0; ; i++) {
		if(*(str+i) == '\0')
			break;
		ch = *(str+(len-i-1));
		switch(ch){
		case 'a': ch = 't'; break;
		case 'A': ch = 'T'; break;
		case 'g': ch = 'c'; break;
		case 'G': ch = 'C'; break;
		case 'c': ch = 'g'; break;
		case 'C': ch = 'G'; break;
		case 't': ch = 'a'; break;
		case 'T': ch = 'A'; break;
		}
		result[j++] = ch;
	}
	result[j] = '\0';
	return(result);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...

実用で使う場合には、アミノ酸配列への変更もサブルーチン化したほうがよいと思います。

お問い合わせ先 バイオインフォマティクスのページに戻る Copyright(C) 2003 潟Iーキッド