10.02.2014 Aufrufe

Gruppenaufgaben

Gruppenaufgaben

Gruppenaufgaben

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Informatik Praktikum <strong>Gruppenaufgaben</strong> 1/26<br />

<strong>Gruppenaufgaben</strong><br />

Nr. Titel Teilnehmer<br />

Kommentar<br />

5.1 Lebensdauer eines Rillenkugellagers 2 (Maschinenbau) 2<br />

5.2 Performance-Timer 2 Arbeit mit Dateien 4<br />

5.3 Hex/Dez-Binär-Umrechner 2 mathematisch; 4<br />

5.4 Bildverwaltung 2 Arbeit mit Dateien 5<br />

5.5 Arbeitstage bis zur Rente 2 Aufwändig ! ; Datenformate 6<br />

5.6 Schräger Wurf 2 Physik 7<br />

5.7 Umwandlung Kart.-/Zylinderkoordinaten 2 mathematisch; 8<br />

5.8 Vier gewinnt! 2 Spiel / Oberflächenproblem 8<br />

5.9 Käsekästchen 2 Spiel / Oberflächenproblem 8<br />

5.10 Axiales Flächenmoment 2. Ordnung 2 (Maschinenbau) 9<br />

5.11 Blindleistungsberechnung 2 (Maschinenbau) 10<br />

5.12 Zellulärer Automat (Konsole) 2 lustiges Algorithmus-Problem 10<br />

5.13 Sortieralgorithmus 2 Algorithmus-Problem 11<br />

5.14 Zellulärer Automat (GUI) 3 schwer; mit GTK Bibliothek 12<br />

5.15 Würmer (GUI) 3 schwer; mit GTK Bibliothek 12<br />

5.16 Travelling-Salesman-Problem 2 Graphen:theoretische Informatik 13<br />

5.17 Internet-Spider 2 Netzwerkaufgabe 14<br />

5.18 Tag-Editor 2 Arbeit mit Dateien 15<br />

5.19 IP-Adress-Prüfung 2 Netzwerkaufgabe 16<br />

5.20 Kaffeeautomat in der Mensa 3 nur für Quereinsteiger! 17<br />

5.21 Reverse 2 Spiel 18<br />

5.22 Passfederberechnung 2 (Maschinenbau) 19<br />

5.23 Wärmeverlustberechnung 2 (Maschinenbau) 20<br />

5.24 Seilreibung 2 (Maschinenbau) 21<br />

5.25 Zweidimensionale lineare Approximation 2 mathematisch; 22<br />

5.26 Extraktion von Daten aus Binärdateien 2 Arbeit mit Dateien 23<br />

5.27 Rohrreibung 2 (Maschinenbau) 24<br />

5.28 Fibonacci-Algorithmus 2 Algorithmus-Problem 25<br />

5.29 Visualisierung einer Ampelschaltung 2 (MB) / Oberflächenproblem 25<br />

5.30 Simulation einer Nutzungshäufigkeit 2 mathematisch 26<br />

Seite


Informatik Praktikum <strong>Gruppenaufgaben</strong> 2/26<br />

Aufgabe 5.1 Lebensdauer eines Rillenkugellagers<br />

Schreiben Sie ein Programm DynRKL.exe, mit dem die Dimensionierung eines Rillenkugellagers<br />

bei dynamischer Belastung automatisiert wird. Grundlage soll die Berechnung der modifizierten<br />

nominellen Lebensdauer nach DIN ISO 281 sein.<br />

Die erforderliche Größe eines Wälzlagers hängt ab von den Anforderungen an seine Tragfähigkeit<br />

und Belastbarkeit, an die Lebensdauer und an die Betriebssicherheit. Das Maß für die Tragfähigkeit<br />

sind die statischen und dynamischen Tragzahlen. Die dynamischen Tragzahlen basieren auf DIN<br />

ISO 281, die statischen Tragzahlen auf DIN ISO 76. Für umlaufende Wälzlager gilt die dynamische<br />

Tragzahl C. Sie ist bei Radiallagern eine konstante Radiallast und bei Axiallagern eine zentrisch<br />

wirkende, konstante Axiallast. Die dynamische Tragzahl C ist die Belastung unveränderlicher<br />

Größe und Richtung, bei der eine genügend große Menge gleicher Lager eine nominelle<br />

Lebensdauer von einer Million Umdrehungen erreicht. Verfahren zur Berechnung der Lebensdauer<br />

sind die nominelle Lebensdauer nach DIN ISO 281, die modifizierte nominelle Lebensdauer nach<br />

DIN ISO 281 u. a.<br />

Nominelle Lebensdauer:<br />

Dabei gilt:<br />

• L [10 6 Umdr.] nominelle Lebensdauer in Millionen Umdrehungen, die von 90 %<br />

einer genügend großen Menge gleicher Lager erreicht oder überschritten wird, bevor die<br />

ersten Anzeichen einer Werkstoffermüdung auftreten<br />

• Lh [h] nominelle Lebensdauer in Betriebsstunden entsprechend der Definition für L<br />

• C [N] dynamische Tragzahl<br />

• P [N] äquivalente Lagerbelastung für Radial- bzw. Axiallager (siehe Äquivalente<br />

Lagerbeanspruchung)<br />

• p Lebensdauerexponent; für Nadel- und Zylinderrollenlager: p = 10/3für Kugellager: p<br />

= 3<br />

• n [min-1] Betriebsdrehzahl (siehe Äquivalente Lagerbeanspruchung)<br />

Die modifizierte nominelle Lebensdauer kann berechnet werden, wenn neben Belastung und<br />

Drehzahl weitere Einflüsse bekannt sind wie:<br />

* besondere Werkstoffeigenschaften<br />

* die Schmierung oder<br />

* wenn eine von 90 % abweichende Erlebenswahrscheinlichkeit gefordert wird.<br />

Modifizierte nominelle Lebensdauer:<br />

Dabei gilt:<br />

• L na [10 6 Umdr.] modifizierte nominelle Lebensdauer für besondere<br />

Werkstoffeigenschaften und Betriebsbedingungen bei einer Erlebenswahrscheinlichkeit von<br />

(100 – n) %<br />

• L [10 6 Umdr.] nominelle Lebensdauer<br />

• a 1 Lebensdauerbeiwert für eine Erlebenswahrscheinlichkeit, die von 90 % abweicht<br />

• a 2 Lebensdauerbeiwert für besondere Werkstoffeigenschaften -<br />

für Standard-Wälzlagerstähle: a 2 = 1<br />

• a 3 Lebensdauerbeiwert für besondere Betriebsbedingungen - insbesondere für den<br />

Schmierungszustand.<br />

• Қ Viskositätsverhältnis κ = ν/ν 1


Informatik Praktikum <strong>Gruppenaufgaben</strong> 3/26<br />

Dauerfestigkeit<br />

Viskositätenverhältnis:<br />

1) gute Sauberkeit und geeignete Additive<br />

2) Höchste Sauberkeit und geringe<br />

Belastung<br />

3) Verunreinigungen im Schmierstoff<br />

Ungünstige Betriebsbedingungen<br />

Der Lebensdauerbeiwert a 3 hängt ab vom<br />

Viskositätsverhältnis κ = ν/ν 1 . ν ist die<br />

kinematische Viskosität des Schmierstoffes bei Betriebs-Temperatur und ν1 ist die Bezugsviskosität<br />

des Schmierstoffes bei Betriebstemperatur. Bei dieser Viskosität bildet sich ein ausreichender<br />

Schmierfilm in der Kontaktzone. Bei Fettschmierung gilt die Viskosität des Grundöls.<br />

Geben Sie L h und L hna aus. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut<br />

sein. Programmieren Sie die Berechnung so, dass bei jeder Abfrage eines Wertes ein Standardwert<br />

