В.В.Монахов, А.В.Кожедуб

 

 

 

 

BARSIC

( Ó Copyright 1992-2002 В.В.Монахов )

версия 9.19

для Windows 95Ò / Windows 98Ò /NTÒ 4.0/ Windows 2000Ò / Windows MEÒ / Windows XPÒ

 

 

 

 

 

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Санкт-Петербург

2002

 

Оглавление

1. BARSIC - язык и среда надежного программирования *

1.1. Основные особенности языка и среды BARSIC *

1.2. Языки программирования и интегрированные среды *

1.3. Программы-приложения среды (исполняемые файлы) *

1.4. Запуск на исполнение программ-приложений *

1.5. Использование среды BARSIC в качестве научного калькулятора *

1.6. Интерфейс среды разработки *

2. Работа в программе-приложении среды BARSIC *

2.1. Работа в экранной форме *

2.2. Описание элементов экранной формы *

2.3. Работа с графическим подокном *

2.4. Независимые графические окна *

2.5. Окно диалога Параметры графика (Options) *

3. Функциональные элементы языка программирования BARSIC *

3.1. Численные константы (числа) *

3.2. Цвета в RGB кодировке *

3.3. Численные переменные *

3.4. Численные выражения *

3.5. Численные функции *

3.5.1. Задание численных функций *

3.5.2. Использование функций. *

3.6. Простые численные функции *

3.7. Строковые константы (строки) *

3.8. Строковые переменные *

3.9. Строковые выражения *

3.10. Логические выражения *

1.1.1 Простейшие логические выражения *

1.1.2 Составные логические выражения *

3.11. Команды пользователя *

3.11.1. Задание и использование команд *

3.11.2. Команда-обработчик onStart. *

3.11.3. Команда-обработчик onBreak. *

4. Создание и редактирование экранной формы и ее элементов *

4.1. Вызов редактора экранных форм *

4.2. Работа в редакторе экранных форм *

4.3. Элементы экранных форм *

4.3.1. Элемент Form (экранная форма) *

4.3.2. Элемент Button (кнопка) *

4.3.3. Элемент TextLabel (надпись) *

4.3.4. Элемент TextField (поле редактирования текста) *

4.3.5. Элемент TextArea (область редактирования) *

4.3.6. Элемент TextTable (таблица) *

4.3.7. Элемент CheckBox (независимый переключатель) *

4.3.8. Элемент RadioButton (зависимый переключатель) *

4.3.9. Элемент FallingList (выпадающий список) *

4.3.10. Элемент ScrollingList (прокручивающийся список) *

4.3.11. Элемент Hyperlink (гиперссылка) *

4.3.12. Элемент Panel (панель) *

4.3.13. Элемент Menu (меню формы) и редактор меню *

4.3.14. Элемент Subwindow (подокно) *

5. Написание и отладка программ-приложений *

5.1. Написание программы и диагностика синтаксических ошибок в исходном тексте *

5.2. Диагностика ошибок исполнения. *

5.3. Средства отладки программ *

6. Примеры создания программ-приложений среды BARSIC *

6.1. Создание простейшей программы в среде BARSIC *

6.2. Cоздание программы с выводом графика функции в подокно *

Приложение 1. Стандартные функции языка BARSIC *

Приложение 2. Стандартные команды языка BARSIC *

