Содержание


Обучение программированию в Linux на примере интегрированной среды разработки Geany

Часть 3. Работа в Geany с исходным кодом на языке Free Pascal

Comments

Серия контента:

Этот контент является частью # из серии # статей: Обучение программированию в Linux на примере интегрированной среды разработки Geany

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Обучение программированию в Linux на примере интегрированной среды разработки Geany

Следите за выходом новых статей этой серии.

В среде Geany Free Pascal ведёт себя вполне адекватно. Тем не менее, не лишними будут несколько предварительных замечаний. Я устанавливал Free Pascal версии 2.2.2, используя штатный менеджер пакетов ПО для своей системы (в Fedora и RedHat – это yum, в Ubuntu и Debian – apt-get и т.д.). После установки не потребовалось никаких дополнительных усилий, т.е. Free Pascal заработал, что называется, «из коробки». Но подробную документацию в любом случае придётся скачать отдельно – по адресу: Free Pascal - Download Documentation (EN). Здесь предлагаются на выбор несколько форматов: pdf, html, PostScript (ps) и простой текстовый.

Hello, World!

В Geany для создания нового файла удобнее всего воспользоваться пунктом меню «Файл –> Создать из шаблона... –> Файл Pascal» или крайней слева кнопкой на панели инструментов, точнее, её расширением (субкнопкой со стрелкой вниз) в виде спускающегося списка, в котором также можно обнаружить пункт «Файл Pascal». Результат вы можете наблюдать на рисунке 1 – в новом файле есть всё необходимое, чтобы приступить к работе с исходным кодом.

Рисунок 1. Стандартный шаблон, предлагаемый при создании нового Pascal-файла
Рисунок 1. Стандартный шаблон, предлагаемый при создании нового Pascal-файла
Рисунок 1. Стандартный шаблон, предлагаемый при создании нового Pascal-файла

Для учебного примера используем вполне реальную ситуацию – выбор наиболее подходящего Интернет-провайдера. Предположим, что результаты сбора предварительной информации записывались в обычный текстовый файл с именем providers в следующем формате: тип предлагаемой услуги (ориентированный на конкретные группы пользователей), затем несколько пробелов, название компании-провайдера, снова несколько пробелов и, наконец, стоимость указанной услуги. Выглядит это приблизительно так (названия услуг и провайдеров вымышлены, любые совпадения являются случайными).

Содержимое файла providers:
Интернет Бизнес     Глобус    840.00 р. 
Интернет Для всех   Глобус    480.00 р. 
Интернет Мобильный  Глобус    550.00 р. 
Интернет Для всех   ИнтерЛэнд 470.00 р. 
Интернет Мобильный  ИнтерЛэнд 560.00 р. 
Интернет Бизнес     СоларНет  885.00 р. 
Интернет Для всех   СоларНет  475.00 р. 
Интернет Бизнес     ИнтерГео  890.00 р. 
Интернет Для всех   ИнтерГео  460.00 р. 
Интернет Мобильный  ИнтерГео  555.00 р. 
Интернет Бизнес     ИнТерра   890.00 р. 
Интернет Для всех   ИнТерра   465.00 р. 
Интернет Бизнес     СетьРу    880.00 р. 
Интернет Для всех   СетьРу    450.00 р. 
Интернет Мобильный  СетьРу    570.00 р. 
Интернет Мобильный  НетКом    575.00 р. 
Интернет Мобильный  ТелеКомм  900.00 р. 
Интернет Для всех   СуперСеть 465.00 р. 
Интернет Эконом     Глобус    330.00 р. 
Интернет Эконом     СетьРу    325.00 р. 
Интернет Эконом     ИнтерЛэнд 350.00 р. 
Интернет Эконом     ИнСистемз 340.00 р.

Чтобы не вводить вручную эти данные, можно взять файл providers, как, впрочем, и файл исходного кода программы, из приложений к статье. Ну и, конечно же, технологию «копирование – вставка» никто не отменял – вы можете просто скопировать содержимое этого файла непосредственно из браузера.

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

