Есть функция, которая принимает три аргумента: цену товара, который покупаешь, купюру которой расплачиваешься и двумерный массив из денег которые присутствуют в кассе (к примеру в примере ниже пенни суммарно на 1 доллар и 1 цент, двадцаток на 60 долларов), результатом на данном этапе является двумерный массив, который показывает сколько сдачи, каждой купюрой выдали (к примеру двадцатками выдали 40 долларов)
howMuchCid - двумерный массив, который показывает какое количество каждого номинала в кассе (к примеру двадцаток 3, пенни 101)
change - двумерный массив, который показывает сколько сдачи, каждой купюрой выдали (к примеру десяток выдали на 20 долларов) (тот массив который является промежуточным результатом)
Проблема в том, что цикл зацикливается на очевидным для меня образом
Ниже 4 условия, которые на мой взгляд должны работать, но работает только половина (в каждом примере разница только в цене товара)
1) checkCashRegister(30, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);
//работает
2) checkCashRegister(20, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);
//не работает
3) checkCashRegister(24.25, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);
//работает
4) checkCashRegister(24.15, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);
//не работает
Также не понимаю почему массив howMuchCid выглядит одинаково при логировании до цикла и после
Сам код:
function checkCashRegister(price, cash, cid) {
let difference = cash - price;
let PENNY = 0.01;
let NICKEL = 0.05;
let DIME = 0.1;
let QUARTER = 0.25;
let ONE = 1;
let FIVE = 5;
let TEN = 10;
let TWENTY = 20;
let ONEHUNDRED = 100;
let howMuchCid = [["PENNY", Math.round(cid[0][1]/PENNY)], ["NICKEL", Math.round(cid[1][1]/NICKEL)], ["DIME", Math.round(cid[2][1]/DIME)], ["QUARTER", Math.round(cid[3][1]/QUARTER)], ["ONE", Math.round(cid[4][1]/ONE)], ["FIVE", Math.round(cid[5][1]/FIVE)], ["TEN", Math.round(cid[6][1]/TEN)], ["TWENTY", Math.round(cid[7][1]/TWENTY)], ["ONE HUNDRED", Math.round(cid[8][1]/ONEHUNDRED)]];
let change = [["PENNY", 0], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]];
console.log(howMuchCid);
//console.log(difference);
//console.log(change);
while(difference > 0) {
if (difference - ONEHUNDRED >= 0) {
if (howMuchCid[8][1] > 0) {
difference = difference - ONEHUNDRED;
howMuchCid[8][1] = howMuchCid[8][1] - 1;
change[8][1] = change[8][1] + 100;
}
} else if (difference - TWENTY >= 0) {
if (howMuchCid[7][1] > 0) {
difference = difference - TWENTY;
howMuchCid[7][1] = howMuchCid[7][1] - 1;
change[7][1] = change[7][1] + 20;
}
} else if (difference - TEN >= 0) {
if (howMuchCid[6][1] > 0) {
difference = difference - TEN;
howMuchCid[6][1] = howMuchCid[6][1] - 1;
change[6][1] = change[6][1] + 10;
}
} else if (difference - FIVE >= 0) {
if (howMuchCid[5][1] > 0) {
difference = difference - FIVE;
howMuchCid[5][1] = howMuchCid[5][1] - 1;
change[5][1] = change[5][1] + 5;
}
} else if (difference - ONE >= 0) {
if (howMuchCid[4][1] > 0) {
difference = difference - ONE;
howMuchCid[4][1] = howMuchCid[4][1] - 1;
change[4][1] = change[4][1] + 1;
}
} else if (difference - QUARTER >= 0) {
if (howMuchCid[3][1] > 0) {
difference = difference - QUARTER;
howMuchCid[3][1] = howMuchCid[3][1] - 1;
change[3][1] = change[3][1] + 0.25;
}
} else if (difference - DIME >= 0) {
if (howMuchCid[2][1] > 0) {
difference = difference - DIME;
howMuchCid[2][1] = howMuchCid[2][1] - 1;
change[2][1] = change[2][1] + 0.1;
}
} else if (difference - NICKEL >= 0) {
if (howMuchCid[1][1] > 0) {
difference = difference - NICKEL;
howMuchCid[1][1] = howMuchCid[1][1] - 1;
change[1][1] = change[1][1] + 0.05;
}
} else if (difference - PENNY >= 0) {
if (howMuchCid[0][1] > 0) {
difference = difference - PENNY;
howMuchCid[0][1] = howMuchCid[0][1] - 1;
change[0][1] = change[0][1] + 0.01;
}
}
}
console.log(howMuchCid);
console.log(change);
}
checkCashRegister(24.15, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]); //один из примеров вызова функции