Ausgabe in *.txt Datei & Struct

Dieses Thema im Forum "C/C++" wurde erstellt von simplex, 19.01.2008.

  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

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    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.
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Ausgabe in *.txt Datei & Struct

Die Seite wird geladen...

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

  1. Kurztipp: Unerwünschte grep-Ausgaben vermeiden

    Kurztipp: Unerwünschte grep-Ausgaben vermeiden: Selbst aus altbekannten Programmen kann man oft noch einiges mehr herausholen - man muss sich nur einmal gründlich mit ihnen auseinandersetzen....
  2. Ausgabe von mkdir -p wegwerfen

    Ausgabe von mkdir -p wegwerfen: Hallo, ich stehe gerade auf den schlauch. in meinen BASH Script lege ich mit mkdir -p ein verzeichnis an. Das Script gibt dann immer auf der...
  3. Unix Shell echo/ausgabe solange Bedingung ...

    Unix Shell echo/ausgabe solange Bedingung ...: Hallo liebe Unix User, da ich relativ neu bin, was Linux / Unix angeht stehe ich gerade komplett auf dem Schlauch! Problem: Aus mehreren...
  4. »Einführung in Tcl/Tk« in neuer Ausgabe

    »Einführung in Tcl/Tk« in neuer Ausgabe: Das Buch »Einführung in Tcl/Tk« wendet sich an Anfänger, die die Programmiersprache Tcl/Tk erlernen wollen. Der Titel kann kostenlos für die...
  5. PHP 6 oder 7: Debatte über die Versionierung der nächsten Ausgabe von PHP

    PHP 6 oder 7: Debatte über die Versionierung der nächsten Ausgabe von PHP: In der Community der Scriptsprache PHP, die zur Erstellung dynamischer Webseiten und Webanwendungen dient, wird gerade kontrovers diskutiert,...