Hallo Zusammen,
ich möchte eine csv Datei erstellen. Diese Datei soll in der Ersten
Spalte eine gewisse Anzahl an Zuständen haben. z.B. 4374. Die zweite,
dritte und vierte Spalte soll die Werte der Fakultät N = 3 (3! = 6)
haben. (d.h. 012, 102, 201, 210, 021, 120). Die restlichen sechs Spalten
können jeweils Werte von 0-2 annehmen (N=3).
Das heißt die Erste Spalte besitzt nun z.B. die Zustände 1-6.
1 012 000000
2 102 000000
3 201 000000
4 210 000000
5 021 000000
6 120 000000
7 012 000001
8 102 000001
9 201 000001
10 210 000001
11 021 000001
12 120 000001
usw.
Habe die letzten 9 Spalten mittels for-Schleifen geschrieben und darum
eine while-Schleife gesetzt, welche die Zustände angeben soll.
Leider erhalte ich nicht die gewünschte Ausgabe. Siehe Dateianhang.
Könnte mir hier jemand vielleicht weiterhelfen?
Wäre euch sehr dankbar!
[CODE]#include <stdio.h>
int main()
{
int q = 1, x = 0, y = 0, z = 0;
int a = 0, b = 0, c = 0;
FILE *permutation=fopen("testn3.csv","w+");
fprintf(permutation, "Zustand; N; a; b; c;\n");
{
while(q <= 4374){
for(a=0; a<=3; a++)
{
for(b=0; b<=3; b++)
{
for(c=0; c<=3; c++)
{
for (x = 0; x <= 3; x++)
{
for (y = 0; y <= 3; y++)
{
for (z = 0; z <= 3; z++)
{
{
fprintf(permutation, "%d %25d %d %d %30d %30d %30d\n",
q,a,b,c,x,y,z);
q++;
}
}
}
}
}
}
}
}
}
}
/CODE]
Esra-Maria A. schrieb:> ich möchte eine csv Datei erstellen. Diese Datei soll in der Ersten> Spalte eine gewisse Anzahl an Zuständen haben. z.B. 4374. Die zweite,> dritte und vierte Spalte soll die Werte der Fakultät N = 3 (3! = 6)> haben. (d.h. 012, 102, 201, 210, 021, 120). Die restlichen sechs Spalten> können jeweils Werte von 0-2 annehmen (N=3).> Das heißt die Erste Spalte besitzt nun z.B. die Zustände 1-6.> 1 012 000000> 2 102 000000> 3 201 000000> 4 210 000000> 5 021 000000> 6 120 000000> 7 012 000001> 8 102 000001> 9 201 000001> 10 210 000001> 11 021 000001> 12 120 000001
Hallo,
sorry wenn ich das so schreibe. Mir tut sich da ein großes Fragezeichen
auf. Du willst 6 Spalten, zeigst aber nur 3. Du willst was mit der 3!
aber das soll 012,102,201 u.s.w sein.
Les das mal selber mit den Augen eines Fremden und dann beschreibe dein
Problem noch mal. So ist das erst mal rumrate, was du willst.
Grüße
Ja sorry du hast vollkommen Recht. N=3 und drei weitere Variablen. Habe
den Code nochmal optimiert und es soll folgendes ausgegeben werden.
(Siehe Dateianhang)
ja genau. Und Insgesamt mit N!*N^3 ergibt das Zustände von 1 - 162.
(N! = 3! => 6 * N^3 = 3^3 => 27 -> 6 * 27 = 162 Zustände)
Die Tabelle soll entsprechend aufgebaut werden. Und das klappt mit
meinem Code nicht.
Wird immer konfuser.. Fakultät und Permutation gehen munter
durcheinander, jetzt ist da auch noch irgendwoher ein N^3 gekommen, und
es sind immer noch nur drei Spalten, die erste Zeile der Tabelle gibt 5
Spalten vor, mit Semikolon getrennt, im Schleifenbody werden dann 7
Variablen ausgegeben, ohne Semikolon.
Ich würd mal sagen, wenn die Aufgabenstellung schon dermaßen unklar ist,
dann wird der Code halt nicht funktionieren.
Kopier halt einfach die ersten 6 Zeilen immer hintereinander weg und
zähl dabei die erste Spalte immer um 1 hoch. Die letzte Spalte wird
offenbar alle 6 Zeilen um 1 erhöht. Irgendwie sowas soll der Code wohl
machen, genau weiß man's nicht.
Mit den Permutationen hab ich geschummelt, da einfach hingeschrieben.
Falls N variablel sein soll, ist das Mittel der Wahl faktorielle
Darstellung (dito für Iteration über alle Teilmengen wie "6 aus 49"):
https://de.wikipedia.org/wiki/Fakultätsbasiertes_Zahlensystem
Falls die Kombinationen variabel sein sollen, denn geht das besser mit
Darstellung einer N-stelligen Zahl zu Basis B (hier mit B = N) anstatt
einer N-fachen Schleife. Und schleifen wird man über die Stellen (z.B.
als int) und nicht direkt über das auszugebende Zeichen (hier als char).
Schließlich ist die Zählung der Permutationen recht ungewöhnlich; eine
kanonische Zählung wäre
012
021
102
120
201
210
d.h. monoton wachsend wie man sie z.B. mit Faktoriellen erhält.
Vielen Dank für deine Antwort.
Ich habe jetzt N=3 genommen um es erst einmal übersichtlich zu testen.
Normalerweise muss ich folgende Werte nehmen:
N=4, N=6 und N=8. Und das ist dann dementsprechend hoch. Da würde ich n
lieber variabel lassen. Habe deinen Code getestet und funktioniert
wunderbar. Aber würde die Werte gerne in einer csv Datei ausgeben
lassen.