1: // Filename: PALINT.CPP 2: // Purpose: Determines whether an integer is palindromic. 4: #include <iostream> 5: #include <iomanip> 7: void DisplayIDInfo(int); 8: void DescribeProgram(); 9: void DisplayMainMenu(int); 10: void GetMenuChoice(int, int&); 11: void Pause(int); 13: bool IsAPalindrome(/* in */ int n); 15: int main() 16: { 17: const int INDENT_LEVEL = 20; 18: int menuChoice; 19: int n; 21: DisplayIDInfo(INDENT_LEVEL/2); 23: do 24: { 25: DisplayMainMenu(INDENT_LEVEL); 26: GetMenuChoice(INDENT_LEVEL, menuChoice); 28: switch (menuChoice) 29: { 30: case 1: 31: cout << setw(INDENT_LEVEL) << "" 32: << "Program is now terminating. " 33: << endl; 34: break; 35: case 2: 36: DescribeProgram(); 37: break; 38: case 3: 39: cout << setw(INDENT_LEVEL) << "" 40: << "Enter a positive integer: "; 41: cin >> n; cin.ignore(80, '\n'); cout << endl; 42: cout << setw(INDENT_LEVEL) << "" 43: << "The integer " << n << " is "; 44: if (IsAPalindrome(n)) 45: cout << "a palindrome. "; 46: else 47: cout << "not a palindrome. "; 48: cout << endl << endl; 49: break; 50: } 52: if (menuChoice != 1) 53: Pause(0); 55: } while (menuChoice != 1); 57: cout << endl; 59: return 0; 60: } 61: 62: void DisplayIDInfo(int indentLevel) 63: // Pre: indentLevel contains a nonnegative integer. 64: // Post: A blank line, and a line containing the programmer's name 65: // have been displayed. 66: { 67: cout << endl; 68: cout << setw(indentLevel) << "" 69: << "This sample program produced by Your_Name_Goes_Here."; 70: cout << endl; 71: } 74: void DescribeProgram() 75: // Pre: none 76: // Post: A program description has been displayed. 77: { 78: cout << endl; 79: cout << "This program determines if a positive " 80: << "integer input by the user is palindromic." << endl; 81: cout << endl; 82: } 85: void DisplayMainMenu(int indentLevel) 86: // Pre: indentLevel contains a nonnegative integer. 87: // Post: A menu has been displayed, each line indented indentLevel spaces. 88: { 89: cout << endl << endl; 90: cout << setw(indentLevel) << "" << "Main Menu "; 91: cout << endl << endl; 92: cout << setw(indentLevel) << "" << "1. Quit " << endl; 93: cout << setw(indentLevel) << "" << "2. Get information " << endl; 94: cout << setw(indentLevel) << "" << "3. Check if an integer " 95: << "is palindromic " << endl; 96: cout << endl << endl; 97: } 100: void GetMenuChoice(int indentLevel, int& menuChoice) 101: // Pre: indentLevel contains a nonnegative integer. 102: // Post: A prompt has been displayed, indented indentLevel spaces, 103: // and menuChoice contains an integer entered by the user. 104: { 105: cout << setw(indentLevel) << "" << "Enter your choice here: "; 106: cin >> menuChoice; cin.ignore(80, '\n'); 107: cout << endl << endl; 108: } 111: void Pause(int indentLevel) 112: // Pre: The standard input stream cin is empty, and indentLevel 113: // contains a nonnegative integer. 114: // Post: A prompt has been displayed, indented indentLevel spaces, 115: // and the user has pressed <RETURN>. 116: { 117: char newlineChar; 118: cout << setw(indentLevel) << "Press <RETURN> to continue ... "; 119: cin.get(newlineChar); 120: cout << endl; 121: } 124: bool IsAPalindrome(/* in */ int n) 125: // Pre: "n" has been initialized with a positive integer 126: // Post: Return-value is true is "n" is palindromic, false otherwise. 127: { 128: if (n < 10) 129: return true; 130: else if (n < 100) 131: return (n / 10) == (n % 10); 132: else 133: { 134: int firstDigit; 135: int centerDigits; 136: int lastDigit; 138: int divisor = 1; 139: while (n / divisor >= 10) divisor *= 10; 141: firstDigit = n / divisor; 142: lastDigit = n % 10; 143: centerDigits = (n % divisor) / 10; 145: return (firstDigit == lastDigit) && IsAPalindrome(centerDigits); 146: } 147: }