mRNA Seq.의 번역 결과를 저장하기 위한 함수 translation_codon 작성
앞서 작성한 함수 translation_codon을 그대로 사용했다. 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
void translation_codon( char *mRNAseq, int temp_i )
{
int i=0, j; // 반복문 매개변수
int temp;
int x=10, y=10, z=10; // codon 매개변수
i=temp_i;
if(temp_i > strlen(mRNAseq) ) {
printf("Error: Not found initiation code");
exit(0);
}
/* AUG를 인식하지 않으면 번역하지 않도록 하는 키
제거해도 코드의 동작에는 오류가 없다. */
while ( i<strlen(mRNAseq) )
{
if( mRNAseq[i] != '\0' )
{
for(j = 0; j < 3 ; j++)
{
if(mRNAseq[i] == 'U') {
temp = 0;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else if(mRNAseq[i] == 'C') {
temp = 1;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else if(mRNAseq[i] == 'A') {
temp = 2;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else if(mRNAseq[i] == 'G') {
temp = 3;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else { printf("ERORR_CODE_%d잘못된 입력입니다.\n다시 입력해주십시오.\n", i); }
i++;
}
if(x>3 || y > 3 || z > 3 ) {
printf("\nERORR_CODE_123잘못된 입력입니다.\n다시 입력해주십시오.\n");
printf("%d %d %d\n", x, y, z);
}
else {
strcat( AA_seq[0].Amino_seq, codon_table_2[x][y][z] );
strcat( AA_seq[0].Amino_seq, " \0");
strcat( AA_seq[1].Amino_seq, codon_table_3[x][y][z] );
strcat( AA_seq[1].Amino_seq, " \0");
strcat( AA_seq[2].Amino_seq, codon_table_1[x][y][z] );
strcat( AA_seq[2].Amino_seq, " \0");
}
}
else { break; }
}
printf("\n");
}
|
cs |
번역의 시작을 알려주기 위한 함수 find_AUG 작성
개시코돈을 찾기 위해 함수 find_AUG를 작성했다. 함수 find_AUG는 입력받은 mRNA 서열을 앞에서부터 하나하나 조사하여 개시코돈 AUG를 찾아 개시코돈의 위치를 정수형(int형) 값으로 반환한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
int find_AUG ( char *mRNAseq )
{
int i;
int AUG_slot = 0;
for( i=0; i<strlen(mRNAseq)+1; i++ ) {
if( mRNAseq != '\0' ) {
if( mRNAseq[i] == 'A' && mRNAseq[i+1] == 'U' && mRNAseq[i+2] == 'G' ){ return AUG_slot; }
else{ AUG_slot++; }
}
else {
return AUG_slot;
}
}
}
|
cs |
코드 설명
4: AUG의 위치를 저장하기 위해 변수 AUG_slot을 선언하고, 변수의 값을 0으로 초기화한다.
6~10: 반복문을 이용해 mRNAseq로 입력받은 서열을 앞에서부터 하나하나 조사하여 개시코돈 AUG를 찾는다.
8: 개시코돈 AUG를 찾으면 AUG_slot을 반환한다.
9: 개시코돈 AUG가 아닌 경우 AUG_slot의 값을 1 증가시킨다.
11~13: 개시코돈 AUG를 찾지 못하면 AUG_slot을 반환한다.
main 함수 작성
함수 find_AUG를 작성했으므로 개시코돈을 인식하여 개시코돈의 위치를 함수 translation_codon으로 보내는 기능을 수행할 수 있도록 main 함수를 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
main()
{
int temp_taa, temp_AUG_slot;
char mRNA_seq[10000] = "\0";
printf("입력 예시: UUU (#주의# 코돈 입력은 반드시 대문자로 해주세요.)\n");
printf("출력 예시: %c \n", codon_table_2[0][0][0][0]);
printf("U = 0, C = 1, A = 2, G = 3\n코돈 입력\n>>> ");
scanf("%s", mRNA_seq);
temp_AUG_slot = find_AUG( mRNA_seq );
translation_codon( mRNA_seq, temp_AUG_slot );
printf("숫자를 입력하세요\n 0 입력: 아미노산 한 글자로 출력\n 1 입력: 아미노산 세 글자로 출력\n>>> ");
scanf("%d", &temp_taa);
printf("mRNA Seq. 출력\n>>> %s\n", AA_seq[2].Amino_seq);
printf("translation\n>>> %s\n", AA_seq[temp_taa].Amino_seq);
return 0;
}
|
cs |
코드 설명
6~8: mRNA Seq. 입력을 설명한다.
9: mRNA Seq.를 입력받는다.
11~12: 개시코돈을 인식하고, 개시코돈의 위치를 함수 translation_codon에 입력하여 개시코돈부터 번역을 시작하도록 한다.
14~15: 번역의 결과로 나타나는 아미노산 서열의 출력 방법을 나타낸다.
16: mRNA Seq. 중 번역이 진행되는 부분만을 출력한다.
17: 번역의 결과로 나타나는 아미노산 서열을 출력한다.
현재 단계에서 작성한 코드 결과물
현재 단계에서 작성한 코드 결과물
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
// 배열 및 구조체 선언부
char codon_table_1[4][4][4][4] = {
{ {"UUU", "UUC", "UUA", "UUG"}, {"UCU", "UCC", "UCA", "UCG"}, {"UAU", "UAC", "UAA", "UAG"}, {"UGU", "UGC", "UGA", "UGG"} },
{ {"CUU", "CUC", "CUA", "CUG"}, {"CCU", "CCC", "CCA", "CCG"}, {"CAU", "CAC", "CAA", "CAG"}, {"CGU", "CGC", "CGA", "CGG"} },
{ {"AUU", "AUC", "AUA", "AUG"}, {"ACU", "ACC", "ACA", "ACG"}, {"AAU", "AAC", "AAA", "AAG"}, {"AGU", "AGC", "AGA", "AGG"} },
{ {"GUU", "GUC", "GUA", "GUG"}, {"GCU", "GCC", "GCA", "GCG"}, {"GAU", "GAC", "GAA", "GAG"}, {"GGU", "GGC", "GGA", "GGG"} }
};
char codon_table_2[4][4][4][5] = {
{ {"F", "F", "L", "L"}, {"S", "S", "S", "S"}, {"Y", "Y", "stop", "stop"}, {"C", "C", "stop", "W"} },
{ {"L", "L", "L", "L"}, {"P", "P", "P", "P"}, {"H", "H", "Q", "Q"}, {"R", "R", "R", "R"} },
{ {"I", "I", "I", "M"}, {"T", "T", "T", "T"}, {"N", "N", "K", "K"}, {"S", "S", "R", "R"} },
{ {"V", "V", "V", "V"}, {"A", "A", "A", "A"}, {"D", "D", "E", "E"}, {"G", "G", "G", "G"} }
};
char codon_table_3[4][4][4][5] = {
{ {"Phe", "Phe", "Leu", "Leu"}, {"Ser", "Ser", "Ser", "Ser"}, {"Tyr", "Tyr", "stop", "stop"}, {"Cys", "Cys", "stop", "Trp"} },
{ {"Leu", "Leu", "Leu", "Leu"}, {"Pro", "Pro", "Pro", "Pro"}, {"His", "His", "Gln", "Gln"}, {"Arg", "Arg", "Arg", "Arg"} },
{ {"Ile", "Ile", "Ile", "Met"}, {"Thr", "Thr", "Thr", "Thr"}, {"Asn", "Asn", "Lys", "Lys"}, {"Ser", "Ser", "Arg", "Arg"} },
{ {"Val", "Val", "Val", "Val"}, {"Ala", "Ala", "Ala", "Ala"}, {"Asp", "Asp", "Glu", "Glu"}, {"Gly", "Gly", "Gly", "Gly"} }
};
struct Amino_Acid {
char Amino_seq[20000];
} AA_seq[3];
/* AA_seq[0]는 1약자
AA_seq[1]은 3약자
AA_seq[2]는 코돈 단위로 분리한 서열 */
// 전역변수 선언부
// 함수 선언부
void translation_codon( char *mRNAseq, int temp_i );
int find_AUG ( char *mRNAseq );
main()
{
int temp_taa, temp_AUG_slot;
char mRNA_seq[10000] = "\0";
printf("입력 예시: UUU (#주의# 코돈 입력은 반드시 대문자로 해주세요.)\n");
printf("출력 예시: %c \n", codon_table_2[0][0][0][0]);
printf("U = 0, C = 1, A = 2, G = 3\n코돈 입력\n>>> ");
scanf("%s", mRNA_seq);
temp_AUG_slot = find_AUG( mRNA_seq );
translation_codon( mRNA_seq, temp_AUG_slot );
printf("숫자를 입력하세요\n 0 입력: 아미노산 한 글자로 출력\n 1 입력: 아미노산 세 글자로 출력\n>>> ");
scanf("%d", &temp_taa);
printf("mRNA Seq. 출력\n>>> %s\n", AA_seq[2].Amino_seq);
printf("translation\n>>> %s\n", AA_seq[temp_taa].Amino_seq);
return 0;
}
void translation_codon( char *mRNAseq, int temp_i )
{
int i=0, j; // 반복문 매개변수
int temp;
int x=10, y=10, z=10; // codon 매개변수
i=temp_i;
if(temp_i > strlen(mRNAseq) ) {
printf("Error: Not found initiation code");
exit(0);
}
/* AUG를 인식하지 않으면 번역하지 않도록 하는 키
제거해도 코드의 동작에는 오류가 없다. */
while ( i<strlen(mRNAseq) )
{
if( mRNAseq[i] != '\0' )
{
for(j = 0; j < 3 ; j++)
{
if(mRNAseq[i] == 'U') {
temp = 0;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else if(mRNAseq[i] == 'C') {
temp = 1;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else if(mRNAseq[i] == 'A') {
temp = 2;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else if(mRNAseq[i] == 'G') {
temp = 3;
if(j == 0) { x = temp; }
else if(j == 1) { y = temp; }
else if(j == 2) { z = temp; }
else { printf("코드에 오류가 있습니다.\n"); }
}
else { printf("ERORR_CODE_%d잘못된 입력입니다.\n다시 입력해주십시오.\n", i); }
i++;
}
if(x>3 || y > 3 || z > 3 ) {
printf("ERORR_CODE_123잘못된 입력입니다.\n다시 입력해주십시오.\n");
printf("%d %d %d\n", x, y, z);
}
else {
strcat( AA_seq[0].Amino_seq, codon_table_2[x][y][z] );
strcat( AA_seq[0].Amino_seq, " \0");
strcat( AA_seq[1].Amino_seq, codon_table_3[x][y][z] );
strcat( AA_seq[1].Amino_seq, " \0");
strcat( AA_seq[2].Amino_seq, codon_table_1[x][y][z] );
strcat( AA_seq[2].Amino_seq, " \0");
}
}
else { break; }
}
printf("\n");
}
int find_AUG ( char *mRNAseq )
{
int i;
int AUG_slot = 0;
for( i=0; i<strlen(mRNAseq)+1; i++ ) {
if( mRNAseq != '\0' ) {
if( mRNAseq[i] == 'A' && mRNAseq[i+1] == 'U' && mRNAseq[i+2] == 'G' ){ return AUG_slot; }
else{ AUG_slot++; }
}
else {
return AUG_slot;
}
}
}
'프로젝트 > 개인 프로젝트' 카테고리의 다른 글
[간단 코드] 좌석 예약(1) (0) | 2024.01.04 |
---|---|
Central Dogma C프로그램(6)_종결 코돈 인식 후 번역 종료 (0) | 2022.04.05 |
Central Dogma C프로그램(4)_임의의 서열 삽입 (0) | 2022.02.20 |
Central Dogma C프로그램(3)_mRNA Seq. 입력 시 아미노산 서열 단순 출력 (0) | 2022.01.20 |
Central Dogma C프로그램(2.1)_mRNA Seq. 입력 시 개시코돈 인식 ver.2 (0) | 2022.01.18 |