Skip to content

Programmeren kun je leren Mystery Cache

This cache has been archived.

Nanda&Michel: De geo-computer is zoek geraakt, en ik ga hem niet opnieuw bouwen of upgraden.
Ik hoop dat het wel een nieuwe generatie programmeurs heeft opgeleverd :)

More
Hidden : 10/03/2015
Difficulty:
3 out of 5
Terrain:
2 out of 5

Size: Size:   small (small)

Join now to view geocache location details. It's free!

Watch

How Geocaching Works

Please note Use of geocaching.com services is subject to the terms and conditions in our disclaimer.

Geocache Description:

BOVENSTAAND COORDINAAT IS FICTIEF. DAAR IS DE GEO-COMPUTER NIET TE VINDEN

Om nogmaals vernieling te voorkomen het verzoek deze weer goed terug te stoppen



Vol trots kunnen we melden dat mede dankzij jullie mooie logjes en de favo's die jullie ons geven,
onze cache door GlobalCaching.eu is uitgeroepen tot "Parel van de maand oktober 2015".



Ik heb een ‘computer’ cache gemaakt en niet zomaar iedereen krijgt toegang tot deze computer. Hiervoor moet je beschikken over een basiskennis software ontwikkelen.
Om je daarbij te helpen heb ik een mini-mini cursus programmeren gemaakt die wordt afgesloten met een examen.
Dit examen onthuld de locatie van de GeoComputer en het toont aan dat je voldoende kennis hebt vergaard om ter plaatse het juiste programma te laden.

Wat is software?

Iedereen gebruikt het, software voor je computer, Apps op je tablet/Smartphone. Ook onze mooie GPS ontvangers doen niet veel zonder software. Wasmachines, auto’s, vliegtuigen, TVs, je kunt het zo gek niet bedenken, of het wordt bestuurd door software.

Dus we kennen het allemaal, maar wat is het nou eigenlijk en hoe wordt het gemaakt?

Software is datgene, dat de hardware laat doen wat het hoort te doen.
Hardware is alles dat je fysiek kunt aanraken. Software bestuurt dit en laat het op een bepaalde manier functioneren.

Voorbeeld

Neem de wasmachine als voorbeeld. Met een simplistische kijk zouden we kunnen zeggen dat deze ‘hardware’ bestaat uit een wastrommel, een aandrijfmotor, een waterpomp, verwarming, deurvergrendeling, sensoren om het niveau en de temperatuur van het water te meten. Luxere machines, hebben misschien nog een sensor om te meten hoe vuil het water is, hoe zwaar de was is, of bij centrifugeren hij in onbalans is en ga maar even door. Verder zit er een bedieningspaneel in met een reeks knoppen, display en een processor (de chip die de software uitvoert).
Als je dit allemaal in een leuke behuizing bouwt heb je een wasmachine zou je denken. Alleen veel zal deze niet doen. Om alles samen te laten werken, heb je software nodig.

Als je nou eens in grote lijnen beschrijft wat er gebeurt, dan krijg je een idee wat software doet. Hiervoor kijk ik alleen even naar een stukje van een was programma.

Als er op start wordt gedrukt, vergrendel de deur
Als dit faalt geef een waarschuwingssignaal en stop
Anders schakel de pomp in
Als water niveau sensor aan gaat schakel pomp uit
Schakel verwarming aan
Herhaal voor een uur
Zet motor aan naar links
Zet motor uit
Zet motor aan naar rechts
Als water op temperatuur zet verwarming aan
Stop motor
Start pomp
...

Dit is zomaar een fictief stukje besturing van maar een klein gedeelte, maar het schets een beeld dat het niet zo simpel lijkt als het is. Met software moet je het gedrag stap voor stap ‘programmeren’ inclusief alle denkbare fout situaties.

Een computer of processor ‘snapt’  het bovenstaande niet. Die voert alleen simpele instructies uit, zoals berekeningen, getallen vergelijken, naar een andere instructie springen, data kopiëren, etc. Dat is voor ons mensen nu weer niet een makkelijke manier.

Programmeertalen

Hiervoor zijn programmeer talen ontstaan, om het gedrag te beschrijven in voor mensen nog redelijk te bevatten schrijfwijze. Er zijn er velen zoals Basic, Java, Pascal, Fortran, Cobol, C, C++, C#, Objective-C, …
Om van deze taal naar iets te komen dat de computer of processor weer begrijpt moet het ‘vertaald’ worden met iets dat een compiler heet.

De taal C

Een taal die al vanaf 1970 bestaat, nog steeds veel gebruikt wordt, en model heeft gestaan voor veel talen, is de taal C.

Het ligt dus voor de hand om hierin een introductie te geven.
Elke programmeertaal biedt een aantal zaken waarmee je je programma kunt schrijven.
Daarnaast heeft een het bepaalde schrijfwijze (syntax). Helaas voor ons Nederlanders is de taal gebaseerd op de Engelse taal.
In C is elke afzonderlijke instructie afgesloten met het punt-coma teken ;

Commentaar

