Übungen / Aufgaben zu C#

2 Lösungen Lösungen noch nicht öffentlich
Rundflug über Deutschland
Fortgeschrittener - C# von hollst - 11.09.2018 um 10:19 Uhr
Angenommen, ihr wollt mit eurer Einmot einen Rundflug derart
über Deutschland machen, dass ihr im Direktflug in jeder Landeshauptstadt
der 16 Bundesländer genau einmal landet, dort auftankt und dann weiterfliegt.
Start- und Endflughafen/-platz sei der eurer eigenen Landeshauptstadt.

In welcher Reihenfolge sind die Flugplätze anzufliegen, wenn die Gesamtflugstrecke
die kürzest mögliche sein soll?

Nun gut, es gibt da insgesamt 15! = 1.307.674.368.000 verschiedene Möglichkeit.
Um euren Rechner (etwas) zu entlasten, vereinfachen wir die Sache: Die zwei
Landeshauptstädte Mains und Wiesbaden bzw. Berlin und Potsdam werden auf Grund
ihrer geringen Entfernung zueinander zu jeweils einer Stadt zusammengefasst
(Mains-Wiesbaden und Berlin-Potsdam). Außerdem hat Potsdam je sowieso keinen Flughafen,
dort setzt man bekanntlich auf BER für die Zukunft. Gut, soll man in Preußen
weiter träumen und hoffen.

Für die Aufgabe braucht ihr natürlich eine Entfernungstabelle. Nehmt dafür entweder
einen Autoatlas (die Abweichungen Luftlinie/Staßenlinie seien vernachlässigt) oder
googelt nach "Entfernungstabelle", es gibt diverse Tools davon im Netz. Ihr könnt natürlich
auch die 16 geographischen Ortskoordinaten der Landshauptstädte als Basis nehmen und
damit selbst eine Entfernungstabelle konstruieren.

Viel Spaß!
5 Lösungen Lösungen öffentlich
Durchnummerierung aller möglichen geordneten Ziehungsergebnisse bei 6 aus 49
Anfänger - C# von hollst - 06.09.2018 um 10:28 Uhr
Beim Lotto 6 aus 49 gibt es bekanntlich 13.983.816 mögliche (geordnete) Ziehungsergebnisse (49 über 6).

Schreibe ein Programm, das jeder dieser Möglichkeiten eine natürliche Zahl zuordnet, also

1 2 3 4 5 6 -> 1
1 2 3 4 5 7 -> 2

...
...

44 45 46 47 48 49 -> 13.983.816

Viel Spaß!
1 Lösung Lösung noch nicht öffentlich
Digitbegrenztes Zählen
Anfänger - C# von hollst - 31.08.2018 um 11:04 Uhr
Gegeben sei ein positives Integerarray (uint) AMAX der Länge N, das mit Zufallszahlen zwischen (inclusive) 1 und einer Konstanten amax gefüllt ist.
Die Feldbelegung von AMAX stellt obere Wertgrenzen dar.

Man schreibe ein Programm, das alle möglichen Belegungen eines positives Integerarrays A (Länge N) auflistet,
wobei die Feldwerte von A entsprechend der Grenzwertbelegung von AMAX stets unterschritten werden müssen.

