Übungen / Aufgaben zu C#

0 Lösungen
Holzblock-Schiebe-Spiel: Das gemeine Dutzend
Fortgeschrittener - C# von hollst - 03.01.2020 um 15:59 Uhr
Auch zu dieser Aufgabe gibt es eine kleine Vorgeschichte. Vor gut zwei Jahrzehnten erwarb ich in einem Krämerladen in San Diego (USA) ein Holzblock-Schiebe-Spiel mit der Bezeichnung „The Dirty Dozen“, etwa übersetzbar als „Das gemeine Dutzend“ (auch andere Übersetzungen sind möglich, das Spiel ist meines Wissens nach nie nach DE vertrieben worden, gelegentlich ist es über eBay erhältlich). Das Spiel wurde angeblich von einem Herrn Gary Mac Leod aus San Francisco etwa 1995 erfunden, der es auch über seine Firma „Square Root Games“ in Mexiko produzieren ließ. Der große finanzielle Renner ist es für Gary wohl nicht geworden, denn es ist eine recht harte Angelegenheit, die sehr viel Geduld erfordert (nicht gerade eine Stärke der meisten US-Kids).

Das Spiel besteht neben einem quadratischen Spielfeld mit Begrenzungswänden aus insgesamt 14 Holzblockelementen, u. z. sechs Quadratblöcken (Seitenlänge sei S), drei Rechteckblöcken (S und 2 x S), vier Winkelblöcken (2 x S, 2 x S) und einem flachen, quadratischen Hauptblock (ebenfalls 2 x S, 2 x S). Alle Holzblockelemente sind innerhalb des Spielfeldes frei verschiebbar. Ziel des Spieles ist es, den Hauptblock vor eine schlitzförmige Ausschuböffnung zu manövrieren ohne Heben, Drehen oder Entfernen anderer Blöcke auf dem Spielfeld (siehe BILD 1 und Draufblick BILD 2).

Der Erfinder gibt zwölf mögliche Ausgangsanordnungen (daher wohl das Wort DOZEN in der Spielbezeichnung) für die 14 Holzblockelemente vor mit zunehmendem Schwierigkeitsgrad (BILD 3).

Es ist mir bis heute nicht gelungen, auch für nur eine der Anordnungen die Lösung zu finden. Insbesondere die letzten drei Anordnungen mit über 100 Zügen erscheinen mir sehr problematisch für eine Lösung durch reines Nachdenken zu sein. Andererseits glaube ich auch nicht, dass Gary Mac Leon 1995 einen Computer zur Hand hatte, um die Lösungen via Simulation zu generieren. Trotzdem gibt er vor, bei postalischer Übersendung von 5 USD die Lösungen preiszugeben. Gut, vor einer solchen Ausgabe finde ich es interessanter, die Lösungen selber mit Hilfe eines Computers zu finden. Erst wenn das nicht gelingen sollte, frage ich in San Francisco an (die Firma soll es angeblich immer noch geben).

So, wer sich anschließen möchte, sehr gern und viel Spaß!
1 Lösung Lösung noch nicht öffentlich
Ägyptische Bruchrechnung
Fortgeschrittener - C# von hollst - 22.12.2019 um 22:50 Uhr
Gegeben seien zwei positive Ganzzahlen Z (wie Zaehler) und N (wie Nenner) mit N > Z
und Z sei kein Teiler von N.

Der Bruch Z/N ist immer als Summe der Kehrwerte positiver Ganzzahlen (Stammbrüche) darstellbar,
wobei es meist mehrer Möglichkeiten der Darstellung gibt.

Beispiele:

5/6 = 1/2 + 1/3 = 1/2 + 1/4 + 1/12 = 1/2 + 1/4 + 1/13 + 1/156 = ...

17/39 = 1/3 + 1/10 + 1/390 = ...

Man schreibe ein Programm, das Z und N entgegennimmt und die Zahlen der Stammbrüchesumme mit den wenigsten Summanden ausgibt.

Also obere Beispiele:

Input 5 und 6, Output 2 und 3,
Input 17 und 39, Output 3, 10 und 390.

Viel Spaß.
1 Lösung Lösung noch nicht öffentlich
Das Problemspiel der spagetti-essenden Philosophen
Anfänger - C# von hollst - 04.12.2019 um 18:44 Uhr
wiki
https://de.wikipedia.org/wiki/Philosophenproblem