Листинг программы findservice.pas:
program findservice; 
uses crt; 
 
var  
  service : string;    {вводимый код сервиса для поиска} 
  currentstr : string; {очередная считанная строка из файла} 
  count : integer;     {счётчик найденных строк} 
  fp : text;           {файл исходных данных} 
 
BEGIN 
  count := 0; 
  writeln( 'Введите строку – критерий поиска: ' ); 
  readln( service ); 
  assign( fp, 'providers' ); 
  reset( fp ); 
  while NOT EOF( fp ) do 
  begin 
    readln( fp, currentstr ); 
    if pos( service, currentstr ) > 0 then  
    begin 
      writeln( currentstr ); 
      count := count + 1; 
    end; 
  end; 
  if count = 0 then writeln( 'Ничего не найдено.' ) 
  else writeln( '-------Всего найдено ', count, ' строк.' ); 
  close( fp ); 
END.

А вот как выглядит этот же исходный код в Geany (рисунок 2). Нумерация строк, подсветка синтаксиса и оставшиеся за кадром предлагаемые варианты автозавершения ввода нас уже не удивляют – так и должно быть.

Рисунок 2. Полностью введённый код программы
Рисунок 2. Полностью введённый код программы
Рисунок 2. Полностью введённый код программы

У тех, кто знаком с языком Паскаль, логическая структура программы наверняка не вызовет никаких вопросов – она проста и очевидна. Даже начинающие, внимательно прочитав приведённый выше код, поймут, как он работает.

Кодировки символов

Одной из главных проблем для программистов на Free Pascal в Linux является настройка кодировки символов. Особенно остро эта проблема проявляется, если в программе имеются строки на кириллице (русский, белорусский, украинский и т.п. языки). По неизвестным причинам Free Pascal плохо работает с кодировкой UTF-8, ставшей стандартом де-факто в большинстве современных дистрибутивов. В среде Geany эта проблема решается просто: в пункте главного меню «Документ» есть подпункты «Установить кодировку –> Юникод», и в предложенном списке нужно выбрать UTF-8. Если ваш дистрибутив Linux не совсем новый, то, возможно, потребуется выбрать «Документ –> Установить кодировку –> Восточноевропейская –> Кириллица KOI8-R». Самый простой способ определения системной кодировки – ввести в консоли команду locale. В подпункте «Восточноевропейская» также предлагаются варианты кодировок для систем DOS и Windows. После корректной настройки все символы в программе будут вводиться и выводиться надлежащим образом, без каких бы то ни было искажений (во всяком случае, в моей системе при вводе/выводе этой проблемы не было).

Кроме того, необходимо обратить внимание на настройку символов, завершающих строки, которая выполняется здесь же, в пункте «Документ –> Установить окончания строк». Предлагаются три варианта: «Заменить окончания строк на CR/LF (Win)» (этот вариант подходит и для DOS), «Заменить окончания строк на LF (Unix)» и «Заменить окончания строк на CR (Mac)».

Компиляция исходных текстов и запуск программы

Теперь неплохо бы проверить, как Geany реагирует на ошибки, встречающиеся в исходном коде во время компиляции. Для этого умышленно сделаем опечатку в строке 13 – передадим функции readln «неправильный» параметр servise. После попытки скомпилировать программу получим результат, показанный на рисунке 3.

Рисунок 3. Компиляция не завершена из-за ошибки
Рисунок 3. Компиляция не завершена из-за ошибки
Рисунок 3. Компиляция не завершена из-за ошибки

В нижней панели выводятся все диагностические сообщения компилятора, а в панели исходного кода все строки с ошибками подчёркнуты волнистой красной линией. Следует отметить, что предупреждение (Warning) в строке 19 является прямым следствием ошибки в строке 13, а вовсе не отдельной проблемой. Подобные вещи достаточно часто происходят в исходном коде на любом языке программирования – одна опечатка способна породить целый каскад ошибок и предупреждений.

