Übungen / Aufgaben zu Objective-C

0 Lösungen
Zahlenpyramide in der Konsole ausgeben
Anfänger - Objective-C von ah3n0bar6us - 21.07.2016 um 13:38 Uhr
Schreibe ein Programm, das folgende Pyramide zunächst als Liste von Zeilen erzeugt und dann ausgibt. Die Zahlen werden bis auf die größte Ziffer gespiegelt und konkateniert. Die Größe der Pyramide soll vorher abgefragt werden.

0 Lösungen
Dart-501 Taschenrechner
Fortgeschrittener - Objective-C von hollst - 19.07.2016 um 11:25 Uhr
Dart ist hinsichtlich seiner Spielregeln und Ausführung eine recht überschaubare Sportart. Bei der Version Dart-501 beginnen beide Spieler mit einem Punktestand von 501 und müssen diesen auf 0 herunterschießen, wobei die 0 mit einem sogenannten Doppeltreffer (Double) erreicht werden muss. Die Zielfläche ist eine Kreisfläche, die in zwanzig gleichgroßen Kreissegmenten mit unterschiedlicher Grundwertigkeit aufgeteilt ist [Bild 1]. Neben den Kreissegmenten gibt es noch drei Kreisringe und das Auge. Das Auge ist eine kleine Kreisfläche um den Mittelpunkt der Zielscheibe. Die drei Kreisringe sind der Triple-Ring (entspricht dem Radius der Zielscheibe), der Double-Ring (entspricht dem halben Radius der Zielscheibe) und der Auge-Ring (Kreisring um das Auge). Beim Treffen eines der Triple- bzw. Double-Kreisring-Segmente wird die Grundwertigkeitszahl verdreifacht bzw. verdoppelt. Der Augering wird bei einem Treffer mit 25 Zählern gewertet und das Auge zählt immer 50 Punkte, es gilt als Doppeltrefferfläche (2 x 25).

In jeder Runde hat ein Spieler drei Darts, d. h. um "auszuknocken" muss er sich zuvor auf höchstens 170 Punkte heruntergeschossen haben (Knockout möglich mit Triple 20, Triple 20, Auge, also 3*20 + 3*20 + 2*25 = 170). Für 170 gibt es nur diese eine Variante (Sequenz) um direkt auszuknocken, für 169 und 168 sogar überhaupt keine. Wird in einer Runde die 0 unterboten oder die 1 erreicht (niemals mit einem Double auf 0 zu bekommen) bzw. die 0 nicht mit einem abschließenden Double erreicht, wird auf den alten Punktestand zurück gesetzt. Somit hat ein Dartspieler in der Finish-Phase eine Menge Kopfrechenarbeit zu leisten. Z. B. gibt es einige Punktestände, bei denen es über 1000 Möglichkeiten (Sequenzen) für ein Knockout gibt. Hier soll die Computerunterstützung ansetzen.

Schreibe ein Programm, das bei einem Punktestand von unterhalb 171 alle möglichen Knockout-Sequenzen berechnet, speichert und ev. anzeigt [z. B. Bild 2].
0 Lösungen
Leibnitz-Reihe rekursiv, endrekursiv und iterativ für die Annäherung von Pi
Anfänger - Objective-C von ah3n0bar6us - 16.07.2016 um 19:40 Uhr
Schreibe drei Programme zur Annäherung an die Zahl Pi mit Hilfe der Leibnitz Formel rekursiv, endrekursiv und iterativ für die Eingabe einer positiven natürlichen Zahl.

Wikipedie, Leibnitz-Reihe
0 Lösungen
Bestimmung des kleinsten gemeinsamen Vielfachen (kgV)
Anfänger - Objective-C von Nachbar - 09.07.2016 um 10:08 Uhr
Schreibe ein Programm zur Bestimmung des kgV zweier natürlicher Zahlen (siehe Beispiel zur kgV-Berechnung). Die Berechnung soll ohne Beteiligung des größten gemeinsamen Teilers erfolgen.

Beispielausgabe:
Zahl 1: 5
Zahl 2: 7

kgV: 35
0 Lösungen
Vielecke mit einem Zollstock legen
Fortgeschrittener - Objective-C von eulerscheZhl - 06.07.2016 um 15:34 Uhr
Mit einem Zollstock soll ein Vieleck gelegt werden. Es zählt dabei nur das Ergebnis, wenn man von oben auf das Vieleck schaut. Wenn der Zollstock mehr Knickstellen hat, als das Vieleck Ecken, gibt es hierfür eine Vielzahl von Möglichkeiten: man kann mehrere Zollsteckteile übereinander legen und die Richtung wechseln, in der man im Kreis läuft.

Um mit einem Zollstock aus vier Teilen ein Dreieck zu legen, gibt es 18 Möglichkeiten (die Zahlen entsprechen den Nummern der Ecken, symmetrische Lösungen sollen als verschieden angenommen werden):
1-2-3-1-2
1-2-3-1-3
1-2-1-3-2
1-3-1-2-3
1-3-2-1-2
1-3-2-1-3
2-3-1-2-3
2-3-1-2-1
2-3-2-1-3
2-1-2-3-1
2-1-3-2-3
2-1-3-2-1
3-1-2-3-1
3-1-2-3-2
3-1-3-2-1
3-2-3-1-2
3-2-1-3-1
3-2-1-3-2

