In: Computer Science
c++ Please explain why its wrong.
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 < n; k++)
{
if (arr[k] < arr[k-1])
{
p = arr + k;
return;
}
}
p = nullptr;
}
int main()
{
int nums[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;
}
return 0;
}
Answer:-
Code:-
#include <iostream>
using namespace std;
void findDisorder(int arr[], int n, int **p) {
for (int k = 1; k < n; k++)
{
if (arr[k] < arr[k-1])
{
*p =
arr+k;
return;
}
}
p = NULL;
}
int main()
{
int nums[6] = { 10, 20, 20, 40, 30, 50 };
int* ptr,**p=&ptr;
findDisorder(nums, 6, p);
if (ptr == NULL)
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;
}
return 0;
}
Explanation:- Using pointers, we can modify contents in that address,we can not change the actual pointer address.So, store the address of ptr in double pointer ,then modify the address in it.
Thank you...
Output:-