Chapter 4 - Exercises

The Sum of a Range

Range function:

function range(start, end, step) {
        let array = [];
        if (step != undefined) {
          let i = start;
          if(step > 0) {
            while (i <= end) {
              array.push(i);
              i += step;
            }
          } else if (step < 0) {
            while (i >= end) {
              array.push(i)
              i += step;
            }
          }
        } else {
          for (i = start; i <= end; i++) {
            array.push(i);
          }
        }
        return array;
      }

Sum function:

function sum(num) {
        let sum = 0;
        let array = num;
        for (let i = 0; i < array.length; i++) {
          sum += array[i];
        }
        return sum;
      }

Reversing an Array

Produces new array:

function reverseArray(array) {
        let newArray = [];
        for (let i = 0; i < array.length; i++) {
          let value = array[i];
          newArray.unshift(value);
        }
        return newArray;
      }

Modifies array:

function reverseArrayInPlace(array) {
        for (let i = 0; i < Math.floor(array.length / 2); i++) {
          let temp = array[i];
          array[i] = array[array.length - 1 - i];
          array[array.length - 1 - i] = temp;
        }
        return array;
      }
1 Like
  1. Sum of a range: probably overcomplicated, but here goes:
<html>
  <head>
    <title>This is the title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        $(document).ready(function() {

        });
    </script>
  </head>
  <body>
    <input type=text placeholder="First number" id='a'/>
    <input type=text placeholder="Second number" id='b'/>
    <input type=text placeholder="Step value" id='s'/>
    <input type=button id='submit' value="Add-all"/>
    <script>
    var sequence = [];

    $('#submit').click(function() {
      var a = parseInt($('#a').val());
      var b = parseInt($('#b').val())+1;
      var s = parseInt($('#s').val());
      let inc = a;
      for(i=0;i<((b-a)/s);i++){
        sequence.push(inc);
        inc+=s;
      }
      console.log("the full array is "+sequence);
      console.log(sum(sequence));
     });

     function sum(array){
        var sums=0;
        for(i=0;i<array.length;i++){
          sums += array[i];
        }
     };


    </script>
  </body>
</html>
  1. I would think the reverseArray would be easier for the computer to execute, as it just makes a copy of the array and doesn’t have to rewrite the array as it’s reading it. I’m not clear on when these would be used however, nor their relative value.
1 Like

The Sum of a Range:
var range = function(start, end) {
var arr = [];
count = start;

while (count <= end) {
arr.push(count);
count++;
}
return arr;
};

var sum = function(arr) {
var total = 0;

while (arr.length > 0) {
total = total + arr.pop();
}
return total;
};

console.log(sum(range(1, 10)));

MakeArray=function(start, end, step=1)
{
let numbers=[];
if(step>0)
{
for(i=start;i<end+1;i=i+step)
{
numbers.push(i);
}
}
else
{
for(i=start;i>end-1;i=i+step)
{
numbers.push(i);
}
}
return numbers;
}
PrintNumbers=function(numbers)
{
for(i=0;i<numbers.length;i++)
{
document.write(numbers[i]+" ");
}
}
var numbers= MakeArray(5,2,-1);
PrintNumbers(numbers);

Reversing An Array:
var reverseArray = function(arr) {
var newArr = [];
for (var i = arr.length -1; i >= 0; i–)
newArr.push(arr[i]);
return newArr;
};

  var reverseArrayInPlace = function(arr) {
        var temp = 0;
        for (var i=0; i < arr.length / 2; i++) {
              temp = arr[i];
              arr[i] = arr[arr.length - i - 1];
              arr[arr.length - i - 1] = temp;
              }
  };
  console.log(reverseArray([1, 2, 3, 4, 5]));
  var arrayValue = [30, 40, 50];
  reverseArrayInPlace(arrayValue);
  console.log(arrayValue);
2 Likes

1. The sum of a range

