source: liacs/pm/backup/menu.cc@ 236

Last change on this file since 236 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: 24.3 KB
Line 
1//Programmeermethoden opdracht 3
2//Gemaakt door Rick van der Zwet & Pascal de Vos
3//
4//IVM met versie problemen zult u in clearall() en in de main() de juiste functie moeten commenten
5
6
7
8#include <iostream>
9#include <cstdio>
10#include <ctime>
11#include <climits>
12
13using namespace std;
14
15//
16//Variable voor het 3x+1 programma
17//
18const int MAX = 25;
19
20
21
22//Het maken van een random getal
23int randomgetal(int x) { // tussen 0 en x
24 static int getal = time (NULL) % x;
25 getal = ( 621 * getal + 1 ) % x;
26 return getal;
27}
28
29//
30// === SORTEREN ===
31//
32
33class grootgetal {
34 public:
35 grootgetal();
36 ~grootgetal() { };
37 void vul(int aantal, int deelgetal);
38 void vulrandom(int aantal);
39 bool testop1();
40 bool iseven(int i);
41 bool maal3plus1();
42 void deeldoor2();
43 void vermoedentest();
44 void drukaf();
45 private:
46 int groot[MAX];
47};
48
49grootgetal::grootgetal() {
50 for (int i = 0; i < MAX; i++) {
51 groot[i] = 0;
52 } // end for
53} // end grootgetal::grootgetal
54
55void grootgetal::vul(int deelgetal, int aantal) {
56 for(int i = 0; i < aantal; i++) {
57 groot[i] = deelgetal;
58 } //end for
59} //end grootgetal::vul
60
61void grootgetal::vulrandom(int aantal) {
62 for (int i = 0; i < aantal; i++) {
63 groot[i] = randomgetal(10000);
64 } // end for
65} // end grootgetal::vulrandom
66
67bool grootgetal::iseven(int i) {
68 return(not(groot[i] % 2));
69} // end grootgetal::iseven
70
71void grootgetal::deeldoor2() {
72 int rest = 0;
73 for (int i = MAX - 1; i >= 0; i--) {
74 if (iseven(i)) {
75 groot[i] = groot[i]/2 + rest;
76 rest = 0;
77 }
78 else {
79 groot[i] = groot[i]/2 + rest;
80 rest = 5000;
81 } // end if
82 } // end for
83} // end grootgetal::deeldoor2
84
85bool grootgetal::maal3plus1() {
86 int rest = 1; // Alvast +1
87
88 for(int i = 0; i < MAX; i++) {
89 groot[i] = (groot[i] * 3) + rest;
90 if(groot[i] >= 10000){
91 rest = (groot[i] / 10000);
92 groot[i] = (groot[i] - (rest * 10000));
93 }
94 else {
95 rest = 0;
96 } //end if
97 } //end for
98
99 if (groot[MAX] > 9999) {
100 return (false);
101 }
102 else {
103 return (true);
104 } //end if
105
106} //end grootgetal::maal3plus1
107
108bool grootgetal::testop1() {
109 if (groot[0] == 1) {
110 for (int i = 1; i < MAX - 1; i++) {
111 if (groot[i] != 0) {
112 return (false);
113 } //end if
114 } //end for
115 return (true);
116 }
117 return (false);
118} //end grootgetal::testop1
119
120void grootgetal::vermoedentest() {
121 int aantalintaraties = 1; //aantal keer (3x+1) (/2) noodzakelijk
122 //stap 0 bestaat niet volgens de PM opgave, dus gelijk stap 1.
123 //hoewel strikt genomen aantalintaraties op 0 begint.
124 cout << "Stap ";
125 cout.width(6);
126 cout.fill(' ');
127 cout << aantalintaraties - 1 << ": ";
128 drukaf();
129 cout << endl;
130 //end stap error fix
131
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 Vakje( );
331 int Getal_int; //Waarde van het vakje
332 Vakje * Volgende_Vakje_pt; //Zijn 'rechterbuur'
333 Vakje * Vorige_Vakje_pt; //Zijn 'linkbuur'
334};
335
336Vakje::Vakje() {
337 Getal_int = 0;
338 Volgende_Vakje_pt = NULL;
339 Vorige_Vakje_pt = NULL;
340}
341
342class listvak {
343 public:
344 //default constuctor (NULL pointers)
345 listvak( );
346 //destructor: niks doen
347 ~listvak( ) { };
348 //creer de list van random lengte met randomgetallen
349 void randomlist();
350 //druk de list van links naar rechts af
351 void drukaf_l_r();
352 //druk de list van recht naar links af
353 void drukaf_r_l();
354 //sorteer de list, volgens bubblesort methode
355 int sorteren();
356 //merge L1 en L2 met opvolgend principe
357 void merge(listvak * L1, listvak * L2);
358 //vernietig de list.
359 void vernietig();
360 private:
361 Vakje * Eerste_Vakje_pt; //pointer naar het eerste vakje
362 Vakje * Laatste_Vakje_pt; //pointer naar het laatste vakje
363};
364
365listvak::listvak( ) {
366 Eerste_Vakje_pt = NULL;
367 Laatste_Vakje_pt = NULL;
368}
369
370//voeg een AantalGetallen_int getallen toe aan de List die door Lbgin wordt gepointerd.
371void listvak::randomlist() {
372 Vakje * VakjeNew_Vakje_pt;
373
374 for (int i = 0; i < randomgetal(1000); i++) {
375 VakjeNew_Vakje_pt = new Vakje;
376 VakjeNew_Vakje_pt->Getal_int = randomgetal(10000);
377 if (Eerste_Vakje_pt != NULL) {
378 VakjeNew_Vakje_pt->Volgende_Vakje_pt = Eerste_Vakje_pt;
379 VakjeNew_Vakje_pt->Volgende_Vakje_pt->Vorige_Vakje_pt = VakjeNew_Vakje_pt;
380 }
381 else {
382 Laatste_Vakje_pt = VakjeNew_Vakje_pt;
383 } //end if
384
385 Eerste_Vakje_pt = VakjeNew_Vakje_pt;
386 } //end for
387} //end listvak::randomlist
388
389//druk de list af van links naar rechts
390void listvak::drukaf_l_r() {
391 Vakje * Hulp_Vakje_pt = Eerste_Vakje_pt;
392 while (Hulp_Vakje_pt != NULL) {
393 cout << Hulp_Vakje_pt->Getal_int << " ";
394 Hulp_Vakje_pt = Hulp_Vakje_pt->Volgende_Vakje_pt;
395 } //end while
396} //end listvak::drukaf_lr
397
398//druk de list af van rechts naar links
399void listvak::drukaf_r_l() {
400 Vakje * Hulp_Vakje_pt = Laatste_Vakje_pt;
401 while (Hulp_Vakje_pt != NULL) {
402 cout << Hulp_Vakje_pt->Getal_int << " ";
403 Hulp_Vakje_pt = Hulp_Vakje_pt->Vorige_Vakje_pt;
404 } //end while
405} //end listvak::drukaf_rl
406
407//sorteren volgens de bubblesort methode (grootste getal achteraan)
408//uitvoer: aantal verwisselingen die plaatsgevonden hebben.
409int listvak::sorteren() {
410 int Verwisselingen_int = 0;
411 Vakje * BubbleHulp_Vakje_pt = Eerste_Vakje_pt; //Dit is het vakje dat gechecked wordt
412 Vakje * BubbleStop_Vakje_pt = Laatste_Vakje_pt; //Hierna hoeft niet meer gechecked worden
413 Vakje * BubbleVakA_Vakje_pt;
414 Vakje * BubbleVakB_Vakje_pt;
415 Vakje * BubbleVakC_Vakje_pt;
416 Vakje * BubbleVakD_Vakje_pt;
417
418 //geen waardes dus gelijk stoppen
419 if (Laatste_Vakje_pt == NULL) {
420 return(0);
421 }
422
423 while (BubbleStop_Vakje_pt->Vorige_Vakje_pt != NULL) {
424 while ( BubbleHulp_Vakje_pt != BubbleStop_Vakje_pt ) {
425 if (BubbleHulp_Vakje_pt->Getal_int > BubbleHulp_Vakje_pt->Volgende_Vakje_pt->Getal_int) {
426 /* Methode voor het omwisselen van vak B en C
427 * Oude situtatie
428 * ___________________________________
429 * | Vorige | Vak Nummer | Volgende |
430 * |========|=============|===========|
431 * | | A | 1->B |
432 * | 2->A | B | 3->C |
433 * | 4->B | C | 5->D |
434 * | 6->C | D | |
435 * ------------------------------------
436 *
437 * Nieuwe situatie
438 * ___________________________________
439 * | Vorige | Vak Nummer | Volgende |
440 * |========|=============|===========|
441 * | | A | 1->C |
442 * | 2->C | B | 3->D |
443 * | 4->A | C | 5->B |
444 * | 6->B | D | |
445 * ------------------------------------
446 *
447 * Uitzondering betreft als A de pointer in het begin is of als
448 * D de eind pointer is.
449 */
450 BubbleVakA_Vakje_pt = BubbleHulp_Vakje_pt->Vorige_Vakje_pt;
451 BubbleVakB_Vakje_pt = BubbleHulp_Vakje_pt;
452 BubbleVakC_Vakje_pt = BubbleHulp_Vakje_pt->Volgende_Vakje_pt;
453 BubbleVakD_Vakje_pt = BubbleHulp_Vakje_pt->Volgende_Vakje_pt->Volgende_Vakje_pt;
454
455 //Pointer 1,2
456 if (BubbleVakA_Vakje_pt == NULL) {
457 Eerste_Vakje_pt = BubbleVakC_Vakje_pt;
458 BubbleVakC_Vakje_pt->Vorige_Vakje_pt = NULL;
459 }
460 else {
461 BubbleVakA_Vakje_pt->Volgende_Vakje_pt = BubbleVakC_Vakje_pt;
462 BubbleVakC_Vakje_pt->Vorige_Vakje_pt = BubbleVakA_Vakje_pt;
463 } //end if
464
465 //Pointer 3,4
466 BubbleVakB_Vakje_pt->Vorige_Vakje_pt = BubbleVakC_Vakje_pt;
467 BubbleVakC_Vakje_pt->Volgende_Vakje_pt = BubbleVakB_Vakje_pt;
468
469 //Pointer 5,6
470 if (BubbleVakD_Vakje_pt == NULL) {
471 Laatste_Vakje_pt = BubbleVakB_Vakje_pt;
472 BubbleVakB_Vakje_pt->Volgende_Vakje_pt = NULL;
473 BubbleStop_Vakje_pt = BubbleVakB_Vakje_pt;
474 }
475 else {
476 BubbleVakD_Vakje_pt->Vorige_Vakje_pt = BubbleVakB_Vakje_pt;
477 BubbleVakB_Vakje_pt->Volgende_Vakje_pt = BubbleVakD_Vakje_pt;
478 } //end if
479
480 //In het geval dat het vakje van de stop pointer kleiner is als het vakje ervoor,
481 //zal de stop pointer over het nieuwe vakje moeten vallen, anders komt hij het stop
482 //teken nooit tegen.
483 // A B C D
484 // 5 9 7 10
485 // ^ ^
486 // | |Stop pointer
487 // | Huidige Waarde
488 //
489 // ZONDER AANPASSING MET AANPASSING
490 //
491 // A C B D A C B D
492 // 5 7 9 10 5 7 9 10
493 // ^ ^ ^ ^
494 // | |Huidige Waarde | |Huidige Waarde + Stop Pointer
495 // | Stop Pointer |
496 //
497 if (BubbleStop_Vakje_pt == BubbleVakC_Vakje_pt) {
498 BubbleStop_Vakje_pt = BubbleVakB_Vakje_pt;
499 } //end if
500
501 Verwisselingen_int++;
502 }
503 else {
504 BubbleHulp_Vakje_pt = BubbleHulp_Vakje_pt->Volgende_Vakje_pt;
505 } //end if
506 } //end while
507 BubbleHulp_Vakje_pt = Eerste_Vakje_pt;
508 BubbleStop_Vakje_pt = BubbleStop_Vakje_pt->Vorige_Vakje_pt;
509 } //end while
510 return (Verwisselingen_int);
511} //end listvak::sorteren
512
513void listvak::merge(listvak * L1, listvak * L2) {
514 bool Toevoegen_bool = true; //zolang true bestaan er nog waardes die toegevoegd moeten worden
515
516 Vakje * HulpL1_Vakje_pt = L1->Laatste_Vakje_pt; //pointer die bijhoudt waar we in L1 zijn
517 Vakje * HulpL2_Vakje_pt = L2->Laatste_Vakje_pt; //pointer die bijhoudt waar we in L2 zijn
518
519 Vakje * VakjeNew_Vakje_pt; //pointer bij gebruikt wordt bij het maken van nieuwe vakjes
520
521 while (Toevoegen_bool) {
522 if ((HulpL1_Vakje_pt != NULL) || (HulpL2_Vakje_pt !=NULL)) { //er zijn nog waardes aanwezig
523 VakjeNew_Vakje_pt = new Vakje;
524
525 if (Eerste_Vakje_pt != NULL) {
526 VakjeNew_Vakje_pt->Volgende_Vakje_pt = Eerste_Vakje_pt;
527 VakjeNew_Vakje_pt->Volgende_Vakje_pt->Vorige_Vakje_pt = VakjeNew_Vakje_pt;
528 }
529 else if (Laatste_Vakje_pt == NULL) {
530 Laatste_Vakje_pt = VakjeNew_Vakje_pt;
531 } //end if
532 Eerste_Vakje_pt = VakjeNew_Vakje_pt;
533
534 if ((HulpL1_Vakje_pt != NULL) && (HulpL2_Vakje_pt != NULL)) { //beiden bevatten nog een getal
535 if (HulpL1_Vakje_pt->Getal_int > HulpL2_Vakje_pt->Getal_int) {
536 VakjeNew_Vakje_pt->Getal_int = HulpL1_Vakje_pt->Getal_int;
537 HulpL1_Vakje_pt = HulpL1_Vakje_pt->Vorige_Vakje_pt;
538 }
539 else {
540 VakjeNew_Vakje_pt->Getal_int = HulpL2_Vakje_pt->Getal_int;
541 HulpL2_Vakje_pt = HulpL2_Vakje_pt->Vorige_Vakje_pt;
542 } //end if
543 }
544 else if (HulpL1_Vakje_pt != NULL) { //L2 leeg, enkel waardes uit L1 plakken
545 VakjeNew_Vakje_pt->Getal_int = HulpL1_Vakje_pt->Getal_int;
546 HulpL1_Vakje_pt = HulpL1_Vakje_pt->Vorige_Vakje_pt;
547 }
548 else if (HulpL2_Vakje_pt != NULL) { //L1 leeg, enkel waardes uit L2 plakken
549 VakjeNew_Vakje_pt->Getal_int = HulpL2_Vakje_pt->Getal_int;
550 HulpL2_Vakje_pt = HulpL2_Vakje_pt->Vorige_Vakje_pt;
551 }
552 }
553 else { //alles leeg, 'over en sluiten'
554 Toevoegen_bool = false;
555 } //end if
556 } //end while
557} //end listvak::merge
558
559//vernietig de list
560void listvak::vernietig() {
561 Vakje * Hulp_Vakje_pt;
562 while (Eerste_Vakje_pt != NULL) {
563 Hulp_Vakje_pt = Eerste_Vakje_pt->Volgende_Vakje_pt;
564 delete Eerste_Vakje_pt;
565 Eerste_Vakje_pt = Hulp_Vakje_pt;
566 } //end while;
567 Laatste_Vakje_pt = NULL;
568} //end listvak::vernietig
569
570//
571// === END SORTEREN ===
572//
573
574
575//
576// === MENU GEDEELTE ===
577//
578
579
580//scherm leegmaken, ivm met verschillen tussen DOS en UNIX de juiste commenten
581void clearall() {
582 system("cls"); //maakt scherm leeg in Dos
583 system("clear"); //maakt scherm leeg
584 cin.clear(); //maak invoerbuffer leeg
585 cin.ignore(INT_MAX, '\n'); //alles was nog te wachten staat negeren
586}
587
588
589void SubMenuMasterMind() {
590 MastermindMain();
591} //end SubMenuMasterMind
592
593void SubMenu3keerplus1() {
594 char MenuKeuze = ' ';
595 int lengte, getal;
596 grootgetal BigGetal;
597
598 while (true) {
599 cout << " --------------------- 3x+1 ----------------- " << endl
600 << "Maak een keuze uit de volgende opties: " << endl
601 << "- Bepaal de lengte, random generatie getal (R/r)" << endl
602 << "- Bepaald de lengte, bepaal het getal zelf (Z/z) " << endl
603 << "- Terug naar Het hoofdmenu (T/t) " << endl
604 << " " << endl
605 << "Keuze: "; cin >> MenuKeuze;
606 clearall();
607
608 switch (MenuKeuze) {
609 case 't': case 'T': //Terug naar Hoofdmenu
610 return;
611 break;
612 case 'r': case 'R': //Vul L1 random
613 cout << "Vul het aantal elementen in: ";
614 cin >> lengte;
615 BigGetal.vulrandom(lengte);
616 BigGetal.vermoedentest();
617 break;
618 case 'z': case 'Z': //Vul L2 random
619 cout << "Vul het aantal elementen in: ";
620 cin >> lengte;
621 cout << endl;
622 cout << "Vul het getal in: ";
623 cin >> getal;
624 BigGetal.vul(getal,lengte);
625 BigGetal.vermoedentest();
626 break;
627 default:
628 cout << "GEEN GOEDE INVOER ..." << endl;
629 break;
630 } // end switch
631 } // end while
632} // end Menu3keerplus1
633
634
635void SubMenuSorteren() {
636 char Menukeuze = ' ';
637 listvak L1,L2,L3;
638
639 while (true) {
640 cout << " ------------- Sorteren --------------- " << endl
641 << "Maak een keuze uit de volgende opties: " << endl
642 << "- Vul L1 random (A/a) " << endl
643 << "- Vul L2 random (B/b) " << endl
644 << "- Vul L3 random (C/c) " << endl
645 << "- Vernietig L1 (D/d) " << endl
646 << "- Vernietig L2 (E/e) " << endl
647 << "- Vernietig L3 (F/f) " << endl
648 << "- Bubblesort L1 (G/g) " << endl
649 << "- Bubblesort L2 (H/h) " << endl
650 << "- Bubblesort L3 (I/i) " << endl
651 << "- Merge L1 en L2 naar L3 (J/j) " << endl
652 << "- Hierbij wordt L1,L2 gesorteerd en L3 gewist " << endl
653 << "- Terug naar Algoritmen (T/t) " << endl
654 << " " << endl
655 << "Keuze: "; cin >> Menukeuze;
656 clearall();
657
658 switch (Menukeuze) {
659 case 'a': case 'A': //Vul L1 random
660 L1.randomlist();
661 L1.drukaf_r_l();
662 cout << endl <<endl;
663 break;
664 case 'b': case 'B': //Vul L2 random
665 L2.randomlist();
666 L2.drukaf_r_l();
667 cout << endl << endl;
668 break;
669 case 'c': case 'C': //Vul L3 random
670 L3.randomlist();
671 L3.drukaf_r_l();
672 cout << endl << endl;
673 break;
674 case 'd': case 'D': //Vernietig L1
675 L1.vernietig();
676 cout << "L1 vernietiged" << endl << endl;
677 break;
678 case 'e': case 'E': //Vernietig L2
679 L2.vernietig();
680 cout << "L2 vernietiged" << endl << endl;
681 break;
682 case 'f': case 'F': //Vernietig L3
683 L3.vernietig();
684 cout << "L3 vernietiged" << endl << endl;
685 break;
686 case 'g': case 'G': //Bubblesort L1
687 L1.sorteren();
688 L1.drukaf_l_r();
689 cout << endl << endl;
690 break;
691 case 'h': case 'H': //Bubblesort L2
692 L2.sorteren();
693 L2.drukaf_l_r();
694 cout << endl << endl;
695 break;
696 case 'i': case 'I': //Bubblesort L3
697 L3.sorteren();
698 L3.drukaf_l_r();
699 cout << endl << endl;
700 break;
701 case 'j': case 'J': //Merge L1 en L2 naar L3
702 L1.sorteren();
703 L2.sorteren();
704 L3.vernietig();
705 L3.merge(&L1,&L2);
706 cout << endl << endl;
707 L3.drukaf_l_r();
708 cout << endl;
709 break;
710 case 't': case 'T': //Naar AlgoritmeMenu
711 return;
712 break;
713 default:
714 cout << "GEEN GOEDE INVOER ..." << endl;
715 break;
716 } // end switch
717 } // end while
718} //end SubMenuSorteren
719
720
721void SubMenuAlgoritmen() {
722char Menukeuze = ' ';
723
724 while (true) {
725 cout << " ------------- Algoritmen ------------- " << endl
726 << "Maak een keuze uit de volgende opties: " << endl
727 << "->Sorteren (S/s) " << endl
728 << "->3x+1 (X/x) " << endl
729 << "->Terug naar het Hoofdmenu (T/t) " << endl
730 << " " << endl
731 << "Keuze: "; cin >> Menukeuze;
732 clearall();
733
734 switch (Menukeuze) {
735 case 's': case 'S':
736 SubMenuSorteren();
737 break;
738 case 'x': case 'X':
739 SubMenu3keerplus1();
740 break;
741 case 't': case 'T':
742 return;
743 break;
744 default:
745 cout << "GEEN GOEDE INVOER" << endl
746 << endl;
747 break;
748 } // end switch
749 } // end while
750
751} // end SubMenuAlgoritmen
752
753
754void HoofdMenu() {
755 char Menukeuze = ' ';
756 while (true) { //oneindige loop
757 cout << "-----Hoofdmenu----" << endl
758 << "->Algoritmen (a/A)" << endl
759 << "->Mastermind (m/M)" << endl
760 << "->Stoppen (s/S)" << endl
761 << " " << endl
762 << "Keuze: ";
763 cin >> Menukeuze;
764 clearall();
765
766 switch (Menukeuze) {
767 case 'a': case 'A': //sub menu Algoritmen
768 SubMenuAlgoritmen();
769 break;
770 case 'm': case 'M': //Mastermind
771 SubMenuMasterMind();
772 break;
773 case 's': case 'S': // Stoppen
774 cout << "Goodbye" << endl;
775 return;
776 break;
777 default:
778 cout << "GEEN GOEDE INVOER" << endl
779 << endl;
780 } //end switch
781 } // end while
782} // end HoofdMenu
783
784void IntroScherm() {
785 cout << "---------------------------------------------------" << endl
786 << "| University of Leiden (12-11-2004) |" << endl
787 << "| Programmeermethoden opdracht 3 |" << endl
788 << "| |" << endl
789 << "| Gemaakt door: |" << endl
790 << "| Rick van der Zwet |" << endl
791 << "| Pascal de Vos |" << endl
792 << "| |" << endl
793 << "| |" << endl
794 << "| Getest op: Unix systeem (Sun OS) |" << endl
795 << "| Windows XP (Dev-C++ 4.9.9.0) |" << endl
796 << "| Freebsd 5.2.1-r11 gcc version 3.3.3 |" << endl
797 << "---------------------------------------------------" << endl
798 << endl;
799}
800
801//
802// === END MENU GEDEELTE ===
803//
804
805
806int main() {
807 system("cls"); //maakt scherm leeg in Dos
808 system("clear"); //maakt scherm leeg
809 //geen cin.clear(), blijft ie op hangen
810IntroScherm();
811 HoofdMenu();
812}
813
Note: See TracBrowser for help on using the repository browser.