Fragen und Kommentare zur 4. Vorlesung / zum 4. Übungsblatt
@Fabian: danke für den ersten Hinweis, ich habe der exit operator dort verwendet und daher hatte ich so viele Schwierigkeiten.
Was die zweite Anmerkung angeht , bin ich nicht soo Anfänger ,dass ich das nicht weiß.Evtl habe ich es falsch ausgedrückt aber es war schon spät und den Compiler oder wie auch immmer hatte mich schon genervt
gruß Dario 16Mai10 10:48
@Dario: ./ListProcessingMain "" " 1,2,3,4 " soll keine Usage-Info ausgeben, da ja 2 Argumente da sind ("" und " 1,2,3,4 "). Es liegt an dir dafür zu sorgen, dass "" in die leere Liste umgesetzt wird. Außerdem soll das Programm ja selbst bei falschen Zeichen in den Argumenten nicht mit einem exit-code terminieren (die funktion soll schließlich noch die leere Liste zurückgeben), sondern Weiterlaufen, aber den Benutzer darüber in Kenntnis setzen, dass wohl irgendwo im Programm nicht alles nach Plan lief. Wenn ich die Aufgabenstellung richtig verstehe, dann soll selbst ./ListProcessingMain " abc" " 1,2,3,4 " die Liste 1,2,3,4 ausgeben, aber noch zusätzlich noch eine Warnung. Kleine Anmerkung am Rande: Der Compiler gibt die Usage-Meldung nicht aus, sondern dein Programm, falls das mit dem letzten Teil deines Satzes ausgesagt werden sollte. Fabian 16Mai10 9:21
Also dann kann ich gar nicht meine leeren Listen außer mit dem TEST sehen, weil ./ListProcessingMain "" " 1,2,3,4 " würde mir immer den Compiler Usage info ausgeben, und das komma ohne Zahl ist ja nicht erlaubt Dario 15Mai10 00:22` @Dario: Das Programm muss mit genau zwei Argumenten aufgerufen werden (also Ja meine Frage war wenn ich z.B eine Liste ist leer aber ich kriege den Usagesfehler . deshalb hatte ich mir gedacht die Geschichte mit der Null. Also muss ich diese Meldung ändern. P.S. wegen der Triviale Änderung tut es mir Leid , jedes mal sehe ich nicht dies kleines Kästchen. Dario 15Mai10 00:00 @Dario: Ja, wie Sebastian sagt ist eine Liste in der internen Repräsentation leer, wenn gleich das erste Element schon Eine Liste ist leer, wenn sie mit -1 beginnt. SebastianS 15Mai10 23:50 Aber ich habe noch nicht verstanden wann eine Liste leer ist.Ohne Argument oder mit unendlichen vielen Null? Gruß Dario 15Mai10 23:44 @Dario: Die 0 ist erlaubt und muss ja auch gar nicht besonders behandelt werden. Nur negative Zahlen sind nicht erlaubt (weil kein Wenn eine Liste nur die Zahl Null enthält dann ist die Liste leer oder nicht? oder ist die Liste leer wenn ich kein Argument bzw. Zahl schreibe? Ich bin davon ausgegangen, dass wenn die erste zahl null ist,dann ist die Liste leer. sonst wird es schon komplizierter. z.B liste 1{0} aber auch {0,0,0,0,0,0,} ist wieder leer.. aber die Sache mit dem Null ist schon an sich komplieziert weil dann wäre eine so eine List { 0,0, unendliche viele null bis MAX_LIST_SIZE -1 ,1} nicht leer Noch eine Frage wenn ich so eine Liste habe { 0,1,2,3} oder { 1,2,0,3} oder {0,1,2} der Null müss berücksichtigt werden als Zahl bei der PrintFunktion oder muss einfach weggelassen werden? Dario 15Mai10 22:28 @Fabian + Alle: Ja, so wie Sie es sagen ist es genau richtig. Ich hatte es verkürzt und dadurch nicht ganz korrekt dargestellt. Richtig ist, wie Sie sagen, dass eine Zahl zwischen 231 und 232 - 1 für einen Kleiner Hinweis zu den "int"-s: 1) ints haben einen Wertebereich von -231 bis 231 - 1(, werden somit also warscheinlich als Zweierkomplement-Zahl dargestellt). Zweierkomplementzahl bedeutet, dass die untersten n-1 Bits der Zahl als "normale positive" Binärzahl interpretiert wird und wenn wenn das oberste Bit auf 1 ist, dann wird noch 2(n-1) von dieser Zahl abgezogen. (Integer n=32 für 32 Stellen) 2) wenn eine int-Variable folglich mit 231 -1 (Binärdarstellung: 011111...111(32 Stellen))belegt ist, und man 1 auf diese Variable addiert, so erhält man -231 (Binärdarstellung: 10000...0000 (32 Stellen)). Folglich stimmt das mit dem modulo nicht ganz. Fabian 15Mai10 8:52 @Hannah: Achssooo.. Ich habe die ganze Zeit versucht diesen Fehler zu beheben, @Dario: Ein Hallo, könnte mir bitte jemand nur einen kleinen Tipp geben warum wenn ich mehr als 11 Ziffern( für ein Zahl z.B- 12345678911,2,4) eintippe dann bekomme ich(erste Zahl, die andere nach der Komma sind richtig) eine Random Zahl? also liegt es an der Größe des Arrays? MAX_LIST_SIZE? Gruß Dario 4Mai10 19:40 @Johannes: Wenn man das Programm z.B. so aufruft Folgende 2 Fragen: 1. Es sind ja nur dann Leerzeichen innerhalb der Liste möglich, wenn die Characterkette als String angegeben wird. Das wurde ja weiter unten schon festgestellt (sonst wären die Leerzeichen Argument-Separatoren). In dem Fall müsste man jedoch die Anführungszeichen bei Bearbeitung der Eingabe berücksichtigen. Sollen nun das non-String Eingabe-Format (z.B. 1,2,3) ohne Leerzeichen oder das String Eingabe-Format (z.B. "1, 2, 3") mit mögl. Leerzeichen oder beide Formate behandelt werden? 2. Beim Auftauchen anderer Zeichen soll "eine sinnvolle Warnung" sowie die leere Liste ausgegeben werden. Also nur die Warnung oder sollte sich die "leere Liste" irgendwie in der Ausgabe manifestieren? JohannesS 14Mai10 18:04 Offtopic: Jeder, der Interesse daran hat: Ich habe vor ner Woche ein Forum für alle Informatik-Studenten, die letztes Semester angefangen haben, eröffnet. Wer will, kann sich dort gerne anmelden: http://info-unifreiburg09.forumieren.com/ DavidZ. 14Mai10 15:48 @Dario: In der Deklaration Warum kann man nicht die Variable MAX_LIST_SIZE belibig groß machen? also wenn ich 100000000000000= MAX_LIST_SIZE setze dann den Compiler meckert. Dario 14Mai10 11:59' Der Fehler war eine Zeile darunter printf("%s"...) anstatt printf("%c"...) Ben 14Mai10 02:41 @Ben: In dem Teilstück unten sehe ich keinen Fehler, ich glaube der segmenation fault kommt woanders her. Schreiben Sie doch mal ein vollständiges, aber minimales(!) Programm, wo der segfault auftritt und pasten Sie es hierhin. Hannah 14Mai10 2:38 Hallo, warum liefert ein switch über listAsString[i] in der Funktion parseListOfIntegers() immer einen SegFault, wenn das Zeichen nicht zwischen 0-9 ist (in dem Fall noch als Char gespeichert)? Ich schreibe doch keinen Wert (in einen gesperrten Speicherbereich) sondern will nur den Wert überprüfen Danke Ben 14Mai10 02:13 @Niklas + Alle: Ja, was Florin schreibt ist genau richtig. Sie sollen einfach nur testen ob bei einer nicht zulässigen Liste die leere Liste zurückkommt, wie in Aufgabe 1 gefordert. Wenn man testen wollen würde, ob jede mögliche Art der Fehlformatierungen auch genau als diese erkannt wird, würde man die Funktion @Sebastian: Ja, genau. Ist in der Aufgabe von dem Übungsblatt nicht genau spezifiziert, ich weiß, aber in der Mitteilung auf der Hauptseite habe ich es jetzt glaube ich genau gesagt, was gehen soll und was nicht. Wie gesagt, in kurz: zulässig sind Folgen von Zahlen mit genau einem Komma zwischen zwei Zahlen und beliebig Leerzeichen um die Kommata oder am Anfang und am Ende, alles andere nicht zulässig. So würde man es auch in Wirklicheit machen, weil z.B. bei Ihrem Beispiel @Hannah: D.h. "1,2,3 4,5,6" @Florin: Das sind sogenannte @Dario: Zum ersten Teil der Frage: Nein, so etwas wie darf man nicht schreiben bzw. es würde nicht das tun was Sie erwarten. Zum zweiten Teil der Frage: Ja, Sie können annehmen dass Sie immer genau zwei Argumente bekommen, also dass immer @David + Manuel + Alle: Ich habe jetzt auf der Hauptseite unter Mitteilungen noch einmal genau formuliert, welche Eingabeargumente akzeptiert werden sollen und welche nicht. Nochmal in kurz: Folgen von Zahlen mit genau einem Komma zwischen zwei Zahlen und beliebig Leerzeichen um die Kommata oder am Anfang und am Ende, alles andere soll als nicht zulässig erkannt werden. Die Beispielfolgen in Ihren Fragen sind beide nicht zulässig, d.h. das Programm sollte in dem Fall meckern und die leere Folge zurückgeben, und der erweiterte Test sollte solche Fälle auch testen. Hannah 13Mai10 22:21 @Niklas: Du kannst ja auf -1 testen, also ob die leeren Listen zurückkommen. Andere Frage: Was soll das in der ListProcessing.h? Florin 13.Mai 22:20 Hallo, haben wir schon eine Möglichkeit kennengelernt mit gtest auf Fehlermeldungen zu testen? Das braucht man ja für die Test für 1.1 und 1.2 Gruß Niklas 13Mai10 22:18 Hallo zusammen, eine technische Frage anstatt immer so zu schreiben char* arcobaleno darf man auch so schreiben: oder gibt´s was um das kürzer und ohne "Wiederholung" zu schreiben? Bei dem Erstem Punkt der 1 Aufgabe ist so wie folgendes gemeint? Also aber nicht so: sonst wären ja drei Argumenten gell? Gruß Dario 13 Mai 18:43` @Sebastian : Besten Dank, ja es war der Zähler, der einen Wert hatte, den er eigentlich nicht haben sollte. Nur bis ich rausgefunden hatte warum. Aber jetzt hab ichs, naja zumindest das. =) JonathanN 13Mai10 16:18 Wie soll dieser String ausgewertet werden? "1 4,3 5" bzw. muss man den Fall auswerten, dass in einer Zahl ein Leerzeichen stehen kann? Manuel 13. Mai 15:43 Soo, ich weiß, ich weiß aber leider haben wir immernoch keine OFF-TOPIC-Section und ich dachte das muss ich mal mitteilen: http://www.youtube.com/watch?v=FIT3WlIyy1Y&NR=1&feature=fvwp. fry UTC+1 1273757790UTS Wie soll eigentlich genau mit einer Liste umgegangen werden, die Beispielsweiße so aussieht: ",,,5,7 ,3". Soll das Programm dann daraus : 0,0,0,5,7,3,-1 machen, oder die 0er weg lassen? David Z. 13. Mai 15:04 @JonathanN Spontan würde ich dann sagen, dass du entweder die falsche Variable bearbeitest (unwahrscheinlich), oder dein Zähler irgendeinen Wert hat, den er nicht haben sollte. Probier doch mal: SebastianS 13Mai10 14:25 @Sebastian, ja was in der Schleife steht wird sauber ausgeführt, nur diese Zeile nach der Schliefe iergendwie nicht. Also habe soeben noch mal was geprüft, er geht raus aus der Schleife, denn wenn ich einen printf befehl dahin setzte, der wird aus geführt, oder ist etwas an der Syntax des Befehls "faul"? JonathanN 13Mai10 14:12 @Hannah: Ah, verstehe, danke Kann mir jemand erklären warum beim folgenden Code der Letze Befehl nicht ausgeführ wird JonathanN 13Mai10 13:27 @SebastianS: Ok, ich verstehe. Es ist so, Sie dürfen immer annehmen, dass Sie genau zwei Argumente bekommen. In den strings dieser Argumente dürfen allerdings Leerzeichen stehen. Von der Kommandozeile aus geht das zum Beispiel so: @Hannah: Nunja, ich verstehe Aufgabe 1 so, dass wir auch aus so etwas: @SebastianD: Ich würde erstmal gerne verstehen, wofür Sie diesen Rückgabewert brauchen. In meiner Lösung des Übungsblattes brauche ich den nicht. Genau wie die anderen Listen soll ja auch die Ergebnisliste mit einem @Jonathan: Ja, genau, man muss die @SebastianS: Die Spricht irgendetwas gegen eine Änderung des Rückgabetyps der Guten Abend, dann bring ich mal gleich auch meine Fragen hier rein. Also die Variable MAX_LIST_SIZE kann ich in der .cpp Datei ja nicht nutzen wenn ich die .h nicht include, dies ist ja aber grad, das was nicht passieren soll. Diesen Wert brauch ich ja aber um zuüberprüfen, dass mein i mir nicht zu weit wegläuft, oder? Dann zum AufgabenTeil 2? Soll hier die Funktion diesmal die neue Liste als Ausgabewert haben, oder nehme ich wieder eine Liste, dann als 3. Parameter auf? Da ja die 2 Listen ja schon in der Main aufgeteilt werden, und mir also so schon 2 Parameter liefert? JonathanN 12Mai10 22:23 Ist es zulässig, dass man die Hier und hier. Links sind in den Folien der heutigen Vorlesung entnommen. SebastianS 12Mai10 19:41 Wo kann man denn den Link zu der Erklärung für den verwendeten Make Syntax finden? Daniel 12Mai10 18:43 uebungsblatt-4$ ./ListProcessingMain 1
Usage: ./ListProcessingMain <list1> <list2>
danke. Dario 4Mai10 19:40
int i = 0;
// listAsString == "abcd123";
switch(listAsString[i]) { // gibt sofort einen SegFault
case '...':
}
if ( arcobaleno == 'a' && 'b')
#ifndef VORLESUNGEN_VORLESUNG_4_LISTPROCESSING_H_
#define VORLESUNGEN_VORLESUNG_4_LISTPROCESSING_H_
if ( arcobaleno == 'a') && (arcobaleno == 'd' ) && (arcobaleno == 'b')
if ( arcobaleno == 'a' && 'b' )
./ListProcessingMain 1,1,1,1,,1,1,1,1,1, 11111
1,0,0, 0000 ,111111
finallist[k] = -1; //Also warum dieser Befehl nicht ausgeführt wird?
printf("%d %d",k,finallist[k]);
@JonathanN: Wird die Schleife ausgeführt? Also kommt er überhaupt zu dem Punkt? Wenn ja, sollte auch die Bedingung ausgeführt werden... Überprüf vlt nochmal deine Klammern
SebastianS 13Mai10 13:22
while (bedingung)
{
ein paar berechnungen
}
finallist[k] = -1; //Also warum dieser Befehl nicht ausgeführt wird?