M.P.T.
M.P.T.

Reputation: 97

Sum of two numbers and the numbers between them

Ask user to enter a number. Then ask the user to enter a number bigger than the first number. Calculate a value that is the sum of all the numbers from the first number to the second number including the end points. For example, if the user enters 5 and 10 then calculate the total of 5 + 6 + 7 + 8 + 9 + 10. Display the results. MUST USE A WHILE LOOP

This is what I have so far. I can't seem to get the sum to be correct. If I enter the numbers from the example above, I get 49 instead of 45. I understand where I went wrong and why it is 49 based on my code but can't figure out how to make it correct.

// declare constants
const INITIAL_VALUE = 0;
const COUNTER_VALUE = 1;

// declare variables
var number1;
var number2;
var sum;
var counter;
var difference;
var middlePoint;
var middlePointSum;

// assigning values
sum = INITIAL_VALUE;
difference = INITIAL_VALUE;
counter = COUNTER_VALUE;
middlePoint = COUNTER_VALUE;
middlePointSum = INITIAL_VALUE;

// prompt user to enter two numbers
number1 = prompt("Enter first number: ");
number2 = prompt("Enter a number bigger than first number: ");

// convert user input into numbers
number1 = Number(number1);
number2 = Number(number2);

// display number1
document.write(number1);
difference = number2 - number1;
middlePoint += number1;

while (counter < difference) {
   document.write(" + " + middlePoint);
   middlePoint = middlePoint + 1;
   counter++;
   middlePointSum += middlePoint;
}

// calculate the sum
sum = number1 + middlePointSum + number2;
 
// display number1, middle points, number2, and sum
document.write(" + " + number2 + " = " + sum);

Upvotes: 2

Views: 806

Answers (7)

Vanojx1
Vanojx1

Reputation: 5574

Your middlePointSum is starting from 1 intead of 0 so you got: 5 + (7 + 8 + 9 + 10) + 10 to fix your code set middlePointSum to INITIAL_VALUE

For simplification just ignore the difference between the numbers, increment number1 until you reach number 2

var number1 = prompt("Enter first number: ");
var number2 = prompt("Enter a number bigger than first number: ");
var incNumber;
var strResult = [];

number1 = incNumber = Number(number1);
// use incNumber if you need to preserve number1 value or just use number 1 value instead
number2 = Number(number2);

var sum = 0;
while(incNumber <= number2) {
  strResult.push(incNumber);
  sum += incNumber++;
  // this means add incNumber to sum then increment it by 1
}

document.write(`${strResult.join(' + ')} = ${sum}`);

Upvotes: 1

Ahmad
Ahmad

Reputation: 12737

var num1 = Number(prompt("Enter a number"));
var num2 = Number(prompt("Enter a larger number"));


document.write(num1 + "+" + num2 + "=" + (num1+num2));



// now lets find the sum of numbers between these two numbers.
document.write("<br>");  // new line

var counter = num1;   // we will start countring from the smaller number
var sum = 0;

//keep looping until we reach the bigger number (num2)
while(counter<=num2) {
  sum += counter;
  // print the current number
  document.write(counter);
  //print a plus sign
  if(counter<num2) { 
    // only put a (plus sign) if we are not yet reached num2
    document.write("+"); 
   }
   
   //increment to control the loop
  counter ++;
  
}


//finally put the result
document.write("=" + sum);

You are setting counter to the constant COUNTER_VALUE which is 1.

Then, in your program, you are entering 5 and 6 as input. The difference is 6-5 which is 1.

Your while loop has a condition to only execute when counter<difference . In your case, counter=1 and difference=1. This means that they are equal, and thus, the loop will not execute.

I hope this sheds light on what needs to be done from your side to fix this bug.

Upvotes: -1

You did a very small mistake in the code . The bug is in while loop.

 while (counter < difference) {
        document.write(" + " + middlePoint);
        middlePoint = middlePoint + 1;
        counter++;
        middlePointSum += middlePoint;
    }

you are incrementing the middlepoint before middlePointSum is Calculated. It should be incremented after calculating the middlePointSum.

while (counter < difference) {
    document.write(" + " + middlePoint);
    counter++;
    middlePointSum += middlePoint;
    middlePoint = middlePoint + 1;
}

Upvotes: 1

Tornike Shavishvili
Tornike Shavishvili

Reputation: 1354

