Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Кількість слів у рядку
- Спитайте людину про рядок і виведіть на екран кількість слів у рядку.
- Хочемо зауважити, що слово - це послідовність літер. Все, що не-літера - вважається роздільником.
- Таблиця ASCII у допомогу :)
- Ви реалізували деяку інтерпретацію цієї задачі, але не вказали яку саме , тому я не зможу оцініти
- коректність рішення у повній мірі, бо не маю умови, але намагатимусь дещо порадити */
- let a = prompt('Введіть речення(Eng)', '') /* іменування змінних при читанні та створенні коду це можливість
- зробити ці процеси більш приємними - бо покращується їх сприйняття, не треба тримата в голові що a це речення а k його довжина,
- натомість можна зосередитися на важливому та більш цікавому - на самому алгоритмі, зробити його оптимальнішим, простішим.*/
- let b = [] // масиви називають іменником у множині, по тому що вони містять в контексті задачі що вирішується.
- let i = 0 // якщо змінна потрібна лише в середині циклу, а зовні ні, то зручно її там і створити. Для такої змінної іменування норм.
- let n = 0 // краще створювати змінну якомога ближче до місця використання, ну і тут іменування не дуже допомагає зрозуміти для чого вона є
- let k = a.length
- for (i; i < a.length; i++) { /* фор міститить три блока: (ініціалізація; умова; дія після тіла циклу). Можна пропускати будь-який.
- for (; i < a.length; i++) не треба писати і; краще пропустити ініц. якщо змінна вже створена та містить потрібне значення.
- Ну а ще можна вказати for (; i < k; i++) раз вже створили змінну з довжиною рядку, то доцільно використати. */
- b[i] = a.charCodeAt(i)
- }
- i = 0
- for (i; i < k; i++) {
- if (b[i] == 32 || b[i] == 46) { /* тут норм, але загалом варто використовувати більш точне , суворе порівняння - у js воно потрійне.
- Нижче дещо про це у прикладі. */
- n++
- }
- }
- alert('Кількість елементів: ' + n)
- /* порівняйте код з іменуваннями та коментарями */
- let line = prompt('Введіть речення(Eng)', '') // рядок від користувача
- let lineCharCodes = [] // масив для ASCII кодів символів рядка
- let lineLength = line.length
- // заповнюємо масив кодами
- for (let i = 0; i < lineLength; i++) {
- lineCharCodes[i] = line.charCodeAt(i)
- }
- // перебираємо масив рахуємо ... слова? (насправді ні)
- let wordsNumber = 0 /* кількість слів - норм іменування... могло бути, бо на справді тут буде підраховуватися кількість пробілів та крапок.
- Напркилад у рядку може бути трикрапка, або декілька пробілів поспіль, або починатися / закінчуватися рядок може пробілом.
- Ну і взагалі - не тільки ці два символи у оригінальній умові задачі мають вважатися роздільниками. */
- for (let i = 0; i < lineCharCodes.length; i++) {
- if (lineCharCodes[i] === 32 || lineCharCodes[i] === 46) {
- wordsNumber++
- }
- }
- alert('Кількість елементів: ' + wordsNumber)
- /* щодо оптимізації, можливо йти по рядку як по масиву (за індеком) та перевіряти код, але використання масиву тут
- * вважаю доцільним, бо миж вчимося, чим більше коду з масивами - тим простіше поглиблювати їх розуміння. */
- // корисно розуміти чому == та === повертають такі значення. Приведення типів - це коли js перетворює типи до одного, якщо це можливо.
- console.log(1 == '1') // значення рівні якщо привести типи?
- console.log(1 === '1') // значення ідентичні?
- // оператор ! - це інверсія, тобто робить з правди лож, та навпака.
- console.log(1 != '1') // значення різні навіть якщо привести типи?
- console.log(1 !== '1') // значення не ідентичні?
- // Гарного коду!
Add Comment
Please, Sign In to add comment