Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //https://zero.p2p.shpp.me/tasks/4_1_cash_machine.html
- // Інна Заїка
- /*
- Створив псевдокод з таких логічних етапів-блоків:
- створити дані (масив карток)
- ініціалізувати початковй стан карток (всі по нулях у нас)
- прийняти валідний номер карти
- прийняти валідну суму патежу
- зробити поповнення обраної картки на обрану суму картки
- вивести стан всіх карток
- вивести сумму на всіх картках
- розлянемо та конкретизуємо: прийняти валідний номер карти:
- зараз є так:
- 1 повторювати безкінечно в циклі
- 2 запропонувати ввести номер карти (покласти до змінної кардНомер)
- 3 якщо кардНомер не валідний продовжувати введення 2
- інакше перервати вічний цикл
- необхідний мінімум (саме такого кретерію раджу дотримуватися, звісно не йдеться про втрату якості чи функціоналу)
- 1 запропонувати ввести номер карти (покласти до змінної кардНомер)
- 2 поки кардНомер не валідний повторювати введення 1
- ці два нупкти мона перемтавити місцями звісно, важливо те, що після них будемо мати валідний номер картки.
- Цей псевдокод можна реалізувати елегантно, без брейку та контінью, якщо схочете зробіть це самостійно, мій варіант "схований" нижче-знизу цієї пасти
- */
- let cards = [];// масив з карток
- for (let i = 0; i < 10; i++) {
- cards[i] = 0;//на всих картках баланс нуль
- }
- let cardNumber;// змінна номер картки
- while (true) {
- cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки, перевіряємо на валідність
- if (!((cardNumber >= 0) && (cardNumber <= 9))) { // є зайві дужки
- alert("Не валідний номер картки!");
- continue;// продовжуємо - якщо не інвертовувати умову, то контінью не знадобиться.)
- }
- break;// зупинка - ьрейк буває корисним, як і контінью, а буває свідчить про недоліки архітектури (алгоритму)
- }
- let money; // створимо цю змінну вище, тоді далі буде простіше відокреми логічні етапи-блоки коду.
- while (true) {
- /*let*/ money = +prompt(" Яку суму положити на картку?");// ложимо сумму на картку
- if (!((money >= -1000) && (money <= 1000))) {
- alert("Не можливо виконати дану операцію");
- continue;
- }
- //cards[cardNumber] += money; // тут один логічний блок коду поміщений всередину іншого, варто відокремити.
- break;
- }
- cards[cardNumber] += money; // логічний етап: зробити поповнення обраної картки на обрану суму картки - відокремлено
- let moneySum = 0;
- for (let i = 0; i < cards.length; i++) {
- moneySum += cards[i];
- }
- console.log("Загальна сума: " + moneySum);
- // правильне рішення, продуманий алгоритм, стиль коду витримано, - добра робота!
- номерКартки = -1 //якийсь невалідний номер
- поки (картка не валідна) {
- номерКартки = +(введіть номер картки)
- }
- // ще нижче код
- let cardNumber = -1; // ініціалізуємо невалідним значенням щоб зайти в цикл, не подобається мені так, нижче є інакше.
- while (!(cardNumber >= 0 && cardNumber <= 9)) { // перевіряємо на валідність
- cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки
- }
- // щоб не ініціалізувати невалідним значенням використаємо do while
- let cardNumber = 0; // ініціалізуємо будьяким значенням
- do {
- cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки,
- } while (!(cardNumber >= 0 && cardNumber <= 9)); // перевіряємо на валідність
- // є ще такий недоваріант:
- let cardNumber = 0; // ініціалізуємо ,elmzrbv значенням
- while (!((cardNumber = +prompt(" введіть номер картки(від 0 до 9)")) >= 0 && cardNumber <= 9)) {
- // вводимо номер картки, та перевіряємо на валідність прямо в умові циклу - нечитабильно, не пишить таке.)
- }
- // Згадалося ще , є думка, що варто зациклити програму, ну щоб вводити можна було досхочу картки та суми і виводились результати, ну - цікаво ж! Вважаю це по особистому побажанню кожного. Я б, мабуть, спробував принаймні побавитися.
- // далі трохи про функції, якщо забажаєте
- let cardNumber = -1; // ініціалізуємо невалідним значенням щоб зайти в цикл, не подобається мені так, нижче є інакше.
- while (!(cardNumber >= 0 && cardNumber <= 9)) { // перевіряємо на валідність -
- cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки
- }
- // хочу поділитися з вами задоволенням від того як красиво функція тут буде працювати:
- //свторимо функцію що отримає номер картки, а повертає тру якщо картка валідна, форс -якщо не валідна. Такі функції прийнято іменувати починаючи з is...
- function isValidCard(numberOfCard) {
- if (numberOfCard >= 0 && numberOfCard <= 9) {
- return true;
- } else {
- return false;
- }
- }
- // навмисно зараз написав функцію "по навчальному", поміркуйте, чому можна не писати елсе і функція буде працювати так само?
- // більш "доросла" весрія функції виглядатиме так
- function isValidCard(numberOfCard) {
- return (numberOfCard >= 0 && numberOfCard <= 9); // саме так це працює, повернемо тру, коли вираз трушний і навпаки.
- }
- // тоді наш блок вайлу буде таким
- let cardNumber = -1; // ініціалізуємо невалідним значенням щоб зайти в цикл, не подобається мені так, нижче є інакше.
- while (!isValid(cardNumber)) { // перевіряємо на валідність передавши номер карти в функцію, а вона повертає те саме, що й вираз порівняння який тут був. Інверрсію лишаємо оператором !, ніколи не треба створювати функціі isNotValid ...
- cardNumber = +prompt(" введіть номер картки(від 0 до 9)");// вводимо номер картки
- }
- // код стає прозою)
- // Гарного коду!
Add Comment
Please, Sign In to add comment