Information
Diese Aufgabe basiert auf der Idee des Trie Practice Problems von CS50.
Disclaimer: Diese Aufgabe wurde nicht vom Lehrstuhl herausgegeben und kann Fehler enthalten. Sie dient lediglich zu Übungszwecken!
Wir alle nutzen die Website inf.zone, um die Inhalte der Veranstaltung abzurufen. Die Website hat sogar eine Suchfunktion, so dass wir die gewünschten Inhalte schnell finden können. Diese Suche umfasst jedoch die gesamte Website. So wird z.B. auch auf den Style Guide for C verwiesen, wenn wir nach Pointer suchen. Wir möchten aber auch nur einzelne Seiten durchsuchen können.
Zu diesem Zweck wurden uns freundlicherweise bereits einige txt-Dateien zur Verfügung gestellt, die die auf verschiedenen Seiten enthaltenen Wörter beinhalten. Zum Beispiel kann in der Datei words-lectures-4-memory-notes4.txt pro Zeile ein Wort aus Vorlesungsnotizen Woche 4 gefunden werden. Es kann davon ausgegangen werden, dass jedes Wort maximal 255 Zeichen lang ist und nur aus kleinen ASCII Buchstaben besteht. Umlaute wie ä, ü oder ö sind bereits durch ae, ue und oe ersetzt worden. Ebenfalls müssen eingegebene Wörter, welche diesen Voraussetzungen nicht entsprechen auch nicht gesondert behandelt werden. Gibt ein Benutzer also z.B. Hallü in das Programm ein, kann es abstürzen, weiterlaufen oder eine Fehlermeldung ausgeben. Was hierbei passieren soll kannst du entscheiden.
Um diese einfachere Suche zu ermöglichen, hat ein ungenannter Tutor bereits versucht, ein solches Programm in C zu entwickeln. Dieses ist in der Datei search-zone.c zu finden. Es enthält jedoch VIELE Fehler und ist daher absolut kein vorbildliches oder funktionierendes Beispiel!
Vorsicht
Der Code dieses Programms ist auch nicht sonderlich sicher und daher anfällig für diverse Angriffe. Für die Zwecke von Inf-Einf reicht das hier aber völlig aus.
Um das Aufgabenmeterial herunterzuladen, gib folgenden Befehl in ein neues Terminal in deinem Codespace ein:
wget -O - https://inf-lab.dev/errors/material/lab-errors.zip.sh | bashVerschaffe dir einen Überblick über das Programm des Tutors, beachte hierbei allerdings dass es einige syntaktische[1] aber auch logische[2] Fehler enthält. Beantworte hierzu insbesondere die folgenden Fragen:
free_node benötigt?Nachdem wir uns in Teilaufgabe 1 einen groben Überblick über das Programm verschafft haben, ist es nun an der Zeit die Fehler zu beheben. Vergiss nicht, dass Programm enthält sowohl syntaktische als auch logische Fehler enthält.
Teste zuerst manuell, ob sich das Programm mit den bereitgestellten Dateien wie erwartet verhält.
Verwende dazu je nach Teilaufgabe die folgenden Befehle, um dein Programm mit check50 zu überprüfen.
check50 verfügbarcheck50 -l inf-lab-dev/check/errors/a2Information
Da in dieser Aufgabe ein schlechter Code verbessert wird, schlägt style50 bis zum Abschluss der Bonusaufgabe Bonusaufgabe Design sehr viele Verbesserungen vor.
Führe den folgenden Befehl aus, um den Stil deines Codes mit style50 zu analysieren:
style50 search-zone.cSyntaktische Fehler sind solche, die durch den Compiler erkannt werden können (z.B. ein fehlendes ;). Wir können sie daran erkennen, dass sich das Programm nicht kompilieren lässt und make solution-zone einige Fehlermeldungen ausgibt. ↩︎
Logische Fehler sind Fehler des Programmablaufes (z.B. dass in einer Funktion int add(int a, int b), statt zu addieren subtrahiert wird.). Wir können sie daran erkennen, dass sich unser Programm komisch/unerwartet verhält, wenn wir es ausführen. ↩︎