Приложение 3. Стандартные классы языка BARSIC *

 

 

  1. BARSIC - язык и среда надежного программирования
  2. В данном описании вы найдете описание интегрированной среды BARSIC (Business And Research Simple Interactive Calculator) и ее языка программирования, также называемого BARSIC.

    1. Основные особенности языка и среды BARSIC
    2. Программный комплекс BARSIC предназначен для разработки и использования прикладных программ-приложений, работающих под управлением исполняющей среды BARSIC. Основными областями применения комплекса являются разработка программ учебного назначения в области физики, математики, информатики и других областях, а также программ для научных численных математических расчетов и математического моделирования, преимущественно в области физики. Кроме того, комплекс специализирован для создания программ интерактивного управления компьютеризированными экспериментальными установками на основе персональных компьютеров, а также обработки и визуализации получаемых экспериментальных данных и сравнения их с теоретическими зависимостями.

      Язык BARSIC, с помощью которого осуществляется программирование программ-приложений, является универсальным объектным языком программирования и содержит развитые средства построения двумерных и трехмерных графиков, анимации изображений, математической обработки данных, управления экспериментом. Среда разработки содержит развитые средства визуального проектирования интерфейса приложений.

      Относительная независимость приложений от конкретной версии исполняющей среды дает важное преимущество: добавление новых возможностей в среде автоматически расширяет возможности программы-приложения. Например, работа с файлами, графиками, базами данных, компьютерными сетями и т.д. Самой важной особенностью языка BARSIC является надежность программирования. В BARSIC предусмотрены специальные средства повышения надежности.

      Во-первых, выбран такой синтаксис языка программирования, чтобы из-за случайных опечаток во время набора программы минимизировать вероятность возникновения недиагностируемых ошибок. В отличие от BARSIC, такие языки, как FORTRAN, JavaScript, Visual BASIC в очень сильной степени подвержены этим ошибкам из-за правил автоматического приведения типов, а также свободной типизации (для JavaScript и Visual BASIC). В несколько меньшей степени эти ошибки характерны для C и C++, а в еще меньшей степени – для Java (за исключением работы со строками, где такие ошибки для Java типичны) и Object PASCAL (Delphi).

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

      В-третьих, в BARSIC на уровне среды встроена система перехвата и обработки так называемых исключительных ситуаций. При этом если программист заранее не предусмотрел действий при возникновении деления на ноль, ввода вместо числа другого символа и т.п., программа не завершит работу в аварийном режиме, как бывает в большинстве программ, написанных на других языках программирования. Среда BARSIC выдаст диагностику ошибки, после чего можно будет повторить ввод с исправлением неправильно введенных значений или символов и продолжить работу. Обработка исключительных ситуаций имеется в большинстве современных языков программирования, но BARSIC обеспечивает дополнительную защиту от исключений на уровне исполняющей среды даже в тех случаях, когда программы, написанные на C++ или Object PASCAL, окажутся неработоспособны.

      В-четвертых, в интегрированную среду BARSIC встроена поддержка работы с пользовательским интерфейсом методом визуального проектирования. Это делает BARSIC средой RAD (Rapid Application Development) - средством сверхбыстрой разработки программ.

    3. Языки программирования и интегрированные среды
    4. По словам создателя первой интегрированной среды FRAMEWORK, интегрированная среда - это такая прикладная программа, что пользователь, запустив ее в начале рабочего дня, находит в ней все необходимые для работы ресурсы и поэтому не выходит из интегрированной среды до самого конца рабочего дня. Конечно, это определение не очень корректно и несколько идеализирует ситуацию, но его общий смысл достаточно ясен.

      Основная особенность интегрированных сред - высокая степень интерактивности. Она достигается за счет интеграции в единое целое различных программных ресурсов, отсюда и происходит название. Так, интегрированная среда какого-либо компилятора языка программирования (программы, которая из текста данного языка программирования создает исполняемую программу) обычно содержит текстовый редактор и собственно компилятор с системой диагностики ошибок компиляции. Кроме того, в ней обычно имеется также отладчик - интерпретатор данного языка, выполняющий программу строчка за строчкой и имеющий ряд других специальных возможностей.

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

      Одно из активно развивающихся направлений, визуальное проектирование - полностью основано на использовании возможностей интегрированной среды. Пользователь в интерактивном режиме выбирает необходимые для его программы объекты языка программирования и устанавливает между ними связи. Популярность таких языков как Visual BASIC (Microsoft), а также Object PASCAL (среды Delphi и Kylix, Borland), не случайна. Даже неопытный программист, не знающий кроме BASIC других языков программирования и никогда не программировавший под Windows, может за два-три дня с помощью Visual BASIC создать прикладную программу, работающую под Windows. А вот программисту высокого класса, не программировавшему до того под Windows, с помощью C++ зачастую приходится для создания такой же программы затратить недели, а то и месяцы. Правда, Visual BASIC обладает рядом существенных ограничений. С помощью сред визуального проектирования можно создавать весьма сложные программы, не набрав с клавиатуры ни строчки кода.

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

      А теперь зададим вопрос: как быть, если пользователь должен дать исполняемой программе информацию, которую можно рассматривать как "добавку" к тексту программы? Например, мы хотим, чтобы на экране был построен график функции, и в подобной программе обеспечиваем все необходимые сервисные возможности. Однако формулу для функции должен задать сам пользователь, и заранее неизвестно, какая она будет.

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

      Такого рода особенности присущи так называемым математическим программам. Наиболее известны из них Maple V , Mathematica, Matlab, Mathcad, Origin, Statistica. Все они являются интерпретаторами, выполняющими программы, написанные на соответствующем командном языке. Правда, эти командные языки являются не очень продуманными: как правило, для решения каждой частной задачи вводится специальная команда или функция. В результате либо возникают языки со многими сотнями команд и функций, которые могут почти все, либо - примитивные системы с десятками команд и функций, предназначенные для решения только наиболее распространенных в данной области задач. Кроме того, ни одна из математических программ не ориентируется на создание многооконных программ-приложений с окнами для вывода графиков, кнопками, пунктами ввода и другими элементами меню. В последних версиях математических программ началось движение в этом направлении, но пока еще эти возможности находятся в самом зачаточном состоянии. Поэтому возникает естественный вопрос: нельзя ли соединить возможности систем-интерпретаторов типа математических программ с преимуществами языков программирования типа PASCAL, C, Java, ADA или Oberon-2, снабдив их к тому же средствами визуального проектирования интерфейса пользовательских программ?

      Именно такой язык программирования мы и попытались создать.

      Надо отметить, что бурное развитие за последние годы системы WWW (World Wide Web) в Internet стимулировало развитие языка разметки гипертекста (HTML) и включение в документы HTML так называемых сценариев (подпрограмм, вставляемых обычно прямо в текст HTML-документа). Большую популярность приобрел интерпретатор языка JavaScript, ставший неотъемлемой частью документов в WWW. BARSIC по идеологии во многом схож с ним, хотя пока и не ориентирован в полной мере на работу в Internet. Однако в JavaScript отсутствуют возможности построения графиков (реализации стандарта SVG в броузерах пока не поддерживаются), нет полноценной обработки исключительных ситуаций, крайне бедны математические возможности, не слишком удачна объектная модель. Кроме того, так называемая свободная типизация, когда значение переменной может свободно менять тип по результату присваивания, а также ряд других особенностей языка делыют написание сколько-нибудь серьезных программ на JavaScript практически невозможным. Программирование на языке Java существенно сложнее, чем на JavaScript, так как в Java фактически отсутствуют средства программирования высокого уровня. Так, в Java крайне плохо продумана работа со строками, и присутствуют только самые примитивные средства поддержки ввода-вывода и работы с графикой. Поэтому в настоящее время для большого класса задач (но, конечно, не для всех!) BARSIC можно рассматривать как хорошую замену Visual BASIC, Delphi, C++ и Java для решения прикладных задач, не требующих системного программирования. С помощью BARSIC можно решать задачи расчетного характера, создавать программы-приложения с развитым пользовательским интерфейсом (кнопками, разнообразно оформленным текстом, диалогами, меню, двухмерными и трехмерными графиками, различного рода списками). В ближайшем будущем планируется, что исполняющая среда BARSIC будет реализована для платформы LINUX, а в дальнейшем - и других диалектов UNIX, и язык BARSIC реально станет платформо-независимым.

    5. Программы-приложения среды (исполняемые файлы)
    6. Программы-приложения среды хранятся в файлах с расширением ".brc" и работают только под управлением исполняющей среды BARSIC. Эти программы в значительной степени являются платформо-независимыми. Если будет написан интерпретатор языка BARSIC для какой-либо другой операционной системы или аппаратной платформы, "brc"-файлы можно будет использовать и там. Более того, размеры даже довольно сложных программ, написанных на языке BARSIC, редко превышают 20-30 Кб, причем большую часть объема программы занимает информация об экранных формах, из которых состоит интерфейс программ (надписи, размеры пунктов ввода/вывода и т.п.). Уменьшение размера программ делает их более понятными. В сочетании с очень мощными средствами диагностики ошибок и принципом автодокументирования программного кода это резко повышает читаемость и надежность программ, а также сокращает время написания и отладки приложений.

      Большинство наиболее употребительных и наиболее сложных для реализации возможностей, с которыми имеет дело любой программист в обычных языках программирования, уже реализовано в самой среде BARSIC. Например, организация работы с пользовательским интерфейсом (экранные формы, надписи, кнопки и т.п.), научная графика, работа с файлами (в том числе мультимедийными), средства для работы с внешними устройствами через COM-порты, и т.п. А те части работы, которые требуют системного программирования или крайне критичны к быстродействию или ресурсам, могут быть выполнены в виде динамических библиотек (DLL) или законченных программ, написанных на языках C++, Object PASCAL (Delphi) и т.д. - В BARSIC встроена как работа с внешними динамическими библиотеками (DLL), так и возможность вызова внешних программ с программно задаваемым списком параметров. Такой подход позволяет избавить программиста от совершенно бесполезной и требующей ненужно высокой квалификации работы, занимающей большую часть времени при программировании на традиционных языках программирования, за исключением, пожалуй, только языка Visual BASIC. Это экономит огромную часть времени при написании программы и позволяет избежать наиболее трудноуловимых и опасных ошибок.

    7. Запуск на исполнение программ-приложений
    8. Установка на компьютер среды BARSIC осуществляется простым копированием файлов дистрибутива в нужную папку.

      Вход в среду BARSIC происходит после запуска исполняемого файла интегрированной среды. В случае свободно распространяемой версии “BARSIC player” (“проигрывателя” файлов-приложений среды) это файл с именем BarsicR.exe (barsic.exe для англоязычной версии “проигрывателя”). В случае коммерческой версии “BARSIC developer” (среды разработки и отладки приложений) это файл с именем Barsicw.exe.

      Первый путь запуска приложения - выбор пункта Файл (в среде разработки и англоязычной версии “проигрывателя” File) в главном меню. Подпункт Запустить приложение… (Run…) приводит к появлению диалога выбора файла. Запуск нужного файла (программы-приложения среды с расширением .brc) производится традиционным для MS Windows способом.

      Возможен второй путь запуска приложения - с помощью командной строки из Desktop (в русскоязычной версии – “Рабочий стол”). Для этого надо щелкнуть правой кнопкой “мыши” на иконке с Shortcut (“Ярлыком”) доступа к BARSIC. После этого выбрать пункт меню Properties (“Свойства”) и строку с Target (“Объект”) установить, например, так:

      C:\BARSIC\BarsicR.exe C:\BARSIC\METHODS\methods.brc

      Другой пример установки этой строки:

      C:\BARSIC\BarsicR.exe qwell

      Во втором примере не указано расширение имени файла qwell.brc, а также путь к нему. При этом подразумевается расширение .brc и считается, что программа qwell.brc находится в той же папке, что и barsicr.exe.

      Третий путь – программа может быть запущена из командной строки DOS-задачи, работающей под Windows:

      C:\BARSIC\BarsicR.exe C:\BARSIC\METHODS\methods.brc

      либо

      C:\BARSIC\BarsicR.exe qwell

      Четвертый путь – программа может быть запущена из другой программы-приложения BARSIC с помощью команды вида File(‘C:\BARSIC\qwell.brc’).execute() .

    9. Использование среды BARSIC в качестве научного калькулятора

BARSIC можно использовать в качестве калькулятора:

Для вычисления значения выражения следует писать выражение в поле редактирования и нажимать <Enter>.

В окне заставки исполняющей среды или окне отладки среды разработки можно выполнять команды (например, для построения графиков). Для этого следует писать их в поле редактирования “Исполнить”(“Execute”) и нажимать <Enter>. Предыдущие вводы (как правильные, так и с ошибками) запоминаются и могут быть возвращены из предыстории. Вывод графиков без указания подокна вывода производится в подокно вывода графиков по умолчанию. При выполнении программы в среде разработки им является подокно отладчика, а при работе в исполняющей среде – подокно заставки исполняющей среды.

Замечание: не забывайте, что ряд графических команд производят вывод только по командам graph.update() или subwindow.update()

    1. Интерфейс среды разработки

Интерфейс среды разработки в BARSIC состоит из двух частей: основного окна и редактора экранных форм. Основное окно содержит:

1. Главное меню, состоящее из раскрывающихся подменю:

