Проблема трансляции ДНК на языке 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.