#include #include #include int generiere_neue_folge(int len, int folge[]); int main(void) { int folge[1001]; ///Array für bis zu 1000 Zufallszahlen (angefangen wird ab Index 1 nicht 0) int i, laenge; ///i = Schleifenvariable; laenge speichert wie viele Zahlen in der Folge sein sollen do { printf("Länge der 0/1-Folge (max. 1000): "); scanf("%d", &laenge); } while (laenge < 0 || laenge > 1000); ///Solange man zwischen 0 und 1000 eingibt geht es weiter srand(time(NULL)); ///Startwert für Zufallsgenerator for (i = 1; i <= laenge; i++) ///Start bei 1; Ende bei laenge (Zahl die man eingibt); jeder Durchlauf wird um i um 1 erhöht folge[i] = rand() % 2; ///rand() erzeugt Zufallszahl und %2 teilt die Zahl durch 2 und gibt den Rest 0 oder 1 aus ///Zahlen werden in folge [i] gespeichert for (i = 1; i <= laenge; i++) ///gleich wie oben printf("%d", folge[i]); ///gibt die jede Zahl als Dezimalzahl wieder von folge [i] printf("\n"); ///erzeugt einen Zeilenumbruch while (laenge > 1) ///Solange mehr als eine Zahl vorhanden ist, wiederholt sich die Folge { laenge = generiere_neue_folge(laenge, folge); ///neue, kürzere Folge wird generiert und in laenge gespeichert for (i = 1; i <= laenge; i++) ///nach jedem verkleinern wird die Folge wieder ausgegeben untereinander printf("%d", folge[i]); printf("\n"); } return (0); } /*------------------------------------------ generiere_neue_folge ---------------------------------------*/ int generiere_neue_folge(int len, int folge[]) ///len: aktuelle Folge, wie viele Zahlen drin sind; folge[]: Array mit 0/1en { int i, j; ///i: wir starten beim ersten Element; j: der Platz an den die neue Zahl kommen soll for (i = 1, j = 1; i < len; i += 2, j++) ///i springt immer 2 Schritte, also zu Paaren 1&2 3&4 folge[j] = !(folge[i] == folge[i + 1]); ///folge[i + 1] -> ist 1 gleich 0? -> Nein -> false = 0 ///!0 heißt "nicht" also = 1 if (i == len) ///Wenn i Zahl ungerade ist, dann hat die Zahl keinen Partner -> Zahl wird einfach übernommen folge[j] = folge[len]; else j--; return (j); ///Zahl wird zurückgegeben damit die main weiß wie viele Zahlen die Folge jetzt hat }