SHOW:
|
|
- or go back to the newest paste.
| 1 | //https://zero.p2p.shpp.me/tasks/4_1_cash_machine.html | |
| 2 | // Інна Заїка | |
| 3 | - | let cards = [];// масив з карток |
| 3 | + | /* |
| 4 | Створив псевдокод з таких логічних етапів-блоків: | |
| 5 | створити дані (масив карток) | |
| 6 | ініціалізувати початковй стан карток (всі по нулях у нас) | |
| 7 | прийняти валідний номер карти | |
| 8 | прийняти валідну суму патежу | |
| 9 | зробити поповнення обраної картки на обрану суму картки | |
| 10 | вивести стан всіх карток | |
| 11 | вивести сумму на всіх картках | |
| 12 | ||
| 13 | - | if (!((cardNumber >= 0) && (cardNumber <= 9))) {
|
| 13 | + | розлянемо та конкретизуємо: прийняти валідний номер карти: |
| 14 | зараз є так: | |
| 15 | - | continue;// продовжуємо |
| 15 | + | 1 повторювати безкінечно в циклі |
| 16 | 2 запропонувати ввести номер карти (покласти до змінної кардНомер) | |
| 17 | 3 якщо кардНомер не валідний продовжувати введення 2 | |
| 18 | - | break;// зупинка |
| 18 | + | інакше перервати вічний цикл |
| 19 | ||
| 20 | необхідний мінімум (саме такого кретерію раджу дотримуватися, звісно не йдеться про втрату якості чи функціоналу) | |
| 21 | - | let money = +prompt(" Яку суму положити на картку?");// ложимо сумму на картку
|
| 21 | + | 1 запропонувати ввести номер карти (покласти до змінної кардНомер) |
| 22 | 2 поки кардНомер не валідний повторювати введення 1 | |
| 23 | ці два нупкти мона перемтавити місцями звісно, важливо те, що після них будемо мати валідний номер картки. | |
| 24 | ||
| 25 | Цей псевдокод можна реалізувати елегантно, без брейку та контінью, якщо схочете зробіть це самостійно, мій варіант "схований" нижче-знизу цієї пасти | |
| 26 | - | cards[cardNumber] += money; |
| 26 | + | |
| 27 | */ | |
| 28 | ||
| 29 | let cards = [];// масив з карток | |
| 30 | ||
| 31 | for (let i = 0; i < 10; i++) {
| |
| 32 | cards[i] = 0;//на всих картках баланс нуль | |
| 33 | } | |
| 34 | ||
| 35 | - | console.log("Загальна сума: " + moneySum); |
| 35 | + | |
| 36 | let cardNumber;// змінна номер картки | |
| 37 | while (true) {
| |
| 38 | cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки, перевіряємо на валідність
| |
| 39 | if (!((cardNumber >= 0) && (cardNumber <= 9))) { // є зайві дужки
| |
| 40 | alert("Не валідний номер картки!");
| |
| 41 | continue;// продовжуємо - якщо не інвертовувати умову, то контінью не знадобиться.) | |
| 42 | } | |
| 43 | ||
| 44 | break;// зупинка - ьрейк буває корисним, як і контінью, а буває свідчить про недоліки архітектури (алгоритму) | |
| 45 | } | |
| 46 | ||
| 47 | let money; // створимо цю змінну вище, тоді далі буде простіше відокреми логічні етапи-блоки коду. | |
| 48 | while (true) {
| |
| 49 | /*let*/ money = +prompt(" Яку суму положити на картку?");// ложимо сумму на картку
| |
| 50 | if (!((money >= -1000) && (money <= 1000))) {
| |
| 51 | alert("Не можливо виконати дану операцію");
| |
| 52 | continue; | |
| 53 | } | |
| 54 | //cards[cardNumber] += money; // тут один логічний блок коду поміщений всередину іншого, варто відокремити. | |
| 55 | break; | |
| 56 | } | |
| 57 | ||
| 58 | cards[cardNumber] += money; // логічний етап: зробити поповнення обраної картки на обрану суму картки - відокремлено | |
| 59 | ||
| 60 | let moneySum = 0; | |
| 61 | for (let i = 0; i < cards.length; i++) {
| |
| 62 | moneySum += cards[i]; | |
| 63 | } | |
| 64 | ||
| 65 | console.log("Загальна сума: " + moneySum);
| |
| 66 | ||
| 67 | // правильне рішення, продуманий алгоритм, стиль коду витримано, - добра робота! | |
| 68 | ||
| 69 | ||
| 70 | ||
| 71 | ||
| 72 | ||
| 73 | ||
| 74 | ||
| 75 | ||
| 76 | ||
| 77 | ||
| 78 | ||
| 79 | ||
| 80 | ||
| 81 | ||
| 82 | ||
| 83 | ||
| 84 | ||
| 85 | ||
| 86 | ||
| 87 | ||
| 88 | ||
| 89 | ||
| 90 | ||
| 91 | ||
| 92 | ||
| 93 | ||
| 94 | номерКартки = -1 //якийсь невалідний номер | |
| 95 | поки (картка не валідна) {
| |
| 96 | номерКартки = +(введіть номер картки) | |
| 97 | } | |
| 98 | // ще нижче код | |
| 99 | ||
| 100 | ||
| 101 | ||
| 102 | ||
| 103 | ||
| 104 | ||
| 105 | ||
| 106 | ||
| 107 | ||
| 108 | ||
| 109 | ||
| 110 | ||
| 111 | ||
| 112 | ||
| 113 | ||
| 114 | ||
| 115 | ||
| 116 | ||
| 117 | ||
| 118 | ||
| 119 | ||
| 120 | ||
| 121 | ||
| 122 | ||
| 123 | ||
| 124 | ||
| 125 | ||
| 126 | ||
| 127 | ||
| 128 | ||
| 129 | ||
| 130 | let cardNumber = -1; // ініціалізуємо невалідним значенням щоб зайти в цикл, не подобається мені так, нижче є інакше. | |
| 131 | while (!(cardNumber >= 0 && cardNumber <= 9)) { // перевіряємо на валідність
| |
| 132 | cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки
| |
| 133 | } | |
| 134 | ||
| 135 | // щоб не ініціалізувати невалідним значенням використаємо do while | |
| 136 | let cardNumber = 0; // ініціалізуємо будьяким значенням | |
| 137 | do {
| |
| 138 | cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки,
| |
| 139 | } while (!(cardNumber >= 0 && cardNumber <= 9)); // перевіряємо на валідність | |
| 140 | ||
| 141 | // є ще такий недоваріант: | |
| 142 | let cardNumber = 0; // ініціалізуємо ,elmzrbv значенням | |
| 143 | while (!((cardNumber = +prompt(" введіть номер картки(від 0 до 9)")) >= 0 && cardNumber <= 9)) {
| |
| 144 | // вводимо номер картки, та перевіряємо на валідність прямо в умові циклу - нечитабильно, не пишить таке.) | |
| 145 | } | |
| 146 | ||
| 147 | ||
| 148 | // Згадалося ще , є думка, що варто зациклити програму, ну щоб вводити можна було досхочу картки та суми і виводились результати, ну - цікаво ж! Вважаю це по особистому побажанню кожного. Я б, мабуть, спробував принаймні побавитися. | |
| 149 | // далі трохи про функції, якщо забажаєте | |
| 150 | ||
| 151 | ||
| 152 | ||
| 153 | ||
| 154 | ||
| 155 | ||
| 156 | ||
| 157 | ||
| 158 | ||
| 159 | ||
| 160 | ||
| 161 | ||
| 162 | ||
| 163 | ||
| 164 | ||
| 165 | ||
| 166 | ||
| 167 | ||
| 168 | ||
| 169 | ||
| 170 | ||
| 171 | ||
| 172 | ||
| 173 | ||
| 174 | let cardNumber = -1; // ініціалізуємо невалідним значенням щоб зайти в цикл, не подобається мені так, нижче є інакше. | |
| 175 | while (!(cardNumber >= 0 && cardNumber <= 9)) { // перевіряємо на валідність -
| |
| 176 | cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки
| |
| 177 | } | |
| 178 | // хочу поділитися з вами задоволенням від того як красиво функція тут буде працювати: | |
| 179 | //свторимо функцію що отримає номер картки, а повертає тру якщо картка валідна, форс -якщо не валідна. Такі функції прийнято іменувати починаючи з is... | |
| 180 | function isValidCard(numberOfCard) {
| |
| 181 | if (numberOfCard >= 0 && numberOfCard <= 9) {
| |
| 182 | return true; | |
| 183 | } else {
| |
| 184 | return false; | |
| 185 | } | |
| 186 | } | |
| 187 | // навмисно зараз написав функцію "по навчальному", поміркуйте, чому можна не писати елсе і функція буде працювати так само? | |
| 188 | ||
| 189 | // більш "доросла" весрія функції виглядатиме так | |
| 190 | function isValidCard(numberOfCard) {
| |
| 191 | return (numberOfCard >= 0 && numberOfCard <= 9); // саме так це працює, повернемо тру, коли вираз трушний і навпаки. | |
| 192 | } | |
| 193 | // тоді наш блок вайлу буде таким | |
| 194 | let cardNumber = -1; // ініціалізуємо невалідним значенням щоб зайти в цикл, не подобається мені так, нижче є інакше. | |
| 195 | while (!isValid(cardNumber)) { // перевіряємо на валідність передавши номер карти в функцію, а вона повертає те саме, що й вираз порівняння який тут був. Інверрсію лишаємо оператором !, ніколи не треба створювати функціі isNotValid ...
| |
| 196 | cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки
| |
| 197 | } | |
| 198 | // код стає прозою) | |
| 199 | // Гарного коду! |