Hilfe bei Anagrammm-Programm!!!
-
Dies ist zwar kein C-Code, sollte aber schnell von dir dorthin
übersetzt werden können.Ein bißchen unfair, weil man ein Makro-Guru sein müßte, um das durch den
Compiler zu bekommen (wenn es überhaupt geht, aus : ein { zu machen).
Fairer wäre sowas:#include <stdio.h> #define begin { #define end } #define for(var, start, end) for(int var = start; var <= end; var++) #define print(str) printf("%s\n", str) int main(int ac, char **av) { char text[3] = {'a', 'b', 'c'}; char buf[4] = {0, 0, 0, 0}; for(i, 0, 2) begin buf[0] = text[i]; for(j, 0, 2) begin if (buf[0] == text[j]) continue; buf[1] = text[j]; for(k, 0, 2) begin if (buf[0] == text[k] || buf[1] == text[k]) continue; buf[2] = text[k]; print(buf); end end end return 0; }
-
ich bin recht freundlich, was Makros anbetrifft, aber das
bgdnoy schrieb:
#define begin { #define end } #define for(var, start, end) for(int var = start; var <= end; var++) #define print(str) printf("%s\n", str)
finde ich schon kriminell. Vor allem die
for
Ersetzung kann auf Dauer nur Ärger bringen.
-
Ich denke, die Intention war nicht, ein Beispiel zu posten, das man möglichst schnell durch den Compiler jagen kann, sondern eines, dass C&P effektiv verhindern und somit den Lernfaktor erhöhen kann. Nett.
@supertux: Poste doch sowas nicht, am Ende gewöhnt sich das noch jemand an...
Das erinnert mich ziemlich an die Story, die unser Chef alle paar Monate erzählt. Er war damals Pascal-Programmierer, der einen Auftrag bekam, was in C zu schreiben. Und er hat ich durch genau solche Makros seine gewohnte Arbeitsumgebung geschaffen. Auch 'ne Möglichkeit...
-
_matze schrieb:
@supertux: Poste doch sowas nicht, am Ende gewöhnt sich das noch jemand an...
ich hab es nicht gepostet, ich habe es (und damit bgdnoy) kritisiert
-
Oh stimmt, war in seinem Code. Hatte ich irgendwie nicht gesehen...
-
Hab ich euch nicht bewiesen, daß man mit dem Pseudocode von oben ganz ohne
Verständnis ein fertiges C-Programm bauen kann?
Für wie dumm haltet ihr denn den OP?Also noch dazu mein Schwur: ich hab bis jetzt kein bißchen drüber nachgedacht,
wie der Code von mcr funktioniert, sondern nur bewiesen, daß das gar nicht nötig ist.
(Man also nur mehr über die Syntax nachdenken muß, dabei sollte der "Lernfaktor" doch
möglichst auf die Semantik abzielen, oder?)EDIT:
Das erinnert mich ziemlich an die Story, die unser Chef alle paar Monate erzählt.
Frag ihn mal, ob er die aus dem K&R gestohlen hat!
-
_matze schrieb:
Ich denke, die Intention war nicht, ein Beispiel zu posten, das man möglichst schnell durch den Compiler jagen kann, sondern eines, dass C&P effektiv verhindern und somit den Lernfaktor erhöhen kann. Nett.
@supertux: Poste doch sowas nicht, am Ende gewöhnt sich das noch jemand an...
Das erinnert mich ziemlich an die Story, die unser Chef alle paar Monate erzählt. Er war damals Pascal-Programmierer, der einen Auftrag bekam, was in C zu schreiben. Und er hat ich durch genau solche Makros seine gewohnte Arbeitsumgebung geschaffen. Auch 'ne Möglichkeit...
Hallo zusammen,
Matze hat schon Recht. Ich wollte keinen Code schicken, der perfekt
funktioniert, da er dadurch nichts gelernt hätte. Daher habe ich
die Vorgehensweise in einer Art Pseudocode (werde ich das nächste mal dabei
schreiben) beschrieben. Lediglich die If-Anweisungen sind in C geschrieben.Ich selbst bin kein Freund von Makros.
Gruß mcr
-
bgdnoy schrieb:
Hab ich euch nicht bewiesen, daß man mit dem Pseudocode von oben ganz ohne
Verständnis ein fertiges C-Programm bauen kann?
Für wie dumm haltet ihr denn den OP?Hast du, ganz toll!
Wenn man nochmal darüber nachdenkt, hast du es eigentlich nicht. Denn zumindest ist das Wissen, wie man #define anwendet, dafür nötig. Das hat zwar nicht viel mit dem Verständnis des Programmablaufs zu tun, dennoch kann so ein Beispiel wie von mcr dafür sorgen, dass er auch darüber nachdenkt, während er es für sich umsetzt. Ich halte das durchaus für eine nette Idee.
Und nicht jeder ist gleich in der Lage, "#define begin {" zu notieren. Gerade Anfänger haben oft noch nicht die Riesen-Ahnung, was Präprozessor-Anweisungen angeht. Und nein, ich halte den OP mit Sicherheit nicht für dumm! Die (verständliche) Unwissenheit eines Anfängers sollte man nicht mit Dummheit verwechseln, und das habe ich weder ausdrücklich gesagt noch angedeutet. Diesen Vergleich hast du ins Spiel gebracht.
-
Ihr habt recht, ich war ein wenig forsch. Man sollte halt nach Mitternacht beim Debuggen bleiben...
Ich wollte ja eigentlich nur einen Scherz machen, das ist aber scheinbar schiefgegangen.
Zur Entschuldigung: wenn ich so einen Pseudocode sehe, will ich unbedingt wissen, ob er auch
funktioniert... und da ist die einzige Instanz eben ein Compiler/Interpreter, weil mein
Gehirn viel zu ambiguitiv denkt.
-
bgdnoy schrieb:
weil mein Gehirn viel zu ambiguitiv denkt.
das wort verstehe ich nicht. was ist "ambiguitiv" und was ist der unterschied zu "ambig" und kann man ambuguitiv oder ambig denken und wenn ja, woran erkenne ich das, falls es mir mal passiert?
-
Keine Ahnung. Ambig war nicht was ich sagen wollte. Ich hatte rückblickend eher sowas wie den Unterschied
zwischen pathologisch und pathogen im Kopf, keine Ahnung, warum ich dann nicht ambigugen oder so ähnlich gesagt habe.
Das ist aber ein gutes Beispiel für die Funktionsweise meines Gehirns, sagen wir mal statt
ambiguitiv einfach: seltsam.
-
bgdnoy schrieb:
Ich wollte ja eigentlich nur einen Scherz machen, das ist aber scheinbar schiefgegangen.
Dir sei vergeben!