Timkor

ATM

Mar 14th, 2021 (edited)
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*Задача про банкомат:*/
  2.  
  3. /*============= поперше =========================*/
  4.  
  5.  
  6. for (let j = 2; j > 1; j++) { // тут вайл більш підійде вважаю.
  7.     numCard = +prompt("Введите номер карты от 0 до 9:");
  8.     if (numCard < 0 || numCard > 9) { // можна спочатку відсіяти шелуху, а потім обробляти валідні дані
  9.         continue
  10.     } else {
  11.         for (let k = 2; k > 1; k++) { // як і тут
  12.             moneyIn = +prompt("Введите сумму от -1000 до 1000:");
  13.             if (moneyIn < -1000 || moneyIn > 1000) {
  14.                 continue
  15.             }
  16.             k = 0  // вайл рішає такі штуки зручніше , був би вайл, тут нічого б не треба було писати, або щось зрозуміле.
  17.         } // Ввод суммы денег
  18.     }
  19.     j = 0 // як і тут.)
  20. } // Ввод номера карты
  21.  
  22. cards[numCard] += moneyIn;
  23.  
  24.  
  25. /*============= подруге =========================*/
  26.  
  27. let cards = [];
  28. cards.lenght = 10;
  29. // в ідеалі кожній змінній надавати окремий рядок із словом let, тоді вони видніші, але зустрічав ще таке:
  30. let numCard,
  31.     moneyIn,
  32.     sumMoney = 0; // але я б і так не "економив".
  33.  
  34. for (let i = 0; i < cards.lenght; i++) {
  35.     cards[i] = (i * 1000); // щедро..
  36. } // Значения для каждой карты
  37.  
  38. for (let j = 2; j > 1; j++) { // тут вайл більш підійде вважаю.
  39.     numCard = +prompt("Введите номер карты от 0 до 9:");
  40.     if (numCard >= 0 && numCard <= 9) {
  41.         for (let k = 2; k > 1; k++) { // як і тут
  42.             moneyIn = +prompt("Введите сумму от -1000 до 1000:");
  43.             if (moneyIn < -1000 || moneyIn > 1000) {
  44.                 continue // і брейк, і контінью бувають зручні і корисні, але майже завжди свідчать про неідеально обраний алгоритм
  45.             } else {
  46.                 k = 0 // вайл рішає такі штуки зручніше , на мій погляд.
  47.             }
  48.         } // Ввод суммы денег
  49.     } else {
  50.         continue
  51.     }
  52.     j = 0
  53. } // Ввод номера карты
  54.  
  55. cards[numCard] += moneyIn;
  56.  
  57. for (let j = 0; j < cards.lenght; j++) {
  58.     console.put(cards[j] + " ");
  59.     sumMoney += cards[j];
  60. } // Вывод баланса баланса + сумма по картам
  61.  
  62. console.log("\nСумма по всем картам: " + sumMoney);
  63.  
  64.  
  65.  
  66.  
  67. /* недолік вашого алгоритму у тому, що він складний, складається з декількох простих підпрограм, але ви його не розклали
  68. * на них, а так і закодили, складно. З цього отримаємо складне читання, складне написання, складне підтримання та внесення
  69. * правок, складне розширення та додавання функціоналу, все склдадне. Псевдокод основної частини такий:
  70. * спитати номер картки: якщо не валідний перепитати;
  71. * спитати суму для поповнення: якщо не валідна - перепитати;
  72. * ваш алгоритм потребує вкладати наступну дію у середину попередньої, це не тільки не зручно писати та читати, а ще
  73. * у коді рівень вкладенності глибокий, а чим він глибший, тим вище когнитивне навантаження, тобто треба тримати
  74. * контекст у голові, і хоча іменування змінних допомагають це робити, все ж коли ми прийдемо до другого елсе  - не факт,
  75. * що не прийдеться повертатится та передивлятися до якої він умови. Пропоную знов таки do .. while (просто зручно тут)
  76. * хоча можна і звичайним вайлом, звісно.. ну а фор - фор крутий коли знаємо кількість ітерації, тобто не напевно знаемо
  77. * а вона може бути виражена числом. Вайл від дувайла відрізняється тим, що дувайл завжди принайсні один раз виконається,
  78. * в той час як вайл може не виконатися жодного, якщо умова в ньому буде false
  79. *
  80. * do {
  81. *   cardNumber = +prompt('Enter card number: ');
  82. * } while (cardNumber < 0 || cardNumber > 9);
  83. * все, коли ми пройдемо такий цикл, то вже маємо валідний номер, так само суму, такі блоки можуть слідувати один за
  84. * одним, не потрібна вкладенність, їх можна винести у окремі функції - а саме так і робиться, у той час як вкладенні
  85. * штуки не так вже просто декомпозувати на окремі підпрограми.
  86. *
  87. * Важливо декомпозувати алгоритм, і закодити його відповідно до підпунктів (підпрограмами), так, вони бувають
  88. * вкладені, але зазвичай можна спростити до окремих, і щоб кожна виконувала б щось одне - мала одну відповідальність кажуть.
  89. *  */
  90. /* Гарного коду! */
Add Comment
Please, Sign In to add comment