Skip to content

// turn the page

hackers_smПреди време се увличах от програмиране. Беше ми нещо като хоби – не прекалено сериозно, но и доста над ниво “Hello world”. После химията ме дръпна и от години (няма да кажа колко) не съм писал нито ред код. Сега разглеждам свои стари сорсове, опитвам да ги разгадая и разбирам защо е трябвало да включвам поне малко коментари в тях. Това което днес ти се струва очевидно, след години може да изглежда неразбираемо и като че ли писано от съвършено различен човек. Мислех да направя скромен принос към издателското увлечение на адаша с някои примерни сорсове на прогамки с химична насоченост, но май първо трябва да добавя коментарите които някога съм пропуснал.

Ето, например, тази рекурсивна функция от програма за изчисляване на молекулни маси по зададена формула (низ) с произволно ниво на влагане на скоби:

float MMass(char *s) {

   static int err= 0;
   static byte i = 0;
          float m= 0.0;
          TSymRec sym;

      while (s[i]) {
         sym = ResolveSym(s, i);
         if (!(strncmp(sym.s, "(", strlen(sym.s)))) {
            ++err;
            m += MMass(s);
         } else if (!(strncmp(sym.s, ")", strlen(sym.s)))) {
                   --err;
                   if (err>=0) return m*sym.n;
                          else return -1.0;
                } else
                  m += massof(sym.s)*sym.n;
      }
      if (err) return -1.0;
          else return m;
}

Доста дивене падна докато разгадая собствените си някогашни мисли. Започвам да се разколебвам дали наистина трябва да предлагам подобни неща с образователна цел … и въобще, не е ли по-добре тази страница от увлеченията ми да си остане затворена?

float MMass(char *s) {

static int err= 0;

static byte i = 0;

float m= 0.0;

TSymRec sym;

while (s[i]) {

sym = ResolveSym(s, i);

if (!(strncmp(sym.s, “(“, strlen(sym.s)))) {

++err;

m += MMass(s);

} else if (!(strncmp(sym.s, “)”, strlen(sym.s)))) {

–err;

if (err>=0) return m*sym.n;

else return -1.0;

} else

m += massof(sym.s)*sym.n;

}

if (err) return -1.0;

else return m;

}

4 Comments