Stap 8: De Code: rotoren
const char rI [26] = {"E",
'K',
BEN ',
'F',
'L',
'G',
HAD',
'Q',
'V',
'Z',
'N',
'T',
' O ',
'W',
'Y',
'H',
'X',
'U',
DE ',
'P',
'A',
'I',
'B',
'R',
'C',
'J'};
const char rII [26] = {'A',
'J',
HAD',
'K',
DE ',
'I',
'R',
'U',
'X',
'B',
'L',
'H',
'W',
'T',
BEN ',
'C',
'Q',
'G',
'Z',
'N',
'P',
'Y',
'F',
'V',
' O ',
'E'};
char rIII [26] = {'B',
HAD',
'F',
'H',
'J',
'L',
'C',
'P',
'R',
'T',
'X',
'V',
'Z',
'N',
'Y',
'E',
'I',
'W',
'G',
'A',
'K',
BEN ',
'U',
DE ',
'Q',
'O'};
U kunt vragen "Waarom niet alleen deze definiëren als tekenreeks, dit lijkt longhand". Met andere woorden waarom niet doen als dit:
char rotI [26] = "" EKMFLGDQVZNTOWYHXUSPAIBRCJ "
Ik zal toegeven, dit zorgt voor veel langere code, maar wil het zinvoller visueel te zien naar beneden (ik kan niet denken aan een tijd die ik ooit heb gedaan dit eerder, maar met deze ik denk dat het werkt). Eigenlijk omdat deze zijn rotoren (en ik was kopieert de waarden uit een papiermachine Enigma) dan is dat de manier waarop ik koos om het te doen.
Naast een definitie van de reflectoren ik heb gedefinieerd welk nummer elke rotor moet inschakelen de volgende rotor. Met andere woorden, wanneer RI in positie 17, moet vervolgens de rotor naar links wenden.
Const int spinRI = 17;
Const int spinRII = 5;
Const int spinRIII = 22;
Omdat de rotors kunnen worden gebracht in elk van de drie "slots" die u in het scherm zie ik de constante spin waarden kopiëren naar ints die veranderen op elk gewenst moment een andere rotor in een sleuf komt (r1 is links de meeste rotor, r2 is de center-rotor, r3 is de juiste meeste rotor).
int spin_r1 = spinRI;
int spin_r2 = spinRII;
int spin_r3 = spinRIII;
De volgende variabelen bijhouden van welke rotor is in welke sleuf. Dit wordt gebruikt zodat u weet wanneer u wijzigt in een sleuf rotoren wat rotor volgende zal men
int cur_r1 = 1;
int cur_r2 = 2;
int cur_r3 = 3;
Ik definiëren ook de reflector. In feite is wat dit zegt als een invoer op positie 3 komt, dan het terug uit positie 7 bijvoorbeeld zou moeten gaan (want de waarde in positie 3 7 is). De reflector in principe signaal het terug via de rotors in omgekeerde volgorde
int reflector [26] = {24,
17,
20,
7,
16,
18,
11,
3,
15,
23,
13,
6,
14,
10,
12,
8,
4,
1,
5,
25,
2,
22,
21,
9,
0,
19};
Dit zijn tijdelijke aanduidingen voor de huidige matrix van de rotor in posities 1, 2 en 3 op het scherm
char rotor1 [26];
char rotor2 [26];
char rotor3 [26];
Opmerking: De afbeelding in deze stap is uit Wikipedia