function range (first, last, step=1){
 var strRange = [first];

 if (step>0){
    while((first+step)<=last){
    strRange.push (first + step);
    first+=step;
  	}
	}
  else
    {
      while((first+step)>=last){
    strRange.push (first + step);
    first+=step;
    	}
  	}
  return strRange;
};

function sum(input){
  var total =  0;
    for(var i=0;i<input.length;i++) {                  
       if(isNaN(input[i])){
         continue;
       }
     total += Number(input[i]);
     }
  return total;
};
console.log(range(2,5));
console.log(sum(range(2,5)));

2. Reversing an array

function reverseArray(initialArray){  
var newArray=[];
for (var i=0;i<initialArray.length;i++){
  newArray.unshift(initialArray[i]);
}
return newArray;
}

reverseArray(["January","February","March","April","May","June","July","August","September","October","November","December"]); 

function  reverseArrayInPlace(sameArray){ 
for (var i=0;i<sameArray.length;i++){
  sameArray.splice(i,0,sameArray[sameArray.length-1]);
  sameArray.pop();
}
return sameArray;
}
 reverseArrayInPlace(["January","February","March","April","May","June","July","August","September","October","November","December"]);
2 Likes
  1. The sum of a range.

function range (start,end,step){
let array = [];

for (let x = start; x<=end; x+=step){
array.push(x);
}
return array;
}

console.log(range(1,10,3));

function sum (array) {
let total = 0;
for (let value of array){
total +=value;
}
return total;
}
console.log(sum(range(1,10,3)));

[1, 4, 7, 10]

22

  1. Reversing an array.

var reversed = [];

function reverseArray(array){
for (var i = array.length-1; i >= 0; i–) {
reversed.push(array[i]);
}
console.log(reversed);
};
reverseArray([7,6,5,4,3,2,1]);

[1, 2, 3, 4, 5, 6, 7]

2 Likes

ORDERED ARRAY

function range(start, end) {
var rangeArr = [];
if (start < end) {
let index = 0;
for(let i = start; i <= end; i++) {
rangeArr[index] = start + index;
index++;
}
} else {
alert(“Revisit”);
}
console.log(rangeArr);
}
range(1, 10);

SUM

var rangeArray = [1,2,3,4,5,6,7,8,9,10];

function sum(rangeArray) {
var total = 0;
for(let i = 0; i < rangeArray.length; i++){
total += rangeArray[i];
}
return total
}
console.log(sum(rangeArray));

REVERSE ARRAY

