W dzisiejszej lekcji poznamy jak ważyć liczby w pozycyjnych systemach liczbowych. Brzmi groźnie, ale to bardzo proste.

Od razu mówię, nie jestem matematykiem. Ale systemy liczbowe są albo pozycyjne albo addytywne. Oto addytywny system liczbowy:

1 = |

||| = 1 + 1 + 1 (3)

Ok, a to pozycyjny system liczbowy o bazie 10:

1 = 1

111 = 100 + 10 + 1

Teraz jak to wszystko działa:

  • Pozycję wyznaczamy od prawej do lewej
  • Pozycję liczymy od zera
  • Waga to baza do potęgi pozycja
  • Wartość to wartość cyfry razy waga
  • Końcowa wartość to dodane do siebie wartości

Łatwiej to na przykładach zrozumieć:

Baza = 10 (dziesiętny)

Liczba = 1

Pozycja = 0

Wartość = 1 * 10^0, czyli 1

Okej, teraz trudniejszy przykład

Liczba - 137

Baza - 10

Cyfry -   1 3 7
Pozycje - 2 1 0

Wartości - 1 * 10^2 + 3 *10^1 + 7 * 10^0

Ok, jak w JS możemy „zabrać” ostatnią cyfrę?

console.log(137 % 10)
//7

A jak „urwać” ostatnią cyfrę?

let number = 123;

let number2 = Math.floor(number / 10);

console.log(number2);
//12

A jak coś do potęgi podnosimy?

let number = 123;
let lastDigit = 123 % 10; //3

let pos = 0;
let base = 10;

let val = lastDigit * Math.pow(base, pos); //3 * 10^0
console.log(val);
//3 * 10^0 -> 3 * 1 -> 3

Możemy teraz napisać taką śmieszną funkcję, która nam zamienia liczbę dziesiętną na zważone wartości:

function weightsOfDecimalNumber(num){

    let weights = [];

    let i = 0;

    while(num !== 0){
        let lastDigit = num % 10;

        weights.push(lastDigit * Math.pow(10, i));

        i++;

        num = Math.floor(num / 10);
    }

    return weights;
}

console.log(weightsOfDecimalNumber(137));
//[ 7, 30, 100 ]

To tylko taki trening przed prawdziwą zabawą, upewniam się, że „jesteśmy na tej samej stronie”. Więcej w następnych lekcjach.