Beispiel (c#):
Quellcode ausblenden C#-Code
int N = 5, amax = 11; uint[] AMAX = new uint[] {3, 2, 9, 1, 4}
 
//mögliche uint[] A sind:
new uint[] {0, 0, 0, 0, 0}
new uint[] {1, 0, 0, 0, 0}
new uint[] {2, 0, 0, 0, 0}
new uint[] {0, 1, 0, 0, 0}
new uint[] {1, 1, 0, 0, 0}
new uint[] {2, 1, 0, 0, 0}
new uint[] {0, 0, 1, 0, 0}
// ...
// ...
new uint[] {2, 1, 8, 0, 3}
2 Lösungen Lösungen noch nicht öffentlich
Generierung eines SUDOKU
Anfänger - C# von hollst - 13.08.2018 um 16:23 Uhr
Für alle, denen es nicht bekannt sein sollte: Ein SUDOKU ist ein 9 × 9 - Gitter,
das mit den Ziffern 1 bis 9 so ausgefüllt ist, dass jede Ziffer in jeder Spalte,
in jeder Zeile und in jedem 3 x 3 - Unterblock genau ein einziges Mal vorkommt (Bild 1).

Insgesamt sind fast 6.7 Trilliarden (10 hoch 21) unterschiedliche SUDOKUS konstruierbar
(genau 6.670.903.752.021.072.936.960).

Die Programmieraufgabe bestehe darin, mittels Zufallsgenerator SUDOKUS zu erzeugen
und anzuzeigen.

Durch Ausblendung einiger Felder entsteht aus einem SUDOKU ein SUDOKU-Rätsel. Dabei
müssen allerdings mindestens 17 Felder unausgeblendet sein, um eine eindeutige Lösung
zu erhalten (Beweis siehe McGuire, Gary; Tugemann, Bastian; Civario, Gilles:
There is no 16-Clue Sudoku: Solving the Sudoku Minimum Number of Clues Problem.
2012arXiv1201.0749M, Sep 2013). Die Erzeugung eines solchen SUDOKU-Rätsels sei
Fortgeschrittenen vorbehalten, da hierbei auch die Eindeutigkeit einer Lösung nachgewiesen
werden sollte. Der Gipfel wäre anschließend, einen computergestützten SUDOKU-Löser zu entwickeln;
aber, wir wollen es hier noch nicht übertreiben, eines nach dem anderen und nur, wer die
Herausforderung nich scheut.

Viel Spaß!
0 Lösungen
PDF aus CSV erstellen
Anfänger - C# von Exception - 06.08.2018 um 15:47 Uhr
Hallo zusammen,

heute sollt ihr eine CSV-Datei Zeile für Zeile einlesen, welche in etwa so aussehen sollte:

Firmenname;PLZ;Ort;Straße;Hausnummer;...;Gegenstand;Preis
Firmenname;PLZ;Ort;Straße;Hausnummer;...;Gegenstand;Preis
Firmenname;PLZ;Ort;Straße;Hausnummer;...;Gegenstand;Preis
...

Danach sollt ihr aus den eingelesenen Informationen eine PDF-Datei erstellen.
Für jede eingelesene Zeile soll eine neue Seite angefangen werden.

Die Gestaltung der Rechnung / des PDF-Dokuments ist euch überlassen,
wer eine grobe Vorstellung braucht kann dies klick mich als Vorlage nehmen.


Viel Spaß :)
1 Lösung Lösung noch nicht öffentlich
Rekursieve Fakultät von n
Fortgeschrittener - C# von FHEM - 22.07.2018 um 19:09 Uhr
Erstelle ein programm das n! = 120 zum beispiel nach n auflöst.
Ansatz: 5! =5*4*3*2*1 also müsste n=120/5/4/3/2/1
1 Lösung Lösung noch nicht öffentlich
Zeichenprogramm / Paint für Arme
Anfänger - C# von Exception - 15.07.2018 um 08:17 Uhr
Hallo zusammen,

heute wird ein Grafikprogramm (Windows Forms) erstellt, mit dem man verschiedene geometrische Formen zeichnen kann.
Zunächst genügt es, die Formen "Ellipse", "Rechteck" und "Linie" zu implementieren.

Alle diese Formen haben folgende Gemeinsamkeiten:
- eine Position (Point, linke obere Ecke)
- eine Größe (Size)
- Rahmenfarbe / Linienfarbe (Color)

Das heißt, dass alle Formen drei gemeinsame Eigenschaften haben.

Für die GUI bzw. das Zeichnen auf dem Bildschrim soll in Form1 eine PictureBox angelegt werden - die Leinwand.
Zusätzlich eine ComboBox für die geometrische Form und eine für die Farbe.

Zusätzlich muss jede abgeleitete Klasse eine eigene Implementierung der Methode
Quellcode ausblenden C#-Code
void Draw(Graphics g) { ... }

besitzen (näheres siehe weiter unten).

Klassen:

Erstelle nun folgende Klassen:
- CsGeoForm (Basisklasse)
- CsRectangle, CsEllipse, CsLine (abgeleitete Klasse)

Zum Instanziieren müssen immer alle drei Eigenschaften (Position, Größe, Farbe) den (öffentlichen) Kontstruktoren übergeben werden.

Nachdem alle vier Klassen implementiert wurden wird nun die oben angesprochene Draw Methode implementiert.
Dies ist praktisch ein Zweizeiler.
Es wird zuerst ein Pen angelegt, der die entsprechende Farbe hat.
Anschließend wird die entsprechende Methode aus der Graphics Klasse verwendet.
Und fertig ist die Methode.

Wieder zurück zu Form1:
- Die PictureBox sollte die Eigenschaft BorderStyle auf "Fixed Single" gestellt werden.
- Nun brauchen wir eine Methode "getColor()", diese liefert später anhand der Farbauswahl der ComboBox die entsprechende systemdefinierte Farbe.
- Die Picturebox braucht nun ein Event - MouseClick.