function reverseArray (arr){
let newArr = [];
for(i = arr.length - 1; i >= 0; i–){
newArr.push(arr[i]);
}
return newArr;

3 Likes

The Sum of a Range

var array = [];
var start=1;
var end=10;
var step=2;

function range(start,end,step){

  if(start<end){
    for(i=0;i<=(end-start)/step;i++){
      array[i]=start+(i*step);
    }}
    else {
      for(i=0;i<=start-end;i++)
      array[i]=start-(i*step);
    }
    return array;
    }
  

var range =  range(start,end,step);
  console.log(range);


function sum()
{
  var total=0;
if(start<end){
    for(i=0;i<range.length;i++){
total=total+range[i];
    }
  }
    else {
      for(i=0;i<range.length;i++){
    total = total+range[i]
  };
    }
  return(total);
};

var all=sum();
console.log(all);

Reverse array:

var array =["banana","apple","donut","car","cinema"];

function reverseArray(){
  var leng=(array.length)-1
  var invArray =[];

  for(i=0;i<=leng;i++){
 invArray[i]=array[leng-i]
};
console.log(invArray) ;
};

reverseArray(array);
function reverseArrayInPlace(){

};

2 Likes

4.1_The sum and range
-1function range(start, end, step = start <= end ? 1 : -1) { let result = []; // loop iterates up for positive step values // and iterates down for negative step values for (let i = start; step >= 0 ? i <= end : i >= end; i+=step) { result.push(i); } return result;} function sum(numbers) { result = 0; for (let num of numbers) { result += num; } return result;} console.log(range(1, 10));// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]console.log(range(1, 10, 2));// → [1, 3, 5, 7, 9]console.log(range(5, 2, -1));// → [5, 4, 3, 2]console.log(range(5, 2));// → [5, 4, 3, 2]console.log(range(10, 1, -3));// → [10, 7, 4, 1]console.log(sum(range(1, 10)));// → 55console.log(sum(range(1, 10, 2)));// → 25console.log(sum(range(10, 1, -3)));// → 22 (10 + 7 + 4 + 1)

4.2_Reversing an array
function reverseArray(array) { result = []; for (let item of array) { result.unshift(item); } return result;} function reverseArrayInPlace(array) { let len = array.length; for (let i = 0; i < Math.floor(len/2); i++) { console.log(i, len-i-1, array[i], array[len-i-1], array); let swap = array[i]; array[i] = array[len-i-1]; array[len-i-1] = swap; } return array;} console.log(reverseArray([“A”, “B”, “C”]));// → [“C”, “B”, “A”];let arrayValue = [1, 2, 3, 4, 5];reverseArrayInPlace(arrayValue);console.log(arrayValue);// → [5, 4, 3, 2, 1]let arrayValue2 = [1, 2, 3, 4];reverseArrayInPlace(arrayValue2);console.log(arrayValue2);// → [4, 3, 2, 1]

1 Like

function range(lower, upper){
let array = [];
for (let i = lower; i <= upper; i++){
array.push(i);
}
return array;
}

function sum(array) {
let total = 0;
for (let i in array) {
total = total + array[i];
}
return total;
}

console.log(range(1,10));
console.log(sum(range(1,10)));

function reverseArray(inputArray){
let revArray=[];
for (i in inputArray){
revArray[inputArray.length-i-1]=inputArray[i];
}
return revArray;
}

var testarr=[“A”, “B”, “C”, “D”];
var testarr2=[“E”, “F”, “G”, “H”];
console.log(reverseArray(testarr))

function reverseArrayInPlace(inputArray){
let revArray=[];
for (i in inputArray) {
revArray[inputArray.length-i-1] = inputArray[i];
}
for (i in inputArray) {
inputArray[i]=revArray[i];
}
return inputArray;
}

console.log(reverseArrayInPlace(testarr2));

2 Likes

Part 1
Well here is the script part of my HTMl

    <script>
        function range(start, end) {
            let myArray = [];
            for (let i = start; i <= end; i++)
                myArray.push(i);
            return myArray;
        }

        // Next, write a sum function that takes an array of numbers and returns the sum of these numbers.
        function sum(myArray) {
            let total = 0;
            for (let value of myArray) {
                total += value;
            }
            return total;
        }

        console.log(sum(range(1, 10)))

        $("#calculateResults").click(function() {
            // Führe also folgenden Code aus
            console.log("Button clicked");
            console.log(sum(range(1, 10)))
                // und gleich mal hinzufügen
            $("#displayResults").text("Hier kommt das Resultat: " + sum(range(1, 10)));
        });
    </script>

Part 2:

// Reversing an Array The first, reverseArray, takes an array as argument
// and produces a new array that has the same elements in the inverse order

// Simple One , using RevereFunction
var cars = ["BMW", "MERCL", "Opel", "Sterndal"];
cars.reverse();
console.log("Used Reverse Function ", cars);

// plain JS
var cars = ["BMW", "MERCL", "Opel", "Sterndal"];
console.log("Starting point ", cars);

function reverseArray(cars) {
    var reversedCars = [];
    for (let i = cars.length - 1; i >= 0; i--) {
        reversedCars.push(cars[i]);
    }
    return reversedCars;
}
console.log("Reversed: ", reverseArray(cars));
3 Likes

Hi Everyone,

I’m doing Reversing an Array exercise but I don’t understand how the ReverseArrayInPlace function works.

function reverseArrayInPlace(array) {
  for (let i = 0; i < Math.floor(array.length / 2); i++) {
    let old = array[i];
    array[i] = array[array.length - 1 - i];
    array[array.length - 1 - i] = old;
  }
  return array;
}

Thanks in advance for your time.

1 Like

html>

Marcus Hopkins CHAPTER 4 EXERSIZE

Header CHAPTER 4 EXERSIZE

<script>
var myArr = [];
var sum= 0;

function returnRge(start, end, step) {
if (step === undefined) {
for (var start; start <= end; start++) {
myArr.push(start);
};
console.log(myArr);
} else if (step > 0) {
for (var start; start <= end; start+=step) {
myArr.push(start);
};
console.log(myArr);
} else if (step < 0) {
for (var start; start >= end; start+=step) {
myArr.push(start);
};
console.log(myArr);
}
};

function sumNum(){
for (var i = 0; i < myArr.length; i++) {
sum+=myArr[i];
};
console.log(sum);
};

returnRge(1, 5);
sumNum();

//reverses array order
var reversed = [];

  function RevArray(array) {
    for (var i = array.length-1; i >= 0; i--) {
      reversed.push(array[i]);
    }
    console.log(reversed);
  };

  RevArray([1,2,3,4,5]);


</script>
1 Like

1. The sum of a range

function range(start, end, step = 1){
  let outputArray = [];
  if(step>0 && start <= end){
    for(i=start; i<=end; i+=step){
      outputArray.push(i);
    }
  }
  else{
    if(step>0) {step = -1};
    for(i=start; i>=end; i+=step){
      outputArray.push(i);
    }
  }
    return outputArray;
}

function sum(range){
  let result = 0;
  range.forEach(function(element){
    result += element;
  });
  return result;
}

2. Reversing an array

function reverseArray(a){
  let result = [];
  for(i=a.length-1; i>=0; i--){
    result.push(a[i]);
  }
  return result;
}

function reverseArrayInPlace(a){
  for(i=0; i<Math.floor(a.length/2); i++){
    let temp = a[i];
    a[i] = a[a.length-1-i];
    a[a.length-1-i] = temp;
  }
  return a;
}
1 Like
  1. The sum of a range
  function rangeFunction(a,b,step=1){
    var array = [a];
    for(let i=1;i < Math.abs((Math.abs(b-a)+1)/step) ;i++)
      array[i] = array[i-1] + step;
    return array;
  }

  function sumArray(array){
    var sum=0;
    for(let num of array)
      sum+=num;
    return sum;
  }
  1. Reversing an array
  function reverseArray(array=[]){
    var output=[];
    const len = array.length;
    for(i=0;i<len;i++){
      var tmp = array.pop();
      output.push(tmp);
    }
    return output;
  }

  function reverseArrayInPlace(array=[]){
    var n = array.length-1, tmp;
    for(i=0;i<Math.ceil(n/2);i++){
      tmp = array[i];
      array[i] = array[n-i];
      array[n-i] = tmp;
    }
    return array;
  }
1 Like

Sum of Range

    <script>

      //range function

      var range = function(start, end,) {
        var array = [];
            counter = start;

          while(counter <= end){
              array.push(counter);
              counter++;
          }
          return array;
      };

      //Sum function with while loop

      var sum = function(array) {
        var total = 0;

        while(array.length > 0){
          total = total + array.pop();
        }
        return total;
      };


      //Sum function with for loop

      var sum2 = function(array) {
        var total = 0;

        for (let i =0; i < array.length; i++){
          total = total + array[i];
        }
        return total;
      };

    console.log(range(1, 10))
    console.log(sum(range(1,10)));
    console.log(sum2(range(1,10)));

    </script>

Reversing An Array:

  <script>

    function reverseArray(array) {
      let output = [];
      for (let i = array.length - 1; i >= 0; i--) {
        output.push(array[i]);
      }
      return output;
    }

    function reverseArrayInPlace(array) {
      for (let i = 0; i < array.length / 2; i++) {
        let old = array[i];
        array[i] = array[array.length - 1 - i];
        array[array.length - 1 - i] = old;
      }
      return array;
    }

    console.log(reverseArray(["BTC", "ETC", "LTC"]));

    let arrayValue = [1, 2, 3, 4, 5, 6, 7, 8, 9 ,10];

    reverseArrayInPlace(arrayValue);

    console.log(arrayValue);

    </script>
1 Like

Sum of a range

function range(start, end, step = start < end ? 1 : -1) {
let array = [];

if (step > 0) {
for (let i = start; i <= end; i += step) array.push(i);
} else {
for (let i = start; i >= end; i += step) array.push(i);
}
return array;
}

function sum(array) {
let total = 0;
for (let value of array) {
total += value;
}
return total;
}

console.log(range(1, 10))
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1));
// → [5, 4, 3, 2]
console.log(sum(range(1, 10)));
// → 55