2. Редактор исходного текста программы, расположенный под заголовком Source. В редакторе набирается и редактируется текст вашей программы. Этот текст сохраняется в файлах с расширением .brs.

3. Списки модулей и экранных форм, расположенные слева от редактора исходного текста. Они представляют собой две текстовые таблицы:

Внимание! Экранные формы хранятся в файлах с тем же именем, что файл проекта, но с расширением .brf –файлах экранных форм среды BARSIC, которые автоматически создаются в режиме “Build” и загружаются при загрузке проекта. Поэтому для работы с проектом нужны как “.brs“, так и “.brf” файлы.

  1. Работа в программе-приложении среды BARSIC
  2. Данная глава предназначена в первую очередь для простых пользователей, т.е. тех, кто будет работать в программах-приложениях среды BARSIC, а не тех, кто будет ее создавать и редактировать. В предыдущей главе описано, как запустить на исполнение программу-приложение среды. В данной главе рассказывается о работе в экранной форме – основном объекте интерфейса пользователя.

    1. Работа в экранной форме

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

Как уже говорилось, экранная форма может иметь заголовок – какую-либо строку, поясняющую назначение формы, расположенную в верхней части рамки. Внутри экранной формы располагаются перечисленные выше элементы. Некоторые из этих элементов являются фокусируемыми, т.е. могут принимать фокус ввода. В среде BARSIC в экранной форме существует единственный фокус ввода (в отличие от крайне неудачных соглашений вымирающего стандарта Common Users Access, где предусматривалось одновременное наличие главного и “размытого” фокусов). Элемент, обладающий фокусом ввода, является текущим элементом формы, с которым пользователь в данный момент может работать. Перемещать фокус ввода можно с помощью мыши, а также, клавишами <Tab>, <Shift><Tab> и стрелками клавиатуры. При работе мышью одновременно с перемещением фокуса могут выполняться активные действия того элемента, который получает фокус. Например, при нажатии на кнопку с помощью мыши, кнопка получает фокус ввода и сразу же нажимается.

    1. Описание элементов экранной формы

Рассмотрим назначение и порядок работы с элементами экранных форм.

 

    1. Работа с графическим подокном

Подокно вывода графиков, изображений и т.п. представляет собой прямоугольную область с неким цветом фона. В эту область могут выводиться графики, а также анимированные и статические картинки. Чтобы убедиться, что перед вами графическое подокно, нажмите на нем правую кнопку мыши. Должно появиться "всплывающее" меню со следующими пунктами: “Назад” ("Scale back"), “Вперед” ("Scale forward"), “Начальный масштаб” ("Scale reset"), “Сохранить изображение как…” ("Save image as…"), “Скопировать в новое окно” ("Copy to new window") и “Параметры” ("Options"). Это меню позволяет выполнять следующие действия.

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

    1. Независимые графические окна

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

В независимом графическом окне есть меню со следующими пунктами:

При работе в среде BARSIC одновременно может быть открыто произвольное количество независимых графических окон. Они существуют независимо от программ-приложений и от подокон, их породивших, и могут переходить из приложения в приложение.

    1. Окно диалога Параметры графика (Options)

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

Под надписью Границы просмотра (Bounds) расположены четыре поля редактирования:

Изначально эти поля редактирования содержат текущие значения соответствующих границ. После редактирования какой-либо из границ происходит перерисовка графика в новых границах. Окончанием редактирования границы считается переход к другому функциональному элементу диалога или нажатие <Enter>. Если число набрано синтаксически неверно, его ввод игнорируется.

Кнопки <<< (Forward) и >>> (Back), расположенные в слева внизу диалога, имеют тот же смысл, что пункты меню, позволяющие перемещаться по предыстории изменения границ.

Под надписью Подписи осей (Axes titles) расположены поля редактирования, содержащие подписи осей:

Эти поля работают аналогично полям ввода границ.

Справа от надписи Сетка (Grid) расположен выпадающий список. Он позволяет выбрать стиль рисования координатной сетки. Сетка рисуется пунктирными линиями того же цвета, что оси.

По окончании установки параметров осей следует закрыть диалоговое окно нажатием кнопки Ввести (OK), расположенной в правом нижнем углу бокса, либо – обычным для окон Windows способом (<Alt><F4> или мышью).

  1. Функциональные элементы языка программирования BARSIC

Язык программирования BARSIC является объектным, но не объектно-ориентированным. Он содержит большое количество стандартных классов, доступных в приложении, но не позволяет пользователю определять собственные классы объектов. Большинство функциональных элементов языка (например, строки, массивы и др.) могут рассматриваться как объекты, принадлежащие стандартным классам и обладающие набором свойств и методов. В то же время, для решения простых задач достаточно уметь обращаться с ними как простыми типами данных (без использования их объектных свойств). В данный момент в языке BARSIC имеются следующие функциональные элементы

