Question: The subparts to this problem involve errors in the use ofpointers. a. This program is supposed to write 30 20 10, but it doesn't. Find

The subparts to this problem involve errors in the use ofpointers. a. This program is supposed to write 30 20 10, but it doesn't. Find all ofthe

bugs and show a fixed version of the program:

int main()

{

intarr[3]={5,10,15}; int *ptr = arr; *ptr = 10; // set arr[0] to 10 *ptr + 1 = 20; // set arr[1] to 20 ptr +=2; ptr[0] = 30; // set arr[2] to 30 while (ptr >= arr) { ptr--; cout << ' '<<*ptr; // print values } cout < endl; }

b.

The findDisorder function is supposed to find the first item in an array that is less than the element preceding it, and set the p parameter to point to that item, so the caller can know the location of that item. Explain why this function won't do that, and show how to fix it. Your fix must be to the function only; you must not change the the main routine below in any way, yet as a result of your fixing the function, the main routine below must work correctly.

void findDisorder(int arr[], int n, int* p)

{ for(int k=1;k

{ if (arr[k] < arr[k-1])

{ p = arr + k; return; } } p = nullptr; }

int main()

{ intnums[6]={10,20,20,40,30,50}; int* ptr;

findDisorder(nums, 6, ptr); if (ptr == nullptr)

cout << "The array is ordered" << endl; else

{ cout << "The disorder is at address " << ptr << endl; cout << "It's at index " << ptr - nums << endl; cout << "The item's value is " << *ptr << endl; } }

c. The hypotenuse function is correct, but the main function has a problem. Explain why it may not work, and show a way to fix it. Your fix must be to the main function only; you must not change the hypotenuse function in any way.

#include #include using namespace std;

void hypotenuse(double leg1, double leg2, double* resultPtr)

{ *resultPtr = sqrt(leg1*leg1 + leg2*leg2); }

int main()

{ double* p; hypotenuse(1.5, 2.0, p);

cout << "The hypotenuse is " << *p << endl; }

d. The match function is supposed to return true if and only if its two C string arguments have exactly same text. Explain what the problems with the implementation of the function are, and show a way to fix them.

// return true if two C strings are equal bool match(const char str1[], const char str2[])

{ while (str1 != 0 && str2 != 0) // zero bytes at ends

{ if (str1 != str2) // compare corresponding characters return false;

str1++; // advance to the next character } str2++;

} return str1 == str2; // both ended at same time? }

int main()

{ char a[10] = "pointy"; char b[10] = "pointless";

if (match(a,b)) cout << "They're the same! ";

}

e. This program is supposed to write 1 4 9 16 25 36 49 64 81 100 ,but it probably does not. What is the program doing that is incorrect? (We're not asking you explain why the incorrect action leads to the particularoutcome it does and we're not asking you to propose a fix to the problem.)

#include using namespace std;

int* computeSquares(int& n)

{ int arr[10]; n = 10;

for (int k = 0; k < n; k++) arr[k] = (k+1) * (k+1);

return arr; }

void f()

{ int junk[100]; for (int k = 0; k < 100; k++)

junk[k] = 123400000 + k; }

int main()

{ int m; int* ptr = computeSquares(m); f(); for (int i = 0; i < m; i++)

cout << ptr[i] << ' '; } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!