Reversing an array

function reverseArray(array) {
let output = [];
for (let i = array.length - 1; i >= 0; i–) {
output.push(array[i]);
}
return output;
}

function reverseArrayInPlace(array) {
for (let i = 0; i < Math.floor(array.length / 2); i++) {
let old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}

console.log(reverseArray([“A”, “B”, “C”]));
// → [“C”, “B”, “A”];
let arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]

1 Like
  1. Sum Range

function range(start, end) {
var ans = [];
for (let i = start; i <= end; i++) {
ans.push(i);
}
return ans;
}

console.log(range(1,10));

function sum(input){

if (toString.call(input) !== “[object Array]”)
return false;

        var total =  0;
        for(var i=0;i<input.length;i++)
          {
            if(isNaN(input[i])){
            continue;
             }
              total += Number(input[i]);
           }
         return total;
        }
  1. I found two different examples for Reverse Array. I like the second one because it outlines a breakdown of the concept a little better than the for loop.

function reverseArray [a] {
for (let i = a.length - 1; i >= 0; i–)
reverseNumbers = [];
reverseNumbers.push(arguments[i]);
}

function reverseArray(originalArray) {

let leftIndex = 0;
let rightIndex = originalArray.length - 1;

while (leftIndex < rightIndex) {

// Swap the elements with temp variable
let temp = originalArray[leftIndex];
originalArray[leftIndex] = originalArray[rightIndex];
originalArray[rightIndex] = temp;

// Move indices to the middle
leftIndex++;
rightIndex–;
}
}

