Konvertierung von txt in eine array funktioniert nicht

Minimum in der ersten Zeile einer Matrix finden aber 0 ignorieren

Code:
    //Travelling salesmen


    double min[12];






    for (int k=0;k<5;k++)
    {
        for(int j=0;j<5;j++)
        {
            if (min[j]>myArray[0][j]) {
            min[j]=myArray[0][j];}
    }
}
for (int j=0;j<1;j++)
{
    cout<<"Minimum der ersten Zeile :min["<<j<<"]"<<endl;
    cout<<min[j]<<endl;
}
}
 
C:
if (min[j]>myArray[0][j] && myArray[0][j] != 0) {
//...
min[j] = myArray[0][j];
}

Dein Code ist seltsam. So bräuchtest du z.B. die for(k)-Schlaufe gar nicht. Oder hast du den Code gekürzt?
Und warum greifst du nur auf die myArray[0]-Dimension zu?
/Edit:
Meinst du vielleicht myArray[k][j] statt myArray[0][j]?

Gruss
cwriter
 
Zuletzt bearbeitet:
problem ist das er das minimum nicht korrekt anzeigt:(genauer gesagt nimmt er immer dasselbe element als minimum egal was man eingibt
C++:
#include <iostream>
#include<cmath>
#include<vector>
using namespace std;


int main()
{
    double xPoint[6];
    double yPoint[6];



    for (int i = 0; i < 5; i++)
    {
        cout << "Enter the x coordinate for position" << i << ": ";
        cin >> xPoint[i];
        cout << "Enter the y coordinate for position" << i << ": ";
        cin >> yPoint[i];
        cout << string(50, '\n');
    }

    double myArray[5][5];

    for (int k = 0; k < 5; k++)
    {
        for (int j = 0; j < 5; j++)
        {
            double X = sqrt(pow(xPoint[k] - xPoint[j], 2) + pow(yPoint[k] - yPoint[j], 2));
            if (X==0)
                {
                X=100;
                }
            myArray[k][j] = X;
            cout << X << " ";
        }
        cout << endl;
    }
    //Travelling salesmen
     double min[12];
min[0]=myArray[0][0];
    float Y;
      int Z;




    {
        for(int j=0;j<5;j++)
        {
            if (min[j]>myArray[0][j]) {
            min[j]=myArray[0][j];;
             Y= min[j];Z=j;}
    }
}
for (int j=0;j<1;j++)
{
    cout<<"Minimum der ersten Zeile :min["<<Z<<"]"<<endl;
    cout<<Y<<endl;
}
}
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

also also deine Formatierung ist immer noch etwas dürftig, dass solltest du besser früh in den Griff bekommen. Denn du wirst nie selbst Fehler finden, wenn du nicht etwas Ordentlichkeit mit einbringst.

Die Code-Tags hast du inzwischen gefunden. Das ist soweit gut, aber wenn du CODE durch CPP ersetzt, dann bekommen wir noch etwas Farbe in den Quelltext.

Zu deinem Programm. Die 0 kommt in deinem Programm nur zu stande, wenn k == j.
Daher mein Vorschlag:

C++:
if(j == k) {
	X = 100;
} else {
	X = sqrt(...);
}


Deine Minimumsberechnung verstehe ich nicht. Aber ist eigentlich auch nicht schwer, wenn du wie in meinem Beispiel den Wert auf 100 setzt. Am besten setzt du ihn aber direkt auf das Maximum, dann bist du auch bei großen Werten auf der sicheren Seite.

Pseudocode vom Minimum:

- Iteriere über Zeilen
- setze minimum als Maximalwert (oder sehr hoch)
- Iteriere über Spalten und vergleiche mit Minimum. Falls kleiner nehmen, sonst weiter. ->nächste Spalte
- speichere minimum ins array -> nächste Zeile


Grüße,
Jennesta
 
Zuletzt bearbeitet von einem Moderator:
ja das ist schon klar aber ich suche nur das minimum in der ERSTEN ZEILE da mein Algortihmus folgendermassen lautet daher habe ich die zeile auf 0 gesetzt und iteriere über alle spalten da mein algo dann in weiterer folge so lautet;

Suche das Minimum in der ersten Zeilen
speichere den wert und den spaltenindex wo das minimum gefunden wurde
gehe dann in die zeile == spaltenindex des minimum hat und suche dort wieder das minimum
mach das solange bis alle zeilen durch sind

das problem ist das das minimum der ersten zeile einfach nicht korrekt angezeigt wird er vermutet es immer in der 3 spalte wo es aber nicht ist ..
 
Zuletzt bearbeitet:
C:
min[0]=myArray[0][0];
Was ist das? Warum setzt du den Wert von min[0] auf den von myArray(0|0)? (Ich mag die Koordinatenschreibweise in diesem Beispiel einfach ;-) )
Alle anderen mins (also min[1], min[2], usw.) sind undefined values. Setze sie zuerst auf den höchsten zu erwartenden Wert+1.

