// // Example 6.7. Hailstones problem: For positive input // integer n, do the following until n is 1: If n is even, // change n to n/2, else change n to 3 * n + 1 // #include #include int main(void) { int readn(void); void hailstones(int); int n; n = readn(); if (n <= 0) cout << n << " is not positive. Please run again.\n"; else hailstones(n); return 0; } // // Function to print directions and read a value for n // Pre: none // Post: Directions have been displayed, and // the user input has been returned. // int readn(void) { int n; cout << "This program prints the hailstone sequence.\n"; cout << "Please enter a positive integer: "; cin >> n; return n; } // // Given a positive integer n, function to print hailstone // sequence with step numbers. When the sequence arrives // at 1, it prints the original n and the number of steps. // Pre: n is a positive integer. // Post: Hailstone sequence has been displayed. // void hailstones(int n) { int nsave, // original n step = 0; // step number nsave = n; // save original n // Generate hailstone sequence while (n > 1) { if (n % 2 == 0) // n even n /= 2; else // n odd n = 3 * n + 1; step++; cout << "Step " << setw(4) << step << ": n = " << setw(5) << n << endl; } cout << endl << nsave << " went to 1 in " << step << " steps.\n"; }