Урок 1. Привет!

Лиха беда начало

 

Если вы впервые пишете программу на каком-то языке программирования, то уже давно существует обычай писать первой программу, которая выводит на экран сообщение «Привет, мир!» («Hello, world!» в английской версии).

Мы немного отклонимся от этой традиции и напишем программу, которая скажет «Привет!» лично вам, а не всему миру.

 

Запустите Free Pascal. Перейдите в меню «File» (чтобы быстро оказаться в меню «File», не используя мышь, нажмите Alt + F).

Нажмите «New».

 

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

В правом верхнем углу синего окна вы можете увидеть его номер — 1. В центре вверху окна выводится название файла с вашей программой — noname01.pas.

Пока вы не придумали свое название для вашего файла, Free Pascal назвал его по умолчанию «noname01.pas» («no name» означает по-английски «без имени»).

 

Введите в окне следующий текст:


program hello;

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

 

Нажмите «F2», чтобы сохранить программу. Так как имя файла еще не было задано, то появится диалоговое окно:

Перейдите в папку «C:\FPC\3.0.0\work». Введите имя программы «hello.pas» в поле Name. Нажмите «ОК».

Программа сохранена.

 

Вернемся к нашей программе. Чтобы вы не листали страницу вверх, я повторю её текст:

program hello;

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

Разберем программу построчно. Программа начинается с ключевого слова program, вслед за которым, через пробел, указывается название программы (название придумываем мы сами). Наша программа называется hello.

После названия программы должна стоять точка с запятой. Между ключевыми словами begin и end идет непосредственно наша программа, которая пока состоит из одной единственной команды Writeln (тоже с точкой запятой после).

А вот после end идет точка, а не точка с запятой, потому что это конец всей программы. После end никаких инструкций в программе уже не будет: точка — значит точка :)

 

Что же делает Writeln? Команда Writeln выводит на экран сообщение, которое вы укажете ей в скобках и кавычках. В нашем случае это 'Привет'.

Итак, всё, что делает наша программа — это выводит на экран сообщение «Привет».

 

Чтобы запустить нашу программу на исполнение, нажмите Ctrl + F9 (или через меню: Run | Run).

Вы можете не успеть увидеть результат работы вашей программы, как на экране снова появится окно нашего редактора, в котором мы набирали программу:

 

А где же сообщение «Привет»?

Нажмите Alt + F5 и вы увидете тот самый экран, на который наша программа и вывела сообщение «Привет»:

В самой последней строчке вы можете увидеть свое сообщение («Привет»).

А что за строчки идут выше? Это служебная информация, которую Free Pascal вывел на экран во время своего запуска.

Было бы неплохо, если мы могли очистить экран, прежде чем выводить свое сообщение.

В следующем уроке мы разберем как это сделать.

Чтобы вернуться в окно редактора, нажмите любую клавишу, например, «Пробел».

Всё? Урок закончен? Казалось бы, пример — очень простой. Что он делает — понятно. Что ещё тут можно разобрать?

 

Нет :) Всё только начинается.

О внимательности или сообщениях об ошибках

Для начала посмотрите на заголовок нашего урока. Мы планировали вывести сообщение «Привет!», а не «Привет». Исправьте программу так, чтобы сообщение выводилось на экран с восклицательным знаком.

Запустите программу и убедитесь, что теперь на экран выводится «Привет!».

 

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

1. Допустим, вы по ошибке вместо program написали programm. Прежде чем намеренно добавить лишнюю букву «m», обратите внимание, что слово program отображается белым цветом. А после того, как вы добавляете лишнюю «m», слово programm становится желтым. Таким образом редактор сразу подсказывает вам, что вы ошиблись в наборе ключевого слова. Но допустим, вы не заметили ни саму ошибку, ни подсказку редактора, и запустили программу на исполнение (Ctrl + F9). Что будет?

Смотрим:

Появляется сообщение о том, что компиляция не прошла (компиляция — это перевод вашей программы на Паскале в машинные инструкции, понятные компьютеру) — Compile failed.

Total errors = 2 (Общее число ошибок равно 2).

На самом деле мы допустили ровно одну ошибку, второй ошибкой Free Pascal считает сам факт неудавшейся компиляции.

Нажмите любую клавишу (например, пробел), чтобы убрать окно с сообщением «Compile failed» и прочитать, на что, собственно говоря, жалуется компилятор (Free Pascal).

Здесь стрелками показаны номера окон, соответственно между нашими окнами можно переключаться с помощью Alt + 2, Alt + 3 (где 2 и 3 — это номера наших окон — с программой и с сообщениями об ошибках).

А также показано основное сообщение об ошибке. Чтобы увидеть всё сообщение, используйте клавиши управления курсором «вправо» и «влево». Только убедитесь вначале, что вы находитесь в окне №3 и курсор стоит на сообщении.

