Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Задача про ялинку - дуже важко читати код, що не дотримає стилю.
- // Про стиль https://zero.p2p.shpp.me/tutorials/80_Style.html
- let size = +prompt("Вибери який ти хочеш розмір ялинки")
- let x= size
- let i
- let h= size
- let p=size
- for(let j= 0;size-1>j;j++){
- console.log()
- i=0
- x=x-1
- h=h+1
- for(let w= size*2;w>i;++i){
- if(i<=x)console.put(" ")
- else if(h<=i)console.put(" ")
- else console.put("*")
- }
- }
- console.log()
- for(let p= 0;p<=size;++p){
- console.put(" ")
- if(p===size-1)console.put("*")
- }
- /*я не знаю як зробити щоб працювало з не парними числами - не зрозумів запитання, будь ласка перефразуйте
- самими простими словами які тільки знайдете */
- // Задача про ялинку - добре, що є інструменти які допомагають привести код до стилю.
- let size = +prompt("Вибери який ти хочеш розмір ялинки")
- let x = size /* дуже зручно читати код як прозу, для цього змінним потрібні семантичні іменування, які допомагають
- розуміти для чого змінна. А ще тоді є можливість самому зрозуміти чи добре все в коді: коли іменування
- логічні та доцільні, а інколи важко їх придумати, а може що вони дублюються - тоді можна пошукати
- покращення у алгоритмі */
- let i
- let h = size
- let p = size
- for (let j = 0; size - 1 > j; j++) { // for (let j = 0; j < size - 1; j++) звичніше
- console.log() // можна закінчувати ітерацію переводом рядка, це звичніше.
- i = 0 /* для нуля (а ще для одиниці) можна не створювати окрему змінну. Потім додивився,що збільшуєте її у форі.. , можна так for (let i = 0, w = size * 2; i < w; ++i) при чому можна не створювати w , але це якби оптимізація, якщо я вірно розумію. */
- x = x - 1 // x--; або x -=1;
- h = h + 1 // можна скорочувати такі вирази h += 1; або h++;
- for (let w = size * 2; w > i; ++i) {
- if (i <= x) { // до якогось значення - знов таки зручніше сприймати змінну на першому місті: if (x >= 0)
- console.put(" ")
- }
- else if (h <= i) { // не впевнений, що по ТЗ треба виводити пробіли після зірок, але добре
- console.put(" ")
- }
- else console.put("*")
- }
- }
- console.log()
- for (let p = 0; p <= size; ++p) {
- console.put(" ")
- if (p === size - 1) console.put("*") // можна вивнести з циклу змінивши його умову на (p < size), і тоді позбавитися іфу
- }
- /* код норм, але його не дуже просто читати та розуміти, бо іменування не допомагають, не підказують, коментарів немає -
- * тобто вони теж не пояснюють ідею та кроки її реалізації, стилю коду не дотримуєтесь, і це все додає складності як у
- * читання коду, так і у написання.
- * Ще є рекомендація до декомопзиції (це коли розділяємо задачу на підзадачи на етапі обміркування рішення, сотавляємо
- * алгоритм в голові, а може і на папері, а потім ці підзадачі реалізуємо окремими логічними блоками коду)
- * Зовнішній цикл має одну відповідальність (саме одна і повинна бути у одного логічного блока коду - тільки різних масштабів)
- * він переводить рядок потрібну кількість разів. Що ж до вкладенного циклу - то він робить
- * - виведення пробілів до зірок
- * - виведення зірок
- * - виведення пробілів після зірок
- * МОжливо розділити на три окремих цикла ці підзадачі? Можливо це додасть коду читабєльності,бо кількість вкладених
- * умов зменьшиться (вони взагалі зникнуть), а може кількість змінних тез зменшиться, ну і полегшиться написання такої
- * програми
- * Гарного коду*/
Add Comment
Please, Sign In to add comment