Да, если Вы выбрали учебник (пособие) по тому или иному языку, либо по программированию на базе того или иного языка. Я напомню, что в основе программы лежит алгоритм (чаще - набор алгоритмов). Умение программировать включает в себя умение строить алгоритмы. Но алгоритм не зависит от языка программирования, поскольку любая программа - всего лишь запись алгоритма по правилам той или иной системы программирования. С Д.Кнутом, боюсь, Вы если и справитесь, то уже не в этой жизни - слишком академичен этот труд для решения повседневных задачек.
Ищите книги, где говорится о методах и методиках создания алгоритмов. Познакомьтесь с информационными структурами, чтобы знать, какие из стандартных структур могут быть применены в Вашей практике.
И еще, если Вы выбрали синтаксис языка Турбо Паскаль, вряд ли наш форум будет Вам полезен. Здесь PascalАВС.NЕТ: мы не хотим мириться с технологиями программирования полувековой давности.
Вот так можно с файлами. На экран тоже дублируется.
var
MT := Dict(KV('C', 12.0096),
KV('O', 15.99903),
KV('H', 1.00811));// Таблица Менделеева (сокращённая версия)
function Mass(mol: string): real;
begin
result := 0;
foreach var atom: char in mol do
begin
var a := atom.ToUpper;
if a in MT then
result += MT[a];
end;
end;
begin
var smiles := ReadAllLines('file_SMILES.txt');
var res := OpenWrite('file_SMILES_results.txt');
var i := 0;
while i < smiles.Length do
begin
var num := smiles[i];
var mol := smiles[i + 1];
var s := $'{num,4}: {mol,60} ({Mass(mol):f7}) ';
s.Println;
res.Writeln(s);
i += 2;
end;
res.Close();
end.
Что тут можно менять:
Саму таблицу Менделеева, разумеется
В строке var s := $'{num,4}: {mol,60} ({Mass(mol):f7}) '; числа 4 и 60 – для выравнивания. Их можно или вообще убрать (вместе с запятыми), или поменять под собственные нужды. Число 7 в {Mass(mol):f7} – количество знаков дробной части массы.
Как-то так. А заняться Вам лучше (как мне кажется) не Кнутом, а скачать бесплатные книжки с сайта PascalABC.NET, прямо с главной страницы внизу. В данном состоянии они Вам будут полезнее
Уважаемые коллеги, спасибо вам за ответы. Это действительно всё интересно. Книги я с сайта скачал и очень внимательно прочитал. Именно про них я и писал: они дают полную информацию о стркутуре языка, но не позволяют развить ту самую “извилину програмиста” которая позволяет во всем этом массиве ориентироваться.
Большое спасибо за новый код. Я постараюсь его пошагово разобрать.
Приведённый мной файл -это не код. Это описание молекул.
Вроде да. Я так понял, что это не школьная химическая формула, типа H2SO4. А цифры указывают номер атома. Если я неправ, то надо переделывать программу.
- В этой квартире раньше жил химик, - говорит хозяин молодому человеку,
который хочет снять у него квартиру.
- Он постоянно экспериментировал и как раз в этой комнате.
- А-а... Вероятно, пятно на потолке - это результат его экспериментов?
- Нет, это сам химик.
...Что смешно: те лекарства, что подробно делаем, точно выдерживая технологию,
сами и глотаем. А потом слышны медицинские крики — как же, точно по формуле
СН3СОС2Н5 плюс метилхлотилгидрат на пару — не помогает, а точно такая же
швейцарская сволочь эту бациллу берет. Опять проверяем СН3СОС2Н5 на пару — не берет,
и, что особенно противно, название у них одинаковые.
(М. Жванецкий)
Рад, что задача заинтересовала вас.
Чтоб избежать повторений, я предлагаю ознакомиться с описанием принципа построения формулу по ссылке, которую я дал в самом начале.
Особенно обратите внимание на раздел “Основные принципы построения SMILES”.
Это машинное описание структурной формулы молекулы. Химическая формула данного вещества значительно проще. Теоретически, имеет смысл попробовать машинно переводить СМАЙЛы в нормальные формулы и считать уже их…
А нельзя попроще этот вопрос решить для начала. Ну например, та же формула
COC1=C2C3=C(C(=O)CC3)C(=O)OC2=C4C5C=COC5OC4=C1 - я в ней вижу 17 “углеродиков” и 6 “кислородиков” - их там на самом деле столько? Или все же циферки какую-то еще кратность подразумевают? Ну просто можете, как пример, эту формулу расписать (без умножения на атомные веса, конечно)? Потом можно будет по Вашей росписи проверить свое понимание “Основных принципов…”
Вот в Интернете я сервис нашел, который обозвал это все C17H12O6 [312.278 gr/mol]
Прочитал я про этот SMILIS - еще тот, простите мой плохой французский, геморрой. Одна светлая голова решила сэкономить и исключить из описания атомы водорода, считая, что специалисту они “и так понятно где и сколько”. В результате, чтобы всего лишь определить, а сколько все же там атомов водорода, надо раскручивать граф, отягченный различными придумками в виде дополнительных ограничителей и символов. В целом - задачка ну очень на любителя, у которого полно времени и желания изучать вузовские основы органической химии.
А вообще, предложена весьма нетривиальная задача,
Вполне вероятно, что наряду со смайлами должна быть и обычная или брутто-формула.
Иначе мы все тут сдохнем.
Вы всё правильно написали, но на данном этапе можно обойтись без водорода, оставив только углерод, кислород и уникальные компоненты. мне нужно молекулы ранжировать по массе, а задача в построении адекватной пространственной структуры не стоит.
Не понял. Если неизвестно, сколько в молекуле атомов водорода (а их же там не одинаково), Вы получите неверную массу и ранжирование будет некорректным. Это первое. Второе. Если бы Вы дали файл с полным списком SMILES, можно было бы для начала выловить все уникальные элементы, чтобы понять, какие атомные массы нужны, а не вбивать всю таблицу Менделеева.