Member 13525452 Ответов: 4

Проблема трансляции ДНК на языке C++


Я пытаюсь создать программу, которая может взять шаблон ДНК и показать последовательность аминокислот, которая образуется после транскрипции и трансляции
Это работает, но только для 3 баз. Я бы хотел, чтобы он работал на как можно большем количестве баз.
Вот что у меня есть:

Что я уже пробовал:

#include <iostream>
#include 
#include <string>

using namespace std;

typedef std::map<std::string, std::string> TStrStrMap;
typedef std::pair<std::string, std::string> dnaTemplatePair;

int main(int argc, char *argv[])
{
	TStrStrMap oMap;

	oMap.insert(dnaTemplatePair("TTT", "Phe"));
	oMap.insert(dnaTemplatePair("TTC", "Phe"));
	oMap.insert(dnaTemplatePair("TTA", "Leu"));
	oMap.insert(dnaTemplatePair("TTG", "Leu"));
	oMap.insert(dnaTemplatePair("TCT", "Ser"));
	oMap.insert(dnaTemplatePair("TCC", "Ser"));
	oMap.insert(dnaTemplatePair("TCA", "Ser"));
	oMap.insert(dnaTemplatePair("TCG", "Ser"));
	oMap.insert(dnaTemplatePair("TAT", "Tyr"));
	oMap.insert(dnaTemplatePair("TAC", "Tyr"));
	oMap.insert(dnaTemplatePair("TAA", "STOP"));
	oMap.insert(dnaTemplatePair("TAG", "STOP"));
	oMap.insert(dnaTemplatePair("TGT", "Cys"));
	oMap.insert(dnaTemplatePair("TGC", "Cys"));
	oMap.insert(dnaTemplatePair("TGA", "STOP"));
	oMap.insert(dnaTemplatePair("TGG", "Trp"));
	oMap.insert(dnaTemplatePair("CTT", "Leu"));
	oMap.insert(dnaTemplatePair("CTC", "Leu"));
	oMap.insert(dnaTemplatePair("CTA", "Leu"));
	oMap.insert(dnaTemplatePair("CTG", "Leu"));
	oMap.insert(dnaTemplatePair("CCT", "Pro"));
	oMap.insert(dnaTemplatePair("CCC", "Pro"));
	oMap.insert(dnaTemplatePair("CCA", "Pro"));
	oMap.insert(dnaTemplatePair("CCG", "Pro"));
	oMap.insert(dnaTemplatePair("CAT", "His"));
	oMap.insert(dnaTemplatePair("CAC", "His"));
	oMap.insert(dnaTemplatePair("CAA", "Gln"));
	oMap.insert(dnaTemplatePair("CAG", "Gln"));
	oMap.insert(dnaTemplatePair("CGU", "Arg"));
	oMap.insert(dnaTemplatePair("CGC", "Arg"));
	oMap.insert(dnaTemplatePair("CGA", "Arg"));
	oMap.insert(dnaTemplatePair("CGG", "Arg"));
	oMap.insert(dnaTemplatePair("ATT", "Ile"));
	oMap.insert(dnaTemplatePair("ATC", "Ile"));
	oMap.insert(dnaTemplatePair("ATA", "Ile"));
	oMap.insert(dnaTemplatePair("ATG", "Met"));
	oMap.insert(dnaTemplatePair("ACT", "Thr"));
	oMap.insert(dnaTemplatePair("ACC", "Thr"));
	oMap.insert(dnaTemplatePair("ACA", "Thr"));
	oMap.insert(dnaTemplatePair("ACG", "Thr"));
	oMap.insert(dnaTemplatePair("AAT", "Asn"));
	oMap.insert(dnaTemplatePair("AAC", "Asn"));
	oMap.insert(dnaTemplatePair("AAA", "Lys"));
	oMap.insert(dnaTemplatePair("AAG", "Lys"));
	oMap.insert(dnaTemplatePair("AGT", "Ser"));
	oMap.insert(dnaTemplatePair("AGC", "Ser"));
	oMap.insert(dnaTemplatePair("AGA", "Arg"));
	oMap.insert(dnaTemplatePair("AGG", "Arg"));
	oMap.insert(dnaTemplatePair("GTT", "Val"));
	oMap.insert(dnaTemplatePair("GTC", "Val"));
	oMap.insert(dnaTemplatePair("GTA", "Val"));
	oMap.insert(dnaTemplatePair("GTG", "Val"));
	oMap.insert(dnaTemplatePair("GCT", "Ala"));
	oMap.insert(dnaTemplatePair("GCC", "Ala"));
	oMap.insert(dnaTemplatePair("GCA", "Ala"));
	oMap.insert(dnaTemplatePair("GCG", "Ala"));
	oMap.insert(dnaTemplatePair("GAT", "Asp"));
	oMap.insert(dnaTemplatePair("GAC", "Asp"));
	oMap.insert(dnaTemplatePair("GAA", "Glu"));
	oMap.insert(dnaTemplatePair("GAG", "Glu"));
	oMap.insert(dnaTemplatePair("GGT", "Gly"));
	oMap.insert(dnaTemplatePair("GGC", "Gly"));
	oMap.insert(dnaTemplatePair("GGA", "Gly"));
	oMap.insert(dnaTemplatePair("GGG", "Gly"));
	std::string dnaTemplate;
	std:: cout << "Enter DNA Template: " << std::endl;;
	std:: cin >> dnaTemplate;

	std::string strValue = oMap[dnaTemplate];
	if(strValue!="")
	{
			std::cout << "The Amino Acid Sequence will be: " << strValue << endl;
	}
	else
	{
		TStrStrMap::iterator p;
					bool bFound=false;

			for(p = oMap.begin(); p!=oMap.end(); ++p)
			{
					std::string strKey;
					strValue = dnaTemplate;
					strKey= p->second;
					if( strValue == strKey)
					{

							std::cout << "The Amino Acid Sequence will be: " << p->first << std::endl;
							bFound = true;
					}
			}

			if(!bFound)
			{
					std::cout << "Look at your DNA Template again, and try again." << std::endl;
			}
	}
	return 0;

}

