Timkor

fir

Mar 12th, 2021 (edited)
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     // Задача про ялинку - дуже важко читати код, що не дотримає стилю.
  2.     // Про стиль https://zero.p2p.shpp.me/tutorials/80_Style.html
  3.     let size = +prompt("Вибери який ти хочеш розмір ялинки")
  4.     let x= size
  5.     let i
  6.     let h= size
  7.     let p=size
  8.     for(let j= 0;size-1>j;j++){
  9.     console.log()
  10.     i=0
  11.     x=x-1
  12.     h=h+1
  13.     for(let w= size*2;w>i;++i){
  14.     if(i<=x)console.put(" ")
  15.     else if(h<=i)console.put(" ")
  16.     else console.put("*")
  17. }
  18. }
  19.     console.log()
  20.     for(let p= 0;p<=size;++p){
  21.     console.put(" ")
  22.  
  23.     if(p===size-1)console.put("*")
  24.     }
  25.     /*я не знаю як зробити щоб працювало з не парними числами - не зрозумів запитання, будь ласка перефразуйте
  26. самими простими словами які тільки знайдете */
  27.  
  28. // Задача про ялинку - добре, що є інструменти які допомагають привести код до стилю.
  29. let size = +prompt("Вибери який ти хочеш розмір ялинки")
  30. let x = size /* дуже зручно читати код як прозу, для цього змінним потрібні семантичні іменування, які допомагають
  31.                 розуміти для чого змінна. А ще тоді є можливість самому зрозуміти чи добре все в коді: коли іменування
  32.                 логічні та доцільні, а інколи важко їх придумати, а може що вони дублюються - тоді можна пошукати
  33.                 покращення у алгоритмі */
  34. let i
  35. let h = size
  36. let p = size
  37. for (let j = 0; size - 1 > j; j++) { // for (let j = 0; j < size - 1; j++) звичніше
  38.     console.log() // можна закінчувати ітерацію переводом рядка, це звичніше.
  39.     i = 0 /* для нуля (а ще для одиниці) можна не створювати окрему змінну. Потім додивився,що збільшуєте її у форі.. , можна так for (let i = 0, w = size * 2; i < w; ++i) при чому можна не створювати w , але це якби оптимізація, якщо я вірно розумію. */
  40.     x = x - 1 // x--; або x -=1;
  41.     h = h + 1 // можна скорочувати такі вирази h += 1; або h++;
  42.     for (let w = size * 2; w > i; ++i) {
  43.         if (i <= x) { // до якогось значення - знов таки зручніше сприймати змінну на першому місті: if (x >= 0)
  44.             console.put(" ")
  45.         }
  46.         else if (h <= i) { // не впевнений, що по ТЗ треба виводити пробіли після зірок, але добре
  47.             console.put(" ")
  48.         }
  49.         else console.put("*")
  50.     }
  51. }
  52. console.log()
  53. for (let p = 0; p <= size; ++p) {
  54.     console.put(" ")
  55.     if (p === size - 1) console.put("*") // можна вивнести з циклу змінивши його умову на (p < size), і тоді позбавитися іфу
  56. }
  57. /* код норм, але його не дуже просто читати та розуміти, бо іменування не допомагають, не підказують, коментарів немає -
  58. * тобто вони теж не пояснюють ідею та кроки її реалізації, стилю коду не дотримуєтесь, і це все додає складності як у
  59. * читання коду, так і у написання.
  60. * Ще є рекомендація до декомопзиції (це коли розділяємо задачу на підзадачи на етапі обміркування рішення, сотавляємо
  61. * алгоритм в голові, а може і на папері, а потім ці підзадачі реалізуємо окремими логічними блоками коду)
  62. * Зовнішній цикл має одну відповідальність (саме одна і повинна бути у одного логічного блока коду - тільки різних масштабів)
  63. * він переводить рядок потрібну кількість разів. Що ж до вкладенного циклу - то він робить
  64. * - виведення пробілів до зірок
  65. * - виведення зірок
  66. * - виведення пробілів після зірок
  67. * МОжливо розділити на три окремих цикла ці підзадачі? Можливо це додасть коду читабєльності,бо кількість вкладених
  68. * умов зменьшиться (вони взагалі зникнуть), а може кількість змінних тез зменшиться, ну і полегшиться написання такої
  69. * програми
  70. * Гарного коду*/
Add Comment
Please, Sign In to add comment