讲解:Ubungsblatt、C++、Programmieren、C++Python|Java

Dr. habil. Bernd Sch¨urmannDr. Annette [email protected] KaiserslauternFachbereich InformatikUbungsblatt 9: Programmieren in C (WS 2018/19) ¨Abgabe: Montag, 07.01.19, 12:001. Dieses Ubungsblatt ist ein ¨ Pflicht¨ubungsblatt, d.h. Sie m¨ussen bei der Bearbeitung dieses Blattes mind. 50%der Gesamtpunkte erreichen.2. Die Abgabe erfolgt ¨uber das Exclaim-System gemeinsam mit Ihrem Teampartner.3. Zur Beantwortung von Fragen und Hilfestellung bei der Bearbeitung kommen Sie bitte in die w¨ochentlicheFragestunde, Mittwoch 15:30, in Terminalraum 32-410.4. Bitte laden Sie einzelne Dateien hoch, wie in der Aufgabenstellung angegeben, keine Archive, keine kompiliertenDateien.5. Programme, die nicht kompilieren, werden nicht korrigiert und mit 0 Punkten bewertet.6. Bitte beachten Sie unsere Regelung bei Plagiaten: Wenn Sie sekund¨are Quellen, wie B¨ucher oder das Internet verwenden, m¨ussen Sie immer die Quelleangeben. Das einfache Kopieren aus anderen Quellen ist f¨ur die Ubungen nicht gestattet. Wenn wir ¨in einer Ubungsabgabe kopierten Code ohne Quellenangabe finden, wird die gesamte Abgabe mit 0 ¨Punkten bewertet. Sie k¨onnen Ubungsaufgaben gerne mit den Mitgliedern anderer Teams diskutieren. Sie sollten jedoch ¨Ihren Code vor der Abgabefrist nicht an andere Teams weitergeben bzw. zeigen. Wenn Code von anderen Teams kopiert wurde, werden die Abgaben von beiden Teams mit 0 Punktenbewertet. Wir behalten uns vor Punkte auch nachtr¨aglich abzuziehen, wenn ein Versto? erst sp¨ater bemerkt wird.Rettet das Weihnachtsfest!Bei der Auftaktbesprechung der diesj¨ahrigen Weihnachtssaison verk¨undet der Weihnachtsmann:“Liebe Weihnachtswichtel, Engel und Elfen! Wir werden dieses Jahr die Planung der Geschenkeund Verarbeitung der Listen mittels neuester Technologie angehen. Wir steigen um von derElfen-verarbeitetenden Datenverarbeitung auf die Elektronische Datenverarbeitung!”Ihre Aufgabe ist es, dem Weihnachtsmann dabei zu unterst¨utzen und Programme zu schreiben,die die Aufgaben der Wichtel, Engel und Elfen automatisieren.Aufgabe 1: Durchsuchen der Wunschzettel (10 Punkte)Die Weihnachtswichtel haben von allen Menschen die Wunschzettel eingesammelt und eingescannt.Um die Produktion der Geschenke besser planen zu k¨onnen, will der Weihnachtsmannwissen, auf welchem Wunschzettel ein bestimmtes Geschenk gew¨unscht wurde.Ziel dieser Aufgabe ist es, ein C-Programm zu schreiben, das einen gegebenen Suchtext ineinem Eingabetext finden kann und alle Zeilen des Eingabetexts ausgibt, welche den Suchtextenthalten.a) Laden Sie von der Vorlesungshomepage die Vorlage wunschzettel.c herunter und erg¨anzenSie diese wie in den n¨achsten Schritten beschrieben.b) Schreiben Sie eine Funktion:bool contains(char *search, int searchSize, char *input, int inputSize).Die Funktion nimmt einen Suchtext search der L¨ange searchSize und einen Eingabetextinput der L¨ange inputSize. Die Funktion soll true zur¨uckgeben, wenn der gesuchte Text imEingabe-Text vorkommt und ansonsten false.Verwenden Sie keine Funktionen aus der C-Bibliothek f¨ur diese Aufgabe.c) Schreiben Sie eine main-Funktion f¨ur Ihr Programm, welches einen Suchtext als ProgrammParameternimmt und die Standard-Eingabe nach Vorkommen des Suchstrings durchsucht.Die Zeilen der Eingabe, welche den Suchtext enthalten, sollen zusammen mit ihrer Zeilennummerausgegeben werden. Dabei soll zuerst die Zeilennummer ausgegeben werden, dannein Leerzeichen und dann der Text der Zeile.F¨ur das zeilenweise Lesen der Eingabe (Wunschzettel) verwenden Sie die Funktion char*fgets(char *s, int n, FILE *stream). Diese Funktion nimmt einen Buffer s der Gr¨o?e nund einen Eingabe-Strom. Wenn Sie stdin als Eingabe-Strom verwenden, wird von derStandardeingabe gelesen. Die Funktion liest bis eine neue Zeile startet, das Ende des Stromserreicht ist oder die maximale L¨ange n-1 erreicht ist. R¨uckgabe der Funktion ist s, falls dasEinlesen erfolgreich war und NULL falls das Ende des Stroms erreicht wurde oder ein Fehlerauftritt. Zeilenumbr¨uche am Ende der Zeile werden in s beibehalten. Der eingeleseneString endet jeweils mit einem ‘\0‘-Zeichen. Verwenden Sie zum Einlesen einen Buffer derGr¨o?e 1024. L¨angere Zeilen m¨ussen nicht korrekt behandelt werden, sollten aber nicht zuundefinierten Verhalten f¨uhren.BeispielProgrammparameter: SchokoEingabe: Ausgabe:Apfel, Nuss und MandelnAutoparkgarage und SchokoFeuerwehrautoSchokoladenlinsenFilzpantoffel2 Autoparkgarage und Schoko4 SchokoladenlinsenAufgabe 2: Die fleitigsten Studierenden (10 Punkte)Die Engel haben das Jahr Aufzeichnungen angefertigt, wer brav war und eine Liste allerStudierenden ermittelt, die regelm¨a?ig an den Ubungen teilgenommen haben. Um die Auszeich- ¨nung “Fleitigster Studi 2018” zu vergeben, ben¨otigt der Weihnachtsmann f¨ur jeden Studiengangdie Person mit der h¨ochsten Punktzahl auf den gesamten Ubungsbl¨attern. ¨Ihre Aufgabe ist es ein Programm zu schreiben, das aus der Liste der Engel den fleitigstenStudierenden ermittelt und ausgibt.a) Laden Sie von der Vorlesungshomepage die Vorlage studis.c herunter und erg¨anzen Siediese wie in den n¨achsten Schritten beschrieben.b) Modellieren Sie einen Studierenden als einen struct Studi mit folgenden Strukturvariablen: Name mit max. 20 Zeichen als String (name) Punktezahl als Integer (punkte) Studiengang als Wert eines enum Fach {EIT, INF, MATH} (studiengang)c) In der Vorlage finden Sie eine Funktion void init(struct Studi *s, char *eingabe) , die die Informationenaus dem String eingabe nimmt und in die Struktur s eintr¨agt. Beschreiben Sie(als Kommentar) die Funktionsweise von init; d.h. die代做Ubungsblatt作业、代写C++程序设计作业、代做Programmieren留学生作业、代做C++实验作业 代 einzelnen Schritte sowie die Verwendungvon strtok. Erl¨autern Sie anhand von Michael Meier,34,INF, wie sich der Eingabestringeingabe durch Aufruf der Funktion init ver¨andert.d) Schreiben Sie eine Funktion void busyStudi(Studi* studis, int n, Fach f) die aus einem Arrayvon n Studierenden-Eintr¨agen den Namen des Studierenden mit der h¨ochsten Punktzahl auseiner Fachrichtung f ermittelt und ausgibt.e) Schreiben Sie eine main-Funktion, die wie in Aufgabe 1 oben beschrieben, die zun¨achst dieDaten der Studierenden zeilenweise einliest und ein Array von Strukturen des Studi f¨ullt.Die Eingabe soll dabei max. 100 Eintr¨age enthalten. Die Ausgabe des Programms soll denNamen des fleitigsten Studis des Fachbereichs EIT beinhalten.Beispiel:Eingabe: Ausgabe:Michael Maier,12,INFMarja Martin,56,EITBerta Bubble,23,INFKarl Klein,34,EITUlli Schmitt,87,MATHYan Ying,34,EITFleissigster Studi der EIT: Marja MartinAufgabe 3: Die Elfen und die Weihnachtsfeier (5 Punkte)Die Elfen Anton, Berta, Claus und Doris freuen sich schon alle riesig auf das grotie Weihnachtsfestim Weihnachtsdorf. Beim Aufstellen des Tannenbaums kommt es aber zum grotien Streitunter den Elfen: Steht der Baum gerade oder nicht? Der Baum wird k¨urzer und k¨urzer ges¨agt,bis schlie?lich nur noch wenige Nadeln ¨ubrig bleiben. Dem Weihnachtsmann platzt der Kragen:“Zur Strafe d¨urft ihr dieses Jahr nicht mitfeiern!” In einer gemeinsamen Diskussion kann mansich schlie?lich auf die folgenden Grunds¨atze verst¨andigen: Mindestens ein Elf geht zu der Feier. Anton geht auf keinen Fall zusammen mit Doris. Wenn Berta geht, dann geht Claus mit. Wenn Anton und Claus gehen, dann bleibt Berta zu Hause. Wenn Anton zu Hause bleibt, dann geht entweder(!) Doris oder Claus (aber nicht beide).Helfen Sie den Elfen, in dem Sie ein Programm schreiben, dass alle erlaubten Konstellationenermittelt, in denen die Elfen am Fest teilnehmen k¨onnen. Die Ausgabe des Programs sollpro Zeile eine erlaubte Konstellation sein, wobei die Namen der teilnehmenden Elfen immeraufsteigend sortiert ausgegeben werden sollen. Auf der Vorlesungshomepage finden Sie eineentsprechende Vorlage party.c.Aufgabe 4: Ein toller Start ins Neue Jahr! (10 Punkte)Das Mondprogramm der Volksrepublik China plant am Freitag, den 07.12.2018, die Sonde“Chang’e 4” zu starten, die auf der R¨uckseite des Mondes landen soll und die bislang wenigerforschte Gegend zu untersuchen. Sie wurden ausgew¨ahlt f¨ur diese wichtige Mission eine Programmzu entwickeln, die es erlaubt verschiedene Szenarien bei der Landung zu simulieren.Nehmen Sie an, die Landef¨ahre befindet sich in 50 km H¨ohe ¨uber der Mondoberfl¨ache und hateine Abw¨artsgeschwindigkeit von derzeit 3.600km/Std = 1.000m/s. Wenn Sie keinen Schubgeben, so werden Sie mit 1, 63m/s2 vom Mond angezogen. Die Antriebe Ihrer Landef¨ahreverm¨ogen bei vollem Schub jedoch eine Gegenbeschleunigung von 12m/s2zu erzeugen undverbrauchen dabei pro Sekunde 100 Liter Treibstoff. Anfangs verf¨ugen Sie ¨uber 10000 LiterTreibstoff. Ihre Landef¨ahre kann eine Aufsetzgeschwindigkeit von 10m/s aushalten, ansonstenist das Landeman¨over gescheitert.Es gelten folgende Formeln:a = aMond + aSchubv = v0 + a ts = v0 t + 0.5at2Dabei bezeichnet v die Geschwindigkeit, a die Beschleunigung und t die Zeit. Die Beschleunigungendurch die Mondanziehung aMond und die Triebwerke aSchub addieren sich, wobei aufdie Richtung zu achten ist. Der erste Term in der Gleichung f¨ur s berechnet die zur¨uckgelegteWegstrecke bei konstanter Geschwindigkeit, der zweite Term die zus¨atzlich zur¨uckgelegte Wegstreckeaufgrund der Beschleunigung.Entwickeln Sie eine einfache Simulation einer Mondlandung und gehen Sie dazu wie folgt vor:a) Definieren Sie die in der Aufgabenstellung angegebenen Werte als symbolische Pr¨aprozessorkonstanten.b) Definieren Sie einen Struktur-Datentyp sim_daten, der die notwendigen Simulationsdaten(Simulationszeit, H¨ohe, Geschwindigkeit, Treibstoff) zusammenfasst.c) Implementieren Sie eine Funktion void init(struct sim_daten *data), die die Komponentenvon data mit den Pr¨aprozessorkonstanten initialisiert.d) Implementieren Sie eine Funktion void ausgabe(struct sim_daten *data), die die Komponentenvon data strukturiert ausgibt.e) Implementieren Sie eine Funktion, die einen Simulationsschritt berechnet und die Komponentenvon data aktualisiert:void simulations_schritt(struct sim_daten *data, bool bremsschschub)Der Parameter bremsschub gibt an, ob im aktuellen Simulationsschritt die Bremstriebwerkez¨unden. Ein Simulationsschritt hat eine Dauer von 1s.f) Implementieren Sie schlie?lich eine main-Funktion. Diese besteht aus einer Schleife, dievon der Kommandozeile einliest, ob im n¨achsten Simulationsschritt gebremst werden soll(Eingabe: ’y’/’n’) und dann entsprechend die Funktionen simulations_schritt aufruft. DieSchleife wird abgebrochen, wenn entweder ’q’ eingegeben wird oder die Sonde auf dem Mondaufgekommen ist.g) Zum Abschluss ist auszugeben, ob der Landeversuch erfolgreich war oder scheiterte.Beispiel:Eingabe:nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnAusgabe:Die Sonde ist auf dem Mond zerschellt!Zeit: 49 sHoehe: -956.8 mGeschwindigkeit: 1079.9 m/sTreibstoff: 10000.0 lHinweis: Die Ausgabe der Simulationsdaten soll mit 8 Vor- und 1 Nachkommastelle erfolgen.Die Angabe der Zeit ist als ganze Zahl gegeben. Bei erfolgreicher Landung ist der Ausgabetext: Die Sonde ist erfolgreich auf dem Mondgelandet! Bei missgl¨uckter Landung ist der Ausgabetext: Die Sonde ist auf dem Mond zerschellt! Bei Abbruch der Simulation soll ausgegeben werden: Die Simulation wurde abgebrochen.转自:http://ass.3daixie.com/2019011023291398.html

你可能感兴趣的:(讲解:Ubungsblatt、C++、Programmieren、C++Python|Java)