Все эти элементы среды BARSIC (кроме элементов экранных форм) могут динамически создаваться, переименовываться, копироваться и уничтожаться во время работы программы-приложения. В данной главе для простоты описания функциональные элементы не рассматриваются как объекты. Описание же их как объектов, принадлежащих соответствующим классам, и описание свойств и методов этих классов вы найдете в руководстве программиста

    1. Численные константы (числа)
    2. Численные значения (в дальнейшем просто числа) в языке BARSIC имеют только один тип – вещественный, максимальной точности. Он соответствует формату Extended среды Delphi, с помощью которой скомпилирована среда BARSIC. Численные константы могут быть записаны либо в научной нотации, либо в представлении с фиксированной точкой, либо в виде целой константы. Диапазон допустимых значений от –1e4500 до 1e4500, число значащих десятичных цифр – приблизительно 17. "Сокращенная" форма записи чисел, начинающихся с нуля, характерная для языков FORTRAN, BASIC и JavaScript, запрещена. Например, нельзя писать .5 вместо 0.5 .

      Примеры численных констант:

      3.51, +5, -7, 0.1, 100, 1e4500, 4.712345678146889e-4497

      Целые константы могут быть записаны не только в десятичном, но и в n-ричном виде для основания системы счисления n , лежащем в пределах от 2 до 36 (по числу цифр и букв в английском алфавите).

      Примеры численных констант, записанных в различных системах счисления:

      0(2)1001101, 0(16)A1B, 0(3)1201, 0(36)Z

      После нуля в скобках стоит основание системы счисления, далее – число в этой системе. Заглавные буквы служат для обозначения цифр в системах счисления с основанием большим 10. Надо отметить, что форматы записи восьмиричных и 16-ричных чисел, характерные для языка C, в BARSIC не поддерживаются.

      Для шестнадцатиричных чисел в BARSIC существует упрощенная форма записи с использованием символа #, аналогично тому, как это сделано в языках HTML и XML:

      #FF00AA, #1AB и т.п.

      В языке BARSIC существует константа p=3.1415926…; она обозначается идентификатором pi. Пример: a=sin(pi/8). Другая часто встречающаяся в научных приложениях константа, число e, отсутствует, но может быть вычислена как exp(1).

    3. Цвета в RGB кодировке
    4. При создании приложений часто приходится задавать цвета различных видимых на экране объектов, таких как линии и точки графиков, графические примитивы, элементы интерфейса. Для представления цвета в языке BARSIC используется RGB кодировка. Цвет в RGB кодировке представляется тремя числами: интенсивностью красного (Red), зеленого (Green) и синего (Blue) цветов. Интенсивность каждого цвета задается числом, лежащим в диапазоне от 0 до 255, т.е. одним байтом. Для задания цвета в RGB кодировке требуется, тем самым, три байта.

      Тремя байтами кодируются числа от 0 до 256*256*256-1, или, в шестнадцатиричном виде, от #000000 до #FFFFFF. Здесь мы использовали синтаксис языка BARSIC для представления чисел в шестнадцатиричном виде (см. предыдущий пункт). Каждому числу из этого диапазона соответствует цвет в RGB кодировке, где старший байт числа дает интенсивность красного цвета, средний – синего и младший байт – зеленого цвета. Например, число #FF0000 кодирует ярко-красный цвет (первый байт – 255, или #FF в шестнадцатиричной форме, максимальная интенсивность, остальные байты – 0, интенсивность нулевая). Число #00FF00 кодирует ярко-зеленый цвет, а число #0000FF – ярко-синий. Смесь ярко-красного и ярко-зеленого цветов (#FFFF00) дает желтый цвет; смесь синего и зеленого (#00FFFF) – голубой; смесь красного и синего (#FF00FF) – малиновый; смесь всех цветов с максимальной интенсивностью (#FFFFFF) дает белый цвет.

      Таким образом, цвет в RGB кодировке представляет собой целое число, лежащее в диапазоне от 0 до 16777215 (от #000000 до #FFFFFF в 16-ричной форме). Приведем 16 наиболее часто употребляемых цветов:

      #000000 – черный;

      #FFFFFF – белый;

      #FF0000 – ярко-красный;

      #00FF00 – ярко-зеленый;

      #0000FF – ярко-синий;

      #FFFF00 – желтый;

      #00FFFF – ярко-голубой;

      #FF00FF – ярко-малиновый;

      #808080 – темно-серый;

      #C0C0C0 – светло-серый;

      #800000 – темно-красный, кирпичный;

      #008000 – зеленый;

      #000080 – темно-синий;

      #808000 – голубой, как экран в Windows по-умолчанию;

      #008080 – оливковый;

      #800080 – темно-малиновый;

    5. Численные переменные
    6. Работа с численными переменными практически такая же, как в других языках программирования. Для создания новой численной переменной в основном тексте программы достаточно выполнить присваивание, в котором в левой части стоит идентификатор переменной, а в правой – численное выражение (в частности, численная константа). Например, x=1.52e-14.Если же переменная создается динамически (в команде), требуется поместить соответствующее присваивание в команду define, аргументом которой должна быть строка с динамически задаваемым выражением. Например, при задании переменной x в команде с1 это делается так:

      с1={define(’x=1.52e-14’)};

      Возможно динамически переименовывать или уничтожать переменные командами rename и delete. Например, rename(y=>z);delete(x).

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

      c2={define(’x=1.52e-14; ’y=21;z=0.5’)};

      Аналогично, возможно одновременное уничтожение произвольного числа элементов:

      delete(x1,y1,z);

      Если переменная уже существует, команда define выдаст сообщение об ошибке. Поэтому для переменных, которые уже могут существовать, но которые по каким-то причинам необходимо перезадать, рекомендуется сначала попытаться их уничтожить, и только после этого задавать:

      С2={try(delete(x));

      try(delete(y));

      try(delete(z));

      define(’x=1.52e-14; ’y=21;z=0.5’)

      };

    7. Численные выражения
    8. Численное выражение представляет собой математическое выражение, т.е. числа, численные переменные и функции, соединенные математическими знаками:

      “+” – сложение x+y

      “-” – вычитание x-y

      “*” – умножение x*y

      “/” – деление x/y

      “^” – возведение в степень x^y (Внимание! Программисты на C/C++/Java/JavaScript, не путайте с XOR!).

      “!” – факториал n! (произведение натуральных чисел от 1 до n)

      “!!” – двойной факториал n!! (произведение нечетных натуральных чисел от 1 до n при нечетном n и четных натуральных чисел от 2 до n при четном n)

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

      a*sin( 4*pi*k + c ) + b1*1.82^(-7!/6!!) - cos(f( g(b2) + q(c) ))

      Пробелы во всех местах, где они не являются разделителями, игнорируются.

      В результате выполнения команды, содержащей численное выражение, это выражение дает число. Список стандартных функций, которые можно использовать в численном выражении, приведен в разделе “Стандартные функции и константы”. Если переменная или функция, использованная в выражении, не определена, или в выражении имеется синтаксическая ошибка, при "компиляции" проекта (вызове пункта Build для проекта) интегрированная среда выдаст диагностику и укажет предполагаемое место нахождения ошибки. Анализ формул производится слева направо. Даже в сложных выражениях маловероятна неверная диагностика ошибки, так как синтаксис языка выбирался так, чтобы ошибки могли быть выявлены с максимальной надежностью. Однако место нахождения ошибки может быть указано не вполне точно.

    9. Численные функции
    10. Численная функция, определенная пользователем, – математический объект, принимающий численное значение, зависящее от аргументов по формуле, задаваемой пользователем.

      1. Задание численных функций

Численные функции задаются через присваивание с помощью символа равенства “=” в виде, похожем на их использование в математике. В левой части стоит имя (идентификатор) функции, затем в круглых скобках через запятую – список аргументов. В правой части стоит зависящее от этих аргументов выражение. В этом выражении можно использовать стандартные функции, а также ранее заданные переменные и функции. Пробелы во всех местах, где они не являются разделителями, игнорируются.

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

Примеры задания функции:

f(x)=sin(x)/x ;

Q1(t) = a*t+b

Здесь a и b - параметры (ранее заданные численные переменные), x и t - формальные аргументы функций f и Q1, соответственно.

Замечание: аргументы у численных функций могут быть только численные.

Функции можно создавать или перезадавать динамически (в команде). Для этого требуется поместить соответствующее присваивание в виде строки в команду define. Например:

с1={define('f1(x)=sin(x)/x);f2(x)=tg(x)')};

либо, что то же самое,

с1={define(”f1(x)=sin(x)/x);f2(x)=tg(x) ”)};

Можно задавать функции с различным числом аргументов (в пределах от 0 до 100), например:

и т.п.

Можно задать функцию без аргументов, например:

N()=a+b.

Функция, не имеющая аргументов, в выражении также записывается со скобками.

При задании: N()=a+b, при использовании: C = A + N().

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

Так, если выполнить команды

a=1; b=2;

n=a+b;

N()=a+b;

a=2;

то при вызове n мы получим значение 3 : при задании переменной n переменная a имела значение 1, а переменная b имела значение 2. А вот при вызове N() мы получим 4 : выполнится вычисление выражения a+b с текущими значениями a и b, т.е. 2+2. В функции N() переменные a и b выступают в качестве параметров.

      1. Использование функций.

Использование функций, определенных пользователем, аналогично использованию стандартных функций. Они могут быть включены в любое численное выражение. Например, можно использовать значение функции в некоторой точке:

a=f(3.25)+1.

Можно использовать функцию для задания других функций:

