Timkor

triangleNaming

Mar 18th, 2021 (edited)
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. вивести трикутник
  3.  
  4. ***
  5.  **
  6.   *
  7. */
  8.  
  9.  
  10. let triangle = +parseInt(prompt("введіть розмір трикутника")) /* іменування змінної не каже явно, що це розмір,
  11.                                                       неточні іменування ускладнюють читання коду, та написання також */
  12. for (let i = triangle; i > 0; i--) {
  13.     for (let a = triangle; a >= 0; a--) { // підправив умову
  14.         if (a >= i) {
  15.             console.put(" ")
  16.         } else {
  17.             console.put("*")
  18.         }
  19.     }
  20.     console.log() // тут варто лише переводити рядок, а всі зірки виводити в одному місці, підправив умову
  21. }
  22. /* норм рішення, але іменування не ідеальні, наскільки це важливо тримайте лонгрід: маємо спочатку
  23. * let triangle = +parseInt(prompt("введіть розмір трикутника"))  - тут розуміємо з месаджу, що розмір
  24. * уявіть, що кода більше, і десь ми зустрвчаємо ваш цикл:
  25. * for (let i = triangle; i > 0; i--) {
  26. *     for (let a = triangle; a >= 0; a--) // тут складніше зрозуміти, і доводиться або читати з рантаймом в голові,
  27. * але спочатку шукати що клали у змінну triangle. порівняйте:
  28. * */
  29.  
  30. let triangleSize = +parseInt(prompt("введіть розмір трикутника"))
  31. for (let starNum = triangleSize; starNum > 0; starNum--) { /* можна іменувати rowNum,але тоді з нуля логічніше збільшувати
  32.    до розміру, під поведінку зкожним рядком зменьшується від розміру до нуля  підходить кількість зірок */
  33.     for (let a = triangleSize; a >= 0; a--) { /* тут важко дати назву лічильнику, щоб це була
  34.         position то логічніше, щоб вона теж починалася з нуля (тоді ще умову поправит треба), а як інакше назвати, щоб ваш
  35.         код почав допомагати мені його читати, бо зараз я відчуваю себе Каштанкою у лодці, а код мені такий: "Аа-а А а"
  36.         як можна словами назвати сутність на кожному рядку , що змінюється від розміру до нуля? Від нуля до розміру
  37.         підішла б поточна позиція де ставимо символ, .. можливо я не правильно зрозумів ваш алгоритм , цікаво, як ви
  38.         його писали, якими сутністями оперували, абстрактними виходить - це ж важко!)) */
  39.  
  40. }
  41. /* спробую поправити як розумію ваш алгоритм */
  42. let triangleSize = +parseInt(prompt("введіть розмір трикутника")) // тепер де б в коді ми не прочитали таку змінну - зрозуміло що в ній.
  43. for (let rowNumber = 0; rowNumber < triangleSize; rowNumber++) { /* рядки від нульового до розімру трикутника, можна row
  44.     але різниця тоді до triangle може здатися вам тонкою, хоча row буде норм тут для лічильника. Лічильникі мають підказку
  45.     в своєї суті рахувати, перелічувати щось. */
  46.     for (let position = 0; position < triangleSize; position++) { // можна було б ще ікс і ігрек замість рядків та позицій
  47.         if (position >= rowNumber) { // не дуже явна залежність між рядком, позицією
  48.             console.put("*") // і тим що треба виводити в ній.
  49.         } else {
  50.             console.put(" ")
  51.         }
  52.     }
  53.     console.log()
  54. }
  55. /*
  56. Невдалі іменування ускладнюють код, а ще коли важко підібрати добре іменування - це може бути знак того, що реалізація,
  57. або сам алгоритм не ідеальні.
  58. Як можна полегшити написання коду, що має вирішувати задачу - декомпозуємо задачу на підзадачи описані простими словами:
  59. * отримати розмір
  60. * виводитити рядки розмір разів переводячи на наступний
  61. *   на кожному рядку вивести потрібну кількість пробілів
  62. *   на кожному рядку вивести потрібну кількість зірок
  63. * а коли вже є розуміння виражене словами, то писати код легше, і читатися він буде зрозуміліше.
  64. * */
  65. let numberOfSpaces = 0; // скільки потрібно вивести пробілів
  66. let numberOfStars = triangleSize; // скільки потрібно вивести зірок
  67. for (let row = 0; row < triangleSize; row++) {
  68.     for (let space = 0; space < numberOfSpaces; space++) {
  69.        console.put(" ")
  70.     }
  71.     for (let star = 0; star < numberOfStars; star++) {
  72.         console.put("*")
  73.     }
  74.     numberOfStars--; // підготуємо кількості символів на наступну ітерацію
  75.     numberOfSpaces++;
  76.     console.log()
  77. }
  78.  
  79. /*  ваше рішення норм , інформація для полегшення написання коду більш складних задач
  80. Гарного коду!*/
Add Comment
Please, Sign In to add comment