Gruppenaufgaben
Gruppenaufgaben
Gruppenaufgaben
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( iMonate1) + Herde( iMonate2) );<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.