g(x)=(f(x-a)+f(x+a))/2

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

    1. Простые численные функции
    2. В языке BARSIC имеется большое количество предопределенных функций. Часть из них могут рассматриваться как функции общего назначения и рассматриваются в данном разделе, другие же нужны преимущественно в области научных исследований и будут рассмотрены далее. У стандартных функций может быть один или более аргументов. Для примера в качестве аргументов мы пишем X, X1,X2 и т.п., хотя при использовании этих функций в качестве фактических аргументов можно подставлять любые численные выражения. Для удобства используется дублирование имен некоторых тригонометрических функций, т.к. в англоязычных странах используются отличные от России соглашения об именах функций.

      Константы:

      pi - число p=3.1415926…

      Тригонометрические функции:

      sin(X) - синус

      cos(X) - косинус

      tg(X), tan(X) - тангенс

      ctg(X), cot(X) - котангенс

      Обратные тригонометрические функции:

      arcsin(X), asin(X) - арксинус

      arccos(X), acos(X) - арккосинус

      arctg(X), atan(X) - арктангенс

      arcctg(X), acot(X) - арккотангенс

      Логарифмы и экспоненты:

      ln(X) - натуральный логарифм (по основанию e=2.71828…)

      log10(X), lg(X) - десятичный логарифм (по основанию 10)

      log(X,radix=Y) - логарифм числа X по основанию Y

      exp(X) - экспонента (число e=2.71828… в степени X)

      Гиперболические функции:

      sh(X) - гиперболический синус : (exp(X)-exp(-X))/2

      ch(X) - гиперболический косинус: (exp(X)+exp(-X))/2

      th(X) - гиперболический тангенс: sh(X)/ch(X)

      cth(X) - гиперболический котангенс: ch(X)/sh(X)

      Другие функции:

      sqrt(X) - квадратный корень из X

      square(X) - квадрат X

      abs(X) - абсолютное значение (модуль) числа X

      round(X) - округление числа X до ближайшего целого

      trunc(X) - округление с отбрасыванием части числа X, стоящей после десятичной точки

      floor(X) - округление числа X до ближайшего целого в меньшую сторону (целая часть числа X)

      ceil(X) - округление числа X до ближайшего целого в большую сторону

      frac(X) - дробная часть числа X, т.е. X-floor(X)

      sign(X) - знак числа: =1 при X>0,

      =0 при X=0,

      =-1 при X<0;

      min(X1,X2,...,Xn) - минимальное из любого количества сравниваемых чисел X1,...,Xn

      max(X1,X2,...,Xn) - максимальное из чисел X1,...,Xn

      randomize() - инициализация генератора псевдослучайных чисел

      random() - псевдослучайное число в диапазоне от 0 до 1

      random(X1..X2) - псевдослучайное число в диапазоне от X1 до X2

      Внимание! Последовательности, получаемые с помощью команд random, являются псевдослучайными. В случае необходимости улучшить случайность распределения чисел, инициализируйте генератор псевдослучайных чисел командой randomize(), когда надо начать получение участка последовательности, независимого от предыдущих.

    3. Строковые константы (строки)
    4. Строка в среде BARSIC - это произвольный набор символов размером до 2 Гб, заключенный в одинарные или двойные кавычки, например: 'Any text, 1234абв' или ”Any text, 1234абв”. Все кавычки в строке должны быть парными, т.е. в строке не может встретиться только одна одинарная или двойная кавычка. Это сделано для облегчения работы с командами act и define. Для обозначения непарной кавычки в строке используется символ &, затем соответствующая кавычка, затем точка с запятой, например: 'That&';s good'. Это отличает язык BARSIC от JavsScript. Кроме того, в BARSIC парные кавычки могут иметь любой уровень вложенности: s='s1=”s2=’Ok!’”'. При этом действует простое правило – внутри текста, ограниченного парой кавычек одного типа, могут встречаться куски текста, ограниченные парой кавычек другого типа. Допустим произвольный уровень вложенности таких кусков текста друг в друга.

      Для обозначения символа & используется то же правило: 'Black&&;white'.

      Строка может быть пустой, т.е. не содержать ни одного символа: '', либо, что то же, ””.

    5. Строковые переменные
    6. Строковые переменные вводятся, переименовываются и уничтожаются аналогично численным. Отличие лишь в том, что присваиваемые им выражения должны быть строковыми. Например, S='e123456'; S1=S+' abcd '+S.[3..5]. В данном примере использована подстрока S.[3..5] строки S. О свойствах строковой переменной как объекта (о подстроках) читайте в разделе “Класс String”.

    7. Строковые выражения
    8. Строковое выражение – последовательность строковых констант, строковых переменных, стандартных строковых функций, а также строковых свойств и методов объектов, соединенных оператором “+” – сложения (конкатенации) строк.

      Пример:

      S+'123'+s1+S.[I+2]+'qq'+s1.[3..9]+str(x)

      Результатом строкового выражения является строка. В отличие от слабо типизированных языков JavaScript, C или C++, в языке BARSIC складывать строковые и численные (или логические) значения нельзя.

    9. Логические выражения

1.1.1 Простейшие логические выражения

Логическое выражение ( или, что то же, булевское выражение) может принимать одно из двух значений: истинно или ложно. Простейшее логическое выражение состоит из последовательности из двух математических выражений, между которыми стоит знак сравнения. Иными словами, оно представляет собой неравенство или равенство, например:

a>5, b<=a, c=8, a<>7.

В логических выражениях используются следующие знаки сравнения:

< - меньше

<= - меньше или равно

> - больше

>= - больше или равно

= - равно (в логических выражениях это знак равенства, а не знак присваивания! )

<> - не равно

При этом если неравенство (или равенство) выполняется, то такое простейшее условное выражение принимает значение "истинно", если же не выполняется – то "ложно". Например, 24>10 – истинно, 11=5 – ложно.

Выражение А<=1 – истинно, если переменная А имеет значение в интервале от минус бесконечности до 1 включительно, иначе - ложно.

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

'abcdef' = 'abcdef' – истинно;

'bbcdefg' > 'abcdefg'

'12345' > '012345678'

'qwerty' > 'qwersyui'

'1234567890'>'123456' – истинно.

1.1.2 Составные логические выражения

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

not -"не",

and -"и",

or - "или",

xor - "исключающее или".

При этом наибольшим приоритетом обладает знак not, наименьшим – or и xor. Все эти логические операции действуют в соответствии с обычными правилами булевской алгебры.

Для изменения порядка выполнения булевских операций применяются фигурные скобки.

Примеры:

a>b and{a>18 or a<=b}or{b>=14}

{a>b}and{not{a>18}or{a<=b}or{b>=14}}

Помимо обычных булевских операций в BARSIC добавлена логическая операция in - проверка, находится ли значение численного выражения (обозначим его expr) в заданных границах, к примеру, a и b (вместо a,b и expr могут стоять произвольные выражения):

expr in [a .. b] – истинно, если значение expr попадает в интервал a .. b

expr in (a .. b] – истинно, если значение expr попадает в интервал a .. b, открытый слева (точка a “выколота” и не входит в интервал)

expr in [a .. b) – истинно, если значение expr попадает в интервал a .. b, открытый справа (точка b “выколота” и не входит в интервал)

expr in (a .. b) – истинно, если значение expr попадает в открытый интервал a .. b (обе крайние точки “выколоты” и не входят в интервал)

Примеры:

a+b in [5..15)

{a>b}and{not{a in (-1..1)}}

В настоящее время в BARSIC нет ни булевских констант true и false, ни булевских переменных, ни булевских функций.

    1. Команды пользователя
      1. Задание и использование команд

Основой построения программ в BARSIC являются определенные пользователем команды. Они задаются идентификатором и не имеют аргументов.

Команда - это перечисление через точку с запятой:

Пример:

f1={for(i=1..10)do(c1);

c2;

c3

};

В языке BARSIC существует большое количество предопределенных стандартных команд-операторов (далее мы их часто будем называть стандартными командами или стандартными операторами). Они описаны в следующей главе (“Стандартные команды, функции и константы ”).

      1. Команда-обработчик onStart.
      2. Если команда пользователя, расположенная в модуле main:, была названа onStart, то она будет автоматически выполняться сразу при запуске на исполнение программы-приложения. Любая программа-приложение среды BARSIC должна содержать такую команду. Как правило, эта команда вызывает главную экранную форму приложения. После завершения выполнения этой команды происходит выход из программы-приложения.

      3. Команда-обработчик onBreak.

Работа любой команды (последовательности команд) в среде BARSIC может быть прервана пользователем. Если команда была запущена из экранной формы программы-приложения, то для прерывания ее работы (например, в случае зацикливания) необходимо щелчокнуть на свободном месте экранной формы правой кнопкой мыши и выбрать пункт "Stop" в появившемся меню. Такая возможность существует всегда при работе в приложении.

Кроме того, в приложении может быть предусмотрена кнопка, которой поставлена в соответствие команда stop, и установлен ключ "Allways enabled". Нажатие на такую кнопку также приводит к прерыванию выполнения текущей команды.

