Timkor

ATM

Jul 29th, 2021 (edited)
605
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //https://zero.p2p.shpp.me/tasks/4_1_cash_machine.html
  2. // Інна Заїка
  3. /*
  4. Створив псевдокод з таких логічних етапів-блоків:
  5. створити дані (масив карток)
  6. ініціалізувати початковй стан карток (всі по нулях у нас)
  7. прийняти валідний номер карти
  8. прийняти валідну суму патежу
  9. зробити поповнення обраної картки на обрану суму картки
  10. вивести стан всіх карток
  11. вивести сумму на всіх картках
  12.  
  13. розлянемо та конкретизуємо: прийняти валідний номер карти:
  14. зараз є так:
  15. 1 повторювати безкінечно в циклі
  16. 2 запропонувати ввести номер карти (покласти до змінної кардНомер)
  17. 3 якщо кардНомер не валідний продовжувати введення 2
  18.     інакше перервати вічний цикл
  19.  
  20. необхідний мінімум (саме такого кретерію раджу дотримуватися, звісно не йдеться про втрату якості чи функціоналу)
  21. 1 запропонувати ввести номер карти (покласти до змінної кардНомер)
  22. 2 поки кардНомер не валідний повторювати введення 1
  23. ці два нупкти мона перемтавити місцями звісно, важливо те,  що після них будемо мати валідний номер картки.
  24.  
  25. Цей псевдокод можна реалізувати елегантно, без брейку та контінью, якщо схочете зробіть це самостійно, мій варіант "схований"  нижче-знизу цієї пасти
  26.  
  27. */
  28.  
  29. let cards = [];// масив з карток
  30.  
  31. for (let i = 0; i < 10; i++) {
  32.     cards[i] = 0;//на всих картках баланс нуль
  33. }
  34.  
  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. // Гарного коду!
RAW Paste Data