Datei einlesen
-
Streicher schrieb:
Von mir aus kann es auch eine Matrix sein in der dann alle 14 Werte eine neue Zeile/Spalte dazukommt, so dass es bisschen mehr Struktur hat. Dachte nur das mit dem Feld ist einfacher zu programmieren.
.. einfach zu programmieren ist ein Container mit Strukturen wie z.B.:
vector< Streicher > alleStreicherElementedas wäre im Prinzip die Tabelle, die Du wahrscheinlich brauchst (s.o.).
:xmas2: Werner
-
Werner Salomon schrieb:
Streicher schrieb:
Also ich muss aus der Datei die Zahlen der einzelnen Elemente einlesen. Soweit funktioniert ja auch schon das Programm. Ich muss aber später mit diesen Zahlen Rechnungen durchführen. Die Rechnung lautet z.B. R = a1 + a2 * T
Dabei ist T bekannt und a1 und a2 sind Werte die ich zuweisen muss und die in der Tabelle stehen.
Daher hab ich mir gedacht, dass ich sie alle in Felder reinschreibe, so dass ich sie dann einfach durch Feld[i] aufrufen kann und dann damit rechnen kann.Ich hoffe es ist klarer geworden.
Na ja - wo stehen die Werte a1 und a2? was passiert mit R nachdem es berechnet wurde und ist T immer konstant für alle a1 und a2?
:xmas2: WernerJa ich muss mit R noch weiterrechnen. Es folgen noch einige Rechenschritte aber ich brauch danach nichts mehr aus der Tabelle. Die brauch ich nur einmal.
T ist immer konstant.
-
.. und wo genau stehen a1 und a2 in der Tabelle? :xmas1:
-
Da das zuvor nur ein Bsp war sagen wir die ersten beiden stellen.
Schlussendlich brauch ich die ersten 5 werte sowie die 8. bis 12. Werte. Es wird eben immer komplizierter so, daher dachte ich , dass man alle einliest und man dann einfach die rauspickt, die man für die Rechnung braucht.
-
Streicher schrieb:
Da das zuvor nur ein Bsp war sagen wir die ersten beiden stellen.
Schlussendlich brauch ich die ersten 5 werte sowie die 8. bis 12. Werte. Es wird eben immer komplizierter so, daher dachte ich , dass man alle einliest und man dann einfach die rauspickt, die man für die Rechnung braucht.
Jedes Streicher-Element enthält die 14 Werte aus einem Eintrag. So wie Gugelmoser schon vorgeschlagen hat, kannst Du jedes mal wenn ein Element gelesen wurde, die von Dir gewünschten Rechnungen durchführen. Etwa in der Art:
// .. ab Zeile 13 vom meinem letzten Posting for( Streicher s; file >> s; ) { R = alleStreicherElemente.m_data[0] + alleStreicherElemente.m_data[1] * T; // R = a1 + a2 * T // und hier mit R weiter arbeiten .. oder weitere Rechnungen durchführen }und ist jetzt noch irgendwas unklar?
:xmas2: Werner
-
Hab ich nicht dann wieder das Problem, dass das R immer überschrieben wird?
-
Streicher schrieb:
Hab ich nicht dann wieder das Problem, dass das R immer überschrieben wird?
Dann musst du R eben auch in einem Container ablegen.

-
Wenn es mehr nicht ist...hab aber im moment eher in Problem mit eurem Vorschlag, denn es kommt für die Zeile:
R = alleStreicherElemente.m_data[0] + alleStreicherElemente.m_data[1] * T; // R = a1 + a2 * TFolgender Fehler:
error: 'class std::vector<Streicher, std::allocator<Streicher> >' has no member named 'm_data'
-
Streicher schrieb:
Wenn es mehr nicht ist...hab aber im moment eher in Problem mit eurem Vorschlag, denn es kommt für die Zeile:
R = alleStreicherElemente.m_data[0] + alleStreicherElemente.m_data[1] * T; // R = a1 + a2 * TFolgender Fehler:
error: 'class std::vector<Streicher, std::allocator<Streicher> >' has no member named 'm_data'Da fehlt eine Dereferenzierung: :p
int main() { using namespace std; vector<Streicher> alleStreicherElemente; ifstream file("input.txt"); if( !file.is_open() ) { cerr << "Datei kann nicht geoeffnet werden" << endl; return -1; } file >> skipline >> skipline; //Überspringen der ersten beiden Zeile for( Streicher s; file >> s; ) { alleStreicherElemente.push_back( s ); // hier das gerade gelesene Element des Typs Streicher im Container aufnehmen } // ... vector<double> results; R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T results.push_back(R); //... return 0; }
-
Also auf jeden Fall klappt der Code und es sieht genau danach aus wie ich es haben will. Sind hierbei die Ergebnisse alle im Vector dann gespeichert, so dass man mit denen dann weiterarbeiten kann?
Wenn ja, wie ruft man dann die einzelnen R's wieder auf?
-
Streicher schrieb:
Also auf jeden Fall klappt der Code und es sieht genau danach aus wie ich es haben will. Sind hierbei die Ergebnisse alle im Vector dann gespeichert, so dass man mit denen dann weiterarbeiten kann?
Wenn ja, wie ruft man dann die einzelnen R's wieder auf?Das steht eigentlich schon alles da. Du darfst nicht zu komplizierzt denken. Behandel den Vector hierbei wie ein Array:
cout << "Das Ergebnis meiner ersten Rechnung: " << results[0];
-
Okay das aufrufen klappt und das ist genau das was ich brauche!

Wenn ich nun das hier habe:
// ... vector<double> results; R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T results.push_back(R); //...Und dann einen weiteren R ausrechen will, wie mach ich das dann? Einfach dadrunter setzen?
z.B.:
// ... vector<double> results; R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T R = alleStreicherElemente[3].m_data[2] + alleStreicherElemente[2].m_data[5] * T; results.push_back(R); //...Oder wie kann ich weitere R's ausrechen?
-
Streicher schrieb:
Und dann einen weiteren R ausrechen will, wie mach ich das dann? Einfach dadrunter setzen?
z.B.:
// ... vector<double> results; R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T R = alleStreicherElemente[3].m_data[2] + alleStreicherElemente[2].m_data[5] * T; results.push_back(R); //...Oder wie kann ich weitere R's ausrechen?
Immer wenn du ein R ausrechnest, musst du ein push_back machen. Wo du nun deine Rechnungen brauchst, weißt du ja am besten; wenn dahinter eine bestimmte Logik steht, schreibst du natürlich nicht alle Rechnungen untereinander, sondern machst einen Algorithmus.
-
Vielen Dank für die Hilfe. Das Programm läuft soweit. :xmas1: