Übungen / Aufgaben zu C#

4 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.
4 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
2 Lösungen Lösungen noch nicht öffentlich
Brüche und überladene Operatoren
Anfänger - C# von Exception - 09.06.2018 um 09:07 Uhr
- Erstelle eine Klasse "Bruch"

- In dieser Klasse gibt es zwei Attribute: Zähler, Nenner (jeweils Integer)

- In dieser Klasse gibt es zudem noch überladene Opteratoren (+, -, *, /)
Diese Operatoren haben jeweils zwei Parameter, die übergeben werden müssen -> zwei Objekte der Klasse Bruch.
Die Operatoren geben einen neuen Bruch zurück.

In der Hauptmethode (oder sonst wo) soll dann folgendes möglich sein:
Quellcode ausblenden C#-Code
Bruch b1 = new Bruch(1, 2);
Bruch b2 = new Bruch(3, 4);
Bruch b3 = b1 + b2;  // auch -, *, /

- Die Klasse Bruch braucht für das Teilen von Brüchen evtl. noch ein bisschen mehr... #Methoden ;)

- Das Anlegen / Erzeugen von Brüchen soll mit Textboxen realisiert werden, sodass das ganze Programm grafisch etwas her macht.

- Die Rechenopertation (+,-,*,/) soll mit einer Dropdown Liste o.ä. ausgewählt werden.

- Mit einem Button soll die Berechnung starten und das Ergebnis anschließend in zwei weitere Textboxen (read only) geschrieben werden.

- Damit die Brüche nicht zu groß werden (50/100 o.ä.) soll bevor das Ergebnis in die Textbox geschrieben wird geschaut werden, ob sich der neue Bruch kürzen lässt.
3 Lösungen Lösungen öffentlich
Die beste Darlehensart berechnen
Anfänger - C# von Exception - 04.06.2018 um 17:06 Uhr
Schreibe ein Programm welches folgende Parameter übergeben bekommt:
- Nominalzins p.a.
- Laufzeit (Jahre)
- Darlehen (€)

Berechne dann anhand dieser Parameter welche der drei folgenden Darlehensarten am besten für den Kreditnehmer ist:
- Fälligkeitsdarlehen
- Ratendarlehen
- Annuitätendarlehen

... und gib die Ergebnisse aus, auch inwiefern sie sich untereinander unterscheiden - jeder Cent zählt! ;)
4 Lösungen Lösungen öffentlich
Babylonisches Wurzelziehen / Heron-Verfahren / Heronsches Näherungsverfahren
Anfänger - C# von Exception - 03.06.2018 um 08:27 Uhr
Die zu schreibende Anwendung soll eine positive Zahl entgegennehmen und durch das Heron-Verfahren näherungsweise die Quadratwurzel berechnen.

Zusatz:
Es werden die einzelnen Schritte ausgegeben, siehe Beispiel.

Beispiel: mit Wurzel aus 12

...
Die Wurzel aus 12 ist zwischen 3.5 und 3.4
...
Die Wurzel aus 12 ist zwischen 3.45 und 3.46
...


~ Viel Spaß :)
0 Lösungen
Konvertieren von JSON <---> XML <---> CSV
Anfänger - C# von Exception - 02.06.2018 um 08:07 Uhr
- Schreibe ein Programm, welches eine Datei einlesen kann.
- Diese Datei soll in einem der folgenden Formate sein: CSV, XML, JSON
- Das Programm erkennt welches Format die eingelesene Datei hat und zeigt dies an (z.B. "Format: JSON")
- Dem Nutzer soll die Möglichkeit gegeben werden im Anschluss die Datei in einem der anderen beiden Formate abzuspeichern

Beispiel:

JSON wird eingelesen
JSON wird zu CSV umgewandelt
CSV wird als neue Datei abgespeichert
3 Lösungen Lösungen öffentlich
Programmierung eines Anagramm-Generators
Fortgeschrittener - C# von hollst - 31.05.2018 um 14:02 Uhr
Unter einem (vollständigen) Anagramm eines Basiswortes versteht man
sinnvolle Wörter, die aus den gleichen Buchstaben wie
das Basiswort zusammengesetzt sind. Z. B. sind zum Basiswort TOR die Wörter
ROT und ORT Anagramme. Die Folge OTR ist kein Anagramm (kein sinnvolles Wort).

Für den zu programmierenden Anagramm-Generator, der ein Basiswort entgegennehmen
und eine Liste sinnvoller Anagramme ausgeben soll (Bild 1), wird natürlich eine
Liste aller sinnvollen Wörter einer (natürlichen) Sprache benötigt. Mein Vorschlag
ist es, sich den Textfile germany.dic von

https://sourceforge.net/projects/germandict/

herunterzuladen. Er enthält knapp 2.000.000 Einträge "sinnvoller" deutscher Wörter,
darunter auch eines meiner Lieblingswörter:

Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz.

Dieses Wort steht in der Tat sogar im Duden, allerdings nur an Stelle zwei der Wurmwörter,
den ersten Platz hat

Grundstücksverkehrsgenehmigungszuständigkeitsübertragungsverordnung.

