speziele Daten auslesen.. Array
-
Hey also ich habe eine Datei und lese den Inhalt aus, der wie folgt ausgeschrieben:
Konzentration;Gesamtdichte
1.23 ; 11.223
2.46 ; 22.234
3.11 ; 33.4565
4.98 ; 44.65usw.
Jetzt soll man, wenn man die Gesamtdichte angibt die Konzentration erhalten und andersrum. Das ist alles kein Problem.
Jetzt möchte ich aber noch einbauen, dass er, sobald man einen falschen Wert eingibt, in einer MessageBox() jeweils 2 Werte die größer und zwei die kleiner sind als die Eingegebene anzeigen. Also diese aus der Datei suchen.
Sprich wenn ich 3.5 eingebe und er gibt mir dann 1,2,3 und 4 aus.Ich habe jedoch keine Ahnung wie ich das bewerkstelligen soll. Hätte jemand eine Ahnung?
Danke
-
Wenn die Daten sortiert sind, ist das recht einfach - du suchst die Position, wo der Zielwert stehen sollte und gibst die Werte in der Umgebung dieser Position aus. Bei unsortierten Daten wird es etwas komplizierter - da müsstest du den größten und kleinsten Wert suchen, der unterhalb bzw. oberhalb des Ziels liegt, z.B.:
double max_val = 0; for(int i=0;i<count;++i) if(val[i]>max_val && val [i<target) max_val=val[i];(btw, ist die Zuordnung eigentlich monoton steigend?
-
das Problem dabei ist, das die Werte varieren können. Außerdem kann man nicht sagen ob es sortiert ist oder nicht, weil die Daten per Hand von Leuten eingetragen werden. Und das muss auch so bleiben. Desweiteren müssen die Werte genauso stehen bleiben, wie sie in der Datei stehen weil z.B. 1;1 zusammengehören.
Ich dachte mir das man ja einfach die Differenz zwischen der Eingabe und der Zahl in der Dabei berechnen kann, denn die kleinste Differenz ist ja auch dementsprechend die Zahl, die am nächsten dran ist
Nur irgendwie fehlt mir gerade der nötige Gedankenblitz wie ich das abfragen könnte^^
-
Den Zusammenhang zwischen den beiden Werten kannst du problemlos behalten, indem du beide zusammen in einen struct packst. Da hast du auch kein Problem damit, die Daten zu sortieren. Alternativ besteht auch die Möglichkeit, indirekt zu sortieren - du nimmst dir ein Array von int's, die jeweils einen Index in deinem Datenarray darstellen und sortierst diese entsprechend der Daten.
Ansonsten: Der Code dort oben berechnet den zum Zielwert nächstkleineren Wert in deinem Array, zu Not liese sich das auch anpassen, um den zugehörigen Array-Index zu notieren. Den nächstgrößeren Wert erhältst du, indem du die Vergleichsoperatoren umdrehst und mit einem ausreichend großen Startpunkt beginnst.
(die vorletzten Werte in beide Richtungen zu finden dürfte ein wenig komplizierter sein)PS: Was soll eigentlich rauskommen, wenn der Nutzer 1.5 (nur ein kleineres Element) oder 0.5 (kleiner als alle existierenden Einträge) suchen will?
-
Mir ist eben aufgefallen, das die Daten alle in einem String-Array gespeichert werden. Ist es auch möglich das ich den String-Array sortiere?`Weil die Datei wird Zeilenweise eingelesen und dann jedes Zeichen und das kann ich nicht einfach als double oder so wechseln.
Wär es vll möglich mal einen Beispielcode zu erstellen?
-
Klar kannst du auch ein String-Array sortieren - du mußt dir nur eine Vergleichsfunktion schreiben, die entscheidet, welcher Eintrag größer ist.
(btw, was spricht dagegen, die Daten als double zu verwalten?)