vorgeschlagen wird, der nur bestätigt werden muss. Gehen Sie dabei von folgenden Standardwerten<br />

aus:<br />

• Drehzahl 1500/min (konstant)<br />

• Tragzahl C = 6950 N (vgl. FAG-Lager 16004 bei http://medias.ina.de/medias/de!hp/ )<br />

• Erlebenswahrscheinlichkeit 95%<br />

• Bezugsviskosität 21 mm 2 /s<br />

• Schmierstoff Aral Eural Gear68 mit 68 mm 2 /s (Viskosität bei 40°C)<br />

• Leichte Verunreinigungen im Schmierstoff<br />

Fangen Sie alle möglichen Fehlerquellen ab!


Informatik Praktikum <strong>Gruppenaufgaben</strong> 4/26<br />

Aufgabe 5.2 Performance-Timer<br />

Schreiben Sie ein Programm PerfTime.exe, das als Stoppuhr für externe Prozesse dient. PerfTime<br />

soll bis zu 10 beliebige Programme starten können und die Zeit messen, die diese Programme<br />

brauchen bis sie beendet werden. Die zu vermessenden Programme sollen als Kommandozeilenparameter<br />

eingelesen werden. Benutzen Sie zum Aufrufen des externen Prozesses die C-<br />

Funktion spawnl() und geben Sie sinnvolle Meldungen im Fehlerfall aus.<br />

Nach Beendigung der Messung sollen folgende Informationen dargestellt werden:<br />

Programmname des gemessenen Prozesses mit lfd. Nummer<br />

Startzeit<br />

Stoppzeit<br />

Laufzeit (=Differenz der ersten beiden) in Millisekunden<br />

ID des gemessenen Prozesses<br />

Zusätzlich soll die Möglichkeit bestehen, die ermittelten Daten an ein Messprotokoll anzuhängen.<br />

Dazu ist der Name der Protokolldatei abzufragen und das Datum der Messung mit in der Datei<br />

abzulegen. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie<br />

alle möglichen Fehlerquellen ab!<br />

Aufgabe 5.3 Hex/Dez-Binär-Umrechner<br />

Schreiben Sie ein Konsolenprogramm BinCalc.exe, das dezimale und hexadezimale Zahlen im<br />

Bereich von unsigned long int (32 Bit) im Binärformat ausgibt. Überlegen Sie sich dazu einen<br />

allgemeingültigen mathematischen Algorithmus.<br />

Die Eingabe der umzurechnenden Zahl erfolgt als Kommandozeilenparameter. Dabei gelten<br />

folgende Regeln: Zahl mit 0x am Anfang wird als hexadezimale Zahl interpretiert, Zahl ohne 0x am<br />

Anfang wird als dezimale Zahl interpretiert und Buchstaben werden als Pfad auf eine Datei<br />

gewertet, in der die Zahl steht.<br />

Die Ausgabe erfolgt bei Eingabe von Zahlen mit printf (auf der Kommandozeile) und bei einer<br />

Eingabe durch eine Datei mit einer Ausgabedatei, die denselben Namen hat wie die Eingabedatei,<br />

aber die Endung .bin trägt. Die Ausgabe soll aus Lesbarkeitsgründen in 8-Bit-Blöcke mit<br />

Leerzeichen unterteilt werden und mehrfarbig sein. Der Quelltext soll aus mehreren Modulen und<br />

Funktionen aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab und prüfen Sie Ihre<br />

Ergebnisse z.B. mit http://trinler.de/de/service/technik/basis.html !


Informatik Praktikum <strong>Gruppenaufgaben</strong> 5/26<br />

Aufgabe 5.4 Bildverwaltung<br />

Schreiben Sie ein Programm ImgInfo.exe, das in dem Verzeichnis, in dem es sich befindet, nach<br />

Bitmaps (Bilddateien) sucht und eine Liste mit folgenden Informationen anzeigt:<br />

Name der Bilddatei<br />

Dateigröße<br />

Breite und Höhe des Bildes in Pixel<br />

Farbtiefe (Bits pro Pixel) des Bildes<br />

Das Suchen nach Dateien in einem Verzeichnis erfolgt mit findfirst() und findnext().<br />

Zusätzlich soll angezeigt werden, wie groß der verbrauchte Speicherplatz aller in diesem<br />

Verzeichnis liegender Bilddateien (Bitmaps) ist. Die benötigten Informationen liegen an bestimmten<br />

Offsets (Abstand vom Anfang der Datei in Bytes) in den Bilddateien selbst und können dort mit<br />

fread() ausgelesen werden:<br />

Offset Bytes Name Bedeutung<br />

00h 2 bfType File ID<br />

02h 4 bfSize Dateigröße in Bytes<br />

0ah 4 bfOffs Offset in den Datenbereich<br />

0eh 4 biSize Größe der Bitmap-Info-Headers<br />

12h 4 biWidth Breite der Bitmap in Pixel<br />

16h 4 biHeight Höhe der Bitmap in Pixel<br />

1ch 2 biBitCnt Zahl der Bits pro Pixel (Farbtiefe)<br />

1eh 4 biCompr Komprimierungstyp<br />

2eh 4 biClrUsed Zahl der benutzten Farben<br />

…<br />

Erzeugen Sie sich zum Testen 8 Bitmaps (Endung: .bmp) mit MSPaint oder suchen Sie passende<br />

Bitmaps im Internet. Integrieren Sie einen optionalen Dialog, der das Verzeichnis abfragt, das<br />

durchsucht und angezeigt werden soll. Der Quelltext soll aus mehreren Modulen und Funktionen<br />

aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab!


Informatik Praktikum <strong>Gruppenaufgaben</strong> 6/26<br />

Aufgabe 5.5 Arbeitstage bis zur Rente<br />

Schreiben Sie das Programm Rente.exe, das die verbleibenden Arbeitstage bis zur Rente berechnet.<br />

Beachtet (Achtung Schwierigkeit: Struktur time_t (32 bit) läuft 2038 über!) werden sollen dabei<br />

• Wochenenden,<br />

• Schaltjahre,<br />

• Feiertage (Achtung: Abgleich mit Wochenenden!) und<br />

• Urlaubstage (Vereinfachung: keine Feiertage in Urlaubszeiten)<br />

Das Programm soll dazu das Geburtsdatum des Benutzers und seine Urlaubstage (default: 30)<br />

einlesen und mit dem Systemdatum die<br />

// Hauptzählschleife fuer volle Jahre<br />

notwendigen Berechnungen durchführen.<br />

Die Hauptzählschleife könnte etwa so<br />

aussehen, wie im Kasten rechts. Das Startund<br />

Endjahr müsste ggf. besonders<br />

behandelt werden.<br />

Achtung: dieses Programm ist<br />

umfangreicher, als es zunächst den<br />

Anschein hat. Beginnen Sie mit der Suche<br />

nach geeigneten Datentypen für die<br />

Datumsangaben und die Differenzbildung.<br />

Erstellen Sie zunächst Funktionen für<br />

bestimmte Teilaufgaben (z.B.<br />

for(iMonat=1; iMonat


Informatik Praktikum <strong>Gruppenaufgaben</strong> 7/26<br />

Aufgabe 5.6 Berechnung eines schrägen Wurfs<br />

Schreiben Sie das Programm Wurf.exe, das den Zielpunkt eines dreidimensionalen schrägen Wurfs<br />

von einem Turm in Abhängigkeit von der Wurfenergie, den Abwurfwinkeln und der<br />

Beschleunigung durch den Seitenwind berechnet. Dabei ist von folgenden Annahmen auszugehen:<br />

V 1 ist die aus der<br />

Wurfenergie<br />

resultierende<br />

Geschwindigkeit,<br />

α ist der Abwurfwinkel<br />

gegenüber der<br />

Horizontalen und<br />

H ist die Höhe der<br />

Abwurfstelle gegenüber<br />

der Umgebung.<br />

Von oben betrachtet (in der Draufsicht) erkennt man die Abwurfrichtung γ in der X-Y-Ebene und<br />

den Einfluss des Seitenwindes, der in Y-Richtung weht und die konstante Beschleunigung a y auf<br />

den Flugkörper ausübt.<br />

Wurf.exe soll die Parameter<br />

Wurfenergie E 1 (100 Nm),<br />

Masse m (2 kg),<br />

Höhe H (20 m),<br />

Winkel α (30°),<br />

Winkel γ (0°)<br />

und die konstante Beschleunigung a y (2<br />

m/s²) einlesen und dabei die in Klammern<br />

gesetzten Zahlenwerte als Standardwert<br />

anbieten, der jeweils nur bestätigt zu werden braucht. Danach soll der Punkt berechnet werden, in<br />

dem der Wurf niedergeht. Zusätzlich soll die Position grob grafisch dargestellt werden (nur erster<br />

Quadrant in der X-Y-Ebene; Funktion gotoxy() ). Der Quelltext soll aus mehreren Modulen und<br />

Funktionen aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab!


Informatik Praktikum <strong>Gruppenaufgaben</strong> 8/26<br />

Aufgabe 5.7 Umrechnung kartesiche- in Zylinderkoordinaten<br />

Schreiben Sie ein Programm KoKonv.exe, das 3-dimensionale kartesische Koordinaten wahlweise in<br />

Zylinder- oder Kugelkoordinaten umrechnet und<br />

umgekehrt. Die Eingangskoordinaten sollen in Form<br />

einer Nx3-Matrix in einer Textdatei hinterlegt sein, deren<br />

Name KoKonv.exe als Kommandozeilenparameter<br />

übergeben wird. Zusätzlich sollen ein Kommandozeilenparameter<br />

das Ziel-KO-System identifizieren. Die<br />

Ausgangsdaten sollen optional in eine Datei geschrieben<br />

werden, die denselben Namen hat wie die Datei mit den<br />

Eingangsdaten, aber eine andere Dateinamenerweiterung<br />

(z.B. Daten.xyz -> Daten.zyl). Diese Option wird durch<br />

einen dritten Parameter eingeschaltet.<br />

Beispiel-Aufruf:<br />

> KoKonv Daten.xyz -ZYL -f<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab!<br />

Aufgabe 5.8 Vier gewinnt!<br />

Implementieren Sie das bekannte 2-D-Spiel Vier gewinnt! für zwei Spieler am Bildschirm. Eine<br />

Online-Implementation mit Computergegner können Sie beispielsweise unter http://www.doktornoll.de/spiele/vier-gewinnt.htm<br />

probespielen.<br />

In Ihrer Version geben die beiden Spieler dabei abwechselnd eine Spalte an<br />

(Tastatur), in der sie ihren Chip einwerfen und der Rechner zeichnet den<br />

aktuellen Spielstand mit ASCII-Zeichen (z.B. mit O und X und geeigneten<br />

Strichen für den Rahmen; Funktion gotoxy() ) und prüft, ob bereits eine<br />

waagerechte, senkrechte oder quer verlaufende Reihe von 4 Chips eines Spielers vorliegt. Das<br />

Spielfeld soll 7 x 6 Felder haben.<br />

Programmieren Sie so, dass während des Spiels nicht die ENTER-Taste gedrückt werden muss.<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab!<br />

Aufgabe 5.9 Käsekästchen<br />

Implementieren Sie das bekannte 2-D-Spiel Tic-Tac-Toe für zwei Spieler am Bildschirm. Eine<br />

Online-Implementation mit Computergegner können Sie beispielsweise unter<br />

http://tictactoe.slapped.de/ probespielen.<br />

In Ihrer Version geben die beiden Spieler dabei abwechselnd eine Spalte und<br />

Zeile an (Tastatur), in der sie ihr Zeichen machen und der Rechner zeichnet den<br />

aktuellen Spielstand mit ASCII-Zeichen (z.B. mit O und X und geeigneten<br />

Strichen für den Rahmen; Funktion gotoxy() ) und prüft, ob bereits eine


Informatik Praktikum <strong>Gruppenaufgaben</strong> 9/26<br />

waagerechte, senkrechte oder quer verlaufende Reihe von 3 Zeichen eines Spielers vorliegt oder das<br />

Spiel zu Ende ist.<br />

Das Programm soll über mehrere Spiele laufen und den Spielstand sowie die Spielernamen<br />

anzeigen. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab!<br />

Aufgabe 5.10 Axiales Flächenmoment 2. Grades stabförmiger Bauteile<br />

Schreiben Sie ein Programm IyCalc.exe, das die Flächenträgheitsmomente 2. Grades der<br />

Balkenprofile Kasten, Vollkreis, dünnwandiges Rohr, dickwandiges Rohr und Doppel-T<br />

berechnet.<br />

Dabei ist der Benutzerdialog so zu gestalten, dass die geforderte Eingabe immer eindeutig ist. Die<br />

einzelnen Werte sollen so zwischengespeichert werden, dass die Eingabe beim jeweils vorherigen<br />

Aufruf immer als Standardwert vorgeschlagen wird, der dann nur bestätigt zu werden braucht, wenn<br />

er sich nicht ändert.<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab und prüfen sie die Konsistenz der Angaben (passen die Dimensionen<br />

zusammen?)!


Informatik Praktikum <strong>Gruppenaufgaben</strong> 10/26<br />

Aufgabe 5.11 Blindleistungsberechnung<br />

Schreiben Sie ein Programm Pblind.exe, das<br />

• Scheinleistung<br />

S +<br />

2 2<br />

= P Q ,<br />

• Scheinwiderstand Z = U/I,<br />

• Leistungsfaktor λ = cos ϕ = P / S ,<br />

• Blindfaktor β = sin ϕ = Q / S und<br />

• Blindleistung Q = U I sinϕ<br />

eines ohmsch-induktiven Verbrauchers berechnet.<br />

Das Programm soll zunächst die Klemmenspannung U, den Strom I und die Wirkleistung P einlesen<br />

und dabei die jeweils beim letzten Programmaufruf eingegebenen Werte als Standardwert vorgeben,<br />

der nur bestätigt zu werden braucht, wenn er sich nicht ändert ( Anfangswerte:<br />

U = 220 V, I = 10 A, P = 1500 W).<br />

Nach der Berechnung und der Anzeige der o.g. Ergebnisse soll das Zeigerdiagramm für Strom und<br />

Spannung auf den Bildschirm gezeichnet werden (Funktion gotoxy() ).<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab.<br />

Aufgabe 5.12 Zellulärer Automat 1 (Konsole)<br />

Schreiben Sie ein Programm Life8.exe, das Elemente in einem Feld von 60 x 20 Zeichen<br />

entsprechend Ihres Zustands ändert. Es gibt dabei die 2 Zustände tot (ASCII-Zeichen „X“) und<br />

lebendig (ASCII-Zeichen „O“), für die folgende Regeln gelten:<br />

Jede Zelle hat 8 Nachbarn (außer Rand), die jeweils einen von 2 Zuständen (Farben) haben<br />

Eine Zelle bleibt am Leben, wenn in ihrer Nachbarschaft genau 2 oder 3 lebendige Zellen<br />

gezählt werden<br />

Eine tote Zelle erwacht zum Leben, wenn genau 3 ihrer Nachbarn leben<br />

In allen anderen Fällen stirbt die Zelle oder erwacht gar nicht erst zum Leben<br />

Zeichnen Sie<br />

einen Rahmen auf den<br />

Bildschirm (Funktion gotoxy() )<br />

und implementieren Sie die Regeln zum Besetzen der einzelnen Felder mit den Zeichen „X“ und<br />

„O“. Probieren Sie dabei verschiedene Anfangszustände aus! Am Ende soll der Anfangszustand per<br />

Zufallsgenerator berechnet werden.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 11/26<br />

Aufgabe 5.13 Sortier-Algorithmus<br />

Implementieren Sie den Sortier-Algorithmus Bubblesort (http://de.wikipedia.org/wiki/Bubblesort)<br />

in einem C-Programm MySort.exe mit mehreren Modulen und Funktionen. Ihr Programm soll die zu<br />

sortierenden Daten per Zufallsgenerator erheben und die Menge der zu sortierenden Daten dabei als<br />

Kommandozeilenparameter einlesen. Ein zweiter Kommandozeilenparameter soll optional den<br />

Namen einer Datei enthalten, in der das Ergebnis zusätzlich zur Ausgabe auf dem Bildschirm<br />

gespeichert wird. Der Aufruf könnte so aussehen:<br />

> MySort 25 erg.txt<br />

Beim BubbleSort-Algorithmus werden immer zwei benachbarte Elemente miteinander verglichen. Ist<br />

das eine größer als das andere, werden die beiden Werte vertauscht. Ein kleines Beispiel dazu:<br />

Ausgangslage:<br />

19 5 32 8<br />

Erster Durchlauf<br />

19 5 32 8 >> 5 19 32 8<br />

5 19 32 8 >> 5 19 32 8<br />

5 19 32 8 >> 5 19 8 32<br />

Zweiter Durchlauf<br />

5 19 8 32 >> 5 19 8 32<br />

5 19 8 32 >> 5 8 19 32<br />

5 8 19 32 >> 5 8 19 32<br />

Bei jedem Durchlauf wird auch jedes einzelne Arrayelement mit dem nächsten verglichen. Pro<br />

Arrayelement läuft eine äußere und einer innere Schleife durch. In diesem Fall gäbe es hier vier<br />

äußere Schleifendurchläufe - in diesem Beispiel ist das Array nach zwei Durchläufen allerdings<br />

bereits korrekt sortiert. Man könnte mit entsprechenden Prüfungen nun das Sortieren abbrechen, für<br />

die "Grundversion" ist das aber erstmals unnötig.<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab.<br />

Zusatzaufgabe: Optimieren Sie die Laufzeit!


Für Leute mit Programmiererfahrung!<br />

Informatik Praktikum <strong>Gruppenaufgaben</strong> 12/26<br />

Aufgabe 5.14 Zellulärer Automat 2 (GUI)<br />

Für leidenschaftliche Programmierer!<br />

Schreiben Sie ein GUI-Programm Life8.exe mit GTK+ (in C) oder ggf. auch als GUI-Programm mit<br />

dem in das Visual Studio integrierten Fenster-Designer (in C++). Life8.exe soll Bildpixel in einem<br />

Feld von 200 x 200 entsprechend Ihrem Zustand färben. Es gibt dabei die 2 Zustände tot und<br />

lebendig, für die folgende Regeln gelten:<br />

Jede Zelle hat 8 Nachbarn, die jeweils einen von 2 Zuständen (Farben) haben<br />

Eine Zelle bleibt am Leben, wenn in ihrer Nachbarschaft genau 2 oder 3 lebendige Zellen<br />

gezählt werden<br />

Eine tote Zelle erwacht zum Leben, wenn genau 3 ihrer Nachbarn leben<br />

In allen anderen Fällen stirbt die Zelle oder erwacht gar nicht erst zum Leben<br />

Denken Sie sich zwei Farben für die beiden Zustände aus, implementieren Sie die Regeln und<br />

färben Sie die Bildpunkte entsprechend der Anwendung der Regeln auf diese Bildpunkte. Probieren<br />

Sie dabei verschiedene Anfangszustände aus und fangen Sie alle möglichen Fehlerquellen ab!<br />

Hinweis: Zum Programmieren von Windows-Anwendungen mit C kann die Funktionsbibliothek<br />

GTK+ verwendet werden. GTK+ ist nicht objektorientiert. Etwas Erfahrung mit der Verwendung<br />

von Funktionen sollte allerdings bereits vorhanden sein. Näheres bitte besprechen!<br />

Aufgabe 5.15 Würmer (GUI)<br />

Für leidenschaftliche Programmierer!<br />

Schreiben Sie das GUI-Programm Worms.exe mit GTK+ (in C) oder ggf. auch als GUI-Programm<br />

mit dem in das Visual Studio integrierten Fenster-Designer (in C++). Das Programm soll Bildpixel<br />

in einem Feld von 200 x 200 Punkten vorübergehend so einfärben, dass der Eindruck eines sich<br />

fortbewegenden (bunten) Wurmes eintritt. Die Bewegungsrichtung des Wurms soll zufällig sein,<br />

aber nie den Rand des Feldes überschreiten. Probieren Sie verschiedene Längen und<br />

Anfangszustände. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein.<br />

Zusatzaufgabe: Ändern Sie das Programm so, dass mehrere Würmer gleichzeitig durch das Feld<br />

kriechen. Dabei soll die Farbe an jeder Stelle innerhalb der Würmer gleich bleiben (z.B. vorne<br />

immer gelb, hinten immer blau, Mitte immer rot, usw.).<br />

Hinweis: Zum Programmieren von Windows-Anwendungen mit C kann die Funktionsbibliothek<br />

GTK+ verwendet werden. GTK+ ist nicht objektorientiert. Etwas Erfahrung mit der Verwendung<br />

von Funktionen sollte bereits vorhanden sein. Näheres bitte besprechen!


Informatik Praktikum <strong>Gruppenaufgaben</strong> 13/26<br />

Aufgabe 5.16 Travelling-Salesman-Problem<br />

Das Problem des Handlungsreisenden (Traveling Salesman Problem, kurz TSP) ist ein<br />

kombinatorisches Problem der Mathematik und der<br />

theoretischen Informatik. Es behandelt die Aufgabe eines<br />

Handlungsreisenden, eine Reihenfolge für den Besuch<br />

mehrerer Orte so zu wählen, dass nach der Rückkehr zum<br />

Ausgangsort die gesamte Reisestrecke möglichst kurz ist.<br />

Bei n Städten gibt es k = (n-1)!/2 Möglichkeiten zu fahren!<br />

Schreiben Sie ein Programm, dass die Abstände der (bis zu<br />

7) Städte und deren Namen aus einer Textdatei einliest und<br />

die kürzeste Strecke ermittelt.<br />

Das Verfahren zur Ermittlung kann zunächst das Ausprobieren aller Möglichkeiten und deren<br />

anschließender Vergleich sein. Versuchen Sie dann, die Performance des Programms zu verbessern.<br />

Der Quelltext soll aus mehreren Funktionen aufgebaut sein. Fangen Sie alle möglichen<br />

Fehlerquellen ab.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 14/26<br />

Aufgabe 5.17 Internet - Spider<br />

Schreiben Sie ein Programm Spider.exe, das - ausgehend von einer einzugebenden Startseite –<br />

Internetseiten einliest und nach eMail-Adressen und verlinkten Seiten durchsucht. Die gefundenen<br />

eMail-Adressen sollen dann in einer lokalen Liste in der Datei MailAd.txt gespeichert werden,<br />

während der Spider mit den verlinkten Seiten fortfährt und alle weiteren Links in einer URL-Liste<br />

im Arbeitsspeicher (Array mit Strings) behält.<br />

Das Herunterladen der Seiten soll mit dem (ftp://ftp.newcastle.edu.au/pub/nt/gnu/wget.zip )<br />

externen Programm wget.exe gemacht werden, das von Spider.exe aufgerufen wird. Es legt die<br />

gewünschte Seite ( Aufruf: wget http://USERNAME:PASSWORD@URL:PORT/path/to/file.html )<br />

auf der Festplatte ab, wo Spider.exe sie dann weiterverarbeiten und schließlich löschen kann. Beim<br />

Durchsuchen der<br />

runtergeladenen Seiten<br />

nach Adress-Tags kann<br />

(optional) mit<br />

Funktionen aus der<br />

vorangegengenen<br />

Aufgabe 3 oder<br />

externen Bibliotheken<br />

gearbeitet werden.<br />

Schaffen Sie sich zwei<br />

Arrays für die zu<br />

bearbeitenden Links<br />

und die bereits abgearbeiteten Links. Beide Arrays sollten durchrotieren, wenn sie voll sind (first in<br />

- first out).<br />

Spider.exe soll nicht interaktiv arbeiten, damit es in Batchdateien mit mehreren Aufträgen benutzt<br />

werden kann und es dann im Hintergrund arbeitet. Dazu ist es notwendig, dass die Startseite als<br />

Kommandozeilenparameter übergeben wird und die Ergebnidsdatei MailAd.txt nicht überschrieben,<br />

sondern mit jedem Aufruf erweitert wird. Schreiben Sie das Programm so, dass man es mit der<br />

ESC-Taste abbrechen kann.<br />

Spider.bat (Beispiel):<br />

Spider.exe http://www.lisdorf.de/emailverz.html<br />

Spider.exe http://www.pmf.fh-goettingen.de<br />

Spider.exe http://www.meine-domain.de<br />

Spider.exe http://www.irgendwo.net<br />

…<br />

Der Quelltext<br />

soll aus<br />

mehreren<br />

Funktionen<br />

aufgebaut sein.<br />

Fangen Sie<br />

möglichst viele<br />

Fehlerquellen<br />

ab.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 15/26<br />

Aufgabe 5.18 Tag - Editor<br />

Schreiben Sie ein Programm TagEd.exe, mit dem man die so genannten Tags von Musikdateien im<br />

MP3-Format verändern kann. In diesen Tags stehen Klartextinformationen über Titel, Interpret,<br />

usw. des Musikstücks. Die Tags (Version 1) befinden sich in den letzten 128 Bytes einer mp3-Datei.<br />

Dabei wird folgendes Format eingehalten:<br />

AAABBBBBBBBBBBBB<br />

BBBBBBBBBBBBBBBB<br />

BCCCCCCCCCCCCCCC<br />

CCCCCCCCCCCCCCCD<br />

DDDDDDDDDDDDDDDD<br />

DDDDDDDDDDDDDEEE<br />

EFFFFFFFFFFFFFFF<br />

FFFFFFFFFFFFFFFG<br />

Sign Length Position Description<br />

(bytes) (bytes)<br />

A 3 (0-2) Tag identification. Must contain<br />

'TAG' if tag exists and is correct.<br />

B 30 (3-32) Title<br />

C 30 (33-62) Artist<br />

D 30 (63-92) Album<br />

E 4 (93-96) Year<br />

F 30 (97-126) Comment<br />

G 1 (127) Genre<br />

In einem Hexeditor sieht das Dateiende einer mp3-Datei also z.B. so aus:<br />

In diesem Fall wäre der Titel „Out of Asia“. Nähere Informationen zum Format dieser Dateien<br />

finden u.a. auf http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm .<br />

TagEd.exe soll den Namen der zu bearbeitenden MP3-Datei als Kommandozeilenparameter<br />

übernehmen und dann alle V1-Tags der Datei abfragen. Zusätzlich soll die Möglichkeit bestehen,<br />

alle MP3-Dateien des aktuellen Verzeichnisses (Kommandozeilenparameter /a) mit den<br />

abzufragenden Informationen zu beschreiben.<br />

Der Quelltext soll aus mehreren Funktionen aufgebaut sein. Fangen Sie möglichst viele<br />

Fehlerquellen ab. Testen können Sie z.B. mit WinAmp.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 16/26<br />

Aufgabe 5.19 IP-Adress-Prüfung<br />

IP-Adressen identifizieren Rechner im TCP/IP-Netzwerk. Die Rechner sind dabei zu Gruppen<br />

zusammengefasst, die man Subnet nennt. Ob eine IP zu einem gegebenen Subnet gehört, entscheidet<br />

die sog. Subnetmask. Mit dieser Maske wird die IP-Adresse Byte für Byte bitweise maskiert. Was<br />

dann übrig bleibt ist der Teil der IP-Adresse, der das Netzwerk (Subnet) angibt. Die erste Adresse in<br />

einem Subnet ist die Netzwerkadresse, die letzte Adresse ist die so genannte Broadcast-Adresse, an<br />

die Telegramme verschickt werden, die alle Rechner im Subnet erreichen sollen.<br />

Zur Überprüfung, ob ein Rechner direkt erreichbar ist (d.h. im gleichen Subnet liegt), oder über<br />

einen Router angesprochen werden muss, kann die maskierte IP verglichen werden. Im ersten Fall<br />

muss sie in beiden Fällen (Ziel und Quelle) gleich sein! Hier ist es z.B. so:<br />

Schreiben Sie ein Programm aus mehreren Funktionen, dass IP-Adressen und Subnetnmasken in<br />

Dezimalnotation (nnn.nnn.nnn.nnn) einlesen und auf Zugehörigkeit zu gegebenem Subnetz prüfen<br />

kann. Es sollen dazu die Ein-/Ausgabefunktionen get_ipaddr(), check_ipaddr() in einem separaten<br />

Modul (.c-Datei) implementiert werden und es soll<br />

• die Anzahl der Subnetzbits,<br />

• die Broadcastadresse,<br />

• die Netzadresse und<br />

• die Zugehörigkeit zum Subnetz<br />

ausgegeben werden. Fangen Sie möglichst viele Fehlerquellen ab und überprüfen Sie Ihre<br />

Ergebnisse mit einem online-Kalkulator (z.B. http://trinler.de/de/service/technik/ipcalc.html ).


Informatik Praktikum <strong>Gruppenaufgaben</strong> 17/26<br />

Aufgabe 5.20 Kaffee-Automat<br />

Achtung: Diese Aufgabe ist nur für Quereinsteiger geeignet, die nicht an der LV Informatik I<br />

an der HAWK teilnehmen!<br />

Sicherlich haben Sie schon den eleganten Kaffeeautomaten in der Mensa bemerkt. Hinter dem<br />

perfekt verarbeiteten Edelstahlgehäuse und den Bedienelementen, die ein wenig an Produkte<br />

eines großen amerikanischen Computerherstellers erinnern, steckt eine Menge Technik (und<br />

natürlich auch Software) um dem Benutzer einen vorzüglichen Kaffee- oder Cappuccinogenuss zu<br />

bereiten.<br />

Diese Software gilt es nun (ansatzweise) in der Programmiersprache C abzubilden:<br />

Erstellen Sie eine einfache Kaffeeautomatensteuerung in ANSI-C mit dem Name KAutoFee.exe<br />

nach folgenden Vorgaben:<br />

1. Der Benutzer wird freundlich begrüßt und die Getränkeliste wird präsentiert.<br />

2. Die Getränkeliste besteht zunächst nur aus: Kaffee<br />

3. Kaffee besteht aus Wasser, Kaffeebohnen, und nach Wunsch des Benutzers<br />

Milch und Zucker.<br />

4. Diese Zutaten sollen Datentechnisch als Struktur behandelt werden.<br />

5. Der Kaffeeautomat hat nur eine begrenzte Menge der oben genannten Zutaten. Bei jedem<br />

entnommenen Getränk wird die entsprechende Zutat dieser Menge dezimiert.<br />

6. Die Mengen der Zutaten sollen beim Start des Programms mit Werten initialisiert werden.<br />

7. Die Auswahl der Getränke erfolgt durch Tastatureingabe: k=Kaffee<br />

8. Nach Auswahl des Getränkes soll der Benutzerwunsch nach Zucker und Milch abgefragt<br />

werden.<br />

9. Der Benutzer bekommt sein Getränk – es kann eine neue Auswahl erfolgen.<br />

Die Kaffeeautomat - Steuerung soll dann erweitert und<br />

modifiziert werden:<br />

1. Zusätzlich zu Kaffee soll der Benutzer auch Cappuccino<br />

auswählen können. Cappuccino besteht aus Wasser,<br />

Espressobohnen, Milch(schaum) und nach Wunsch des<br />

Benutzers Zucker.<br />

2. Das Programm soll "korrekt" durch die Auswahltaste ’b’<br />

beendet werden können.<br />

3. Das ’b’ soll auch im Auswahlmenü mit angezeigt werden.<br />

4. Die Mengen der Zutaten sollen nun nicht mehr statisch im Programm initialisiert werden,<br />

sondern bei Programmstart aus einer Text-Datei gelesen werden. Bei Programmende soll die<br />

aktuelle Zutatenmenge in dieselbe Datei zurückgeschrieben werden. Erweitern Sie dazu Ihr<br />

Programm um die beiden Funktionen get_data() zum Lesen der aktuell vorhandenen<br />

Zutaten aus der Datei und set_data() zum Schreiben und fassen Sie die<br />

lesenden/schreibenden Daten in einem Array oder einer Struktur zusammen. Verwenden Sie<br />

hierfür die High-Level-Dateizugriffsfunktionen fopen(), fclose(), fwrite(), fread().<br />

5. Falls Sie es nicht bereits implementiert haben sollten: Erweitern Sie Ihr Programm um die<br />

Funktion check_mengen(). Diese Funktion soll verhindern, dass mehr Kaffee verkauft wird<br />

als materiell vorhanden ist ;-) Sobald eine Zutat alle ist, bzw. sie nicht mehr für einen<br />

kompletten Kaffee reicht, soll sich das Programm mit einem Hinweis auf die fehlende Zutat<br />

beenden.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 18/26<br />

6. Ausserdem soll es einen Servicemode geben, d.h. eine Eingabetaste, die nicht im Menü<br />

angezeigt wird, z.B. ’s’. Wenn diese Taste gedrückt wird, dann wird die Funktion<br />

display_zutaten(…) aufgerufen, die die aktuell vorhandene Menge an Zutaten anzeigt.<br />

Aufgabe 5.21 Reverse!<br />

Implementieren Sie das Zahlen-Spiel Reverse für einen Spieler am Bildschirm. Reverse.exe gibt<br />

eine Zahlenfolge der Ziffern 0 bis 9 aus, die der Spieler in möglichst wenigen Schritten zu sortieren<br />

hat. In jeder Runde kann der Spieler auswählen, wie viele Ziffern (von links nach rechts gesehen) in<br />

ihrer Reihenfolge umgedreht werden sollen. Dies führt der Rechner aus. Das Spiel endet mit der<br />

Angabe der Anzahl der gebrauchten Züge, wenn die Reihenfolge stimmt.<br />

In Ihrer Version gibt der Spieler dabei eine Zahl mit der Tastatur an. Die nächste Runde startet ohne<br />

dass die Eingabetaste gedrückt werden muss. Zu Beginn kann der Spieler die Anzahl der zu<br />

sortierenden Ziffern (max 10) angeben. Die Reihenfolge zu Beginn wird per Zufallsgenerator<br />

gewählt (separate Funktion). Der Aktuelle Stand (derzeitige Ziffernfolge, Anfangfolge, Nummer des<br />

aktuellen Zugs) soll stets an gleicher Position des Bildschirms stehen (Funktion gotoxy() ). Das<br />

Programm prüft selbständig, ob das Spiel beendet ist.<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab!<br />

Zusatzaufgabe: Gestalten Sie die Bildschirmausgabe mit großformatiger ASCII-Grafik.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 19/26<br />

Aufgabe 5.22 Paßfederberechnung<br />

Passfederverbindungen kommen zur Anwendung, um Riemenscheiben, Zahnräder, Kupplungsnaben<br />

usw. drehfest mit Wellen zu verbinden. Manchmal werden Passfedern zusätzlich verwendet, um<br />

Reibschlußverbindungen zu sichern oder um eine bestimmte Stellung in Umfangs-richtung<br />

gegenüber der Welle festzulegen.<br />

Passfedern werden abgerundet (Form A)<br />

und eckig (Form B) hergestellt. Die<br />

Abmessungen sind in DIN 6885 in<br />

Abhänbigkeit vom Wellendurchmesser<br />

festgelegt.<br />

Erstellen Sie ein Programm PassData.exe,<br />

dass die Länge, Breite und Höhe einer<br />

Passfeder berechnet und aus mehreren<br />

Modulen und Funktionen besteht.<br />

Die Berechnung<br />

der<br />

erforderlichen<br />

Länge erfolgt<br />

vereinfacht mit<br />

p zul = 1,2 R e bzw.<br />

1,2 R m bzw. 1,2<br />

R p0,2 :<br />

l erf<br />

= 4 M d<br />

d⋅h⋅p zul<br />

b Form A<br />

l erf<br />

= 4 M d<br />

d⋅h⋅p zul<br />

FormB<br />

Lesen Sie die Tabelle mit den Zahlenwerten aus DIN 6885 aus einer Datei in ein mehrdimensionales<br />

Array ein und fragen Sie den Benutzer nach Drehmoment, Wellendurchmesser und Bauform. Geben<br />

Sie dann die Lösungsmöglichkeiten mit erforderlicher Anzahl und Länge, sowie Breite, Höhe,<br />

Nuttiefe und Sicherheit (l/l erf ) aus. Fangen Sie alle möglichen Fehlerquellen ab!<br />

Zusatzaufgabe: Wenn zwei Passfedern verwendet werden, hat jede nur einen Traganteil von 75%<br />

(siehe auch<br />

http://www.eassistant.de/fileadmin/dokumente/eassistant/etc/HTMLHandbuch/eAssistantHandb_HTMLch8.html ).


Informatik Praktikum <strong>Gruppenaufgaben</strong> 20/26<br />

Aufgabe 5.23 Wärmeverlustberechnung<br />

Schreiben Sie ein Programm UWert.exe, dass den Heizwärmebedarf eines Gebäudes im Jahr<br />

berechnet. UWert.exe multipliziert dabei die Wärmeleitfähigkeiten λ der einzelnen Baustoffe mit<br />

deren Flächen und teilt sie durch deren Dicke. In der Regel sind dabei mehrere Schichten pro Fläche<br />

zu kalkulieren. Die Wärmeleitung der einzelenen Flächen F [m²] ist dann zu summieren und mit den<br />

Heizgradtagen (HGT 15 nach VDI 3807) der jeweiligen Region (Wetter) zu multiplizieren. Die<br />

Berechnungsformeln finden Sie unter http://www.bastelitis.de/bauphysik-warmedammung/ .<br />

Im einzelnen gilt vereinfachend:<br />

1. Der U-Wert einer bestimmten Fläche in [W/K] ergibt sich aus der Wärmeleitung der<br />

einzelnen Schichten:<br />

mit Wärmeleitfähigkeit λ [W/m²K]<br />

N<br />

λ und Schichtdicke d [m]<br />

U Wand<br />

=F Wand<br />

⋅ ∑<br />

Schicht<br />

Schicht=1<br />

d Schicht<br />

2. Der U-Wert eines bestimmten Gebäudes in [W/K]<br />

ergibt<br />

sich aus der Summe der Wände<br />

M<br />

mit U mit f = 1 für Außenwände<br />

ges<br />

= ∑<br />

Wand=1<br />

f = 0,8 für Wände zu unbeheizten geschl. Räumen<br />

f = 0,4 für Flächen, die an das Erdreich grenzen<br />

f i<br />

⋅U i<br />

W a<br />

[J ]=U ges<br />

[<br />

3. Der Heizwärmebedarf im Jahr berechnet sich unter Ausschluß von Brauchwasserwärmebedarf<br />

und Lüftungsverlusten etc.<br />

J<br />

vereinfachend aus<br />

s⋅K ]⋅HGT [ K⋅Tag]⋅86400[ s<br />

15<br />

Tag ]<br />

Lesen Sie beim Programmstart eine Auswahl von Wärmeleitwerten λ aus einer Datei in ein Array<br />

ein und fragen Sie den Benutzer nach den Daten N, M, f, F und d. Lesen Sie außerdem eine<br />

Auswahl von Wetterstützpunkten (HGT-Werten) aus einer<br />

Datei ein und bieten Sie die Auswahl an. Berechnen Sie<br />

dann den Jahresheizwärmebedarf und geben Sie ihn in kJ<br />

und in kWh aus.<br />

Heizgradtage<br />

Ort HGT 15/20<br />

Kassel 2432<br />

Fritzlar 2277<br />

Hannover 2331<br />

Berlin 2328<br />

Frankfurt 2152<br />

List/Sylt 2391<br />

Das Programm soll aus mehreren<br />

Modulen und Funktionen aufgebaut<br />

sein. Fangen Sie alle möglichen<br />

Fehlerquellen ab und gestalten Sie<br />

das Benutzerinterface möglichst<br />

komfortabel.<br />

Baumaterial<br />

Beton 2,0<br />

Vollziegel 0,96<br />

Kalksandstein 0,99<br />

Lehm 0,66<br />

Putz 1,0<br />

Mineralwolle 0,04<br />

Styropor 0,04<br />

Wärmeleitfähigkeit<br />

λ in [W/mK]<br />

Zusatzaufgabe:<br />

Erweitern Sie Ihr Programm um die Ausgabe der Heizkosten in Abhängigkeit vom Wärmeträger<br />

(Öl, Gas, Strom, ...) sowie um die Berücksichtigung von Glasflächen.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 21/26<br />

Aufgabe 5.24 Seilreibung<br />

Schreiben Sie ein Programm SeilR.exe, das die Seilreibung eines Seils<br />

um einen Poller berechnet. Dabei ist zwischen Haft- und Gleitreibung<br />

folgendermaßen zu unterscheiden:<br />

Haftreibung R H :<br />

F<br />

Gleitreibung R G :<br />

Zug<br />

=F Halte<br />

⋅e µ ⋅ɸ 0<br />

F Zug<br />

=F Halte<br />

⋅e µ⋅ɸ<br />

Es sind F die Kräfte, ɸ der Umschlingungswinkel, µ 0 die Haftreibungskoeffizienten und µ die<br />

Gleitreibungskoeffizienten. SeilR.exe soll die Frage beantworten, wie oft ein Seil um einen Poller<br />

geschlungen werden muss, damit es noch von einer Person gehalten werden kann. Dabei ist von<br />

einer maximalen Haltekraft von 150 N auszugehen. Die zu erwartende Zugkraft soll durch den<br />

Seildurchmesser und das Seilmaterial gegeben sein. Beides ist beim Bemutzer nachzufragen.<br />

Die Reibungskoeffizienten sind aus einer Datei einzulesen und als Paarung im Benutzerdialog<br />

Seilfestigkeit bei<br />

anzubieten.<br />

Durchmesser d [mm]:<br />

1. Stahl: F/N = 700 (d/mm)²<br />

2. Kevlar/Spectra:<br />

ca. 150 N/mm bei 4-8 mm<br />

3. Polyester:<br />

d/mm<br />

F/N<br />

3 131<br />

4 220<br />

5 330<br />

6 460<br />

8 780<br />

10 1230<br />

Polyester - Stahl (trocken) µ = 0,4<br />

Polyester - Alu (trocken) µ = 0,6<br />

Das Programm soll aus mehreren Modulen und Funktionen bestehen<br />

und die beim letzten Aufruf eingegeben Werte wieder als<br />

Standardwerte vorschlagen.<br />

Fangen Sie alle möglichen Fehlerquellen ab!


Informatik Praktikum <strong>Gruppenaufgaben</strong> 22/26<br />

Aufgabe 5.25 Zweidimensionale lineare Approximation<br />

Schreiben Sie ein Programm linprox.exe, das für gegebene Punkte eine Gerade der Form<br />

Y = Ax + B errechnet, die mit möglichst geringer Abweichung durch (alle) Punkte geht. Die Punkte<br />

sind in einer Text- oder Binärdatei gegeben und von dort einzulesen. Linprox.exe soll dann iterativ<br />

die beste Kombination von A und B bestimmen.<br />

A<br />

Datei: ideal.txt<br />

4<br />

0.00 3.00<br />

2.00 4.42<br />

2.70 5.00<br />

7.00 8.00<br />

Datei: real.txt<br />

5<br />

0.53 2.11<br />

1.12 3.48<br />

1.96 4.55<br />

2.30 5.69<br />

4.00 5.71<br />

Dazu sollen die quadratischen Abweichungen e i an den einzelnen Punkten P i mit<br />

e i = ( P yi – Y(P xi ) )² berechnet und zur Gesamtabweichung E = e 1 +e 2 +e 3 +...e n addiert werden.<br />

Dann sollen A und B geändert und die Abweichungen neu berechnet werden. Dieser Vorgang wird<br />

oft wiederholt und die beste Gerade (mit dem geringsten Fehler E) ausgegeben (Iteration).<br />

Überlegen Sie sich einen Algorithmus zum Auffinden der Startwerte für A und B sowie eine<br />

geeignete Abbruchbedingung für die Iteration. Es sollen bis zu 100 Punkte verarbeitet werden<br />

können. Das Programm soll aus mehreren Funktionen aufgebaut sein und Verbesserungen für die<br />

Ausführungszeit enthalten. Fangen Sie alle denkbaren Fehlerquellen ab!<br />

Zusatzaufgabe: Implementieren Sie einen Filter für Ausreißer, der Punkte aus der Berechnung<br />

ausschließt, wenn ihr Fehler größer ist, als die dreifache Standardabweichung (Schätzwert).


Informatik Praktikum <strong>Gruppenaufgaben</strong> 23/26<br />

Aufgabe 5.26 Extraktion und Verarbeitung von Daten aus Binärdateien<br />

Schreiben Sie ein Programm extdat,.exe, das Zahlen aus Binärdateien ausliest und diese in eine mit<br />

einem Tabellenkalkulationsprogrammen importierbare Form (csv Text-Datei) ausgibt. Der Offset<br />

(Startadresse in der Eingangsdatei) soll per Kommandozeilenparameter eingelesen werden (default:<br />

0). Zusätzlich soll die Anzahl der gelesenen Zahlen sowie deren Summe am Bildschirm ausgegeben<br />

werden.<br />

Der Name der zu verarbeitenden<br />

Binärdatei soll als 2. Parameter eingelesen<br />

werden. Wird dieser nicht angegeben, so<br />

soll die erste Datei im aktuellen<br />

Verzeichnis mit der Endung .dat verwendet<br />

werden. Das Binärformat der Daten in der<br />

Eingangsdatei soll als 3. Parameter<br />

eingegeben werden (int16, int32, float,<br />

double, long double). Der Defaultwert bei<br />

fehlender Angabe soll float sein. Der<br />

Name der Ausgabedatei ist gleich dem<br />

Namen der Eingabedatei mit der<br />

zusätzlichen Endung (z.B. .csv).<br />

Erzeugen Sie sich selbst mehrere Binärdateien zum Programmieren (Array erzeugen und mit<br />

fwrite() in Datei schreiben). Als Abschlusstest bekommen Sie eine Binärdatei vom Betreuer.<br />

Das Programm soll aus mehreren Quelltextmodulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

denkbaren Fehlerquellen ab!<br />

Zusatzaufgaben:<br />

1. Starten Sie die Tabellenkalkulation mit der neuen Importdatei direkt aus Ihrer Anwendung<br />

heraus.<br />

2. Implementieren Sie einen Algorithmus zum Schätzen des vorliegenden Binärformats (int,<br />

float, double) und testen Sie ihn.


Informatik Praktikum <strong>Gruppenaufgaben</strong> 24/26<br />

Aufgabe 5.27 Rohrreibung<br />

Schreiben Sie Programm namens dptube.exe, das den Reibungsverlust<br />

einer Wasserströmung in (Stahl-)Rohren berechnet.<br />

Bei der Reibung von Flüssigkeiten an Wandungen unterscheidet man<br />

zwischen laminarer (ruhiger) Strömung und turbulenter Strömung.<br />

Welche Art vorliegt entscheidet die Reynoldszahl Re = ς v d / υ: über<br />

dem kritischen Wert von etwa 2300, ist die Rohrströmung turbulent. Dabei ist<br />

d der Rohrdurchmesser,<br />

v die Fließgeschwindigkeit,<br />

υ die charakteristische kinematische Viskosität des Mediums (Wasser(20°C) = 1 mPa s) und<br />

ς (Rho) die Dichte (Wasser(20°C) = 998,2 kg/m³).<br />

Der Druckverlust der Leitung ergibt sich dann mit der Rohrreibungszahl λ und der Rohrlänge L zu<br />

dp = ς v² L / ( 2 d). Dabei sind Widerstandsbeiwerte von geformten Abschnitten (Knicken etc.)<br />

vernachlässigt.<br />

Die Rohrreibungszahl λ ist aus folgendem Diagramm zu ermitteln. Nehmen Sie eine Rohrrauhigkeit<br />

von k = 0,045 mm an.<br />

Dptube.exe soll die benötigten Daten vom Benutzer einlesen und dabei den jeweils letzten<br />

eingegebenen Wert als Standard vorschlagen (dann nur Return). Dann soll dptube.exe die<br />

Berechnung vornehmen und das Ergebnis schön formatiert ausgeben. Das Diagramm muss dazu in<br />

geeigneter Weise digitalisiert werden (Achtung. Logarithmische Darstellung!).<br />

Das Programm soll aus mehreren Quelltextmodulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

denkbaren Fehlerquellen ab!


Informatik Praktikum <strong>Gruppenaufgaben</strong> 25/26<br />

Aufgabe 5.28 Fibonacci-Algorithmus<br />

Schreiben Sie ein Programm namens Kanin.exe, dass die Bevölkerung mit Kaninchen nach einer<br />

einzugebenden Zeit berechnet. Dabei gelten folgende Regeln:<br />

●<br />

●<br />

●<br />

●<br />

Am Anfang gibt es ein<br />

Kaninchenpaar<br />

Jedes Paar braucht zwei Monate<br />

bis zur Geschlechtsreife (dunkel<br />

dargestellt) und Geburt des ersten<br />

Wurfs<br />

Jeder Wurf besteht aus einem<br />

Kaninchenpaar<br />

Nach den ersten zwei Monaten<br />

werfen die Kaninchenpaare einmal<br />

im Monat<br />

Implementieren Sie zunächst die gegeben rekursive Lösung in Kanin.exe. Dabei soll die Anzahl der<br />

Monate als Kommandozeilenparameter übergeben werden. Verändern Sie dann den Algorithmus<br />

und implementieren Sie eine alternative<br />

Rekursive Lösung:<br />

Funktion Herde2() im gleichen Programm.<br />

unsigned int Herde( unsigned int iMonate)<br />

{<br />

if (iMonate==0) return 0;<br />

if (iMonate==1) return 1;<br />

return( Herde( iMonate­1) + Herde( iMonate­2) );<br />

}<br />

Ziel ist es, die Rechenzeit für einen<br />

Durchlauf mit 50 Monaten unter eine<br />

Sekunde zu bringen. Geben Sie dazu die<br />

Start- und Endzeit des Rechenvorgangs<br />

aus und starten Sie Ihr Programm auch mal<br />

mit einer Lösung von Aufgabe 5.2.<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab!<br />

Aufgabe 5.29 Ampelschaltungs-Visualisierung<br />

Schreiben Sie ein Programm namens LZASim.exe, das eine<br />

Ampelschaltung visualisiert. Informieren Sie sich dazu über die<br />

geltenden rechtlichen Vorschriften (Zeiten, Farbablauf) und<br />

beginnen Sie mit einem Diagramm über den getakteten Ablauf.<br />

Anschauungsmaterial gibt es z.B. hier:<br />

http://www.berghaus-verkehrstechnik.de/index.php?<br />

id=software1 .


Informatik Praktikum <strong>Gruppenaufgaben</strong> 26/26<br />

Für die per Ampel zu regulierende Kreuzung gelten folgende Bedingungen:<br />

1. Es kreuzen eine stark befahrene Haupt- und eine kleinere Nebenstraße.<br />

2. Die Hauptstraße hat Linksabbiegerspuren und -ampeln.<br />

3. Die Ampel ist mit Induktionsschleifen und Fußgängertastern bedarfsgesteuert. Diese<br />

Schalter sind per Tastatur zu simulieren.<br />

4. Es sind Räumungsphasen für Linksabbieger zu realisieren.<br />

5. Es ist ein Notfallmodus vorzusehen (Blinklicht, Schaltung per Tastatur).<br />

Implementieren Sie eine Ablaufsteuerung so, dass die Zeiten leicht variiert werden können.<br />

Visualisieren Sie das Ergebnis anschaulich mit ASCII-Grafik (Funktion gotoXY() ).<br />

Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle<br />

möglichen Fehlerquellen ab!<br />

Zusatzaufgabe: Sehen Sie eine flexible Zeitabhängigkeit vor (Berufsverkehrsschaltung,<br />

Nachtabschaltung).<br />

Aufgabe 5.30 Simulation einer Nutzungshäufigkeit<br />

Die Herrentoilette einer fiktiven südniedersächsischen Fachhochschule hat 4 Pissoirs neben<br />

einander, die nur von einer Seite her zugänglich sind. Schreiben Sie ein Programm NutzStat.exe, das<br />

die relative Abnutzung der einzelnen Pissoirs als Folge der Nutzungshäufigkeit simuliert und<br />

ausgibt.<br />

Dabei gelten folgende Regeln:<br />

• Ist kein Pissoir besetzt, wird in 3 von 4 Fällen das erste<br />

genommen und in einem das letzte;<br />

• Ist 1 Pissoir besetzt, dann wird das genommen, das am<br />

weitesten vom besetzten entfernt liegt;<br />

• Sind 2 Pissoirs besetzt, wird in erster Priorität das am weitesten<br />

entfernte belegt;<br />

• Sind 2 Pissoirs besetzt, wird in zweiter Priorität das vierte Pissior verwendet;<br />

• Sind 3 Pissiors belegt, dann wird das freie verwendet;<br />

• In allen anderen Fällen ist die Belegung zufällig;<br />

Jeder Nutzer bleibt 1 Minute. Der Abstand zwischen den Zugängen soll per Zufallsgenerator<br />

ermittelt werden. Die Gesamtzahl der Nutzer, über die die Simulation laufen soll, soll vom Benutzer<br />

abgefragt werden. Geben die Nuzungshäufigkeit der einzelnen Pissoirs aus und visualisieren Sie die<br />

Simulation (welches ist gerade besetzt) in Zeitraffer mit Hilfe der Funktion gotoXY(). Der Quelltext<br />

soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle möglichen<br />

Fehlerquellen ab!<br />

Zusatzaufgabe: Variieren Sie die Regeln nach Ihrer Erfahrung und stellen Sie das Ergebnis<br />

gegenüber. Implementieren Sie die Pausen- und Vorlesungszeiten in Ihren Zugangsabstand ein.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!