Software Denk Sport C CPP 1 Auswertung
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (Autor, Normalansicht)

Hinzugefügt: 2a3,4
..nocht nicht fertig, ein wenig geduld bitte noch!!..


Verändert: 14c16
*Schlüsselwort goto
*goto

Hinzugefügt: 21a24,176
*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:

Includes sind weggefallen..

Trivial
..
   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
..
   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:
..
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
..
   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
..
	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
{
    execlp("perl", "-e", "for $i (1..10) { print $i,'\n'; };");
}
Präprozessormakros
..
#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
..
unsigned n = 0;
struct N
{
    N(){std::cout << ++n;}
    ~N(){std::cout << n--;}
};
int main()
{
    N nn[10];
}
..
Sonstiges


StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 6. März 2003 21:45 (diff))
Suchbegriff: gesucht wird
im Titel
im Text