EDV1 Hausaufgabe WS 18/19 Aufgabenstellung + Struktogramm PDF

Title EDV1 Hausaufgabe WS 18/19 Aufgabenstellung + Struktogramm
Course Einführung in die Informationstechnik I
Institution Technische Universität Berlin
Pages 5
File Size 168.9 KB
File Type PDF
Total Downloads 5
Total Views 130

Summary

Die damalige Hausaufgabe bestand aus 2 Teilen: Struktogramm und entsprechendes Programm (Solitaire-Spiel im Terminal)
Dieses Dokument beinhaltet die Aufgabenstellung und das anzufertigende Struktogramm...


Description

4. Hausaufgabe — Aufgabenstellung Einführung in die Informationstechnik für Ingenieure

Name:

Tutoriumstermin:

Wintersemester 2018/19 Aufgabenstellung : Bei dieser Aufgabe sollen Sie zuerst die Struktogramme zeichnen. Anschließend soll das Programm nach der Rückgabe der korrigierten Struktogramme in der von Ihnen gewählten Programmiersprache implementiert werden. Die Programmübersetzung erfolgt mittels Makefile. Bestandteile :

Programmbeschreibung : In dieser Hausaufgabe soll ein Solitaire–Spiel entwickelt werden (siehe auch Wikipedia „Solitär (Brettspiel)“). Das Spiel wird auf einem kreuzförmigen Spielfeld mit 33 Feldern und 32 Spielsteinen gespielt. Ein Stein kann einen direkten Nachbarn überspringen, der übersprungene Stein wird dabei entfernt. Diagonal kann nicht gesprungen werden. Ziel des Spiels ist es, alle bis auf einen Stein aus dem Spielfeld zu entfernen. Verbleibt mehr als ein Stein auf dem Spielfeld, ohne daß weitere Züge möglich sind, ist das Spiel verloren. Eine Abbildung des Spielfeldes finden Sie am Ende der Aufgabenstellung. • Hauptprogramm (main.c/f) Allgemeiner Hinweis: Das Spielfeld wird in einer 7×7–Integer–Matrix mit dem Namen spielfeld gespeichert. Darin steht eine 0 für ein freies Spielfeld, eine 1 für einen vorhandenen Spielstein und eine 2 dafür, daß sich an dieser Stelle kein reguläres Spielfeld befindet. Das Hauptprogramm stellt den Rahmen des Spiels dar. Hier wird das Spiel initialisiert und die Unterprogramme aufgerufen, die für den Spielablauf notwendig sind:

• Teil I: Struktogramme

– Das Programm meldet sich mit einer Bildschirmmeldung beim Benutzer.

• Teil II: Quelltext und Makefile mit clean –Regel

– Die Funktion einlesen wird aufgerufen, um das Spielfeld einzulesen. Sie liefert die Anzahl der anfangs vorhandenen Spielsteine zurück. Dieser Wert sollte in der Variablen steine gespeichert werden.