Fünf Philosophen sitzen um einen runden Tisch, vor jedem ein Teller voll mit Spagetti und links davon eine Gabel (BILD 1).
Um von dem Teller Spagetti essen zu können, benötigt man allerdings zwei Gabeln. Die zweite Gabel kann man sich von seinem
rechten Nachbarn borgen, sofern dieser nicht gerade selber beim Essen ist. Außerdem sollte man seine eigene Gabel auch nicht gerade
an seinen linken Nachbarn verborgt haben.

Das Spiel beginnt beim ersten Philosophen und geht Schritt für Schritt wie folgt reihum:

Jeder Philosoph kann sich in einem von drei möglichen Zuständen befinden,
u. z. denkend (Zustand 1, zu Beginn alle fünf Philosophen), hungernd (2) oder essend (3).

Ein denkender Philosoph kann per Zufallsentscheidung entweder in diesem Zustand 1 verweilen (dann geht der Zeiger sofort weiter an
seinen rechten Nachbarn) oder sich für "Essenwollen" entscheiden (Übergang von Zustand 1 in Zustand 2). In diesem Fall muss er prüfen,
ob ihm zwei Gabeln zur Verfügung stehen. Wenn Ja geht er von Zusand 2 in den Zustand 3 über und kann (sagen wir) zwei [Variable E wie Essen] Runden lang essen. Nach den zwei [E] Runden wird er zunächst wieder zum denkenden Philosophen (Zustand 1), der geleerte Teller wird sofort wieder aufgefüllt, falls der Philosoph erneut Hunger bekommt.

Hat er allerdings keine zwei Gabeln zur Verfügung, bleibt er die Runde hungrig (er verharrt im Zustand 2). Bekommt ein Philosoph
(sagen wir) zehn [Variable T wie Tod] Runden lang hintereinander nichts zu essen, ist er verhungert und das Gelage auch zu ende.

Die Frage lautet, nach wie vielen Runden (abhängig von E und T) ist im Durchschitt der erste Philosoph verhungert. Viel Spaß!
3 Lösungen Lösungen öffentlich
Windows Forms Taschenrechner
Anfänger - C# von paddlboot - 04.12.2019 um 17:09 Uhr
Erstelle mit Hilfe von Windows Forms einen Taschenrechner!

- Der Taschenrechner soll zwei Zahlen speichern können.
- Wie bei einem Taschenrechner üblich, sollen alle Zahleneingaben gesammelt werden bis der Operator gewählt wurde.
- Mit jedem Drücken einer Zahlentaste wird der Variable also eine Dezimalstelle hinzugefügt.
- Wenn ein Operator ausgewählt wurde, soll die erste eingegebene Zahl gespeichert werden, ebenso der Operator (in einer separaten Variable).
- Mit Drücken der Ergebnis Taste (=) soll das Ergebnis in der selben Textbox ausgegeben werden, wie die, in der die Zahlen eingegeben wurden.

Im Anhang ein Beispiel wie ich das gelöst habe.
2 Lösungen Lösungen noch nicht öffentlich
Funktionswerte einer Parabel berechnen - Windows Forms
Anfänger - C# von paddlboot - 04.12.2019 um 16:13 Uhr
Erstelle eine Windows Form, in der Funktionswerte einer Parabel berechnet werden können.
Dafür sollen Start-, Endwert und Schrittweite über Textboxen eingelesen werden und nach dem Betätigen des Berechnen-Buttons die X- und Y-Werte in einer ListBox ausgegeben werden.
Mögliches Aussehen siehe Anhang.
3 Lösungen Lösungen öffentlich
Glücksspiel Zufällige Zahl 0-9
Fortgeschrittener - C# von re_mas - 27.11.2019 um 18:30 Uhr
Die Aufgabenstellung ist wie folgt:
- Glücksspiel bei der eine random Zahl zwischen 0 - 9 erzeugt werden soll.
- Der Spieler hat ein Startkonto von 10.000 Punkten und kann damit einen beliebigen Teilbetrag auf die zufällig erzeugte Zahl setzen.
- Liegt er richtig bekommt er das 9 Fache seines Einsatzes als Gewinn
- Programmieren Sie ein entsprechendes Programm, welches die Eingaben von der Tastatur einliest und
die Ausgaben auf dem Bildschirm liefert. Die zu erratende Zahl kann durch einen verfügbaren Zufallsgenerator gezogen werden.
2 Lösungen Lösungen noch nicht öffentlich
Text in Blindenschrift (Braille-Schrift) darstellen
Anfänger - C# von hollst - 12.11.2019 um 20:14 Uhr
Hallo,

