Zum Inhalt springen

Problem bei der Ausgabe - Falsche Bedingungen oder Logik-Fehler?


Empfohlene Beiträge

Geschrieben

Moin,

ich beearbeite grade folgende Aufgabe:

In folgendem Schema sollen alle Zahlen von 1- 8 untergebracht werden. Verbundene zahlen müssen sich um mehr als 1 unterscheiden.

Das Schema mit meiner Durchnummerierung fürs array sieht so aus:

hxm-b-jpg-nb.htmlhttp://www.bilder-hochladen.net/files/hxm-b-jpg-nb.html

ICh lasse bei meinem Programm erst alle Permutationen von 1 bis 8 berechnen. Danach soll über IF-Abfragen genau diese Beziehungen abgefragt werden, jedoch macht er einfach keine Ausgabe mehr. Nur ich entdecke einfach nicht den Fehler in den Bedingungen. Sieht wer anders mehr als ich?

Hier der Code:

#include <stdio.h>


void perm(int anz, int array[], int start);

void ausgabe(int anz, int array[]);



int main() {

	int loesung[8];

	int i;


	for (i = 0; i < 8; i++) {

		loesung[i] = i+1;

	}

	perm(8, loesung, 0);



}


void perm(int anz, int array[], int start) {

	int i, sav;

	if (start < anz) {

		sav = array[start];

		for (i = start; i < anz; i++) {

			array[start] = array[i];

			array[i] = sav;

			perm(anz, array, start + 1);

			array[i] = array[start];

		}

		array[start] = sav;

	}

	else {

		ausgabe(anz, array);

	}

}

/*Hier hackt es, keine Ahnung, warum er keine Ausgabe macht*/

void ausgabe(int anz, int array[]) {

	int i,hilf1,hilf2,hilf3,hilf4;

	for (i = 0; i < anz; i++) {


        hilf1 = array [0] - array[1];                            /*für 1*/

		hilf2 = array [0] - array[2];

		hilf3 = array [0] - array[3];


		if ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1) && (hilf3 >1 || hilf3 < -1))   /* für 2*/

		   { hilf1 = array[1] - array [2];

		     hilf2 = array [1] - array[4];

		     hilf3 =array [1] -array [5];


             if ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1) && (hilf3 >1 || hilf3 < -1) && (hilf4 >1 || hilf4 < -1))   /*für 3*/

              { hilf1 = array[2] -array [3];

                hilf2= array [2] - array [5];

                hilf3= array [2] - array [6];

                hilf4= array [2] -array[4];


                if ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1) && (hilf3 >1 || hilf3 < -1))                      /*für 4*/

                {hilf1=array [3] -array[5];

                hilf2= array[3] -array[6];


                        if ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1))                                      /*für 5*/

                           { hilf1 = array [4] - array[5];

                             hilf2 = array[4] -array [5];


                             if  ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1))                         /*für 6 */

                                 { hilf1=array[5]-array[7];

                                   hilf2=array[5]-array[6];


                                   if ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1))  /*für 7*/

                                      {hilf1 = array[6] -array[7];


                                             if (hilf1 >1 || hilf1 < -1)

                                                {printf("%d ", array[i]);


	}}}}}}}}

	printf("\n");

}

Geschrieben

if ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1) && (hilf3 >1 || hilf3 < -1) && (hilf4 >1 || hilf4 < -1))   /*für 3*/
Hier ist schon mal ein Fehler: Du fragst hier hilf4 ab, ohne es jemals initialisiert zu haben.
hilf4= array [2] -array[4];
Hier ermittelst du dann hilf4, benutzt das Ergebnis aber nie wieder.
hilf1 = array [4] - array[5];
hilf2 = array[4] -array [5];[/code]

Hier füllst du hilf1 und hilf2 mit demselben Ausdruck. Ist bestimmt auch nicht Sinn der Sache.

Aber ich würde das grundsätzlich anders aufziehen. Du merkst ja selbst, wie schwierig die Fehlersuche in solchem Code ist.

Schreib dir doch erst mal eine Funktion, die zwei Arrayeinträge prüft und das Ergebnis zurückgibt. Dann kannst du dir die ganzen Hilfsvariablen und Größer-oder-Kleiner-Vergleiche sparen.

Geschrieben

Hi royale,

ich sitz an der selben Aufgabe. Ich mache sie aber ganz anders. In den HÜ Folien steht als Tipp eine Adjazenzmatrix. Die sagt dir praktisch, welche Knoten miteinander verbunden sind. Vom Ablauf her mache ich es so:

perm gibt eine Möglichkeit aus, die Zaheln 1 bis 8 anzuordnen. eine funktion (bei mir heißt sie pruefung) prüft mithilfe der adjazenzmatrix, ob die verbundenen Zahlen um mehr als 1 verschieden sind. Dann printet die funktion ausgabe das. Und perm geht von vorne los mit der nächsten Anordnungsmöglichkeit. Es läuft bei mir auch noch nciht richtig, aber ich denke, das ist ne Ecke überishctlicher als deins. Zumindest ist es das bei mir. ;)

Geschrieben
if ((hilf1 >1 || hilf1 < -1) && ( hilf2 >1 || hilf2 < -1) && (hilf3 >1 || hilf3 < -1) && (hilf4 >1 || hilf4 < -1))   /*für 3*/
Hier ist schon mal ein Fehler: Du fragst hier hilf4 ab, ohne es jemals initialisiert zu haben.
hilf4= array [2] -array[4];
Hier ermittelst du dann hilf4, benutzt das Ergebnis aber nie wieder.
hilf1 = array [4] - array[5];

hilf2 = array[4] -array [5];

Hier füllst du hilf1 und hilf2 mit demselben Ausdruck. Ist bestimmt auch nicht Sinn der Sache.

Aber ich würde das grundsätzlich anders aufziehen. Du merkst ja selbst, wie schwierig die Fehlersuche in solchem Code ist.

Schreib dir doch erst mal eine Funktion, die zwei Arrayeinträge prüft und das Ergebnis zurückgibt. Dann kannst du dir die ganzen Hilfsvariablen und Größer-oder-Kleiner-Vergleiche sparen.

jau okay, habs geändert, jetzt funzt es auch, nur die ausgabe is nen bissel strange vom format her

sieht in etwa so aus:

2

6

8

5

4

1

3

7

a

d

f

w

e

h

g

Is zwar nicht schön, aber immerhin schonmal ein ergebnis^^

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...