Werte aus einer Matrix finden
-
Hi,
ich hab da ein kleines Problem und zwar hab ich mir einen Code geschrieben wo aus einer Textdatei eine Matrix mit 10 Zeilen und 2 Spalten erstellt wird.
Nun möchte ich einen variablen Wert eingeben, der dann dem nächst passendem Wert aus der 1. Spalte zugeordnet wird und mir den dazugehörigen Wert aus der 2. Spalte zur Weiterverarbeitung ausgibt.Hatt da vielleicht jemand eine Idee oder einen Anhaltspunkt wie ich das am besten realisieren kann???
Das wäre echt supercool

-
std::map ist eine Datenstruktur, die genau das macht. Allerdings gibst du damit die Matrixstruktur auf, dies käme also nicht in Frage, falls du diese noch für etwas anderes brauchst.
Ansonsten einfach die erste Spalte durchlaufen, bis man den Wert findet und dann den Wert aus der zweiten Spalte zurückgeben, wo ist das Problem?
-
Danke für deine schnelle Antwort...
Das Problem ist das ich nicht weiß wie der dazugehörige Befehl aussieht bzw. heißt um die Zeilen durchlaufenzulassen und die dazugehörige Spalte auszugeben...

-
Die "Befehle" die du brauchst heißen
for,if,return,int,++,==und[]. Die richtige Kombination davon heraus zu bekommen überlasse ich erstmal dir. Wenn du ernsthafte Schwierigkeiten hast, frag erneut.Falls du irgendeinen der "Befehle" nicht kennen solltest, dann schnapp dir schleunigst ein Grundlagenbuch über C++ und lies die ersten 10 Kapitel.
-
Ok Danke, das mit Schleife die hochzählt habe ich schon verstanden. Meine Schrittweite müßte dann nur entsprechend klein gewählt werden.
Nur hat meine Matrix folgende Form:4.884734e-004 1.220285e+021
1.106773e-003 1.227604e+021Die Werte die dazwischen liegen sollen zu dem nächsten Wert den dazugehörigen Wert aus Spalte 2 ausgeben. Das müsste mit ner Rundungsfunktion gehen.
Nur wie sieht die Syntax aus um den Wert aus der Zählschleiche mit dem Wert der aus der Matrix zu vergleichen...
if i == matrix [?] [0];
return == matrix [?] [1] ;ist wenigstens schonam die richtige Richtung?????
Vielen Dank für deine Mühe.....
-
Grobes Gerüst:
for (int i=0; i<10; ++i) if (matrix[i][0]==vergleichswert) return matrix[i][1];Wichtig: Mach dir unbedingt klar, warum und wie das funktioniert. Von deinem ersten Ansatz her vermute ich, dass du überhaupt keinen Plan hast, wie man selbst einfachste Algorithmen entwickelt. Das ist aber die Grundlage jeglicher Programmierung und muss dringend gelernt werden.
Auch sehr wichtig
: Das was ich dir als Ansatz gegeben habe, ist nur der Algorithmus. Er wird für Fließkommazahlen wie du sie hast, nicht funktionieren, denn die kann man nicht mittels == vergleichen. Das heißt, man kann zwar schon == benutzen, es wird aber nicht zuverlässig funktionieren. Das richtige Vorgehen um zwei solche Zahlen auszurechnen wäre es, die Differenz zu berechnen und zu prüfen, ob diese kleiner ist als ein gewisser vorgegebener Wert.Ich empfehle dir, den Algorithmus erstmal auf etwas einfaches anzuwenden (Integers), daran den Algorithmus zu verstehen und danach erst umzuschreiben auf deine Fließkommazahlen.
-
Vielen Vielen Dank..... Ich werde es gleich mal probieren und mich an deine Ratschläge halten!

-
Vielen Vielen Dank..... Ich werde es gleich mal probieren und mich an deine Ratschläge halten!

-
Egbert82 schrieb:
Die Werte die dazwischen liegen sollen zu dem nächsten Wert den dazugehörigen Wert aus Spalte 2 ausgeben. Das müsste mit ner Rundungsfunktion gehen.
Auch das geht mit einer std::map, ohne dass du selbst mit einer Schleife suchen musst, siehe map::upper_bound und map::lower_bound.