Если работа программы прерывается таким образом, а команда onBreak не задана, после остановки выводится диагностика, в каком месте программы произошла остановка. Для предотвращения вывода этой диагностики следует задать команду onBreak не задана ( пусть даже пустую, в виде onBreak={}; ).

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

 

  1. Создание и редактирование экранной формы и ее элементов
    1. Вызов редактора экранных форм
    2. Создание новых экранных форм и вызов на редактирование уже существующих происходит при работе в главном интерфейсе среды разработки, в окне FormsList. Окно FormsList (оно расположено слева) состоит из двух частей – списка модулей и списка экранных форм. В верхней части расположены имена существующих модулей, в нижней – имена экранных форм, имеющихся в выбранном модуле. При необходимости (если модулей много) можно передвинуть границу между верхним и нижним списками с помощью мыши. Чтобы выбрать модуль, в котором вы хотите создать или отредактировать экранную форму, щелкните мышью по его имени в верхнем списке (списке модулей). В списке экранных форм первым элементом является команда New form. Чтобы создать новую форму, надо на этом пункте списка совершить двойной щелчок левой кнопкой мыши либо нажать правую кнопку мыши и в появившемся "всплывающем" меню выбрать пункт Edit. При этом будет создана новая экранная форма, которой будет дано имя по умолчанию: для первой формы – form1, для второй – form2, и т.д. Чтобы отредактировать уже имеющуюся форму, совершите двойной щелчок на ее имени в списке (либо выберите пункт Edit в появившемся меню после нажатия правой кнопки мыши). Редактируемуемая форма показывается на экране и может быть интерактивно изменена.

    3. Работа в редакторе экранных форм
    4. Редактор экранных форм представляет собой окно с названием Form editor, в котором отображается название (тип) редактируемого элемента интерфейса и список его свойств. Тип элемента интерфейса расположен в самом верху окна редактора. Изначально, сразу после вызова формы на редактирование, редактируемым элементом является сама экранная форма.

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

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

      Исключением из описанного правила является элемент экранной формы меню (Menu). Для его редактирования существует специальное окно, работа в котором описана ниже. Сама экранная форма как элемент интерфейса отличается тем, что она не окружена черными квадратиками, и изменение ее размеров и положения на экране производится обычным способом, принятым в среде Windows.

      В окне редактора экранных форм можно вручную установить размеры и положение элементов. В данной версии среды BARSIC для элементов интерфейса принята независимая от разрешения монитора система координат. Ширина экрана считается равной 80 условных единиц, а его высота – 50 условных единиц. Все размеры и координаты элементов интерфейса могут принимать вещественные значения. При изменении размеров и координат с помощью мыши, эти изменения происходят дискретно – на 0.5 условной единицы.

      Для изменения какого-либо свойства элемента интерфейса установите с помощью мыши текстовый курсор на значение этого свойства в редакторе экранных форм и отредактируйте его. В процессе редактирования Вы будете видеть, как меняется внешний фид элемента в зависимости от значения этого свойства (если внешний вид от него зависит). Если свойство представляет собой цвет (Color или Backcolor), можно вызвать специальный редактор цвета двойным щелчоком мыши на значении этого свойства. Точно так же можно вызвать редактор шрифта для свойства Font.

      Если свойство принимает логические значения (true/false, т.е. истинно/ложно), то двойной щелчок мышью на таком значении приводит к его изменению на противоположное.

      Чтобы уничтожить элемент интерфейса, выберите его с помощью правой кнопки мыши, а затем в появившемся меню выберите пункт Delete.

      Если элемент интерфейса имеет свойство helpForm (имя экранной формы подсказки), то экранную форму-подсказку можно вызвать на редактирование не выходя из режима редактирования экранных форм: нажмите правой кнопкой мыши на этом элементе и выберите в появившемся меню пункт "Help form".

      Если элемент интерфейса имеет свойство - обработчик события (например, onClick для элемента Button) и этому свойству присвоена команда, в которой есть вызов какой-либо экранной формы, то эту экранную форму можно вызвать на редактирование не выходя из редактора экранных форм. Для этого нажмите правой кнопкой мыши на этом элементе и выберите в появившемся меню пункт "Next form".

      Чтобы закрыть редактируемую экранную форму, нажмите правой кнопкой мыши на любое место в форме и выберите в появившемся меню пункт "Close". Если редактирование этой экранной формы было вызвано из другой экранной формы (одним из двух вышеописанных способов), то вы вернетесь к редактированию предыдущей формы. В противном случае – редактор экранных форм будет закрыт.

      Чтобы закрыть редактор экранных форм, нажмите в нем кнопку OK.

    5. Элементы экранных форм
    6. Перечислим существующие элементы интерфейса и их свойства. Внимание! В приведенных примерах значения свойств стоят в кавычках, однако в редакторе экранных форм их следует писать без кавычек

      1. Элемент Form (экранная форма)

Этот элемент – сама экранная форма. На экранной форме располагаются все остальные элементы интерфейса. У нее есть следующие свойства:

 

      1. Элемент Button (кнопка)

Этот элемент представляет собой изображение прямоугольной кнопки с надписью на ней. У элемента Button есть следующие свойства:

      1. Элемент TextLabel (надпись)

Элемент TextLabel – надпись на форме, состоящая не более чем из одной строки. У этого элемента есть следующие свойства:

      1. Элемент TextField (поле редактирования текста)

Элемент TextField представляет собой однострочный текстовый редактор. Он позволяет вводить любые численные или строковые значения. У этого элемента есть следующие свойства:

      1. Элемент TextArea (область редактирования)

Элемент TextArea представляет собой простейший многострочный текстовый редактор. У этого элемента есть следующие свойства:

Пример:

"Первая строка текста.

Вторая строка текста".

В отличие от многих других языков программирования BARSIC в любых строковых выражениях позволяет оперировать ‘длинными’ строками: складывать их, присваивать и т.д. Разбиение ‘длинной’ строки на подстроки можно осуществлять методом toArray класса String.

      1. Элемент TextTable (таблица)

Элемент TextTable обычно предназначен для показа и редактирования в текстовом виде значений элементов массивов, изображаемых в виде таблицы. Имеет следующие свойства:

      1. Элемент CheckBox (независимый переключатель)

Элемент CheckBox может находиться в одном из двух состояний – включен или выключен. Если он включен, то в белом квадратике этого элемента нарисована галочка, если выключен – галочки нет. У элемента CheckBox есть следующие свойства:

      1. Элемент RadioButton (зависимый переключатель)

Элемент RadioButton имеет смысл только при наличии как минимум еще одного такого элемента на той же экранной форме (или панели). Все элементы RadioButton, расположенные на одной панели (или экранной форме), объединены в одну группу – радиогруппу. Наличие элементов Panel позволяет иметь на одной форме несколько разных радиогрупп. Элемент RadioButton может находиться в одном из двух состояний – включен или выключен. Если он включен, то в белом кружке этого элемента нарисована точка, если выключен – точки нет. В одной радиогруппе может быть включен только один элемент. Если включается другой элемент RadioButton в этой группе, то прежний автоматически выключается. Выключить RadioButton можно только включением другого элемента той же группы. У элемента RadioButton есть следующие свойства:

 

      1. Элемент FallingList (выпадающий список)

Элемент FallingList представляет собой основное поле, напоминающее пункт TextField, но со стрелочкой у правого края. При нажатии на стрелочку выпадает список, и можно выбрать выбирать одну из его строк. После этого список свернется, и в основном поле отобразится выбранная строка списка. У элемента FallingList есть следующие свойства:

      1. Элемент ScrollingList (прокручивающийся список)

Элемент ScrollingList представляет собой поле со скроллером (полосой прокрутки), позволяющее просматривать одномерный строковый массив с произвольным числом строк. При нажатии на строку “мышью” она выделяется, и таким образом можно выбрать одну из его строк. У элемента FallingList есть следующие свойства:

 

      1. Элемент Hyperlink (гиперссылка)

Элемент Hyperlink представляет собой иммитацию строки с гиперссылкой в WEB-браузерах. Его свойства похожи на свойства элемента Button:

      1. Элемент Panel (панель)

Этот элемент служит для оформления интерфейса и объединения элементов Radio button в группы. У него есть следующие свойства:

 

      1. Элемент Menu (меню формы) и редактор меню

Этот элемент всегда располагается в верхней части окна формы, под ее заголовком. Он представляет собой систему "выпадающих" меню. Для создания и редактирования меню вызывается специальный редактор меню. Чтобы вызвать этот редактор, в режиме редактирования экранной формы нажмите правую кнопку мыши на свободном месте экранной формы и выберите пункт "Menu editor". На экране появится окно с многоточием в верхнем левом углу. Оно будет отображать структуру редактируемого меню. Многоточием в редакторе всегда обозначается место, где может быть расположен новый пункт меню.

Чтобы создать новый пункт меню, совершите двойной щелчок левой кнопкой (или нажмите правую кнопку мыши на многоточии, и в появившемся меню выберите пункт "Create item"). Многоточие переместится вправо, на месте многоточия возникнет вновь созданный пункт меню, и под ним появится панель, обозначающая подменю этого пункта. На панели расположено многоточие, на месте которого описанным выше способом может быть создан новый пункт, принадлежащий этому подменю. Переместившееся вправо многоточие позволит добавить очередной пункт в главное меню. При добавлении нового пункта (в меню или в подменю) всегда будет возникать очередная панель с многоточием, позволяющим создать подменю.

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

Чтобы уничтожить пункт меню со всеми его подменю, нажмите во время редактирования меню правую кнопку мыши в области этого пункта и в появившемся всплывающем меню выберите пункт Delete item.

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

Если свойству onClick пункта меню присвоена команда, в которой есть вызов другой экранной формы, можно вызвать ее на редактирование прямо из редактора меню: нажмите правую кнопку мыши в области этого пункта и в появившемся всплывающем меню выберите пункт Next form.

      1. Элемент Subwindow (подокно)

Элемент Subwindow – окно для вывода графической информации (см. описание классов Subwindow и Graph). У этого элемента есть следующие свойства:

Кроме этого, имеется возможность назначать обработчики событий:

  1. Написание и отладка программ-приложений
    1. Написание программы и диагностика синтаксических ошибок в исходном тексте

Написание текста программы производится в окне Project Source интегрированной среды. Язык BARSIC позволяет произвольным образом форматировать набираемый текст, поскольку пробелы и переносы на новую строку между идентификаторами, служебными словами операторов, константами и т.п. игнорируются. Так, следующие варианты задания функции f(x) совершенно эквивалентны:

f(x)=sin(x)/x;

f ( x ) = sin ( x ) / x ;

f(x)=

sin(x)/x;

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

  1. При задании команд, не помещающихся на одной строке, всегда писать на первой строке имя команды и знак равенства, а открывающую скобку начинать со следующей строки, сдвинув ее на 2-3 символа относительно начала имени команды. При этом закрывающую фигурную скобку всегда писать под открывающей.
  2. Аналогичный принцип следует применять при задании функций, выражения для задания которых не умещаются на одной строке: имя функции со списком параметров и знаком равенство писать на одной строке, а остальное выражение – на других строках, причем на всех этих строках текст должен быть сдвинут вправо на на 2-3 символа относительно начала имени функции..
  3. При использовании команды if или функции case с числом условий, превышающих одно, следует else располагать под if или case, соответственно, каждое условие писать с новой строки сдвинутым вправо относительно if или case, и перед каждым условием ставить вертикальную черту.
  4. Закрывающие круглые скобки следует писать либо на той же строке, что и открывающие, либо одна под другой со сдвигом на 1 символ вправо. В последнем случае текст внутри скобок должен быть сдвинут вправо на 1-3 символа либо относительно начала открывающей скобки, либо относительно начала служебных слов или функций пользователя, к которым относятся скобки.
  5. При использовании команд и функций while…do, for…do, sum…for, integral…for и других, состоящих из двух или более служебных слов, следует второе слово располагать либо ровно под первым , либо сдвинутым вправо на 1-3 символа.

Пример:

f(x)=

case

(

| a>0 and b^2-4*a*c>0 => (-b+sqrt(b^2-4*a*c))/(2*a);

| a=0 and b<>0 => -c/b;

| a<0 => -1

)

else(0);

Другой рекомендуемый вариант форматирования:

f(x)=

case(

| a>0 and b^2-4*a*c>0 => (-b+sqrt(b^2-4*a*c))/(2*a);

| a=0 and b<>0 => -c/b;

| a<0 => -1

) else(0);

Если в исходном тексте программы-приложения среды была допущена синтаксическая ошибка, то при выполнении синтаксического анализа программы на экране появится диалоговое окно красного цвета с предположительной информацией о том, в каком месте и какая была допущена ошибка. Синтаксический разбор всегда происходит при выполнении команды Build главного меню среды разработки, а также при выполнении команд Debug и Run того же меню.

Внимание!

Местонахождение ошибки, указанное при диагностике, в сложных случаях может оказаться неверным. Поэтому в случае, если в указанном месте ошибки нет, следует проверить всю команду или функцию в целом.

    1. Диагностика ошибок исполнения.
    2. Во время работы приложения могут возникать ошибки исполнения, такие как деление на ноль, корень из отрицательного числа, ошибка ввода/вывода при файловых операциях, неверный символ при вводе в пункт ввода/вывода и т.п. В этом случае прерывается выполнение всей текущей последовательности команд, и на экран выводится сообщение об ошибке. Работа приложения среды BARSIC при этом не заканчивается: после нажатия <Enter> информация об ошибке убирается с экрана, и управление передается текущей экранной форме приложения. Так, если подобная ошибка произошла в команде, ассоциированной с какой-либо кнопкой , пунктом textField или другим элементом экранной формы, то после сообщения об ошибке на экране останется эта форма, и Вы сможете исправить ошибку ввода или перейти к работе с другими элементами формы. Например, записать результаты в файл. Это значит, что Вы не потеряете безвозвратно информацию, полученую в этом приложении до того, как произошла ошибка.

    3. Средства отладки программ

Для отладки программ-приложений в среде BARSIC существует заготовка отладчика команд – окно Debugger. После того, как набран исходный текст (или часть исходного текста) программы-приложения в окне Project source, можно воспользоваться отладчиком команд. Он вызывается из главного меню среды разработки, пункт Project, подпункт Debug. Для его работы необходимо, чтобы набранный в окне Project source текст не содержал синтаксических ошибок.

В окне Debugger вы можете выполнять отдельные команды приложения, а также вычислять численные и строковые выражения. Рассмотрим окно Debugger.

Справа от надписи Current module расположен выпадающий список, содержащий имена существующих в приложении модулей. Один из модулей является текущим (изначально это модуль main:), его имя показано на поверхности выпадающего списка. Чтобы увидеть весь список, нажмите левую кнопку мыши на сером прямоугольнике с черным треугольником (в правой части выпадающего списка). С помощью мыши вы можете выбрать любой модуль из этого списка и сделать его текущим (он останется на поверхности списка). Это может быть удобно при отладке команд, заданных в данном модуле.

Справа от надписи Execute расположено поле редактирования с выпадающим списком. В этом поле можно набрать произвольную команду или последовательность команд. Это может быть как команда, определенная в окне Project source, так и любая стандартная команда или вызов метода стандартного объекта. Чтобы ее выполнить, надо по окончании ввода нажать <Enter> или сделать двойное нажатие правой кнопки мыши на этом поле редактирования. Команда будет выполнена, а набранная в поле редактирования строка добавится в выпадающий список. Из выпадающего списка можно ‘вытащить на поверхность’ и выполнить любую команду, выполнявшуюся ранее. Если команда производит вывод графиков без указания подокна (т.е. содержит методы объекта graph, но не внутри метода graphOutput объекта класса Subwindow), то вывод будет происходить в черное подокно экранной формы отладчика. Это подокно ничем не отличается от любого подокна экранной формы приложения. В нем имеется такое же "всплывающее" меню, позволяющее работать с графиками и картинками. Если в команде есть вызов метода Command(...).numericResult() или метода Command(...).stringResult(), то внизу окна Debugger напротив надписи Result буден показан результат, возвращенный последним из вызванных таких методов.

Справа от надписи Calculate расположено поле редактирования с выпадающим списком, аналогичное полю Execute. В нем можно набрать произвольное численное или строковое выражение, которое будет вычислено при нажатии <Enter> или двойном нажатии левой кнопки мыши. При этом выражение добавится к выпадающему списку этого поля редактирования, а результат его вычисления будет показан в строке Result внизу окна Debugger.

В будущем планируется создание полноценного отладчика программного кода.

При работе в приложении или окне Debugger из среды разработки всегда можно вызвать списки функциональных элементов, имеющихся в данный момент в приложении. Для вызова этих окон из среды разработки до запуска программы на отладку следует выбрать пункт View главного меню среды разработки и далее – пункт Watches в подменю. В подменю следующего уровня вы увидите список типов функциональных элементов: Variables, Functions, Tabled functions, Commands, String variables и Arrays. Выбор какого-либо из этих пунктов приведет к открытию окна со списком функциональных элементов выбранного типа. Это окно состоит из двух частей: списка модулей приложения и списка функциональных элементов выбранного модуля. Функциональные элементы в списке представлены в том виде, в котором они могут быть заданы в окне Project source (за исключением табличных функций). Таким образом, в этом окне можно просматривать значения численных и строковых переменных. Можно одновременно открыть произвольное количество окон Watches. Например, можно открыть окно с численными переменными (Variables) и окно со строковыми переменными (String variables). В каждом окне Watches есть калькулятор, который представляет собой поле редактирования, аналогичное полю Calculate окна Debugger. Это позволяет, в частности, просматривать элементы массивов и табличных функций (путем вычисления выражений типа A[5] или B[10,3,8]). Эти окна сохранятся открытыми после запуска приложения на отладку.

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

Другой пункт "всплывающего" меню экранной формы, который может пригодиться при отладке, – пункт Exit. Выбор этого пункта приводит к выходу из приложения в среду разработки. Он может понадобиться, если вы не предусмотрели выхода из экранной формы и при этом убрали кнопку Close button из заголовка формы.

  1. Примеры создания программ-приложений среды BARSIC
    1. Создание простейшей программы в среде BARSIC

