Урок 2. Многострочный редактор

Вверх Первое знакомство

Когда компьютеров не было, тексты печатали на бумаге, используя пишущие машинки.

Сейчас тексты набирают на компьютере — это очень удобно! Любую ошибку можно исправить до печати на принтере.

Вверх Одна строка

Нам хорошо знаком редактор текстовой строки. Попробуйте набрать в нём текст «Вася Кук» (без кавычек):

Однако, тексты имеют, как правило, много строк (как на этой странице). Поэтому с ними удобнее работать в многострочных редакторах.

Вверх Когда строк много

Ниже представлен простой многострочный текстовый редактор. Вход в него выполняется мышиным щелчком: в поле редактора появляется текстовый курсор.

Многострочный текстовый редактор:

В первых четырех строчках этого редактора набрано стихотворение Агнии Барто.

Вверх Движение курсора

Работают все 4 клавиши-стрелки.

Можно войти в редактор и убедиться, что текстовый курсор в нём подчиняется не только клавишам со стрелками Влево, Вправо (как в редакторе строки), но и клавишам Вверх, Вниз.

Вправо на конце строки.

Однако «послушно» курсор ведёт себя только внутри текста.

Клавиша Вправо на конце строки перемещает курсор на начало следующей строки.

Влево на начале строки.

Клавиша Влево на начале строки перемещает курсор на конец предыдущей строки. Проверьте, как работают стрелки в многострочном редакторе, расположенном ниже.

Многострочный текстовый редактор:

Путешествие курсора.

Если курсор поставить на начало первой строки, нажать и не отпускать клавишу Вправо, то курсор побежит по строчкам и остановится за последним символом последней строки.

Обратное путешествие курсор совершит под действием клавиши Влево.

Вниз на конце строки.

Клавиша Вниз перемещает курсор на конец следующей строки, если этот конец расположен левее начального положения курсора.

Вверх на конце строки.

Клавиша Вверх перемещает курсор на конец предыдущей строки, если этот конец расположен левее начального положения курсора.

Таким образом, курсор перемещается не по всей прямоугольной области редактора, а только по тем частям, где написан текст.

В некоторых многострочных редакторах вертикальное движение курсора (под воздействием клавиш Вверх и Вниз) подчиняется специальному алгоритму, который пытается сохранить начальное горизонтальное положение курсора (не выходя при этом за концы строк).

Задание. Установите курсор в начало многострочного редактора и заставьте пробежать его по всем строкам текста при помощи одной нажатой клавиши, сначала вперёд, затем назад.

Многострочный текстовый редактор:

Вверх Координаты символов и место курсора

Вверх В редакторе строки
Где сейчас стоит курсор в редакторе строки?

Можно сказать, что перед буквой «о». Но букв «о» много! Перед какой именно?

Пронумеруем символы, и проблема исчезнет.

Видим, что курсор стоит перед символом с номером (4) или, что то же самое, за символом с номером (3).

Координаты — это величины, определяющие положение объекта.

Координатой символа в строке является номер места этого символа.

Буква «к» в примере имеет координату ....

Курсор не занимает место символа. Он стоит перед или за символом.

В примере курсор стоит перед символом с координатой ....

Или за символом с координатой ....

Чтобы отличать координаты от символов, будем заключать координаты в круглые скобки.

Проверьте себя.

Редактор строки Где стоит курсор
Перед символом с координатой ....

Или за символом с координатой ....

Перед символом с координатой ....

Или за символом с координатой ....

Перед символом с координатой ....
За символом с координатой ....
Вверх В многострочном редакторе

Символы многострочного текста будем условно обозначать квадратиками .

Номер символа в строке — это номер столбца (вертикального ряда).

В многострочном редакторе недостаточно указать только номер символа в строке. Нужно указать ещё и номер строки!

Поэтому координатами символа являются два числа: (номер строки, номер столбца).

На рисунке курсор стоит за символом с координатами (2,3).

Можно сказать, что курсор стоит перед символом с координатами (2,4)).

Проверьте себя.

Многострочный редактор Где стоит курсор
Перед символом с координатами ....

Или за символом с координатой ....

За символом с координатой ....
Перед символом с координатами ....

Вверх Алгоритмы перемещения курсора

Выполним несколько алгоритмов, которые перемещают курсор в многострочном редакторе.

Многострочный редактор Алгоритм Где будет стоять курсор
  1.  1
