Адская реализация алгоритма с метками и адским форматированием


Исходный код

int p,k,l,i,j,d,q,R,t,r;
  S1:    s=0; p=1;
  S2:    if (s==0) { i=1; j=n; k=n; l=2*n+1; }
         if (s==1) { i=n+1; j=2*n; k=0; l=n+1; }
         d=1; q=p; r=p;
  S3:    if (x[i]>K>x[j]->K) goto S8;
  S4:    k=k+d; x[k]=x[i]; c[k]=c[i];
  S5:    i+=1; q-=1; if (q>0) goto S3;
  S6:    k+=d; if (k==l) goto S13; else x[k]=x[j];c[k]=c[j];
  S7:    j-=1; r-=1; if (r>0) goto S6; else goto S12;
  S8:    k+=d; x[k]=x[j]; c[k]=c[j];
  S9:    j-=1; r-=1; if (r>0) goto S3;
  S10:   k+=d; if (k==l) goto S13; else x[k]=x[i];c[k]=c[i];
  S11:   i+=1; q-=1; if (q>0) goto S10;
  S12:   q=p; r=p; d=-d; t=k; k=l; l=t; if (j-i<p) goto S10; else goto S3;
  S13:   p+=p; if (p<n) { s=1-s; goto S2; }
         if (s==0) for (t=1; t<=n; t+=1) { x[t]=x[t+n];c[t]=c[t+n] }

Что не так в этом коде

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

Яркий пример того, как делать не надо.

Отличная демонстрация причины, из-за которой Дейкстра придумал структурное программирование.