Abgabetermin: • Teil I: in den Tutorien vom 10.12.2018 bis 14.12.2018 • Teil II: in den Tutorien vom 21.01.2019 bis 25.01.2019 Erreichbare Punkte : 33 Anforderungen : Es ist beim Programmieren sehr wichtig, den Quellcode zu kommentieren, damit Außenstehende ihn verstehen können und man selbst auch nach einiger Zeit noch weiß, warum man was und wie programmiert hat. Wir verlangen daher von Ihnen, dass Sie Ihre Programme mit Kommentaren versehen! Andernfalls erfolgt Punktabzug. Treten beim Übersetzen Ihrer Programme Compiler- oder Syntaxfehler auf, werden diese mit 0 Punkten bewertet. Kopieren Sie unbedingt alle erforderlichen Dateien in Ihr Abgabeverzeichnis: ∼/Hausaufgaben/Aufgabe_4/ Achten Sie bei der Rechtevergabe darauf, dass Ihr Tutor (als others) auf alle relevanten Dateien zugreifen kann. Vorbereitung : • Struktogramme Lesen Sie zuerst die gesamte Aufgabenstellung durch, bevor Sie mit der Entwicklung der Struktogramme beginnen. Probieren Sie außerdem das zur Verfügung gestellte Beispielprogramm aus, um sich mit der Funktionsweise des Programms vertraut zu machen. Ein funktionierendes Beispiel zur Demonstration sowie alle benötigten Dateien finden Sie unter /home/edv1/Dateien/aufgabe04/. Die Bildschirmausgaben Ihres Programms müssen nicht mit denen des Beispielprogramms übereinstimmen. Sie dürfen gegebenenfalls kürzen. • Implementierung Erstellen Sie in Ihrem Heimatverzeichnis das Abgabeverzeichnis: ∼/Hausaufgaben/Aufgabe_4/ Kopieren Sie (falls nötig) vorgegebene Dateien in Ihr Abgabeverzeichnis und legen Sie ein Makefile zur Übersetzung Ihres Programmes an. Das Programm soll aus verschiedenen Modulen zusammengesetzt sein, die alle in separaten Dateien abzulegen sind. Implementieren Sie die unten aufgeführten Module anhand Ihrer vom Tutor korrigierten Struktogramme in Fortran95 bzw. ANSI–C. 1

– Durch den Aufruf der von uns vorgegebenen Funktion zuege soll dann die Anzahl der noch möglichen Spielzüge ermittelt werden (Beschreibung der Funktion: siehe unten). Sichern Sie diesen Wert in der Variablen n zur späteren Verwendung. – In der Haupt–Spielschleife... ∗ ... soll zunächst das Spielfeld mit dem anzeigen–Unterprogramm angezeigt werden. ∗ Dann soll der Spieler über die Anzahl der Steine und die Anzahl der Zugmöglichkeiten informiert werden, ∗ bevor die spielen –Funktion den eigentlichen Spielzug implementiert. Sie liefert die neue Anzahl der vorhandenen Spielsteine zurück oder eine Null, wenn der Spieler das Spiel abbrechen möchte. ∗ Anschließend muß die zuege–Funktion aufgerufen werden, um die Anzahl der nun noch möglichen Spielzüge zu ermitteln. – Implementieren Sie eine geeignete Abbruchbedingung für die Spielschleife. – Fand das Spiel ein reguläres Spielende, muß das aktuelle Spielfeld mit dem letzten Zug noch angezeigt werden, dann soll dem Benutzer gegebenenfalls zum Spielerfolg gratuliert oder das Bedauern über sein Scheitern ausgedrückt werden. – Im Falle eines Spielabbruchs soll nur eine Abschiedsmeldung erfolgen. • einlesen (einlesen.c/f) Diese Funktion liest das Spielfeld aus der Datei spielfeld.dat in die spielfeld–Matrix ein und liefert die Anzahl der darauf befindlichen Spielsteine zurück: – Sie müssen keine Fehlerbehandlung implementieren, sondern dürfen davon ausgehen, daß die genannte Datei vorhanden ist und ein Solitaire–Spielfeld enthält. – Die Datei besteht aus 7 Zeilen und 7 Spalten. Jedes Element besteht aus einer ganzen Zahl zwischen 0 und 2 mit den oben beschriebenen Bedeutungen. – Der Rückgabewert soll die Anzahl der vorhandenen Spielsteine sein. Hinweis: Die Datei spielfeld.dat aus dem Vorgabeordner enthält das reguläre 7×7–Spielfeld. Für das Testen der „Gewonnen“- und „Verloren“–Erkennung steht die Datei spielfeld_test.dat mit deutlich weniger Steinen zur Verfügung.

2