I found this code for Reverse in Place to be interesting

var reverseArrayInPlace = function (array) {
    var arrLength = array.length;
    for (var i = 0; i < arrLength/2; i++) {
        var temp = array[i];
        array[i] = array[arrLength - 1 - i];
        array[arrLength - 1 - i] = temp;
    }
}
1 Like

I found this additional course really helpful…

https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/

Here’s my solutions…

  var start=Number(prompt("start?"));
    var end=Number(prompt("end?"));
    var step=Number(prompt("step?"))||1;
    var array = [];

  function range(start,end,step){


      if (start===end){
        return [start];
      }

      else if(start<end){
        for(var i=start;i<=end;i+=step){
          array.push(i);
        }
        return array;
      }

      else if(end<start){
        for(var j=start;j>=end;j-=step){
          array.push(j);
        };
        return array;
      };

  };

function sum(arr){

  var total=0;

  for(var a=0;a<arr.length;a++){

      total=total+arr[a];

  };

  return total;

};


var x=range(start,end,step);

console.log(x);

console.log(sum(x));


  function reverseArray(array){

    var newArray=[];

    for(var i=array[0];i<=array.length;i++){

        newArray.unshift(i);

    }

        return newArray;

};

console.log(reverseArray([1,2,3,4]));
  function reverseArray(array){


        for(var i=array[0];i<=array.length;i++){

            array.unshift(i);

            array.pop();

        }

            return array;

    };

    console.log(reverseArray([1,2,3,4,5]));