В этом разделе мы приводим подробную инструкцию, как создать простейшую программу-приложение среды BARSIC.

(Пример 1_Hello.brs можно загрузить из папки Examples\1.components\ в пункте меню File, подпункт Load project… ).

  1. Запустите программу Barsicw.exe. На экране появится интерфейс среды разработки. Он состоит из трех окон: главного окна, окна Project source и окна FormsList.

Рис.1 Интерфейс среды разработки

2. Щелкните правой кнопкой мыши на пункте “New form” в таблице “Forms of module” окна “Forms list”. В появившемся меню выберите пункт “Edit” (в данном случае – единственный доступный пункт этого меню). На экране появится вновь созданная экранная форма – главное окно вашей программы – и окно редактора экранных форм. Созданная экранная форма изначально занимает весь экран. Ей автоматически присваивается имя ‘form1’ – ее идентификатор.

3. Придайте вашей экранной форме желаемые размеры и положение на экране. Это можно сделать двумя способами: ввести координаты формы с клавиатуры, либо изменить размеры формы и ее положение с помощью мыши (обычным для окон Windows способом). Для ввода координат с клавиатуры щелкните мышью на поле ввода рядом с надписью “left” в редакторе экранных форм и введите координату левой стороны формы. Внимание! Независимо от разрешения монитора ширина экрана принимается равной 80-ти условным единицам, а его высота – 50-ти условным единицам. При этом координаты могут принимать вещественные значения. В следующем поле ввода (“top”) введите координату верхней стороны формы, далее введите ширину (“width”) и высоту (“height”) формы. Например, введите координаты left=30, top=20, width=20, height=10.

4. В поле ввода “title” редактора экранных форм ведите заголовок вашей формы. По умолчанию он был задан ‘form1’, как и имя формы.

5. Щелкните правой кнопкой мыши внутри вашей экранной формы. В появившемся меню выберите пункт “New” и далее пункт “textLabel” в подменю. На форме появится новый элемент – надпись (textLabel). Щелкните на нем левой кнопкой мыши – он станет выделенным, а в редакторе экранных форм появится информация об этом элементе: его название и значения его свойств (заголовок, координаты и др.). Переместите надпись на желаемое место и придайте желаемые размеры прямоугольнику, в котором она выводится. Это можно сделать так же, как в случае с экранной формой – мышью либо вводом координат с клавиатуры в редакторе экранных форм. Для перемещения прямоугольника – беритесь мышью за его внутреннюю часть, для изменения размеров – беритесь за черные квадратики в его углах и серединах сторон.

6. Щелкнув мышью на созданной надписи, введите в поле редактирования “text” строку ‘Hello, world!’. После этого при необходимости еще раз поправьте размеры прямоугольника, чтобы надпись в нем помещалась полностью.

7. Щелкните правой кнопкой мыши на свободном месте внутри вашей экранной формы. В появившемся меню выберите пункт “New” и далее пункт “Button” в подменю. На форме появится новый элемент – кнопка (button).

8. По аналогии с надписью переместите кнопку в желаемое место экранной формы и озаглавьте ее ‘OK’.

9. Щелкните на созданной кнопке мышью и введите в поле ввода “Command” редактора экранных форм команду, которая будет выполняться при нажатии на эту кнопку. В данном случае это команда, закрывающая форму – ‘form.close()’.

10. Экранная форма готова. Нажмите кнопку “OK” в редакторе экранных форм для выхода в основной интерфейс среды разработки.

11. В окне “Project source” набирается текст Вашей программы. Программа состоит из определений переменных, функций и команд. При этом среди команд обязательно должна быть команда с именем “onStart”, которая будет автоматически запускаться на исполнение при запуске вашей программы. В нашем случае программа состоит из единственной команды, которая активирует экранную форму “form1”. Поэтому в окне “Project source” следует набрать строку ‘onStart={Form(form1).activate()}’.

12. Выберите пункт “Project” основного меню окна заголовка среды и далее пункт “Build” в подменю. При этом будет произведена проверка Вашей программы на соответствие синтаксису языка BARSIC. При обнаружении ошибки будет выдана диагностика, и после нажатия клавиши <Enter> в меню диагностики текстовый курсор будет установлен в предполагаемое место ошибки в окне “Project source”.

13. Ваша первая программа-приложение BARSIC готова. Ее следует сохранить. Выберите пункт “File” основного меню окна заголовка среды и далее пункт “Save” в подменю. В появившемся меню директориев выберите (или создайте) папку, в которой вы желаете сохранить программу, наберите имя файла, например, ‘Hello’ и нажмите кнопку “Сохранить” или “Save”. В папке будет сохранено три файла – ‘Hello.brs’, ‘Hello.brf’ и ‘Hello.brc’. В файле ‘Hello.brs’ содержится текст, набранный в окне “Project source”. В файле ‘Hello.brf’ содержится информация об экранной форме. В скомпилированном файле ‘Hello.brc’ содержится ваша программа вместе с экранными формами во внутреннем представлении среды BARSIC. В дальнейшем для запуска программы на исполнение достаточно файла ‘Hello.brc’ (это аналог exe-файла, но работать он может только под управлением среды BARSIC). Для редактирования вашей программы необходимы оба файла (‘Hello.brs’ и ‘Hello.brc’).

14. Запустить на исполнение программу-приложение среды BARSIC можно двумя способами. Если она у вас загружена в виде проекта (или вы ее только что создали), выберите пункт “Project” основного меню окна заголовка среды и далее пункт “Run” в подменю. Другой способ: выберите пункт “File” основного меню окна заголовка среды и далее пункт “Run” в подменю. В меню директориев выберите файл программы-приложения, в данном случае – “Hello.brc”.

    1. Cоздание программы с выводом графика функции в подокно

( Пример 1a_graph.brs можно загрузить из папки Examples\ 3a.2Dplot\ ).

Чтобы проверить работу этой программы, откройте новый проект. Создайте экранную форму с именем form1 двойным щелчком на поле New form… в окне Forms. Создайте на форме подокно с именем subwin1, щелкнув правой клавишей мыши в любом месте формы и выбрав в появившемся меню New-> Subwindow. После этого аналогичным образом создайте на форме кнопку (New-> Button) и назначьте ее обработчику onClick команду show. Чтобы сделать это, щелкните по кнопке левой клавишей мыши. Кнопка станет выделена маленькими черными квадратиками, а в окне редактора форм станут доступны для установки свойства этой кнопки.

Для того, чтобы было удобно выходить из приложения, создайте еще одну кнопку и измените на ней надпись,. изменив значение ее свойства ‘text’ на “Выход”. Для того, чтобы при нажатии на эту кнопку форма приложения закрывалась, напишите в поле задания обработчика onClick оператор form.close().

Скопируйте приведенную ниже программу в окно Project source среды BARSIC и запустите на исполнение. По нажатию кнопки произойдет рисование графика в подокне. Можно обойтись и без создания экранной формы, просто запустив команду show в окне Debugger. Либо же загрузить уже имеющийся проект 1a_graph.brs из папки Examples.

Текст программы приведен ниже:

x=0;

onStart=

{Form(form1).activate()

};

show=

{Subwindow(subwin1).output

(plot.function(sin(x)/x)

for(x=-100..100,points=1000)

);

};

При редактировании экранной формы form1 возникает следующая картинка:

 

Рис. 2 Редактирование экранной формы примера построения графика функции

Команда show назначена кнопке, на которой написано “Нарисовать”. При нажатии этой кнопки во время работы приложения в подокне выведется график.

 

 

Приложение 1. Стандартные функции языка BARSIC

abs

acos

acot

arccos

arcctg

arcsin

arctg

asin

atan

case

ceil

ch

cos

cot

cth

ctg

eval

exp

floor

frac

integral

lg

ln

log

log10

max

min

pi

product

random

root

round

sh

sign

sin

square

sqrt

str

sum

tan

th

tg

trunc

Приложение 2. Стандартные команды языка BARSIC

act

break

copy

define

delete

do

doNotBreak

for

if

rename

try

while

Приложение 3. Стандартные классы языка BARSIC

Application

Array

ASCIIcode

Barsic

Byte

Char

Chars

Command

Float80

File

Folder

Form

Graph

Int8

Int16

Int32

Math

Module

Printer

String

System

Subwindow

TextTable

TabledFunction

Unsigned

Unsigned16

Unsigned32