source: liacs/pm/backup/3xplus1.cc@ 4

Last change on this file since 4 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: 3.2 KB
RevLine 
[2]1#include <iostream>
2#include <ctime>
3using namespace std;
4
5const int MAX = 25;
6
7//Het maken van een random getal
8int randomgetal10000() { // tussen 0 en 9999
9 static int getal = time (NULL) % 10000;
10 getal = ( 621 * getal + 1 ) % 10000;
11 return getal;
12}
13
14class grootgetal {
15 public:
16 grootgetal();
17 ~grootgetal() { };
18 void vul(int aantal, int deelgetal);
19 void vulrandom(int aantal);
20 bool testop1();
21 bool iseven(int i);
22 bool maal3plus1();
23 void deeldoor2();
24 void vermoedentest();
25 void drukaf();
26 private:
27 int groot[MAX];
28};
29
30grootgetal::grootgetal() {
31 for (int i = 0; i < MAX; i++) {
32 groot[i] = 0;
33 } // end for
34} // end grootgetal::grootgetal
35
36void grootgetal::vul(int deelgetal, int aantal) {
37 for(int i = 0; i < aantal; i++) {
38 groot[i] = deelgetal;
39 } //end for
40} //end grootgetal::vul
41
42void grootgetal::vulrandom(int aantal) {
43 for (int i = 0; i < aantal; i++) {
44 groot[i] = randomgetal10000();
45 } // end for
46} // end grootgetal::vulrandom
47
48bool grootgetal::iseven(int i) {
49 return(not(groot[i] % 2));
50} // end grootgetal::iseven
51
52void grootgetal::deeldoor2() {
53 int rest = 0;
54 for (int i = MAX - 1; i >= 0; i--) {
55 if (iseven(i)) {
56 groot[i] = groot[i]/2 + rest;
57 rest = 0;
58 }
59 else {
60 groot[i] = groot[i]/2 + rest;
61 rest = 5000;
62 } // end if
63 } // end for
64} // end grootgetal::deeldoor2
65
66bool grootgetal::maal3plus1() {
67 int rest = 1; // Alvast +1
68
69 for(int i = 0; i < MAX; i++) {
70 groot[i] = (groot[i] * 3) + rest;
71 if(groot[i] >= 10000){
72 rest = (groot[i] / 10000);
73 groot[i] = (groot[i] - (rest * 10000));
74 }
75 else {
76 rest = 0;
77 } //end if
78 } //end for
79
80 if (groot[MAX] > 9999) {
81 return (false);
82 }
83 else {
84 return (true);
85 } //end if
86
87} //end grootgetal::maal3plus1
88
89bool grootgetal::testop1() {
90 if (groot[0] == 1) {
91 for (int i = 1; i < MAX - 1; i++) {
92 if (groot[i] != 0) {
93 return (false);
94 } //end if
95 } //end for
96 return (true);
97 }
98 return (false);
99} //end grootgetal::testop1
100
101void grootgetal::vermoedentest() {
102 int aantalintaraties = 0; //aantal keer (3x+1) (/2) noodzakelijk
103 while (not(testop1())) {
104
105 if ((aantalintaraties % 100) == 0) {
106 cout << "Stap ";
107 cout.width(6);
108 cout.fill(' ');
109 cout << aantalintaraties << ": ";
110 drukaf();
111 cout << endl;
112 } //end if
113
114 if (iseven(0)) {
115 deeldoor2();
116 }
117 else {
118 maal3plus1();
119 } //end if
120
121 aantalintaraties++;
122
123 } //end while
124 cout << "Totaal aantal intaraties: " << aantalintaraties << endl;;
125} //end grootgetal::vermoedentest()
126
127void grootgetal::drukaf() {
128 cout << groot[MAX - 1];
129 for (int i = MAX - 2; i >= 0; i--) {
130 if (groot[i] > 999) {
131 cout << groot[i];
132 }
133 else if (groot[i] > 99) {
134 cout << "0" << groot[i];
135 }
136 else if (groot[i] > 9) {
137 cout << "00" << groot[i];
138 }
139 else {
140 cout << "000" << groot[i];
141 }//end if
142 } //end for
143} //end grootgetal::drukaf
144
145int main() {
146 cout << endl;
147 grootgetal BigGetal;
148 BigGetal.vul(123,5);
149 cout << endl;
150 BigGetal.vermoedentest();
151 cout << endl;
152 BigGetal.vulrandom(19);
153 BigGetal.vermoedentest();
154}
Note: See TracBrowser for help on using the repository browser.