Gruss
cwriter
 
Hallo,

ich habe nun deinen Code gedebugged. Ich bitte dich den Code nicht einfach zu übernehmen, sondern dich damit auseinanderzusetzen.

Der Fehler tritt in dem Teil des Codes auf, den du schlecht formatiert hast. Mach dir darüber Gedanken. Leerzeichen sind übrigens da um sie zu nutzen.

C++:
    //Travelling salesmen
	double min[6];
	int spalte = 0;

	for(int j = 0; j < 5; j++) {
        int minimum = 10000;
		if(minimum > myArray[0][j]) {
			minimum = myArray[0][j];
			spalte = j;
		}
		min[0] = minimum;
	}
	for (int j=0;j<1;j++)
	{
		cout << "Minimum der ersten Zeile :min[" << spalte <<"]" << endl;
		cout << min[0] <<endl;
	}

	fflush(stdin);
	getchar();
	return 0;

Außerdem sollte deine main-Funktion einen Rückgabewert haben, da du sie auch mit "int" definiert hast.

Grüße,
Jennesta
 
Zuletzt bearbeitet von einem Moderator:
Hallo Jennester;

Ich habe mir deinen Ansatz durchgesehen, du hast das minimum für die Startlösung auf 1000 gelegt und rechnest dann in der Schleife mit einem Startwert von 10000, hätte ich auc gedacht das das die lösung bringt nur leider... Nein das minimum bleibt leider and der falschen stelle ABER VIELEN DANK FÜR DAS AUSBESSERN; WAR SICHER EIN STEP ZUM ZIEL************ das mit dem minimum stimmt mal 100 prozentig******
C++:
#include <iostream>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;


int main()
{
    double xPoint[6];
    double yPoint[6];



    for (int i = 0; i < 5; i++)
    {
        cout << "Enter the x coordinate for position" << i << ": ";
        cin >> xPoint[i];
        cout << "Enter the y coordinate for position" << i << ": ";
        cin >> yPoint[i];
        cout << string(50, '\n');
    }

    double myArray[5][5];

    for (int k = 0; k < 5; k++)
    {
        for (int j = 0; j < 5; j++)
        {
            double X = sqrt(pow(xPoint[k] - xPoint[j], 2) + pow(yPoint[k] - yPoint[j], 2));
            if (X==0)
                {
                X=100;
                }
            myArray[k][j] = X;
            cout << X << " ";
        }
        cout << endl;
    }
    //Travelling salesmen
    double min[6];
    int spalte = 0;

    for(int j = 0; j < 5; j++) {
        float minimum = 10000;
        if(minimum > myArray[0][j]) {
            minimum = myArray[0][j];
            spalte = j;
        }
        min[0] = minimum;
    }
    for (int j=0;j<1;j++)
    {
        cout << "Minimum der ersten Zeile :min[" << spalte <<"]" << endl;
        cout << min[0] <<endl;
    }


    return 0;

}
 

Anhänge

  • minimum_zeile.PNG
    minimum_zeile.PNG
    31,4 KB · Aufrufe: 7
Zuletzt bearbeitet von einem Moderator:
Da der Code bei mir funktioniert, kann ich da schlecht sagen was du falsch machst.
Es wäre auch interessant zu wissen welche Zahlen du eingibst. 50 newlines sind da ein bisschen unnötig, meinst du nicht?

Auch drängt sich mir der Verdacht auf, dass du einfach nur Copy+Paste gemacht hast und hoffst das wir dir dein Problem lösen.
 
Hallo

Zudem sieht die Ausgabe nicht wirklich nach einem Minimum aus.
C:
 float minimum = 10000;
//Korrekter wäre
 float minimum = 10000.0f;

Und das ist mal ein riesiger overhead:
C:
for (int j=0;j<1;j++)

Ansonsten: Warum mischst du double und float?

/EDIT: Und warum brauchst du bei min einen double array, wenn du sowieso nur min[0] benutzt?

Gruss
cwriter
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück