联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2019-01-09 09:29

Dr. habil. Bernd Sch¨urmann

Dr. Annette Bieniusa

pinc-support@cs.uni-kl.de

TU Kaiserslautern

Fachbereich Informatik

Ubungsblatt 9: Programmieren in C (WS 2018/19) ¨

Abgabe: Montag, 07.01.19, 12:00

1. 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¨ochentliche

Fragestunde, Mittwoch 15:30, in Terminalraum 32-410.

4. Bitte laden Sie einzelne Dateien hoch, wie in der Aufgabenstellung angegeben, keine Archive, keine kompilierten

Dateien.

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 Quelle

angeben. 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 Punkten

bewertet.

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 Geschenke

und Verarbeitung der Listen mittels neuester Technologie angehen. Wir steigen um von der

Elfen-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 Weihnachtsmann

wissen, auf welchem Wunschzettel ein bestimmtes Geschenk gew¨unscht wurde.

Ziel dieser Aufgabe ist es, ein C-Programm zu schreiben, das einen gegebenen Suchtext in

einem Eingabetext finden kann und alle Zeilen des Eingabetexts ausgibt, welche den Suchtext

enthalten.

a) Laden Sie von der Vorlesungshomepage die Vorlage wunschzettel.c herunter und erg¨anzen

Sie 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 Eingabetext

input der L¨ange inputSize. Die Funktion soll true zur¨uckgeben, wenn der gesuchte Text im

Eingabe-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 ProgrammParameter

nimmt und die Standard-Eingabe nach Vorkommen des Suchstrings durchsucht.

Die Zeilen der Eingabe, welche den Suchtext enthalten, sollen zusammen mit ihrer Zeilennummer

ausgegeben werden. Dabei soll zuerst die Zeilennummer ausgegeben werden, dann

ein 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 n

und einen Eingabe-Strom. Wenn Sie stdin als Eingabe-Strom verwenden, wird von der

Standardeingabe gelesen. Die Funktion liest bis eine neue Zeile startet, das Ende des Stroms

erreicht ist oder die maximale L¨ange n-1 erreicht ist. R¨uckgabe der Funktion ist s, falls das

Einlesen erfolgreich war und NULL falls das Ende des Stroms erreicht wurde oder ein Fehler

auftritt. Zeilenumbr¨uche am Ende der Zeile werden in s beibehalten. Der eingelesene

String endet jeweils mit einem ‘\0‘-Zeichen. Verwenden Sie zum Einlesen einen Buffer der

Gr¨o?e 1024. L¨angere Zeilen m¨ussen nicht korrekt behandelt werden, sollten aber nicht zu

undefinierten Verhalten f¨uhren.

Beispiel

Programmparameter: Schoko

Eingabe: Ausgabe:

Apfel, Nuss und Mandeln

Autoparkgarage und Schoko

Feuerwehrauto

Schokoladenlinsen

Filzpantoffel

2 Autoparkgarage und Schoko

4 Schokoladenlinsen

Aufgabe 2: Die fleitigsten Studierenden (10 Punkte)

Die Engel haben das Jahr Aufzeichnungen angefertigt, wer brav war und eine Liste aller

Studierenden 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 Studiengang

die 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 fleitigsten

Studierenden ermittelt und ausgibt.

a) Laden Sie von der Vorlesungshomepage die Vorlage studis.c herunter und erg¨anzen Sie

diese 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 Informationen

aus dem String eingabe nimmt und in die Struktur s eintr¨agt. Beschreiben Sie

(als Kommentar) die Funktionsweise von init; d.h. die einzelnen Schritte sowie die Verwendung

von strtok. Erl¨autern Sie anhand von "Michael Meier,34,INF", wie sich der Eingabestring

eingabe durch Aufruf der Funktion init ver¨andert.

d) Schreiben Sie eine Funktion void busyStudi(Studi* studis, int n, Fach f) die aus einem Array

von n Studierenden-Eintr¨agen den Namen des Studierenden mit der h¨ochsten Punktzahl aus

einer Fachrichtung f ermittelt und ausgibt.

e) Schreiben Sie eine main-Funktion, die wie in Aufgabe 1 oben beschrieben, die zun¨achst die

Daten 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 den

Namen des fleitigsten Studis des Fachbereichs EIT beinhalten.

Beispiel:

Eingabe: Ausgabe:

Michael Maier,12,INF

Marja Martin,56,EIT

Berta Bubble,23,INF

Karl Klein,34,EIT

Ulli Schmitt,87,MATH

Yan Ying,34,EIT

Fleissigster Studi der EIT: Marja Martin

Aufgabe 3: Die Elfen und die Weihnachtsfeier (5 Punkte)

Die Elfen Anton, Berta, Claus und Doris freuen sich schon alle riesig auf das grotie Weihnachtsfest

im Weihnachtsdorf. Beim Aufstellen des Tannenbaums kommt es aber zum grotien Streit

unter 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 man

sich 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 Konstellationen

ermittelt, in denen die Elfen am Fest teilnehmen k¨onnen. Die Ausgabe des Programs soll

pro Zeile eine erlaubte Konstellation sein, wobei die Namen der teilnehmenden Elfen immer

aufsteigend sortiert ausgegeben werden sollen. Auf der Vorlesungshomepage finden Sie eine

entsprechende 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 wenig

erforschte Gegend zu untersuchen. Sie wurden ausgew¨ahlt f¨ur diese wichtige Mission eine Programm

zu 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 hat

eine Abw¨artsgeschwindigkeit von derzeit 3.600km/Std = 1.000m/s. Wenn Sie keinen Schub

geben, so werden Sie mit 1, 63m/s2 vom Mond angezogen. Die Antriebe Ihrer Landef¨ahre

verm¨ogen bei vollem Schub jedoch eine Gegenbeschleunigung von 12m/s2

zu erzeugen und

verbrauchen dabei pro Sekunde 100 Liter Treibstoff. Anfangs verf¨ugen Sie ¨uber 10000 Liter

Treibstoff. Ihre Landef¨ahre kann eine Aufsetzgeschwindigkeit von 10m/s aushalten, ansonsten

ist das Landeman¨over gescheitert.

Es gelten folgende Formeln:

a = aMond + aSchub

v = v0 + a t

s = v0 t + 0.5at2

Dabei bezeichnet v die Geschwindigkeit, a die Beschleunigung und t die Zeit. Die Beschleunigungen

durch die Mondanziehung aMond und die Triebwerke aSchub addieren sich, wobei auf

die Richtung zu achten ist. Der erste Term in der Gleichung f¨ur s berechnet die zur¨uckgelegte

Wegstrecke bei konstanter Geschwindigkeit, der zweite Term die zus¨atzlich zur¨uckgelegte Wegstrecke

aufgrund 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 Komponenten

von data mit den Pr¨aprozessorkonstanten initialisiert.

d) Implementieren Sie eine Funktion void ausgabe(struct sim_daten *data), die die Komponenten

von data strukturiert ausgibt.

e) Implementieren Sie eine Funktion, die einen Simulationsschritt berechnet und die Komponenten

von data aktualisiert:

void simulations_schritt(struct sim_daten *data, bool bremsschschub)

Der Parameter bremsschub gibt an, ob im aktuellen Simulationsschritt die Bremstriebwerke

z¨unden. Ein Simulationsschritt hat eine Dauer von 1s.

f) Implementieren Sie schlie?lich eine main-Funktion. Diese besteht aus einer Schleife, die

von der Kommandozeile einliest, ob im n¨achsten Simulationsschritt gebremst werden soll

(Eingabe: ’y’/’n’) und dann entsprechend die Funktionen simulations_schritt aufruft. Die

Schleife wird abgebrochen, wenn entweder ’q’ eingegeben wird oder die Sonde auf dem Mond

aufgekommen ist.

g) Zum Abschluss ist auszugeben, ob der Landeversuch erfolgreich war oder scheiterte.

Beispiel:

Eingabe:

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

Ausgabe:

Die Sonde ist auf dem Mond zerschellt!

Zeit: 49 s

Hoehe: -956.8 m

Geschwindigkeit: 1079.9 m/s

Treibstoff: 10000.0 l

Hinweis:

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 Mond

gelandet!

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.


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp