Recherche de Waypoint : 
 
Quiz Géocache

Wurzeln

Computereinsatz

par Verlat     Allemagne > Bayern > Nürnberger Land

N 49° 30.589' E 011° 20.440' (WGS84)

 Autres systèmes de coordonnées
 Taille : petit
Statut : disponible
 Caché en : 07. janvier 2022
 Publié le : 17. janvier 2024
 Dernière mise à jour : 17. janvier 2024
 Inscription : https://opencaching.de/OC17D6E
Aussi listé au : geocaching.com 

0 trouvé
0 pas trouvé
0 Remarques
0 Observateurs
0 Ignoré
17 Visites de la page
0 Images de log
Histoire de Geokrety

Grande carte

   

Dangers
Itinéraire
Préparation nécessaire

Description    Deutsch (Allemand)

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.

Eine kleine Einführung in die Programmiersprache C

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.

Kommazahlen

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);

Mathematische Funktionen

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.

Bedingungen

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.

Text

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;

Weiterführende Informationen

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.

Indice additionnels   Déchiffrer

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

Utilités

Chercher des géocaches prés: tous - trouvable - même type
Télécharger en fichier : GPX - LOC - KML - OV2 - OVL - TXT - QR-Code
Lors du téléchargement de ce fichier, vous acceptez nos conditions d'utilisation et la licence de données.

Logs pour Wurzeln    trouvé 0x pas trouvé 0x Note 0x