Элементами неоднородного массива могут быть скаляры числового или строкового типов, либо другие (в том числе и неоднородные) массивы в любой комбинации.
Внешний файл данных, представляющий неоднородный массив, должен содержать специальную строку описания структуры массива (или несколько таких строк). Такая строка всегда начинающаяся с символа точка, после которой следует служебное слово MATRIX(написанное заглавными буквами), а далеев этой строке должны быть заданы 4 параметра (целочисленных константы), разделенные пробелами:
· Первый параметр – порядковый номер элемента массива, содержащего другой массив. Если все элементы массива, описываемого данной строкой, являются скалярами, первый параметр должен быть равным нулю.
· Второй параметр должен быть равным единице, если хотя бы один элемент массива, описываемого данной строкой, является комплексным числом. В остальных случаях второй параметр должен быть равен нулю.
· Последние два параметра задают размерность массива (количество строк и столбцов), описываемого данной строкой.
Непосредственно после строки описания структуры массива следует строка данных, представляющая собственно массив. Элементами строки данных являются элементы отображаемого массива, расположенные в порядке возрастания номеров строк и столбцов. Заметим, что пара управляющих символов с кодами 0Dh, 0Ah, если она присутствует в строке данных, интерпретируется, как обычный разделитель между элементами этой строки, а не как разделитель строк массива.
Преобразование реальной структуры массива, отображаемого в документе MathCAD, в "линейную" структуру строки данных файла, производится по следующему алгоритму:
1 Если массив не содержит элементов, представляющих комплексные числа или другие массивы, то первые два параметра строки описания структуры получают нулевые значения, 3-й и 4-й параметры – соответственно число строк и столбцов массива, а каждый элемент массива "копируется" в соответствующий элемент строки данных. При этом номер k элемента строки вычисляется по индексу (i,j) соответствующего элемента массива по простой зависимости: k = i×m+j, где m – число столбцов массива. Из сказанного, в частности, следует, что такой подход применим и для файлового отображения однородных числовых массивов, описанных в разделе 4.2.2.
2 Если среди элементов массива хотя бы один элемент представляет комплексное число, то второй параметр строки описания структуры получает единичное значение, а каждый числовой элемент массива представляется в строке данных парой чисел, разделенных запятой: первое обозначает вещественную, а второе – мнимую части соответствующего комплексного числа.
3 Если в файл отображается многомерный массив, то каждый элемент этого (главного) массива, содержащий другой (подчиненный) массив, представляется в строке данных четверкой параметров структуры этого подчиненного массива, заключенной в фигурные скобки. При этом:
· первый параметр определяет порядковый номер такого элемента (последовательно нумеруются все элементы главного и всех подчиненных массивов всех уровней, содержащие другие массивы);
· остальные параметры определяют структуру подчиненного массива, как это описано выше в пунктах 1 и 2;
· для каждого из подчиненных массивов формируется своя строка описания структуры, в которой после служебного слова MATRIX записывается четверка параметров (копируемая из соответствующего элемента строки данных родительского массива), и своя строка данных, соответствующая строке описания структуры этого массива и записываемая непосредственно после нее.
Примеры файлового представления неоднородных массивов приведены на рисунке 15.
Рисунок 15 – Файловое представление неоднородных массивов
В примере а) создан вектор S, не являющийся однородным, так как его нулевой элемент имеет строковый тип данных, а остальные – числовой. Файл Sample6.txt, представляющий этот массив, включает строку описания структуры массива. Параметры этой строки определяют массив из шести строк и одного столбца, элементы которого являются скалярами и не содержат комплексных чисел.
Массив К из примера б) содержит элементы строкового и числового типов, причем среди числовых элементов присутствуют как вещественные, так и комплексные. В строке описания структуры файла Sample7.txt, связанного с этим массивом, второй параметр равен единице, а в строке данных все числовые элементы представлены парами числовых значений (для вещественных чисел мнимая часть равна нулю).
В примере в) показан четырехмерный массив Z (матрица [3´2], каждый элемент которой содержит матрицу [2´3]) и соответствующий ему файл Sample8.txt, включающий 7 строк описания структуры и 7 строк данных.