Für die Implementierung des Events "MouseClick":
- zuerst muss geprüft werden, ob die linke oder rechte Maustaste gedrückt wurde.
- Linksklick: Startkoordinaten werden festgelegt.
- Rechtsklick: Höhe und Breite wird festgelegt und anschließend wird eine Instanz dder entsprechenden geometrischen Form erstellt.
Zum Schluss ist die geometrische Form durch einen Aufruf der Draw Methode zu zeichnen.
Hierfür ist ein Graphics-Objekt erforderlich
-> picturebox1.CreateGraphics()
--> Achtung: Muss später wieder mit Dispose() freigegeben werden!

Probleme, die es noch behoben werden müssen:

1)
Sollte das Fenster minimiert werden, so sind alle gezeichneten Rechtecke, etc. weg.
Das darf nicht sein!
Tipp: Weiteres Event -> "Paint"

2)
Evtl ist es während dem Testen bereits aufgefallen: Das Rechteck wird bei negativer Höhe/Breite nicht durch die Methode DrawRectangle gezeichnet!
Das sollte so auch nicht sein...
Tipp: Im Konstruktor von CsRectangle prüfen ob Höhe / Breite kleiner 0 ist.

Nice 2 Have / Erweiterungen:

- Weitere Formen
- ...


Viel Spaß :)
2 Lösungen Lösungen noch nicht öffentlich
Lesen und Bearbeiten von MP3-Dateien
Anfänger - C# von Exception - 14.07.2018 um 08:28 Uhr
Hallo zusammen,

heute sollt ihr Informationen aus MP3-Dateien lesen und editieren.

Dafür sollt ihr eine Windows Forms Anwendung schreiben,
in der ihr per Klick auf einen Button eine MP3-Datei einlesen und nach der Bearbeitung wieder speichern könnt.

Die folgenden Informationen sollen ausgelesen werden:
- Titel des Stücks (30)
- Interpret (30)
- Album / CD-Titel (30)
- Erscheinungsjahr (4)
- Kommentar (30)
- Genre (1)

Diese Informationen ("ID3-Tags") liegen als Zeichenketten in den letzten 125 Byte der Datei.
Die in der Klammer stehende Zahl zeigt an, wieviel Byte für die entsprechende Information belegt sind.

Doch zuvor muss geprüft werden ob die Datei auch wirklich eine gültige MP3-Datei ist.
Diese Information beginnt im 128. Byte und ist insg. 3 Byte lang.
(D.h., dass der komplette ID3-Tag 128 Byte lang ist)
In diesen 3 Byte muss "TAG" stehen (= TAG-Identifizierung), wenn nicht wird eine Exception o.ä. geworfen - ist euer Bier.
(Sicherlich kann es vorkommen, dass bei einer anderen Datei, genau an dieser Stelle ebenfalls "TAG" steht, aber für die Einfachkeit belassen wir es hierbei)

Wenn die Datei eingelesen ist und z.B. in Textboxen die Informationen ausgegeben wurden können diese bearbeitet werden und mit einem anderen Button gesichert / geschrieben werden.


Viel Spaß! :)


Hilfe / Nützliches:
- BinaryReader
- BinaryWriter
1 Lösung Lösung noch nicht öffentlich
Schleife, Randem, und switch und DataTime , TimeSpan.
Anfänger - C# von NMeassar - 06.07.2018 um 10:05 Uhr
Erstellen Sie ein Programm, welches dem Benutzer 10 Rechenaufgaben stellt.
Die Aufgaben bestehen jeweils aus zwei zufällig bestimmten Zahlen zwischen 1 und 10 und dem zufällig gewählten Operator (Möglichkeiten: + , - , *)
Ist das Ergebnis inkorrekt, wird folgender Text ausgegeben
"Das Ergebnis ist falsch!"
Dies geschieht solange, bis der Benutzer die Aufgabe richtig gelöst hat.
Nachdem die 10 Aufgaben gelöst sind, soll auf der Konsole die benötigte Zeit ausgegeben werden.
3 Lösungen Lösungen öffentlich
Programmierung von MasterMind
Anfänger - C# von hollst - 02.07.2018 um 10:54 Uhr
MasterMind ist ein deduktives Spiel, das insbesondere Anfang der 70er Jahre sehr beliebt war.
Ziel des Spiels ist es, einen Geheimcode zu entschlüsseln.

In der klassischen Variante ordnet ein Spieler, genannt "codemaker", eine Sequenz von vier Symbolen
geheim an. Praktisch geschieht dies mittels unterschiedlich oder teilweise bzw. gänzlich
gleich gefärbter Pins oder Murmeln in einer Reihe, wobei maximal sechs Farben zur Verfügung stehen.

