Übungen / Aufgaben zu C#

4 Lösungen Lösungen öffentlich
Gute Wette oder schlechte Wette?
Anfänger - C# von hollst - 23.06.2016 um 19:12 Uhr
Ich finde, eine interessante Aufgabenstellung sollte immer mit einer kleinen Geschichte verbunden sein. Ansonsten wird die Aufgabenstellung in der Allgemeinheit mit "rein theoretische" oder "für das Leben uninteressant" abgestempelt. Nun gut, die Mathematik fragt nicht danach, ob irgendeine Aufgabenstellung für das Leben "interessant" ist, für sie sollte eine Aufgabenstellung "an sich" interessant sein, unabhängig vom paktischen Wert. Aber lassen wir das Philosphieren beiseite und kommen zu der Geschichte:

Du hast einen spielsüchtigen Mitbürger getroffen, nennen wir ihn den Banker. Nach einiger Zeit schlägt dir der Banker ein einfaches Würfelspiel vor: du gewinnst, wenn eine gerade Zahl fällt, er, wenn eine ungerade Zahl gefallen ist. Du bist nicht spielsüchtig und erwiders, dass du an einem solchen Spiel, bei dem die Chancen 50 zu 50 stehen, kein Interesse hast. Gewinnen tut nur der, der mehr Glück hat und auf so etwas vertraust du nicht.

Der Banker bleibt hartnäckig. Er schlägt dir vor, dass du nicht nur gewinnst beim Fallen einer geraden Zahl, sondern zusätzlich, wenn die Eins fällt. Hiermit bist du einverstanden, denn deine Chancen sind mit etwa 67 zu 33 wesentlich besser. Doch der Banker sagt: "Halt! Mir ist natürlich klar, dass Du in diesem Fall die bessere Position hast. Als Ausgleich bekommst du im Falle eines Gewinnes aber auch nur 4/6 der Tischgeldes ausgezahlt, der Rest geht an mich zurück." Deine Antwort: "Na, dann sind wir ja wieder wie zu Beginn, ich habe kein Interesse."

Der Banker bleibt am Ball: "Okay, im Falle eines Gewinnes bekommst du nicht nur 66,666... % sondern sogar 70 % des Tischgeldes. Den kleinen Nachteil werde ich mit meinem glücklicheren Händchen schon wieder ausgleichen." Gut, das ist dir plausibel und das Spile geht los.

Jetzt zur Aufgabenstellung: Ist es in der Tat wahr, dass du mit den 70 % (leicht) im Vorteil gegenüber dem Banker bist? Zur Beantwortung der Frage gibt es im Prinzip zwei Wege, den experimentellen und den theoretischen. Wir wollen den experimentellen Weg wählen (Simulation). Sowohl du als auch der Banker haben in jeder Runde ein Grundgeld von 100 €. Der Einsatz bei jeder Würfelung sein 1 € und eine Runde geht über 100 Würfe (somit brauchst du im dümmsten Fall, falls du wirklich jeden der 100 Würfe einer Runde verlieren solltest, trotzdem keine Bankrotterklärung abgeben). Die Frage lautet: Wie oft hast du im Mittel am Ende einer 100-Würfe-Runde mehr als deine 100-€-Startgeldmenge auf deiner Seite?

PS: Falls dir dein Simulationsergebnis irgendwie komisch vorkommt, versuche doch durch Überlegung (theoretischer Weg) herauszubekommen, ob deine Simulation nicht doch richtig sein könnte.


6 Lösungen Lösungen öffentlich
Pig Latin - Schweine Latein
Anfänger - C# von DrizZle - 15.06.2016 um 13:57 Uhr
Hier zum Wikipedia Post

Einführung:

Zitat:

Pig Latin (engl.; wörtlich: Schweine-Latein) bezeichnet eine Spielsprache, die im englischen Sprachraum verwendet wird.
Sie wird vor allem von Kindern benutzt, aus Spaß am Spiel mit der Sprache oder als einfache Geheimsprache, mit der Informationen vor Erwachsenen oder anderen Kindern verborgen werden sollen.


Erklärung:

Zitat:

Beginnt das Wort mit einem Konsonanten, so wird der initiale Konsonant oder Konsonantencluster ans Ende des Wortes verschoben und ein „ay“ angehängt. Zu betrachten ist hierbei nicht die Rechtschreibung, sondern die tatsächliche Aussprache: „Stumme“ Konsonantenbuchstaben, wie z. B. das „h“ in „honor“, sind keine Konsonanten.

loser → oser-lay
button → utton-bay
star → ar-stay
three → ee-thray
question → estion-quay
happy → appy-hay
Pig Latin → Ig-pay Atin-lay

