Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Ostream Ausgabe » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (4): [1] 2 3 nächste » ... letzte » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Ostream Ausgabe
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
chatter
unregistriert
Ostream Ausgabe Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo Guten Tag kann mir jemand erklären wie ich bei der a) die ostream Ausgabe machen soll?

Wie macht man das ?

Die Rumpf implementierungen sehen so aus.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:

#ifndef MYCODE_CJULIANDATE_H_
#define MYCODE_CJULIANDATE_H_

#include <string>

/**
 * Diese Klasse repräsentiert ein Julianisches Datum ohne Uhrzeit.
 */
class CJulianDate {
private:
	long m_days;

	/**
	 * Formatiert die übergebene Tagesnummer (1-31) wie folgt: Ist die Zahl
	 * einstellig, wird ein Leerzeichen vorangestellt (3 --> " 3"). Stimmt
	 * die Zahl mit dem Tag des von diesem Objekt repräsentierten
	 * gregorianischen Datums überein, wird das Ergebnis mit eckigen
	 * Klammern umgeben ("10" --> "[10]"), sonst werden am Anfang und
	 * am Ende je ein Leerzeichen ergänzt ("10" --> " 10 ").
	 */
	std::string formatDayNumber (short day) const;

public:
	/**
	 * Erzeugt ein neues Objekt mit dem angegebenen Julianischen Datum.
	 */
	CJulianDate(long date = 0);

	/**
	 * Erzeugt ein neues Objekt, dessen Wert aus dem angegebene Gregorianische Datum
	 * berechnet wird.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	CJulianDate(int year, short month, short day);

	/**
	 * Liefert das Julianische Datum (Tage seit dem 1. Januar -4712 (4713 v. Chr)).
	 */
	long getJulianDate() const;

	/**
	 * Übernimmt das angegebene Julianische Datum.
	 */
	void setJulianDate(long date);

	/**
	 * Liefert den aktuallen Wert als Gregorianisches Datum.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	void toGregorianDate(int& year, short& month, short& day) const;

	/**
	 * Konvertiert und übernimmt das angegebene Gregorianische Datum.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	void fromGregorianDate(int year, short month, short day);

	/**
	 * Liefert den Wochentag zu dem aktuellen Datum (Montag = 1).
	 */
	int dayOfWeek() const;

	/**
	 * Liefert den Namen des Wochentags zu dem aktuellen Datum (Montag = 1).
	 */
	std::string dayOfWeekAsName() const;

	/**
	 * Addiert die angegebene Anzahl Tage zu diesem Julianischen Datum hinzu.
	 */
	CJulianDate& operator+= (long days) {
		m_days += days;
		return *this;
	}

	/**
	 * Vergleicht zwei Julianische Daten und liefert true, wenn das als
	 * linker Operand angegebene Datum vor dem als rechter Operand
	 * angegebenen liegt.
	 */
	bool operator< (const CJulianDate& rhs) const;

};

#endif /* MYCODE_CJULIANDATE_H_ */





cpp


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
   #include "CJulianDate.h"
#include <cstdio>

//===============================================
// Ergänzen Sie Ihren Code am Ende dieser Datei!
//===============================================

CJulianDate::CJulianDate(long date) {
	m_days = date;
}

CJulianDate::CJulianDate(int year, short month, short day) {
	fromGregorianDate(year, month, day);
}

long CJulianDate::getJulianDate() const {
	return m_days;
}

void CJulianDate::setJulianDate(long date) {
	m_days = date;
}

void CJulianDate::toGregorianDate(int& year, short & month, short & day) const {
	long i, j, k, l, n;

	l = m_days + 68569;
	n = 4 * l / 146097;
	l = l - (146097 * n + 3) / 4;
	i = 4000 * (l + 1) / 1461001;
	l = l - 1461 * i / 4 + 31;
	j = 80 * l / 2447;
	k = l - 2447 * j / 80;
	l = j / 11;
	j = j + 2 - 12 * l;
	i = 100 * (n - 49) + i + l;

	year = i;
	month = j;
	day = k;
}

void CJulianDate::fromGregorianDate(int year, short month, short day) {
	m_days = day - 32075 + 1461 * (year + 4800 + (month - 14) / 12) / 4
			+ 367 * (month - 2 - (month - 14) / 12 * 12) / 12
			- 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4;
}

int CJulianDate::dayOfWeek() const {
	return (m_days % 7) + 1;
}

std::string CJulianDate::dayOfWeekAsName() const {
	switch (dayOfWeek()) {
	case 1:
		return "Montag";
	case 2:
		return "Dienstag";
	case 3:
		return "Mittwoch";
	case 4:
		return "Donnerstag";
	case 5:
		return "Freitag";
	case 6:
		return "Samstag";
	case 7:
		return "Sonntag";
	default:
		return "(Fehler)";
	}
}

std::string CJulianDate::formatDayNumber(short day) const {
	char buffer[5];
	int year;
	short month;
	short refDay;

	toGregorianDate(year, month, refDay);
	sprintf(buffer, day == refDay ? "[%2d]" : " %2d ", day);
	return std::string(buffer);
}