Eure Aufgabe sei es, einen gegebenen Text in ein Blindenschriftmuster zu überführen.

Das Alphabet bestehe aus den in DE verwendeten 26 + 3 Buchstaben (alles Kleinbuchstaben im Braille),
dem Leerzeichen, den Dezimalzahlen 0 ... 9 und vier Sonderzeichen (!, ?, ., ,) (Abb. 1).

Zwei Zeichen werden jeweils durch ein ordinäres Leerzeichen getrennt,
zwischen zwei Zielen ist eine Leerzeichenzeilen eingefügt.

Exemplarisch sei der Satz "TrainYourProgrammer gehört zu meinen Lieblings-Webseiten." als
Blindschriftmuster dargestellt (Abb. 2). "-" und "+" gehören nicht zu unserem Alphabet
und sind durch Leerzeichen zu ersetzen.

Viel Spaß!
0 Lösungen
Muster im Polarkoordinatensystem
Anfänger - C# von Exception - 10.11.2019 um 09:24 Uhr
Hallo zusammen,

heute sollt ihr ein kleines Zeichenprogramm schreiben.

1. Polarkoordinatensystem

Zuerst geht es darum ein Polarkoordinatensystem (auch als Kreiskoordinatensystem bekannt) zu zeichnen.
Der Ursprung des Koordinatensystems befindet sich im Zentrum der Zeichenfläche.

- Die X-Achse verläuft horizontal durch den Ursprung, die Y-Achse vertikal.
- Jede Längeneinheit soll von einem Kreis geschnitten werden, also jeweils bei X(n) und Y(n). Der Kreismittelpunkt befindet sich dementsprechend im Ursprung des Koordinatensystems.
- Des Weiteren soll alle 22,5° eine Linie vom Ursprung aus gezogen werden (dies sind insg. 16 Linien, damit sind auch die X- als auch die Y-Achse abgedeckt!).

Wenn ihr das geschafft habt, sollte das ca. so aussehen Beispiel Polarkoordinatensystem (Hier allerdings mit 30°-Schritten anstatt mit 22,5°)
Auf die Gradangaben kann verzichtet werden.
Zudem solltet ihr dezente Farben für das Koordinatensystem wählen.

2. Muster

Für das Muster sollt ihr nun Punkte in diesem Koordinatensystem einzeichnen.
Diese ergeben das Muster je nach Punktanzahl und Zoom.

Ein jeder dieser Punkte hat folgende Eigenschaften:
- Die X-Koordinate ist die Entfernung vom Koordinatenursprung (= der Radius)
- Die Y-Koordinate ist das Bogenmaß.

Jeder Punkt soll die gleiche Zahl für X und Y eingesetzt bekommen.
D.h. Punkt p: pX(n) und pY(n)
Hier ergibt sich jedoch eine Schwierigkeit für Y.
Der Wert der Y-Koordinate n ist das Bogenmaß und muss dementsprechend noch in eine Gradzahl konvertiert werden.
Ein Beispiel:
X = 3
Y = 3 (bzw. ~172°)

Ihr sollt das nun Punkte für 0 < n <= 100 auf diesem Koordinatensystem einzeichnen.

Im Anhang befinden sich noch drei Abbildungen, die das ganze Vorhaben verdeutlichen sollen.
Es heißt ja immer ein Bild sagt mehr als tausend Worte...

Viel Spaß
euer Exception :)
2 Lösungen Lösungen noch nicht öffentlich
Zeitenrechner - Windows Forms
Anfänger - C# von paddlboot - 05.11.2019 um 07:59 Uhr
Erstelle eine Windows Forms Anwendung, in der die Arbeitszeit nach Eingabe von Beginn, Pause und Feierabend ausgerechnet werden soll.

Hierbei soll der Benutzer den Arbeitsbeginn, Beginn und Ende der Pause und den Feierabend in Textboxen eingegeben.
Mit Hilfe von Buttons soll der Benutzer entscheiden können, ob er nur den Vormittag, den Nachmittag oder die gesamte Arbeitszeit angezeigt haben möchte.

