source: liacs/pm/menu.cc@ 7

Last change on this file since 7 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

  • Property svn:executable set to *
File size: 23.1 KB
Line 
1#include <iostream>
2#include <cstdio>
3#include <ctime>
4#include <climits>
5
6using namespace std;
7
8//
9//Variable voor het 3x+1 programma
10//
11const int MAX = 25;
12
13
14void 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
33int 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
43class 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
59grootgetal::grootgetal() {
60 for (int i = 0; i < MAX; i++) {
61 groot[i] = 0;
62 } // end for
63} // end grootgetal::grootgetal
64
65void 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
71void 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
77bool grootgetal::iseven(int i) {
78 return(not(groot[i] % 2));
79} // end grootgetal::iseven
80
81void 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
95bool 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
118bool 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
130void 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
156void 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)
186void 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
211void 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.
249void 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.
328class 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
335class 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
358listvak::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.
364void 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
383void 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
392void 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.
402int 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
501void 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
545void 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
566void 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
574void SubMenuMasterMind() {
575 MastermindMain();
576} //end SubMenuMasterMind
577
578void 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
620void 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
702void SubMenuAlgoritmen() {
703char 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
736void 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
771int main() {
772 clearall();
773 HoofdMenu();
774}
775
Note: See TracBrowser for help on using the repository browser.