This code should work for you. Variabel sum should contain your desired sum.

var sum = 0;
var firstNumber = 0;
var secondNUmber = 0;
var firstNumberStr = '';
var secondNUmberStr = '';

// prompt user to enter two numbers
firstNumberStr = prompt("Enter first number: ");

while(isNaN(firstNumberStr)){
    firstNumberStr = prompt("Enter Correct first number: ");
}

secondNUmberStr = prompt("Enter a number bigger than first number: ");

while(isNaN(secondNUmberStr) || parseInt(firstNumberStr) >= parseInt(secondNUmberStr)){
    secondNUmberStr = prompt("Enter a number bigger than first number: ");
}

firstNumber = parseInt(firstNumberStr); 
secondNUmber = parseInt(secondNUmberStr);

while(firstNumber <= secondNUmber){
    sum += firstNumber;
    firstNumber++
}

Upvotes: 1

Dilip Belgumpi
Dilip Belgumpi

Reputation: 648

// prompt user to enter two numbers
var number1 = prompt("Enter first number: ");
var number2 = prompt("Enter a number bigger than first number: ");

// convert user input into numbers
var number1 = Number(number1);
var number2 = Number(number2);

var start_point= number1;
var sum=0;

// display number1
document.write(start_point);
sum += start_point;
start_point++;

while (start_point <=number2) {
    document.write(" + " + start_point);
    sum += start_point;
    start_point++;
}


// display sum
document.write(" = " + sum);

Upvotes: 1

CertainPerformance
CertainPerformance

Reputation: 370989

One problem is that your middlePointSum does not take into account the first number after the number1, for example, the 6 in your example. Another problem is that your counter < difference test is inaccurate - you would have to iterate until counter + 1 < difference:

// declare constants
const INITIAL_VALUE = 0;
const COUNTER_VALUE = 1;

// declare variables
var number1;
var number2;
var sum;
var counter;
var difference;
var middlePoint;
var middlePointSum;

// assigning values
sum = INITIAL_VALUE;
difference = INITIAL_VALUE;
counter = COUNTER_VALUE;
middlePoint = COUNTER_VALUE;
middlePointSum = INITIAL_VALUE;

// prompt user to enter two numbers
number1 = prompt("Enter first number: ");
number2 = prompt("Enter a number bigger than first number: ");

// convert user input into numbers
number1 = Number(number1);
number2 = Number(number2);

// display number1
document.write(number1);

difference = number2 - number1;
middlePoint += number1;

middlePointSum = middlePoint;
while (counter + 1 < difference) {
  document.write(" + " + middlePoint);
  middlePoint = middlePoint + 1;
  counter++;
  console.log(middlePointSum);
  middlePointSum += middlePoint;
}

// calculate the sum
sum = number1 + middlePointSum + number2;

// display number1, middle points, number2, and sum
document.write(" + " + number2 + " = " + sum);

But this seems far, far more complicated than it needs to be - why not simply iterate from number1 to number2, adding to sum along the way?

const number1 = Number(prompt("Enter first number: "));
const number2 = Number(prompt("Enter a number bigger than first number: "));
document.write(number1);
let sum = number1;
for (let i = number1 + 1; i <= number2; i++) {
  sum += i;
  document.write(' + ' + i);
}
document.write(' = ' + sum);

Or, create an array of the numbers, join by plus signs, and calculate the sum with reduce:

const number1 = Number(prompt("Enter first number: "));
const number2 = Number(prompt("Enter a number bigger than first number: "));

const nums = Array.from(
  { length: number2 - number1 + 1 },
  (_, i) => i + number1
);
const sum = nums.reduce((a, b) => a + b);
document.write(nums.join(' + ') + ' = ' + sum);

Upvotes: -1

Andreas
Andreas

Reputation: 2521

Welcome to StackOverflow!

The cause of error is at this part of the code

while (counter < difference) {
    document.write(" + " + middlePoint);
    middlePoint = middlePoint + 1; // you are already increasing the middlePoint number
    counter++;
    middlePointSum += middlePoint;
}

Therefore, the sum is always over by the number of counter - 1. What you should have done, is execute middlePointSum += middlePoint; first before increasing the value of middlePoint and counter.

while (counter < difference) {
    document.write(" + " + middlePoint);
    middlePointSum += middlePoint;
    middlePoint = middlePoint + 1;
    counter++;
}

Upvotes: 1

Related Questions