• anzeigen (anzeigen.c/f) Dieses Unterprogramm zeigt das Spielfeld an. Eine Beispielausgabe sehen Sie beim Start des Demo– Programmes unter /home/edv1/Dateien/aufgabe04/solitaire und unten. Orientieren Sie sich bei der Implementierung Ihres Unterprogrammes am vorgegebenen Beispielprogramm. So müssen z.B. auch die Trennstriche und die Zeilen- und Spaltennummern sauber formatiert mit angezeigt werden. Die einzelnen Spielfeldelemente (freies Feld, belegtes Feld oder kein Feld) können Sie mit Hilfe des von uns vorgegebenen Unterprogramms steinanzeige (Objektdatei steinanzeige.o) ausgeben lassen. Dieses Unterprogramm erwartet als Parameter eine ganze Zahl, wobei wieder eine 0 für ein freies Feld, eine 1 für einen Spielstein und eine 2 für kein bespielbares Spielfeld steht. Bei anderen Werten erfolgt die Ausgabe eines roten F. Das Unterprogramm gibt vor und nach dem Spielfeldelement jeweils ein Leerzeichen aus. • spielen (spielen.c/f) In dieser Funktion führt der Spieler einen Zug aus. Der (neue) Wert der Variablen steine soll am Ende an das Hauptprogramm zurückgegeben werden. Eine Null soll dabei den Spielabbruch durch den Spieler anzeigen. Da fehlerhafte Eingaben stets zu einer Fehlermeldung und Neueingabe des gesamten Spielzuges führen sollen, findet der Spielzugablauf in einer Schleife statt: – Zu Beginn sollte eine Steuervariable fehler mit Null initialisiert werden. Treten Fehler auf, kann sie auf 1 gesetzt und der Fehler damit in der Schleifensteuerung erkannt werden. – Der Benutzer wird aufgefordert, den Stein auszuwählen, der springen soll. Hierzu wird zunächst die Zeilennummer in der Variablen zeile erfaßt. Ist diese 0, soll kein Spielzug mehr ausgeführt und eine 0 als Anzahl neuer Steine an den Aufrufer zurückgegeben werden. Anderenfalls wird auch noch die Spaltennummer in der Variablen spalte erfaßt. – Mit Hilfe der von uns vorgegebenen Funktion im_feld können Sie die Zeilen- und Spaltenangaben auf ihre Gültigkeit hin testen (Beschreibung der Funktion: siehe unten). Sie liefert eine 1 zurück, wenn Zeile und Spalte gültig sind und das Feld ein gültiges Spielfeld ist. – Wurde ein gültiges Spielfeld angegeben und befindet sich dort ein Stein, wird der Benutzer gefragt, in welche Richtung (o, u, l, r) der Stein springen soll. Anderenfalls soll nach einer entsprechenden Fehlermeldung zur erneuten Eingabe des Spielsteins aufgefordert werden. Die eingegebene Richtung soll in der Variablen richtung gespeichert werden. – Hat der Benutzer eine gültige Richtung eingegeben, sollen die Hilfsvariablen z und s entsprechend der eingegebenen Richtung gesetzt werden. In z wird eine Änderung der Zeile, in s eine Änderung der Spalte vermerkt. Nutzen Sie hierfür die Werte -1, 0 und +1, um die Sprungrichtung zu vermerken und auch die Koordinaten des übersprungenen Feldes ermitteln zu können. Bei einer ungültigen Richtung ist es zunächst ausreichend, die Variable fehler auf 1 zu setzen. – Der Stein kann nur springen, wenn folgende Bedingungen erfüllt sind: ∗ Landet der Stein auf einem gültigen Feld des Spielfeldes? ∗ Ist das Feld, auf dem der Spielstein landet, noch frei? ∗ Liegt auf dem zu überspringenden Feld ein Stein? Nutzen Sie zur Formulierung der o.g. Bedingungen unsere Funktion im_feld und die Hilfsvariablen z und s in den Indizes der spielfeld –Matrix. – Ist der Zug ungültig oder wurde vorab eine fehlerhafte Richtung angegeben, soll nach einer Fehlermeldung zur erneuten Eingabe des Spielsteins aufgefordert werden. Anderenfalls wird der Spielzug ausgeführt. Nutzen Sie auch hierfür die Hilfsvariablen z und s. – Implementieren Sie eine geeignete Abbruchbedingung für die Wiederholungsschleife. – Am Ende soll die neue Anzahl von Spielsteinen oder eine Null bei Spielabbruch an den Aufrufer zurückgegeben werden.

