002
21.04.2003, 20:47 Uhr
Nahash
|
virtual hat doch mal eine Aufgabe aufgegeben
"Nach der (leider sehr unbekannten) Zahlentheorie von mir haben Zahlen eine Farbe, eine Musterung und einen bestimmten Geruch: Eine grade Zahl ist weiss, eine ungrade ist blau. Ist eine blaue Zahl durch 5 teilbar, hat sie gelbe Püntchen als Muster, durch 7 teilbare Zahlen haben immer feine rote Striche. Hat eine Zahl rote Striche und gelbe Pünktchen, hat sie zusätzlich grüne Sternchen. Alle übrigen Zahlen haben kein Muster. Zahlen mit Strichen aber keinen Sternchen als Muster riechen immer nach Erdbeeren. Zahlen, die blau sind aber kein Muster haben, riechen nach alten Socken, es sei denn sie sind durch 11 oder 3 teilbar, dann riechen sie nach Lagerfeuer. Alle übrigen Zahlen riechen wie ein frisch gezapftes Hefeweizen. Ausgenommen ist - natürlich - die Zahl 37: sie riecht prinzipiell immer nach Imbissbude!
Damit dürfte klar sein, daß gilt:
1 ist blau, hat kein Muster und riecht nach alten Socken. ... 100 ist weiss, hat gelbe Pünktchen und riecht nach einem frisch gezapften Hefeweizen.
Zu schreiben ist ein Programm, welche die Frabe, die Musterung und den Gruch für alle zahlen zwischen 1 und 100 ausgibt. -- " könnte man nicht das von "oxdeadbeef" dafür entwickelte Programm (s.u.) etwas für VC++ umschreiben. Ich programmiere in C++ erst seit ein paar Wochen habs zwar probiert bin aber noch irgendwie zu blöd und komm nicht weiter. Ich wäre extrem dankbar für Vorschläge...
#include <iostream>
using namespace std;
template <bool mod2> struct farbe { static const char *text; }; const char *farbe<true >::text = " ist weiß,"; const char *farbe<false>::text = " ist blau,";
template <bool mod5, bool mod7> struct muster { static const char *text; }; const char *muster<true, true>::text = " hat gelbe Punkte, feine rote Striche und grüne Sternchen"; const char *muster<true, false>::text = " hat gelbe Punkte"; const char *muster<false, true>::text = " hat feine rote Striche"; const char *muster<false, false>::text = " hat kein Muster";
template <bool mod2, bool mod5, bool mod7, bool mod3o11> struct geruch { static const char *text; }; const char *geruch<false, false, false, false>::text = "alten Socken."; const char *geruch<false, false, false, true>::text = "Lagerfeuer."; const char *geruch<true, false, true, true>::text = "Erdbeeren."; const char *geruch<true, false, true, false>::text = "Erdbeeren."; const char *geruch<false, false, true, true>::text = "Erdbeeren."; const char *geruch<false, false, true, false>::text = "Erdbeeren."; template <bool mod2, bool mod5, bool mod7, bool mod3o11> const char *geruch<mod2, mod5, mod7, mod3o11>::text = "einem frisch gezapften Hefeweizen.";
template <int i> struct zahl { static const char *farbe_text; static const char *muster_text; static const char *geruch_text; }; template<int i> const char *zahl<i>::farbe_text = farbe<i%2==0>::text; template<int i> const char *zahl<i>::muster_text = muster<i%5==0, i%7==0>::text; template<int i> const char *zahl<i>::geruch_text = geruch<i%2==0, i%5==0, i%7==0, i%3==0 || i%11==0>::text; const char *zahl<37>::geruch_text = "Imbißbude.";
template <int i> struct my_loop { static void body() { my_loop<i-1>::body(); cout << i << zahl<i>::farbe_text << zahl<i>::muster_text << " und riecht nach " << zahl<i>::geruch_text << endl; } };
struct my_loop<0> { static void body() {} };
int main(int argc, char *argv[]) { my_loop<100>::body(); return 0; }
Danke |