Ankündigung

Einklappen
Keine Ankündigung bisher.

csv Datei erstellen /Permutation (Sprache C )

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • csv Datei erstellen /Permutation (Sprache C )

    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]

    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Bildschirmfoto 2017-10-01 um 14.52.40.png
Ansichten: 1
Größe: 80,1 KB
ID: 1649
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Bildschirmfoto 2017-10-01 um 14.53.06.png
Ansichten: 1
Größe: 32,1 KB
ID: 1650

    Leider erhalte ich nicht die gewünschte Ausgabe. Siehe Dateianhang.

    Könnte mir hier jemand vielleicht weiterhelfen?
    Wäre euch sehr dankbar!

  • #2
    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<=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++;
    							
    										}
    				
    						
    								 	}
    						
    								}
    							}
    				
    						 }
    				
    						}
    						}
    						}
    						}
    						}

    Kommentar


    • #3
      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++;
      							
      										}
      				
      						
      								 	}
      						
      								}
      							}
      				
      						 }
      				
      						}
      						}
      						}
      						}
      						}

      Kommentar


      • #4
        Hallo!

        Ich habe nicht verstanden, was du in der Spalte 2 - 5 darstellen willst? Die Fakultät von was? In deinem Code ist von Permutationen die Rede. Permutation und Fakultät sind zwei paar Stiefel. Eine Permutation von welcher Menge soll dargestellt werden?

        Kommentar


        • #5
          Hi,

          habe den Code noch einmal umgeschrieben.

          Code:
          #include <stdio.h>
          
          void swap(int *x1,int *x2)
          	{
          		int x=*x1;
          		*x1=*x2;
          		*x2=x;
          	}
          	void per(int *arr,int st,int ls)
          	{
          		int i=0;
          		if(st==ls)
          		{
          			int k;
          			for(k=0;k<ls;k++)
          			{
          				//printf("%d ",arr[k]);
          			}
          		//printf("\n");
          	}
          		else
          		{
          			for(i=st;i<ls;i++)
          			{
          				swap(arr+st,arr+i);
          				per(arr,st+1,ls);
          				swap(arr+st,arr+i);
          			}
          		}
          }
          
          int main(void)
          {
          	
          	//FILE *permutation=fopen("testpermutation.csv","w+");
          			
          			//fprintf(permutation, "Zustand; N; a; b; c;\n")
          	
          	int arr[3]={0,1,2};
          	int st=0;
          	int ls=3;
              per(arr,st,ls);
          	int c0, c1, c2, c3;
          	int n = 0;
          	
          	
          	for (char c0 = '0'; c0 <= '2'; c0++)
          			for (char c1 = '0'; c1 <= '2'; c1++)
          				for (char c2 = '0'; c2 <= '2'; c2++)
          				  //for (char c3 = '0'; c3 <= '3'; c3++)
          	for (size_t i = 0; i < sizeof (arr) / sizeof (*arr); i++)
          	
          		printf ("%4d: %d %c%c%c\n", ++n ,arr[i], c0, c1, c2);
          	
          	//fprintf(permutation, "%d %d %d %d %d\n");
          }

          Die Ausgabe soll folgende sein:

          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

          Aber mein Programm gibt dies leider nicht aus.

          Kommentar


          • #6
            Er möchte so verstehe ich es: Das der Stellwert sich in Spalte 2 bis Zeile 6 mit den Zahlen 0,1,2 in der angegebenen Reihenfolge ändert(permutation). Ab Zeile 7 fängt es von vorn an. In Spalte 3 wird nach jeder 6. Zeile in Spalte 3 ein Flag gesetzt was sich auch nach der 6. Zeile ändert
            Zuletzt geändert von maxel22; 06.10.2017, 05:12.

            Kommentar


            • #7
              Spalte 1: Fortlaufende Nummer 1,2,3, .... (n+1)
              Spalte 2: Permutation aus 3 Zahlen (0,1,2), also 3! = 6
              Spalte 3: ?

              Spalte 3 bleibt unklar.

              Kommentar


              • #8
                Sieht man doch das 3. Feld ist auch eine Permutation aus 3 Zahlen.

                Kommentar


                • #9
                  Zitat von maxel22 Beitrag anzeigen
                  Sieht man doch das 3. Feld ist auch eine Permutation aus 3 Zahlen.
                  Die 3. Spalte ist keineswegs einfach nur eine Permutation aus 3 Zahlen, sonst gäbe es nicht die folgenden Zeilen in seinem Beispiel:

                  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
                  In den ersten 6 Zeilen besteht die 3 Spalte immer aus drei 0. Danach steht immer eine 001 am Anfang. Das kann keine Permutation sein. Bei einer Permutation verändert sich die Anordnung von Objekten in einer bestimmten Reihenfolge. Demnach müsste die 1 wandern, tut sie aber nicht.

                  Die 3. Spalte ändert sich anscheinend immer nach 6 Elementen, also nach n! der 2. Spalte.

                  Man kann sich ungefähr denken, was die 3. Spalte sein kann, nämlich der Ausdruck der in Spalte 2 dargestellten Elemente. Diese werden nach jeder 6 Iteration zuerst an 1 Stelle (von rechts nach links), dann an 2 und dann an 3 Stelle durchgetauscht bis alle Stellen die größte Zahl haben, also 222 in dem Beispiel oben.

                  Aber der TE sollte einfach mal selbst die Bildungsvorschrift erklären, statt das wir hier versuchen zu erklären, was er haben will.
                  Zuletzt geändert von StarShaper; 08.10.2017, 12:01.

                  Kommentar


                  • #10
                    Ja Stimmt ist keine Permutation in der 3. Spalte, naja man sieht aber was er wollte.

                    Die Aufgaben zu beschreiben viel mir auch oft schwer, recht hast Du aber er sollte es richtig beschreiben.
                    Zuletzt geändert von maxel22; 08.10.2017, 22:42.

                    Kommentar


                    • #11
                      ersten zwei Spalten mein Vorschlag

                      Code:
                      #include <iostream>
                      
                      using namespace std;
                      
                      int main()
                      {
                      // Initialisierung der Variablen
                      
                         int c1=0, c2, c3, index;
                      
                      //Feld mit 6 Elementen
                      string feld[6]= {"012", "102", "201", "210", "021", "120"};
                      
                      while(c1 < 6 && index !=65){
                      
                      
                      for (index = 1; index < 65; index++){
                      
                      
                      cout << index << " " << feld[c1] << endl;
                      
                      
                      c1++;
                      
                      if(c1 == 6){
                      c1=0;
                      }}}
                        return 0;
                      }
                      Zuletzt geändert von maxel22; 09.10.2017, 02:07.

                      Kommentar


                      • #12
                        Ich bin neu hier im Forum deshalb meine Frage:

                        Warum kann man hier seinen eigenen Text nicht mehr korrigieren?
                        Hatte zu spät gesehen das er es in C haben wollte und nicht in C++

                        Kommentar


                        • #13
                          Zitat von maxel22 Beitrag anzeigen
                          Ich bin neu hier im Forum deshalb meine Frage:

                          Warum kann man hier seinen eigenen Text nicht mehr korrigieren?
                          Hatte zu spät gesehen das er es in C haben wollte und nicht in C++
                          Hallo maxel22!

                          Den Text kann man schon korrigieren, aber nur innerhalb der ersten 10 Minuten.

                          Das soll verhindern, dass Forenteilnehmer nach Monaten Beiträge verfälschen.

                          Kommentar


                          • #14
                            Zitat von StarShaper Beitrag anzeigen
                            Hallo maxel22!

                            Den Text kann man schon korrigieren, aber nur innerhalb der ersten 10 Minuten.

                            Das soll verhindern, dass Forenteilnehmer nach Monaten Beiträge verfälschen.
                            Naja ich Glaube sowas hält eher viele ab etwas zu schreiben. Ich hätte zum Beispiel mein Code noch einmal geändert, da in der while Schleife etwas zu viel ist: c1 < 6 &&
                            Deswegen aber noch einmal zu antworten fand ich überflüssig und habe es so gelassen.

                            Kommentar

                            Lädt...
                            X