mRNA Seq. 내부에 새로운 서열을 삽입하여 새로운 mRNA Seq.를 만드는 프로그램을 작성해보자. 아래 그림은 해당 단계에서 작성한 코드를 표현하는 순서도이다.
순서도
서열 삽입을 위한 함수 insert_seq 작성
서열을 삽입하는 기능을 구현하기 위해 함수 insert_seq를 정의하였다. 함수를 간단히 소개하자면 문자열 s2를 문자열 s1의 temp 자리에 삽입하여 s1에 저장하는 기능을 한다. 이를 위해 더미 서열을 만들어 s1에 삽입한 다음, 더미 서열과 중복된 s1의 서열을 본래 삽입하려던 서열인 s2로 치환한다. 아래는 함수 insert_seq의 코드와 그에 대한 설명이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 17 18 19 20 |
#include <stdio.h>
#include <string.h>
void insert_seq (char *s1, char *s2, int temp);
int main() { } void insert_seq (char *s1, char *s2, int temp)
{
int k;
char temp_s[100] = "\0";
k = strlen(s2)-temp;
if(k>=0) { strcat(temp_s, s1); }
memmove(temp_s+k, s1, strlen(s1));
memmove(s1+temp, temp_s, strlen(temp_s));
memmove(s1+temp, s2, strlen(s2));
}
|
cs |
코드 설명
1~2: 헤더파일 선언
4: 함수 insert_seq 선언
6~9: main 함수
11~20: 함수 insert_seq를 정의하는 코드 블록
13: 더미 서열의 길이를 저장하기 위한 int형 변수 k를 선언한다.
14: 더미 서열을 입력받기 위한 char형 배열 temp_s를 선언한다. 더미 서열을 입력받은 temp_s는 (더미 서열)+(s1의 temp 위치 이하 서열)로 구성된다.
15: 더미 서열의 용도는 s1의 서열에 s2의 서열을 삽입했을 때, s1의 서열이 소실되지 않도록 하기 위함이다. 즉, 더미 서열까지는 어떤 문자열이 오든 상관이 없으며, 더미 서열 이후로 오는 s1 서열의 뒷부분이 배열 temp_s의 뒷부분에 포함되어야 한다. 이때, temp는 s2 서열을 삽입하기 위한 s1의 위치, 즉 index value를 결정한다. 그러므로 temp_s의 길이는 s2 서열의 길이와 s1의 temp 위치 이하 서열의 길이의 합과 같으며, s1의 temp 위치부터 더미 서열이 시작된다. 또한 더미 서열은 s1 서열의 일부를 사용하여 만들기에 s1의 temp 위치를 기준으로 앞의 서열을 s2 서열의 길이만큼 늘려줘야한다. 이때, 늘려주는 길이가 곧 더미 서열의 길이이므로 더미 서열의 길이는 문자열 s2의 길이에 변수 temp 값을 빼준 값과 같다. 1
이 값이 음수로 나오는 경우에는 s1 서열의 앞부분부터 그 값의 절댓값만큼의 길이를 제거한다고 생각하면 음수인 경우에도 여전히 성립한다. 값을 구했으므로 더미 서열의 길이를 저장하기 위해 변수 k에 문자열 s2의 길이에 변수 temp 값을 뺀 정수형 값을 저장해준다.
16~17: k가 양수인지 아닌지를 판단하여 if문의 코드 블록의 수행 여부를 결정한다. k의 값이 양수인 경우, 더미 서열이 필요하므로 temp_s에 s1 서열을 입력한 다음, temp_s의 k 위치부터 s1 서열을 입력하여 더미 서열을 입력한다. k의 값이 음수인 경우, 더미 서열이 필요하지 않으므로 temp_s에 s1 서열의 앞부분을 (-k)만큼 제거하여 입력한다.
18: s1에 더미 서열과 temp 위치 이하의 s1 서열을 입력받는다.
19: 배열 s1에 입력받은 더미 서열을 배열 s2에 저장되어 있는 서열로 치환한다.
현재 단계에서 작성한 함수 insert_seq의 코드 결과물
현재 단계에서 작성한 함수 insert_seq의 코드 결과물
#include <stdio.h>
#include <string.h>
void insert_seq (char *s1, char *s2, int temp);
void insert_seq (char *s1, char *s2, int temp)
{
int k;
char temp_s[100] = "\0";
k = strlen(s2)-temp;
if(k>=0) { strcat(temp_s, s1); }
memmove(temp_s+k, s1, strlen(s1));
memmove(s1+temp, temp_s, strlen(temp_s));
memmove(s1+temp, s2, strlen(s2));
}
main 함수 작성
함수 insert_seq를 작성했으므로 원하는 기능을 수행할 수 있도록 main 함수를 작성해보자. 함수 insert_seq에는 주 서열과 보조 서열, 서열의 입력 위치를 결정하는 세 가지 변수가 필요하므로 main 함수는 이를 위한 세 가지 변수를 이용해 서열의 입출력을 받으며, 삽입을 제어한다. 아래는 main 함수 코드와 그에 대한 설명이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
int main()
{
int temp; // 삽입 위치
char s1[1000]="\0"; // 주 서열
char s2[100]="\0"; // 보조 서열
printf("주 서열: ");
scanf("%s", s1);
printf("삽입 서열: ");
scanf("%s", s2);
printf("삽입 위치: ");
scanf("%d", &temp);
insert_seq(s1, s2, temp);
printf("%s", s1);
return 0;
}
|
cs |
코드 설명
3: 삽입 위치를 입력받기 위한 int형 변수 temp를 선언한다.
4: 주 서열을 입력받기 위한 char형 배열 s1을 선언한다.
5: 주 서열에 삽입할 서열을 입력받기 위한 char형 배열 s2를 선언한다.
6~7: 주 서열을 입력받아 배열 s1에 저장한다.
8~9: 삽입할 서열을 입력받아 배열 s2에 저장한다.
10~11: 삽입할 위치를 입력받아 변수 temp에 저장한다.
13: 함수 insert_seq를 호출하여 배열 s1에 배열 s2를 삽입하여 배열 s1을 저장한다. 이때, 삽입하는 위치는 배열 s1의 index value가 temp인 지점이다.
14: 결과로 나타나는 배열 s1을 문자열의 형태로 출력한다.
현재 단계에서 작성한 코드 결과물
현재 단계에서 작성한 코드 결과물
#include <stdio.h>
#include <string.h>
void insert(char *s1 ,char *s2, int temp);
int main()
{
int temp; // 삽입 위치
char s1[1000]="\0"; // 주 서열
char s2[100]="\0"; // 보조 서열
printf("주 서열: ");
scanf("%s", s1);
printf("삽입 서열: ");
scanf("%s", s2);
printf("삽입 위치: ");
scanf("%d", &temp);
insert(s1, s2, temp);
printf("%s", s1);
return 0;
}
void insert (char *s1, char *s2, int temp)
{
int k;
char temp_s[100] = "\0";
k = strlen(s2)-temp;
if(k>=0) { strcat(temp_s, s1); }
memmove(temp_s+k, s1, strlen(s1));
memmove(s1+temp, temp_s, strlen(temp_s));
memmove(s1+temp, s2, strlen(s2));
}
- 아래 그림을 통해 설명을 이해하기 바란다.
'프로젝트 > 개인 프로젝트' 카테고리의 다른 글
Central Dogma C프로그램(6)_종결 코돈 인식 후 번역 종료 (0) | 2022.04.05 |
---|---|
Central Dogma C프로그램(5)_개시코돈 인식 후 번역 (0) | 2022.03.30 |
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프로그램(2)_mRNA Seq. 입력 시 개시코돈 인식 (0) | 2021.11.25 |