|
|||||
|
Dangers |
Route |
Preparation needed |
Description Deutsch (German)
Um die gesuchten Koordinaten zu erhalten, muss erst ein Rätsel gelöst werden:
Ich habe die Koordinaten in eine 7-stellige Zahl umgewandelt, also z.B. aus 12° 34,567' wird 1234567 und mit einem Algorithmus verschlüsselt. Dazu habe ich die Zahl durch 10'000'000 (Zehnmillionen) dividiert und die Wurzel gezogen. Die 8. bis 14. Nachkommastelle des Ergebnisses ergibt eine neue 7-stellige Zahl, die angegeben ist. Die Frage ist nun, wie könnt Ihr auf die ursprünglichen Koordinaten zurückrechnen?
Die so verschlüsselten Koordinaten lauten: N 3129783, E 5469604
Als Tipp: ich würde ausprobieren, welche Koordinaten zu den angegeben Zahlen passen. D.h. ihr probiert alle möglichen Zahlen, durchlauft jeweils den Algorithmus und schaut euch das Ergebnis an. Das geht mit einer Programmiersprache, z.B. C, oder mit einer Tabellenkalkulation. Soviel sei verraten: der Cache liegt in der Nähe, das grenzt die möglichen Koordinaten also ein.
Anmerkung: Die Angabe "in der Nähe" ist unscharf und sollte nicht zu eng gesehen werden. Gemeint ist in der Nähe verglichen mit der gesamten Erdoberfläche. Also lieber den Bereich der Koordinaten, die ausprobiert werden, etwas größer wählen. Bei automatisierter Berechnung kann man ja leicht ein paar Tausend Koordinaten rechnen lassen.
Wenn jemand nicht so gut mit dem Computer bewandert ist, kann er vielleicht jemanden aus seinem Familien- oder Freundeskreis fragen und ihr löst das Rätsel gemeinsam. Wenn jemand mit dem Computer gut umgehen kann aber wenig nach draußen geht, kann er vielleicht jemanden aus seinem Familien- oder Freundeskreis fragen und ihr geht gemeinsam auf Safari.
Ein Computerprogramm besteht aus einem Text, der in einer bestimmten Sprache geschrieben ist. Dieser Text wird von einem Übersetzungsprogramm (Compiler) in die Steuerbefehle für den Computer umgewandelt.
Auf der Seite https://www.onlinegdb.com/online_c_compiler# kann solch ein Programmtext in der Sprache C eingetippt und direkt ausprobiert werden. Das folgende kleine Beispielprogramm wird im Folgenden erläutert:
#include <stdio.h>
int main()
{
int summe = 0;
for(int n = 1; n<=100; ++n)
{
summe = summe + n;
}
printf("Die Summe ist: %d\n",summe);
return 0;
}
In der ersten Zeile (#include<stdio.h>) wird eine Bibliothek mit vielen Standardbefehlen eingebunden, z.B. der unten verwendete printf-Befehl kann dadurch verwendet werden. In der zweiten Zeile beginnt das Hauptprogramm, das immer "main" heißen muss.
In der vierten Zeile (int summe = 0;) geht es dann richtig los. Hier wird eine Variable definiert, die Summe heißt, in der eine Ganzzahl abgespeichert werden kann. Die Variable kann mindestens Werte von -32767 bis +32767 annehmen, je nach Computer auch größere Zahlen. Die Variable wird auf 0 gesetzt. Am Ende solcher Befehlszeilen muss immer ein Strichpunkt gesetzt werden.
In der fünften Zeile (for(int n = 1; n<=100; ++n)) wird eine Schleife definiert. Die Zählvariable n wird auf 1 gesetzt und alle Befehle zwischen den geschweiften Klammern {} werden ausgeführt. Danach wird n um Eins erhöht und wieder alle Befehle ausgeführt. Das wird solange wiederholt, bis n = 100 ist. Bei uns steht in dem Block zwischen den geschweiften Kammern nur ein Befehl: Mit summe = summe + n wird auf den Wert, der in summe steht, der Wert in n addiert. Es werden also alle Zahlen von 1 bis 100 addiert.
In der 9. Zeile (printf("Die Summe ist: %d\n",summe);) wird das Ergebnis ausgegeben. Der Befehl prinf hat hier zwei Parameter, die durch ein Komma getrennt sind. Der erste ist "Die Summe ist: %d\n" und enthält den Text, der geschrieben werden soll mit zwei Steuerzeichen: an die Stelle %d wird der Inhalt einer Variablen geschrieben, hier summe, und \n ist ein Zeilenumbruch. Die Variablen, die ausgegeben werden sollen, sind dann die nachfolgenden Argumente (hier nur summe).
In der 10. Zeile (return 0;) ist das Programm auch schon zu Ende.
Fließkommazahlen werden mit
double x = 1.5;
angelegt, in diesem Fall wird x der Wert 1.5 zugewiesen. Die Genauigkeit sind ca. 16 Stellen und die Zahl kann Werte von 10-300 bis 10300 annehmen, positiv wie negativ. Da ist also schon einiges drin. Mann muss bei der Mischung von Ganzahlen und Fließkommazahlen aufpassen und ggf. rechtzeitig den Zahlentyp von Hand ändern:
int a = 5, b = 2;
double x = a/b;
In x ist jetzt nicht, wie man vielleicht zunächst erwarten der Wert 2,5, sondern nur 2. Bei der Berechnung 2/5 wird noch mit ganzen Zahlen gearbeitet und daher die Nachkommastellen einfach abgeschnitten. Mit
int a = 5, b = 2;
double x = (double)a/b;
hat x tatsächlich den Wert 2.5, weil a in eine Kommazahl umgewandelt und damit die Division a/b mit Kommazahlen gerechnet wird.
Die Ausgabe von double-Werten muss in der printf-Anweisung mit %lf erfolgen:
printf ("Das Ergebnis lautet %lf\n",x);
Mit #include <math.h> steht eine ganze Reihe von mathematischen Funktionen zur Verfügung.
y = sqrt(x);
liefert z.B. die Quadratwurzel. x und y sollten double sein.
Mit einer if-Abfrage kann gesteuert werden, dass ein Befehl oder ein Block aus Befehlen nur ausgeführt wird, wenn eine bestimmte Bedingung erfüllt ist:
if (x > 0)
{
y = x;
printf("positiv\n");
}
else
{
y = -x;
printf("negativ\n");
}
Die Befehle zwischen den ersten geschweiften Klammern werden ausgeführt, wenn x = 0 ist, andernfalls derden die Befehle zwischen den zweiten Klammern ausgeführt. Andere Bedingungen sind x == 0 (gleich), x!= 0 (ungleich) x >= 0 (größer oder gleich). Der Else-Block kann auch weggelassen werden.
Ein Text, oder auch string genannt, wird mit
char zeile[100] = "Hallo";
definiert. Die Länge darf höchstens ein Buchstabe weniger sein als in der eckigen Klammer angegeben, hier also 99 Buchstaben, und darauf muss man selbst aufpassen. Mit dem Ausdruck char zeile[100] wurde ein Vektor aus char der Länge 100 definiert und entsprechender Speicher reserviert. An der letzen Stelle muss immer noch Platz für ein verstecktes Ende-Zeichen sein, daher kann man nur 99 sinnvolle Buchstaben speichern. Wenn man mehr hineinschreibt, wird etwas anderes wichtiges überschrieben und gestört.
Eine solche direkte Zuweisung ist nur einmalig bei der Definition möglich, später muss man mit speziellen Funktionen arbeiten, die zuvor mit #include <string.h> eingebunden werden müssen:
strcpy(zeile,"Wie geht es?")
Kopiert den Inhalt des konstanten string "Wie geht es?" in den variablen string zeile.
Strings werden verglichen mit
if (strcmp(zeile,"Wie geht es?") == 0)
{
printf("Gut\n");
}
Die beiden Befehle strcpy und strcmp gibt es auch in der Variante strncpy und strncmp:
strncpy(zeile,"Wie geht es?",3);
kopiert nur die ersten drei Buchstaben.
strncmp(zeile,"Wie",3);
vergleicht nur die ersten drei Buchstaben.
Ausgegeben werden strings mit
printf("%s",zeile);
Man kann mit sprintf in einen string schreiben:
char name[10] = "Peter";
sprintf(zeile,"Der gesuchte Name ist %s.",name);
Ein string ist eigentlich ein Vektor aus char. char ist ein kleine Zahl, die ein Zeichen über die ASCII-Tabelle kodiert. Man kann Vektoren auch mit allen anderen Zahlentypen bilden, z.B.
int liste[100];
definiert eine Liste mit 100 Ganzzahlen. liste[0] ist die erste, liste[99] die letzte. Jede einzelne kann wie ein int verwendet werden:
liste[0] = 1;
Dieser kurze Abriss konnte nur einen kleinen Einblick geben, müsste aber ausreichen, um das obige Rätsel zu läsen. Bei Unklarheit kann man das Verhalten des Programm auch an einem Beispiel ausprobieren. Für weitere Informationen kann ich den Klassiker Kernighan, Ritchie: Programmieren in C. empfehlen. Oder wer gleich in die modernere Erweiterung C++ einsteigen will: Josuttis: Objektorientertes Programmieren in C++. C ist vollständig in C++ enthalten, und die grundlegenden Konzepte sind in beiden Sprachen weitestgehend gleich. Online, gerade auch von Universitäten, gib es auch viele Einführungskurse.
Additional hint Decrypt
Ibe Beg: Sbytr qrz Jvyqjrpufry, re süueg qvpu gebpxra mhe Qbfr
A|B|C|D|E|F|G|H|I|J|K|L|M
N|O|P|Q|R|S|T|U|V|W|X|Y|Z
Utilities
Search geocaches nearby:
all -
searchable -
same type
Download as file:
GPX -
LOC -
KML -
OV2 -
OVL -
TXT -
QR-Code
When downloading this file, you accept our terms of use and Data license.
Log entries for Wurzeln
0x
0x
0x