bool CJulianDate::operator <(const CJulianDate& rhs) const {
	return m_days < rhs.m_days;
}

//=====================================================
// Ergänzen Sie Ihren Code unterhalb dieses Kommentars
//=====================================================

   


Die oberen Codes wurden uns gegeben .

Wie gestalte ich jetzt die Ostream Ausgabe?

chatter hat dieses Bild (verkleinerte Version) angehängt:
bild1.png

26.02.2017 15:24
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Habe einen kleinen Ansatz:

Habe das Im Header implementiert für die a)

ostream& operator << (ostream& lop, const CJulianDate& rhs);

};





cpp

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:

ostream& operator << (ostream& lop, const CJulianDate& rhs){
	
	lop<< rhs.dayOfWeek() << " , " << rhs.formatDayNumber(short day) << " ." endl;
	
}




Welche Funktion rufe ich für Tag ,monat und Jahr auf ?

Es gibt ja viele ?
27.02.2017 16:30
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

GIbt es hier noch Helfer? großes Grinsen
03.03.2017 11:31
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du hast dir einen schlechten Zeitpunkt ausgesucht, es läuft gerade ein Wettbewerb.

Es ist möglich, auf private Felder zuzugreifen, wenn du ostream als friend deklarierst.
Siehe z.B. stackoverflow.
Alternativ kannst du der Klasse getter Funktionen hinzufügen, um so auf die Variablen zuzugreifen.

__________________
Syntax Highlighting fürs Board (Link)
03.03.2017 11:44 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:

#ifndef MYCODE_CJULIANDATE_H_ 
#define MYCODE_CJULIANDATE_H_ 

#include <string> 
  
/** 
 * Diese Klasse repräsentiert ein Julianisches Datum ohne Uhrzeit. 
 */ 
class CJulianDate { 
private: 
    long m_days; 
  
    /** 
     * Formatiert die übergebene Tagesnummer (1-31) wie folgt: Ist die Zahl 
     * einstellig, wird ein Leerzeichen vorangestellt (3 --> " 3"). Stimmt 
     * die Zahl mit dem Tag des von diesem Objekt repräsentierten 
     * gregorianischen Datums überein, wird das Ergebnis mit eckigen 
     * Klammern umgeben ("10" --> "[10]"), sonst werden am Anfang und 
     * am Ende je ein Leerzeichen ergänzt ("10" --> " 10 "). 
     */ 
    std::string formatDayNumber (short day) const; 
  
public: 
    /** 
     * Erzeugt ein neues Objekt mit dem angegebenen Julianischen Datum. 
     */ 
    CJulianDate(long date = 0); 
  
    /** 
     * Erzeugt ein neues Objekt, dessen Wert aus dem angegebene Gregorianische Datum 
     * berechnet wird. 
     * 
     * - year: das Jahr 
     * - month: der Monat (Januar = 1) 
     * - day: der Tag (erster Tag eines Monats: 1) 
     */ 
    CJulianDate(int year, short month, short day); 
  
    /** 
     * Liefert das Julianische Datum (Tage seit dem 1. Januar -4712 (4713 v. Chr)). 
     */ 
    long getJulianDate() const; 
  
    /** 
     * Übernimmt das angegebene Julianische Datum. 
     */ 
    void setJulianDate(long date); 
  
    /** 
     * Liefert den aktuallen Wert als Gregorianisches Datum. 
     * 
     * - year: das Jahr 
     * - month: der Monat (Januar = 1) 
     * - day: der Tag (erster Tag eines Monats: 1) 
     */ 
    void toGregorianDate(int& year, short& month, short& day) const; 
  
    /** 
     * Konvertiert und übernimmt das angegebene Gregorianische Datum. 
     * 
     * - year: das Jahr 
     * - month: der Monat (Januar = 1) 
     * - day: der Tag (erster Tag eines Monats: 1) 
     */ 
    void fromGregorianDate(int year, short month, short day); 
  
    /** 
     * Liefert den Wochentag zu dem aktuellen Datum (Montag = 1). 
     */ 
    int dayOfWeek() const; 
  
    /** 
     * Liefert den Namen des Wochentags zu dem aktuellen Datum (Montag = 1). 
     */ 
    std::string dayOfWeekAsName() const; 
  
    /** 
     * Addiert die angegebene Anzahl Tage zu diesem Julianischen Datum hinzu. 
     */ 
    CJulianDate& operator+= (long days) { 
        m_days += days; 
        return *this; 
    } 
  
    /** 
     * Vergleicht zwei Julianische Daten und liefert true, wenn das als 
     * linker Operand angegebene Datum vor dem als rechter Operand 
     * angegebenen liegt. 
     */ 
    bool operator< (const CJulianDate& rhs) const; 
  
}; 

ostream& operator << (ostream& lop, const CJulianDate& rhs);   Hier richtig ?

#endif /* MYCODE_CJULIANDATE_H_ */





Jetzt habe ich den ostream ausserhalb der Klasse gebaut .