В сообщении сказано: «Синтаксическая ошибка, ожидается BEGIN, а вместо этого идет идентификатор PROGRAMM». О чем это он?

Компилятор не знает слова programm. Для него слово programm — некий идентификатор (имя), которому совершенно нечего делать в начале программы. Он готов смириться с отсутствием слова program, но тогда требует, чтобы программа начиналась со слова begin.

Например, если бы мы написали программу вот так, компилятор согласился бы её выполнить:

Еще раз: компилятор смотрит на первую строчку, ожидая слово program. Слова program он не видит, и потому ждет хотя бы begin. А вместо begin идет какой-то programm. Поэтому компилятор и говорит: «а я ждал begin». Понятно, что было бы логичнее, если бы компилятор сказал: «Эй, у тебя лишняя m в конце слова programm!», но, к сожалению, компилятор не настолько умен. Поэтому нужен определенный навык, чтобы разбираться в сообщениях компилятора.

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

 

2. Верните нашу программу к исходному, правильному варианту. А теперь удалите точку с запятой после названия программы «hello».

Что мы получим после запуска программы (Ctrl + F9)?

Сообщение «Синтаксическая ошибка, ожидается ";", а вместо этого идет BEGIN». Если вы нажмете клавишу Enter на сообщении об ошибке, то компилятор перебросит вас в редакторе ровно в то место, где он ждет точку с запятой.

Означает ли это, что точку с запятой нужно ставить именно там? Нет. Нужно посмотреть чуть выше и тогда вы увидете, что забыли поставить «;» в конце предыдущей строки.

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

А если серьезно, это связано с тем, что компилятор «не видит» переводов строки. Это для нас программа красиво отформатирована. Каждая инструкция начинается с новой строки и т. д.

Компилятор исполнил бы нашу программу даже если бы она была написана вот так:

Не верите? Можете попробовать. Запустите программу (Ctrl + F9) и она отлично скомпилируется и выполнится, выведя на экран сообщение «Привет!».

 

3. Теперь предположим, что вы забыли поставить закрывающую кавычку в сообщении «Привет!». Верните программу в исходный, правильный вид, и уберите закрывающую одинарную кавычку.

Запустите программу (Ctrl + F9).

Вы получите сообщение, которое дословно можно перевести как «Строка (как набор символов) выходит за пределы строки (как линии)».

Здесь нужно пояснить подробнее.

Что такое 'Привет!' в нашей программе? Это строка (по-английски, string). Строка в нашей программе — это набор символов, заключенный между двумя одинарными кавычками. В то же время наша программа также состоит из строк (по-английски, lines). Например, первая строка нашей программы — это «program hello;», а вторая строка — пустая. В третьей строке идет begin и т. д. Как видите, в русском языке для обоих понятий мы используем одно и то же слово «строка». В английском же используются разные слова — string и line соответственно. Постарайтесь не путать между собой эти понятия. Где заканчивается строка, которая line в английском языке? Она заканчивается там, где вы нажали клавишу Enter.

Как «рассуждает» компилятор? Он «видит» открывающую одинарную кавычку и далее начинает «двигаться» по тексту нашей программы, ожидая закрывающую кавычку. При этом закрывающую скобку и точку с запятой он воспринимает как часть текста, который надо напечатать — «Привет );». В реальности же строка (line) заканчивается (там, где вы нажали Enter, т. е. после точки с запятой), а кавычки как не было, так и нет. Тут компилятор и выдает: «Эй, алло, строка уже закончилась, а твоему тексту (string) конца чего-то не видно!». Вот, что означает сообщение об ошибке выше. Мы же должны сразу понять, что забыли закрыть кавычку, после чего исправить свою ошибку.

 

4. И снова вернем нашу программу к исходному, правильному виду, и сделаем еще одну ошибку. На этот раз сотрем букву «e» в слове Writeln, т. е. вместо Writeln в нашей программе будет Writln. Такое бывает, когда печатаешь текст и не дожимаешь какую-то клавишу. При этом из-за частокола букв можно и не увидеть, что какая-либо буква пропущена. К сожалению, редактор не сможет нам подсказать, что мы допустили ошибку, т. к. Writeln подсвечивается желтым цветом, а не белым как program или begin/end.

Что мы получим при попытке запустить программу с такой ошибкой? Нажимаем Ctrl + F9 и смотрим на экран:

Компилятор сообщает нам о 3-х ошибках (Total errors = 3), хотя в реальности нами допущена всего одна ошибка. Тем не менее в окне Compiler Messages (сообщения компилятора) только одно сообщение идет с пометкой Error (ошибка). Остальные 2 сообщения идут с пометкой Fatal (фатальный сбой).

Fatal: There were 1 errors compiling module, stopping — при компиляции модуля допущена 1 ошибка, компиляция остановлена.

Fatal: Compilation aborted — компиляция прервана.