Перед ....

За ....

  1. 2
Перед ....

За ....

  1. 1

Перед ....

  1.  2
Перед ....

За ....

  1. 2
Перед ....

За ....

  1. 2
Перед ....

За ....

Вверх Урок редактирования в Роботландии

Лисёнок, Трям и Прям пришли на урок многострочного редактора, но их встретил старый знакомый, редактор строки РС-1:

— Мой коллега, многострочный редактор, немного задерживается, — сказал РС-1, — урок начну я.

Вверх Команды Home и End

Клавиши Home («хоум») и End («энд») отсылают курсор на начало и конец строки.

Английские слова «home» и «end» переводятся как «дом» и «конец».

— Поставьте курсор в середину строки и нажмите, сначала клавишу Home, затем клавишу End:

Редактор текстовой строки:

А теперь проверьте себя.

Редактор строки Нажимаем клавишу Где будет курсор
...
...

— А работают ли клавиши Home и End в многострочном редакторе? — спросил Лисёнок.

— Да, конечно, — отвечал РС-1, — ведь многострочный редактор состоит из строк. И в каждой строке работает всё, что должно работать в редакторе строки.

Тем временем подошёл основной преподаватель РМ-1.

Вверх Набор текста

Лисёнок, Трям и Прям увидели, что РМ-1 очень похож на своего коллегу, правда, выглядел посвежее (видно, вернулся с роботландского Юга) и построже:

РМ-1 вежливо поздоровался со всеми, и, не теряя времени, продолжил урок.

— Текст состоит из строчек. Так его и набирают, по строчкам. А внутри одной строки действуют все правила строчного редактора.

Давайте наберём короткое стихотворение Агнии Барто. Устанавливаем курсор в пустое поле редактора и пишем:

Многострочный текстовый редактор:

Как теперь перейти в начало следующей строки?

Английское слово «enter» переводится как «ввод».

Нужно нажать клавишу Enter («энта»).

Теперь можно написать вторую строку, снова нажать Enter и так делать до тех пор, пока все строки не появятся на экране:

Многострочный текстовый редактор:

Вопрос: cколько раз была нажата клавиша Enter при наборе текста про бычка?

Ответ: ... раз.

Вверх Алгоритмы перемещения курсора

Выполним несколько алгоритмов, которые перемещают курсор в многострочном редакторе.

Многострочный редактор Алгоритм Где будет стоять курсор
  1. 1
Перед ....
  1. 1
За ....
  1. 1
  2. 2
Перед ....

За ....

Вверх Алгоритмическое путешествие курсора

— Формулирую интересную задачу!

Задание. Составьте алгоритм перемещения курсора для обхода текста четверостишия «по краям». Запишите программу решения этой задачи для пользователя компьютера, использующего команды перемещения курсора в многострочном редакторе.

— Это не сложно! Вот мой алгоритм. Справа на картинке я пометил цифрами положение курсора после выполнения каждого шага алгоритма.

Алгоритм перемещения курсора
  1. В конец первой строки
  2. В конец следующей строки
  3. В конец следующей строки
  4. В конец следующей строки
  5. В начало последней строки
  6. В начало первой строки

— Отмечаю, что 3 шага алгоритма повторяются, поэтому переписываю алгоритм короче:

Алгоритм перемещения курсора
  1. В конец первой строки
  2. ПОВТОРИ 3
    В конец следующей строки
  3. В начало последней строки
  4. В начало первой строки

— Мне остаётся только написать программу для пользователя компьютера, используя клавиатурные команды:

Программа перемещения курсора
  1. End (в конец первой строки)
  2. ПОВТОРИ 3
    Вниз, End (в конец следующей)
  3. Home (в начало последней)
  4. Вверх 3 (в начало первой)

—  Команды 2-го шага выполняются 3 раза, всего 6 команд:

Вниз, End (на конец второй строки)
Вниз, End (на конец третьей строки)
Вниз, End (на конец четвёртой строки)

А ведь можно обойтись 4-мя командами:

Вниз (на конец второй строки)
Вниз, End (на конец третьей строки)
Вниз (на конец четвёртой строки)

— Верно, можно сэкономить 2 команды. Но программа Тряма мне нравится больше — она универсальная! Она будет работать не только на этом четверостишии, но и на любом другом, независимо от длин его строк.

А сейчас — конец урока!

Что мы узнали