Урок 4. Выводим на экран текст программы hello

Ἐν ἀρχῇ ἦν ὁ λόγος,
καὶ ὁ λόγος ἦν πρὸς τὸν θεόν,
καὶ θεὸς ἦν ὁ λόγος.

 

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

Этот урок мы начнем с решения этой задачи.


 1   program helloProg;
 2
 3   uses
 4      Crt;
 5
 6   begin
 7      ClrScr;
 8
 9      Writeln( 'program hello;' );
10      Writeln;
11      Writeln( 'begin' );
12      Writeln( '   Writeln( ''Привет!'' );' );
13      Writeln( 'end.' );
14   end.

 

Для удобства обсуждения я пронумеровал каждую строку программы. На всякий случай уточню, при наборе текста программы в редакторе Free Pascal набирать эти номера не нужно:

 

Запустите программу (Ctrl + F9 или через меню Run | Run) и посмотрите на результат (Alt + F5):

 

Разберем построчно текст нашей программы.

(Чтобы вам не приходилось двигать страницу вверх-вниз — от комментариев к программе и назад, я буду повторять текст программы небольшими кусками в процессе комментирования).

 1   program helloProg;
 2
 3   uses
 4      Crt;
 5
 6   begin
 7      ClrScr;
 8

 

1. Программу мы назвали helloProg.

2, 5, 8. Пустые строки в программе, с точки зрения её выполнения, никакой роли не играют, а нужны лишь для улучшения восприятия программы человеком. О том, почему так важен внешний вид программы, мы еще поговорим отдельно.

3-4. Т. к. по заданию текст программы hello надо вывести на чистый экран, то нам понадобится процедура ClrScr, с помощью которой можно очистить экран. Чтобы эта процедура работала, надо подключить к программе модуль Crt, в котором она реализована. Что мы и сделали, добавив строку «uses Crt;».

6. С этого begin начинается основное тело нашей программы.

7. Очищаем экран с помощью процедуры ClrScr.

 

Далее мы пишем команды, которые будут выводить текст программы hello. Напомню, как выглядит этот текст:

program hello;

begin
   Writeln( 'Привет!' );
end.

Именно этот текст мы и должны будем получить в окне результатов после запуска нашей программы helloProg.

 

Вернемся к нашей программе:

 9      Writeln( 'program hello;' );
10      Writeln;
11      Writeln( 'begin' );
12      Writeln( '   Writeln( ''Привет!'' );' );
13      Writeln( 'end.' );
14   end.

 

9. Writeln( 'program hello;' ) — выводит первую строку программы hello.

10. Writeln — выводит пустую строку. Кстати, мы могли бы написать и Writeln( '' ), т. е. открыть одинарную кавычку и тут же её закрыть — эффект был бы тот же, т. к. '' — это пустая строка.

11, 13. Writeln( 'begin' ) и Writeln( 'end' ) — выводят соответственно begin и end программы hello.

12. Writeln( ' Writeln( ''Привет!'' );' ) — самая сложная строка, которую мы разберем ниже подробнее.

14. end — конец нашей программы.

 

Разберем теперь подробнее строку

12      Writeln( ' Writeln( ''Привет!'' );' )

Чтобы было легче разобраться в данной строке, рассмотрим её с точки зрения набора. Как правильно набирать данную строку в редакторе? Следующие строки иллюстрируют как должна меняться 12-я строка в процессе её набора.

12      Writeln();

12      Writeln( '' );

12      Writeln( '   Writeln();' );

