1 | #include <iostream>
|
---|
2 | #include <cstdio>
|
---|
3 | #include <ctime>
|
---|
4 | #include <climits>
|
---|
5 |
|
---|
6 | using namespace std;
|
---|
7 |
|
---|
8 | //
|
---|
9 | //Variable voor het 3x+1 programma
|
---|
10 | //
|
---|
11 | const int MAX = 25;
|
---|
12 |
|
---|
13 |
|
---|
14 | void Intro() {
|
---|
15 | cout << "---------------------------------------------------" << endl
|
---|
16 | << "| University of Leiden (XX-XX-2004) |" << endl
|
---|
17 | << "| Programmeermethoden opdracht 3 |" << endl
|
---|
18 | << "| |" << endl
|
---|
19 | << "| Gemaakt door: |" << endl
|
---|
20 | << "| Rick van der Zwet |" << endl
|
---|
21 | << "| Pascal de Vos |" << endl
|
---|
22 | << "| |" << endl
|
---|
23 | << "| |" << endl
|
---|
24 | << "| Getest op: Unix systeem (Sun OS) |" << endl
|
---|
25 | << "| Windows XP (Dev-C++ 4.9.9.0) |" << endl
|
---|
26 | << "| Freebsd 5.2.1-r11 gcc version 3.3.3 |" << endl
|
---|
27 | << "---------------------------------------------------" << endl
|
---|
28 | << endl;
|
---|
29 | }
|
---|
30 |
|
---|
31 |
|
---|
32 | //Het maken van een random getal
|
---|
33 | int randomgetal(int x) { // tussen 0 en x
|
---|
34 | static int getal = time (NULL) % x;
|
---|
35 | getal = ( 621 * getal + 1 ) % x;
|
---|
36 | return getal;
|
---|
37 | }
|
---|
38 |
|
---|
39 | //
|
---|
40 | // === SORTEREN ===
|
---|
41 | //
|
---|
42 |
|
---|
43 | class grootgetal {
|
---|
44 | public:
|
---|
45 | grootgetal();
|
---|
46 | ~grootgetal() { };
|
---|
47 | void vul(int aantal, int deelgetal);
|
---|
48 | void vulrandom(int aantal);
|
---|
49 | bool testop1();
|
---|
50 | bool iseven(int i);
|
---|
51 | bool maal3plus1();
|
---|
52 | void deeldoor2();
|
---|
53 | void vermoedentest();
|
---|
54 | void drukaf();
|
---|
55 | private:
|
---|
56 | int groot[MAX];
|
---|
57 | };
|
---|
58 |
|
---|
59 | grootgetal::grootgetal() {
|
---|
60 | for (int i = 0; i < MAX; i++) {
|
---|
61 | groot[i] = 0;
|
---|
62 | } // end for
|
---|
63 | } // end grootgetal::grootgetal
|
---|
64 |
|
---|
65 | void grootgetal::vul(int deelgetal, int aantal) {
|
---|
66 | for(int i = 0; i < aantal; i++) {
|
---|
67 | groot[i] = deelgetal;
|
---|
68 | } //end for
|
---|
69 | } //end grootgetal::vul
|
---|
70 |
|
---|
71 | void grootgetal::vulrandom(int aantal) {
|
---|
72 | for (int i = 0; i < aantal; i++) {
|
---|
73 | groot[i] = randomgetal(10000);
|
---|
74 | } // end for
|
---|
75 | } // end grootgetal::vulrandom
|
---|
76 |
|
---|
77 | bool grootgetal::iseven(int i) {
|
---|
78 | return(not(groot[i] % 2));
|
---|
79 | } // end grootgetal::iseven
|
---|
80 |
|
---|
81 | void grootgetal::deeldoor2() {
|
---|
82 | int rest = 0;
|
---|
83 | for (int i = MAX - 1; i >= 0; i--) {
|
---|
84 | if (iseven(i)) {
|
---|
85 | groot[i] = groot[i]/2 + rest;
|
---|
86 | rest = 0;
|
---|
87 | }
|
---|
88 | else {
|
---|
89 | groot[i] = groot[i]/2 + rest;
|
---|
90 | rest = 5000;
|
---|
91 | } // end if
|
---|
92 | } // end for
|
---|
93 | } // end grootgetal::deeldoor2
|
---|
94 |
|
---|
95 | bool grootgetal::maal3plus1() {
|
---|
96 | int rest = 1; // Alvast +1
|
---|
97 |
|
---|
98 | for(int i = 0; i < MAX; i++) {
|
---|
99 | groot[i] = (groot[i] * 3) + rest;
|
---|
100 | if(groot[i] >= 10000){
|
---|
101 | rest = (groot[i] / 10000);
|
---|
102 | groot[i] = (groot[i] - (rest * 10000));
|
---|
103 | }
|
---|
104 | else {
|
---|
105 | rest = 0;
|
---|
106 | } //end if
|
---|
107 | } //end for
|
---|
108 |
|
---|
109 | if (groot[MAX] > 9999) {
|
---|
110 | return (false);
|
---|
111 | }
|
---|
112 | else {
|
---|
113 | return (true);
|
---|
114 | } //end if
|
---|
115 |
|
---|
116 | } //end grootgetal::maal3plus1
|
---|
117 |
|
---|
118 | bool grootgetal::testop1() {
|
---|
119 | if (groot[0] == 1) {
|
---|
120 | for (int i = 1; i < MAX - 1; i++) {
|
---|
121 | if (groot[i] != 0) {
|
---|
122 | return (false);
|
---|
123 | } //end if
|
---|
124 | } //end for
|
---|
125 | return (true);
|
---|
126 | }
|
---|
127 | return (false);
|
---|
128 | } //end grootgetal::testop1
|
---|
129 |
|
---|
130 | void grootgetal::vermoedentest() {
|
---|
131 | int aantalintaraties = 0; //aantal keer (3x+1) (/2) noodzakelijk
|
---|
132 | while (not(testop1())) {
|
---|
133 |
|
---|
134 | if ((aantalintaraties % 100) == 0) {
|
---|
135 | cout << "Stap ";
|
---|
136 | cout.width(6);
|
---|
137 | cout.fill(' ');
|
---|
138 | cout << aantalintaraties << ": ";
|
---|
139 | drukaf();
|
---|
140 | cout << endl;
|
---|
141 | } //end if
|
---|
142 |
|
---|
143 | if (iseven(0)) {
|
---|
144 | deeldoor2();
|
---|
145 | }
|
---|
146 | else {
|
---|
147 | maal3plus1();
|
---|
148 | } //end if
|
---|
149 |
|
---|
150 | aantalintaraties++;
|
---|
151 |
|
---|
152 | } //end while
|
---|
153 | cout << "Totaal aantal intaraties: " << aantalintaraties << endl;;
|
---|
154 | } //end grootgetal::vermoedentest()
|
---|
155 |
|
---|
156 | void grootgetal::drukaf() {
|
---|
157 | cout << groot[MAX - 1];
|
---|
158 | for (int i = MAX - 2; i >= 0; i--) {
|
---|
159 | if (groot[i] > 999) {
|
---|
160 | cout << groot[i];
|
---|
161 | }
|
---|
162 | else if (groot[i] > 99) {
|
---|
163 | cout << "0" << groot[i];
|
---|
164 | }
|
---|
165 | else if (groot[i] > 9) {
|
---|
166 | cout << "00" << groot[i];
|
---|
167 | }
|
---|
168 | else {
|
---|
169 | cout << "000" << groot[i];
|
---|
170 | }//end if
|
---|
171 | } //end for
|
---|
172 | } //end grootgetal::drukaf
|
---|
173 |
|
---|
174 | //
|
---|
175 | // === END SORTEREN ===
|
---|
176 | //
|
---|
177 |
|
---|
178 | //
|
---|
179 | // == MASTERMIND ===
|
---|
180 | //
|
---|
181 |
|
---|
182 | //Vraag de gebruiker om zijn invoer
|
---|
183 | //AantalGetallen_pt = aantal getallen (pointer)
|
---|
184 | //AantalKleuren_pt = aantal mogelijkheiden (pointer)
|
---|
185 | //Invoer_pt = array met ingevoerde getallen door gebruiker (pointer)
|
---|
186 | void MastermindInvoer(int *AantalGetallen_pt, int *AantalKleuren_pt, int *Invoer_pt) {
|
---|
187 | cout << endl << "Plaats gokje: " << endl;
|
---|
188 | int IngevoerdeGetallen = 0;
|
---|
189 | while (IngevoerdeGetallen < *AantalGetallen_pt) {
|
---|
190 | cout << "Voer getal " << (IngevoerdeGetallen + 1) << " (van de " << *AantalGetallen_pt << ") in "
|
---|
191 | << "[0-" << *AantalKleuren_pt << "] (gevolgd door een enter): ";
|
---|
192 | if (cin >> *(Invoer_pt + IngevoerdeGetallen)) {
|
---|
193 | IngevoerdeGetallen++;
|
---|
194 | }
|
---|
195 | else {
|
---|
196 | cout << "Dit is geen (geldig) getal, gelieve een geldig getal invoeren" << endl;
|
---|
197 | cin.clear();
|
---|
198 | cin.ignore(INT_MAX,'\n');
|
---|
199 | } // end if
|
---|
200 | } // end while
|
---|
201 | } //end MastermindInvoer
|
---|
202 |
|
---|
203 | //Bereken of de bebruiker iets goeds ingevoerd heeft
|
---|
204 | //AG_pt => AantalGetallen_pt = aantal getallen (pointer)
|
---|
205 | //AK_pt => AantalKleuren_pt = aantal mogelijkheiden (pointer)
|
---|
206 | //Invoer_pt = array met ingevoerde getallen door gebruiker (pointer)
|
---|
207 | //Antwoord_pt = array met antwoorden (pointer)
|
---|
208 | //ATA_pt => AantalTekensAanwezig_pt = Aantal tekens aanwezig, maar niet goed geplaatst (pointer)
|
---|
209 | //ATJP => AantalTekensGoedePlek_pt = Aantal tekens op de goede plek (pointer)
|
---|
210 |
|
---|
211 | void MastermindBereken(int *AG_pt, int *ATA_pt, int *ATJP_pt, int *Antwoord, int *Invoer){
|
---|
212 |
|
---|
213 | bool HulpArray[*AG_pt]; //array die nodig is bij het testen van de geldigheid van het
|
---|
214 | //gegeven antwoord, als de plek corresponderend met plek in array antwoord true is dan is het
|
---|
215 | //getal nog niet gebruikt voor het antwoord.
|
---|
216 |
|
---|
217 | //hulp array op true stellen
|
---|
218 | for (int i = 0; i < *AG_pt; i++) {
|
---|
219 | HulpArray[i] = true;
|
---|
220 | }
|
---|
221 |
|
---|
222 | //Gegokte invoer array doorlopen
|
---|
223 | for (int i = 0;i < *AG_pt; i++) { //loop_1
|
---|
224 |
|
---|
225 | //debug (invoer + antwoord laten zien)
|
---|
226 | cout << *(Invoer + i) << " antwoord: " << *(Antwoord + i) << endl;
|
---|
227 | //end debug
|
---|
228 |
|
---|
229 | if (*(Invoer + i) == *(Antwoord + i)) { //getal op de goede plek
|
---|
230 | (*ATJP_pt)++;
|
---|
231 | HulpArray[i] = false;
|
---|
232 | }
|
---|
233 | } //end loop_1
|
---|
234 | for (int i = 0; i < *AG_pt; i++) { //loop_2
|
---|
235 | if (HulpArray[i]) {
|
---|
236 | for (int j = 0; j < *AG_pt; j++) { //loop_3
|
---|
237 | if ((*(Invoer + i) == *(Antwoord + j)) && (HulpArray[j])) { //getal aanwezig
|
---|
238 | (*ATA_pt)++;
|
---|
239 | HulpArray[j] = false;
|
---|
240 | j = *AG_pt; //uit loop_2 stappen, hij mag namelijk maar 1 keer tellen
|
---|
241 | }
|
---|
242 | } //end loop_3
|
---|
243 | }
|
---|
244 | } //end loop_2
|
---|
245 | } //end MastermindBereken
|
---|
246 |
|
---|
247 |
|
---|
248 | //hoofdmodule voor spel mastermind.
|
---|
249 | void MastermindMain() {
|
---|
250 |
|
---|
251 | //variabelen voor invoer
|
---|
252 | int AantalGetallen = 4; //Aantal getallen dat de code lang is
|
---|
253 | int AantalKleuren = 6; //Aantal mogelijkheden per code teken
|
---|
254 |
|
---|
255 | cout << "Geef het aantal getallen ( <20 ) dat u wilt raden (gevolgd door enter): ";
|
---|
256 | if (cin >> AantalGetallen) {
|
---|
257 | if(AantalGetallen > 20) {
|
---|
258 | cout << "Dit is meer als 20" << endl;
|
---|
259 | return;
|
---|
260 | } // end if
|
---|
261 | }
|
---|
262 | else {
|
---|
263 | cout << "Dit is GEEN getal" << endl;
|
---|
264 | return;
|
---|
265 | } // end if
|
---|
266 |
|
---|
267 | cout << "Geef het aantal kleuren ( <20 )dat u wilt raden (gevolgd door enter): ";
|
---|
268 | if (cin >> AantalKleuren) {
|
---|
269 | if(AantalKleuren > 20) {
|
---|
270 | cout << "Dit is meer als 20" << endl;
|
---|
271 | return;
|
---|
272 | } // end if
|
---|
273 | }
|
---|
274 | else {
|
---|
275 | cout << "Dit is GEEN getal" << endl;
|
---|
276 | return;
|
---|
277 | } // end if
|
---|
278 |
|
---|
279 | int Invoer[AantalGetallen]; //Array waar de invoer van de gebruiker wordt opgeslagen
|
---|
280 |
|
---|
281 | //variabelen voor de berekeing
|
---|
282 | bool NogNietGeraden = true; //Waar zolang code (Antwoord) nog niet geraden
|
---|
283 |
|
---|
284 | //variabelen voor uitvoer
|
---|
285 | int AantalTekensJuistePlek = 0; //Pinnetje van de juiste kleur op de juiste plek
|
---|
286 | int AantalTekensAanwezig = 0; //Pinnetje van de juiste kleur, maar niet op de goede plek
|
---|
287 |
|
---|
288 | //variabelen voor antwoord
|
---|
289 | int Antwoord[AantalGetallen]; //array met gezochte antwoorden
|
---|
290 |
|
---|
291 | //antwoord genereren
|
---|
292 | for (int i = 0; i < AantalGetallen; i++) {
|
---|
293 | Antwoord[i] = randomgetal(AantalKleuren);
|
---|
294 |
|
---|
295 | //debug (antwoord laten zien)
|
---|
296 | cout << Antwoord[i] << endl;
|
---|
297 | //end debug
|
---|
298 | } //end for
|
---|
299 |
|
---|
300 | while (NogNietGeraden) { //gebruiker code laten raden
|
---|
301 |
|
---|
302 | MastermindInvoer(&AantalGetallen, &AantalKleuren, Invoer); //gebruikers invoer opvragen
|
---|
303 | MastermindBereken(&AantalGetallen, &AantalTekensJuistePlek, &AantalTekensAanwezig, Antwoord, Invoer); //vergelijking uitvoeren
|
---|
304 |
|
---|
305 | //gebruikers resultaat laten zien
|
---|
306 | if (AantalTekensJuistePlek == AantalGetallen) {
|
---|
307 | cout << "Zeer goed, u heeft het goede antwoord geraden, druk op enter om verder te gaan";
|
---|
308 | cin.get();
|
---|
309 | NogNietGeraden = false;
|
---|
310 | }
|
---|
311 | else {
|
---|
312 | cout << "Aantal op de juiste plek: \t" << AantalTekensJuistePlek << endl;
|
---|
313 | cout << "Aantal niet op de juiste plek:\t" << AantalTekensAanwezig << endl;
|
---|
314 | } //end gebruiker code laten raden
|
---|
315 | } // end while
|
---|
316 | return;
|
---|
317 | } // end MasterMindMain
|
---|
318 |
|
---|
319 | //
|
---|
320 | // == END MASTERMIND ===
|
---|
321 | //
|
---|
322 |
|
---|
323 | //
|
---|
324 | // === SORTEREN GEDEELTE ===
|
---|
325 | //
|
---|
326 |
|
---|
327 | //Een list bestaat uit allemaal vakjes.
|
---|
328 | class Vakje {
|
---|
329 | public:
|
---|
330 | int Getal_int; //Waarde van het vakje
|
---|
331 | Vakje * Volgende_Vakje_pt; //Zijn 'rechterbuur'
|
---|
332 | Vakje * Vorige_Vakje_pt; //Zijn 'linkbuur'
|
---|
333 | };
|
---|
334 |
|
---|
335 | class listvak {
|
---|
336 | public:
|
---|
337 | //default constuctor (NULL pointers)
|
---|
338 | listvak( );
|
---|
339 | //destructor: niks doen
|
---|
340 | ~listvak( ) { };
|
---|
341 | //creer de list van random lengte met randomgetallen
|
---|
342 | void randomlist();
|
---|
343 | //druk de list van links naar rechts af
|
---|
344 | void drukaf_l_r();
|
---|
345 | //druk de list van recht naar links af
|
---|
346 | void drukaf_r_l();
|
---|
347 | //sorteer de list, volgens bubblesort methode
|
---|
348 | int sorteren();
|
---|
349 | //merge L1 en L2 met opvolgend principe
|
---|
350 | void merge(listvak * L1, listvak * L2);
|
---|
351 | //vernietig de list.
|
---|
352 | void vernietig();
|
---|
353 | private:
|
---|
354 | Vakje * Eerste_Vakje_pt; //pointer naar het eerste vakje
|
---|
355 | Vakje * Laatste_Vakje_pt; //pointer naar het laatste vakje
|
---|
356 | };
|
---|
357 |
|
---|
358 | listvak::listvak( ) {
|
---|
359 | Eerste_Vakje_pt = NULL;
|
---|
360 | Laatste_Vakje_pt = NULL;
|
---|
361 | }
|
---|
362 |
|
---|
363 | //voeg een AantalGetallen_int getallen toe aan de List die door Lbgin wordt gepointerd.
|
---|
364 | void listvak::randomlist() {
|
---|
365 | Vakje * VakjeNew_Vakje_pt;
|
---|
366 |
|
---|
367 | for (int i = 0; i < randomgetal(1000); i++) {
|
---|
368 | VakjeNew_Vakje_pt = new Vakje;
|
---|
369 | VakjeNew_Vakje_pt->Getal_int = randomgetal(10000);
|
---|
370 | if (Eerste_Vakje_pt != NULL) {
|
---|
371 | VakjeNew_Vakje_pt->Volgende_Vakje_pt = Eerste_Vakje_pt;
|
---|
372 | VakjeNew_Vakje_pt->Volgende_Vakje_pt->Vorige_Vakje_pt = VakjeNew_Vakje_pt;
|
---|
373 | }
|
---|
374 | else {
|
---|
375 | Laatste_Vakje_pt = VakjeNew_Vakje_pt;
|
---|
376 | } //end if
|
---|
377 |
|
---|
378 | Eerste_Vakje_pt = VakjeNew_Vakje_pt;
|
---|
379 | } //end for
|
---|
380 | } //end listvak::randomlist
|
---|
381 |
|
---|
382 | //druk de list af van links naar rechts
|
---|
383 | void listvak::drukaf_l_r() {
|
---|
384 | Vakje * Hulp_Vakje_pt = Eerste_Vakje_pt;
|
---|
385 | while (Hulp_Vakje_pt != NULL) {
|
---|
386 | cout << Hulp_Vakje_pt->Getal_int << " ";
|
---|
387 | Hulp_Vakje_pt = Hulp_Vakje_pt->Volgende_Vakje_pt;
|
---|
388 | } //end while
|
---|
389 | } //end listvak::drukaf_lr
|
---|
390 |
|
---|
391 | //druk de list af van rechts naar links
|
---|
392 | void listvak::drukaf_r_l() {
|
---|
393 | Vakje * Hulp_Vakje_pt = Laatste_Vakje_pt;
|
---|
394 | while (Hulp_Vakje_pt != NULL) {
|
---|
395 | cout << Hulp_Vakje_pt->Getal_int << " ";
|
---|
396 | Hulp_Vakje_pt = Hulp_Vakje_pt->Vorige_Vakje_pt;
|
---|
397 | } //end while
|
---|
398 | } //end listvak::drukaf_rl
|
---|
399 |
|
---|
400 | //sorteren volgens de bubblesort methode (grootste getal achteraan)
|
---|
401 | //uitvoer: aantal verwisselingen die plaatsgevonden hebben.
|
---|
402 | int listvak::sorteren() {
|
---|
403 | int Verwisselingen_int = 0;
|
---|
404 | Vakje * BubbleHulp_Vakje_pt = Eerste_Vakje_pt; //Dit is het vakje dat gechecked wordt
|
---|
405 | Vakje * BubbleStop_Vakje_pt = Laatste_Vakje_pt; //Hierna hoeft niet meer gechecked worden
|
---|
406 | Vakje * BubbleVakA_Vakje_pt;
|
---|
407 | Vakje * BubbleVakB_Vakje_pt;
|
---|
408 | Vakje * BubbleVakC_Vakje_pt;
|
---|
409 | Vakje * BubbleVakD_Vakje_pt;
|
---|
410 |
|
---|
411 | while (BubbleStop_Vakje_pt->Vorige_Vakje_pt != NULL) {
|
---|
412 | while ( BubbleHulp_Vakje_pt != BubbleStop_Vakje_pt ) {
|
---|
413 | if (BubbleHulp_Vakje_pt->Getal_int > BubbleHulp_Vakje_pt->Volgende_Vakje_pt->Getal_int) {
|
---|
414 | /* Methode voor het omwisselen van vak B en C
|
---|
415 | * Oude situtatie
|
---|
416 | * ___________________________________
|
---|
417 | * | Vorige | Vak Nummer | Volgende |
|
---|
418 | * |========|=============|===========|
|
---|
419 | * | | A | 1->B |
|
---|
420 | * | 2->A | B | 3->C |
|
---|
421 | * | 4->B | C | 5->D |
|
---|
422 | * | 6->C | D | |
|
---|
423 | * ------------------------------------
|
---|
424 | *
|
---|
425 | * Nieuwe situatie
|
---|
426 | * ___________________________________
|
---|
427 | * | Vorige | Vak Nummer | Volgende |
|
---|
428 | * |========|=============|===========|
|
---|
429 | * | | A | 1->C |
|
---|
430 | * | 2->C | B | 3->D |
|
---|
431 | * | 4->A | C | 5->B |
|
---|
432 | * | 6->B | D | |
|
---|
433 | * ------------------------------------
|
---|
434 | *
|
---|
435 | * Uitzondering betreft als A de pointer in het begin is of als
|
---|
436 | * D de eind pointer is.
|
---|
437 | */
|
---|
438 | BubbleVakA_Vakje_pt = BubbleHulp_Vakje_pt->Vorige_Vakje_pt;
|
---|
439 | BubbleVakB_Vakje_pt = BubbleHulp_Vakje_pt;
|
---|
440 | BubbleVakC_Vakje_pt = BubbleHulp_Vakje_pt->Volgende_Vakje_pt;
|
---|
441 | BubbleVakD_Vakje_pt = BubbleHulp_Vakje_pt->Volgende_Vakje_pt->Volgende_Vakje_pt;
|
---|
442 |
|
---|
443 | //Pointer 1,2
|
---|
444 | if (BubbleVakA_Vakje_pt == NULL) {
|
---|
445 | Eerste_Vakje_pt = BubbleVakC_Vakje_pt;
|
---|
446 | BubbleVakC_Vakje_pt->Vorige_Vakje_pt = NULL;
|
---|
447 | }
|
---|
448 | else {
|
---|
449 | BubbleVakA_Vakje_pt->Volgende_Vakje_pt = BubbleVakC_Vakje_pt;
|
---|
450 | BubbleVakC_Vakje_pt->Vorige_Vakje_pt = BubbleVakA_Vakje_pt;
|
---|
451 | } //end if
|
---|
452 |
|
---|
453 | //Pointer 3,4
|
---|
454 | BubbleVakB_Vakje_pt->Vorige_Vakje_pt = BubbleVakC_Vakje_pt;
|
---|
455 | BubbleVakC_Vakje_pt->Volgende_Vakje_pt = BubbleVakB_Vakje_pt;
|
---|
456 |
|
---|
457 | //Pointer 5,6
|
---|
458 | if (BubbleVakD_Vakje_pt == NULL) {
|
---|
459 | Laatste_Vakje_pt = BubbleVakB_Vakje_pt;
|
---|
460 | BubbleVakB_Vakje_pt->Volgende_Vakje_pt = NULL;
|
---|
461 | BubbleStop_Vakje_pt = BubbleVakB_Vakje_pt;
|
---|
462 | }
|
---|
463 | else {
|
---|
464 | BubbleVakD_Vakje_pt->Vorige_Vakje_pt = BubbleVakB_Vakje_pt;
|
---|
465 | BubbleVakB_Vakje_pt->Volgende_Vakje_pt = BubbleVakD_Vakje_pt;
|
---|
466 | } //end if
|
---|
467 |
|
---|
468 | //In het geval dat het vakje van de stop pointer kleiner is als het vakje ervoor,
|
---|
469 | //zal de stop pointer over het nieuwe vakje moeten vallen, anders komt hij het stop
|
---|
470 | //teken nooit tegen.
|
---|
471 | // A B C D
|
---|
472 | // 5 9 7 10
|
---|
473 | // ^ ^
|
---|
474 | // | |Stop pointer
|
---|
475 | // | Huidige Waarde
|
---|
476 | //
|
---|
477 | // ZONDER AANPASSING MET AANPASSING
|
---|
478 | //
|
---|
479 | // A C B D A C B D
|
---|
480 | // 5 7 9 10 5 7 9 10
|
---|
481 | // ^ ^ ^ ^
|
---|
482 | // | |Huidige Waarde | |Huidige Waarde + Stop Pointer
|
---|
483 | // | Stop Pointer |
|
---|
484 | //
|
---|
485 | if (BubbleStop_Vakje_pt == BubbleVakC_Vakje_pt) {
|
---|
486 | BubbleStop_Vakje_pt = BubbleVakB_Vakje_pt;
|
---|
487 | } //end if
|
---|
488 |
|
---|
489 | Verwisselingen_int++;
|
---|
490 | }
|
---|
491 | else {
|
---|
492 | BubbleHulp_Vakje_pt = BubbleHulp_Vakje_pt->Volgende_Vakje_pt;
|
---|
493 | } //end if
|
---|
494 | } //end while
|
---|
495 | BubbleHulp_Vakje_pt = Eerste_Vakje_pt;
|
---|
496 | BubbleStop_Vakje_pt = BubbleStop_Vakje_pt->Vorige_Vakje_pt;
|
---|
497 | } //end while
|
---|
498 | return (Verwisselingen_int);
|
---|
499 | } //end listvak::sorteren
|
---|
500 |
|
---|
501 | void listvak::merge(listvak * L1, listvak * L2) {
|
---|
502 | bool Toevoegen_bool = true; //zolang true bestaan er nog waardes die toegevoegd moeten worden
|
---|
503 |
|
---|
504 | Vakje * HulpL1_Vakje_pt = L1->Laatste_Vakje_pt; //pointer die bijhoudt waar we in L1 zijn
|
---|
505 | Vakje * HulpL2_Vakje_pt = L2->Laatste_Vakje_pt; //pointer die bijhoudt waar we in L2 zijn
|
---|
506 |
|
---|
507 | Vakje * VakjeNew_Vakje_pt; //pointer bij gebruikt wordt bij het maken van nieuwe vakjes
|
---|
508 |
|
---|
509 | while (Toevoegen_bool) {
|
---|
510 | VakjeNew_Vakje_pt = new Vakje;
|
---|
511 | if (Eerste_Vakje_pt != NULL) {
|
---|
512 | VakjeNew_Vakje_pt->Volgende_Vakje_pt = Eerste_Vakje_pt;
|
---|
513 | VakjeNew_Vakje_pt->Volgende_Vakje_pt->Vorige_Vakje_pt = VakjeNew_Vakje_pt;
|
---|
514 | }
|
---|
515 | else {
|
---|
516 | Laatste_Vakje_pt = VakjeNew_Vakje_pt;
|
---|
517 | } //end if
|
---|
518 | Eerste_Vakje_pt = VakjeNew_Vakje_pt;
|
---|
519 |
|
---|
520 | if ((HulpL1_Vakje_pt != NULL) && (HulpL2_Vakje_pt != NULL)) { //beiden bevatten nog een getal
|
---|
521 | if (HulpL1_Vakje_pt->Getal_int > HulpL2_Vakje_pt->Getal_int) {
|
---|
522 | VakjeNew_Vakje_pt->Getal_int = HulpL1_Vakje_pt->Getal_int;
|
---|
523 | HulpL1_Vakje_pt = HulpL1_Vakje_pt->Vorige_Vakje_pt;
|
---|
524 | }
|
---|
525 | else {
|
---|
526 | VakjeNew_Vakje_pt->Getal_int = HulpL2_Vakje_pt->Getal_int;
|
---|
527 | HulpL2_Vakje_pt = HulpL2_Vakje_pt->Vorige_Vakje_pt;
|
---|
528 | } //end if
|
---|
529 | }
|
---|
530 | else if (HulpL1_Vakje_pt != NULL) { //L2 leeg, enkel waardes uit L1 plakken
|
---|
531 | VakjeNew_Vakje_pt->Getal_int = HulpL1_Vakje_pt->Getal_int;
|
---|
532 | HulpL1_Vakje_pt = HulpL1_Vakje_pt->Vorige_Vakje_pt;
|
---|
533 | }
|
---|
534 | else if (HulpL2_Vakje_pt != NULL) { //L1 leeg, enkel waardes uit L2 plakken
|
---|
535 | VakjeNew_Vakje_pt->Getal_int = HulpL2_Vakje_pt->Getal_int;
|
---|
536 | HulpL2_Vakje_pt = HulpL2_Vakje_pt->Vorige_Vakje_pt;
|
---|
537 | }
|
---|
538 | else { //alles leeg, 'over en sluiten'
|
---|
539 | Toevoegen_bool = false;
|
---|
540 | } //end if
|
---|
541 | } //end while
|
---|
542 | } //end listvak::merge
|
---|
543 |
|
---|
544 | //vernietig de list
|
---|
545 | void listvak::vernietig() {
|
---|
546 | Vakje * Hulp_Vakje_pt;
|
---|
547 | while (Eerste_Vakje_pt != NULL) {
|
---|
548 | Hulp_Vakje_pt = Eerste_Vakje_pt->Volgende_Vakje_pt;
|
---|
549 | delete Eerste_Vakje_pt;
|
---|
550 | Eerste_Vakje_pt = Hulp_Vakje_pt;
|
---|
551 | } //end while;
|
---|
552 | Laatste_Vakje_pt = NULL;
|
---|
553 | } //end listvak::vernietig
|
---|
554 |
|
---|
555 | //
|
---|
556 | // === END SORTEREN ===
|
---|
557 | //
|
---|
558 |
|
---|
559 |
|
---|
560 | //
|
---|
561 | // === MENU GEDEELTE ===
|
---|
562 | //
|
---|
563 |
|
---|
564 |
|
---|
565 | //scherm leegmaken
|
---|
566 | void clearall() {
|
---|
567 | system("cls"); //maakt scherm leeg in Dos
|
---|
568 | system("clear"); //maakt scherm leeg
|
---|
569 | cin.clear(); //maak invoerbuffer leeg
|
---|
570 | cin.ignore(INT_MAX, '\n'); //alles was nog te wachten staat negeren
|
---|
571 | }
|
---|
572 |
|
---|
573 |
|
---|
574 | void SubMenuMasterMind() {
|
---|
575 | MastermindMain();
|
---|
576 | } //end SubMenuMasterMind
|
---|
577 |
|
---|
578 | void SubMenu3keerplus1() {
|
---|
579 | char MenuKeuze = ' ';
|
---|
580 | int lengte, getal;
|
---|
581 | grootgetal BigGetal;
|
---|
582 |
|
---|
583 | while (true) {
|
---|
584 | cout << " --------------------- 3x+1 ----------------- " << endl
|
---|
585 | << "Maak een keuze uit de volgende opties: " << endl
|
---|
586 | << "- Bepaal de lengte, random generatie getal (R/r)" << endl
|
---|
587 | << "- Bepaald de lengte, bepaal het getal zelf (Z/z) " << endl
|
---|
588 | << "- Terug naar Het hoofdmenu (T/t) " << endl
|
---|
589 | << " " << endl
|
---|
590 | << "Keuze: " << endl; cin >> MenuKeuze;
|
---|
591 | clearall();
|
---|
592 |
|
---|
593 | switch (MenuKeuze) {
|
---|
594 | case 't': case 'T': //Terug naar Hoofdmenu
|
---|
595 | return;
|
---|
596 | break;
|
---|
597 | case 'r': case 'R': //Vul L1 random
|
---|
598 | cout << "Vul het aantal elementen in: ";
|
---|
599 | cin >> lengte;
|
---|
600 | BigGetal.vulrandom(lengte);
|
---|
601 | BigGetal.vermoedentest();
|
---|
602 | break;
|
---|
603 | case 'z': case 'Z': //Vul L2 random
|
---|
604 | cout << "Vul het aantal elementen in: ";
|
---|
605 | cin >> lengte;
|
---|
606 | cout << endl;
|
---|
607 | cout << "Vul het getal in: ";
|
---|
608 | cin >> getal;
|
---|
609 | BigGetal.vul(getal,lengte);
|
---|
610 | BigGetal.vermoedentest();
|
---|
611 | break;
|
---|
612 | default:
|
---|
613 | cout << "GEEN GOEDE INVOER ..." << endl;
|
---|
614 | break;
|
---|
615 | } // end switch
|
---|
616 | } // end while
|
---|
617 | } // end Menu3keerplus1
|
---|
618 |
|
---|
619 |
|
---|
620 | void SubMenuSorteren() {
|
---|
621 | char Menukeuze = ' ';
|
---|
622 | listvak L1,L2,L3;
|
---|
623 |
|
---|
624 | while (true) {
|
---|
625 | cout << " ------------- Sorteren --------------- " << endl
|
---|
626 | << "Maak een keuze uit de volgende opties: " << endl
|
---|
627 | << "- Vul L1 random (A/a) " << endl
|
---|
628 | << "- Vul L2 random (B/b) " << endl
|
---|
629 | << "- Vul L3 random (C/c) " << endl
|
---|
630 | << "- Vernietig L1 (D/d) " << endl
|
---|
631 | << "- Vernietig L2 (E/e) " << endl
|
---|
632 | << "- Vernietig L3 (F/f) " << endl
|
---|
633 | << "- Bubblesort L1 (G/g) " << endl
|
---|
634 | << "- Bubblesort L2 (H/h) " << endl
|
---|
635 | << "- Bubblesort L3 (I/i) " << endl
|
---|
636 | << "- Merge L1 en L2 naar L3 (J/j) " << endl
|
---|
637 | << "- Hierbij wordt L1,L2 gesorteerd en L3 gewist " << endl
|
---|
638 | << "- Terug naar Algoritmen (T/t) " << endl
|
---|
639 | << " " << endl
|
---|
640 | << "Keuze: ";
|
---|
641 |
|
---|
642 | cin >> Menukeuze;
|
---|
643 | clearall();
|
---|
644 |
|
---|
645 | switch (Menukeuze) {
|
---|
646 | case 'a': case 'A': //Vul L1 random
|
---|
647 | L1.randomlist();
|
---|
648 | L1.drukaf_r_l();
|
---|
649 | break;
|
---|
650 | case 'b': case 'B': //Vul L2 random
|
---|
651 | L2.randomlist();
|
---|
652 | L2.drukaf_r_l();
|
---|
653 | break;
|
---|
654 | case 'c': case 'C': //Vul L3 random
|
---|
655 | L3.randomlist();
|
---|
656 | L3.drukaf_r_l();
|
---|
657 | break;
|
---|
658 | case 'd': case 'D': //Vernietig L1
|
---|
659 | L1.vernietig();
|
---|
660 | break;
|
---|
661 | case 'e': case 'E': //Vernietig L2
|
---|
662 | L2.vernietig();
|
---|
663 | break;
|
---|
664 | case 'f': case 'F': //Vernietig L3
|
---|
665 | L3.vernietig();
|
---|
666 | break;
|
---|
667 | case 'g': case 'G': //Bubblesort L1
|
---|
668 | L1.sorteren();
|
---|
669 | L1.drukaf_l_r();
|
---|
670 | cout << endl << endl;
|
---|
671 | break;
|
---|
672 | case 'h': case 'H': //Bubblesort L2
|
---|
673 | L2.sorteren();
|
---|
674 | L2.drukaf_l_r();
|
---|
675 | cout << endl << endl;
|
---|
676 | break;
|
---|
677 | case 'i': case 'I': //Bubblesort L3
|
---|
678 | L3.sorteren();
|
---|
679 | L3.drukaf_l_r();
|
---|
680 | cout << endl << endl;
|
---|
681 | break;
|
---|
682 | case 'j': case 'J': //Merge L1 en L2 naar L3
|
---|
683 | L1.sorteren();
|
---|
684 | L2.sorteren();
|
---|
685 | L3.vernietig();
|
---|
686 | L3.merge(&L1,&L2);
|
---|
687 | cout << endl << endl;
|
---|
688 | L3.drukaf_l_r();
|
---|
689 | cout << endl;
|
---|
690 | break;
|
---|
691 | case 't': case 'T': //Naar AlgoritmeMenu
|
---|
692 | return;
|
---|
693 | break;
|
---|
694 | default:
|
---|
695 | cout << "GEEN GOEDE INVOER ..." << endl;
|
---|
696 | break;
|
---|
697 | } // end switch
|
---|
698 | } // end while
|
---|
699 | } //end SubMenuSorteren
|
---|
700 |
|
---|
701 |
|
---|
702 | void SubMenuAlgoritmen() {
|
---|
703 | char Menukeuze = ' ';
|
---|
704 |
|
---|
705 | while (true) {
|
---|
706 | cout << " ------------- Algoritmen ------------- " << endl
|
---|
707 | << "Maak een keuze uit de volgende opties: " << endl
|
---|
708 | << "->Sorteren (S/s) " << endl
|
---|
709 | << "->3x+1 (X/x) " << endl
|
---|
710 | << "->Terug naar het Hoofdmenu (T/t) " << endl
|
---|
711 | << " " << endl
|
---|
712 | << "Keuze: ";
|
---|
713 | cin >> Menukeuze;
|
---|
714 | clearall();
|
---|
715 |
|
---|
716 | switch (Menukeuze) {
|
---|
717 | case 's': case 'S':
|
---|
718 | SubMenuSorteren();
|
---|
719 | break;
|
---|
720 | case 'x': case 'X':
|
---|
721 | SubMenu3keerplus1();
|
---|
722 | break;
|
---|
723 | case 't': case 'T':
|
---|
724 | return;
|
---|
725 | break;
|
---|
726 | default:
|
---|
727 | cout << "GEEN GOEDE INVOER" << endl
|
---|
728 | << endl;
|
---|
729 | break;
|
---|
730 | } // end switch
|
---|
731 | } // end while
|
---|
732 |
|
---|
733 | } // end SubMenuAlgoritmen
|
---|
734 |
|
---|
735 |
|
---|
736 | void HoofdMenu() {
|
---|
737 | char Menukeuze = '';
|
---|
738 | while (true) { //oneindige loop
|
---|
739 | cout << "-----Hoofdmenu----" << endl
|
---|
740 | << "->Algoritmen (a/A)" << endl
|
---|
741 | << "->Mastermind (m/M)" << endl
|
---|
742 | << "->Stoppen (s/S)" << endl
|
---|
743 | << " " << endl
|
---|
744 | << "Keuze: ";
|
---|
745 | cin >> Menukeuze;
|
---|
746 | clearall();
|
---|
747 |
|
---|
748 | switch (Menukeuze) {
|
---|
749 | case 'a': case 'A': //sub menu Algoritmen
|
---|
750 | SubMenuAlgoritmen();
|
---|
751 | break;
|
---|
752 | case 'm': case 'M': //Mastermind
|
---|
753 | SubMenuMasterMind();
|
---|
754 | break;
|
---|
755 | case 's': case 'S': // Stoppen
|
---|
756 | cout << "Goodbye" << endl;
|
---|
757 | return;
|
---|
758 | break;
|
---|
759 | default:
|
---|
760 | cout << "GEEN GOEDE INVOER" << endl
|
---|
761 | << endl;
|
---|
762 | } //end switch
|
---|
763 | } // end while
|
---|
764 | } // end HoofdMenu
|
---|
765 |
|
---|
766 | //
|
---|
767 | // === END MENU GEDEELTE ===
|
---|
768 | //
|
---|
769 |
|
---|
770 |
|
---|
771 | int main() {
|
---|
772 | clearall();
|
---|
773 | HoofdMenu();
|
---|
774 | }
|
---|
775 |
|
---|