//Code by Jordan Harris-Toovy for OIT's CST116 Lab 6, November 2021 #include #include #include using namespace std; //10.10 LBD Ex #1: /* const int MAX_ROWS = 10, PER_STUDENT_BUDGET = 75; int fillTable(string[MAX_ROWS][2], int[MAX_ROWS][2]); int main(void) { string name_lead[MAX_ROWS][2]{}; int pop_funding[MAX_ROWS][2]{ 0 }, num_rows = 0; num_rows = fillTable(name_lead, pop_funding); cout << endl; cout.setf(ios::left); cout << setw(30) << "Student Club" << setw(25) << "President" << setw(10) << "Students" << setw(10) << "Budget" << endl; for (int idx = 0; idx < num_rows; idx++) { cout.setf(ios::left); cout << setw(30) << name_lead[idx][0] << setw(25) << name_lead[idx][1] << setw(10) << pop_funding[idx][0] << setw(10) << pop_funding[idx][1] << endl; } return 0; } int fillTable(string title_president[MAX_ROWS][2], int students_budget[MAX_ROWS][2]) { int num_rows = 0; for (int idx = 0; idx < MAX_ROWS; idx++) { cout << "Please enter information for club " << idx + 1 << " of " << MAX_ROWS << ": " << endl; cout << "Club name (done to exit): "; getline(cin >> ws, title_president[idx][0]); if (title_president[idx][0].compare((string)"done") == 0) { break; } cout << "Club president: "; getline(cin >> ws, title_president[idx][1]); cout << "Number of students: "; cin >> students_budget[idx][0]; cout << endl; num_rows++; students_budget[idx][1] = students_budget[idx][0] * PER_STUDENT_BUDGET; } return num_rows; } */ //10.14 Debugging Exercises # 1: /******************************************************************** * File: Chapter 10 Debug.cpp * * General Instructions: Complete each step before proceeding to the * next. * * Debugging Exercise 1 * * 1) Build and run the program. * 2) Examine the code and the output and notice the use of * parallel arrays. * 3) Insert breakpoints at Breakpoint 1, Breakpoint 2, and Breakpoint * 3. * 4) Run to Breakpoint 1. * 5) Place a watch on varX, varY and varZ. Click on the '+' in the * watch window to see the individual elements associated with each * of the arrays. * 6) Continue running your program to Breakpoint 2. * 7) Add a watch on the array called name. Again, click on the '+' * symbol. Notice how a multidimensional array is shown in the * debugger, the null terminating characters location, and how a * character is represented within each element of the array. * 8) Continue running the program to Breakpoint 3. * 9) Notice the contents of varX and varY now that you are back in the * main function. * 10) Clear all the breakpoints. * 11) Stop debugging. * * Debugging Exercise 2 * * 1) Change the constant SIZE from 5 to 10. * 2) Change any literal containing a 5 to the constant SIZE. * Notice the usefulness of the constant when changes need * to be made to your code. * 3) Set a breakpoint at Breakpoint 4. Now on this breakpoint * set the necessary condition so the loop breaks when x hits 8. * (Hint: If you need help setting breakpoints based upon a * condition refer to Chapter 8). * 4) Run to Breakpoint 4. * 5) Continue stepping into the remainder of the for loop until the * flow returns back to main. * 6) Make sure your Watch window is visible and notice the contents * of varY and varZ now that you are back in main. * 7) Stop debugging. * 8) Disable all breakpoints. * 9) Rebuild and execute the program and verify the results. * * Debugging Exercise 3 * * 1) Just before the call to the PrintFunction in main, add an * assignment statement to change the first element in the * array varZ to -99. * 2) Build and execute your code, verifying that the calculations * are correct in relation to element 0 of varZ. * 3) Add a line to assign the contents of the second element of * varX to 99 in FunctionTwo. * 4) Rebuild your program. * 5 Obviously there is a problem. Remove the const from the * function declaration and header for varX. * 5) Now you should be able to build and execute your code. Do it. * 6) Set a breakpoint on Breakpoint 2. * 7) Re-enable Breakpoint 2. * 8) Run to Breakpoint 2 and make sure you have a watch on the * variable name. * 9) Click on the '+'. Once you see all the elements * within the array, change the 'Value' (in the Value field) * for the first element of the array directly within the Watch * window to the character 'Z'. Notice how the value is updated * by displaying the new ASCII value too. * 10) Stop debugging. * 11) Disable all breakpoints. * ********************************************************************/ /* void GetAndDisplayWelcomeInfo(); void FunctionOne(int varX[], int varY[]); void FunctionTwo(int varX[], const int varY[], int varZ[]); void PrintFunction(const int varX[], const int varY[], const int varZ[]); const int SIZE = 10; int main() { int varX[SIZE]; int varY[SIZE]; int varZ[SIZE]; // Notice how we used the const here! // Breakpoint 1 // Put breakpoint on the following line GetAndDisplayWelcomeInfo(); FunctionOne(varX, varY); // Breakpoint 3 // Put breakpoint on the following line FunctionTwo(varX, varY, varZ); varZ[0] = -99; PrintFunction(varX, varY, varZ); return 0; } void GetAndDisplayWelcomeInfo() { char name[2][20]; // First name in row 0, last name in row 1 cout << "Please enter your first name: "; cin >> name[0]; cout << "\nPlease enter your last name: "; cin >> name[1]; // Breakpoint 2 // Put breakpoint on the following line cout << "\n\n\tWelcome " << name[0] << " " << name[1] << "!\n\t Hope all is well \n\n"; } void FunctionOne(int varX[], int varY[]) { for (int x = 0; x < SIZE; x++) // NOTICE '<' NOT <= // Breakpoint 4 // Put breakpoint on the following line varX[x] = x; for (int x = 0; x < SIZE; x++) varY[x] = x + 100; } void FunctionTwo(int varX[], const int varY[], int varZ[]) { varX[1] = 99; for (int x = 0; x < SIZE; x++) // Notice the const SIZE here varZ[x] = varX[x] + varY[x]; } void PrintFunction(const int varX[20], const int varY[20], const int varZ[20]) { int x; cout << " \t x \t y \t z\n\n"; for (x = 0; x < SIZE; x++) cout << "\t" << setw(3) << varX[x] << "\t " << varY[x] << "\t " << varZ[x] << endl; } */ //10.15 Programming Exercises #1: /* const int MAX_ARRAY_SIZE = 25; bool isPalindrome(char[MAX_ARRAY_SIZE]); bool isAlphaStr(char[MAX_ARRAY_SIZE]); int countChar(char[MAX_ARRAY_SIZE], char); int main(void) { char char_array[MAX_ARRAY_SIZE]{}, test_char = '\0'; bool pal = false, alp = false; int test_char_insts = 0; cout << "String checker MK1 - Case sensitive edition" << endl; cout << "Please enter a string (" << MAX_ARRAY_SIZE << " characters max): "; cin >> char_array; cout << "\nPlease enter a character to test: "; cin >> test_char; cout << endl; pal = isPalindrome(char_array); alp = isAlphaStr(char_array); test_char_insts = countChar(char_array, test_char); if (pal) { cout << "This string is a palindrome" << endl; } else { cout << "This string is not a palindrome" << endl; } if (alp) { cout << "This string is purely composed of letters" << endl; } else { cout << "This string is not purely composed of letters" << endl; } cout << "The character '" << test_char << "' appears " << test_char_insts << " times in this string " << endl; return 0; } bool isPalindrome(char inArray[MAX_ARRAY_SIZE]) { bool lenAct = true; int len = 0; while (lenAct) { if ((inArray[len] != '\0') && (len < MAX_ARRAY_SIZE)) { len++; } else { lenAct = false; } } for (int idx = 0; idx < ceil(len / 2); idx++) { if (inArray[idx] != inArray[len - idx - 1]) { return false; } } return true; } bool isAlphaStr(char inArray[MAX_ARRAY_SIZE]) { bool lenAct = true; int len = 0; while (lenAct) { if ((inArray[len] != '\0') && (len < MAX_ARRAY_SIZE)) { len++; } else { lenAct = false; } } for (int idx = 0; idx < (len); idx++) { if (!isalpha(inArray[idx])) { return false; } } return true; } int countChar(char inArray[MAX_ARRAY_SIZE], char test_char) { bool lenAct = true; int len = 0, char_insts = 0; while (lenAct) { if ((inArray[len] != '\0') && (len < MAX_ARRAY_SIZE)) { len++; } else { lenAct = false; } } for (int idx = 0; idx < len; idx++) { if (inArray[idx] == test_char) { char_insts++; } } return char_insts; } */