Fragen zu Aufgaben von C++ Anfänger
-
Hallo zusammen!
Ich bin ein absoluter Beginner in Sachen C++. Habe an der Uni einen C++ Kurs belegt und nach der ganzen Theorie versuche ich mich jetzt mit Hilfe von Alt-Klausuren auf die Prüfung vorzubereiten. Kann mir jemand bei folgenden Fragen weiterhelfen, denn ich komm da einfach nicht weiter?
Aufgabe 2:
Schreiben Sie ein Testprogramm der Klasse ort, indem Ortsdaten aus einem File „orte.txt“ eingelesen und über den Konstruktor in eine Ortstabelle orte [MAX] eingetragen werden. MAX ist ein Generierungsparameter. Beim Einlesen der Datensätze ist auf das Fileende zu testen, da das File in der Regel weniger Datensätze enthält, als durch MAX angegeben wird. Nach dem Einlesen soll die Ortstabelle mit der Elementefunktion print () ausgegeben werden.
In dem File „orte.txt“ sollen die Felder über Leerzeichen und die Datensätze über Newline getrennt sein.
Ergänzen Sie auch die erforderliche Include-Anweisung für die Fileverarbeitung.
Ergänzen Sie die fehlenden Anweisungen:
#define MAX 100
main ()
{
orte orte [MAX];
char name [100];
float br, len;
short h;}
Konstruktor Programmierung denke ich verstanden zu haben; was ich leider nicht kapiere sind die Details: ". Beim Einlesen der Datensätze ist auf das Fileende zu testen, da das File in der Regel weniger Datensätze enthält, als durch MAX angegeben wird. Nach dem Einlesen soll die Ortstabelle mit der Elementefunktion print () ausgegeben werden.In dem File „orte.txt“ sollen die Felder über Leerzeichen und die Datensätze über Newline getrennt sein."
Wo baue ich das ein? Und wie? Die Fragestellung kann ich mit meinen Unterlagen leider nicht lösen. Das angegeben Code Schnipsel ist übrigens "vollständig" (steht genau so inder Angabe).
Die Klasse orte wird als bekannt vorausgesetzt, ich vermute mal stark dass man sich hier auf die vorangegangene Aufgabe 1 orientiert, wo explizit auf diese Klasse eingegangen wird. ich habe keinen Plan wie man den Code vervollständigen soll...Aufgabe 1:
Schreiben Sie für die Klasse ort eine Funktion operator-, die die annähernde Entfernung in km zwischen zwei Orten aus der Differenz der geografischen Breite, B1 bzw. B2, und geografischen Länge, L1 bzw. L2, der Orte berechnet. Der mittlere Radius der Erde soll dazu mit 6370 km angenommen werden. Höhenunterschiede zwischen den Orten sollen vernachlässigt werden. Unter Vernachlässigung der Erdkrümmung kann aus der vertikalen Entfernung EB und horizontalen Entfernung EL über den Satz des Pythagoras näherungsweise die Entfernung E zwischen den Orten berechnet werden. Dazu implementieren Sie die folgenden Formeln:EB = 6370 * (B2-B1)/180 * 3.1416
EL = 6370 * cos(B1) * (L2-L1)/180 * 3.1416
E = sqrt(EL * EL + EB * EB)
Die Funktion sqrt ist im Headerfile cmath wie folgt definiert: double sqrt(const double r)Vielen Dank im Voraus für Eure Hilfe!
Beste Grüße
Mike
-
Würdest Du Code haben, der schon fast fertig ist, und nur fragen, warum die Zeile 85 nicht so klappt, wie Du willst und würdest Du beschreiben, was Zeile 85 machen soll, dann würde ich schnell helfen können.
Aber deine Fragen sind so breit, daß ich so weit ausholen müßte, daß ich Dir ein ganzes C++-Buch vorlesen müßte, und das wollen wir doch beide nicht, oder?
-
mike_monday schrieb:
Die Funktion sqrt ist im Headerfile cmath wie folgt definiert: double sqrt(const double r)
Wozu das const?
http://www.cplusplus.com/reference/clibrary/cmath/sqrt/
-
Das ganze sieht aber nich wirklich nach einer C++ Aufgabe aus (eher nach einem C/C++ mix... mit define und char arrays...)
Zu aufgabe 2:
Überlade den >> operator zum Einlesen. Das Dateiende kannst du dann über den Zustand des streams bestimmen ( zB: while(is>>ort) ). Für Print würde sich der << Operator anbieten.
Wenn die Datensätze über newline getrennt sind, kannst du sie mit getline() einlesen. Die mit Leerzeichen getrennten Daten erhälst du, indem du wieder über einen stream gehststd::ifstream lesen("bla.txt"); std::string tmp; getline(lesen, tmp); std::sstringstream Str; Str<<tmp; while(Str>>tmp) { //mit tmp arbeiten }Poste doch schonmal die Ansätze, die du schon hast
-
Hallo,
danke für die Antworten. Ich bin wie gesagt bei der Aufgabe noch nicht sehr weit gekommen.
Bisher habe ich lediglich:
#include <iostream> #include <fstream> #define MAX 100 main () { orte orte [MAX]; char name [100]; float br, len; short h; ofstream b_file ( "orte.txt" ); } print(orte); return EXIT_SUCCESS;Natürlich fehlt noch das testen auf das File Ende, sowie die Trennung der Datensätze über newline/getline (das steht leider nicht in meinen Unterlagen drin, deswegen auch meine derzeitige Ratlosigkeit bei diesem Teilaspekt...).
Grüße
Mike/edit pumuckl: [cpp]-Tags hinzugefügt. nächstemal bitte selbst machen!
-
Wie lange noch bis zur Prüfung?
-
8 Wochen.
-
dann solltest du dir in den 8 Wochen nochmal intensiv ein gutes Einsteigerbuch vornehmen. Da steht dann eigentlich alles drin was du brauchst. Ansonsten einfach mal auf www.cplusplus.com/reference die Referenz zu streams usw. durchforsten.
Wenn du konkrete Fragen hast helfen wir natürlich gerne weiter.
-
Hallo Mike,
poste doch bitte mal die ersten 2-3 Zeilen aus der vorgegebenen Datei "orte.txt" - dann können wir Dir auch konkret beim Einlesen der ort-Objekte helfen.
-
Werner_logoff schrieb:
poste doch bitte mal die ersten 2-3 Zeilen aus der vorgegebenen Datei "orte.txt" - dann können wir Dir auch konkret beim Einlesen der ort-Objekte helfen.
nicht nötig:
mike_monday schrieb:
In dem File „orte.txt“ sollen die Felder über Leerzeichen und die Datensätze über Newline getrennt sein.
Nachdem wir auch nicht wissen, wie der Typ
orteaussieht, können wir sowieso nur raten, ob ein Ansatz funktioniert oder nicht.mike_monday schrieb:
Beim Einlesen der Datensätze ist auf das Fileende zu testen, da das File in der Regel weniger Datensätze enthält, als durch MAX angegeben wird. Nach dem Einlesen soll die Ortstabelle mit der Elementefunktion print () ausgegeben werden.
Wo baue ich das ein? Und wie?Das war ne halbwegs konkrete Frage.
Schematisch geht das Einlesen also zB so:datei_öffnen(); datensatz_einlesen_und_speichern(); solange (nicht am Dateiende UND Anzahl < MAX) datensatz_einlesen_und_speichern(); datei_schließen();Wobei du dir dabei auch Gedanken darüber machen musst, wie du erkennst, wo das Array
ortezu Ende ist.Und sonst kann ich dir nur raten, zB erstmal das Einlesen zu versuchen, und dann nachzufragen, wenn's nicht klappt; aber etwas konkreter...