[2] | 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 |
|
---|