Программирование на языке «Ядро»: Руководство пользователя, страница 2

Рисунок 4. Таблица описанных имен

В этой таблице находятся имена переменных, описанных пользователем и доступных в текущий момент, с указанием их типа, размерности и длины. В приведенном примере переменная S описана как скалярная, но в языке «Ядро» скаляры отождествляются с одномерными массивами длины 1, поэтому в таблице имён указана размерность 1 и длина 1.

При нажатии кнопки «Все описания» выводится полная таблица имен, в которой вместе с именами описанных переменных содержатся предопределенные имена переменных, функций и операторов.

Комментарии в программе на «Ядре» могут быть двух типов: в фигурных скобках { комментарий } и в скобках со звёздочками (* комментарий *). Первый тип комментариев полностью игнорируется интерпретатором, благодаря чему такие комментарии могут помещаться в любое место программы, в том числе – внутри имен переменных. Второй тип комментария равносилен пробелу. Приведем пример использования комментариев:

real {абсцисса}X{ордината}Y{аппликата}Z[10,3]; (*в этом массиве будут координаты узлов разностной сетки*) XYZ:=0;

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

Отдельные фрагменты программы бывает удобно вводить в отдельном окне или из отдельного текстового файла. Основным средством создания такой разветвленной структуры программы является операция reply, результат которой – организация ввода из нового окна. При этом все переменные, описанные в вызывающем фрагменте программы, доступны и из вызываемого фрагмента.

 

 

Рисунок 5. Пример ввода программы из двух окон

В примере на рисунке 5 в главном окне (заголовок 1) введен оператор reply. Выполняя этот оператор, интерпретатор открыл второе окно (с заголовком 2). Пользователь во втором окне описал целую переменную i и присвоил ей значение, равное длине переменной S из первого окна. Нажатие кнопки «Описания» во втором окне приводит к выводу таблицы имён в окне «Описанные имена»: целой переменной i и строковой переменной S. Обе эти переменные доступны во втором окне.

Для возврата в первое окно пользователь должен вначале закрыть второе окно (кнопкой «Закрыть»). После этого переменная i станет недоступной и будет удалена из памяти.

Часто необходимо, чтобы переменные, описанные в вызываемом фрагменте, оставались доступными в вызывающем окне. Для этого вместо операции reply надо использовать операцию insert. Тогда переменные, описанные в новом окне, помещаются в таблицу имён старого окна и не удаляются из памяти, пока открыто первое (вызывающее) окно.

Из приведенных примеров видно, что интерпретатор может одновременно работать с несколькими окнами ввода. Активно из них в каждый момент времени только одно – то, которое было открыто последним. При закрытии активного окна становится активным то, из которого оно было открыто. Значения переменных могут быть выведены в отдельное окно вывода операцией dsply; описанные имена могут быть показаны в отдельном окне имён нажатием кнопки «Описания» или «Все описания».

Заметим, что в случае, когда интерпретатор «Ядро» встраивается в прикладную программу, он может снабжаться и окнами других видов.

1.2. Текстовые файлы, ввод и вывод значений

1.2.1. Вывод значений в текстовые файлы

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

S dsply;

записать оператор:

S dsply ‘file.txt’;

то в результате его выполнения в текущем директории будет создан файл file.txt, и значение переменной S будет записано в этот файл. Если файл с таким именем уже существует, то запись будет сделана в конец этого файла, последней строкой.

Арифметические переменные выводятся в файл или в окно вывода в текстовом формате, пригодном для ввода большинством стандартных программ. Дробная часть отделяется от целой десятичной точкой (не запятой!), независимо от установок операционной системы. Числа с плавающей точкой выводятся с использованием символа E в качестве разделителя порядка.

Логические значения выводятся в виде строкового представления (true или false). Строковые значения выводятся без дополнительных кавычек.

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

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

1)  каждую строку выводить отдельной операцией, например, в цикле;

2)  заранее вставить в последовательность вывода символы перевода строки.

Первый способ представляется более естественным. Второй способ можно рекомендовать программистам, имеющим опыт работы на С++. Примеры вывода с разделением на строки приведены в п. 1.3.1.

1.2.2. Ввод значений из текстовых файлов

Ввод значений переменных обычно не может быть выполнен операцией reply, потому что знак «минус» перед отрицательными значениями интерпретатор не может отличить от знака вычитания. Поэтому для ввода значений из текстового файла необходимо использовать другую операцию – input. Эта операция является префиксной; её аргумент – строковая константа или переменная, содержащая имя вводного файла. Если имя пустое, ввод производится из нового окна. В результате выполнения операции input получается последовательность значений, которая может быть присвоена переменным.

Приведем пример ввода значений из файла. Пусть в файлу Ipt.txt содержатся данные, показанные на рисунке 6 слева. Фрагмент программы на языке «Ядро» в центре этого рисунка вводит данные и помещает их в массивы S и XYZ, а затем выводит в окно вывода. Результат показан на рисунке 6 справа.