Program: 25.3.2.c
This commit is contained in:
parent
261ecea916
commit
4bb1330acd
53
25.3.2.c
Normal file
53
25.3.2.c
Normal file
@ -0,0 +1,53 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user