Achtung!: Die Pause gehört nicht zur Arbeitszeit! Daher muss sie von der Arbeitszeit abgezogen werden!

Viel Spaß :)
2 Lösungen Lösungen noch nicht öffentlich
Entwicklung einer Population bishin zur vollständigen Verwandtschaft
Anfänger - C# von hollst - 04.11.2019 um 12:38 Uhr
Gegeben sei eine Startpopulation mit 2N Mitgliedern (z. B. N = 100), N männliche und N weibliche, die N Elternpaare bilden.

Jedes Elternpaar erzeuge genau einen männlichen und einen weiblichen Nachkommen. Diese 2N Nachkommen bilden
anschließend durch Vermischung die nächste Generation von Eltern und so fort bis zur Generation g, die natürlich wieder 2N Populationsmitglieder hat.

Bei einer Vermischung sei Inzest (Bruder-Schwester-Ehe) verboten, eine Ehe zwischen Cousin und Cousine allerdings erlaubt.

Mittels Computersimulation sind zwei Fragen zu beantworten:

Die erste Frage lautet, nach wie vielen Generationen (g1) ist (im Mittel) erstmals ein Nachkomme mit allen Populationsmitgliedern
seiner Generation verwandt.

Die zweite Frage lautet, nach wie vielen Generationen (g2) ist (im Mittel) jeder Nachkomme mit allen Populationsmitgliedern
seiner Generation verwandt.

Viel Spaß!
4 Lösungen Lösungen öffentlich
Flächenberechnung - Einstieg in Windows Forms
Anfänger - C# von paddlboot - 29.10.2019 um 11:12 Uhr
Erstelle ein Windows Forms Programm, in dem die Flächen von einem Dreieck und einem Rechteck berechnet werden können.

Die Eingben von Höhe und Breite sollen in einer Textbox erfolgen.
Nachdem auf einen Button (Rechteck, Dreieck, Beenden) geklickt wurde, soll das Ergebnis in einer Dritten Textbox ausgegeben werden, in welcher keine Eingaben gemacht werden können.
Bei Klicken des Beenden Buttons soll das Programm geschlossen werden.

Wie das ganze Aussehen könnte, sieht man in dem angehängten Screenshot.

Viel Spaß :)
1 Lösung Lösung noch nicht öffentlich
Das Zahnstochermuster und die Sequenz der Anzahl freier Spitzen im Muster
Fortgeschrittener - C# von hollst - 01.10.2019 um 18:15 Uhr
Man kann sogar mit Zahnstochern Mathematik bzw. Informatik betreiben!

Ein Zahnstochermuster wird schrittweise erzeugt: Im ersten Schritt legt man einen Zahnstocher
beliebig und flach auf eine 2D-Fläche ab. Ohne besondere Einschränkungen seien angenommen, dass jeder Zahnstocher
genau die Länge 1 (eins) hat und das erste Exemplar senkrecht und mittig in einem (X, Y)-Koordinatensystem
liegt. Das Muster hat nach dem ersten Schritt zwei freie Spitzen bei (1/2, 0) und (-1/2, 0).
Im zweite Schritt werden senkrecht zum ersten Zahnstocher auf die zwei freien Spitzen jeweils ein weiterer Zahnstocher gelegt,
danach haben wir vier freie Spitzen (siehe Bild step_2). Auf diese Weise wird schrittweise fortgefahren.
Die Sequenz der Anzahl freier Spitzen im Muster beginnt so:

Schritt........: 1..2..3..4..5....6..7..8..9..10 11 12 13 14 15 16 17 18 19 ...
freie Spitzen: 2..4..4..4..8..12, 8, 4, 8, 12, 12, 16, 28, 32, 16, 4, 8, 12, 12 ...

Sie steigt zunächst an bis 12 (Schritt 6), um danach auf 4 abzufallen (Schritt 8). Dieses Auf und Ab
zieht sich stetig fort (bis in alle Ewigkeit, was noch zu beweisen wäre [jedoch nicht von uns]).
Die Entwicklung des Zahnstochermusters hat fraktalen Charakter. Anhand von Bild step_10_14_17 soll dies belegt sein.

Die Programmieraufgabe bestehe darin, die Musterentwicklung bis zum Schritt 100 "interaktiv" darzustellen (Bild step_100)
und auch die Anzahl freier Zahnstocherspitzen jeweils anzugeben.

Viel Spaß!