12      Writeln( '   Writeln( '''' );' );

12      Writeln( '   Writeln( ''Привет!'' );' );

 

Теперь усложним задачу. Выведем программу hello на экран так, как она выглядит в нашем редакторе Free Pascal:

Что я имею в виду? Посмотрите внимательно. Программа в редакторе отображается на синем фоне. Ключевые слова program, begin и end выводятся белым цветом, название программы (hello) и процедуры Writeln — желтым, строка 'Привет!' — светло-сине-зеленым.

 

Следующая программа выполняет поставленную задачу:


program helloColor;

uses
   Crt;

begin
   TextBackground( Blue );
   ClrScr;

   TextColor( White );
   Write( 'program ' );

   TextColor( Yellow );
   Writeln( 'hello;' );

   Writeln;

   TextColor( White );
   Writeln( 'begin' );

   TextColor( Yellow );
   Write( '   Writeln( ' );

   TextColor( LightCyan );
   Write( '''Привет!''' );

   TextColor( Yellow );
   Writeln( ' );' );

   TextColor( White );
   Writeln( 'end.' );
end. 

 

Запустите программу (Ctrl + F9) и посмотрите на результат (Alt + F5):

Будьте внимательны: это не окно редактора, а окно, в котором выводятся результаты работы программы, по нажатию Alt + F5.

 

Разберем саму программу. В листинге программы helloColor (листинг — это текст программы) мы видим новые процедуры:

TextBackground — процедура, которая устанавливает заданный цвет для фона текста.

TextColor — процедура, которая устанавливает заданный цвет для текста.

Каждая из перечисленных процедур принимает в качестве входного параметра цвет. Цвета кодируются в Паскале с помощью чисел. Например, 0 — это черный цвет. И если вы хотите установить в качестве фона черный цвет, то нужно написать:

TextBackground( 0 );

А если вам нужен белый фон, то:

TextBackground( 15 );

 

Ниже вы можете увидеть какие числа каким цветам соответствуют:

     
0      Черный
1      Синий
2      Зелёный
3      Сине-зелёный
4      Красный
5      Пурпурный
6      Коричневый
7      Светло-серый
8      Тёмно-коричневый
9      Голубой
10      Светло-зелёный
11      Светло-сине-зелёный
12      Светло-красный
13      Светло-пурпурный
14      Жёлтый
15      Белый

 

Очевидно, что запомнить для каждого цвета его номер очень непросто. Поэтому модуль Crt определяет целый ряд констант, кодирующих вышеуказанные цвета:

const
   Black        =  0;   { черный              }
   Blue         =  1;   { синий               }
   Green        =  2;   { зелёный             }
   Cyan         =  3;   { сине-зелёный        }
   Red          =  4;   { красный             }
   Magenta      =  5;   { пурпурный           }
   Brown        =  6;   { коричневый          }
   LightGray    =  7;   { светло-серый        }
   DarkGray     =  8;   { тёмно-коричневый    }
   LightBlue    =  9;   { голубой             }
   LightGreen   = 10;   { светло-зелёный      }
   LightCyan    = 11;   { светло-сине-зелёный }
   LightRed     = 12;   { светло-красный      }
   LightMagenta = 13;   { светло-пурпурный    }
   Yellow       = 14;   { желтый              }
   White        = 15;   { белый               }

 

В уроке 3 мы с вами уже познакомились с использованием констант. Там мы вводили строковую константу (Name), чтобы упростить в будущем модификацию (изменение) программы. Когда нам нужно было получить письмо для другого адресата, мы должны были изменить программу только в одном месте: там, где определялось значение константы (Name). Здесь же введение числовых констант решает другую задачу.

Во-первых, наша программа становится более понятной. Попробуйте с ходу понять, какой цвет фона будет установлен командой TextBackground( 9 ). Сравните эту команду с командой, которая использует числовую константу: TextBackground( LightBlue ). В последнем случае строка в переводе с английского читается как ЦветФонаТекста( голубой ).

Во-вторых, программу становится проще писать: легче написать TextBackground( Yellow ), чтобы установить желтый цвет фона, чем вспомнить число, которое соответствует желтому цвету: TextBackground( 14 ).

Если коротко, то использование числовых констант вместо чисел даёт два преимущества: 1) программу проще писать; и 2) программу проще читать. Помимо этого, использование констант уменьшает вероятность совершения ошибки. Например, печатая TextBackground( 14 ) можно ввести по ошибке другое число, например, 13, или 15 (такое бывает, когда промахиваются клавишей и вместо требуемой клавиши нажимают соседнюю). Если же вы напишете вместо Yellow слово Yelloq (q находится рядом с w), то при запуске программы компилятор сообщит вам, что не знает такого идентификатора как Yelloq.