3

• zuege (zuege.o) Diese Funktion bekommen Sie als Objekt–Datei gestellt. Die Funktion ist wie folgt deklariert: C: Fortran:

int zuege (int spielfeld[7][7]) INTEGER FUNCTION zuege (spielfeld)

Die Funktion zählt alle noch möglichen Züge im übergebenen Spielfeld und gibt diese als Integer an den Aufrufer zurück. Sie brauchen für die Funktion zuege kein Struktogramm zu erstellen. Die Objekt–Datei finden Sie unter /home/edv1/Dateien/aufgabe04/. • im_feld (im_feld.o) Diese Funktion bekommen Sie als Objekt–Datei gestellt. Die Funktion ist wie folgt deklariert: C: Fortran:

int im_feld (int spielfeld[7][7], int zeile, int spalte) INTEGER FUNCTION im_feld (spielfeld, zeile, spalte)

Die Funktion überprüft zunächst die eingegebenen Zeilen- und Spaltennummern auf Gültigkeit: Liegen diese außerhalb von 1 bis 7 (Fortran) bzw. 0 bis 6 (C) wird gleich eine 0 zurückgegeben. Anschließend wird geprüft, ob das korrekt adressierte Feld ein gültiges Spielfeld ist, also eine 0 oder 1 enthält. Bei einem gültigen Spielfeld wird eine 1 zurückgegeben, anderenfalls eine 0. Sie brauchen für die Funktion im_feld kein Struktogramm zu erstellen. Die Ob jekt–Datei finden Sie unter /home/edv1/Dateien/aufgabe04/. • Gespeicherte Spielverlaufs–Dateien zum Testen Zum Testen Ihrer Programme oder auch in Verbindung mit dem Demonstrationsprogramm stehen Ihnen im Vorgabeordner Eingabedateien mit gespeicherten Spielverläufen zur Verfügung: demospiel.gewonnen enthält eine Zugfolge, die zu einer Gewinnstellung des Spiels führt, demospiel.verloren eine, die zu einem verlorenen Spiel führt. Verwendung: solitaire < demospiel.gewonnen bzw. solitaire < demospiel.verloren . • Screenshot des Demonstrationsprogrammes:

EDV1 - Hausaufgabe Korrigierte Version Wintersemester 2018/19

Teil 1: Struktogramm main A(B): „Wilkommen bei SOLITAIRE“ steine =

einlesen(spielfeld)

n=

zuege(spielfeld) anzeigen(spielfeld) A(B): „Sie haben“, n, „Zugmöglichkeiten“ A(B): „Es liegen“, steine, „Steine auf dem Spielfeld“ steine = spielen(spielfeld, steine) zuege = zuege(spielfeld)

zuege = 0 oder steine = 0 steine = 0 T A(B): „Spiel wird abgebrochen“

F anzeigen(spielfeld) steine = 1 T A(B): „Herzlichen Glueckwunsch! Sie haben gewonnen“

F A(B): „Leider verloren“

einlesen(spielfeld) Datei spielfeld.dat öffnen steine = 0 i = 1, 7 j = 1, 7 E(D): spielfeld(i, j) spielfeld(i, j) =1 T steine = steine + 1

Datei spielfeld.dat schließen Rückgabewert: steine

anzeigen(spielfeld) A(B): „··· | ·1· ·2· ·3· ·4· ·5· ·6· ·7· “ A(B): „---+--- --- --- --- --- --- ---“ i = 1, 7 A(B): ·i·, „|“ j = 1, 7 steinanzeige(spielfeld(i, j)) A:(B): „··· | ····· ··· ··· ··· ··· ··· ···“

„·“ steht für Leerzeichen

F...


Similar Free PDFs