How to Modify Vector Elements to Double Values Less Than a Minimum?

  • Context:
  • Thread starter Thread starter needOfHelpCMath
  • Start date Start date
  • Tags Tags
    Elements
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 5K views
needOfHelpCMath
Messages
70
Reaction score
0
I don't understand how it able to skip one element to the other in order to multiply the numbers by 2. It be helpful if anyone can explain.Double any element's value that is less than minVal. Ex: If minVal = 10, then dataPoints = {2, 12, 9, 20} becomes {4, 12, 18, 20}.
Code:
#include <iostream>
#include <vector>
using namespace std;

int main() {
   const int NUM_POINTS = 4;
   vector<int> dataPoints(NUM_POINTS);
   int minVal = 0;
   int i = 0;

   dataPoints.at(0) = 2;
   dataPoints.at(1) = 12;
   dataPoints.at(2) = 9;
   dataPoints.at(3) = 20;

   minVal = 10;

   /* Your solution goes here  */
  for(i = 0; i < NUM_POINTS; ++i) {
   dataPoints.at(i)= dataPoints.at(i) * 2;
  }
 
   for (i = 0; i < NUM_POINTS; ++i) {
      cout << dataPoints.at(i) << " " ;
   }
   cout << endl;

   return 0;
}
✖ Testing minVal = 10 and dataPoints = {2, 12, 9, 20}
Expected output: 4 12 18 20
Your output: 4 24 18 40
Tests aborted.
 
Physics news on Phys.org
You are simply doubling all elements of the array...inside the for loop you need to use an if statement to check if the element is less than [M]minVal[/M], and only if it is, then double the element. :)
 
MarkFL said:
You are simply doubling all elements of the array...inside the for loop you need to use an if statement to check if the element is less than [M]minVal[/M], and only if it is, then double the element. :)

i was only able get the first element to be multiply.
Code:
if (i < minVal) {
      dataPoints.at(i) = dataPoints.at(i) * 2;
   }
   else {
      dataPoints.at(i) = i;
   }

   for (i = 0; i < NUM_POINTS; ++i) {
      cout << dataPoints.at(i) << " " ;
   }
   cout << endl;

   return 0;
}
Testing minVal = 10 and dataPoints = {2, 12, 9, 20}
Expected output: 4 12 18 20
Your output: 4 12 9 20
Tests aborted.
 
You need to use the array element, not the loop index for the comparison. Like so:

Code:
for(i = 0; i < NUM_POINTS; i++)
{
	if (dataPoints.at(i) < minVal)
	{
		dataPoints.at(i) *= 2;
	}
}