Ja, aber das nur zum Schmunzeln am Rande. Viel Spaß!
4 Lösungen Lösungen öffentlich
Einfacher Namensgenerator
Anfänger - C# von Exception - 30.05.2018 um 15:23 Uhr
Schreibe ein Programm, welches zwei Textdateien (zb Vorname.txt, Nachname.txt) Zeile für Zeile in ein Array lädt.
Gebe dann eine zufällige Kombination aus Vornamen und Nachnamen aus.
0 Lösungen
Code schreiben (Serialisierung)
Fortgeschrittener - C# von A.hann - 28.05.2018 um 18:09 Uhr
Ihr Kunde ist verzweifelt. Er ist im Besitz des Programmcodes einer Klasse Person sowie einer Datei friends.dat. In friends.dat sind serialisierte Bytefolgen verschiedener Person-Objekte enthalten. Ihr Kunde weiß nicht, wie er die Bytefolgen wieder "zum Leben erweckt" (aktiviert). Er möchte von Ihnen wissen, welche Personen in der Datei friends.dat stecken und wie die Freundschaftsbeziehungen zwischen den Personen aussehen. Ihr Kunde weiß, dass die Datei friends.dat ein einziges Objekt vom Typ ArrayList<Person> enthält. Hier der Quelltext der Klasse Person (im anonymen Default-Package)


Sie erhalten die Klasse Person im Quelltext sowie die Datei friends.dat als Anlage zu dieser Aufgabe. Erstellen Sie eine statische Methode decode in der Klasse Decode (im anonymen Default-Package) welche die als Dateinamen-Parameter gegebene Datei deserialisiert und dann die Freundschaftsbeziehungen in der Reihenfolge ausgibt, wie sie in der deserialisierten ArrayList stehen. Das gewünschte Ausgabeformat ist wie folgt (wobei die Datei friends.dat andere als die folgenden Personendaten enthält):
1 Lösung Lösung noch nicht öffentlich
Einfaches Verwaltungstool mit CSV Import / Export
Anfänger - C# von Exception - 18.05.2018 um 14:31 Uhr
Der Personalchef in Firma "Bli Bla Blub & Söhne" hat nicht länger Lust, alles was Mitarbeiter betrifft, auf Zetteln zu führen bzw. zu verwalten.
Er ist sowieso der Ansicht, dass zu viele Bäume Tag für Tag abgeholzt werden...
Nun kommt er mit der Bitte zu dir, ein Programm zu entwickeln, welches ihm das Leben diesbezüglich einfacher machen soll.

Deine Aufgabe: Schreibe in der Programmiersprache deiner Wahl ein grafisches Verwaltungsprogramm.

Anforderungen an das Programm:
1) Möglichkeit Mitarbeiter anzulegen, deren Daten zu editieren bzw. Mitarbeiter zu löschen.
2) Ausgabe der Informationen aller Mitarbeiter in einer Tabelle (zur Übersichtlichkeit, während der Laufzeit).
3) Die Informationen der Tabelle sollen sortiert werden können (z.B. nach Abteilung, Geschlecht, ...) ==> noch mehr Übersichtlichkeit! :)
4) Damit die Daten nachdem das Programm geschlossen wurde nicht verloren gehen soll es zusätzlich eine Import- und Export-Funktion geben, welche alle Daten in eine CSV-Datei speichert.
4.1) Export: Es soll eine CSV-Datei erstellt werden, d.h. alle Informationen eines jeden Mitarbeiters werden via Komma, Tab, o.ä. getrennt in die Datei geschrieben. Ein Zeilenumbruch gibt an, dass nun die Informationen des nächsten Mitarbeiters kommen.
4.2) Import: Die CSV-Datei soll eingelesen werden. Aus allen Informationen eines einzelnen Mitarbeiters soll wieder ein Objekt instanziiert werden. Wenn alle Mitarbeiter importiert wurden, sollen diese wieder in der Tabelle angezeigt werden.

Hinweise:
- Export: Gib der Klasse "Mitarbeiter" vielleicht eine extra Methode, die dir deinen CSV-String bastelt (natürlich nur, wenn du auch eine Klasse "Mitarbeiter" hast ;) )


Beispiel einer kleinen CSV-Datei:
Vorname; Nachname; Geschlecht; Geburtsdatum; Abteilung/Job

Heinz; Bli; männlich; 01.01.1910; Chef
Günther; Bla; männlich; 02.02.1920; Personalchef
Erika; Blub; weiblich; 03.03.1930; Leitering Abteilung Marketing
Mannfred; Bli-Blub; männlich; 04.04.1940; Entwickler


Viel Freude beim entwickeln und basteln :)
1 Lösung Lösung noch nicht öffentlich
Screenshots erstellen und abspeichern
Anfänger - C# von Exception - 17.05.2018 um 15:36 Uhr
Aufgaben:
1) Erstelle ein Windows Forms Programm, welches via Buttonklick einen Screenshot erstellen kann.
2) Zusätzlich soll dieser Screenshot dann in einem beliebigen Ordner abgespeichert werden können, aber nur, falls dies der Nutzer auch möchte.
3) Das Bild kann dann dementsprechend in verschiedenen Formaten abgespeichert werden (png, jpg, …)

Optional:
- Gib dem Nutzer zusätzlich die Möglichkeit nur einen gewissen Bereich des Bildschirms als Screenshot abspeichern zu können (man möchte ja ggf. nur ein Fenster o.ä. aufnehmen)
- Möglichkeit das Bild um x Grad drehen
- Möglichkeit etwas in das Bild zeichnen, z.B. einen roten Rahmen
- Farbverläufe?
- etc. etc. etc.

Was ist ein Screenshot? Klicke hier!