Übungen / Aufgaben zu Objective-C
0 Lösungen
Cosinus Näherungsverfahren
- Main Methode, die eine Benutzereingabe (eine
Dezimalzahl) liest.
- Das Programm soll den Cosinus dieser Zahl berechnen. Dazu sollen Sie ein
Näherungsverfahren verwenden und dieses mit der Bibliotheksfunktion Math.cos() vergleichen.
Eine Näherung lautet: cos(x) = 1 - ( x ^ 2 / 2 ! ) + ( x ^ 4 / 4 ! ) - ( x ^ 6 / 6 ! ) + ....
Sie sollen diese Reihe fortsetzen, solange der zu addierende Term betragsmäßig größer als 10-6 ist. Dann geben Sie das Ergebnis, das
Resultat der Bibliotheksfunktion, und die Anzahl von Termen, die sie addieren mussten, aus.
Stellen Sie sicher, dass auch negative Eingaben und 0 korrekt behandelt werden. Beispiel:
Eingabe: 1,5
Ausgabe: 0.07073693411690848 Bibliothek: 0.0707372016677029 Terme: 5
- Was passiert bei der Eingabe von 30, 40 oder 50? Haben Sie eine Idee, wie das Problem lösbar
wäre?
Dezimalzahl) liest.
- Das Programm soll den Cosinus dieser Zahl berechnen. Dazu sollen Sie ein
Näherungsverfahren verwenden und dieses mit der Bibliotheksfunktion Math.cos() vergleichen.
Eine Näherung lautet: cos(x) = 1 - ( x ^ 2 / 2 ! ) + ( x ^ 4 / 4 ! ) - ( x ^ 6 / 6 ! ) + ....
Sie sollen diese Reihe fortsetzen, solange der zu addierende Term betragsmäßig größer als 10-6 ist. Dann geben Sie das Ergebnis, das
Resultat der Bibliotheksfunktion, und die Anzahl von Termen, die sie addieren mussten, aus.
Stellen Sie sicher, dass auch negative Eingaben und 0 korrekt behandelt werden. Beispiel:
Eingabe: 1,5
Ausgabe: 0.07073693411690848 Bibliothek: 0.0707372016677029 Terme: 5
- Was passiert bei der Eingabe von 30, 40 oder 50? Haben Sie eine Idee, wie das Problem lösbar
wäre?
0 Lösungen
Druckauftrag an lokal installierten Drucker senden - Betriebssystem Windows
Schreibe ein Programm welches alle lokalen Drucker auflistet und der Benutzer einen Drucker auswählen kann. Es sollen verschiede Daten gedrückt werden können.
- Textdateien
- Bilder
- PDF Dateien
- Byte Array welche zB. Von einem Webservice zurück kommt.
Als Erweiterung sollen noch die jeweiligen Druckeinstellungen wie Druckhelligkeit, etc. eingestellt werden können.
Der letzte ausgewählte Drucker und alle Druckeinstellungen soll das Programm in einer xml json ini oder ähnliches Format abgespeichert und bei Programmstart wieder ausgelesen und gesetzt werden.
- Textdateien
- Bilder
- PDF Dateien
- Byte Array welche zB. Von einem Webservice zurück kommt.
Als Erweiterung sollen noch die jeweiligen Druckeinstellungen wie Druckhelligkeit, etc. eingestellt werden können.
Der letzte ausgewählte Drucker und alle Druckeinstellungen soll das Programm in einer xml json ini oder ähnliches Format abgespeichert und bei Programmstart wieder ausgelesen und gesetzt werden.
0 Lösungen
Erzeugen einer Text-Spirale
Schreibe ein Programm das einen beliebigen Text in Spiralform ausgibt!
Für den Input "123456789" sollte das Programm ausgeben:
543
612
789
Beispiel im Anhang: das Alphabet in Spiralform (Python)
Für den Input "123456789" sollte das Programm ausgeben:
543
612
789
Beispiel im Anhang: das Alphabet in Spiralform (Python)
0 Lösungen
Beharrlichkeit natürlicher Zahlen
Mathematiker denken sich manchmal ziemlich unsinnige Dinge aus, frei nach dem Motte
"Was interessiert mich der Sinn der Objekte, die ich mir ausgedacht habe,
wichtig (und aufregend) ist für mich lediglich, die Eigenschaften dieser Objekte zu
erkunden".
So verstehen einige Mathematiker unter der "Beharrlichkeit" (englisch persistence)
einer natürlichen Zahl, dargestellt als Folge dezimaler Digits, die "Widerstandskraft"
der Zahl gegenüber einer wiederholenden Verkleinerung durch Multiplikation ihrer Digits.
Beispiele:
pers(38) = 2
(wegen 3 * 8 = 24 und 2 * 4 = 8, d. h. zweifache Wiederholung der Multiplikationen, jeweils
auf das Ergebnis der Vorgängermultiplikationen bezogen)
pers(1236) = 3
(1 * 2 * 3 * 6 = 36; 3 * 6 = 18; 1 * 8 = 8).
Eine Reduzierung der beschriebenen Art bis auf lediglich ein Digit ist bei jeder natürlichen
Zahl möglich. Die Zahlen 0 ... 9 haben es ganz schlecht, denn ihre Beharrlichkeit ist gleich
Null. Schlechte Karten haben auch alle mehrstelligen Zahlen, bei denen irgendein Digit Null
ist, sie reduzieren sich mit nur einem einzigen Multiplikationszyklus auf die
Beharrlichkeit Eins.
Es gibt aber andere Zahlen, die wesentlich beharrlicher sind.
Die Aufgabenstellung besteht nun darin, für alle 2-stelligen, 3-stelligen ... bis hin zu
allen 6-stelligen natürlichen Dezimalzahlen diejenigen zu ermitteln, die innerhalb ihres
Definitionsbereiches (Anzahl der Dezimalstellen) die größte Beharrlichkeit aufweisen.
Erschwerung: Zwei Zahlen, die durch Vertauschung von Digits ineinander überführt werden
können, sind als gleich zu betrachten (z. B. 18 und 81 oder 1317 und 3711) und es ist
lediglich die kleinere (hier die 18 bzw. die 1317) zu berücksichtigen.
"Was interessiert mich der Sinn der Objekte, die ich mir ausgedacht habe,
wichtig (und aufregend) ist für mich lediglich, die Eigenschaften dieser Objekte zu
erkunden".
So verstehen einige Mathematiker unter der "Beharrlichkeit" (englisch persistence)
einer natürlichen Zahl, dargestellt als Folge dezimaler Digits, die "Widerstandskraft"
der Zahl gegenüber einer wiederholenden Verkleinerung durch Multiplikation ihrer Digits.
Beispiele:
pers(38) = 2
(wegen 3 * 8 = 24 und 2 * 4 = 8, d. h. zweifache Wiederholung der Multiplikationen, jeweils
auf das Ergebnis der Vorgängermultiplikationen bezogen)
pers(1236) = 3
(1 * 2 * 3 * 6 = 36; 3 * 6 = 18; 1 * 8 = 8).
Eine Reduzierung der beschriebenen Art bis auf lediglich ein Digit ist bei jeder natürlichen
Zahl möglich. Die Zahlen 0 ... 9 haben es ganz schlecht, denn ihre Beharrlichkeit ist gleich
Null. Schlechte Karten haben auch alle mehrstelligen Zahlen, bei denen irgendein Digit Null
ist, sie reduzieren sich mit nur einem einzigen Multiplikationszyklus auf die
Beharrlichkeit Eins.
Es gibt aber andere Zahlen, die wesentlich beharrlicher sind.
Die Aufgabenstellung besteht nun darin, für alle 2-stelligen, 3-stelligen ... bis hin zu
allen 6-stelligen natürlichen Dezimalzahlen diejenigen zu ermitteln, die innerhalb ihres
Definitionsbereiches (Anzahl der Dezimalstellen) die größte Beharrlichkeit aufweisen.
Erschwerung: Zwei Zahlen, die durch Vertauschung von Digits ineinander überführt werden
können, sind als gleich zu betrachten (z. B. 18 und 81 oder 1317 und 3711) und es ist
lediglich die kleinere (hier die 18 bzw. die 1317) zu berücksichtigen.
0 Lösungen
Große Potenzen und Fakultäten
0 Lösungen
Bombenbauen für Informatiker
XML Bomben machen sich Ersetzungsregeln in XML Dateien zunutze. Diese Regeln können verwendet werden, um riesige Dateien zu erstellen und den Zielrechner so zum Absturz zu bringen (eine genauere Beschreibung findet sich in der Wikipedia oder bei SemperVideo).
In dieser Aufgabe soll es darum gehen, eine möglichst kleine Bombe zu schreiben, die entpackt eine geforderte Mindestgröße hat.
Die XML Bombe soll dabei dem Format des folgenden Beispiels folgen, Zeilenumbrüche werden als ein Zeichen gezählt.
Beispiel:
In dieser Aufgabe soll es darum gehen, eine möglichst kleine Bombe zu schreiben, die entpackt eine geforderte Mindestgröße hat.
Die XML Bombe soll dabei dem Format des folgenden Beispiels folgen, Zeilenumbrüche werden als ein Zeichen gezählt.
Beispiel:
Konsolenausgabe:
Größe der Bombe eingeben: 2500000
Bombe mit Größe 2588278 und 285 Zeichen gefunden:
<?xml version="1.0"?>
<!DOCTYPE X [
<!ENTITY a "AAAAAAAAAAAAAAAAAAAAAA">
<!ENTITY b "&a;&a;&a;&a;&a;&a;&a;">
<!ENTITY c "&b;&b;&b;&b;&b;&b;&b;">
<!ENTITY d "&c;&c;&c;&c;&c;&c;&c;">
<!ENTITY e "&d;&d;&d;&d;&d;&d;&d;">
<!ENTITY f "&e;&e;&e;&e;&e;&e;&e;">
]>
<X>&f;&f;&f;&f;&f;&f;&f;</X>
0 Lösungen
Paarungstabellen für Rundenturniere
Bei Sportarten nach einem System "Jeder gegen Jeden" (bspw. Hinrunde Fußballbundesliga) mit N Teilnehmern (N sei gerade, falls nicht, wird ein "Dummyakteur" hinzugefügt) werden insgesamt N - 1 Runden a N/2 Spiele ausgetragen. Zur Festlegung der Paarungen einer Runde kann auf verschiedene Art und Weise vorgegangen werden, bspw. mittels Auslosung. Allerdings ist das Losverfahren unfair (u. a. keine Balance der Heim- und Auswärtsspiele) und findet aus diesem Grunde so gut wie keine praktische Anwendung. Besser geeignet und bspw. bei Schachturnieren Basis sind sogenannte Paarungstabellen nach Berger (siehe z. B. www.schachfreunde-markgraeflerland.de/media/pdf/Turniersysteme.pdf), nachfolgend als Beispiel für ein Turnier mit 10 Teilnehmern aufgelistet:
1. Runde 1-10 2-9 3-8 4-7 5-6
2. Runde 10-6 7-5 8-4 9-3 1-2
3. Runde 2-10 3-1 4-9 5-8 6-7
4. Runde 10-7 8-6 9-5 1-4 2-3
5. Runde 3-10 4-2 5-1 6-9 7-8
6. Runde 10-8 9-7 1-6 2-5 3-4
7. Runde 4-10 5-3 6-2 7-1 8-9
8. Runde 10-9 1-8 2-7 3-6 4-5
9. Runde 5-10 6-4 7-3 8-2 9-1
Solche Tabellen wurden bereis vor dem "Computerzeitalter" mühevoll per Hand erstellt (siehe z. B. http://www.schachclub-forchheim.de/pdfs/Paarungstafeln.pdf), wobei i. d. R. bei einer Teilnehmerzahl von weit unter 30 aufgehört wurde.
Aufgabe ist es ein Programm zu schreiben, das solche Paarungstabellen nach Berger automatisch generiert, wobei die Teilnehmerzahl nach oben nicht begrenzt sei.
1. Runde 1-10 2-9 3-8 4-7 5-6
2. Runde 10-6 7-5 8-4 9-3 1-2
3. Runde 2-10 3-1 4-9 5-8 6-7
4. Runde 10-7 8-6 9-5 1-4 2-3
5. Runde 3-10 4-2 5-1 6-9 7-8
6. Runde 10-8 9-7 1-6 2-5 3-4
7. Runde 4-10 5-3 6-2 7-1 8-9
8. Runde 10-9 1-8 2-7 3-6 4-5
9. Runde 5-10 6-4 7-3 8-2 9-1
Solche Tabellen wurden bereis vor dem "Computerzeitalter" mühevoll per Hand erstellt (siehe z. B. http://www.schachclub-forchheim.de/pdfs/Paarungstafeln.pdf), wobei i. d. R. bei einer Teilnehmerzahl von weit unter 30 aufgehört wurde.
Aufgabe ist es ein Programm zu schreiben, das solche Paarungstabellen nach Berger automatisch generiert, wobei die Teilnehmerzahl nach oben nicht begrenzt sei.
0 Lösungen
Zahlenübersetzer für Mark
Fred will seinem Freund Mark, der nicht gut Englisch sprechen kann, aber sich darum bemüht, es zu lernen, ein Programm schreiben, welches eine beliebige eingegebene Zahl (von 1 - 999) in die geschriebene, englische Version übersetzt (1 = one, u.s.w). Doch er kann selber nicht gut programmieren und fragt nun dich um Hilfe. Hilf Fred ein Programm zu schreiben, welches die oben beschriebene Aufgabe erfüllt.
(Die englischen Regeln für gescheieben Zahlen müssen eingehalten werden.)
(Die englischen Regeln für gescheieben Zahlen müssen eingehalten werden.)
0 Lösungen
Ist das EULER-e Normal?
Man untermauere die Vermutung, dass die EULER-Zahl e Normal ist. Vermutung
deshalb, weil es bis heute nicht bewiesen werden konnte.
Normal ist eine Zahl im mathematischen Sinne dann, wenn alle
Ziffern und Ziffernblöcke in ihrer Zahlenfolge in absolut gleicher
Häufigkeit auftreten, und dies vollkommen zufällig verteilt. Das heißt,
keine der Zahlen von 0 bis 9 (Digit-Länge = 1) darf in den Nachkommastellen
von e häufiger oder weniger häufig vorkommen als eine andere.
Selbst längere Zahlengruppen wie z. B. 00000 oder 99999 (Digit-Länge = 5) dürfen bei
einer normalen Zahl nicht seltener auftreten als z. B. 12345 oder 14159.
In der angehängten ASCII-Datei "euler_1000000_nk.txt" sind die ersten 1.000.000
Nachkomma-Digits von e als Datenbasis für die Aufgabenstellung beigefügt. Untersucht
werden sollen die Digit-Längen von 1 bis 5.
deshalb, weil es bis heute nicht bewiesen werden konnte.
Normal ist eine Zahl im mathematischen Sinne dann, wenn alle
Ziffern und Ziffernblöcke in ihrer Zahlenfolge in absolut gleicher
Häufigkeit auftreten, und dies vollkommen zufällig verteilt. Das heißt,
keine der Zahlen von 0 bis 9 (Digit-Länge = 1) darf in den Nachkommastellen
von e häufiger oder weniger häufig vorkommen als eine andere.
Selbst längere Zahlengruppen wie z. B. 00000 oder 99999 (Digit-Länge = 5) dürfen bei
einer normalen Zahl nicht seltener auftreten als z. B. 12345 oder 14159.
In der angehängten ASCII-Datei "euler_1000000_nk.txt" sind die ersten 1.000.000
Nachkomma-Digits von e als Datenbasis für die Aufgabenstellung beigefügt. Untersucht
werden sollen die Digit-Längen von 1 bis 5.
0 Lösungen
23. Nachkommastelle der EULER-Konstanten
Die EULER-Konstante e ist im Bereich der angewandten Mathematik die mit Abstand wichtigste reelle Zahl.
Selbst die in der Allgemeinheit bekanntere Kreiszahl pi kann da nicht mithalten.
EULER selbst hat bereits vor dem Jahre 1748 (Bild 1, Introductio in analysin infinitorum, in diesem Buch auf Seite 90) e mit 23 Nachkommastellen angegeben
(bzw. von seinen Schülern zuvor berechnen lassen): e = 2.71828182845904523536028 ...
Eine fantastische Leistung, die sicherlich einige Monate Zeit und Nerven gekostet hat.
Die 23. Nachkommastelle, die 8, muss ein gerundeter Wert sein. Folgende Fragen sollen mit Hilfe von Rechentechnik beantwortet werden:
Wurde die 23. Nachkommastelle von EULER auf- oder abgerundet und welchen Wert hat die 100. Nachkommastelle von e?
Für die Berechnung von e gibt es diverse Formeln, am bekanntesten ist die Aufsummierung aller reziproke Fakultäten der natürlichen Zahlen (e = 1/0! + 1/1! + 1/2! + 1/3! + ...). Der Schwierigkeitsgrad der Aufgabenstellung hängt mit der Umgehung von Rundungsfehlern zusammen. Wer sein Ergebnis abgleichen möchte, kann sich z. B. hier informieren: http://www-history.mcs.st-andrews.ac.uk/HistTopics/e_10000.html
Selbst die in der Allgemeinheit bekanntere Kreiszahl pi kann da nicht mithalten.
EULER selbst hat bereits vor dem Jahre 1748 (Bild 1, Introductio in analysin infinitorum, in diesem Buch auf Seite 90) e mit 23 Nachkommastellen angegeben
(bzw. von seinen Schülern zuvor berechnen lassen): e = 2.71828182845904523536028 ...
Eine fantastische Leistung, die sicherlich einige Monate Zeit und Nerven gekostet hat.
Die 23. Nachkommastelle, die 8, muss ein gerundeter Wert sein. Folgende Fragen sollen mit Hilfe von Rechentechnik beantwortet werden:
Wurde die 23. Nachkommastelle von EULER auf- oder abgerundet und welchen Wert hat die 100. Nachkommastelle von e?
Für die Berechnung von e gibt es diverse Formeln, am bekanntesten ist die Aufsummierung aller reziproke Fakultäten der natürlichen Zahlen (e = 1/0! + 1/1! + 1/2! + 1/3! + ...). Der Schwierigkeitsgrad der Aufgabenstellung hängt mit der Umgehung von Rundungsfehlern zusammen. Wer sein Ergebnis abgleichen möchte, kann sich z. B. hier informieren: http://www-history.mcs.st-andrews.ac.uk/HistTopics/e_10000.html
0 Lösungen
Zahlenpyramide in der Konsole ausgeben
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
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].
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].