Diese Möglichkeiten sind im Anhang nochmals als animated gif dargestellt.

Wie viele Segmente muss ein Zollstock mindestens haben, um auf mehr als 1000000 Arten ein Fünfeck darstellen zu können?
0 Lösungen
Schach II: vereinfachte Grundstellung
Profi - Objective-C von hollst - 01.07.2016 um 11:41 Uhr
Eine bis heute und wahrscheinlich auch für immer unbeantwortete Fage ist, ob eine Schachpartie von der Grundstellung aus bei bestem Spiel und Gegenspiel für eine Partei gewinnbar ist oder stets zum Remis verteidigt werden kann.

Wir betrachten hier eine vereinfachte Grundstellung ohne Offiziere (siehe Abbildung), nur die zwei Könige und die Bauern stehen auf ihren Ausgangsfeldern, die Zugregeln sind wie gewohnt, Weiß beginnt. Wir wollen das Spiel für denjenigen als gewonnen ansehen, der als erster einen seiner Bauern bis zur gegnerischen Grundreihe führen konnte. Die Regel "3x gleiche Stellung => REMIS" vereinfachen wir zu "1x gleiche Stellung => REMIS".

Die Aufgabenstellung lautet: Ist die Schachpartie von der vereinfachten Grundstellung aus bei bestem Spiel und Gegenspiel immer gewinnbar oder nicht?

Die Schachregeln wären z. B. hier zu finden: schachregeln
0 Lösungen
Wie viele Manhattan-Wege sind bei einem 3 x 3 - Block möglich
Fortgeschrittener - Objective-C von hollst - 28.06.2016 um 16:43 Uhr
Gegeben sei ein 3 x 3 - Int-Array, das mit Zahlen im Bereich von 1 ... 9 belegt werden kann, allerdings niemals mit zwei gleichen Zahlen (d. h. alle 1 ... 9 sind irgenwie verteilt und kommen jeweils genau einmal vor). Die Frage lautet: Mit welcher Wahrscheinlichkeit entsteht bei einer zufälligen Belegung des 3 x 3 - Int-Arrays ein Manhatten-Weg? Ein Manhatten-Weg ist folgendes: Beginnend mit dem Feld, das mit 1 belegt ist, muss das mit 2 belegte Feld mit einem einzigen horizontalen oder vertikalen Schritt erreichbar sein (Sprünge sind verboten). Das gilt auch für alle weiteren Schritte 2 -> 3 -> 4-> ... -> 9 bis zum mit 9 belegten Feld, Diagonalschritte sind gleichfalls nicht erlaubt. Im angehängten Bild sind beispielhaft eine Nicht-Manhatten-Weg-Belegung und vier Belegungen mit Manhatten-Weg dargestellt.
0 Lösungen
Tic Tac Toe (Handgezeichnet)
Fortgeschrittener - Objective-C von daniel59 - 27.06.2016 um 11:46 Uhr
Erstelle ein Programm, in dem man das Spiel Tic Tac Toe gegen den Computer spielen kann.
Dabei sollte das Layout des Programms, so aussehen, als wenn man das Spielfeld und die Kreise und Kreuze selbst zeichnet (Also keine perfekten Linien bzw. Kreise). Im Anhang seht ihr, wie es aussehen könnte.
Ein schöner Bonus wäre noch, das Zeichnen zu animieren.
0 Lösungen
Schach I: Königsmarsch
Fortgeschrittener - Objective-C von hollst - 26.06.2016 um 13:44 Uhr
Wir betrachten eine Schachstellung mit einem weißen König auf a1 (linke untere Ecke) und einem schwarzen König auf c3. Weiter sind keine Figuren auf dem Brett. Die Stellung ist natürlich remis und völlig uninteresant für einen Schachspieler. Wir wollen die Stellung allerdings auch nicht weiterspielen, sondern uns die Frage stellen, wieviele unterschiedliche Wege gibt es für den weißen König, um zur rechten oberen Ecke zu gelangen (h8). Der schwarze König dient dabei nur als Hindernis und bleibt bei dem weißen Königsmarsch auf c3 stehen.

Folgende zwei Randbedingungen: 1) die weißen Königszüge seien Regelkonform, d. h. (z. B.) zwischen weißem und schwarzem König muss stets ein Feld frei sei, u. z. sowohl in diagonaler, horizontaler und vertikaler Richtung. 2) auf seinem Weg zur oberen rechten Ecke darf der weiße König kein Feld betreten, das er bereits einmal betreten hatte (dies würde zu zirkularen Wegen führen mit möglicherweise unendlich vielen Schritten, das sei verboten).

Versuche bitte nicht sofort mit dem 8 x 8 Schachbrett zu beginnen, sondern mit einem kleineren mit 5 x 5 Feldern. Eine mögliche Lösung für diesen Fall ist im Bild dargestellt. Gehe dann zu einem Schachbrett mit 6 x 6 Felder über und erst zum Schluss, wenn du genügend Rechenzeit zur Verfügung hast, zu dem 8 x 8 Felder Brett.

0 Lösungen
Gute Wette oder schlechte Wette?
Anfänger - Objective-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.


0 Lösungen
Pig Latin - Schweine Latein
Anfänger - Objective-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.
0 Lösungen
Console - ReadPassword Methode
Anfänger - Objective-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()
	{
	    ...
	}
}