Нас же интересует первое сообщение: «Error: Identifier not found "Writln"», которое переводится как «Ошибка: идентификатор "Writln" не найден». Что говорит нам компилятор? Что он не знает такого слова как Writln. Когда мы видим подобное сообщение, то в первую очередь мы должны проверить: а правильно ли мы написали тот идентификатор, на который ругается Free Pascal? Исправьте ошибку и убедитесь, что программа успешно запускается.

 

Как правильно набирать программу

Да, это тоже важно. Почему? Потому что, правильно набирая текст программы, вы минимизируете вероятность появления ошибок при наборе программы.

Разберем последовательность набора текста нашей программы «Привет!».

Сначала набираем «program hello;», жмем Enter 2 раза. Второй раз необходим для того, чтобы отделить название программы от основного тела программы пустой строкой.

Набираем «begin», жмем Enter, набираем «end.». Получаем:

program hello;

begin
end.

Переводим курсор наверх (на строку с begin), жмем End, чтобы перейти в конец строки, и Enter, чтобы начать набирать основное тело программы между begin и end.

Нажимаем Tab, чтобы сделать отступ.

Вообще, в интернете давно бушуют споры на тему как делать отступы — с помощью табуляции или же с помощью клавиши «Пробел».

Лично я предпочитаю табуляцию, именно поэтому в настройках редактора (Options | Enviroment | Editor...) мы установили галочку напротив «Use Tab characters».

Печатаем «Writeln();». Да, именно так.

Затем возвращаем курсор на закрывающую скобку, нажимаем «Пробел», одинарную кавычку «'», еще раз одинарную кавычку «'» и снова «Пробел».

В итоге, мы получаем следующее:

program hello;

begin
   Writeln( '' );
end.

Теперь переводим курсор на закрывающую одинарную кавычку и печатаем «Привет!». Набор программы закончен!

Если вы внимательно пересмотрите алгоритм набора программы, приведенный выше, то можете заметить определенную закономерность: при наборе программы мы набирали все парные элементы сразу, за один раз. Например, begin и end. Открывающую и закрывающую скобки «()». Открывающую и закрывающую одинарные кавычки «''». Такой подход позволяет сразу видеть структуру программы, не забывать закрывать за собой кавычки, скобки, и т. п. элементы. Начинающему такой подход может показаться избыточным на начальном этапе, но хорошие привычки лучше усваивать сразу, чем переучиваться потом. Поэтому я настоятельно рекомендую осваивать навыки правильного набора программы сразу, с самых первых уроков.

 

Краткое содержание урока

✔  Мы изучили как работать с Free Pascal:

  • File (Alt + F) | New — начать набор новой программы;
  • F2 — сохранить программу;
  • Ctrl + F9 — запустить программу;
  • Alt + номер окна — переключиться в окно с заданным номером;
  • Alt + F3 — закрыть текущее окно (это мы узнали из главы «Подготовка к работе»);
  • Alt + F5 — переключиться в окно вывода результатов работы программы;
  • F1 или Shift + F1 — открыть «Помощь»;

✔  Написали нашу первую программу на Паскале:

program hello;

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

✔  Выучили несколько ключевых слов языка Паскаль:

  • program, begin, end.

✔  Познакомились с первой командой (процедурой):

  • Writeln — процедура вывода данных на экран;

✔  Научились как правильно набирать текст программы и рассмотрели типовые ошибки, которые могут возникать при наборе программы.

 

На этом наш первый урок мы можем считать законченным.

 

Задания

  1. Напишите программу, которая выводит на экран вместо «Привет!» сообщение «Привет, ваше имя!» (вместо ваше имя, очевидно, нужно вписать ваше имя :)
     
  2. Напишите программу, которая выводит на экран объявление:

=================================

 Сегодня в нашем магазине акция!

=================================

Обратите внимание, что во второй строчке сообщение начинается с пробела.

И еще подсказка: чтобы вывести это объявление, вам понадобятся 3 команды Writeln.

 

Неочевидные вещи

Практика общения с начинающими показывает, что некоторые вещи для новичков могут быть неочевидны. Например, после закрытия окна Free Pascal, и его повторного запуска позже, Free Pascal восстанавливает все окна, которые были в нем открыты в момент закрытия. Например, после запуска Free Pascal вы можете сразу увидеть свою программу hello.pas. И тут новичок нажимает Alt + F5, чтобы посмотреть окно с результатами работы программы, и не видит ничего, кроме служебных сообщений. А где же «Привет!», спрашивает он? Новичок упускает из виду, что чтобы получить результат, нужно запустить программу, т. е. нажать Ctrl + F9 (или через меню: Run | Run). И только после этого переключаться в окно с результатами работы программы (Alt + F5).

Во втором задании я прошу вывести на экран объявление, и даю подсказку, что нам понадобятся 3 команды Writeln. Почему 3? — удивляются некоторые. Не для всех очевидно, что строчки со знаками «=» — это тоже строки, которые нужно вывести на экран, а не просто красиво оформленное задание.