Werte aus einer datei lesen und mit ihnen rechnen
-
Guten Abend ihr Lieben!
Ich hoffe von euch kann mir hier irgendjemand helfen, ich bin hier schon total am verzweifeln. Bin ganz neu in c++ und muss ne Übung machen, habe aber leider überhaupt keinen Plan, wie das geht. Und von meinen Komolitonen kann mir auch leider keiner helfen, da ja zur Zeit Ferien sind.
Ich habe eine Textdatei die folgender Maßen aussieht(alles innerhalb der Striche):
-------------------------------------------------------------------
13
3523216.343218, 5773089.044545, 5.05
3523320.146447, 5773120.018090, 6.054
3523396.324623, 5773086.533177, 7.07
3523484.222519, 5773028.771703, 8.56
3523416.415571, 5772984.404194, 35.65
3523314.286588, 5772960.127632, 55.017
3523377.070799, 5772899.017667, 25.032
3523441.529255, 5772808.608403, 25.03
3523410.555711, 5772752.521174, 15.0323
3523324.332061, 5772735.778718, 0.021
3523172.812832, 5772795.214437, 35.02
3523155.233253, 5772883.949456, 4.021
3523156.907498, 5773045.514159, 99.02
----------------------------------------------------------------------Die einzelenen Spalten muss man sich als X,Y,Z Koordinaten vorstellen. Nun soll ich folgende Aufgaben lösen:
Es ist ein Programm zu schreiben, welches eine Liste von Punkten mit XYZ-Koordinaten einliest
•Die Punkte repräsentieren ein Polygon, dessen Flächeninhalt zu ermitteln ist
Formel : 1/2 ∑ (x i + x i+1) (y i+1 - y i)Außerdem soll noch folgendes gemacht werden
die Mittelwerte der Koordinaten sowie die minimalen und maximalen Koordinaten zu bestimmen
Die Punkte sowie die Ergebnisse sind formatiert auf dem Bildschirm auszugeben
Zusätzlich sind die Punkte sowie die Ergebnisse in eine Datei auszugeben
(Spalten mit 12 Zeichen und 3 Nachkommastellen)Wenn mir hierbei irgendjemand helfend unter die arme geifen könnte wäre ich der glücklichste Mensch auf Erden. Ich hoffe ich finde wen, der mir helfen kann.
Wenn jemand fragen haben sollte, erreicht ihr mich ständig per Email.
die.gelbe.blume@gmx.deViele liebe Grüße
Ciaoi Eure Anna
-
Hallo, schau mal in den C++ FAQ hier im Forum, da ist eine ziemlich gute Anleitung wie man mit Strömen umgeht. Sobald du dir ein fstream erstellt hast kannst du damit arbeiten wie mit cout bzw. cin.
Gruß
-
Hi,
nicht von der kompletten Aufgaben abschrecken lassen, sondern jede Teilaufgabe
einzeln angehen.Ich würde mir das Einlesen der Datei in ein Array einer geeigneten Struktur als erstes vornehmen. Gleich im Anschluss die Ausgabe auf dem Bildschirm.
Ziehe also deine Scripte zu rate, wie man Dateioperationen realisiert...Einfach anfangen und dann ggf. konkrete Fragen stellen.
Das Warten darauf, dass dich jemand per Mail anschreibt um hier eine Einzelbetreuung anzubieten, ist so ziemlich das naivste, was du tun kannst
-
Hallo Anna,
was ist eine Koordinate in C++ - im einfachsten Fall etwa
class Koordinate { double m_x; double m_y; double m_z; };
Wie liest man genue eine (!) Koordinate aus einer Datei?
Wie liest man viele Koordinaten?
Wie berechnet man ein Element der Flächeninhaltssumme?
Wie berechnet man die Summe aller Elemente?
usw. für Mittelwerte, Maxima, Minima und Ausgaben ..einfach konkrete Fragen stellen.
Gruß
Werner
-
Da jetzt nach Anna und unsub auch noch Armer Ahnungsloser dieselbe Anfrage posten, scheint es ja sehr dringend zu sein.
Ich finde die Aufgabe recht interesant; anbei mein Lösungsvorschlag:
#include <algorithm> // std::min, std::max, std::copy #include <fstream> #include <functional> // std::plus<> #include <iostream> #include <iomanip> // std::setprecision #include <iterator> // std::istream_iterator #include <numeric> // std::inner_product #include <vector> // -- eine 'Koordinaten'-Klasse, so wie sie für diese // Aufgabe benötigt wird class Koordinate { public: Koordinate() : m_x(0), m_y(0), m_z(0) {} Koordinate( double x, double y, double z ) : m_x(x), m_y(y), m_z(z) {} Koordinate& operator+=( const Koordinate& b ); Koordinate& operator/=( double divisor ); friend double deltaF( const Koordinate& a, const Koordinate& b ); friend Koordinate minKo( const Koordinate& a, const Koordinate& b ); friend Koordinate maxKo( const Koordinate& a, const Koordinate& b ); friend std::istream& operator>>( std::istream& in, Koordinate& k ); friend std::ostream& operator<<( std::ostream& out, const Koordinate& k ); private: double m_x; double m_y; double m_z; }; // -- addieren von zwei Koordinaten Koordinate& Koordinate::operator+=( const Koordinate& b ) { m_x += b.m_x; m_y += b.m_y; m_z += b.m_z; return *this; } Koordinate operator+( Koordinate a, const Koordinate& b ) { return a += b; } // -- Division einer Koordinaten durch einen Skalar Koordinate& Koordinate::operator/=( double divisor ) { m_x /= divisor; m_y /= divisor; m_z /= divisor; return *this; } Koordinate operator/( Koordinate k, double divisor ) { return k /= divisor; } // -- bestimmen der Koordinate mit den jeweils // kleinsten bzw. größten Koordinaten-Werte aus zweien Koordinate minKo( const Koordinate& a, const Koordinate& b ) { return Koordinate( std::min( a.m_x, b.m_x ), std::min( a.m_y, b.m_y ), std::min( a.m_z, b.m_z ) ); } Koordinate maxKo( const Koordinate& a, const Koordinate& b ) { return Koordinate( std::max( a.m_x, b.m_x ), std::max( a.m_y, b.m_y ), std::max( a.m_z, b.m_z ) ); } // -- Koordinate lesen Format: "x, y, z" std::istream& operator>>( std::istream& in, Koordinate& k ) { double x,y,z; char komma; if( in >> x >> komma >> y >> komma >> z ) { k = Koordinate( x, y, z ); } return in; } // -- Koordinate schreiben std::ostream& operator<<( std::ostream& out, const Koordinate& k ) { return out << std::fixed << std::setprecision( 3 ) << std::setw( 12 ) << k.m_x << ", " << std::setw( 12 ) << k.m_y << ", " << std::setw( 12 ) << k.m_z; } // -- Berechungs eines Elements der Summenformel zur Berechnung der // Fläche eines geschlossenes Polygons double deltaF( const Koordinate& a, const Koordinate& b ) { return (a.m_x + b.m_x) * (b.m_y - a.m_y); } int main() { using namespace std; vector< Koordinate > koords; { // -- Koordinaten einlesen int n; ifstream file( "input.txt" ); copy( istream_iterator< Koordinate >( file >> n ), istream_iterator< Koordinate >(), back_inserter( koords ) ); if( koords.size() != n ) { cerr << "Fehler beim Lesen der Koordinaten" << endl; return -1; } } // -- gewünschte Ergebnisse ausgeben cout << "Minima: " << accumulate( koords.begin() + 1, koords.end(), koords.front(), &minKo ) << endl; cout << "Maxima: " << accumulate( koords.begin() + 1, koords.end(), koords.front(), &maxKo ) << endl; cout << "Mittelwert: " << accumulate( koords.begin(), koords.end(), Koordinate() ) / koords.size() << endl; cout << "Flaeche: " << inner_product( koords.begin(), koords.end() - 1, koords.begin() + 1, deltaF( koords.back(), koords.front() ), std::plus< double >(), &deltaF )/2 << endl; return 0; }
Ich vermute mal, dass Ihr sie schwerlich als Eure eigene ausgeben könnt. Aber vielleicht reicht es, um eine eigene daraus zu schnitzen
Gruß
Werner
-
Kompilierung läuft...
Test.cpp
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(68) : error C2039: 'min' : Ist kein Element von 'std'
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(68) : error C2065: 'min' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(69) : error C2039: 'min' : Ist kein Element von 'std'
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(70) : error C2039: 'min' : Ist kein Element von 'std'
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(75) : error C2039: 'max' : Ist kein Element von 'std'
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(75) : error C2065: 'max' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(76) : error C2039: 'max' : Ist kein Element von 'std'
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(77) : error C2039: 'max' : Ist kein Element von 'std'
Fehler beim Ausführen von cl.exe.Test1.exe - 8 Fehler, 0 Warnung(en)
habe den quellcode getestet, gibt mir jedoch beim debuggen folgende fehlermeldung aus
???
-
scofield schrieb:
Kompilierung läuft...
Test.cpp
C:\Programme\Microsoft Visual Studio\MyProjects\Test1\Test.cpp(68) : error C2039: 'min' : Ist kein Element von 'std'Ich vermute Du benutzt den VC6-Compiler. An dieser Stelle ist er nicht C++-Standard-konform. Lasse das std:: vor min und max einfach weg. Ggf. musst Du auch noch einen Header inkludieren - ich weiß aber nicht mehr welchen.
In der STL-Implementierung des VC6 sind min und max jeweils per Makro implementiert.Gruß
Werner