C csv Datei erstellen /Fakultät und Permutation

01110111

Newbie
Registriert
Okt. 2017
Beiträge
4
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.

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]
 
Bist Du Dir ganz sicher, dass Du da beschreibst was Du meinst? Das was Du da machst hat nur auf Umwegen was mit der Fakultät zu tun, und Deine Beschreibung des gewünschten Ergebnisses ist finde ich ziemlich dürftig. Die ‚Werte der Fakultät N=3‘ in Spalte 2-4 zu haben führt unweigerlich dazu, dass alle Einträge in den jeweiligen Spalten den Eintrag 6 haben, die Fakultät ist erklärt als das Produkt aller natürlichen Zahlen, die kleinergleich der natürlichen Zahl sind, deren Fakultät bestimmt werden soll.
 
Also die Ausgabe meiner csv Datei ist folgende:

Bildschirmfoto 2017-10-01 um 14.52.40.png
Bildschirmfoto 2017-10-01 um 14.53.06.png
 
Kannst du den ersten Post nochmal hübsch machen? Deine code-tags sind kaputt
Und es sind überall viel zu viele leere Zeilen

Was ist denn überhaupt dein Wunsch? Also was willst du erreichen?
Nen Programm was deinen Output in eine Datei schreibt hast du ja geschrieben. Was funktioniert denn nicht?
 
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 <= 162){
		
	for(a=0; a<=2; a++)
	{ 
			for(b=0; b<=2; b++)
				{ 
					for(c=0; c<=2; c++)
						{ 
						
			
			for (x = 0; x <= 2; x++)
					{
						
						for (y = 0; y <= 2; y++)
							{
								
							for (z = 0; z <= 2; z++)
								{
							
																
				
					{
						
						
					fprintf(permutation, "%d %25d %d %d %30d %30d %30d\n", 
					q,a,b,c,x,y,z);
					
				    q++;
							
										}
				
						
								 	}
						
								}
							}
				
						 }
				
						}
						}
						}
						}
						}



Hoffe es ist jetzt besser.

Ich möchte eine csv Datei über das Programm erstellen bzw. schreiben in der folgendes stehen soll:

Zustand N! (N=3) N ^3 (N =3 Exponent für die drei Zeiger xyz)
1 012 000
2 102 000
3 201 000
4 210 000
5 021 000
6 120 000
7 012 001
8 102 001
9 201 001
10 210 001
11 021 001
12 120 001
.
.

So soll die Tabelle fortlaufend aussehen. So dass insgesamt die 162 Zustände erreicht werden. xyz können quasi die Elemente von N! annehmen. hierbei gibt es dann quasi 27 Möglichkeiten. Weiß nicht wie ich mein Programm so umschreiben muss, dass diese Ausgabe erfolgt.
Hoffe ich konnte es einigermaßen besser erklären.
 
Zuletzt bearbeitet:
Ich verstehe immer noch nicht, was Du machen willst, weil Du definitiv die falsche Beschreibung für Dein Vorhaben angegeben hast. x,y,z sind keine Zeiger, sondern einfache ganze Zahlen (4 byte lang). x,y,z können auch keine Elemente von N! annehmen (woher kommt da überhaupt ein N, soll das übergeben werden? Was genau soll N sein?), denn die Fakultät ist keine Menge, sondern eine Funktion von den natürlichen Zahlen in die natürlichen Zahlen -- einer natürlichen Zahl wird dabei genau eine natürliche Zahl zugeordnet, also können in Deiner Spalte keine unterschiedlichen Zahlen stehen; wenn Du machen würdest, was Du angibst, dann stünde in den ganzen Spalten mit der "Fakultät" 6 = 3*2*1 = 3!.

Eine Gruppe mit 3! = 6 Elementen wäre die S3, das ist die Menge der bijektiven Abbildungen von {1,2,3} nach {1,2,3} (die sogenannten Permutationen) -- bis auf Umnummerierung passt das zu dem was bei Dir in der Beispielausgabe in der zweiten Spalte steht. Dabei musst Du Dir eventuell überlegen, wie der zusammengesetzten Ziffernfolge xyz die jeweilige Permutationen zugeordnet werden soll.

Ich verstehe aber wie gesagt von vorne bis hinten nicht, was Du mit Deinem Programm machen willst. Ohne das zu verstehen, weiß ich auch nicht, was das Problem mit dem Programm sein soll und wo Du Hilfe benötigen könntest.
 
Ich versuche es noch einmal :)

Mein Code ist folgender:

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 <= 162){
      
   for(a=0; a<=2; a++)
   { 
         for(b=0; b<=2; b++)
            { 
               for(c=0; c<=2; c++)
                  { 
                  
         
         for (x = 0; x <= 2; x++)
               {
                  
                  for (y = 0; y <= 2; y++)
                     {
                        
                     for (z = 0; z <= 2; z++)
                        {
                     
                                                
            
               {
                  
                  
               fprintf(permutation, "%d %25d %d %d %30d %30d %30d\n", 
               q,a,b,c,x,y,z);
               
                q++;
                     
                              }
            
                  
                            }
                  
                        }
                     }
            
                   }
            
               }
            }
         
         }
      }


Ich möchte aber folgende Ausgabe in einer csv Datei haben:

Ausgabe:
1: 012 000
2: 102 000
3: 201 000
4: 210 000
5: 021 000
6: 120 000
7: 012 001
8: 102 001
9: 201 001
10: 210 001
11: 021 001
12: 120 001
13: 012 002
14: 102 002
15: 201 002
16: 210 002
17: 021 002
18: 120 002
19: 012 010
20: 102 010
21: 201 010
22: 210 010
23: 021 010
24: 120 010
25: 012 011
26: 102 011
27: 201 011
28: 210 011
29: 021 011
30: 120 011
31: 012 012
32: 102 012
33: 201 012
34: 210 012
35: 021 012
36: 120 012
37: 012 020
38: 102 020
39: 201 020
40: 210 020
41: 021 020
42: 120 020
43: 012 021
44: 102 021
45: 201 021
46: 210 021
47: 021 021
48: 120 021
49: 012 022
50: 102 022
51: 201 022
52: 210 022
53: 021 022
54: 120 022
55: 012 100
56: 102 100
57: 201 100
58: 210 100
59: 021 100
60: 120 100
61: 012 101
62: 102 101
63: 201 101
64: 210 101
65: 021 101
66: 120 101
67: 012 102
68: 102 102
69: 201 102
70: 210 102
71: 021 102
72: 120 102
73: 012 110
74: 102 110
75: 201 110
76: 210 110
77: 021 110
78: 120 110
79: 012 111
80: 102 111
81: 201 111
82: 210 111
83: 021 111
84: 120 111
85: 012 112
86: 102 112
87: 201 112
88: 210 112
89: 021 112
90: 120 112
91: 012 120
92: 102 120
93: 201 120
94: 210 120
95: 021 120
96: 120 120
97: 012 121
98: 102 121
99: 201 121
100: 210 121
101: 021 121
102: 120 121
103: 012 122
104: 102 122
105: 201 122
106: 210 122
107: 021 122
108: 120 122
109: 012 200
110: 102 200
111: 201 200
112: 210 200
113: 021 200
114: 120 200
115: 012 201
116: 102 201
117: 201 201
118: 210 201
119: 021 201
120: 120 201
121: 012 202
122: 102 202
123: 201 202
124: 210 202
125: 021 202
126: 120 202
127: 012 210
128: 102 210
129: 201 210
130: 210 210
131: 021 210
132: 120 210
133: 012 211
134: 102 211
135: 201 211
136: 210 211
137: 021 211
138: 120 211
139: 012 212
140: 102 212
141: 201 212
142: 210 212
143: 021 212
144: 120 212
145: 012 220
146: 102 220
147: 201 220
148: 210 220
149: 021 220
150: 120 220
151: 012 221
152: 102 221
153: 201 221
154: 210 221
155: 021 221
156: 120 221
157: 012 222
158: 102 222
159: 201 222
160: 210 222
161: 021 222
162: 120 222

Mein Code gibt mir leider ne ganz andere Ausgabe. Ich vermute, dass die for-Schleifen nicht passen, aber weiß auch nicht wie ich es umschreiben muss.
In meinem Code möchte ich zudem,dass N variabel ist. (für einen übersichtlichen Test habe ich N=3 genommen)
 
Zurück
Oben