mRNA를 번역하여 아미노산 서열로 번역하기 위해서는 개시코돈을 인식하여 번역을 시작하고, 종결코돈을 인식하여 번역을 끝내야 한다. 우선 개시코돈 AUG를 인식하는 코드를 만들어 보자.
mRNA Seq. 입력 시 개시코돈 인식
먼저 프로그램 상에서 서열을 입력 받기 위한 코드를 작성하자.
#include<stdio.h>
#include<string.h>
main()
{
char Seq[10000] = "\0"; /* 서열을 입력 받을 변수 정의, 입력가능한 bp 수 정의 */
scanf("%s", Seq); /* 서열 입력 */
printf("(1)%s \n", Seq); /* 입력된 서열이 정상적으로 저장되었는지 확인 */
}
여기서 입력가능한 bp 수는 반드시 정의해주어야 한다. 입력하지 않으면 오버플로우가 발생해 이후 제대로 출력이 되지 않을 수 있다.
최대 입력가능한 bp 수를 정의하지 않아 오류난 코드
#include<stdio.h>
#include<string.h>
main()
{
int length;
int i, j, a, k, temp_j, temp_chr;
j = 0, k = 0;
temp_j = 0;
char Seq[] = "\0";
char compare[] = "\0";
char temp_compare_1[] = "\0";
char temp_compare_2[] = " AUG \0";
char *temp_compare_3 = "\0";
char temp_compare_total[] = "\0";
scanf("%s", Seq);
printf("(1)%s \n", Seq);
length = strlen(Seq);
printf("(2)%d \n", length);
strcat(compare, Seq);
printf("(3)%s \n", compare);
for(a = 0; a <= length; a++)
{
if(compare[j] == 'A' && compare[j+1] == 'U' && compare[j+2] == 'G')
{
temp_j = j;
break;
}
else
{
j++;
}
}
if(compare[temp_j] == 'A' && compare[temp_j+1] == 'U' && compare[temp_j+2] == 'G')
{
strncpy(temp_compare_1, compare, temp_j);
temp_compare_3 = strstr(compare, "AUG");
temp_chr = strlen(temp_compare_3);
for(k = 0; k <= temp_chr; k++)
{
temp_compare_3[k] = temp_compare_3[k+3];
}
strcat(temp_compare_total, temp_compare_1);
strcat(temp_compare_total, temp_compare_2);
strcat(temp_compare_total, temp_compare_3);
printf("%s", temp_compare_total);
printf("\n");
printf("M");
}
else
{
printf("%s", compare);
}
printf("\n(4)%d\n", j);
return 0;
}
아래의 입력값과 출력 결과를 보자
입력 | ajkngkjajngkjahngjbanbhjnbhAUGbjmnbghnbhnbghnbhnbhnb |
출력 | (1)ajkngkjajngkjahngjbanbhjnbhAUGbjmnbghnbhnbghnbhnbhnb (2)52 (3)ajkngkjajngkjahngjba4 |
'(3)'을 보면 20번째 서열 이후로는 전혀 다른 문자가 출력되는 것을 볼 수 있다. 즉, 프로그램 상에서 연산하는 과정에서 전혀 다른 문자로 저장되었다고 생각할 수 있다.
서열을 입력 받았으니 이제 입력한 서열의 길이를 변수에 저장하자. 이 변수에 입력한 서열의 길이를 저장하는 이유는 아래의 반복문에서 같이 설명하겠다.
int length;
length = strlen(Seq); /* 입력받은 서열의 길이 */
printf("(2)%d \n", length); /* 길이가 제대로 저장되었는지 확인 */
입력한 서열에서 개시코돈의 위치를 찾는 코드를 작성하자. 앞서 입력한 서열의 길이는 반복문이 몇 회 반복할 지 결정하기 위한 지표로 사용된다. AUG 서열이 있을 수 있는 위치는 ( [입력한 서열의 길이] -2 )개 있다. 그러므로 (length-2)회 동안 코드를 반복하여 AUG 서열의 위치를 확인하고, 없을 경우 반복문을 1회 더 반복하여 입력한 전체 서열을 출력하도록 작성하자. 1
int j, a, temp_j;
for(a = 0; a <= length -1; a++)
{
if(Seq[j] == 'A' && Seq[j+1] == 'U' && Seq[j+2] == 'G') /* 해당 서열이 AUG가 맞는지 확인 */
{
temp_j = j;
break;
}
else if(j <= length -2)
{
j++; /* 해당 서열이 AUG 서열이 아닐 경우 그 다음 서열을 확인 */
}
else
{
printf("%s", Seq); /* 서열 전체에 AUG 서열이 없는 경우 그 전체 서열을 그대로 출력 */
break;
}
}
AUG 서열이 있음을 확인하고, 그 서열의 위치를 찾았을 경우 AUG 서열 양쪽에 '띄어쓰기'를 해주어 입력한 서열 상에서 개시코돈의 위치를 쉽게 확인할 수 있도록 서열을 출력하고, 다음 줄에 메싸이오닌이 출력되도록 코드를 작성하자. 2
int k, temp_chr;
char temp_compare_1[10000] = "\0"; /* 저장가능한 bp 수 */
char temp_compare_2[6] = " AUG ";
char *temp_compare_3 = "\0";
char temp_compare_total[10000] = "\0"; /* 저장가능한 bp 수 */
strncpy(temp_compare_1, Seq, temp_j);
temp_compare_3 = strstr(Seq, "AUG");
temp_chr = strlen(temp_compare_3);
for(k = 0; k <= temp_chr; k++) /* 3번째 서열에서 AUG 지우기 */
{
temp_compare_3[k] = temp_compare_3[k+3];
}
strcat(temp_compare_total, temp_compare_1); /* 서열 합치기 */
strcat(temp_compare_total, temp_compare_2); /* 서열 합치기 */
strcat(temp_compare_total, temp_compare_3); /* 서열 합치기 */
strcat(temp_compare_total, "\0");
printf("%s", temp_compare_total);
printf("\n");
printf("M");
printf("\n");
현재 단계에서 작성한 코드 결과물
현재 단계에서 작성한 코드 결과물
#include<stdio.h>
#include<string.h>
main()
{
int length;
int j, a, k, temp_j, temp_chr;
j = 0, k = 0;
temp_j = 0;
char Seq[10000] = "\0"; /* 입력가능한 BP 수 */
char temp_compare_1[10000] = "\0"; /* 저장가능한 BP 수 */
char temp_compare_2[6] = " AUG ";
char *temp_compare_3 = "\0";
char temp_compare_total[10000] = "\0"; /* 저장가능한 BP 수 */
scanf("%s", Seq);
printf("(1)%s \n", Seq);
length = strlen(Seq);
printf("(2)%d \n", length);
for(a = 0; a <= length -1; a++)
{
if(Seq[j] == 'A' && Seq[j+1] == 'U' && Seq[j+2] == 'G')
{
temp_j = j;
strncpy(temp_compare_1, Seq, temp_j);
temp_compare_3 = strstr(Seq, "AUG");
temp_chr = strlen(temp_compare_3);
for(k = 0; k <= temp_chr; k++)
{
temp_compare_3[k] = temp_compare_3[k+3];
}
strcat(temp_compare_total, temp_compare_1);
strcat(temp_compare_total, temp_compare_2);
strcat(temp_compare_total, temp_compare_3);
strcat(temp_compare_total, "\0");
printf("%s", temp_compare_total);
printf("\n");
printf("M");
printf("\n");
break;
}
else if(j <= length -2)
{
j++;
}
else
{
printf("%s", Seq);
}
}
printf("\n(4)%d\n", j);
return 0;
}
입력 | ajkngkjajngkjahngjbanbhjnbhAUGbjmnbghnbhnbghnbhnbhnb |
출력 | (1)ajkngkjajngkjahngjbanbhjnbhAUGbjmnbghnbhnbghnbhnbhnb (2)52 ajkngkjajngkjahngjbanbhjnbh AUG bjmnbghnbhnbghnbhnbhnb M (4)27 |
'프로젝트 > 개인 프로젝트' 카테고리의 다른 글
Central Dogma C프로그램(5)_개시코돈 인식 후 번역 (0) | 2022.03.30 |
---|---|
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 |
Central Dogma C프로그램(1)_코돈 입력 시 아미노산 출력 (0) | 2021.11.11 |