Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вопрос синтаксиса при добавлении символа в определенную позицию строки. (https://javascript.ru/forum/dom-window/62433-vopros-sintaksisa-pri-dobavlenii-simvola-v-opredelennuyu-poziciyu-stroki.html)

JMnemonick 10.04.2016 14:04

Вопрос синтаксиса при добавлении символа в определенную позицию строки.
 
Друзья, я хоть и ИТ, но не кодер. Причем от слова "совсем" - это о JS.

Брат занимается на курсах по JS, подкинул тут задачек. Но что то я туплю. Такая задача уже как то раз проскакивала по С++, но по JS - вроде нет.

Я проблем, как таковых, алгоритмических не вижу.

Задача - построить треугольник из любых символов. Возьмем, допустим, *, но треугольник должен быть равнобедренным... Высота, читай количество строк, задается пользователем.

Я вот отдельно от него сижу - почитываю книжки... Как раз на работе сегодня... И вот что у меня получилось.

var n = prompt ('Задайте высоту'); //задает пользователь высоту. Можно проверить на целое, положительное число - но это не важно.
for (var line = "*"; line.length <= 2*n; line += "**") //начинаем с одного символа, прибавляя с каждым новым шагом еще по 2. Т.е. 1-3-5-7-9- и так далее
document.write(line + '<br/>'); //Вывели
- получили, в случае 5 высоты.

*
***
*****
*******
*********

Понятно что нужно в начало строки подставлять пробел по принципу -

каждая строка должна иметь в начале количество пробелов по формуле
количество строк (т.е. высота) - 1 - так?
Точнее немного не правильно сказал.
n-1 это количество пробелов для 1 строки.
Для каждой последующей оно должнло уменьшаться на 1.

Так вот, как в цикле JS это указать.
Вроде пишу конструкциями, вроде правильными - но что то не удается.

Помогите тупящему админу.... :)

С другой стороны - можно ведь это как то массивом сделать? К примеру...

рони 10.04.2016 14:40

JMnemonick,
так добавьте переменную для пробелов через запятую и выводите пробелы + line

JMnemonick 10.04.2016 14:46

Так приблизительно так и делал....

Что то вроде вот такого...

var n = prompt ('Укажите высоту треугольника в целых числах');

for (var space = " "; space.length >= 2*n; space -= "  ")
for (var line = "*"; line.length <= 2*n; line += "**")


    document.write(space + line + '<br/>');


Что и где делаю не так - не понятно...

рони 10.04.2016 15:16

JMnemonick,
<script>
    var n = 7;
    for (var line = "*", space = new Array(n).join("\u2007"); line.length <= 2*n; line += "**", space = space.slice(1)){
    document.write(space+line + '<br/>');
    }
 </script>

JMnemonick 10.04.2016 15:50

B tрони,

Спасибо за подсказку.
Сейчас попытаюсь переварить информацию.

В общем - все понятно довольно таки...

Линия из * создается понятно.
Для пробелов задаем массив и.... join - вполне понятно.
А вот ("\u2007") это что?

Если не сложно, проясните?

Спасибо заранее.

рони 10.04.2016 16:00

JMnemonick,
Пробел, равный по ширине цифрам

JMnemonick 10.04.2016 16:00

И если не сложно...

Для меня проясните, почему не работает вот такая конструкция?

var n = prompt ('Укажите высоту треугольника в целых числах');

    for (var line = "*", space = new Array(n).join("\u2007"); line.length <= 2*n; line += "**", space = space.slice(1)){
    document.write(space+line + '<br/>');
    }


С юникодом понял - спасибо.

JMnemonick 10.04.2016 16:02

И если есть возможность - посоветуйте хорошие методические материалы по JS, а то что то зацепило...

Почти стыдно стало за то что так торможу... :)

рони 10.04.2016 16:07

Цитата:

Сообщение от JMnemonick
почему не работает вот такая конструкция?

потому что строка не число
var n = +prompt ('Укажите высоту треугольника в целых числах');
учебник ссылка вверху, остальное практика и интерес.

рони 10.04.2016 16:10

JMnemonick,
преобразование-к-числу


Часовой пояс GMT +3, время: 22:18.