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 | // Гарного коду! |