Ausgabe in *.txt Datei & Struct

Diskutiere Ausgabe in *.txt Datei & Struct im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hallo liebe Community! ;) Ich stehe vor einem kleinen Problem. Gegeben ist mein n-Damen auf dem Schachbrett-Programm. Nun stehe ich vor der...

  1. #1 simplex, 19.01.2008
    simplex

    simplex [Versuchstier]

    Dabei seit:
    08.10.2004
    Beiträge:
    245
    Zustimmungen:
    0
    Ort:
    Hessen, nähe Limburg
    Hallo liebe Community! ;)

    Ich stehe vor einem kleinen Problem. Gegeben ist mein n-Damen auf dem Schachbrett-Programm. Nun stehe ich vor der Hürde, wie ich die "gesamte" Ausgabe in eine *.txt Datei speichern kann. Das Programm an sich funktioniert - aber seht selbst, er speichert mir nur komische Zeichen. Wäre super, wenn sich das jemand anschauen könnte.

    Mein zweites Problem ist der Einbau eines "Struct".

    Vllt. hat ja jemand ein paar Tipps! :) Wäre super..muss das Ding nämlich bald abgeben und ich bin mit meinem Latein am Ende!

    Gruß
    micha

    Code:
    #include <stdio.h>
    #include <stdlib.h>						// Die Definitionsdatei <stdlib.h> vereinbart Funktionen zur Umwandlung von Zahlen, 
    										// für Speicherverwaltung und ähnliche Aufgaben.
    #include <conio.h>
    
    int feld[10][10];						//maximal 8x8 Feld, da es sonst zu viele Lösungen gibt
    
    int anzahl_felder;						// Größe des Schachbretts
    int anzahl_loesungen=0;					// Gibt Anzahl der Lösungen an, wird beim Start auf 0 gesetzt
    
    
    void initialisiere_feld(int start)
    
    {
    
    for (int a=start; a<=anzahl_felder; a++)
    for (int b=0; b<=anzahl_felder; b++)
    	if (start>=0) feld[a][b]=0;
    
    }
    
    
    int zaehle_damen()						//Funktion durchläuft jedes einzelne Feld
    {
    	int count=0;						//Zählt die Damen, die sich in dem Feld befinden
    for (int a=0; a<=anzahl_felder; a++)
    for (int b=0; b<=anzahl_felder; b++)
    if (feld[a][b]==1)count++;
    
    return count;							//Anzahl der "gefundenen" Damen wird an Funktion zurückgegeben
    }
    
    
    int horizontal(int x, int y)			// Durchläuft als erstes die Horizontale
    {
    int ergebnis=0;							//keine Kollision außer wenn:
    
    
    	for (int i=0; i<=anzahl_felder; i++)
    	{
    		if (feld[i][y]==1)				//y bleibt hier gleich, da die Funktion nur eine Horizontale durchläuft 
    										//==1:bedeutet dass sich in der Horizontale eine Dame befindet
    				{
    					ergebnis=1;			//Kollision! Abbruch
    					break;
    				} 
    
    }
    
    return ergebnis;
    }
    
    
    int vertikal(int x, int y)
    {
    int ergebnis=0;
    
    
    	for (int i=0; i<=anzahl_felder; i++)
    	{
    		if (feld[x][i]==1)				//x bleibt gleich, da hier nur eine Vertikale durchlaufen wird
    				{
    					ergebnis=1;			 //Kollision! Abbruch
    					break;
    				} 
    	
    }
    
    return ergebnis;
    }
    
    
    int diagonale1(int x, int y)			//Diagonale von rechts unten nach links oben
    {
    int ergebnis=0;
    int x1=x;
    int y1=y;
    
    
    for (int i=-anzahl_felder; i<=anzahl_felder; i++)
    {
    
    x1=x+i;									// da z.B. die Diagonalen von (2,2)  
    y1=y+i;									// (1,1),(3,3) und (4,4) sind
    
    if ((x1>anzahl_felder)||(y1>anzahl_felder)||(i==0)||(x1<0)||(y1<0)) 
    continue;								//Bedingung damit die Funktion nicht über den Spielfeldrand läuft, 
    										//bzw nicht das Feld (x,y) prüft
    
    
    	if (feld[x1][y1]==1)
    				{
    					ergebnis=1;			//Kollision! Abbruch
    					break;
    				} 
    
    		else 
    			
    			ergebnis=0;					//keine Kollision
    }
    
    return ergebnis;
    }
    
    
    int diagonale2(int x, int y)			//Diagonale von unten links nach oben rechts
    {
    int ergebnis=0;
    int x1=x;
    int y1=y;
    int i=1;
    
    
    for (i=1; i<=anzahl_felder; i++)
    {
    
    x1=x+i; //nach oben
    y1=y-i;
    if ((x1>anzahl_felder)||(y1>anzahl_felder)||(x1<0)||(y1<0)) continue; 
    
    
    if (feld[x1][y1]==1)
    				{
    					ergebnis=1;			//kollision gefunden! Abbruch
    					break;
    				} 
    
    	
    }
    
    
    for (i=1; i<=anzahl_felder; i++)
    {
    x1=x-i; //nach unten
    y1=y+i;
    if ((x1>anzahl_felder)||(y1>anzahl_felder)||(x1<0)||(y1<0)) continue; //bedingung für über den spielfeldrand-->überspringen
    
    
    if (feld[x1][y1]==1)
    				{
    					ergebnis=1;			//Kollision! Abbruch
    					break;
    				} 
    
    
    }
    
    
    
    return ergebnis;
    }
    
    
    int ueberpruefe_dame(int x, int y)
    {
    int ergebnis=0;
    
    
    
    if ((horizontal(x,y)+vertikal(x,y)+diagonale1(x,y)+diagonale2(x,y))==0) ergebnis=0; else {ergebnis=1;} //überprüft ob irgendwo eine Kollision ist
    
    
    return ergebnis;
    }
    
    
    
    void zeichne_feld(void)					//Ausgabe
    {
    
    anzahl_loesungen++;
    printf("\tLoesung Nr.%d\n\n\t",anzahl_loesungen);
    for (int a=0; a<=anzahl_felder; a++)
    {
    for (int b=0; b<=anzahl_felder; b++)
    if (feld[b][a]==0) printf("%c ",254); else printf("%c ",1);
    printf("\n\t");
    }
    
    printf("\n-------------------------------------------------\n");
    }
    
    
    void speicher()							//Speichert die Ausgabe. 
    {
    
    FILE * datei;
    datei = fopen ("feld.txt", "a");
    anzahl_loesungen++;
    fprintf(datei, "\tLoesung Nr.%d\n\n\t",anzahl_loesungen);
    for (int a=0; a<=anzahl_felder; a++)
    {
    for (int b=0; b<=anzahl_felder; b++)
    if (feld[b][a]==0) fprintf(datei, "%d ",0); 
    	else fprintf(datei,"%d ",1);
    fprintf (datei, "\n");
    }
    
    fclose(datei); 
     
    }
    /*
    int a=0;  
    int b=0;  
      
      
      
    FILE * datei;  
    datei = fopen ("feld.txt", "a");  
      
    for (a=0; a<9;a++ ) {  
      
    for (b=0; b<9; b++) {  
      
    fprintf (datei, "%d", (feld[a][b]));}  
      
      
    fprintf (datei, "\n");  
      
    } 
    
    */
    void dame(int spalte)
    {
    	if (spalte<=anzahl_felder){
    for (int a=0; a<=anzahl_felder; a++)
    	if (ueberpruefe_dame(spalte,a)==0) {feld[spalte][a]=1; dame(spalte+1);}
    
    	if (zaehle_damen()==(anzahl_felder+1)){zeichne_feld(); }  //Alle Damen gesetzt -->eine Lösung gefunden!!
    
    	initialisiere_feld(spalte-1);
    
    }
    }
    
    
    void main()
    {
    printf(" Herzlich Willkommen zu dem Projekt n-Damen auf dem Schachbrett.\n\n");
    printf(" Im folgenden Schritt muessen Sie ihre Spielfeld-Groesse x * x festlegen. \n\n"); 
    printf (" Sie koennen fuer x die Zahlen zwischen 4 und 10 verwenden. \n\n");              //Eingabe durch Benutzer
    
    scanf("%d",&anzahl_felder);
    anzahl_felder--;													// da die Nummerierung bei 0 anfängt (8 Felder --> 0-7)
    initialisiere_feld(0);
    dame(0);
    
    speicher();
    getch();
    }
    
    
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
    Formatier den Code mal so das man die Kommentare lesen kann
     
  4. #3 simplex, 19.01.2008
    simplex

    simplex [Versuchstier]

    Dabei seit:
    08.10.2004
    Beiträge:
    245
    Zustimmungen:
    0
    Ort:
    Hessen, nähe Limburg
    Kann man doch, wenn man nach rechts scrollt :)
     
  5. #4 Hans Dampf, 20.01.2008
    Hans Dampf

    Hans Dampf Jungspund

    Dabei seit:
    19.01.2008
    Beiträge:
    20
    Zustimmungen:
    0
    Schau Dir mal in der Funktion 'zeichne_feld()' das 'printf("%c ",254)' und das 'printf("%c ",1)' genauer an.
     
