Size: 11494
Comment:
|
← Revision 715 as of 2010-06-19 23:54:11 ⇥
Size: 2777
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
== Fragen und Kommentare zur 6. Vorlesung / zum 6. Übungsblatt == | == Fragen und Kommentare zur 8. Vorlesung / zum 8. Übungsblatt == |
Line 3: | Line 3: |
@Fabian: {{{ASSERT_DEATH(s[-1], ".*");}}} sollte auch funktionieren; dann geht es sogar in eine Zeile :-) (Oh, und es scheint nötig zu sein {{{::testing::FLAGS_gtest_death_test_style = "threadsafe";}}} in den Test zu schreiben, damit es keinen Ärger mit den threads gibt...)'''SebastianS 16:31 5Jun10''' | Auf vielfachen Wunsch haben wir jetzt statt dem Wiki ein ... [trommelwirbel] ... [[http://stromboli.informatik.uni-freiburg.de/teaching/cplusplus-ss2010/forum|Forum]] !!! |
Line 5: | Line 5: |
@alle, die Assert-failures u. Ä. testen wollen: Hier mal mein Test, um String::operator[] zu testen: |
@Dario + Alle: Ich bitte sehr darum, hier nichts mehr reinzuschreiben. Die Mehrheit der TeilnehmerInnen hat sich ein Forum gewünscht (teilweise sehr), und deswegen haben wir jetzt ein Forum. Wiki und Forum zur gleichen Zeit ist nicht praktikabel. Es ist auch keinen Deut schwieriger oder mehr Arbeit eine Frage auf dem Forum zu posten als auf dem Wiki. '''Hannah 20Jun10 00:53''' @Es funktioniert auch mit leerzeichen.Die sache mit der Menge habe erst heute morgen mit dem Set.h Datei bemerkt, davor habe ich eine andere Implementierung benutzt.. Naja die lange Seite ist effizienter als 200 Topics in einem Forum.Und was ich auch nicht verstehe ist warum weil ein paar Leute das Forum wollen , dann müssen auch die andere sich anpassen. Ich bin dabei bei der Petition gegen das Forum oder zumindest schlage eine demokratische Lösung vor ,beides laufen lassen. '''Dario''' @Dario. Also mich stören erstmal die Leerzeichen zwischen ''array'' und ''_bits''. Das klappt so und ist richtig hier reinkopiert? Zweitens implementieren wir die ''Set''-Klasse. Soll imo heissen, dass wenn ein Element bereits in der Menge ist, dass es dann nicht mehr ein zweites Mal am Ende aufgenommen wird. Ich kenne deine Implementierung hier nicht, aber ''array._bits[2]'' sollte sinngemäß zu einem "ungültigen" Speicherzugriff führen, da für die ''Set<bool>'' Variante zwei Felder ja schon reichen für alle Elemente. Ja, das Forum hat auch Nachteile, aber ich finde es auch besser, als hier auf einer langen Seite zu suchen, ob jemand schon mein Problem in irgendeiner Form vorgetragen hat. '''Dominik 19June 15:38''' Hallo ich möchte mein bool pushBack testen aber irgendwie klappt´s es noch nicht. z.B. wenn ich so teste |
Line 8: | Line 21: |
TEST(StringTest, squareBracketOperator) { String s; s.set("abc"); ASSERT_DEATH({s[-1];}, ".*"); ASSERT_DEATH({s[3];}, ".*"); ASSERT_EQ('a', s[0]); ASSERT_EQ('b', s[1]); ASSERT_EQ('c', s[2]); } |
Set<bool> array; array.pushBack(true); array.pushBack(false); // array.pushBack(false); // array.pushBack(true); ASSERT_EQ(true, array. _bits[0]); ASSERT_EQ(false, array. _bits[1]); // ASSERT_EQ(true, array. _bits[2]); |
Line 21: | Line 30: |
ASSERT_DEATH testet, ob die Ausführung der Anweisung(en) in den schweiften Klammern abgebrochen wird (exit, assert-failure usw.), und zwar mit der entsprechenden Fehlermeldung (zweites Argument). '''.*''' ist dabei ein Platzhalter für eine beliebige Zeichenfolge, wenn ich das richtig sehe. Weitere Infos gibts in der [[http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide#Death_Tests|gtest-Dokumentation]]. HINWEIS: Unbedingt jedes ASSERT_DEATH in zwei Zeilen aufspalten, da linter nur ein ";" pro Zeile erlaubt. '''Fabian 5Jun10 14:33''' |
läuft es, aber wenn ich die kommentierten Zeilen hinzufüge dann klappt es nicht mehr. |
Line 24: | Line 32: |
P.S. Auf dem Forum möchte ich nicht schreiben, da ich es zeitaufwändiger und unoriginell finde und zweitens habe ich es nie gewollt. | |
Line 25: | Line 34: |
@Markus: Sind sie doch längst, und das ungeschnittene AVI auch schon. Das geschnittene WMV kommt morgen. '''Hannah 4Jun10 22:07''' | '''Dario 18Jun 21:30''' |
Line 27: | Line 36: |
Können Sie noch die Folien der Vorlesung hochladen? '''Markus 4Jun10 21:58''' | Bitte Ihre Fragen in Zukunft dort stellen, unter der Rubrik "Aktuelles Übungsblatt". Das meiste dort sollte selbst erklärend sein. Sie können sich auf dem Forum registrieren (das macht die Benutzung komfortabler), müssen es aber nicht. |
Line 29: | Line 38: |
@Dario: Zur ersten Frage, siehe mein Beispiel in dem Kommentar über der ''find'' Funktion in der ''String.h''. Es ist die absolute Position des nächsten Vorkommens bei oder nach ''start''. Zur zweiten Frage: ''= new int[0]'' ist nicht sinnvoll und sollte vermieden werden. Ich bin auch im Moment überfragt, was der memory allocator da macht, aber es ist ja auch egal, Sie können dann mit dem Zeiger den Sie zurückbekommen ja eh nichts anfangen. Zu dritten Frage: eine statische Membervariable ist eine, die für alle Objekte der Klasse gleich ist, also quasi eine Konstante der Klasse. Bei ''inline'' geht es um eine Verbesserung der Laufzeit des ausführbaren Programms, sonst nichts. Dazu werden wir aber wohl erst am Ende der Veranstaltung kommen. Solange wir noch nicht überall auf schnelle Laufzeit achten, und das tun wir im Moment überhaupt noch nicht, macht es keinen Sinn über ''inline'' zu sprechen. '''Hannah 4Jun10 21:25''' Der Findmethod soll mir der Abstand zwischen den Start und die nächste char oder wo ganau mein Char in meinem String sich befindet? {{{ sb.set("a12345a2"); ASSERT_EQ(0, sb.find('a', 0)); ASSERT_EQ(0, sb.find('a', 6); }}} also ich denke so müsste es stimmen. Außerdem wollte ich wissen ob es Sinn macht , wenn ich so schreiben würde : {{{newEtwas = int new[0] oder newEtwas= char new[0]}}} oder ob man es weglassen kann. Wollte mal auch "off-topic" fragen, was genau eine statische Variable (oder funktion) ist und was ein inline funktion ist. Gruß. '''Dario 4Juni 21:01''' @Hannah, SebastianD: Ah, okay, danke. @Sebastian: Ein Objekt kann nicht nur auf seine eigenen ''private'' Membervariablen zugreifen, sondern auch auf die ''private'' Membervariablen von allen anderen Objekten vom selben Typ. '''Hannah 4Jun10 20:40''' private bedeutet Klassen-, nicht Instanzsichtbarkeit. '''SebastianD 4Jun10 20:39''' In der Vorlesung wurde ''String::append'' ja so geschrieben: {{{ void String::append(const String& s) { assert(_string != NULL || _length == 0); int newLength = _length + s._length; }}} Allerdings ist ''_length'' ja eigentlich private; wie kommt es also, dass wir dennoch darauf zugreifen können (''s._length'')? Müsste man die Funktionen/Variablen nicht erst untereinander als ''friend'' deklarieren? '''SebastianS 4Juni 20:34''' @Martin: Glaube, ich habe da alles richtig gemacht, aber schauen Sie zur Sicherheit nochmal nach. Ich habe auf jeden Fall keine Fehler mit Absicht eingebaut, falls das Ihre Frage war. '''Hannah 4Jun10 14:13''' Muss man die const-Korrektheit auch bei den bereits geschriebenen Methoden überprüfen? '''MartinG 04Jun10 14:05''' @Jens : Danke. Und diese \0 entspricht _list[i] = -1; oder? Aber dies ist nicht bei allen Methoden nötig, da wir bei manchem mit dem _Length das regeln könnnen , oder? außerdem bei insert methode {{{ // Insert the given string into this string at the given position. For // example, if this string is "abcdefg" and s represents the string "xyz", // then after an insert(s, 3), this string should be "abcxyzdefg". }}} wenn ich aber insert(s, 9999) dann eintippe, was soll dann passieren? einfach mit assert behandeln oder denselben " abcdefg"String ausgeben? '''Dario 04Mai10 12:09''' @Dario: {{{ string1: "Ich bin ein String\0" string2: "Ein zweiter String.\0" solange i < 5: string2[i] = string1[i] Ohne terminierende 0 ist dann: string2: "Ich zweiter String.\0" Mit 0 nach der while schleife, waere: string2: "Ich b\0" wie es sein sollte. }}} Wie bei den integer Listen auf dem letzten Blatt muss man einem Array irgendwie mitteilen, wo es zuende ist. '''Jens 3Jun10 11:05''' @Jens: Kannst du ein Beispiel machen? muss ich immer diese termienierende 0 betrachten, wenn mein String ein andere Länge hat? '''Dario 3Jun10 10:48''' @Dario: Wenn newlength nicht die Laenge von _string ist, dann fehlt im buf vielleicht die terminierende 0? '''Jens 3Jun10 9:36''' Hallo, warum wenn ich beim EraseMethod so schreibe: {{{ while ( i < newlength) { buf[a] = _string[i]; ++i; ++a; } ... }}} also nach dieser Methode versuche ich was zu erasen aber habe bemerkt , dass dann die Charachter nicht mehr gleich sind , sondern anders.( wenn ich mein Erase Methode mit ein For oder While Schleife implementiere..) Gruß '''Dario 3Jun10 9:27''' @Anonymous: Donnerwetter, das ist mir neu, was schon was heißen will. Herzlichen Dank für den Hinweis. '''Hannah 3Jun10 21:52''' Weil mich verwundert hat, dass p = NULL; delete p; durchlief, habe ich kurz recherchiert. delete p ist wohl laut C++ Standard für p = NULL wohl definiert. Ich denke, das gilt dann auch für delete[]. Es scheint erwünscht zu sein, nicht auf NULL zu prüfen. http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.8 '''Anonymous 3Jun10 21:15''' @Sebastian: In der Tat ein Widerspruch, sorry, habe es jetzt korrigiert. Es liegt daran, dass ich die Musterlösung für das 5. Übungsblatt und die ''punkte-vergabe.txt'' diesmal erst sehr spät (zwei Wochen nach Erstellen des Übungsblattes) fertig gemacht habe. Es soll Ihnen aber natürlich nicht zum Nachteil gereichen, wenn irgendjemand dadurch Punkte abgezogen wurden bitte beim Tutor melden mit Verweis auf diese Bemerkung von mir. '''Hannah 3Jun10 20:34''' In der punkte-vergabe.txt steht: ''* Der Test für popBack sollte den Grenzfall enthalten, dass die Liste leer ist (dann -1 zurück), sonst 1/2 Punkt Abzug.'' In dem Übungsblatt steht jedoch, dass man dann einen assert failure werfen soll? Kann ich mich nur nicht daran erinnern, wie man assert_failures testet, oder gibt es da einen Widerspruch? :) '''SebastianS 3Jun10 19:47''' @Hannah: Habs gerade eben getestet. Problem ist leider nicht behoben :(. '''DavidZ 3Jun10 15:46''' @David: Ja, das Skript für die Konfiguration unseres SVN Servers wurde gestern geändert, und ich sehe gerade, dass es da noch Fehler gibt. Habe es für Sie jetzt gerade von Hand korrigiert, schauen Sie mal ob es jetzt bei Ihnen klappt. Ich habe auch Jens Hoffmann und Axel Lehmann informiert, die das tieferliegende Problem dann hoffentlich bald beheben. '''Hannah 3Jun10 15:40''' Ich hab folgendes Problem: Ich kann nichts mehr auf SVN hochladen, da ich jedes mal die Fehlermeldung (403 Forbidden) >>teaching/cplusplus-ss2010/!svn/ver/3021/dz23<< bekomme... Hatte sonst nie Probleme mit SVN und jeder Versuch hat nicht funktioniert (cleanup, update neues Arbeitsverzeichnis, .svn-Ordner löschen). Woran kann das liegen? '''DavidZ 3Jun10 15:19''' @David: Nein, einen assert failure direkt kann man nicht testen, brauchen Sie auch nicht. '''Hannah 3Jun10 14:50''' @Ben: Das liegt an Ihrer Arbeitskopie. Sie haben vermutlich einen anderen Ordner mitsamt dem ''.svn'' Ordner mitkopiert. Löschen Sie den ''.svn'' Ordner in Ihrem Ordner ''uebungsblatt-6'' und dann sollte es klappen. '''Hannah 3Jun10 14:49''' Gibt es irgendeine Möglichkeit, ''assert failure'' zu testen? '''DavidZ 3Jun10 14:48''' Kann es sein, dass das SVN nicht ordnungsgemäß funktioniert? Denn ich möchte gerne meine Aufgabe hochladen, bekomme aber jedesmal {{{svn: warning: 'uebungsblatt-6' is already under version control}}}. '''Ben 3Jun10 14:42''' @Hannah: Alles klar, vielen Dank. Habe ich bereits vermutet, aber bevor ich vielleicht was ganz wichtiges nicht mitbekommen habe, dachte ich, dass ich besser nochmal nachfrage :) . '''David Z 2Jun10 22:14''' @David: Yup, es sollte andersrum da stehen, und "xxx" sollte ein String Objekt meinen, das diese Zeichenkette repräsentiert. Habe es jetzt umgeschrieben, machen Sie einfach ''svn update''. '''Hannah 2Jun10 22:10''' Kann es sein, dass sich ein Fehler bei ''insert'' in der Header Datei eingeschlichen hat? Beim Tip steht ja ''insert(3, "xxx")'' was an sich schon keinen Sinn macht, da ja eigentlich links der String steht und rechts die Startposition ist. Ist es überhaupt möglich, die Methode so aufzurufen (also mit der anderen Richtung)? Da ja String hier eine Klasse ist, kann ich doch nicht einfach einen Text als Übergabewert nehmen, oder? '''David Z 2Jun10 21:52''' @Mirko + Alle: Gute Frage, ich habe selber gerade die Musterlösung für die Aufgabe geschrieben und habe es wie folgt gehandhabt. Bei ''erase'' müssen ''start'' und ''length'' beide ''>= 0'' sein, ich habe dafür jeweils ein ''assert'' am Anfang der Methode. Ich finde negative Werte für diese Argumente machen nicht wirklich Sinn bzw. der Sinn wäre zu weit hergeholt. Sonst ist aber alles erlaubt, also sowohl dass der ''start'' erst am oder nach dem Ende des strings kommt (dann wird einfach nichts gelöscht) und dass ''start + length'' bis über den string hinausgeht (dann wird halt von ''start'' bis zum Ende des strings gelöscht). Diese Randfälle sollten natürlich alle in dem Test für diese Methode berücksichtigt werden. Bei insert habe ich sowohl einen ''assert(start >= 0)'' also auch einen ''assert(start <= _length)'' weil alles andere keinen Sinn macht. '''Hannah 2Jun10 21:42''' Hi, wie sollen wir den Fall bei erase(..) behandeln wenn start negativ ist, (und auch der Fall wenn length negativ ist). Man könnte bei erase(-10,12) ja z.b. die ersten beiden Zeichen löschen. Und bei erase(5,-3), die Zeichen an den Stellen 5,4,3. Oder dürfen wir in diesen Fällen einen Fehler ausgeben / den String unverändert lassen. '''Mirko 2Jun10 21:21''' @Alle: Habe gerade noch eine Destruktor + Test zu meinem Code aus ''vorlesung-6'' hinzugefügt, also wenn Sie den schon bei sich runtergeladen haben, machen Sie ein ''svn update''. '''Hannah 2Jun10 20:05''' @Simson + Alle: Ja, da gab es gerade Probleme, aber laut Jens Hoffmann sollte jetzt wieder alles gehen. Die Dateien von der Vorlesung heute habe ich bereits hochgeladen. '''Hannah 2Jun10 19:54''' Die svn-Ordner der Vorlesungsdateien und Musterlösungen sind gesperrt? '''Simson 2Jun10 18:55 ''' |
'''Hannah 18Jun10 1:17''' |
Fragen und Kommentare zur 8. Vorlesung / zum 8. Übungsblatt
Auf vielfachen Wunsch haben wir jetzt statt dem Wiki ein ... [trommelwirbel] ... Forum !!!
@Dario + Alle: Ich bitte sehr darum, hier nichts mehr reinzuschreiben. Die Mehrheit der TeilnehmerInnen hat sich ein Forum gewünscht (teilweise sehr), und deswegen haben wir jetzt ein Forum. Wiki und Forum zur gleichen Zeit ist nicht praktikabel. Es ist auch keinen Deut schwieriger oder mehr Arbeit eine Frage auf dem Forum zu posten als auf dem Wiki. Hannah 20Jun10 00:53
@Es funktioniert auch mit leerzeichen.Die sache mit der Menge habe erst heute morgen mit dem Set.h Datei bemerkt, davor habe ich eine andere Implementierung benutzt.. Naja die lange Seite ist effizienter als 200 Topics in einem Forum.Und was ich auch nicht verstehe ist warum weil ein paar Leute das Forum wollen , dann müssen auch die andere sich anpassen. Ich bin dabei bei der Petition gegen das Forum oder zumindest schlage eine demokratische Lösung vor ,beides laufen lassen.
Dario
@Dario. Also mich stören erstmal die Leerzeichen zwischen array und _bits. Das klappt so und ist richtig hier reinkopiert?
Zweitens implementieren wir die Set-Klasse. Soll imo heissen, dass wenn ein Element bereits in der Menge ist, dass es dann nicht mehr ein zweites Mal am Ende aufgenommen wird. Ich kenne deine Implementierung hier nicht, aber array._bits[2] sollte sinngemäß zu einem "ungültigen" Speicherzugriff führen, da für die Set<bool> Variante zwei Felder ja schon reichen für alle Elemente.
Ja, das Forum hat auch Nachteile, aber ich finde es auch besser, als hier auf einer langen Seite zu suchen, ob jemand schon mein Problem in irgendeiner Form vorgetragen hat. Dominik 19June 15:38 Hallo ich möchte mein bool pushBack testen aber irgendwie klappt´s es noch nicht. z.B. wenn ich so teste
Set<bool> array; array.pushBack(true); array.pushBack(false); // array.pushBack(false); // array.pushBack(true); ASSERT_EQ(true, array. _bits[0]); ASSERT_EQ(false, array. _bits[1]); // ASSERT_EQ(true, array. _bits[2]);
läuft es, aber wenn ich die kommentierten Zeilen hinzufüge dann klappt es nicht mehr.
P.S. Auf dem Forum möchte ich nicht schreiben, da ich es zeitaufwändiger und unoriginell finde und zweitens habe ich es nie gewollt.
Dario 18Jun 21:30
Bitte Ihre Fragen in Zukunft dort stellen, unter der Rubrik "Aktuelles Übungsblatt". Das meiste dort sollte selbst erklärend sein. Sie können sich auf dem Forum registrieren (das macht die Benutzung komfortabler), müssen es aber nicht.
Hannah 18Jun10 1:17