Ein zweiter Spieler, genannt "codebreaker", versucht durch Testmuster, gleichfalls bestehend aus vier gereihten
Symbolen (Pins/Murmeln), den Code zu erraten. Hätte der codebreaker 6 * 6 * 6 * 6 = 1.296 Versuche zur Verfügung,
wäre dies kein Problem, allerdings wird die Anzahl der Tests als Spielregel auf zwölf (manchmal weniger) begrenzt.

Als Responds auf ein Testmuster muss der codemaker zwei Informationen geben:

1.) Wieviele Symbole im Testmuster stehen an exakt der gleicher Stelle wie im Geheimmuster (im Falle vier, wäre das
Spiel für den codebreaker gewonnen) und
2.) wieviele Symbole (Pin-/Murmelfarben) sind sowohl im Geheim- als auch im Testmuster
vorhanden, allerdings nicht in übereinstimmender Position in der Reihe.

Die Programmieraufgabe bestehe nun darin, MasterMind interaktiv am PC zu simulieren, wobei der Computer als
codemaker fungiert, der zunächst per Zufallsgenerator das Geheimmuster erzeugt. Anschließend sind sukzessive
maximal zwölf Testmuster vom codebreaker (User) einzugeben und vom codemaker jeweils die zwei Fagen zu beantworten.


Anmerkung: MasterMind wurde auch von Mathematikern unter die Lupe genommen und bereits Mitte/Ende der 70er Jahre konnte
bewiesen werden, dass man es mit maximal fünf Testmustern lösen kann, sehr erstaunlich, oder? Daraufhin wurde
SuperMasterMind vorgeschlagen. Unterschied: Reihen mit fünf Symbolen und acht unterschiedlichen Pin-/Murmelfarben.

Wer MasterMind lediglich als schöne Spielerei ansieht, überlege bitte folgendes: Seit 1971 (release)
wurden bisher pro Jahr im Durchschnitt eine Million Spiele weltweit verkauft. Wärest Du der Erfinder und bekämest
als Lizenzgeber pro Exemplar 10 Cent, Du hättest finanziell ausgesorgt.
3 Lösungen Lösungen öffentlich
Messwerte mit Array und Methoden
Anfänger - C# von syneex - 29.06.2018 um 16:20 Uhr
Hallo Zusammen,

mal angenommen, man arbeitet in einer Fabrik, die Druckflaschen herstellt. Es werden pro Tag beliebig viele Flaschen fertiggestellt (n), da die Mitarbeiter nicht jeden Tag identisch schnell arbeiten. Am Ende des Tages muss der Druck in den Flaschen jedoch geprüft werden.

Aufgabe:
Die Aufgabe besteht hier in der Erstellung einer Konsolenanwendung mit folgendem Menü:

-----------Messwerte-----------
1 Eingabe der Messwerte
2 Ausgabe der Messwerte
3 Berechnung des Mittelwertes
4 Ende


Menüpunkt 1 ruft eine Methode auf, die erst eine Eingabe der produzierten Flaschen erwartet. Danach wird für jede Flasche der zuvor gemessene Wert in ein Array (mit Gleitkommazahlen) eingegeben. Wenn man den letzten Wert eingegeben hat, wird wieder das Menü gezeigt.

Menüpunkt 2 ruft eine Methode auf, die für jede Flasche den Wert ausgibt. Nach der nächsten Eingabe wird wieder das Menü gezeigt.

Menüpunkt 3 errechnet den Mittelwert und gibt diesen aus. Anschließend wird wieder das Menü angezeigt.

Bei Wahl des Menüpunkts 4, schließt sich die Konsole.

Der Name der Konsole soll "Messwertecheck" sein.

Die Werte können frei erfunden werden. Es geht lediglich um die Funktionalität. :)


Grüße und viel Spaß beim Lösen ;)
1 Lösung Lösung noch nicht öffentlich
Perlin Noise Algorithm
Fortgeschrittener - C# von Z3RP - 20.06.2018 um 16:18 Uhr
Die Aufgabe besteht einen Perlin Noise Algorithmus zu programmieren der 1D-2D funktioniert.
So genannte Noise Algorithmen werden zum Beispiel dazu verwendet Height Maps zu generieren oder Feuertexturen.
In Spielen werden diese of dazu verwendet das Terrain zu formen. Zum Beispiel in Minecraft, Terraria und vieles mehr.
Noise soll eine natürliche zufälligkeit darstellen.

Bitte nicht mich verurteilen falls falsch liege.

Am besten wäre es wenn man am Ende eine Methode/Klasse hat.

Eingaben Werte:
-int X ( Koordinate )
-int Y ( Koordinate )

Ausgabe:
-ein Float zwischen 0-1

Hier noch ein paar linke zu dem Thema und ein paar Bilder im Anhang:
http://flafla2.github.io/2014/08/09/perlinnoise.html
https://en.wikipedia.org/wiki/Perlin_noise