Thema:

Ausgabe in *.txt Datei & Struct

Die Seite wird geladen...

Ausgabe in *.txt Datei & Struct - Ähnliche Themen

  1. Yocto 3.1 - erste Ausgabe mit langfristiger Unterstützung

    Yocto 3.1 - erste Ausgabe mit langfristiger Unterstützung: Yocto, eines der verbreitetsten eingebetteten Linux-Systeme, ist in Version 3.1 erschienen. Es ist die erste Ausgabe, die zwei Jahre statt einem...
  2. Falsche Ausgabe von $LINENO

    Falsche Ausgabe von $LINENO: Moin zusammen, ich bin zwar kein absoluter Frischling mehr, was Linux angeht, aber erst seit wenigen Minuten in diesem Forum. Seit einigen Tagen...
  3. Mozilla und BMZ kooperieren bei Spracherkennung und -ausgabe

    Mozilla und BMZ kooperieren bei Spracherkennung und -ausgabe: Mozilla hat mit dem deutschen Bundesministerium für wirtschaftliche Zusammenarbeit und Entwicklung (BMZ) eine Vereinbarung unterzeichnet. Es geht...
  4. Frage zu Bash Script mit Grep Ausgabe

    Frage zu Bash Script mit Grep Ausgabe: Hallo Zusammen, ich schreibe gerade in Bash ein Script, mit dem ich eine Ausgabe per Grep filtere, nun ist es so - dass ich allerdings zwei...
  5. find Ausgabe in "Anführungszeichen"

    find Ausgabe in "Anführungszeichen": Hallo Unixboard-User, ich bin neu hier im Forum und habe ein Problem: Ich habe ein recht großes Script welches auch wunderbar funktioniert....
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden