Übungen / Aufgaben zu Objective-C

0 Lösungen
Mehrdimensionale Arrays
Anfänger - Objective-C von zefcat - 27.11.2016 um 10:46 Uhr
Sie sollen ein C Programm schreiben, welches eine 4x4 Matrix um 90° nach rechts dreht. Eine Drehung soll somit folgendermaßen aussehen:

a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

wird zu

a41 a31 a21 a11
a42 a32 a22 a12
a43 a33 a23 a13
a44 a34 a24 a14

Folgende Matrizen sollen Sie insgesamt 4 mal drehen:


- - - - - - - - - - - - - - o -
- o - - - o o - - o - - - - o -
o o o - o o - - - o - - - - o -
- - - - - - - - - o o - - - o -


Die Matrizen sollen insgesamt 5 mal ausgegeben werden, einmal bevor eine Drehung durchgeführt wurde und anschließend nach jeder Drehung (die letzte Ausgabe entspricht also der ersten Ausgabe).

Als Trennzeichen dienen ein Leerzeichen zwischen den einzelnen Symbolen innerhalb einer Matrix, zwei Leerzeichen zwischen zwei horizontal angeordnete Matrizen und eine Leerzeile zwischen den einzelnen Versionen. Beachten Sie das Fehlen von abschließenden Leerzeichen nach der letzten Matrize. Siehe dazu auch die Beispielausgabe.
0 Lösungen
GUI-Anwendung für Feiertags- und Arbeitstageausgabe
Anfänger - Objective-C von hollst - 11.11.2016 um 10:23 Uhr
Schreibe eine GUI-Anwendung, die ausgehend von einem Startdatum bis zu einem (exklusiven) Enddatum alle dazwischen liegenden Feiertage in Deutschland ausgibt sowie die Anzahl der Arbeitstage, d. h. Anzahl der Tage abzüglich Sa. + So. und Feiertage, die nicht auf Sa. oder So. fallen. Das Ergebnis soll bundeslandbezogen sein (also bitte Auswahlmöglichkeit einbauen).

Optional kann man das auf Österreich und/oder die Schweiz erweitern.
0 Lösungen
Cosinus Näherungsverfahren
Anfänger - Objective-C von vk_26 - 09.11.2016 um 12:49 Uhr
- 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?
0 Lösungen
Druckauftrag an lokal installierten Drucker senden - Betriebssystem Windows
Fortgeschrittener - Objective-C von Gustl - 29.10.2016 um 19:03 Uhr
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.
0 Lösungen
Erzeugen einer Text-Spirale
Anfänger - Objective-C von hak - 08.10.2016 um 20:06 Uhr
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)
0 Lösungen
Beharrlichkeit natürlicher Zahlen
Anfänger - Objective-C von hollst - 30.09.2016 um 12:20 Uhr
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.
0 Lösungen
Große Potenzen und Fakultäten
Anfänger - Objective-C von hollst - 27.09.2016 um 11:24 Uhr
Man zeige numerisch, dass es (wahrscheinlich) keine natürlichen Zahlenpaare (N, K) mit N >= 1 und K >= 1 gibt,
die folgender Gleichung genügen: (N + K)! = N^N (sprich N hoch N). N und K sollen bei der Simulation jeweils <= 1.000 sein.
0 Lösungen
Bombenbauen für Informatiker
Fortgeschrittener - Objective-C von eulerscheZhl - 21.09.2016 um 07:43 Uhr
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:

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
Anfänger - Objective-C von hollst - 01.09.2016 um 12:34 Uhr
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.
0 Lösungen
Zahlenübersetzer für Mark
Anfänger - Objective-C von Acel007 - 13.08.2016 um 11:05 Uhr
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.)
0 Lösungen
Ist das EULER-e Normal?
Anfänger - Objective-C von hollst - 12.08.2016 um 15:21 Uhr
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.
0 Lösungen
23. Nachkommastelle der EULER-Konstanten
Fortgeschrittener - Objective-C von hollst - 10.08.2016 um 15:51 Uhr
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