Beginnt das Wort mit einem Vokal oder einem stummen Konsonanten, so wird direkt ein „ay“ angehängt.

eagle → eagle-ay
America → America-ay
honor → honor-ay


Aufgabe:
Schreibt ein Programm welches ein belibiges Wort ins Schweine Latein umwandelt und ausgibt. Auf die Regel mit Stummen H's kann man verzichten.
6 Lösungen Lösungen öffentlich
Console - ReadPassword Methode
Anfänger - C# von DrizZle - 15.06.2016 um 13:48 Uhr
Ihr kennt sicherlich die Einstellung für die TextBox in der Windows Form in der man den User Input sofort in ein belibigen Password Char umwandeln kann (in der Regel '*'). Diese Möglichkeit hat man in der Console nicht. Die Aufgabe besteht darin jeden Tastaturschlag des Users abzufangen und in ein '*' umzuwandeln und auszugeben. Sprich ihr erstellt eure eigene Read Methode. Das Passwort soll später trotz allem als Text ausgegeben werden können.
Vorlage:
Quellcode ausblenden C#-Code
class ReadPass
{
    static void main(string[] args)
	{
	    Console.Write("Passwort: ");
	    string password = ReadPassword();
	}
	string ReadPassword()
	{
	    ...
	}
}
4 Lösungen Lösungen öffentlich
Programmierung eines SleepSorter
Fortgeschrittener - C# von hollst - 09.06.2016 um 15:33 Uhr
Zum Sortieren irgendwelcher Objekte existieren unzählige Algorithmen, immer mit dem Ziel, das Sortieren möglichst schnell hinzubekommen, denn bei großen Datenmengen kann das Sortieren etliche Zeit beanspruchen. Eine recht originelle Art eines Sortierers stellt der sogenannte SleepSorter dar, allerdings ist er in der Regel kaum praxistauglich. Sein Vorteil besteht jedoch darin, dass man von vornherein fast genau weiß, wie lange der Sortiervorgang dauern wird, egal, wie vielen Objekte zu sortieren sind.

So funktioniert der SleepSorter: Jedem zu sortierenden Element wird ein eigener Thread zugeordnet. Nachdem das geschehen ist, werden alle Threads gleichzeitig gestartet. Die Threads haben keine großartige Rechenleistung zu erbringen, im Gegenteil, sie sind sofort in den Schlaf zu versetzen. Wie lange sie zu schlafen haben, muss ihnen bei der Initialisierung mitgegeben werden, und zwar genau so lange, wie es dem Wert des zu sortierenden Elemets entspricht, d. h. eine Zeitdauer dazu proportional. Das ist alles. Die Threads werden nach dem gemeinsamen Schlafengehen in aufsteigender Folge wieder erwachen und man muss dieses Erwachen lediglich sofort abfangen und den dem Thread jeweils zugeordneten Sortierwert z. B. in einer Liste hinterlegen. In dieser Liste sind die Elemente dann in sortierter Folge gespeichert.

Die Programmieraufgabe lautet so: Gegeben sei ein int-Array mit zufällig belegten Feldern, Wertebereich sei 0 ... 99. Die Länge des Arrays sei N (z. B. N = 1000). Das int-Array ist mit einem SleepSorter zu sortieren. Zusätzlich ist nach der Sortierung zu prüfen, ob auch tatsächlich richtig sortiert worden ist. Die Richtigkeit ist beim SleepSorter nämlich nicht garantiert, bspw. wenn zwei Sortierwerte eng beieinander liegen und der SleepSorter nicht von außen völlig abgeschottet ist.
3 Lösungen Lösungen öffentlich
Stochastisches Problem
Fortgeschrittener - C# von Veigar - 21.05.2016 um 15:01 Uhr
Liebe Menschen,
Wie mein Vorgänger ist mir ein mathematisches Problem eingefallen, es scheint nicht bekannt zu sein und mir ist bis jetzt selber noch keine "echte" Lösung in den Sinn gekommen, also nicht einfach eine sehr gute Annäherung.

Die Aufgabe: Eine Feder liegt in einen 1-Dimensionalen Raum a Längeineinheiten von der einen Kante A und b Längeneinheiten von der anderen Kante B entfernt und wird in jeder Zeiteinheit entweder in die eine Richtung oder in die andere Richtung geweht, vom Wind oder so.

Schreibe ein Programm das dir in einer sehr guten Annäherung oder "exakt" für jedes dieser Probleme in der Problemschar bestimmt wie wahrscheinlich es ist das es von der einen Seite oder von der anderen Seite fällt.

ps: das Bild ist ein Nebenprodukt meines eigenen Lösungsprogrammes gewesen, ich muss sagen ich habe mir die grafische Darstellung deutlich cooler erhofft, aber es zeigt ganz gut das Problem das es unendlich viele, in die Lösung einfließende "Äste"gibt.

es grüßt liebevoll und zärtlich wie immer,
Veigar
5 Lösungen Lösungen öffentlich
Simulation des Monty-Hall-Problems
Anfänger - C# von hollst - 19.05.2016 um 13:44 Uhr
Das Monty-Hall-Problem ist eines der erstaunlichsten Paradoxa der Wahrscheinlichkeitsrechnung und ein sehr gutes Beispiel dafür, wie durch eine (teilweise bewusst) irreführende Fragestellung der Blick auf die Problemlösung verschleiert werden kann. Selbst gestandene Mathematiker sollen sich daran schon die Zähne ausgebissen und getäuscht haben, obwohl die Lösung doch recht einfach ist.

Das Problem: Beteiligt sind ein Kandidat, ein Moderator und drei verschlossene Container. In einem der drei Container befindet sich der Hauptgewinn, in den zwei anderen jeweils ein Trostpreis. Der Moderator, der weiss, in welchem Container sich der Hauptgewinn befindet, bittet den Kandidaten, den "Hauptgewinn-Container" zu erraten. Der Kandidat entscheidet sich bspw. für Container # 1. Daraufhin geht der Moderator zu einem anderen Container mit Trostpreisinhalt, öffnet diesen Container und bietet dem Kandidaten gleichzeitig an, seine Wahlentscheidung noch einmal zu überdenken und gegebenenfalls zu wechseln.

Wie soll sich der Kandidat entscheiden? Es ist klar, dass sich in einem der zwei noch verschlossenen Container der Hauptgewinn befindet, in welchem, ist nur mit einer Wahrscheinlichkeit von 50 % bekannt. Wir wollen nun von zwei unterschiedlichen Kandidatentypen ausgehen: Typ 1 (konventioneller Typ) sagt sich, bei einer 50 : 50 Chance ist es egal, ob man wechselt, aber die Erfahrung sagt ihm, dass oftmals der erste Gadanke der beste ist, also entscheidet sich Typ 1 für NICHT WECHSELN. Typ 2 (gutgläubiger Typ) denk sich, wenn der Moderator ihm schon die Chance zum Wechseln anbietet, sollte er diese wahrnehmen, denn der Moderator würde ihm sicher nichts nachteiliges anbieten, also entscheidet sich Typ 2 für WECHSELN.

Mit der Simulation soll statistisch bekräftigt werden, ob (a) WECHSELN vorteilhaft ist, (b) gar keinen Einfluss hat oder (c) sogar nachteilig wäre. Wer Lust hat, kann das Simulationsergebnis auch noch zu erklären versuchen.

Im Bild ist exemplarisch eine Gewinnverteilung für die zwei Kandidaten-Typen nach vier Spielversuchen (Simulationen) dargestellt. Vier Versuche sind allerdings zu wenig, um sich bereits eine Meinung bilden zu können.
8 Lösungen Lösungen öffentlich
Nachbar-Dupletten (Arrays)
Anfänger - C# von AlHedi - 30.04.2016 um 12:34 Uhr
Es sollen die Anzahl von den Nachbar-Dupletten eines Zahlen-Arrays ermittelt werden.
Die Nachbar-Dupletten sind gleiche benachbarte Zahlen in einem Array.
Es soll außerdem auf folgendes geachtet werden:
Die Nachbardupletten sind genau nur für zwei benachbarte Mitglieder definiert - sollte ein drittes Mitglied dabei benachbart sein, wird es nicht mitgezählt, weil es noch einen gleichen Nachbar braucht.

