Gruppenaufgaben

Transcription

Gruppenaufgaben
Informatik Praktikum
Gruppenaufgaben
1/26
Gruppenaufgaben
Nr.
Titel
TeilKommentar
nehmer
Seite
5.1
Lebensdauer eines Rillenkugellagers
2
(Maschinenbau)
2
5.2
Performance-Timer
2
Arbeit mit Dateien
4
5.3
Hex/Dez-Binär-Umrechner
2
mathematisch;
4
5.4
Bildverwaltung
2
Arbeit mit Dateien
5
5.5
Arbeitstage bis zur Rente
2
Aufwändig ! ; Datenformate
6
5.6
Schräger Wurf
2
Physik
7
5.7
Umwandlung Kart.-/Zylinderkoordinaten
2
mathematisch;
8
5.8
Vier gewinnt!
2
Spiel / Oberflächenproblem
8
5.9
Käsekästchen
2
Spiel / Oberflächenproblem
8
5.10
Axiales Flächenmoment 2. Ordnung
2
(Maschinenbau)
9
5.11
Blindleistungsberechnung
2
(Maschinenbau)
10
5.12
Zellulärer Automat (Konsole)
2
lustiges Algorithmus-Problem
10
5.13
Sortieralgorithmus
2
Algorithmus-Problem
11
5.14
Zellulärer Automat (GUI)
3
schwer; mit GTK Bibliothek
12
5.15
Würmer (GUI)
3
schwer; mit GTK Bibliothek
12
5.16
Travelling-Salesman-Problem
2
Graphen:theoretische Informatik
13
5.17
Internet-Spider
2
Netzwerkaufgabe
14
5.18
Tag-Editor
2
Arbeit mit Dateien
15
5.19
IP-Adress-Prüfung
2
Netzwerkaufgabe
16
5.20
Kaffeeautomat in der Mensa
3
nur für Quereinsteiger!
17
5.21
Reverse
2
Spiel
18
5.22
Passfederberechnung
2
(Maschinenbau)
19
5.23
Wärmeverlustberechnung
2
(Maschinenbau)
20
5.24
Seilreibung
2
(Maschinenbau)
21
5.25
Zweidimensionale lineare Approximation
2
mathematisch;
22
5.26
Extraktion von Daten aus Binärdateien
2
Arbeit mit Dateien
23
5.27
Rohrreibung
2
(Maschinenbau)
24
5.28
Fibonacci-Algorithmus
2
Algorithmus-Problem
25
5.29
Visualisierung einer Ampelschaltung
2
(MB) / Oberflächenproblem
25
5.30
Simulation einer Nutzungshäufigkeit
2
mathematisch
26
Informatik Praktikum
Gruppenaufgaben
2/26
Aufgabe 5.1 Lebensdauer eines Rillenkugellagers
Schreiben Sie ein Programm DynRKL.exe, mit dem die Dimensionierung eines Rillenkugellagers
bei dynamischer Belastung automatisiert wird. Grundlage soll die Berechnung der modifizierten
nominellen Lebensdauer nach DIN ISO 281 sein.
Die erforderliche Größe eines Wälzlagers hängt ab von den Anforderungen an seine Tragfähigkeit
und Belastbarkeit, an die Lebensdauer und an die Betriebssicherheit. Das Maß für die Tragfähigkeit
sind die statischen und dynamischen Tragzahlen. Die dynamischen Tragzahlen basieren auf DIN
ISO 281, die statischen Tragzahlen auf DIN ISO 76. Für umlaufende Wälzlager gilt die dynamische
Tragzahl C. Sie ist bei Radiallagern eine konstante Radiallast und bei Axiallagern eine zentrisch
wirkende, konstante Axiallast. Die dynamische Tragzahl C ist die Belastung unveränderlicher
Größe und Richtung, bei der eine genügend große Menge gleicher Lager eine nominelle
Lebensdauer von einer Million Umdrehungen erreicht. Verfahren zur Berechnung der Lebensdauer
sind die nominelle Lebensdauer nach DIN ISO 281, die modifizierte nominelle Lebensdauer nach
DIN ISO 281 u. a.
Nominelle Lebensdauer:
Dabei gilt:
• L [106 Umdr.]
nominelle Lebensdauer in Millionen Umdrehungen, die von 90 %
einer genügend großen Menge gleicher Lager erreicht oder überschritten wird, bevor die
ersten Anzeichen einer Werkstoffermüdung auftreten
• Lh [h] nominelle Lebensdauer in Betriebsstunden entsprechend der Definition für L
• C [N]
dynamische Tragzahl
• P [N] äquivalente Lagerbelastung für Radial- bzw. Axiallager (siehe Äquivalente
Lagerbeanspruchung)
• p
Lebensdauerexponent; für Nadel- und Zylinderrollenlager: p = 10/3für Kugellager: p
=3
• n [min-1]
Betriebsdrehzahl (siehe Äquivalente Lagerbeanspruchung)
Die modifizierte nominelle Lebensdauer kann berechnet werden, wenn neben Belastung und
Drehzahl weitere Einflüsse bekannt sind wie:
* besondere Werkstoffeigenschaften
* die Schmierung
oder
* wenn eine von 90 % abweichende Erlebenswahrscheinlichkeit gefordert wird.
Modifizierte nominelle Lebensdauer:
Dabei gilt:
• Lna [106 Umdr.]
modifizierte nominelle Lebensdauer für besondere
Werkstoffeigenschaften und Betriebsbedingungen bei einer Erlebenswahrscheinlichkeit von
(100 – n) %
• L [106 Umdr.]
nominelle Lebensdauer
• a1
Lebensdauerbeiwert für eine Erlebenswahrscheinlichkeit, die von 90 % abweicht
• a2
Lebensdauerbeiwert für besondere Werkstoffeigenschaften für Standard-Wälzlagerstähle: a2 = 1
• a3
Lebensdauerbeiwert für besondere Betriebsbedingungen - insbesondere für den
Schmierungszustand.
• Қ
Viskositätsverhältnis κ = ν/ν1
Informatik Praktikum
Gruppenaufgaben
3/26
Dauerfestigkeit
Viskositätenverhältnis:
1) gute Sauberkeit und geeignete Additive
2) Höchste Sauberkeit und geringe
Belastung
3) Verunreinigungen im Schmierstoff
Ungünstige Betriebsbedingungen
Der Lebensdauerbeiwert a3 hängt ab vom
Viskositätsverhältnis κ = ν/ν1. ν ist die
kinematische Viskosität des Schmierstoffes bei Betriebs-Temperatur und ν1 ist die Bezugsviskosität
des Schmierstoffes bei Betriebstemperatur. Bei dieser Viskosität bildet sich ein ausreichender
Schmierfilm in der Kontaktzone. Bei Fettschmierung gilt die Viskosität des Grundöls.
Geben Sie Lh und Lhna aus. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut
sein. Programmieren Sie die Berechnung so, dass bei jeder Abfrage eines Wertes ein Standardwert
vorgeschlagen wird, der nur bestätigt werden muss. Gehen Sie dabei von folgenden Standardwerten
aus:
• Drehzahl 1500/min (konstant)
• Tragzahl C = 6950 N (vgl. FAG-Lager 16004 bei http://medias.ina.de/medias/de!hp/ )
• Erlebenswahrscheinlichkeit 95%
• Bezugsviskosität 21 mm2/s
• Schmierstoff Aral Eural Gear68 mit 68 mm2/s (Viskosität bei 40°C)
• Leichte Verunreinigungen im Schmierstoff
Fangen Sie alle möglichen Fehlerquellen ab!
Informatik Praktikum
Gruppenaufgaben
4/26
Aufgabe 5.2 Performance-Timer
Schreiben Sie ein Programm PerfTime.exe, das als Stoppuhr für externe Prozesse dient. PerfTime
soll bis zu 10 beliebige Programme starten können und die Zeit messen, die diese Programme
brauchen bis sie beendet werden. Die zu vermessenden Programme sollen als Kommandozeilenparameter eingelesen werden. Benutzen Sie zum Aufrufen des externen Prozesses die CFunktion spawnl() und geben Sie sinnvolle Meldungen im Fehlerfall aus.
Nach Beendigung der Messung sollen folgende Informationen dargestellt werden:





Programmname des gemessenen Prozesses mit lfd. Nummer
Startzeit
Stoppzeit
Laufzeit (=Differenz der ersten beiden) in Millisekunden
ID des gemessenen Prozesses
Zusätzlich soll die Möglichkeit bestehen, die ermittelten Daten an ein Messprotokoll anzuhängen.
Dazu ist der Name der Protokolldatei abzufragen und das Datum der Messung mit in der Datei
abzulegen. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie
alle möglichen Fehlerquellen ab!
Aufgabe 5.3 Hex/Dez-Binär-Umrechner
Schreiben Sie ein Konsolenprogramm BinCalc.exe, das dezimale und hexadezimale Zahlen im
Bereich von unsigned long int (32 Bit) im Binärformat ausgibt. Überlegen Sie sich dazu einen
allgemeingültigen mathematischen Algorithmus.
Die Eingabe der umzurechnenden Zahl erfolgt als Kommandozeilenparameter. Dabei gelten
folgende Regeln: Zahl mit 0x am Anfang wird als hexadezimale Zahl interpretiert, Zahl ohne 0x am
Anfang wird als dezimale Zahl interpretiert und Buchstaben werden als Pfad auf eine Datei
gewertet, in der die Zahl steht.
Die Ausgabe erfolgt bei Eingabe von Zahlen mit printf (auf der Kommandozeile) und bei einer
Eingabe durch eine Datei mit einer Ausgabedatei, die denselben Namen hat wie die Eingabedatei,
aber die Endung .bin trägt. Die Ausgabe soll aus Lesbarkeitsgründen in 8-Bit-Blöcke mit
Leerzeichen unterteilt werden und mehrfarbig sein. Der Quelltext soll aus mehreren Modulen und
Funktionen aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab und prüfen Sie Ihre
Ergebnisse z.B. mit http://trinler.de/de/service/technik/basis.html !
Informatik Praktikum
Gruppenaufgaben
5/26
Aufgabe 5.4 Bildverwaltung
Schreiben Sie ein Programm ImgInfo.exe, das in dem Verzeichnis, in dem es sich befindet, nach
Bitmaps (Bilddateien) sucht und eine Liste mit folgenden Informationen anzeigt:




Name der Bilddatei
Dateigröße
Breite und Höhe des Bildes in Pixel
Farbtiefe (Bits pro Pixel) des Bildes
Das Suchen nach Dateien in einem Verzeichnis erfolgt mit findfirst() und findnext().
Zusätzlich soll angezeigt werden, wie groß der verbrauchte Speicherplatz aller in diesem
Verzeichnis liegender Bilddateien (Bitmaps) ist. Die benötigten Informationen liegen an bestimmten
Offsets (Abstand vom Anfang der Datei in Bytes) in den Bilddateien selbst und können dort mit
fread() ausgelesen werden:
Offset
00h
02h
0ah
0eh
12h
16h
1ch
1eh
2eh
…
Bytes
2
4
4
4
4
4
2
4
4
Name
bfType
bfSize
bfOffs
biSize
biWidth
biHeight
biBitCnt
biCompr
biClrUsed
Bedeutung
File ID
Dateigröße in Bytes
Offset in den Datenbereich
Größe der Bitmap-Info-Headers
Breite der Bitmap in Pixel
Höhe der Bitmap in Pixel
Zahl der Bits pro Pixel (Farbtiefe)
Komprimierungstyp
Zahl der benutzten Farben
Erzeugen Sie sich zum Testen 8 Bitmaps (Endung: .bmp) mit MSPaint oder suchen Sie passende
Bitmaps im Internet. Integrieren Sie einen optionalen Dialog, der das Verzeichnis abfragt, das
durchsucht und angezeigt werden soll. Der Quelltext soll aus mehreren Modulen und Funktionen
aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab!
Informatik Praktikum
Aufgabe 5.5
Gruppenaufgaben
6/26
Arbeitstage bis zur Rente
Schreiben Sie das Programm Rente.exe, das die verbleibenden Arbeitstage bis zur Rente berechnet.
Beachtet (Achtung Schwierigkeit: Struktur time_t (32 bit) läuft 2038 über!) werden sollen dabei
•
•
•
•
Wochenenden,
Schaltjahre,
Feiertage (Achtung: Abgleich mit Wochenenden!) und
Urlaubstage (Vereinfachung: keine Feiertage in Urlaubszeiten)
Das Programm soll dazu das Geburtsdatum des Benutzers und seine Urlaubstage (default: 30)
einlesen und mit dem Systemdatum die
// Hauptzählschleife fuer volle Jahre
notwendigen Berechnungen durchführen.
Die Hauptzählschleife könnte etwa so
for(iMonat=1; iMonat<13; iMonat++)
{
aussehen, wie im Kasten rechts. Das Startfor(iTag=1; iTag<32; iTag++)
und Endjahr müsste ggf. besonders
{
behandelt werden.
if( gibtsnich(iTag,iMonat,iJahr)
continue;
Achtung: dieses Programm ist
if( isFeiertag(iTag,iMonat,iJahr)
continue;
umfangreicher, als es zunächst den
if(
isWochenende(iTag,iMonat,iJahr)
Anschein hat. Beginnen Sie mit der Suche
continue;
nach geeigneten Datentypen für die
RTage++;
Datumsangaben und die Differenzbildung.
}
Erstellen Sie zunächst Funktionen für
}
bestimmte Teilaufgaben (z.B.
gibtsnich() ). Arbeiten Sie dabei möglichst effektiv, d.h. einigen Sie sich über die Signaturen der
Funktionen und progarmmieren Sie dann gleichzeitig an verschiedenen Teilen des Programms! Der
Quelltext soll aus mehreren Funktionen aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab!
Informatik Praktikum
Aufgabe 5.6
Gruppenaufgaben
7/26
Berechnung eines schrägen Wurfs
Schreiben Sie das Programm Wurf.exe, das den Zielpunkt eines dreidimensionalen schrägen Wurfs
von einem Turm in Abhängigkeit von der Wurfenergie, den Abwurfwinkeln und der
Beschleunigung durch den Seitenwind berechnet. Dabei ist von folgenden Annahmen auszugehen:
V1 ist die aus der
Wurfenergie
resultierende
Geschwindigkeit,
α ist der Abwurfwinkel
gegenüber der
Horizontalen und
H ist die Höhe der
Abwurfstelle gegenüber
der Umgebung.
Von oben betrachtet (in der Draufsicht) erkennt man die Abwurfrichtung γ in der X-Y-Ebene und
den Einfluss des Seitenwindes, der in Y-Richtung weht und die konstante Beschleunigung ay auf
den Flugkörper ausübt.
Wurf.exe soll die Parameter
Wurfenergie E1 (100 Nm),
Masse m (2 kg),
Höhe H (20 m),
Winkel α (30°),
Winkel γ (0°)
und die konstante Beschleunigung ay (2
m/s²) einlesen und dabei die in Klammern
gesetzten Zahlenwerte als Standardwert
anbieten, der jeweils nur bestätigt zu werden braucht. Danach soll der Punkt berechnet werden, in
dem der Wurf niedergeht. Zusätzlich soll die Position grob grafisch dargestellt werden (nur erster
Quadrant in der X-Y-Ebene; Funktion gotoxy() ). Der Quelltext soll aus mehreren Modulen und
Funktionen aufgebaut sein. Fangen Sie alle möglichen Fehlerquellen ab!
Informatik Praktikum
Aufgabe 5.7
Gruppenaufgaben
8/26
Umrechnung kartesiche- in Zylinderkoordinaten
Schreiben Sie ein Programm KoKonv.exe, das 3-dimensionale kartesische Koordinaten wahlweise in
Zylinder- oder Kugelkoordinaten umrechnet und
umgekehrt. Die Eingangskoordinaten sollen in Form
einer Nx3-Matrix in einer Textdatei hinterlegt sein, deren
Name KoKonv.exe als Kommandozeilenparameter
übergeben wird. Zusätzlich sollen ein Kommandozeilenparameter das Ziel-KO-System identifizieren. Die
Ausgangsdaten sollen optional in eine Datei geschrieben
werden, die denselben Namen hat wie die Datei mit den
Eingangsdaten, aber eine andere Dateinamenerweiterung
(z.B. Daten.xyz -> Daten.zyl). Diese Option wird durch
einen dritten Parameter eingeschaltet.
Beispiel-Aufruf: > KoKonv Daten.xyz -ZYL -f
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab!
Aufgabe 5.8 Vier gewinnt!
Implementieren Sie das bekannte 2-D-Spiel Vier gewinnt! für zwei Spieler am Bildschirm. Eine
Online-Implementation mit Computergegner können Sie beispielsweise unter http://www.doktornoll.de/spiele/vier-gewinnt.htm probespielen.
In Ihrer Version geben die beiden Spieler dabei abwechselnd eine Spalte an
(Tastatur), in der sie ihren Chip einwerfen und der Rechner zeichnet den
aktuellen Spielstand mit ASCII-Zeichen (z.B. mit O und X und geeigneten
Strichen für den Rahmen; Funktion gotoxy() ) und prüft, ob bereits eine
waagerechte, senkrechte oder quer verlaufende Reihe von 4 Chips eines Spielers vorliegt. Das
Spielfeld soll 7 x 6 Felder haben.
Programmieren Sie so, dass während des Spiels nicht die ENTER-Taste gedrückt werden muss.
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab!
Aufgabe 5.9 Käsekästchen
Implementieren Sie das bekannte 2-D-Spiel Tic-Tac-Toe für zwei Spieler am Bildschirm. Eine
Online-Implementation mit Computergegner können Sie beispielsweise unter
http://tictactoe.slapped.de/ probespielen.
In Ihrer Version geben die beiden Spieler dabei abwechselnd eine Spalte und
Zeile an (Tastatur), in der sie ihr Zeichen machen und der Rechner zeichnet den
aktuellen Spielstand mit ASCII-Zeichen (z.B. mit O und X und geeigneten
Strichen für den Rahmen; Funktion gotoxy() ) und prüft, ob bereits eine
Informatik Praktikum
Gruppenaufgaben
9/26
waagerechte, senkrechte oder quer verlaufende Reihe von 3 Zeichen eines Spielers vorliegt oder das
Spiel zu Ende ist.
Das Programm soll über mehrere Spiele laufen und den Spielstand sowie die Spielernamen
anzeigen. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab!
Aufgabe 5.10
Axiales Flächenmoment 2. Grades stabförmiger Bauteile
Schreiben Sie ein Programm IyCalc.exe, das die Flächenträgheitsmomente 2. Grades der
Balkenprofile Kasten, Vollkreis, dünnwandiges Rohr, dickwandiges Rohr und Doppel-T
berechnet.
Dabei ist der Benutzerdialog so zu gestalten, dass die geforderte Eingabe immer eindeutig ist. Die
einzelnen Werte sollen so zwischengespeichert werden, dass die Eingabe beim jeweils vorherigen
Aufruf immer als Standardwert vorgeschlagen wird, der dann nur bestätigt zu werden braucht, wenn
er sich nicht ändert.
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab und prüfen sie die Konsistenz der Angaben (passen die Dimensionen
zusammen?)!
Informatik Praktikum
Gruppenaufgaben
10/26
Aufgabe 5.11 Blindleistungsberechnung
Schreiben Sie ein Programm Pblind.exe, das
•
•
•
•
•
Scheinleistung S = P 2 + Q 2 ,
Scheinwiderstand Z = U/I,
Leistungsfaktor λ = cos ϕ = P / S ,
Blindfaktor β = sin ϕ = Q / S und
Blindleistung Q = U I sinϕ
eines ohmsch-induktiven Verbrauchers berechnet.
Das Programm soll zunächst die Klemmenspannung U, den Strom I und die Wirkleistung P einlesen
und dabei die jeweils beim letzten Programmaufruf eingegebenen Werte als Standardwert vorgeben,
der nur bestätigt zu werden braucht, wenn er sich nicht ändert ( Anfangswerte:
U = 220 V, I = 10 A, P = 1500 W).
Nach der Berechnung und der Anzeige der o.g. Ergebnisse soll das Zeigerdiagramm für Strom und
Spannung auf den Bildschirm gezeichnet werden (Funktion gotoxy() ).
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab.
Aufgabe 5.12 Zellulärer Automat 1 (Konsole)
Schreiben Sie ein Programm Life8.exe, das Elemente in einem Feld von 60 x 20 Zeichen
entsprechend Ihres Zustands ändert. Es gibt dabei die 2 Zustände tot (ASCII-Zeichen „X“) und
lebendig (ASCII-Zeichen „O“), für die folgende Regeln gelten:
 Jede Zelle hat 8 Nachbarn (außer Rand), die jeweils einen von 2 Zuständen (Farben) haben
 Eine Zelle bleibt am Leben, wenn in ihrer Nachbarschaft genau 2 oder 3 lebendige Zellen
gezählt werden
 Eine tote Zelle erwacht zum Leben, wenn genau 3 ihrer Nachbarn leben
 In allen anderen Fällen stirbt die Zelle oder erwacht gar nicht erst zum Leben
Zeichnen Sie
einen Rahmen auf den
Bildschirm
(Funktion gotoxy() )
und implementieren Sie die Regeln zum Besetzen der einzelnen Felder mit den Zeichen „X“ und
„O“. Probieren Sie dabei verschiedene Anfangszustände aus! Am Ende soll der Anfangszustand per
Zufallsgenerator berechnet werden.
Informatik Praktikum
Gruppenaufgaben
11/26
Aufgabe 5.13 Sortier-Algorithmus
Implementieren Sie den Sortier-Algorithmus Bubblesort (http://de.wikipedia.org/wiki/Bubblesort)
in einem C-Programm MySort.exe mit mehreren Modulen und Funktionen. Ihr Programm soll die zu
sortierenden Daten per Zufallsgenerator erheben und die Menge der zu sortierenden Daten dabei als
Kommandozeilenparameter einlesen. Ein zweiter Kommandozeilenparameter soll optional den
Namen einer Datei enthalten, in der das Ergebnis zusätzlich zur Ausgabe auf dem Bildschirm
gespeichert wird. Der Aufruf könnte so aussehen:
> MySort 25 erg.txt
Beim BubbleSort-Algorithmus werden immer zwei benachbarte Elemente miteinander verglichen. Ist
das eine größer als das andere, werden die beiden Werte vertauscht. Ein kleines Beispiel dazu:
Ausgangslage:
19
5
32
8
Erster Durchlauf
19
5
5
19
5
19
32
32
32
Zweiter Durchlauf
5
19
8
5
19
8
5
8
19
8
8
8
>>
>>
>>
5
5
5
19
19
19
32
32
8
8
8
32
32
32
32
>>
>>
>>
5
5
5
19
8
8
8
19
19
32
32
32
Bei jedem Durchlauf wird auch jedes einzelne Arrayelement mit dem nächsten verglichen. Pro
Arrayelement läuft eine äußere und einer innere Schleife durch. In diesem Fall gäbe es hier vier
äußere Schleifendurchläufe - in diesem Beispiel ist das Array nach zwei Durchläufen allerdings
bereits korrekt sortiert. Man könnte mit entsprechenden Prüfungen nun das Sortieren abbrechen, für
die "Grundversion" ist das aber erstmals unnötig.
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab.
Zusatzaufgabe: Optimieren Sie die Laufzeit!
Für Leute mit Programmiererfahrung!
Informatik Praktikum
Gruppenaufgaben
Aufgabe 5.14 Zellulärer Automat 2 (GUI)
12/26
Für leidenschaftliche Programmierer!
Schreiben Sie ein GUI-Programm Life8.exe mit GTK+ (in C) oder ggf. auch als GUI-Programm mit
dem in das Visual Studio integrierten Fenster-Designer (in C++). Life8.exe soll Bildpixel in einem
Feld von 200 x 200 entsprechend Ihrem Zustand färben. Es gibt dabei die 2 Zustände tot und
lebendig, für die folgende Regeln gelten:
 Jede Zelle hat 8 Nachbarn, die jeweils einen von 2 Zuständen (Farben) haben
 Eine Zelle bleibt am Leben, wenn in ihrer Nachbarschaft genau 2 oder 3 lebendige Zellen
gezählt werden
 Eine tote Zelle erwacht zum Leben, wenn genau 3 ihrer Nachbarn leben
 In allen anderen Fällen stirbt die Zelle oder erwacht gar nicht erst zum Leben
Denken Sie sich zwei Farben für die beiden Zustände aus, implementieren Sie die Regeln und
färben Sie die Bildpunkte entsprechend der Anwendung der Regeln auf diese Bildpunkte. Probieren
Sie dabei verschiedene Anfangszustände aus und fangen Sie alle möglichen Fehlerquellen ab!
Hinweis: Zum Programmieren von Windows-Anwendungen mit C kann die Funktionsbibliothek
GTK+ verwendet werden. GTK+ ist nicht objektorientiert. Etwas Erfahrung mit der Verwendung
von Funktionen sollte allerdings bereits vorhanden sein. Näheres bitte besprechen!
Aufgabe 5.15 Würmer (GUI)
Für leidenschaftliche Programmierer!
Schreiben Sie das GUI-Programm Worms.exe mit GTK+ (in C) oder ggf. auch als GUI-Programm
mit dem in das Visual Studio integrierten Fenster-Designer (in C++). Das Programm soll Bildpixel
in einem Feld von 200 x 200 Punkten vorübergehend so einfärben, dass der Eindruck eines sich
fortbewegenden (bunten) Wurmes eintritt. Die Bewegungsrichtung des Wurms soll zufällig sein,
aber nie den Rand des Feldes überschreiten. Probieren Sie verschiedene Längen und
Anfangszustände. Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein.
Zusatzaufgabe: Ändern Sie das Programm so, dass mehrere Würmer gleichzeitig durch das Feld
kriechen. Dabei soll die Farbe an jeder Stelle innerhalb der Würmer gleich bleiben (z.B. vorne
immer gelb, hinten immer blau, Mitte immer rot, usw.).
Hinweis: Zum Programmieren von Windows-Anwendungen mit C kann die Funktionsbibliothek
GTK+ verwendet werden. GTK+ ist nicht objektorientiert. Etwas Erfahrung mit der Verwendung
von Funktionen sollte bereits vorhanden sein. Näheres bitte besprechen!
Informatik Praktikum
Gruppenaufgaben
13/26
Aufgabe 5.16 Travelling-Salesman-Problem
Das Problem des Handlungsreisenden (Traveling Salesman Problem, kurz TSP) ist ein
kombinatorisches Problem der Mathematik und der
theoretischen Informatik. Es behandelt die Aufgabe eines
Handlungsreisenden, eine Reihenfolge für den Besuch
mehrerer Orte so zu wählen, dass nach der Rückkehr zum
Ausgangsort die gesamte Reisestrecke möglichst kurz ist.
Bei n Städten gibt es k = (n-1)!/2 Möglichkeiten zu fahren!
Schreiben Sie ein Programm, dass die Abstände der (bis zu
7) Städte und deren Namen aus einer Textdatei einliest und
die kürzeste Strecke ermittelt.
Das Verfahren zur Ermittlung kann zunächst das Ausprobieren aller Möglichkeiten und deren
anschließender Vergleich sein. Versuchen Sie dann, die Performance des Programms zu verbessern.
Der Quelltext soll aus mehreren Funktionen aufgebaut sein. Fangen Sie alle möglichen
Fehlerquellen ab.
Informatik Praktikum
Gruppenaufgaben
14/26
Aufgabe 5.17 Internet - Spider
Schreiben Sie ein Programm Spider.exe, das - ausgehend von einer einzugebenden Startseite –
Internetseiten einliest und nach eMail-Adressen und verlinkten Seiten durchsucht. Die gefundenen
eMail-Adressen sollen dann in einer lokalen Liste in der Datei MailAd.txt gespeichert werden,
während der Spider mit den verlinkten Seiten fortfährt und alle weiteren Links in einer URL-Liste
im Arbeitsspeicher (Array mit Strings) behält.
Das Herunterladen der Seiten soll mit dem (ftp://ftp.newcastle.edu.au/pub/nt/gnu/wget.zip )
externen Programm wget.exe gemacht werden, das von Spider.exe aufgerufen wird. Es legt die
gewünschte Seite ( Aufruf: wget http://USERNAME:PASSWORD@URL:PORT/path/to/file.html )
auf der Festplatte ab, wo Spider.exe sie dann weiterverarbeiten und schließlich löschen kann. Beim
Durchsuchen der
runtergeladenen Seiten
nach Adress-Tags kann
(optional) mit
Funktionen aus der
vorangegengenen
Aufgabe 3 oder
externen Bibliotheken
gearbeitet werden.
Schaffen Sie sich zwei
Arrays für die zu
bearbeitenden Links
und die bereits abgearbeiteten Links. Beide Arrays sollten durchrotieren, wenn sie voll sind (first in
- first out).
Spider.exe soll nicht interaktiv arbeiten, damit es in Batchdateien mit mehreren Aufträgen benutzt
werden kann und es dann im Hintergrund arbeitet. Dazu ist es notwendig, dass die Startseite als
Kommandozeilenparameter übergeben wird und die Ergebnidsdatei MailAd.txt nicht überschrieben,
sondern mit jedem Aufruf erweitert wird. Schreiben Sie das Programm so, dass man es mit der
ESC-Taste abbrechen kann.
Spider.bat (Beispiel):
Spider.exe http://www.lisdorf.de/emailverz.html
Spider.exe http://www.pmf.fh-goettingen.de
Spider.exe http://www.meine-domain.de
Spider.exe http://www.irgendwo.net
…
Der Quelltext
soll aus
mehreren
Funktionen
aufgebaut sein.
Fangen Sie
möglichst viele
Fehlerquellen
ab.
Informatik Praktikum
Gruppenaufgaben
15/26
Aufgabe 5.18 Tag - Editor
Schreiben Sie ein Programm TagEd.exe, mit dem man die so genannten Tags von Musikdateien im
MP3-Format verändern kann. In diesen Tags stehen Klartextinformationen über Titel, Interpret,
usw. des Musikstücks. Die Tags (Version 1) befinden sich in den letzten 128 Bytes einer mp3-Datei.
Dabei wird folgendes Format eingehalten:
Sign
AAABBBBBBBBBBBBB
BBBBBBBBBBBBBBBB
BCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCD
DDDDDDDDDDDDDDDD
DDDDDDDDDDDDDEEE
EFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFG
A
Length
(bytes)
3
Position
(bytes)
(0-2)
B
C
D
E
F
G
30
30
30
4
30
1
(3-32)
(33-62)
(63-92)
(93-96)
(97-126)
(127)
Description
Tag identification. Must contain
'TAG' if tag exists and is correct.
Title
Artist
Album
Year
Comment
Genre
In einem Hexeditor sieht das Dateiende einer mp3-Datei also z.B. so aus:
In diesem Fall wäre der Titel „Out of Asia“. Nähere Informationen zum Format dieser Dateien
finden u.a. auf http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm .
TagEd.exe soll den Namen der zu bearbeitenden MP3-Datei als Kommandozeilenparameter
übernehmen und dann alle V1-Tags der Datei abfragen. Zusätzlich soll die Möglichkeit bestehen,
alle MP3-Dateien des aktuellen Verzeichnisses (Kommandozeilenparameter /a) mit den
abzufragenden Informationen zu beschreiben.
Der Quelltext soll aus mehreren Funktionen aufgebaut sein. Fangen Sie möglichst viele
Fehlerquellen ab. Testen können Sie z.B. mit WinAmp.
Informatik Praktikum
Gruppenaufgaben
16/26
Aufgabe 5.19 IP-Adress-Prüfung
IP-Adressen identifizieren Rechner im TCP/IP-Netzwerk. Die Rechner sind dabei zu Gruppen
zusammengefasst, die man Subnet nennt. Ob eine IP zu einem gegebenen Subnet gehört, entscheidet
die sog. Subnetmask. Mit dieser Maske wird die IP-Adresse Byte für Byte bitweise maskiert. Was
dann übrig bleibt ist der Teil der IP-Adresse, der das Netzwerk (Subnet) angibt. Die erste Adresse in
einem Subnet ist die Netzwerkadresse, die letzte Adresse ist die so genannte Broadcast-Adresse, an
die Telegramme verschickt werden, die alle Rechner im Subnet erreichen sollen.
Zur Überprüfung, ob ein Rechner direkt erreichbar ist (d.h. im gleichen Subnet liegt), oder über
einen Router angesprochen werden muss, kann die maskierte IP verglichen werden. Im ersten Fall
muss sie in beiden Fällen (Ziel und Quelle) gleich sein! Hier ist es z.B. so:
Schreiben Sie ein Programm aus mehreren Funktionen, dass IP-Adressen und Subnetnmasken in
Dezimalnotation (nnn.nnn.nnn.nnn) einlesen und auf Zugehörigkeit zu gegebenem Subnetz prüfen
kann. Es sollen dazu die Ein-/Ausgabefunktionen get_ipaddr(), check_ipaddr() in einem separaten
Modul (.c-Datei) implementiert werden und es soll
• die Anzahl der Subnetzbits,
• die Broadcastadresse,
• die Netzadresse und
• die Zugehörigkeit zum Subnetz
ausgegeben werden. Fangen Sie möglichst viele Fehlerquellen ab und überprüfen Sie Ihre
Ergebnisse mit einem online-Kalkulator (z.B. http://trinler.de/de/service/technik/ipcalc.html ).
Informatik Praktikum
Gruppenaufgaben
17/26
Aufgabe 5.20 Kaffee-Automat
Achtung: Diese Aufgabe ist nur für Quereinsteiger geeignet, die nicht an der LV Informatik I
an der HAWK teilnehmen!
Sicherlich haben Sie schon den eleganten Kaffeeautomaten in der Mensa bemerkt. Hinter dem
perfekt verarbeiteten Edelstahlgehäuse und den Bedienelementen, die ein wenig an Produkte
eines großen amerikanischen Computerherstellers erinnern, steckt eine Menge Technik (und
natürlich auch Software) um dem Benutzer einen vorzüglichen Kaffee- oder Cappuccinogenuss zu
bereiten.
Diese Software gilt es nun (ansatzweise) in der Programmiersprache C abzubilden:
Erstellen Sie eine einfache Kaffeeautomatensteuerung in ANSI-C mit dem Name KAutoFee.exe
nach folgenden Vorgaben:
1. Der Benutzer wird freundlich begrüßt und die Getränkeliste wird präsentiert.
2. Die Getränkeliste besteht zunächst nur aus: Kaffee
3. Kaffee besteht aus Wasser, Kaffeebohnen, und nach Wunsch des Benutzers
Milch und Zucker.
4. Diese Zutaten sollen Datentechnisch als Struktur behandelt werden.
5. Der Kaffeeautomat hat nur eine begrenzte Menge der oben genannten Zutaten. Bei jedem
entnommenen Getränk wird die entsprechende Zutat dieser Menge dezimiert.
6. Die Mengen der Zutaten sollen beim Start des Programms mit Werten initialisiert werden.
7. Die Auswahl der Getränke erfolgt durch Tastatureingabe: k=Kaffee
8. Nach Auswahl des Getränkes soll der Benutzerwunsch nach Zucker und Milch abgefragt
werden.
9. Der Benutzer bekommt sein Getränk – es kann eine neue Auswahl erfolgen.
Die Kaffeeautomat - Steuerung soll dann erweitert und
modifiziert werden:
1. Zusätzlich zu Kaffee soll der Benutzer auch Cappuccino
auswählen können. Cappuccino besteht aus Wasser,
Espressobohnen, Milch(schaum) und nach Wunsch des
Benutzers Zucker.
2. Das Programm soll "korrekt" durch die Auswahltaste ’b’
beendet werden können.
3. Das ’b’ soll auch im Auswahlmenü mit angezeigt werden.
4. Die Mengen der Zutaten sollen nun nicht mehr statisch im Programm initialisiert werden,
sondern bei Programmstart aus einer Text-Datei gelesen werden. Bei Programmende soll die
aktuelle Zutatenmenge in dieselbe Datei zurückgeschrieben werden. Erweitern Sie dazu Ihr
Programm um die beiden Funktionen get_data() zum Lesen der aktuell vorhandenen
Zutaten aus der Datei und set_data() zum Schreiben und fassen Sie die
lesenden/schreibenden Daten in einem Array oder einer Struktur zusammen. Verwenden Sie
hierfür die High-Level-Dateizugriffsfunktionen fopen(), fclose(), fwrite(), fread().
5. Falls Sie es nicht bereits implementiert haben sollten: Erweitern Sie Ihr Programm um die
Funktion check_mengen(). Diese Funktion soll verhindern, dass mehr Kaffee verkauft wird
als materiell vorhanden ist ;-) Sobald eine Zutat alle ist, bzw. sie nicht mehr für einen
kompletten Kaffee reicht, soll sich das Programm mit einem Hinweis auf die fehlende Zutat
beenden.
Informatik Praktikum
Gruppenaufgaben
18/26
6. Ausserdem soll es einen Servicemode geben, d.h. eine Eingabetaste, die nicht im Menü
angezeigt wird, z.B. ’s’. Wenn diese Taste gedrückt wird, dann wird die Funktion
display_zutaten(…) aufgerufen, die die aktuell vorhandene Menge an Zutaten anzeigt.
Aufgabe 5.21 Reverse!
Implementieren Sie das Zahlen-Spiel Reverse für einen Spieler am Bildschirm. Reverse.exe gibt
eine Zahlenfolge der Ziffern 0 bis 9 aus, die der Spieler in möglichst wenigen Schritten zu sortieren
hat. In jeder Runde kann der Spieler auswählen, wie viele Ziffern (von links nach rechts gesehen) in
ihrer Reihenfolge umgedreht werden sollen. Dies führt der Rechner aus. Das Spiel endet mit der
Angabe der Anzahl der gebrauchten Züge, wenn die Reihenfolge stimmt.
In Ihrer Version gibt der Spieler dabei eine Zahl mit der Tastatur an. Die nächste Runde startet ohne
dass die Eingabetaste gedrückt werden muss. Zu Beginn kann der Spieler die Anzahl der zu
sortierenden Ziffern (max 10) angeben. Die Reihenfolge zu Beginn wird per Zufallsgenerator
gewählt (separate Funktion). Der Aktuelle Stand (derzeitige Ziffernfolge, Anfangfolge, Nummer des
aktuellen Zugs) soll stets an gleicher Position des Bildschirms stehen (Funktion gotoxy() ). Das
Programm prüft selbständig, ob das Spiel beendet ist.
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab!
Zusatzaufgabe: Gestalten Sie die Bildschirmausgabe mit großformatiger ASCII-Grafik.
Informatik Praktikum
Gruppenaufgaben
19/26
Aufgabe 5.22 Paßfederberechnung
Passfederverbindungen kommen zur Anwendung, um Riemenscheiben, Zahnräder, Kupplungsnaben
usw. drehfest mit Wellen zu verbinden. Manchmal werden Passfedern zusätzlich verwendet, um
Reibschlußverbindungen zu sichern oder um eine bestimmte Stellung in Umfangs-richtung
gegenüber der Welle festzulegen.
Passfedern werden abgerundet (Form A)
und eckig (Form B) hergestellt. Die
Abmessungen sind in DIN 6885 in
Abhänbigkeit vom Wellendurchmesser
festgelegt.
Erstellen Sie ein Programm PassData.exe,
dass die Länge, Breite und Höhe einer
Passfeder berechnet und aus mehreren
Modulen und Funktionen besteht.
Die Berechnung
der
erforderlichen
Länge erfolgt
vereinfacht mit
pzul = 1,2 Re bzw.
1,2 Rm bzw. 1,2
Rp0,2 :
4 Md
l erf =
b Form  A
d⋅h⋅p zul
l erf =
4 Md
d⋅h⋅p zul
Form  B
Lesen Sie die Tabelle mit den Zahlenwerten aus DIN 6885 aus einer Datei in ein mehrdimensionales
Array ein und fragen Sie den Benutzer nach Drehmoment, Wellendurchmesser und Bauform. Geben
Sie dann die Lösungsmöglichkeiten mit erforderlicher Anzahl und Länge, sowie Breite, Höhe,
Nuttiefe und Sicherheit (l/lerf) aus. Fangen Sie alle möglichen Fehlerquellen ab!
Zusatzaufgabe: Wenn zwei Passfedern verwendet werden, hat jede nur einen Traganteil von 75%
(siehe auch
http://www.eassistant.de/fileadmin/dokumente/eassistant/etc/HTMLHandbuch/eAssistantHandb_HTMLch8.html ).
Informatik Praktikum
Gruppenaufgaben
20/26
Aufgabe 5.23 Wärmeverlustberechnung
Schreiben Sie ein Programm UWert.exe, dass den Heizwärmebedarf eines Gebäudes im Jahr
berechnet. UWert.exe multipliziert dabei die Wärmeleitfähigkeiten λ der einzelnen Baustoffe mit
deren Flächen und teilt sie durch deren Dicke. In der Regel sind dabei mehrere Schichten pro Fläche
zu kalkulieren. Die Wärmeleitung der einzelenen Flächen F [m²] ist dann zu summieren und mit den
Heizgradtagen (HGT15 nach VDI 3807) der jeweiligen Region (Wetter) zu multiplizieren. Die
Berechnungsformeln finden Sie unter http://www.bastelitis.de/bauphysik-warmedammung/ .
Im einzelnen gilt vereinfachend:
1. Der U-Wert einer bestimmten Fläche in [W/K] ergibt sich aus der Wärmeleitung der
einzelnen Schichten:
mit Wärmeleitfähigkeit λ [W/m²K]
N
λ Schicht und Schichtdicke d [m]
U Wand =F Wand⋅ ∑
Schicht=1 d Schicht
2. Der U-Wert eines
bestimmten Gebäudes in [W/K]
ergibt
sich
aus
der
Summe
der
Wände
M
mit
f = 1 für Außenwände
U ges = ∑ f i⋅U i mit
f = 0,8 für Wände zu unbeheizten geschl. Räumen
Wand=1
f = 0,4 für Flächen, die an das Erdreich grenzen
3. Der Heizwärmebedarf im Jahr berechnet sich unter Ausschluß von Brauchwasserwärmebedarf und Lüftungsverlusten etc.
J
s
vereinfachend aus
W a [J ]=U ges [
]⋅HGT 15[ K⋅Tag]⋅86400[
]
s⋅K
Tag
Lesen Sie beim Programmstart eine Auswahl von Wärmeleitwerten λ aus einer Datei in ein Array
ein und fragen Sie den Benutzer nach den Daten N, M, f, F und d. Lesen Sie außerdem eine
Auswahl von Wetterstützpunkten (HGT-Werten) aus einer
Datei ein und bieten Sie die Auswahl an. Berechnen Sie
Baumaterial Wärmeleitfähigkeit
dann den Jahresheizwärmebedarf und geben Sie ihn in kJ
λ in [W/mK]
und in kWh aus.
Beton
2,0
Heizgradtage
Ort
HGT 15/20
Kassel
2432
Fritzlar
2277
Hannover
2331
Berlin
2328
Frankfurt
2152
List/Sylt
2391
Das Programm soll aus mehreren
Modulen und Funktionen aufgebaut
sein. Fangen Sie alle möglichen
Fehlerquellen ab und gestalten Sie
das Benutzerinterface möglichst
komfortabel.
Vollziegel
0,96
Kalksandstein
0,99
Lehm
0,66
Putz
1,0
Mineralwolle
0,04
Styropor
0,04
Zusatzaufgabe:
Erweitern Sie Ihr Programm um die Ausgabe der Heizkosten in Abhängigkeit vom Wärmeträger
(Öl, Gas, Strom, ...) sowie um die Berücksichtigung von Glasflächen.
Informatik Praktikum
Gruppenaufgaben
21/26
Aufgabe 5.24 Seilreibung
Schreiben Sie ein Programm SeilR.exe, das die Seilreibung eines Seils
um einen Poller berechnet. Dabei ist zwischen Haft- und Gleitreibung
folgendermaßen zu unterscheiden:
Haftreibung RH:
F Zug =F Halte⋅e
µ0⋅ɸ
Gleitreibung RG:
µ⋅ɸ
F Zug =F Halte⋅e
Es sind F die Kräfte, ɸ der Umschlingungswinkel, µ0 die Haftreibungskoeffizienten und µ die
Gleitreibungskoeffizienten. SeilR.exe soll die Frage beantworten, wie oft ein Seil um einen Poller
geschlungen werden muss, damit es noch von einer Person gehalten werden kann. Dabei ist von
einer maximalen Haltekraft von 150 N auszugehen. Die zu erwartende Zugkraft soll durch den
Seildurchmesser und das Seilmaterial gegeben sein. Beides ist beim Bemutzer nachzufragen.
Die Reibungskoeffizienten sind aus einer Datei einzulesen und als Paarung im Benutzerdialog
anzubieten.
Seilfestigkeit bei
Durchmesser d [mm]:
1. Stahl: F/N = 700 (d/mm)²
2. Kevlar/Spectra:
ca. 150 N/mm bei 4-8 mm
3. Polyester:
d/mm
F/N
3
131
4
220
5
330
6
460
8
780
10
1230
Polyester - Stahl (trocken)
Polyester - Alu (trocken)
µ = 0,4
µ = 0,6
Das Programm soll aus mehreren Modulen und Funktionen bestehen
und die beim letzten Aufruf eingegeben Werte wieder als
Standardwerte vorschlagen.
Fangen Sie alle möglichen Fehlerquellen ab!
Informatik Praktikum
Gruppenaufgaben
22/26
Aufgabe 5.25 Zweidimensionale lineare Approximation
Schreiben Sie ein Programm linprox.exe, das für gegebene Punkte eine Gerade der Form
Y = Ax + B errechnet, die mit möglichst geringer Abweichung durch (alle) Punkte geht. Die Punkte
sind in einer Text- oder Binärdatei gegeben und von dort einzulesen. Linprox.exe soll dann iterativ
die beste Kombination von A und B bestimmen.
Datei: ideal.txt
A
4
0.00 3.00
2.00 4.42
2.70 5.00
7.00 8.00
Datei: real.txt
5
0.53 2.11
1.12 3.48
1.96 4.55
2.30 5.69
4.00 5.71
Dazu sollen die quadratischen Abweichungen ei an den einzelnen Punkten Pi mit
ei = ( Pyi – Y(Pxi) )² berechnet und zur Gesamtabweichung E = e1+e2+e3+...en addiert werden.
Dann sollen A und B geändert und die Abweichungen neu berechnet werden. Dieser Vorgang wird
oft wiederholt und die beste Gerade (mit dem geringsten Fehler E) ausgegeben (Iteration).
Überlegen Sie sich einen Algorithmus zum Auffinden der Startwerte für A und B sowie eine
geeignete Abbruchbedingung für die Iteration. Es sollen bis zu 100 Punkte verarbeitet werden
können. Das Programm soll aus mehreren Funktionen aufgebaut sein und Verbesserungen für die
Ausführungszeit enthalten. Fangen Sie alle denkbaren Fehlerquellen ab!
Zusatzaufgabe: Implementieren Sie einen Filter für Ausreißer, der Punkte aus der Berechnung
ausschließt, wenn ihr Fehler größer ist, als die dreifache Standardabweichung (Schätzwert).
Informatik Praktikum
Gruppenaufgaben
23/26
Aufgabe 5.26 Extraktion und Verarbeitung von Daten aus Binärdateien
Schreiben Sie ein Programm extdat,.exe, das Zahlen aus Binärdateien ausliest und diese in eine mit
einem Tabellenkalkulationsprogrammen importierbare Form (csv Text-Datei) ausgibt. Der Offset
(Startadresse in der Eingangsdatei) soll per Kommandozeilenparameter eingelesen werden (default:
0). Zusätzlich soll die Anzahl der gelesenen Zahlen sowie deren Summe am Bildschirm ausgegeben
werden.
Der Name der zu verarbeitenden
Binärdatei soll als 2. Parameter eingelesen
werden. Wird dieser nicht angegeben, so
soll die erste Datei im aktuellen
Verzeichnis mit der Endung .dat verwendet
werden. Das Binärformat der Daten in der
Eingangsdatei soll als 3. Parameter
eingegeben werden (int16, int32, float,
double, long double). Der Defaultwert bei
fehlender Angabe soll float sein. Der
Name der Ausgabedatei ist gleich dem
Namen der Eingabedatei mit der
zusätzlichen Endung (z.B. .csv).
Erzeugen Sie sich selbst mehrere Binärdateien zum Programmieren (Array erzeugen und mit
fwrite() in Datei schreiben). Als Abschlusstest bekommen Sie eine Binärdatei vom Betreuer.
Das Programm soll aus mehreren Quelltextmodulen und Funktionen aufgebaut sein. Fangen Sie alle
denkbaren Fehlerquellen ab!
Zusatzaufgaben:
1. Starten Sie die Tabellenkalkulation mit der neuen Importdatei direkt aus Ihrer Anwendung
heraus.
2. Implementieren Sie einen Algorithmus zum Schätzen des vorliegenden Binärformats (int,
float, double) und testen Sie ihn.
Informatik Praktikum
Gruppenaufgaben
24/26
Aufgabe 5.27 Rohrreibung
Schreiben Sie Programm namens dptube.exe, das den Reibungsverlust
einer Wasserströmung in (Stahl-)Rohren berechnet.
Bei der Reibung von Flüssigkeiten an Wandungen unterscheidet man
zwischen laminarer (ruhiger) Strömung und turbulenter Strömung.
Welche Art vorliegt entscheidet die Reynoldszahl Re = ς v d / υ: über
dem kritischen Wert von etwa 2300, ist die Rohrströmung turbulent. Dabei ist
d der Rohrdurchmesser,
v die Fließgeschwindigkeit,
υ die charakteristische kinematische Viskosität des Mediums (Wasser(20°C) = 1 mPa s) und
ς (Rho) die Dichte (Wasser(20°C) = 998,2 kg/m³).
Der Druckverlust der Leitung ergibt sich dann mit der Rohrreibungszahl λ und der Rohrlänge L zu
dp = ς v² L / ( 2 d). Dabei sind Widerstandsbeiwerte von geformten Abschnitten (Knicken etc.)
vernachlässigt.
Die Rohrreibungszahl λ ist aus folgendem Diagramm zu ermitteln. Nehmen Sie eine Rohrrauhigkeit
von k = 0,045 mm an.
Dptube.exe soll die benötigten Daten vom Benutzer einlesen und dabei den jeweils letzten
eingegebenen Wert als Standard vorschlagen (dann nur Return). Dann soll dptube.exe die
Berechnung vornehmen und das Ergebnis schön formatiert ausgeben. Das Diagramm muss dazu in
geeigneter Weise digitalisiert werden (Achtung. Logarithmische Darstellung!).
Das Programm soll aus mehreren Quelltextmodulen und Funktionen aufgebaut sein. Fangen Sie alle
denkbaren Fehlerquellen ab!
Informatik Praktikum
Gruppenaufgaben
25/26
Aufgabe 5.28 Fibonacci-Algorithmus
Schreiben Sie ein Programm namens Kanin.exe, dass die Bevölkerung mit Kaninchen nach einer
einzugebenden Zeit berechnet. Dabei gelten folgende Regeln:
●
●
●
●
Am Anfang gibt es ein
Kaninchenpaar
Jedes Paar braucht zwei Monate
bis zur Geschlechtsreife (dunkel
dargestellt) und Geburt des ersten
Wurfs
Jeder Wurf besteht aus einem
Kaninchenpaar
Nach den ersten zwei Monaten
werfen die Kaninchenpaare einmal
im Monat
Implementieren Sie zunächst die gegeben rekursive Lösung in Kanin.exe. Dabei soll die Anzahl der
Monate als Kommandozeilenparameter übergeben werden. Verändern Sie dann den Algorithmus
und implementieren Sie eine alternative
Rekursive Lösung:
Funktion Herde2() im gleichen Programm.
unsigned int Herde( unsigned int iMonate) { if (iMonate==0) return 0; if (iMonate==1) return 1; return( Herde( iMonate­1) + Herde( iMonate­2) ); }
Ziel ist es, die Rechenzeit für einen
Durchlauf mit 50 Monaten unter eine
Sekunde zu bringen. Geben Sie dazu die
Start- und Endzeit des Rechenvorgangs
aus und starten Sie Ihr Programm auch mal
mit einer Lösung von Aufgabe 5.2.
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab!
Aufgabe 5.29 Ampelschaltungs-Visualisierung
Schreiben Sie ein Programm namens LZASim.exe, das eine
Ampelschaltung visualisiert. Informieren Sie sich dazu über die
geltenden rechtlichen Vorschriften (Zeiten, Farbablauf) und
beginnen Sie mit einem Diagramm über den getakteten Ablauf.
Anschauungsmaterial gibt es z.B. hier:
http://www.berghaus-verkehrstechnik.de/index.php?
id=software1 .
Informatik Praktikum
Gruppenaufgaben
26/26
Für die per Ampel zu regulierende Kreuzung gelten folgende Bedingungen:
1. Es kreuzen eine stark befahrene Haupt- und eine kleinere Nebenstraße.
2. Die Hauptstraße hat Linksabbiegerspuren und -ampeln.
3. Die Ampel ist mit Induktionsschleifen und Fußgängertastern bedarfsgesteuert. Diese
Schalter sind per Tastatur zu simulieren.
4. Es sind Räumungsphasen für Linksabbieger zu realisieren.
5. Es ist ein Notfallmodus vorzusehen (Blinklicht, Schaltung per Tastatur).
Implementieren Sie eine Ablaufsteuerung so, dass die Zeiten leicht variiert werden können.
Visualisieren Sie das Ergebnis anschaulich mit ASCII-Grafik (Funktion gotoXY() ).
Der Quelltext soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle
möglichen Fehlerquellen ab!
Zusatzaufgabe: Sehen Sie eine flexible Zeitabhängigkeit vor (Berufsverkehrsschaltung,
Nachtabschaltung).
Aufgabe 5.30 Simulation einer Nutzungshäufigkeit
Die Herrentoilette einer fiktiven südniedersächsischen Fachhochschule hat 4 Pissoirs neben
einander, die nur von einer Seite her zugänglich sind. Schreiben Sie ein Programm NutzStat.exe, das
die relative Abnutzung der einzelnen Pissoirs als Folge der Nutzungshäufigkeit simuliert und
ausgibt.
Dabei gelten folgende Regeln:
•
Ist kein Pissoir besetzt, wird in 3 von 4 Fällen das erste
genommen und in einem das letzte;
•
Ist 1 Pissoir besetzt, dann wird das genommen, das am
weitesten vom besetzten entfernt liegt;
•
Sind 2 Pissoirs besetzt, wird in erster Priorität das am weitesten
entfernte belegt;
•
Sind 2 Pissoirs besetzt, wird in zweiter Priorität das vierte Pissior verwendet;
•
Sind 3 Pissiors belegt, dann wird das freie verwendet;
•
In allen anderen Fällen ist die Belegung zufällig;
Jeder Nutzer bleibt 1 Minute. Der Abstand zwischen den Zugängen soll per Zufallsgenerator
ermittelt werden. Die Gesamtzahl der Nutzer, über die die Simulation laufen soll, soll vom Benutzer
abgefragt werden. Geben die Nuzungshäufigkeit der einzelnen Pissoirs aus und visualisieren Sie die
Simulation (welches ist gerade besetzt) in Zeitraffer mit Hilfe der Funktion gotoXY(). Der Quelltext
soll aus mehreren Modulen und Funktionen aufgebaut sein. Fangen Sie alle möglichen
Fehlerquellen ab!
Zusatzaufgabe: Variieren Sie die Regeln nach Ihrer Erfahrung und stellen Sie das Ergebnis
gegenüber. Implementieren Sie die Pausen- und Vorlesungszeiten in Ihren Zugangsabstand ein.