Was soll ich den im ostream für ne Funktion ausgeben ?


Abgekürzt ein wenig:

rhs.formatDayNumber(day,month,year);


Ich habe nur die zu veränderte Zeile gepostet
04.03.2017 09:31
Chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Jemand hat Tipps ?
06.03.2017 17:11
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Eulersche Zahl ? Noch da?
08.03.2017 23:50
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

.

Dateianhang:
zip CJulian.zip (2,35 KB, 260 mal heruntergeladen)


__________________
Syntax Highlighting fürs Board (Link)
09.03.2017 07:24 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Es werden mir zu viele Fehler angezeigt

Description Resource Path Location Type
Member declaration not found CJulianDate.cpp /CJulian line 19 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 23 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 27 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 31 Semantic Error
Type 'std::string' could not be resolved CJulianDate.h /CJulian line 21 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 15 Semantic Error
die Regel für Ziel „CJulian“ scheiterte makefile /CJulian/Debug line 44 C/C++ Problem
Nicht definierter Verweis auf `main' CJulian C/C++ Problem
make: *** [CJulian] Fehler 1 CJulian C/C++ Problem
Method 'toGregorianDate' could not be resolved CJulianDate.cpp /CJulian line 103 Semantic Error
Symbol 'cout' could not be resolved main.cpp /CJulian line 9 Semantic Error
Method 'dayOfWeekAsName' could not be resolved CJulianDate.cpp /CJulian line 104 Semantic Error
Symbol 'endl' could not be resolved CJulianDate.cpp /CJulian line 104 Semantic Error
Field 'm_days' could not be resolved CJulianDate.cpp /CJulian line 93 Semantic Error
Type 'std::ostream' could not be resolved CJulianDate.cpp /CJulian line 100 Semantic Error
Symbol 'std' could not be resolved main.cpp /CJulian line 5 Semantic Error
Type 'std::ostream' could not be resolved CJulianDate.cpp /CJulian line 100 Semantic Error
Type 'CJulianDate' could not be resolved CJulianDate.cpp /CJulian line 100 Semantic Error
Type 'CJulianDate' could not be resolved main.cpp /CJulian line 8 Semantic Error
Type 'std::ostream' could not be resolved CJulianDate.h /CJulian line 94 Semantic Error
Type 'std::string' could not be resolved CJulianDate.cpp /CJulian line 81 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 81 Semantic Error
Type 'std::string' could not be resolved CJulianDate.h /CJulian line 75 Semantic Error
Function 'string' could not be resolved CJulianDate.cpp /CJulian line 89 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 92 Semantic Error
Type 'std::ostream' could not be resolved CJulianDate.h /CJulian line 94 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 50 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 56 Semantic Error
Type 'std::string' could not be resolved CJulianDate.cpp /CJulian line 60 Semantic Error
Member declaration not found CJulianDate.cpp /CJulian line 60 Semantic Error


Wieso kommen diese Fehler ?
10.03.2017 14:02
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

von meinem Anhang? Bei mir läuft das alles, kompiliert mit g++.

__________________
Syntax Highlighting fürs Board (Link)
10.03.2017 14:20 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja ich habe auch g++ und es zeigt diese Fehler großes Grinsen

Mittlerweile aber nur 3 fehler .

Bei der b) ist doch von dieser Methode die rede oder ?

* Addiert die angegebene Anzahl Tage zu diesem Julianischen Datum hinzu.
*/
CJulianDate& operator+= (long days) {
m_days += days;
return *this;
}

Ich verstehe die Aufgabenstellung nicht .

Von was soll ich hier die differenz bilden ?

Und welche Funktion soll ich da implementieren ?

chatter hat dieses Bild (verkleinerte Version) angehängt:
b.png

10.03.2017 14:32
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hier noch ein Screenshot vom fehler

chatter hat dieses Bild (verkleinerte Version) angehängt:
c.png

10.03.2017 14:35
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Die Fehler kann ich nicht nachvollziehen.
Was passiert, wenn du im Terminal in den entsprechenden Ordner gehst und dort g++ main.cpp CJulianDate.cpp schreibst?
Bei Aufgabe b) sollst du die Differenz zwischen zwei Daten bilden. Da kannst du dich am operator += orientieren, den du kopiert hast (nebenbei bemerkt gehört die nicht in den Header).
Aber da du operator - überladen sollst und nicht operator -=, wird this nicht verändert, sondern das Ergebnis als long zurückgegeben.

__________________
Syntax Highlighting fürs Board (Link)
10.03.2017 16:11 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
chatter
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

icm muss eclipse benutzen .

Vielleicht liegt darin der Fehler ?

b)

CJulianDate& operator-= (long days) {
m_days -= days;
return *this;

}

Würde es einfach so passen ?
10.03.2017 16:36
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du kannst es ja trotzdem mal mit dem Terminal ausprobieren...

b) du sollst operator - überladen, nicht operator -=.

__________________
Syntax Highlighting fürs Board (Link)
10.03.2017 16:55 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Seiten (4): [1] 2 3 nächste » ... letzte » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Ostream Ausgabe