phil.o

У вас есть карта, которая связывает последовательности оснований с соответствующими аминокислотами. Вы просто должны квалифицировать свою карту с более крупными базами-последовательностями.
Я подозреваю, что это скорее проблема генной инженерии, чем проблема кодирования.

Member 13525452

Как же так? ДНК рандомизирована и состоит из пар оснований. Выполнение каждой отдельной комбинации, которую может иметь шаблон ДНК, и внесение ее в карту заняло бы целую вечность.

phil.o

Я это понимаю. Но тогда я не понимаю Вашего заявления о том, что вы хотели бы, чтобы он работал с как можно большим количеством баз. Вы говорите о количестве баз в ключах карты? В чем именно заключается вопрос? Вы можете найти множество примеров кода, которые позволят вам найти все возможные последовательности (комбинации) оснований определенной длины, но тогда вам придется как-то связать их с аминокислотой или стоп-кодоном.
Или, может быть, вы просто имеете в виду, что шаблон ДНК может быть больше 3, и вы хотите разделить его на 3-базовые куски?
Пожалуйста, уточните.

Member 13525452

Я просто прокомментировал ниже и объяснил это, но чтобы ответить на второй вопрос. Да, вход может быть больше 3, и я хочу, чтобы он был разделен на 3-базовые "куски"."

Bernhard Hiller

В чем твоя проблема? Вам просто нужно перебрать входные данные в джанках из 3-х оснований, найти аминокислоту для триплета, взять следующий триплет и т. д.
Только позже вы будете думать о стартовых и стоп-кодонах и еще более сложных случаях последовательностей вокруг стартового кодона, сплайсинга ...

Member 13525452

Поэтому просто для того, чтобы прояснить все, я приведу пример. Если я должен был ввести ATGTTTGCGTGT, то я хочу вывести последовательность белка. Так что эта последовательность будет встречена-Phe-Ala-Cys. Моя программа может принимать на вход только 3 базы, так что только ATG, например, и тогда она будет выводить Met.

4 Ответов

Рейтинг:
1

Mikhail Semenov

Вы должны сделать что-то подобное:

int n = dnaTemplate.size()-2;
for (int i = 0; i < n; i+=3)
{
   std::string triplet = s.substr(i, 3);
   std::string aminoacid = oMap[triplet];
   ...
}


Member 13525452

Куда бы я это поместил?

Mikhail Semenov

После того, как вы получите свой шаблон.Вместо... вы кладете печать своей аминокислоты и дополнительную обработку, если хотите.

Member 13525452

Не могли бы вы быть немного конкретнее? Итак, сразу после if(strValue!="") ?

Рейтинг:
0

KarstenK

Вам нужно найти и получить какую-то базу данных (интернет, коллеги или школы), а затем написать какой-то код для работы с ней. Это кусок пирога.


Рейтинг:
0

Mikhail Semenov

Нет, сразу после этого

std:: cin >> dnaTemplate;


Линия
std::string strValue = oMap[dnaTemplate];


это неверно: вы пытаетесь использовать всю строку в качестве индекса на карте. Вы должны использовать по одному триплету за раз.


Member 13525452

Итак, что такое s.substr, это не распознается.

Рейтинг:
0

Mikhail Semenov

Извините, моя нмистейка:

int n = dnaTemplate.size()-2;
for (int i = 0; i < n; i+=3)
{
   std::string triplet = dnaTemplate.substr(i, 3);
   std::string aminoacid = oMap[triplet];
   ...
}


Mikomike123453

Эй, я завел новый счет. Будет ли это так?

#include <iostream>
#включать
#include <string>

использование пространства имен std;

определение типа СТД::МАП&ЛТ;СТД::строка, СТД::строка&ГТ; TStrStrMap;
оператор typedef с std::пара&ЛТ;СТД::строка, СТД::строка&ГТ; dnaTemplatePair;