1 Like
// 1st Exercise: Write a range function that takes two arguments, start and end, and returns
  //an array containing all the numbers from start up to (and including) end
  var array=[];

  function createRange(start,end){
    for(var i = start; i <=end; i++){
      array.push(i);
    };
    return array;
  };

  console.log("The output of createRange function is: " + createRange(1,10));

  //Next, write a sum function that takes an array of numbers and returns the
  // sum of these numbers
  var total = 0;

  function sum(arrayInp){
    for(var index = 0; index < arrayInp.length; index++){
      total = total + arrayInp[index];
    };
    return total;
  };

  console.log("The sum of all elements in your array is: " + sum(array));

  // modify your range function to take an optional third
  // argument that indicates the “step” value used when building the array
  var stepArray = [];

  function rangeStep(start,end,step){
    if (start == end){
        stepArray.push(start);
      console.log("The output of rangeStep function is: " + stepArray);
    }
    else if (start < end && step > 0){
        for(var i = start; i<=end; i = i + step){
        stepArray.push(i);
      };
      console.log("The output of rangeStep function is: " + stepArray);
    }
    else if(end < start && step < 0){
        for(var i = start; i >= end; i = i + step){
        stepArray.push(i);
      };
      console.log("The output of rangeStep function is: " + stepArray);
    }
    else if(start < end && step === undefined){
      for(var i = start; i <= end; i = i++){
        stepArray.push(i);
      };
      console.log("The output of rangeStep function is: " + stepArray);
    }
    else if(end < start && step === undefined){
      for(var i = start; i >= end; i = i--){
        stepArray.push(i);
      };
      console.log("The output of rangeStep function is: " + stepArray);
    }
    else{
      console.log("That makes no sense!");
    };
    //return stepArray;

  };

  rangeStep(-1,500,50);


//reverse function

/*For this exercise, write two functions, reverseArray
and reverseArrayInPlace. The first, reverseArray, takes an array as argument
and produces a new array that has the same elements in the inverse order. */

var reversedArray = [];
var arrayToReverse = [1,2,3,4,5,6,7,8];

function reverseArray(arrayToReverse){
  var x = arrayToReverse.length -1;
  for(newIndex = 0; newIndex <= x; newIndex++){
    reversedArray[newIndex] = arrayToReverse[x-newIndex];
  };
  //console.log(reversedArray);
  console.log("The reversed Array of " + arrayToReverse + " is: " + reversedArray);
};

reverseArray(arrayToReverse);

/* The second, reverseArrayInPlace, does what the reverse method does: it modifies
the array given as argument by reversing its elements. */

var newArrayToReverse = [2,4,6,8,10,12,14,16];

function reverseArrayInPlace(newArrayToReverse){
  var x = arrayToReverse.length -1;
  for(counter = 1; counter <= x; counter++){
    //find item 2nd from last, 3rd from last etc
    var itemToMove = newArrayToReverse[x-counter];
    //add item to the end
    newArrayToReverse.push(itemToMove);
    //remove item
    newArrayToReverse.splice(x-counter,1);
  };
  //console.log(reversedArray);
  console.log("This array has been reversed in place: " + newArrayToReverse);
};

reverseArrayInPlace(newArrayToReverse);

`Blockquote`
2 Likes

Hey guys, I’m quite stuck at this point. I quickly saw a few answers here and I couldn’t have come up with that and it’s a bit frustrating yet normal I guess.
Also have checked the book’s solution for the Sum of a range:

function range(start, end, step = start < end ? 1 : -1) {
  let array = [];

  if (step > 0) {
    for (let i = start; i <= end; i += step) array.push(i);
  } else {
    for (let i = start; i >= end; i += step) array.push(i);
  }
  return array;
}

function sum(array) {
  let total = 0;
  for (let value of array) {
    total += value;
  }
  return total;
}

and I found it “simpler” to understand, but still can’t figure out what this expression means??:

step = start < end ? 1 : -1

Like, how do you interpret it? It’s a third argument that the function takes, isn’t it? The variable step will take start when it’s less than end, which at the same time … what are the 1 and -1 referring to?

Thank you so much in advance. Any recommendations on how to improve my knowledge so far? I was thinking of doing all of the exercises of Javascript again.

1 Like