Вернёмся к корректной версии программы – исправим свою опечатку. Команды запуска компиляции подробно рассматривались в первой статье цикла, но на всякий случай напомню их: меню «Сборка –> Скомпилировать», клавиша F8 или кнопка на панели инструментов (от синей пирамиды жёлтая стрелка указывает на красный шар). Теперь компиляция прошла успешно, о чём свидетельствуют сообщения в нижней панели (рисунок 4).

Рисунок 4. Успешное завершение компиляции
Рисунок 4. Успешное завершение компиляции
Рисунок 4. Успешное завершение компиляции

Пришло время оценить работу программы. Как вы помните, это можно сделать не выходя из среды Geany, – пункт меню «Сборка –> Выполнить», клавиша F5 или кнопка запуска на панели инструментов (белый треугольник в синей шестерёнке). Для начала попробуем сделать выборку провайдеров, предлагающих общедоступные недорогие услуги, т.е. введём образец поиска «Для всех» и получим список, изображённый на рисунке 5.

Рисунок 5. Выполнение программы в среде Geany
Рисунок 5. Выполнение программы в среде Geany
Рисунок 5. Выполнение программы в среде Geany

У недоверчивых пользователей Free Pascal может возникнуть сомнение: в среде разработки программа выполняется нормально, но как она поведёт себя в «полевых» условиях? Поэтому выйдем из Geany (вы не забыли сохранить файл исходного кода?) и запустим программу в отдельном окне терминала, прямо из командной строки. На сей раз поищем провайдеров, которые обеспечивают работу в Интернете не частных лиц, а компаний и корпораций (образец поиска «Бизнес»), а потом проверим реакцию программы на ввод образца «Почта», который в файле данных не встречается вовсе. По рисунку 6 можно сделать вывод – наше приложение с заданием справилось.

Конечно, описанная в данной статье программа чрезвычайно проста и даже примитивна, но она корректно работает, и разработчик может развивать её функционал. Надеюсь, что вы убедились, насколько легко это сделать с помощью инструментальной среды программирования Geany.

Проблемы с графикой

При использовании Free Pascal в ОС Linux следует уделить внимание проблеме графики. Дело в том, что универсальный и удобный модуль GRAPH был предназначен для применения в консольном (текстовом) режиме MS-DOS. При переносе Free Pascal в операционные системы семейства Unix, в частности в Linux, пришлось взять за основу устаревшую и небезопасную библиотеку libvga (libsvga), также ориентированную на консольный режим и не имеющую к X Window никакого отношения. Главным недостатком этой библиотеки является то, что использующие её программы должны работать в режиме суперпользователя (root). Чем это грозит, думаю, понятно почти всем, а неопытным пользователям в любом случае необходимо пройти курс молодого бойца, позволяющий правильно оценить серьёзность данной проблемы. Какой же из этого следует вывод? Отказаться от использования GRAPH и начать осваивать графическое программирование в X Window. Но это тема отдельной статьи, а возможно, и цикла. Кстати, в русскоязычном Интернете можно найти материалы именно по этому вопросу.

Заключение

Завершая данный цикл статей, позволю себе ещё раз напомнить о несомненных преимуществах универсальной среды разработки программ Geany. Скромные системные требования и сведённые к минимуму зависимости от других пакетов, лёгкость установки, настройки и освоения, простота в работе и в то же время уверенная поддержка многих языков программирования, как компилируемых, так и интерпретируемых, выводит Geany в лидеры среди претендентов на основное средство обучения программированию в операционных системах Unix/Linux.


Ресурсы для скачивания


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=460936
ArticleTitle=Обучение программированию в Linux на примере интегрированной среды разработки Geany: Часть 3. Работа в Geany с исходным кодом на языке Free Pascal
publish-date=01122010