# Acht Damen und was Delphi damit zu tun hat...



## Klon (6. März 2001)

So Leutz ich brauch dringend eure Hilfe, folgende Aufgabe:

Verteile 8 Damen so auf einem Schachbrett das sie sich nicht gegenseitig schlagen können. 

Das  alleine ist schon ne Aufgabe für ne halbe Stunde, eine der 21 Möglichen Konstelationen zu finden.

Jetzt das wirkliche Problem, ich muss ein Delphi Programm schreiben das die acht Damen in ein Stringgrid von 8*8 Feldern schreibt (das soll das Schachbrette sein).

Das ganze soll halt nach mathematischem Denken passieren, also eine Function/Procedure soll ausrechnen wo die Damen zu stehen haben.

Bedingung:
Das StringGrid darf nur zur ausgabe verwendet werden (also nicht einfach den Rechner die Damen reinschreiben lassen, alle senkrechten, wagerechten und diagonalen Felder mit Nullen volschreiben lassen, was dann ja die Felder wären an denen keine Damen stehen darf, und ihn das dann solange neu machen lassen bisses past) soll heißen, ich brauch nen anderen Weg wie die Kiste die Positionen berechnen kann.

Helft mir plz 

Klon


----------



## Nils Hitze (7. März 2001)

**Gröhl**

Du vergisst den größten gemeinsamen Teiler.
Eigentlich daß erste mit dem sie einen nerven.

Pfote, Kojote


----------



## Quentin (7. März 2001)

*FALSCH KOJOTE!!!*

das allererste mit dem sie einen nerven, ist das:

<center><font color="#800000"><b>HELLO WORLD</b></font></center>


das heiligste aller programmier-beispiele!!!

kennt übrigens einer das kaffe-und-kuchen-programm???


so long


----------



## Klon (7. März 2001)

Hehe alles insider  witze hier muha 

Na ja danke schon mal, der c source wird mir sicherlich helfen...


----------



## Thimo Grauerholz (7. März 2001)

naja, das kaffee und kuchen kenn ich nur in bezug mit java


----------



## Quentin (8. März 2001)

*da!*

keine garantie das es funzt, habs von einem bekannten bekommen. is in c, rekursiv!!!!

```
<font color="#800000" size="2" face="Courier New, Courier">
#include&lt;stdio.h&gt;
#include&lt;conio.h&gt;
#include&lt;stdlib.h&gt;

/* Die Ausgabe ist so zu lesen:
   - die Zaehlung der Zeilen beginnt bei 0
   - Zahlen die in einer Reihe stehen entsprechen der Zeile
   - die Anzahl der Zeilen betraegt 8 und entspricht den Spalten des Schachbrettes
   z.B. Spalte:  1   2   3   4   5   6   7   8  => x-Achse
        Zeile:   0   4   7   5   2   6   1   3  => y-Achse
*/

#define MAX 8

void Permut  (int,int*);
void Tausch  (int,int,int*);
void Ausgabe (int*);
void Pruefung(int*);

int anzahl=0;

void main()
{
	int tiefe=0,feld[MAX]={0,1,2,3,4,5,6,7};

	Permut(tiefe,feld);
	printf("ANZAHL: %d\n",anzahl);
} //main

void Pruefung(int *feld)
{
	int i,j,k,figuren;

	for (k=0;k&lt;MAX;k++)		//Prüfung der 1.Hälfte des Feldes
	{						//Diagonalen nach rechts unten
		for (i=0,j=k,figuren=0;j&lt;MAX;i++,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for

	for (k=7;k&gt;=0;k--)		//Prüfung der 1.Hälfte des Feldes
	{						//Diagonalen nach links unten
		for (i=k,j=0,figuren=0;i&gt;=0;i--,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for

	for (k=0;k&lt;MAX;k++)		//Prüfung der 2.Hälfte des Feldes
	{						//Diagonalen nach rechts unten
		for (i=k,j=0,figuren=0;i&lt;MAX;i++,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for

	for (k=0;k&lt;MAX;k++)		//Prüfung der 2.Hälfte des Feldes
	{						//Diagonalen nach links unten
		for (i=7,j=k,figuren=0;j&lt;MAX;i--,j++)
		{
			if (feld[i]==j)
				figuren++;
		} //for
		if (figuren&gt;1)
		{
			return;
		} //if
	} //for
	anzahl++;
	Ausgabe(feld);
	if (anzahl%23==0)
	{
		getch();
		system("cls");
	} //if
} //Pruefung

void Permut(int tiefe,int *feld)
{
	int i;

	if ((tiefe+1)==MAX)
		Pruefung(feld); //Ausgabe(feld);

	else
	{
		for (i=tiefe;i&lt;MAX;i++)
		{
			Tausch(tiefe,i,feld);
			Permut(tiefe+1,feld);
			Tausch(i,tiefe,feld);
		} //for
	} //else
} //Permut

void Tausch(int index1,int index2,int *feld)
{
	int x;

	x=feld[index1];
	feld[index1]=feld[index2];
	feld[index2]=x;
} //Tausch

void Ausgabe(int *feld)
{
	int i;
	for (i=0;i&lt;MAX;i++)
		printf("%d ",feld[i]);
	printf("\n");
} //Ausgabe
</font>
```


----------



## Quentin (8. März 2001)

*habs hochgeladen*

http://www.thomasp.f2s.com/8-damen-problem.cpp

falls das hier wegen der klammern probleme macht


----------



## Klon (8. März 2001)

Danke !!


----------



## Quentin (11. März 2001)

hey klon, ich hab noch ne version aufgetrieben..

http://www.thomasp.f2s.com/dameproblem.cpp


viel spaß weiterhin beim programmieren


----------

