C++ Vectors Problem: Hello: This question might seem very long but I actually ha
ID: 3821301 • Letter: C
Question
C++ Vectors Problem:
Hello: This question might seem very long but I actually have most of it done. I just need help with a part of the code, please continue reading, thank you for your patience!
*Edit: Please write the code in basic vector code! I am just a beginner, thank you!
Here is the question:
I already have most of the code done, but I need help with the part of searching a specific number in the function: I will first post my code below:
#include
#include
#include
#include
using namespace std;
int countEven(vector v);
int countOdd(vector v);
int calclargest(vector v);
int calcsmallest(vector v);
int calctotal(vector v);
int calcaverage(vector v);
int main()
{
int largest,smallest,total, even , odd ;
double average;
srand(time(0));
vector v;
for (int i = 0; i < 5000; i++)
{
v.push_back(rand());
}
smallest = calcsmallest(v);
largest = calclargest(v);
total = calctotal(v);
even = countEven(v);
odd = countOdd(v);
average = calcaverage(v);
cout << "Smallest Number: " << smallest << endl;
cout << "Largest Number: " << largest << endl;
cout << "Total Number: " << total << endl;
cout << "Number of Evens: " << even << endl;
cout << "Number of Odds: " << odd << endl;
cout << "Average of the Values: " << average << endl;
return 0;
}
int countEven(vector v)
{
int even = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] % 2 == 0)
even++;
}
return even;
}
int countOdd(vector v)
{
int odd = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] % 2 == 1)
odd++;
}
return odd;
}
int calclargest(vector v)
{
int largest = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] > largest)
largest = v[i];
}
return largest;
}
int calcsmallest(vector v)
{
int largest = 0;
int smallest = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] > largest)
largest = v[i];
else
smallest = v[i];
}
return smallest;
}
int calctotal(vector v)
{
int total = 0;
for (int i = 0; i < 5000; i++)
{
total += v[i];
}
return total;
}
int calcaverage(vector v)
{
double average = 0;
int total = 0;
for (int i = 0; i < 5000; i++)
{
total += v[i];
}
average = total / 5000;
return average;
}
I have tested this and it completely works, and our teacher has posted a help function online. But I really can't understand how to use it. Please insert the following funciton into my code so that it can search for a specific number and locate it. Thank you!
This is the code our teacher posted:
void shellSort(vector& V)
{
bool flag = true;
int i, numLength = V.size();
int d = numLength;
while (flag || (d>1)) // bool flag
{
flag = false; //reset flag to 0 to check for
// future swaps
d = (d + 1) / 2;
for (i = 0; i < (numLength - d); i++)
{
if (V[i + d] < V[i])
{
swapper(V[i], V[i + d]);
flag = true; //tells swap has occurred
}
}
}
}
void swapper(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
Explanation / Answer
#include
#include
#include
#include
using namespace std;
int countEven(vector v);
int countOdd(vector v);
int calclargest(vector v);
int calcsmallest(vector v);
int calctotal(vector v);
int calcaverage(vector v);
void shellSort(vector& v);
void swapper(int &a, int &b);
int main()
{
int largest,smallest,total, even , odd ;
double average;
srand(time(0));
vector v;
for (int i = 0; i < 5000; i++)
{
v.push_back(rand());
}
smallest = calcsmallest(v);
largest = calclargest(v);
total = calctotal(v);
even = countEven(v);
odd = countOdd(v);
average = calcaverage(v);
cout << "Smallest Number: " << smallest << endl;
cout << "Largest Number: " << largest << endl;
cout << "Total Number: " << total << endl;
cout << "Number of Evens: " << even << endl;
cout << "Number of Odds: " << odd << endl;
cout << "Average of the Values: " << average << endl;
cout << "Ordered Values: ";
for (int i = 0; i < 5000; i++)
cout << v[i] << " ";
cout << endl;
return 0;
}
int countEven(vector v)
{
int even = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] % 2 == 0)
even++;
}
return even;
}
int countOdd(vector v)
{
int odd = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] % 2 == 1)
odd++;
}
return odd;
}
int calclargest(vector v)
{
int largest = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] > largest)
largest = v[i];
}
return largest;
}
int calcsmallest(vector v)
{
int largest = 0;
int smallest = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] > largest)
largest = v[i];
else
smallest = v[i];
}
return smallest;
}
int calctotal(vector v)
{
int total = 0;
for (int i = 0; i < 5000; i++)
{
total += v[i];
}
return total;
}
int calcaverage(vector v)
{
double average = 0;
int total = 0;
for (int i = 0; i < 5000; i++)
{
total += v[i];
}
average = total / 5000;
return average;
}
void shellSort(vector& V)
{
bool flag = true;
int i, numLength = V.size();
int d = numLength;
while (flag || (d>1)) // bool flag
{
flag = false; //reset flag to 0 to check for
// future swaps
d = (d + 1) / 2;
for (i = 0; i < (numLength - d); i++)
{
if (V[i + d] < V[i])
{
swapper(V[i], V[i + d]);
flag = true; //tells swap has occurred
}
}
}
}
void swapper(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
---Edit---
#include
#include
#include
#include
using namespace std;
int countEven(vector v);
int countOdd(vector v);
int calclargest(vector v);
int calcsmallest(vector v);
int calctotal(vector v);
int calcaverage(vector v);
void shellSort(vector& v);
void swapper(int &a, int &b);
int main()
{
int largest,smallest,total, even , odd, search, pos ; //search and pos added as variable
double average;
srand(time(0));
vector v;
for (int i = 0; i < 5000; i++)
{
v.push_back(rand());
}
smallest = calcsmallest(v);
largest = calclargest(v);
total = calctotal(v);
even = countEven(v);
odd = countOdd(v);
average = calcaverage(v);
cout << "Smallest Number: " << smallest << endl;
cout << "Largest Number: " << largest << endl;
cout << "Total Number: " << total << endl;
cout << "Number of Evens: " << even << endl;
cout << "Number of Odds: " << odd << endl;
cout << "Average of the Values: " << average << endl;
shellSort(v); // am not responsible if this function fails
cout << "Enter an integer: ";
cin >> search;
pos = binSearch(v, search); //performs binary search
if (pos == -1) //-1 indicates not found
cout << search << " was not found" << endl;
else
cout << search << " was found at position " << pos << endl;
return 0;
}
int countEven(vector v)
{
int even = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] % 2 == 0)
even++;
}
return even;
}
int countOdd(vector v)
{
int odd = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] % 2 == 1)
odd++;
}
return odd;
}
int calclargest(vector v)
{
int largest = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] > largest)
largest = v[i];
}
return largest;
}
int calcsmallest(vector v)
{
int largest = 0;
int smallest = 0;
for (int i = 0; i < 5000; i++)
{
if (v[i] > largest)
largest = v[i];
else
smallest = v[i];
}
return smallest;
}
int calctotal(vector v)
{
int total = 0;
for (int i = 0; i < 5000; i++)
{
total += v[i];
}
return total;
}
int calcaverage(vector v)
{
double average = 0;
int total = 0;
for (int i = 0; i < 5000; i++)
{
total += v[i];
}
average = total / 5000;
return average;
}
void shellSort(vector& V)
{
bool flag = true;
int i, numLength = V.size();
int d = numLength;
while (flag || (d>1)) // bool flag
{
flag = false; //reset flag to 0 to check for
// future swaps
d = (d + 1) / 2;
for (i = 0; i < (numLength - d); i++)
{
if (V[i + d] < V[i])
{
swapper(V[i], V[i + d]);
flag = true; //tells swap has occurred
}
}
}
}
void swapper(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
//Method added to perform binary search
int binSearch(vector V, int search) {
int mid, low, high;
low = 0;
high = V.size()-1;
while (low <= high) { //loop continues till low overlaps high
mid = (low + high) / 2; //find mid
if (V[ mid ] == search)
return mid; //hurrah! found
if (V[ mid ] > search) // item might be in lower half
high = mid - 1;
else
low = mid + 1; //item might be in upper half
}
return -1; //sss…! Not found!
}
Only after analyzing the given code that works, I designed the workflow of the code in such a way that it goes at-par with the remaining code, and also not to change any method of the given code except the main method. And after sorting, we are printing the contents of the vector to demonstrate that sorting actually worked. I hope I have explained the reason well. If incase you have any further clarification and need some guidance on the code, please comment below. I shall be glad to help you :)
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.