Übungen / Aufgaben zu C#

2 Lösungen Lösungen noch nicht öffentlich
Body-Mass-Index (BMI)
Anfänger - C# von hollst - 20.11.2018 um 18:23 Uhr
Der BMI ist eine (umstrittene) Kenngröße zur Ermittlung des eigenen Über-/Untergewichtszustandes:

BMI = Körpermasse (kg) / Körpergröße zum Quadrat (m**2).

Er wird wie folgt interpretiert:

Starkes Untergewicht < 16
Mäßiges Untergewicht 16 – < 17
Leichtes Untergewicht 17 – < 18,5

Normalgewicht 18,5 – < 25

Präadipositas 25 – < 30

Adipositas Grad I 30 – < 35
Adipositas Grad II 35 – < 40
Adipositas Grad III ≥ 40

Man schreibe ein Programm, das die zwei Basisdaten (Körpermasse und Körpergröße) entgegennimmt und den
Zustand (Starkes Untergewicht, Mäßiges Untergewicht ... Adipositas Grad III) als Ergebnis mitteilt.

Viel Spaß!

2 Lösungen Lösungen noch nicht öffentlich
Binärzahlen ohne Doppelnull
Anfänger - C# von hollst - 20.11.2018 um 09:55 Uhr
Es sein z. B. N = 10.000.

Man schreibe ein Programm, das alle natürlichen Zahlen kleiner N auflistet,
die in ihrer binären Repräsentation keine zwei aufeinander folgende Nullen besitzen.

Anmerkung: Führende Nullen werden nicht berücksichtigt, die erste natürliche Zahl, die nicht in der Liste wäre,
ist somit die 4 (4-dezimal = 100-binär).

Viel Spaß!
0 Lösungen
Objekterkennung in einem Netz mit hexagonalen Zellen (hex-CCL)
Fortgeschrittener - C# von hollst - 19.10.2018 um 14:14 Uhr
Gegeben sei ein (quasi unendlich ausgedehntes) Netz/Gitter mit hexagonalen Zellen (siehe Bild_black_white),
die entweder (zufällig) leer (Weißmarkierung) oder belegt sind (Schwarzmarkierung).

Jede Zelle hat sechs unmittelbare Nachbarzellen. Ist bei einer belegten Zelle eine oder sind mehrere Nachbarzellen gleichfalls belegt,
so werden die entsprechenden Zellen zu einem Zellcluster vereint. Auf diese Weise entstehen im Netz/Gitter
geometrisch unterschiedlich strukturierte Objekte, die vollständig von leeren Zellen umgeben sind.

Die Programmieraufgabe besteht darin, die Anzahl der so konstruierten Objekte zu zählen und unterschiedliche Objekte
mit unterschiedlichen Farben zu markieren (siehe Bild_color_labeled).

Wer sich zu der Problematik etwas belesen möchte, google bitte nach CCL oder connected-component labeling.
Dort wird allerdings in der Regel nicht mit hexagonalen sondern mit quadratischen Zellen (Pixeln) hantiert.

Viel Spaß!
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ß!
2 Lösungen Lösungen 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}
3 Lösungen Lösungen ö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ß!
1 Lösung Lösung noch nicht öffentlich
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
2 Lösungen Lösungen 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.