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