..nocht nicht fertig, ein wenig geduld bitte noch!!.. |
*Schlüsselwort goto |
*goto |
*Sonstiges Includes sind weggefallen.. ==Trivial== [[Code] .. printf("1 2 3 4 5 6 7 8 9 10\n"); printf("10 9 8 7 6 5 4 3 2 1\n"); .. ] ==Wörtlich== [[Code] .. printf("Alle ganzen Zahlen von 1 bis 10\n"); printf("Alle ganzen Zahlen von 10 bis 1\n"); .. ] ==Noch Wörtlicher== Z.B. auf Briefpapier: [[Code] .. ein Programm in C oder C++, ohne die Schlüsselworte "for", "do" und "while" zu benutzen, das folgendes ausgibt: *Alle ganzen Zahlen von 1 bis 10 *Alle ganzen Zahlen von 10 bis 1 .. ] ==goto== [[Code] .. printf("Alle ganzen Zahlen von 1 bis 10\n"); printf("Alle ganzen Zahlen von 10 bis 1\n"); .. ] ==Rekursion (Funktion)== ==Rekursion (Programm)== ==Callbacks== ==Eingebettete andere Sprache== [[Code] .. volatile unsigned long esps; volatile char* szFmt = "%i "; volatile char* szNl = "\n"; printf("Von Jirka Klaue\n"); _asm{ jmp progstart; // zum programmanfang (asm) /* Neue linie anfangen */ newline: mov esps, esp; // sp sichern mov edx, szNl; // 1. Parameter für printf push edx; call printf; // printf aufrufen mov esp, esps; // sp widerherstellen ret; // zurück /* Programmstartpunkt */ progstart: /* Raufzählen */ mov ecx, 10; // für loop (10x) mov eax, 0; // zählregister uploop: inc eax; // zähler inkrementieren push ecx; // zähler und loopregister sichern push eax; mov esps, esp; // sp sichern push eax; // 2. Parameter für printf push szFmt; // 1. Parameter für printf call printf; // Ausgabe mov esp, esps; // sp widerherstellen pop eax; // zähler und loopregister widerherstellen pop ecx; loop uploop; // ecx dekrementieren und wenn nicht 0, dann nochmals call newline; // Neue Zeile beginnen /* Runterzählen */ mov ecx, 10; // für loop (10x) downloop: push ecx; // zähler sichern mov esps, esp; // sp sichern push ecx; // 2.Parameter für printf push szFmt; // 1. Parameter für printf call printf; // Ausgabe mov esp, esps; // sp widerherstellen pop ecx; // zähler widerherstellen loop downloop; // ecx dekrementieren und wenn nicht 0, dann nochmals call newline; // Neue Zeile beginnen } } .. ] ==Aufruf externer Programme== [[Code] { execlp("perl", "-e", "for $i (1..10) { print $i,'\n'; };"); } ] ==Präprozessormakros== [[Code] .. #define FO(x) fo##x void main() { int i; FO(r)( i=1 ; i<=10 ; ++i) printf("%d ",i); printf("\n"); FO(r)( i=10 ; i>0 ; --i) printf("%d ",i); } .. ] ==Konstruktor / Destruktor== [[Code] .. unsigned n = 0; struct N { N(){std::cout << ++n;} ~N(){std::cout << n--;} }; int main() { N nn[10]; } .. ] ==Sonstiges== |
Auswertung | ![]() |
..nocht nicht fertig, ein wenig geduld bitte noch!!..
Ursprung der Aufgabe war einst ein Thread aus einer englischen NG, bei der es um Einstellungstest ging. Aufgeschnappt hat sie Ulrich Eckhardt, einen ehemaligen Arbeitskollegen von mir. Nochmal Danke Uli!!. Es gab ja wirklich einige wunderbar quergedachte Lösungen. Neben denen unter SoftwareDenkSport C CPP 1 habe ich auch einige Lösungen per Mail bekommen.
Ich habe versucht die Lösungen ein wenig zu unterteilen nach:
Trivial | ![]() |
![]() |
|
Wörtlich | ![]() |
![]() |
|
Noch Wörtlicher | ![]() |
![]() |
|
goto | ![]() |
![]() |
|
Rekursion (Funktion) | ![]() |
Rekursion (Programm) | ![]() |
Callbacks | ![]() |
Eingebettete andere Sprache | ![]() |
![]() |
|
Aufruf externer Programme | ![]() |
![]() |
|
Präprozessormakros | ![]() |
![]() |
|
Konstruktor / Destruktor | ![]() |
![]() |
|
Sonstiges | ![]() |