source: liacs/pm/menu.cc@ 400

Last change on this file since 400 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.