Omdat de taal toch niet helemaal op menselijke taal lijkt, is het heel handig om stukjes te voorzien van tekst die door de compiler worden genegeerd. Er zijn meerdere vormen, voor het examen hoef je alleen maar de volgende vorm te kennen.

// dit is commentaar op een regel

Variabelen

Dit is om iets tijdelijk in op te slaan of te onthouden. Hiermee kun je ook rekenen, zoals die rare x-en en y-en van de wiskunde.
Zo’n variabele kan verschillende types zijn, zoals gehele getallen (integers), comma-getallen (floats) en waar-niet-waar (boolean). Om de cache te kunnen openen heb je alleen maar de integer waarde nodig en misschien de boolean

// dit maakt een variabele die positieve en negatieve gehele getallen kan bevatten
int waterniveau;

// dit is een variabele die alleen waar (true) of niet waar (false) kan bevatten
bool deurGesloten;

Toekennen

Aan een variabele kun je waardes toekennen. Dit doe je met het = teken.

// variabele met een waarde
int ingesteldeTemperatuur = 30;

Operatoren

Een computer (‘to compute’ betekent bereken) kan uiteraard rekenen. Om te rekenen gebruik je operatoren, zoals +, -, *, /, %
De = is ook een operator, namelijk de toekenningsoperator.
De * is vermenigvuldigen, / is delen en % geeft de rest van de deling.

int a = 3; // maak variabele a aan van type int en geeft het de waarde 3
int b = 7;
int c = a * b; // c zal hier dus 21 zijn
int d = b / a; // d is hier dus 7 gedeeld door 3 is 2
int e = b % a; // e is de rest van de deling 7 / 3, dus 1
int f = (b+3) * c; // f = (7+3) * 21 = 10*21 = 210
int g = b + 3 * c; // g= 7 + 3 * 21 = 7 + 63 = 70

// variabele c is al aangemaakt hierboven, dus nu staat er geen ???intÕ voor.
// dit neemt waarde c en telt er d bij op en slaat dit weer op in c
// dus c = 21 + 2 = 23
c = c + d;

Samengestelde operatoren

Programmeurs zijn lui, en willen sommige dingen korter schijven.
Hiervoor zijn de +=, -=, *=, /=, %=, ++ en – operatoren.

int a = 1;
int b = 2;
// Dit is lang en kan dus korter
b = b + 2; // neem de waarde van b en tel er 2 bij op en sla op in b
b += 2;    // korter

b += 1; // kan nog korter met
b++;    // dit is dus voluit b = b + 1;

Logische operatoren

De computer werkt met enen en nullen, of aan/uit, waar/nietwaar. Hier kun je ook bewerkingen mee doen, de zogenaamde booleaanse algebra. Ik zal hier niet over uitwijden. Wat handig is om te weten is dat je dit gebruikt bij vergelijkingen die straks worden behandeld.
Je hebt als operatoren &&, ||, !
De && betekent ‘en’ als beide delen waar zijn, komt hier ook waar uit
De || betekent ‘of’, als een van beide of allebei waar zijn komt er ook waar uit
De ! betekent omgekeerde waarde. Dus waar wordt nietwaar en nietwaar wordt waar.

bool a = true;   // true is Engels voor waar.
bool b = false;  // false is Engels voor niet waar.
bool c = a && b; // c = false, want a en b zijn niet allebei waar.
bool d = !b;     // d  = true, want b is false dus omgekeerde waarde is true
bool e = d && b; // e  = true, want d en b zijn allebei true
bool f = a || b; // f = true, want een van beide is waar
bool g = a || f; // g = true, want beide zijn waar

Vergelijkingen

Het is ook handig om te weten wanneer iets een bepaalde waarde heeft, groter of kleiner is. De uitkomst van zo’n vergelijking is dus waar of nietwaar, ofwel true of false.
Hiervoor heb je de operatoren:
== gelijk aan
!= ongelijk aan
< kleiner dan
<= kleiner of gelijk aan
> groter dan
>= groter of gelijk aan

3 > 4 // false, want 3 is niet groter dan 4
3*4 == 4*3 // true, want 3*4 is 12 en 4*3 is ook 12 dus er staat 12 === 12

Conditioneel code uitvoeren

In het wasmachine voorbeeld stond al vaak het woordje ‘Als’, om aan te geven dat afhankelijk van een bepaalde conditie er iets gaat gebeuren. ‘Als er op start wordt gedrukt dan’. Dit staat bekend als de ‘if-then-else’ constructie.
In C is dit:
if (conditie) instructie-als-waar
else instructie indien niet waar

int a = 4;
if (a > 0) 
{
  // dit blok wordt uitgevoerd als de conditie waar is
  //  en 4 > 0 dus dit blok zou hier uitgevoerd worden
}
else
{
  // dit blok wordt uitgevoerd als de conditie niet waar is
}

Let op de krulhaakjes. Als er meer dan één instructie moet worden uitgevoerd als de conditie waar is, dan heb je deze haakjes nodig om er een blok van te maken.

Herhalingen

Als je iets meerdere keren wilt uitvoeren of iets wilt herhalen, kun je een lus gebruiken. Hiervan zijn er 3 vormen: for, do-while en de while do lus.
Voor het examen is alleen de for lus nodig.

