[43m  /////////-----------------------------------------------------\\\\\\\\\  [40m
[43m /////////-------------------------------------------------------\\\\\\\\\ [40m
[43m/////////                                                         \\\\\\\\\[40m
[43m|||||||||                      C-KURS                             |||||||||[40m
[43m\\\\\\\\\                                                         /////////[40m
[43m \\\\\\\\\-------------------------------------------------------///////// [40m
[43m  \\\\\\\\\-----------------------------------------------------/////////  [40m

 Hallo !

 Hier habe ich ein kleines Programm, in dem ein Fehler versteckt ist.
Probier mal, ihn zu finden. Schau dabei auf die Uhr. Wenn Du es unter einer
halben Stunde schaffst, so bist Du ziemlich gut.

 Dieses Programm ist eine Schweinerei. Ich sage dies an dieser Stelle,
weil Jochen ziemlich entrüstet war, als ich ihm das Programm mit der
Bemerkung, ich würde es auf der GetiT veröffentlichen, zuschickte. In
diesem Programm ist ( absichtlich ! ) kein Kommentar, ( absichtlich ! )
kein Struktur, ( absichtlich ! ) Variablennamen ohne Sinn.
 Ich glaube aber, daß jedem bekannt sein sollte, daß genau dies der Stil
ist, wie man [4;1mnicht[0m programmieren sollte. Und wenn Du versuchst,
den Fehler zu finden, so wirst Du spätestens dann einsehen, daß es keinen
Grund auf der Welt gibt, so zu programmieren.

 Zuerst wollte ich ja keinen Preis aussetzen. Aber da ich davon ausgehe,
daß die Zuschriften sowieso ausbleiben, werde ich es doch machen. Okay,
großartig ist er nicht, aber immerhin !
1. Preis : eine Tüte Gummibärchen.

 Gewinner/in ist der/die, die/der mir die erste richtige Lösung schickt.
Adresse : Peter Fischer
          RP.-Ebert-Str. 6
          3257 Springe 1
Natürlich kannst Du mich auch anrufen : 05041/63565. Und im Z-Netz bin ich
jetzt auch erreichbar, unter PETER_FISCHER@OLN.ZER.

Okay, hier nun das Programm :

 1 /*----------------------------------------------------------------------*/
 2
 3 #include "stdio.h"
 4
 5 #define TWENTYNINE 29
 6
 7 long l1,L1,ll,h_1,q,h1,h;
 8 main()
 9 { for (putchar(putchar((h
10        =7)*10+2)
11        +TWENTYNINE);
12        ll?putchar(ll):!h_1;
13        putchar(l1),L1==2?l1=' ':0 )
14   { L1++==0?(l1=ll=54<<1):
15             l1=='l'&&L1<3?(l1+=1L|1L<<1L,ll=0):
16             L1=sizeof(L1)&&l1==' '?(l1=19+h1):
17             (q-=h1);
18             L1==5?l1-=8:q&& & 
19     h_1; L1==sizeof(l1)+2?
20              (l1+=3):1L;l1==(h<<4)+2
21              &&L1!=6?(l1=l1-
22     6):(h1=100L);L1!=1L<<3?q--
23              :(h_1=l1=h1);
24   }
25   putchar('\n');
26 }
27
28 /*-----------------------------------------------------------------------*/

Zeilenummern nur zur Übersicht, Quelltext ( ohne Icon ) unter
Superprogramm.c !

Um die Sache nicht zu schwer zu machen, gebe ich auch noch den Fehler an,
der durch das Programm ( in dieser Form ) produziert wird :

Aztec C68K 3.6a  12-18-87  (C) 1982-1987 by Manx Software Systems, Inc.
            (q-=h1);
                    ^
Superprogramm.c:17: ERROR 51: lvalue required:

Und noch ein Tip : Der Fehler liegt nicht an der Stelle, an die der Pfeil
zeigt.

Diese [42mPerversität allererster Kajüte[40m stammt [1mNICHT[0m von mir. Soweit ich weiß,
war dies ein Beispielprogramm in der angesehenen Zeitschrift BYTE dafür,
wie schlimm man in `C' programmieren kann. ( Und, wenn ich mich nicht
täusche, von einem Modula-Programmierer geschrieben. ) Ich würde sagen : 
In dieser Hinsicht sehr gelungen, das Programm.  Was mich aber sehr zum 
Nachdenken anregt, ist die Tatsache, daß dieses Programm von einem
Nicht-C-Programmierer verfaßt wurde.

 Viel Spaß beim Rätseln

                            Peter.


PS : Unter MS-DOS war dieses Programm ein Test für die C-Compiler. Der 
DeSmet, den wir auf der Uni benutzen, war nicht dazu zu bewegen, dies
Programm zu compilieren. Auch unter CP/M hatten einige Compiler so ihre
Schwierigkeiten mit dem Ding. Der Aztec schluckt es ohne Probleme, wenn
der Fehler raus ist !

----------------------------------------------------------------------
Wenn ich hier schon zitiert werde, dann muß ich mich auch
dazu äußern! Mein Kommentar (Jochen!):

Ich glaube, ich muß da doch einge Mißverständnisse klären:

1. Man kann in jeder Sprache einen 'Mist' verzapfen.

2. Ich hab' auch schon lesbare Programme in C gesehen.
   Deshalb solltest Du nicht glauben, ich sei der Meinung,
   daß das Problem an der Sprache läge.

3. Wer sich in seiner Freizeit mit solchem Schwachsinn die
   Zeit stehlen läßt, ist selbst Schuld.

4. Ernsthafte Programmierung ist auf Servicefreundlichkeit
   und Wartbarkeit von Programmen angelegt. Da lohnt sich
   die Beschäftigung. Deshalb würde ich es viel lieber
   sehen, wenn Du Dich mit diesem Gedanken mehr beschäftigen
   würdest.

5. Wenn Du unbedingt Schwachsinn willst, hier hab' ich noch
   ein Exemplar aus der hiesigen Mailbox (soll ein Labyrinth
   erzeugen - Kompletter Text im Ordner DFÜ/Programme):

#include <stdio.h>
#include <stdlib.h>

char*M,A,Z,E=40,J[40],T[40];main(C){for(*J=A=scanf(M="%d",&C);
--            E;             J[              E]             =T
[E   ]=  E)   printf("._");  for(;(A-=Z=!Z)  ||  (printf("\n|"
)    ,   A    =              39              ,C             --
)    ;   Z    ||    printf   (M   ))M[Z]=Z[A-(E   =A[J-Z])&&!C
&    A   ==             T[                                  A]
|6<<11<rand()||!C&!Z?J[T[E]=T[A]]=E,J[T[A]=A-Z]=A,"_.":" |"];}

Also, nix für ungut, aber ich seh' lieber sinnvolle
Programme!
                    Gruß!
                            Jochen für A.I.T. (6-12-89)
