Size: 14303
Comment:
|
Size: 14740
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 58: | Line 58: |
Wie ist es dann möglich, dass die Funktion: int getNumLeapDaysSince1Jan1800(int day, int month, int year), mit drei Variablen aufgerufen wird? Das Programm kann sich ja nicht einfach einen Tag ausdenken?! Finde die Sache wie gesagt nicht ganz schlüssig. Da der Tag in dieser Funktion nicht nötig ist, werde ich ihn dementsprechend entfernen. Und darauf hoffen, dass es so dann alles stimmt. Vielen Dank. '''Alex R. 10.May 08:11''' |
Fragen und Kommentare zur 3. Vorlesung / zum 3. Übungsblatt
@Martin + Dario: Ich habe Jens Hoffmann gebeten, danach zu schauen. Ich selber habe keine Probleme mit dem SVN, es scheint also im Prinzip zu laufen. Hannah 9Mai10 23:55
Ich habe auch dasselbe Problem mit Checkout..naja ich denke ,dass svn heute feiernabend macht. Dario 9Mai10 22:22
Ich habe Probleme beim Hinzufügen von erfahrungen.txt in uebungsblatt1. Dazu muss ich sagen, dass ich die entsprechende Datei schon in uebungsblatt2 problemlos hochgeladen habe. Versuche ich jedoch dasselbe in uebungsblatt1, so bekomme ich von SVN die Meldung: Der Server hat einen unerwarteten Rückgabewert (403 Forbidden) in Antwort auf die Anfrage CHECKOUT für »/teaching/cplusplus-ss2010/!svn/ver/1227/mw19/uebungsblatt-1« zurückgeliefert. Kann da jemand von den Tutoren mal nachschauen, was da los ist? Oder habe ich doch irgendwas falsch gemacht? MartinW 9Mai10 20:23
@Jonas: Das heißt, dass der Linker die dynamische Variante der gtest Bibliothek libgtest.so.0 nicht findet. Dafür gibt es drei Lösungen. Für die ersten beiden müssen Sie erstmal rausfinden, wo sich die Datei libgtest.so.0 auf Ihrem Rechner befindet. Nehmen wir einmal an, sie steht in /usr/local/lib, da steht sie normalerweise (alternativ ist auch /usr/lib möglich). LÖSUNG 1: Sie sagen dem Betriebssystem vor der Ausführung des Programms, wo es nach dynamischen Bibliotheken suchen soll, und zwar mit export LD_LIBRARY_PATH=/usr/local/lib. LÖSUNG 2: Sie teilen diese Information schon dem Linker mit, und zwar indem Sie der Datei /etc/ld.so.conf die Zeile /usr/local/lib hinzufügen. LÖSUNG 3: Sie linken mit der statischen Variante libgtest.a der gtest Bibliothek indem Sie bei den g++ Optionen hinter das -lgtest ein -static hinzufügen. Hannah 9Mai10 18:54
Ich habe Probleme mit Gtest. Den Test erstellt er ohne Probleme, doch wenn ich versuche ihn aufzurufen bekomme ich folgende Fehlermeldung: "error while loading shared libraries: libgtest.so.0: cannot open shared object file: No such file or directory" Das seltsame ist, der Test aus Uebungsblatt 2 bringt mir nun dieselbe Fehlermeldung, obwohl er vorher problemlos funktionierte. Jonas 9Mai2010 18:36
@Sebastian: Alles klar. Danke für die Erklärung Dario 9Mai2010 13:50
@Dario: Die Idee ist, dass die cpplint.py im Überverzeichnis liegt, also in etwa so:
|- cpplint.py |- uebungsblatt-3 |- CalendarMain.cpp |- CalendarFunctions.cpp |- ... |- uebungsblatt-2 |- SumOfDivisors.cpp |- ... |- ...
Das stand auch in deinem Makefile: ../cpplint.py . Das .. gibt das übergeordnete Verzeichnis an. Was du jetzt gemacht hast, ist ein Unterverzeichnis. Die Idee mit dem übergeordneten Verzeichnis ist einfach, dass wir die cpplint.py nicht jedesmal mithoch- und runterladen (müssen), sondern, dass sie im Hauptverzeichnis liegt und die jeweiligen Makefiles der Übungen darauf zugreifen können, ohne dass es nochmal in das selbe Verzeichnis kopiert werden muss. SebastianS 9Mai2010 14:51
@Dario: Also ich antworte mir selbst: Im makefile habe ich geschrieben nameüberverzeichnis/cpplint.py *.cpp und jetzt funktioniert es. Nur eine Frage. Warum wenn ich alles gemischt in einem ordner behalte klappt es nicht? Gruß Dario 09 Maio 2010 14:47
@Sebastian: Also ich habe ein Überverzeichnis gemacht name: lint11 dann drin habe diese cpplint.py datei verschoben aber geht´s noch nicht. Bei Makefile datei habe ich dieses Kommando:
lint: python ../cpplint.py *.cpp
soll ich auch hier was ändern? Dario 09 Mai2019 14_41
@Dario: Ja, dann schreib die cpplint.py mal in das Überverzeichnis SebastianS 09Mai2010 13:42
@SebastianS: Ja ,ich habe alles in uebungsblatt-3 drin ... Dario 09 Mai201o 13:35
@Dario: Hast du die cpplint.py im selben Verzeichnis oder im übergeordneten Verzeichnis? SebastianS 09Mai2010 13:33
Hallo , ich habe ein Problem mit lint. Ich tippe make lint und dann sagt der Compiler mir :
python ../cpplint.py *.cpp python: can't open file '../cpplint.py': [Errno 2] No such file or directory make: *** [lint] Fehler 2
Ich habe die lint datei in meinem Ordner aber trotzdem klappt es nicht. Ich habe neulich die version Ubunto 10.4 mit der vorheriger Version hat es immer funktioniert. Könnte es daran liegen? Soll ich irgendwelche Pakete installieren??? Gruß und Danke im Voraus Dario 09Mai 2010
@Dario: Ja, genau, man muss alle Tage ab dem 1.1.1800 ausrechnen. Nehmen wir an, das gegebene Datum ist der 8. Mai 2010. Dann sind das (1) die ganzen Jahre dazwischen mal 365, also 210 * 365, plus (2) alle Schalttage in diesen Jahren und in dem Nachfragejahr falls der Nachfragemonat März oder später ist, in diesem Fall sind das 24 + 24 + 3 (1800 und 1900 waren keine Schaltjahre, 2000 schon), plus (3) dann noch alle Tage vom 1.1.2010 bis zum 8. Mai 2010, das sind 31 + 28 + 31 + 30 + 7. Und ja, wenn man auch nur einen Fehler macht, stimmt das Ergebnis nicht, aber so ist das Leben. Hannah 8Mai10 22:49
@Alex R.: Die Funktionen müssen nicht direkt aufrufbar sein, sondern werden vom Hauptprogramm verwendet und vom Testprogramm getestet. In der Vorlesung wurde das Programm so vorgestellt, dass es mit zwei Paramtern aufgerufen wird. Also ./Programm <month> <year> Martin 08Mai2010 22:01 Wie ist es dann möglich, dass die Funktion: int getNumLeapDaysSince1Jan1800(int day, int month, int year), mit drei Variablen aufgerufen wird? Das Programm kann sich ja nicht einfach einen Tag ausdenken?! Finde die Sache wie gesagt nicht ganz schlüssig. Da der Tag in dieser Funktion nicht nötig ist, werde ich ihn dementsprechend entfernen. Und darauf hoffen, dass es so dann alles stimmt. Vielen Dank. Alex R. 10.May 08:11
Hallo Leute, wer kann mir erklären was genau die funktion gettagederwoche macht? also ich weiß dass, man alle tage addieren muss und dann modulo 7 machen muss aber irgendwie kommt nicht raus was ich will. Dario 08Mai2010 21:34
@BetimM: Wir dürfen for nutzen (zumindest laut Übungsblatt und laut Vorlesung). SebastianS 08Mai2010 21:03
Frage: Darf man die for-Schleife in der Funktion getNumLeapDaysSince..(..) weiterverwenden oder sollen wir aus der for-SChleife eine while-Schleife machen?? BetimM 8. Mai 2010 20:56
Ich habe ein paar Unklarheiten bezüglich dem neuen Übungsblatt(3). Soll man beim Start des Programms 2 oder 3 Variablen angeben? ./programm <day> <month> <year> oder ./programm <month> <year> oder soll beides möglich sein?
Sollen die Funktionen direkt aufrufbar sein? Also: ./programm getNumLeapDaysSince1Jan1800 <day> <month> <year>. Ich finde das leider noch etwas unklar formuliert. Alex R. 8 Mai 2010 16:44
@Martin: Ja, das sollte vermieden werden. Leerzeichen am Ende sind immer schlecht, weil sie unsichtbar sin und trotzdem einen Effekt haben. Wenn jetzt zum Beispiel in der Kalenderanwendung das Terminal nur so breit ist wie eine Kalenderseite dann würde wegen der Leerzeichen am Ende nach jeder Woche eine neue Zeile angefangen in der nichts drinsteht. Hannah 7Mai10 19:19
Wie sieht es denn graphisch aus? Ist es schlimm, wenn in der Ausgabe am Ende jeder Zeile noch zwei Spaces stehen? MartinG 07Mai2010 18:11
@BenN naja, er hat schon irgendwo Recht. Tendenziell würde ich das hier auch eher ohne exit machen und dafür zB. ein return 0 mit entspr. if-Klauseln nutzen, aber ich bin mir nicht sicher, ob wir das schon anwenden dürfen/können... SebastianS 07Mai2010 12:01
@Jonathan Es wird wohl alleine schon deswegen Sinn machen weil du den Befehl ja in deinem Programm scheinbar benutzen willst. Und ich wüsste nicht wieso es ein Problem darstellt ne Bibliothek einzubinden. Das ist wahrscheinlich sehr viel einfacher, als das ganze so umzuschreiben, dass du den exit-Befehl nicht brauchst. BenN 07Mai2010 10:58
@Ben & Hannah: Ja zu dieser Schlussfolgerung bin ich heute Morgen nun auch gekommen. Nur ist die Frage, macht es Sinn sich diese ganze "Bibliothek" müssen mit rein zuholen nur wegen diesem exit-Befehl? JonathanN 07Mai2010 9:53
@Jonathan Was das exit(1) angeht so hab ich mich eben auch beim compilieren 10 Minuten daran aufgehangen. Die Lösung bei mir war dann einfach, dass ich die "stdlib.h" in der entsprechenden Datei nicht eingebunden hatte. BenN 07Mai2010 00:01
@Jonathan: Dass man exit(1) nur in der main Funktion einsetzen kann, halt ich für ein Gerücht. Schreiben Sie doch mal ein möglichst kleines Programm wo dieser Fehler bei Ihnen auftritt und schicken Sie es mir, dann schaue ich mal was mein System sagt. Hannah 6Mai10 23:55
@Martin & Hannah: Bei mir compiliert er glatt nicht mit exit(1), er sagt was von nur in main einsetzbar, von dem herstellt sich diese Frage beim Test gar nicht oder? JonathanN 6Mai10 23:50
@Manuel + Alle: Ina war schnell und hat's schon rausgefunden. Die Platte war mal wieder übergelaufen. Ich habe jetzt Platz geschaffen und jetzt sollte es wieder gehen. Unsere Plattenplatzprobleme sollten übrigens bald ein Ende haben. Wir haben schon vor geraumer Zeit 40 TB gekauft, aber die müssen jetzt erstmal noch über ein eigenes Netzwerk an unsere Rechnerstruktur angeschlossen werden. Da wir uns das teilweise selbst zusammengebaut haben, ist das nicht so einfach, aber wir hoffen es bald geschafft zu haben. Die 40 TB reichen dann hoffentlich erstmal bis zum Ende des Jahres. Hannah 6Mai10 23:48
@Manuel: Ja, stimmt, da ist irgendwas komisch, ich habe Ina gebeten danach zu schauen, das wird aber sicher heute nichts mehr. Hannah 6Mai10 23:24
@Martin: So direkt nein, aber man etwas in der Art machen, aber das ist höhere Testkunst, zu der kommen wir erst (viel) später. Hannah 6Mai10 23:21
Ich kann komischerweise in Hudson keine Builds starten. Im Build-Verlauf erscheint manchmal ein "(in Bearbeitung - ??? )", verschwindet aber auch schnell wieder. Username ist mb303. Manuel 6Mai 23:08
Ist es möglich dem GoogleTester zu sagen, dass die zu erwartende Antwort einer Funktion ein exit(1) ist? Martin 6Mai 22:37
@Dario: Auf keinen Fall dürfen Sie weniger Funktionen verwenden, dann können Sie die Funktionen nämlich nicht mehr einzeln testen! Der Sinn eines unit tests, ist ja gerade, dass wenn er fehlschlägt, dass man dann gleich weiß wo das Problem ist. Wenn man alles in eine Funktion schreibt und für die einen Test und dieser Test schlägt fehl, dann weiß man nur, dass irgendwo in dieser großen Funktion irgendwas falsch ist. Unabhängig davon halte ich es für eine sinnvolle Alternative statt der Funktion int getNumLeapDaysSince1Jan1800(int day, int month, int year) eine Funktion bool isLeapYear(int year) zu haben. Hannah 6Mai10 19:16
Muss man unbedingt mit den gegebenen Funktionen das Programm schreiben? ich meine könnte ich mit einer Funktion alles machen? oder evtl eine weglassen?Dario 6Mai10 18:59
@Simson Du kannst es auch als boolesche Variable definieren anstatt 1 oder 0Dario 6Mai10 18:19
@Hannah: Einfacher nicht, aber angenehmer (sonst muss man immer bedenken, dass Sonntag der erste Tag ist). SebastianS 6Mai10 17:47
@Sebastian: Sie meinen, dass in dem Kalender in der ersten Zeile nicht steht Su Mo Tu We Th Fr Sa sondern Mo Tu We Th Fr Sa? Wenn Ihnen das hilft, von mir aus. Wobei ich nicht sehe, wie es das Problem einfacher macht. Hannah 6Mai10 17:40
@Simson: Gute Frage. Die Antwort ist: es ist Ihnen überlassen, es sollte nur genau definiert sein (und auch entsprechend in der Dokumentation für die Funktion in der .h Datei beschrieben sein) und dann auch entsprechend benutzt werden. Hannah 6Mai10 17:38
Dürfen wir das Programm so umbauen, dass der erste Tag der Woche der Montag ist? SebastianS 6Mai10 16:47
Sollte getNumLeapDaysSince1Jan1800(29, 2, 1804) 1 oder 0 zurückgeben? Simson 5Mai10 14:42
@Mirko: Haben Sie sich schon für die Vorlesung registriert über den Link oben? Wenn ja, sind Sie eh schon einem Tutor zugewiesen und Ihre Übungsblätter werden korrigiert. Wenn nicht, holen Sie das bitte nach und schreiben eine Mail an Jens Hoffmann, dass Sie sich gerade noch registriert haben. Hannah 6Mai10 12:18
@Mirko + Fabian: Der Code aus der Vorlesung wird ab jetzt in einem Unterordner vorlesungen von unserem SVN repository stehen, dann kriegen Sie ihn ganz einfach mit einem SVN checkout bzw. wenn Sie einmal eine Arbeitskopie haben mit svn update. Ich habe Jens gerade gebeten, diesen Unterordner für alle lesbar zu machen. Sobald das geschehen ist, werde ich das oben in einer Mitteilung schreiben. Hannah 6Mai10 12:16
Deine Abgabe = Teil deiner Note. Es gibt keine Klausur am Ende der Vorlesung. Die Uebungsgruppen sind freiwilliger Natur und es gibt keine Anmeldung dazu. Du kannst einfach kommen. Jens 6Mai 12:12
Hat nicht direkt mit dem dritten Blatt zu tun: Ich bin in keiner Übungsgruppe eingetragen, will auch keine besuchen, hätte aber gerne meine Abgaben korrigiert. Geht das? 6Mai10 12:07 Mirko
Bekommen wir die Dateien aus Vorlesung 3? Grüße Fabian 6Mai10 12:02
Können wir noch die cpp Dateien aus der 3. Vorlesung haben? Danke! Martin S. 6Mai 11:21
So in etwa habe ich es auch gemacht. Gerade auch weil in getNumLeapDaysSince1Jan1800 der Tag als Paramter nicht wirklich sinnvoll ist.... An sich muss ja nur das Programm funktionieren, wie die Funktionen gemacht sind, is ja dann auch letztenendes eher Nebensache, oder? . DavidZ 6.Mai10 09:26
@DavidZ + Alle: Ja, wenn es sinnvoll ist, können Sie das gerne machen. Was zusätzlich eine sinnvolle Alternative wäre, ist es keine Funktion int getNumLeapDaysSince1Jan1800(int day, int month, int year) zu haben, sondern stattdessen eine Funktion isLeapYear(int year). In getDayOfWeek würde dann die Schleife stehen, die sonst in getNumLeapDaysSince1Jan1800 stehen würde und in getNumDaysOfMonth (mit zusätzlichem Parameter int year) könnten Sie dann direkt isLeapYear aufrufen. Jetzt wo ich es schreibe, finde ich es sogar besser so. Hannah 6Mai10 00:14
Anders ist es nicht möglich die Funktion sauber zu bauen. Die Schaltjahre kann man nur mittels eines weiteren Parameters "int year" berechnen. Ben 5.Mai10 23:54
Hallo. Ist es auch erlaubt, die Methoden komplett zu verändern? Also darf ich auch z.B. getNumDaysOfMonth(int month) mit weiteren Paramtern initialisieren? DavidZ 5.Mai10 23:19