For (initialisatie; conditie; teller)
De initialisatie zal eerst eenmalig worden uitgevoerd. Hierna wordt de conditie gecheckt. Als deze waar is zal de code in de lus worden uitgevoerd. Is dat klaar, dan wordt de teller, uitgevoerd. Vervolgens de conditie gecheckt, code uitgevoerd, teller uitgevoerd enz, totdat de conditie niet meer waar is.

int a = 2;
for (int i = 0; i < 3; i++)
{
     // do iets, bv:
     a += 4;
}

Als dit wordt uitgevoerd, zal er dus begonnen worden met initialisatie en dus wordt er een integer variabele i gemaakt en dan i=0.
Vervolgens wordt de lus gestart en dus de check i < 3 wordt uitgevoerd, en 0 is kleiner dan 3, dus wordt de code uitgevoerd. a = 2 + 4 = 6. Nu wordt de teller i++ uitgevoerd, dus i=1 en is kleiner dan 3. Dus code nogmaals door de lus heen. a = 6 + 4 = 10. Weer i++, dus i wordt 2, en 2 < 3 is waar, dus weer de code a = 10 + 4 = 14. Weer i++, dus i = 3, dit is niet kleiner dan 3, dus de lus eindigt.
In het kort de lus wordt dus 3 keer uitgevoerd, voor i=0, i=1 en i=2.

Functies

Als je stukjes code hebt die vaker nodig zijn of om de leesbaarheid te vergroten kun je functies maken. Er kunnen argumenten meegegeven worden en kan eventueel een waarde terug geven.

int eenFunctie(int argument1)
Dit is een functie met de naam eenFunctie die als invoer een integer getal ‘argument1’ meekrijgt en na beëindiging van de functie een integer getal terug geeft.
int kwadraat(int getal)
{
   return getal * getal;
}

Met return geef je een waarde terug nadat de functie klaar is.

Er is meestal een speciale functie de het beginpunt van het programma aangeeft, vaak is dit de main functie die wel of niet een waarde terugkeert en/of argumenten heeft.
De simpelste vorm is:

void main()

Uitvoer

Een programma kan ook informatie naar buiten voeren. Een veel gebruikte manier is de printf functie.

Het formatteert (vandaar die f aan het eind) en print het resultaat naar het scherm.
printf(“formatstring”, argument1, …);
Het is een lastige functie om uit te leggen. De formatstring is de tekst die je wilt zien, maar je kunt ook waardes van variabelen naar het scherm sturen. Hiervoor kan de formatstring speciale codes bevatten. Voor het examen is alleen de %d nodig.

// de string (de tekst tussen aanhalingstekens) wordt geprint
printf(“Dit is een tekst”);

int a = 3;
// %d betekent een integer waarde. 
// In dit geval wordt de waarde van a hier ingevuld en dus afgebeeld.
printf(“De waarde van a is %d”, a);

// %02d betekent een integer waarde van 2 cijfers.
// Eventueel met een voorloop 0, dus 9 wordt als 09 getoond.
printf(“De waarde van a is %02d”, a);

Examen

Dit zou voldoende kennis moeten zijn om de geocache-computer succesvol te programmeren en toegang te krijgen tot het systemlog.

Volg het onderstaand programma en ontdek waar de geocache-computer zich bevindt.

// Dit statement is nodig om de printf functie beschikbaar te krijgen
#include <stdio.h>

int veranderNoord(int noord, int stap)
{
    int nieuweNoord = noord;
    if (stap < 4) 
    {
        nieuweNoord -= 160;
    }
    else
    {
        nieuweNoord -= 2;
    }
    return nieuweNoord;
}

int veranderOost(int oost, int stap)
{
    int nieuweOost = oost;
    if (stap >= 3) 
    {
        nieuweOost -= 7;
    }
    else
    {
        nieuweOost--;
    }
    return nieuweOost;
}

int main()
{
  // Begin punt, daar staat een 'kunstwerk' die raakvlakken met deze cache heeft
  int noord = 6275;
  int oost = 5910;
  for (int stapjes = 0; stapjes < 5; stapjes++)
  {
    noord = veranderNoord(noord, stapjes);
    oost = veranderOost(oost, stapjes);
  }
  printf("Computer locatie: N53 %02d.%03d E006 %02d.%03d\n", 
         noord/1000, noord%1000, 
         oost/1000, oost%1000);

  return 0; 
}

Na succesvol loggen kun je met trots laten zien dat je hebt leren programmeren met de volgende banner:


Gebruik hiervoor de volgende code:
<a href="http://coord.info/GC5HHFB"><img src="https://d1u1p2xjjiahg3.cloudfront.net/cf52a02d-6ee9-4a54-a501-1ea0e328146d_l.jpg" title="Programmeren kun je leren banner" /></a>


// Podium plekjes

printf("FTF: DennisNL\n");
printf("STF: Sjouke789\n");
printf("TTF: Plienk\n");

Additional Hints (Decrypt)

Fgnzzrgwr

Decryption Key

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

(letter above equals below, and vice versa)