Timkor

wordsNumber

Mar 3rd, 2021 (edited)
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Кількість слів у рядку
  2.  
  3. Спитайте людину про рядок і виведіть на екран кількість слів у рядку.
  4. Хочемо зауважити, що слово - це послідовність літер. Все, що не-літера - вважається роздільником.
  5. Таблиця ASCII у допомогу :)
  6.  
  7. Ви реалізували деяку інтерпретацію цієї задачі, але не вказали яку саме , тому я не зможу оцініти
  8. коректність рішення у повній мірі, бо не маю умови, але намагатимусь дещо порадити */
  9.  
  10. let a = prompt('Введіть речення(Eng)', '') /* іменування змінних при читанні та створенні коду це можливість
  11. зробити ці процеси більш приємними - бо покращується їх сприйняття, не треба тримата в голові що a це речення а k його довжина,
  12. натомість можна зосередитися на важливому та більш цікавому - на самому алгоритмі, зробити його оптимальнішим, простішим.*/
  13. let b = [] // масиви називають іменником у множині, по тому що вони містять в контексті задачі що вирішується.
  14. let i = 0 // якщо змінна потрібна лише в середині циклу, а зовні ні, то зручно її там і створити. Для такої змінної іменування норм.
  15. let n = 0 // краще створювати змінну якомога ближче до місця використання, ну і тут іменування не дуже допомагає зрозуміти для чого вона є
  16. let k = a.length
  17. for (i; i < a.length; i++) { /* фор міститить три блока: (ініціалізація; умова; дія після тіла циклу). Можна пропускати будь-який.
  18. for (; i < a.length; i++) не треба писати і; краще пропустити ініц. якщо змінна вже створена та містить потрібне значення.
  19. Ну а ще можна вказати for (; i < k; i++) раз вже створили змінну з довжиною рядку, то доцільно використати. */
  20.     b[i] = a.charCodeAt(i)
  21. }
  22. i = 0
  23. for (i; i < k; i++) {
  24.     if (b[i] == 32 || b[i] == 46) { /* тут норм, але загалом варто використовувати більш точне , суворе порівняння -  у js воно потрійне.
  25.         Нижче дещо про це у прикладі. */
  26.         n++
  27.     }
  28. }
  29. alert('Кількість елементів: ' + n)
  30.  
  31. /* порівняйте код з іменуваннями та коментарями */
  32.  
  33. let line = prompt('Введіть речення(Eng)', '') // рядок від користувача
  34. let lineCharCodes = [] // масив для ASCII кодів символів рядка
  35. let lineLength = line.length
  36. // заповнюємо масив кодами
  37. for (let i = 0; i < lineLength; i++) {
  38.     lineCharCodes[i] = line.charCodeAt(i)
  39. }
  40. // перебираємо   масив  рахуємо ... слова?  (насправді ні)
  41. let wordsNumber = 0 /* кількість слів  - норм іменування... могло бути, бо на справді тут буде підраховуватися кількість пробілів та крапок.
  42. Напркилад у рядку може бути трикрапка, або декілька пробілів поспіль, або починатися / закінчуватися рядок може пробілом.
  43. Ну і взагалі - не тільки ці два символи у оригінальній умові задачі мають вважатися роздільниками. */
  44. for (let i = 0; i < lineCharCodes.length; i++) {
  45.     if (lineCharCodes[i] === 32 || lineCharCodes[i] === 46) {
  46.         wordsNumber++
  47.     }
  48. }
  49. alert('Кількість елементів: ' + wordsNumber)
  50.  
  51. /* щодо оптимізації, можливо йти по рядку як по масиву (за індеком) та перевіряти код, але використання масиву тут
  52. * вважаю доцільним, бо миж вчимося, чим більше коду з масивами - тим простіше поглиблювати їх розуміння. */
  53.  
  54.  
  55. // корисно розуміти чому == та === повертають такі значення. Приведення типів - це коли js перетворює типи до одного, якщо це можливо.
  56. console.log(1 == '1') // значення рівні якщо привести типи?
  57. console.log(1 === '1') // значення ідентичні?
  58.  
  59. // оператор ! - це інверсія, тобто робить з правди лож, та навпака.
  60. console.log(1 != '1') // значення різні навіть якщо привести типи?
  61. console.log(1 !== '1') // значення не ідентичні?
  62.  
  63. // Гарного коду!
Add Comment
Please, Sign In to add comment