[OSE] Aufgabe 1

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

[OSE] Aufgabe 1
Hi,

wie macht ihr das mit der formatierten Ausgabe von Variablen, wenn z. B. ein Integer rechtsbuendig in einer 20-Zeichen-Spalte ausgegeben werden soll? Rekursion funktioniert ja dann nicht, ich denke, man muss den Integer in einen String parsen, oder? Wenn ja, woher weiss man, wie gross der String wird, oder soll man jedes Mal reallokieren?

Fragen ueber Fragen, danke fuer Hinweise.

Gruesse,
-Steppenwolf


malloc() vergiss mal besser wieder. Das wird dir auf ner kleineren Plattform ohne MMU oder passendes OS nix bringen. Hast du die BS-Übung (OOStuBs) letztes Sem gemacht? Da kann man wunderbar 3/4 des Codes übernehmen: Du weißt ja, wie lang eine Zahl im aktuellen Zahlensystem maximal werden kann. Das brauchst du als statisches Array. Dann gehst du deine Zahl durch: ziffer = zahl % base; zahl = zahl / base. Bis die Zahl 0 wird. Jetzt muss du das Array nur noch in geeigneter Weise ausgeben und eben vorher oder hinterher entsprechend viele Füllzeichen ausgeben. HTH


Vielen Dank!

Woher weiss ich das? Kann ich davon ausgehen, dass ein Integer immer 4 Bytes gross ist oder muss ich das mit sizeof() herausfinden?


Hm, ich hab mal 32bit genommen, im CIP wird das schon hinkommen…


Ein statisches Array kommt bei Dezimalzahlen wohl ganz gut… denn ich verplemper wohl etwas Code, indem ich zuerst die benötigte Größe des Arrays berechne, und der Gewinn an Stackverbrauch dafür wohl nur minimal ist (Bei Binärzahlen sieht’s evtl anders aus). Und die Anzahl der Ziffern kann man auch einfach während des Erzeugens der Repräsentation mitlaufen lassen.


Mal was ganz grundsätzliches … wo implementiert ihr denn diese I/O Library… direkt in der OutputStream.h/.cc ? In der Angabe steht, dass man sich die Funktionen aus Basisklassen erben lassen kann … ich dachte das würde mehr Code generieren :rolleyes:


Meine drei Stream-Klassen sind direkt in der OutputStream.h definiert. Hatte zu dem Zeitpunkt irgendwie vergessen, dass man das auch in ner .cc-Datei machen kann/soll. Mann, ich sollte nicht so viel PHP und C# coden zwischendurch… :rolleyes:


Solangs nicht Visual Basic ist :slight_smile:
Aber zum Thema … ja erstaunlich isses schon, dass meine test1 380KByte hat (bei 20 Zeilen Code sollte man eigentlich wenig falsch machen können :wand:) … naja werd ich die Woche mal zum Übungschef schaun müssen.


Wow, das ist schon sehr groß. Hast du das im CIP compiliert? Hast du vielleicht weitere Includes hinzugefügt? Ich hatte mit dem vorgegebenen Makefile keine Probleme.


Ne hab sonst nix includet … ja im Cip komm ich auf 360KB daheim auf 300 und mit gcc aus dem proj/i4swe verzeichnis auf 80KB… aber dann is das binary nicht ausführbar …


Verwendest Du vielleicht nen new oder etwas Aehnliches?


ja :red: wie kriegt ihr euer StreamDock Objekt, macht ihr das Global … ?


Japp… und ebenso einige der Variablen, um den Konstruktor wegzuoptimieren…


snehls, in den vorgegebenen test{1,2,3} ist das Objekt doch bereits global angelegt… iirc


Solange Dein OutputStream nicht von OStreamDock erbt, brauchst Du wohl noch nen OStreamDock Objekt…


Der erbt davon. Wüsste jetzt gar nicht, wie ich das anders lösen sollte… (ohne dass es viel zu kompliziert wird…)


Du erstellst ein globales Objekt: static OStreamDock tolles_osdock;
Und aenderst Deine out(bla); in tolles_osdock.out(bla);

Das ist bei mir dann 8 Byte groesser als ne abgeleitete Klasse…


hi,
um unnoetigen code rauszuschmeissen hab ich um die verschiedenen funktionen sowas gebaut …
#if (fameStringOutput == 1) //bzw andere Variable

#endif
…leider wird mein textsegment trotzdem nicht kleiner :rolleyes:


Vermutlich optimiert der Compiler in dieser Aufgabe besonders gut und du kannst dir dieses Aus-definen sparen. Ging mir am Anfang genauso.