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

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