Was mach ich diesmal falsch?
-
Dieser Beitrag wurde gelöscht!
-
@wob
Und das SpaltName ist für die Namen der Spalten
-
@wob
Und man hätte jetzt auch ein 1D-Array mit 54 Feldern nehmen und das dann bei der Ausgabe passend formatieren können, schon klar.
Also falls du das meintest
-
Was die Sportfreunde dir sagen wollen:
Das Struct ist bereits deine Zeile, also deine zweite Dimension sozusagen.
Außerdem mischst du hier Datenhaltung und Visualisierung.Deine Daten sind eigentlich nur diese hier:
struct Daten { int ArtNr; string Bez; float IstBest; float HoeBest; float EinPreis; float TagVerbr; float BestDauer; float MeldBest; float BestVorschlag; }; std::vector<Daten> MeineDaten;
Deine Spaltennamen würdest du dann extra halten, weil die zur Visualisierung gehören, aber nicht zur Datenhaltung.
std::vector<std::string> Spaltennamen { "ArtNr", "Bez", "IstBest", "HoeBest", "EinPreis", "TagVerbr", "BestDauer", "MeldBest" };
Bzw. wenn du halt willst, dass der Nutzer die Spaltennamen jedesmal eingibt, geht das natürlich auch. Man kann sie aber auch fest definieren, was eher üblich ist.
D.h. du hast zu jedem Element deiner Daten-Struktur genau einen Spaltennamen ( und noch einen mehr, weil du irgendwas berechnest ).Was du gebaut hast, ist eigentlich nicht zwei Dimensional sondern eher schon drei-dimensional, wovon du 88% aber nicht nutzt.
Letztendlich brauchst du aber nur eine 1-dimensionale Datenstruktur, weil du 5 Datensätze hast. Das "struct" bildet dabei deinen Datensatz ab.
-
@JTR666 Es gibt auch die Felder
Tabelle[i][0].ArtNr; Tabelle[i][1].ArtNr; Tabelle[i][2].ArtNr; // und nur diese werden genutzt Tabelle[i][3].ArtNr; Tabelle[i][4].ArtNr; Tabelle[i][5].ArtNr; Tabelle[i][6].ArtNr; Tabelle[i][7].ArtNr; Tabelle[i][8].ArtNr;
-
@It0101 Also jede Spalte bekommt einen Datensatz aus der Struct.
Somit steht jede Spalte aus der Tabelle für eine Variable aus der Struct.
Und diese bekommen dann halt in jeder Zeile neue Werte zugewiesen.
6 Werte für ArtNr, 6 für Bez (Bezeichnung), usw.
Diese Werte geb ich dann ein.
Ergo sie werden in den Feldern abgelegt.
(Die Ausgabe ist korrekt, weswegen ich mal davon ausgehen, dass mein Vorgehen so weit nicht falsch ist. Ebenfalls ein Zeichen dafür, dass es die Variablen aus der Struct nicht überschrieben werden...)
Jetzt haben die letzten beiden Spalten noch keine Werte zugewiesen bekommen.
Diese werden dann jeweils mit Werten aus den schon belegten Feldern berechnet.
Denn die Rechnungen kommen ja erst NACH der Werteingabe in die ersten 6 Spalten, womit die Werte zur Berechnung allesamt bekannt sein sollten...
-
@DirkB Wo siehst du das denn bitte?
Das i steht ja nur in der ersten Klammer, womit du mit ArtNr nur die Felder [1][0], [2][0], [3][0], [4][0] & [5][0] belegst... Denn dadurch bleibt die Spalte für ArtNr immer die selbe...
-
@JTR666 sagte in Was mach ich diesmal falsch?:
Der gibt an den Stellen nur völlig komische Werte aus, mit denen ich nichts anfangen kann.
Dann gib dir doch mal die eingegebenen Werte wieder aus.
Mitcout
oder schau sie dir im Debugger an.
Dann weißt du erstmal, ob es auch die erwarteten Werte sind.
-
@DirkB Ich habe sie ausgegeben und die stimmten alle...
-
@JTR666 sagte in Was mach ich diesmal falsch?:
@DirkB Wo siehst du das denn bitte?
Das i steht ja nur in der ersten Klammer, womit du mit ArtNr nur die Felder [1][1], [2][1], [3][1], [4][1] & [5][1] belegst... Denn dadurch bleibt die Spalte für ArtNr immer die selbe...Ja aber das Element [1][1] ist eine komplette struct genauso wie [1][2], [1][3], ...
jedes dieser Elemente enthält alle Member ( von SpaltName bis BestVorschlag )
-
@DirkB Aaahhh, okay...
Ich dachte dass man das mit der Zuweisung .ArtNr als Beispiel verhindern und man sich nur die angegebene Variable der Struct rauspicken würde...
-
@DirkB Wieso klappt dann die Ausgabe so gut?
Das, wundert mich jetzt. Denn dann muss der das doch so machen, dass jedes Feld im Array 9 Plätze (für jede Variable aus der Struct eins) hat und nur den belegten Platz nimmt...
Aber das müsste er doch bei der Berechnung hinterher doch auch machen können...
-
@JTR666 Soll jetzt nicht so klingen, dass ich dir nicht glaube - im Gegenteil!
Ich frag mich nur was er macht, wenn er es ganz offensichtlich so macht wie du es sagst
-
@JTR666 sagte in Was mach ich diesmal falsch?:
Aber das müsste er doch bei der Berechnung hinterher doch auch machen können...
Ja.
cin >> Tabelle[i][5].TagVerbr; cin >> Tabelle[i][6].BestDauer; Tabelle[i][7].MeldBest = Tabelle[i][3].HoeBest - Tabelle[i][6].TagVerbr*(Tabelle[i][7].BestDauer - 2); //Meldebestand berechnen (die Werte kennt er ja, da sie davor eingegeben wurden.)
wenn du immer den gleichen Index verwenden würdest. Für z.B. TagVerbr nimmst du aber einmal 5 und ein anderes mal 6.
-
@manni66 Meinst du wegen der Inkrementierung von i?
-
@JTR666 sagte in Was mach ich diesmal falsch?:
@manni66 Meinst du wegen der Inkrementierung von i?
Nein
-
@manni66 Wie sonst? Die 5 sagt dir immer, dass es generell in der 6. Spalte liegt
-
@JTR666 sagte in Was mach ich diesmal falsch?:
@manni66 Wie sonst? Die 5 sagt dir immer, dass es generell in der 6. Spalte liegt
Du solltest meine Antwort lesen.
-
@JTR666 sagte in Was mach ich diesmal falsch?:
Also jede Spalte bekommt einen Datensatz aus der Struct.
Somit steht jede Spalte aus der Tabelle für eine Variable aus der Struct.Nein, jede Spalte hat den KOMPLETTEN Datensatz! Du wählst mit .ArtNr dann aber nur ArtNr aus.
Und diese bekommen dann halt in jeder Zeile neue Werte zugewiesen.
6 Werte für ArtNr, 6 für Bez (Bezeichnung), usw.Du hast aber nicht 6 ArtNr-Variablen, sondern 6*9 = 54 davon!
Vielleicht noch mal deutlicher: die Anzahl der Variablen in der Stuct hat NICHTS, GAR NICHTS!! mit der Arraygröße zu tun! Die sind voneinander unabhängig.
-
@wob Ja ja, aber durch [i][5] sagst du ihm ja auf welches er sich beziehen soll.
Somit werden nur die ArtNr in dieser Spalte genommen. Die der anderen Felder bleiben leer