Timkor

firTree part1

Mar 12th, 2021 (edited)
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*вивести на екран ялинку такого розміру, який вказує користувач*/
  2.  
  3.  
  4. /*==================================================================================*/
  5.  
  6. /* якщо вводити висоту ялинки, можна не враховуючи піньок навіть, то це не ускладнить задачу .) */
  7. let numb = prompt("Введите непарное число:"); /* скорочування краще лише ті, які є загальновідомими, тут можна num
  8. хоча якщо відомо розмір чого ми вводимо, то краще sizeOfЩось можливо widthOfTree у вашому коді може підійти */
  9.  
  10. let spc = numb / 2; // space? краще не скорочувати, але якщо кількість пробілів то можна spaceNum
  11. let spc2 = (numb / 2) - 1; // ох, щось пійшли дублюватися змінні..
  12.  
  13. let spc3 = numb / 2;
  14. let spc4 = (numb / 2) - 1;
  15.  
  16. // === Условие непарного числа ===
  17. if (numb % 2 == 0) {
  18.     alert("Вы ввели парное число... Новый год отменяется =(");
  19.     throw new Error("Непарное число");
  20. } else { // скоріш за все після викидання виключення елсе не потрібен.
  21.  
  22.     //=== Цикл новой строки ===
  23.     for (let i = 0; i < numb; i++) {
  24.  
  25.         //Вложенный цикл заполнения строки
  26.         for (let i2 = 0; i2 < numb; i2++) { // j можна
  27.  
  28.             //Условие выполнения отступа или *
  29.             if (spc < i2 || spc2 > i2) {
  30.                 console.put(" ");
  31.             } else {
  32.                 console.put("*");
  33.             }
  34.         }
  35.  
  36.         //Инкремент пременной (косой отступ)
  37.         spc++;
  38.         spc2--;
  39.  
  40.         //Переход на сл. строку
  41.         console.log(""); // можна без параметру console.log()
  42.  
  43.         //Условие последней точки
  44.         if (i > spc4) {
  45.             for (let i3 = 0; i3 < numb; i3++) {
  46.                 //Условие отцентровки
  47.                 if (spc3 < i3 || spc4 > i3) {
  48.                     console.put(" ");
  49.                 } else {
  50.                     console.put("*");
  51.                 }
  52.             }
  53.             break; // буває корисним, але у більшості випадків свідчить про не ідеальний алгоритм. Краще кількість рядків знати.
  54.         }
  55.     }  //=== Конец цикла новой строки ===
  56. } //=== Конец выполнения условия непарного числа ===
  57.  
  58. /* цікаве рішення, з певними але. вважаю, що піньок можна винести з основного циклу , просто винести в окремий
  59. * цикл до середини ширини мінус один вивести пробіли, а потім зірку. Змінні з числовими індексами це не гуд,
  60. * людина заслуговує читати код де змінні мають іменування що підказують для чого вони потрібні, що містять.
  61. * Вже другий код ялинки поспіль в подібному стилі за один вечор, це дивний збіг. Вважаю може бути корисно вам
  62. * передивитися попереднє рев'ю  pastebin.com/pfUpTVzJ , бо вам я б порадив приблизно те саме що до декомпозиції,
  63. * а ще не ускладнювати, а навпаки - робити простіше але читабільніше. Виразити свої вміння можна не
  64. * погіршуючи читабельність коду.  Ваше рішення з іншими іменуваннями :*/
  65.  
  66. let treeWidth = +prompt("Введите непарное число:"); // + перед промпт перетворює строкове значення до числового
  67. // === Условие непарного числа ===
  68. if (treeWidth % 2 === 0) {
  69.     alert("Вы ввели парное число... Новый год отменяется =(");
  70.     throw new Error("Непарное число");
  71. }
  72. /* якщо дані пройшли перевірку, тоді вже працюємо як з валідними. Тобто спочатку відкидаємо "шелуху"*/
  73. let treeHeight = (treeWidth + 1) / 2; // якщо отримаємо непарну ширину то висота без пенька так рахується.
  74. let finishStarPosition = treeWidth / 2; // не зміг підібрати норм іменування, а це сигнал що до уточнення алгоритму.
  75. let startStarPosition = (treeWidth / 2) - 1;
  76.  
  77. // === Цикл новой строки ===
  78. for (let row = 0; row < treeHeight; row++) {
  79.     for (let currentPosition = 0; currentPosition < treeWidth; currentPosition++) { // Вложенный цикл заполнения строки
  80.         if (currentPosition < startStarPosition  || currentPosition > finishStarPosition) { // Условие выполнения отступа или *
  81.             console.put(" ");
  82.         } else {
  83.             console.put("*");
  84.         }
  85.     }
  86.     finishStarPosition++; // Инкремент пременной (косой отступ)
  87.     startStarPosition--;
  88.     console.log(); // Переход на сл. строку
  89. }  // === Конец цикла новой строки ===
  90.  
  91. // Условие последней точки - ми тут, і цього вже достатньо, не треба зайвих умов, циклів. Почитайте про бритву Оккама.)
  92. // піньок
  93. for (let i = 0; i < treeWidth / 2 - 1; i++) {
  94.     console.put(" ");
  95. }
  96. console.put("*");
  97.  
  98. /* я б розділив цикл виведення лівих пробілів, зірок, правих пробілів на три цикли, було б простіше*/
  99.  
  100. /* Гарного коду*/
  101.  
Add Comment
Please, Sign In to add comment