The subparts to this problem involve errors in the use ofpointers. a. This progr
ID: 3722760 • Letter: T
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 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 <n;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 <iostream>
#include <cmath>
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 <iostream>
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] << ' '; }
}
Explanation / Answer
If you have any doubts, please give me comment...
a)
#include <iostream>
using namespace std;
int main()
{
int arr[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 = 30; // set arr[2] to 30
while (ptr >= arr)
{
cout << ' ' << *ptr; // print values
ptr--;
}
cout << endl;
}
c)
#include <iostream>
#include <cmath>
using namespace std;
void hypotenuse(double leg1, double leg2, double *resultPtr)
{
*resultPtr = sqrt(leg1 * leg1 + leg2 * leg2);
}
int main()
{
double *p = new double;
hypotenuse(1.5, 2.0, p);
cout << "The hypotenuse is " << *p << endl;
}
d)
#include<iostream>
using namespace std;
// return true if two C strings are equal
bool match(const char str1[], const char str2[])
{
while (*str1 != '' && *str2 != '') // zero bytes at ends
{
cout<<*str1<<*str2<<endl;
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)
#include <iostream>
using namespace std;
int *computeSquares(int &n)
{
int *arr = new int[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] << ' ';
}
b)
#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 = 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;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.