int main(int argc, char *argv[])
{
TStrStrMap oMap;

oMap.insert(dnaTemplatePair("TTT", "Phe"));
oMap.insert(dnaTemplatePair("TTC", "Phe"));
oMap.insert(dnaTemplatePair("TTA", "Leu"));
oMap.insert(dnaTemplatePair("TTG", "Leu"));
oMap.insert(dnaTemplatePair("TCT", "Ser"));
oMap.insert(dnaTemplatePair("TCC", "Ser"));
oMap.insert(dnaTemplatePair("TCA", "Ser"));
oMap.insert(dnaTemplatePair("TCG", "Ser"));
oMap.insert(dnaTemplatePair("TAT", "Tyr"));
oMap.insert(dnaTemplatePair("TAC", "Tyr"));
oMap.insert(dnaTemplatePair("TAA", "STOP"));
oMap.insert(dnaTemplatePair("TAG", "STOP"));
oMap.insert(dnaTemplatePair("TGT", "Cys"));
oMap.insert(dnaTemplatePair("TGC", "Cys"));
oMap.insert(dnaTemplatePair("TGA", "STOP"));
oMap.insert(dnaTemplatePair("TGG", "Trp"));
oMap.insert(dnaTemplatePair("CTT", "Leu"));
oMap.insert(dnaTemplatePair("CTC", "Leu"));
oMap.insert(dnaTemplatePair("CTA", "Leu"));
oMap.insert(dnaTemplatePair("CTG", "Leu"));
oMap.insert(dnaTemplatePair("CCT", "Pro"));
oMap.insert(dnaTemplatePair("CCC", "Pro"));
oMap.insert(dnaTemplatePair("CCA", "Pro"));
oMap.insert(dnaTemplatePair("CCG", "Pro"));
oMap.insert(dnaTemplatePair("CAT", "His"));
oMap.insert(dnaTemplatePair("CAC", "His"));
oMap.insert(dnaTemplatePair("CAA", "Gln"));
oMap.insert(dnaTemplatePair("CAG", "Gln"));
oMap.insert(dnaTemplatePair("CGU", "Arg"));
oMap.insert(dnaTemplatePair("CGC", "Arg"));
oMap.insert(dnaTemplatePair("CGA", "Arg"));
oMap.insert(dnaTemplatePair("CGG", "Arg"));
oMap.insert(dnaTemplatePair("ATT", "Ile"));
oMap.insert(dnaTemplatePair("ATC", "Ile"));
oMap.insert(dnaTemplatePair("ATA", "Ile"));
oMap.insert(dnaTemplatePair("ATG", "Met"));
oMap.insert(dnaTemplatePair("ACT", "Thr"));
oMap.insert(dnaTemplatePair("ACC", "Thr"));
oMap.insert(dnaTemplatePair("ACA", "Thr"));
oMap.insert(dnaTemplatePair("ACG", "Thr"));
oMap.insert(dnaTemplatePair("AAT", "Asn"));
oMap.insert(dnaTemplatePair("AAC", "Asn"));
oMap.insert(dnaTemplatePair("AAA", "Lys"));
oMap.insert(dnaTemplatePair("AAG", "Lys"));
oMap.insert(dnaTemplatePair("AGT", "Ser"));
oMap.insert(dnaTemplatePair("AGC", "Ser"));
oMap.insert(dnaTemplatePair("AGA", "Arg"));
oMap.insert(dnaTemplatePair("AGG", "Arg"));
oMap.insert(dnaTemplatePair("GTT", "Val"));
oMap.insert(dnaTemplatePair("GTC", "Val"));
oMap.insert(dnaTemplatePair("GTA", "Val"));
oMap.insert(dnaTemplatePair("GTG", "Val"));
oMap.insert(dnaTemplatePair("GCT", "Ala"));
oMap.insert(dnaTemplatePair("GCC", "Ala"));
oMap.insert(dnaTemplatePair("GCA", "Ala"));
oMap.insert(dnaTemplatePair("GCG", "Ala"));
oMap.insert(dnaTemplatePair("GAT", "Asp"));
oMap.insert(dnaTemplatePair("GAC", "Asp"));
oMap.insert(dnaTemplatePair("GAA", "Glu"));
oMap.insert(dnaTemplatePair("кляп", "Glu"));
oMap.insert(dnaTemplatePair("GGT", "Gly"));
oMap.insert(dnaTemplatePair("GGC", "Gly"));
oMap.insert(dnaTemplatePair("GGA", "Gly"));
oMap.insert(dnaTemplatePair("GGG", "Gly"));
std::строка dnaTemplate;
std:: cout << "введите шаблон ДНК:" << std::endl;;
std:: cin >> dnaTemplate;
инт Н = dnaTemplate.размер()-2;
для (int i = 0; i < n; i+=3)
{
std::string triplet = dnaTemplate.substr(i, 3);
std::string strValue = oMap[триплет];
если(strValue!="")
}
{
с std::соиь <&ЛТ; "аминокислотной последовательностью будет:" &ЛТ;&ЛТ; strValue на << епси;
}
еще
{
TStrStrMap::итератор p;
bool bFound=false;

для(Р = омап.начать(); Р!=омап.конец(); ++Р)
{
std::string strKey;
strValue = dnaTemplate;
strKey= p->Второй;
if( strValue == strKey)
{

std::cout << "последовательность аминокислот