bspw.: Array = [3,3,7] : Ausgabe = 1
Array = [3,3,3] : Ausgabe = 1 ( Die Mitglieder von Index 0 und 1 sind benachbart, der Index 2 braucht auch ein Nachbar aber hat keinen
Array = [3,3,3,3] : Ausgabe = 2
Array = [0, 3, 3, 3, 2, 7, 7, 7, 7, 3, 2, 1, 1, -2, 4, 4, 8, 9, 8, 6 ] : Ausgabe = 5

Entnommen aus dieser Aufgabenstellung: fotos-hochladen.net
3 Lösungen Lösungen öffentlich
Zeichensatz zu Umlauten
Fortgeschrittener - C# von J_U_B - 16.03.2016 um 10:03 Uhr
Es soll ein Programm geschrieben werden, welches Zeichensätze aus einem String - wie zum Beispiel "AE", "OE", "UE" oder "SS" - in die Entsprechenden Umlaute umwandelt - "AE" zu "Ä", "OE" zu "Ö" u.s.w.

Hierbei sollte auf die Korrekte Umsetzung der Wörter geachtet werden, hierfür einige Beispiele:

STOSSDAEMPFER = STOßDÄMPFER
STEUERKETTE = STEUERKETTE
KASSE = KASSE
HUELSE = HÜLSE

u.s.w.
4 Lösungen Lösungen öffentlich
Base64 - Kodierung/-Dekodierung
Fortgeschrittener - C# von devnull - 14.03.2016 um 14:42 Uhr
Base64 ist ein Verfahren zur Kodierung von 8-Bit-Binärdaten und wird häufig zum Kodieren von Email-Anhängen verwendet.
Schreibe wahlweise einen Base64-Encoder oder einen Base64-Decoder. Wer Lust hat, kann natürlich auch beide Funktionen in einem Programm kombinieren.
3 Lösungen Lösungen öffentlich
Lösen eines linearen Gleichungssystems
Fortgeschrittener - C# von eulerscheZhl - 13.03.2016 um 08:32 Uhr
Schreibe ein Programm, das lineare Gleichungssysteme lösen kann.

Im Anhang ist eine .html Datei (kann im Browser geöffnet werden).
Bei der Funktion, die berechnet wird, handelt es sich um ein Polynom 5. Grades.
Was gibt das html Dokument für f(1000) aus?
Es ist hilfreich, die berechnete Funktion zu kennen, um die Frage zu beantworten.
3 Lösungen Lösungen öffentlich
Wassereimer umfüllen.
Fortgeschrittener - C# von eulerscheZhl - 11.03.2016 um 16:36 Uhr
In einer Personengruppe hat jeder einen oder mehrere Wasereimer. Die Eimer unterscheiden sich in Volumen und Füllstand.
Das Wasser soll so umgefüllt werden, dass am Ende jede Person gleich viel Wasser hat.
Dabei muss immer komplett umgefüllt werden, das heißt bis der eine Eimer leer oder der andere voll ist.

Finde eine Lösung, die die Zahl der Umfüllvorgänge minimiert.

Beispiel - es wird aktueller Füllstand (maximaler Füllstand) angegeben:

Konsolenausgabe:

Anzahl der Personen: 2
Person 1:
Anzahl der Eimer: 2
Aktueller Füllstand von Eimer 1: 7
Maximaler Füllstand von Eimer 1: 7
Aktueller Füllstand von Eimer 2: 2
Maximaler Füllstand von Eimer 2: 7
Person 2:
Anzahl der Eimer: 2
Aktueller Füllstand von Eimer 1: 5
Maximaler Füllstand von Eimer 1: 7
Aktueller Füllstand von Eimer 2: 2
Maximaler Füllstand von Eimer 2: 9
7(7) 2(7) | 5(7) 2(9)
7(7) 4(7) | 5(7) 0(9)
7(7) 4(7) | 0(7) 5(9)
3(7) 4(7) | 0(7) 9(9)
3(7) 7(7) | 0(7) 6(9)
3(7) 7(7) | 6(7) 0(9)
3(7) 0(7) | 6(7) 7(9)
1(7) 0(7) | 6(7) 9(9)
1(7) 7(7) | 6(7) 2(9)


Konsolenausgabe:

Anzahl der Personen: 2
Person 1:
Anzahl der Eimer: 2
Aktueller Füllstand von Eimer 1: 1
Maximaler Füllstand von Eimer 1: 2
Aktueller Füllstand von Eimer 2: 3
Maximaler Füllstand von Eimer 2: 4
Person 2:
Anzahl der Eimer: 2
Aktueller Füllstand von Eimer 1: 5
Maximaler Füllstand von Eimer 1: 6
Aktueller Füllstand von Eimer 2: 7
Maximaler Füllstand von Eimer 2: 8
keine Lösung
0 Lösungen
Ableitungen berechnen
Profi - C# von eulerscheZhl - 10.03.2016 um 10:54 Uhr
Schreibe ein Programm, das Funktionen differenzieren kann.
Dabei gibt der Nutzer die Funktion ein und lässt sich die Ableitung berechnen.

Beispiel:

Konsolenausgabe:

Ableitungen berechnen
f(x) = x^3
f'(x) = x^2*3

f(x) = x*sin(3*x^2)+4
f'(x) = sin(x^2*3)+x*cos(x^2*3)*x*3*2

f(x) = sin(x)/x
f'(x) = (x*cos(x)-sin(x))/x^2

Eine Termvereinfachung wäre ein schönes Extra, aber vor allem geht es um Korrektheit.