ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.04.2024
Просмотров: 4544
Скачиваний: 0
СОДЕРЖАНИЕ
2.1. Файловая структура, файлы, папки
2.2. Работа с программой Проводник
2.2.1. Навигация по файловой структуре
2.2.2. Запуск программ и открытие документов
2.2.4. Копирование и перемещение файлов и папок
2.2.5. Удаление файлов и папок
2.2.6. Создание ярлыков файлов, представление объектов
2.2. Содержимое стандартного набора вкладок
2.3. Ввод, редактирование, форматирование и рецензирование текста
2.4. Основы работы с таблицами
2.6. Сохранение и печать созданного документа
Основы работы с пакетом Microsoft Excel
2.2 Создание электронных таблиц пакетом Microsoft Excel
Ввод, редактирование и форматирование данных
Вычисления в электронных таблицах
Использование стандартных функций
Построение диаграмм и графиков
2.3 Сохранение и печать созданной книги
2.2. Основные этапы составления программы
2.3. Оформление окна программы (размещение компонентов на форме)
2.4. Назначение и основные свойства некоторых компонентов
Компонент Memo (Многострочный текстовый редактор)
Компонент ComboBox (Блок с комбинированным раскрывающимся списком)
2.2. Создание заготовок процедур-обработчиков событий. Текст модуля программы
2.2. Оформление окна программы
2.3. Изменение свойств компонентов. Получение заготовки процедуры
2.4. Программирование вычислений определенных интегралов
2.1.2. Сложение и вычитание матриц
2.1.3. Умножение матрицы на число
2.1.5. Транспонирование матрицы
2.1.6. Линейные преобразования
2.2 Массивы и переменные с индексами
2.3. Составление программ реализующих основные матричные операции
Оформление эскиза окна программы
2.1.6. Линейные преобразования
Аппарат матриц позволяет более просто представлять различные математические операции над элементами матриц. В частности, систему линейных алгебраических уравнений:
a11x1+a12x2+…+a1nxn=b1
a21x1+a22x2+…+a2nxn=b2… (7.7)
am1x1+am2x2+…+amnxn=b3
можно записать одним матричным равенством:
a11 |
a12 |
… |
a1n |
a21 |
a22 |
… |
a2n |
… |
… |
… |
… |
am1 |
am2 |
… |
amn |
x1 |
x2 |
… |
xm |
b1 |
b2 |
… |
bm |
* =
A * x = b
Более кратко матричное равенство можно записать
A*x=b. (7.8)
Систему линейных алгебраических уравнений (7.7) обычно рассматривают как линейное преобразование совокупности величин (x1,x2, … , xm) в совокупность (b1,b2,…,bm). Это преобразование полностью определяется коэффициентами aij(i=1,2, …, m; j=1,2, …,n) матрицы А. На языке матриц линейное преобразование b=A*x означает преобразование столбца x в столбец b, которое определяется матрицей преобразования А.
Если величины x1,x2, …, xm получаются из некоторой совокупности величин z1,z2 ,…, zm, посредствам линейного преобразования x=B*z, где x и z –столбцы соответствующих величин, а В - матрица их преобразования, то формальной подстановкой x в матричное уравнение (8) получаем:
B=A*x=A*(B*z)=(A*B)*z=C*z,
где С=А*В – матрица преобразования величины z в b.
2.2 Массивы и переменные с индексами
В языке Object Pascal для хранения и обработки упорядоченных совокупностей данных различной природы (различных типов, в частности, векторов и матриц, элементами которых являются вещественные или целые числа) введено понятие массив.
Массив – это упорядоченная совокупность однотипных данных, которая характеризуется:
- своими именами;
- типом хранимых данных;
- нумерацией элементов;
- размером (числом хранимых элементов);
- размерностью.
В программе на языке Object Pascal (в дальнейшем просто в программе) каждый массив должен быть описан (объявлен) в разделе описания типов (после ключевого слова type(тип)) или в разделе описания переменных (после ключевого слова var).Описания записываются перед началом записи исполняемых операторов модуля.
Под типом в Object Pascal понимают множество допустимых значений, которые может иметь каждый элемент массива, множество допустимых операций для массива и формат внутреннего представления каждого элемента массива в памяти ПК.
Для компилятора описание типа массив определяет:
- объём памяти, который необходимо выделить для размещения всех элементов массива;
- набор допустимых операций, который программист может применять для элементов массива.
Каждое описание массива заканчивается символом “;” и иногда называется неисполняемым оператором (т.е. только представляющем информацию компилятору о массиве) или строкой программы.
Например,
- если необходимо описать вектор x(x1,x2 …,x20), элементами которого являются целые числа, следует после слова var записать:
…
var
x: array [1..20] of integer; (7.9)
…
- если необходимо описать две матрицы A={aij}, B={aij} (i=1,2, … 13; j=1,2, …, 21), элементами которых являются вещественные числа, то следует записать:
…
var
a,b: array [1..13, 1..21] of real; (7.10)
…
Как следует из примеров, описаниeмассива начинается с записи имени (или нескольких имён, перечисленных через”,”), после которого через символ “:” записывается ключевое словоarray( массив). За словомarrayв квадратных скобках указывается диапазон, т. е. нижняя и верхняя границы изменения индекса,разделённых символов.. , с помощью которых компилятор определяет общее количество элементов массива. Запись <Нижняя граница>.. <Верхняя граница> образует тип-диапазон. Если массив двумерный (т. е. матрица), то тип-диапазон второго индекса записывается через , . За словомof( из) указывается тип элементов, образующих массив.
Трёхмерный массив (совокупность “плоских” матриц), элементами которого имеют строковый тип, можно описать:
…
var
massiv: array [1..20, 1..30, 1..7] of string;
…
В общем случае описание массивов задастся следующим образом:
…
var
<Список имён>: array[<Список типа-диапазон>]of<Тип>;
где: <Тип> – любой тип ObjectPascal.
В памяти ПК элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс.
Иногда описания массивов производят в такой последовательности: в разделе type(тип) указывают имя типа, диапазоны изменения индексов и тип элементов массива, а затем в разделеvarуказывают конкретные имена массивов (переменных, имеющих тип массив).
Например, описание массивов в примерах (9), (10) можно выполнить следующим образом:
…
type
vector = array [1..20] of integer;
matr = array [1...13, 1...21] of real;
var
x: vector;
a,b:matr;
…
Доступ к элементам массива осуществляется по индексу (номеру). Этот индекс указывается в квадратных скобках сразу за именем массива (такое действие называется индексированием). Запись:
<Имя массива> [<Список индексов>]
называется переменной с индексом, где <Список индексов> – один или несколько индексов, перечисленных через ”,”.
Переменная с индексами именует значение, являющееся одним элементом массива. Элемент массива, именуемый данной переменной с индексами, определяется текущими значениями индексов этой переменной. Каждый индекс по своему смыслу принимает целочисленное значение, т.е в простейшем случае может иметь тип integer(целый).
Примеры:
1. Значением переменной а [2,3] является элемент матрицы а23;
2. Значение переменной а[i,j] определяется текущими значениями i и j;
3. Для получения вещественной матрицы В={bij} (i,j=1,2,…7) каждый элемент, который равен 0 необходимо:
- в разделе описания переменных дать описание двухмерного массива с именем b и двух переменных целого типа i,j:
…
var
b: array [1..7,1..7] of real;
i,j: integer;
…
- в разделе реализации (после ключевого слова implementation (реализация)) в нужном месте записать операторы цикла, в которых оператором присваивания каждому элементу массива b присваивается значение 0.0:
…
for i:=1 to 7 do
for j:=1 to 7 do
b[i,j]:=0.0;
…
В Object Pascal введены динамические массивы - это массивы у которых нижняя граница индексов по любому измерению равна 0, а верхняя граница (следовательно и объем памяти ПК для размещения всех элементов массива) устанавливается при выполнении программы с помощью стандартной процедуры SetLength (установить длину).
Динамические массивы обычно применяются когда, размер обрабатываемых массивов неизвестен и определяется при выполнении программы в зависимости от действий пользователя или объема обрабатываемой информации.
Описание (объявление) массива содержит только его имя и тип элементов, при этом компилятором не выделяется память для элементов массива.
Например;
-описание вещественного вектора а(а1,а2,…аn) может выглядеть так:
…
var
a:array of real;
…
- описание вещественных матриц B={bij} и C={cij}(i=1,2,…m; j=1,2,…n)
может выглядеть:
…
var
b, c: array of array of real;
…
Это описание в переводе можно читать так: b и с – это массивы из массивов, элементами которых является вещественный тип.
Для выделения компилятором памяти для элементов динамических массивов следует вызвать стандартную подпрограмму SetLength операторами:
SetLength(а,10);
которая выделит для массива a место в памяти под 10 элементов и задаст нулевые значения всех элементов;
SetLength(b,7,8);
которая выделит для массива b место в памяти под 7*8=56 элементов и задаёт нулевые значения всех элементов;
SetLength(с,10,5);
которая выделит для массива с место в памяти под 10*5=50 элементов и задаст нулевые значения всех элементов;
Поскольку индексы динамического массива – всегда целые числа, начинающиеся с 0, то:
массив а содержит элементы от а[0] до а[9];
массив b содержит 7 строк с нумерацией от 0 до 6 и 8 столбцов с нумерацией от 0 до 7;
массив с содержит 10 строк с нумерацией от 0 до 9 и 5 столбцов с нумерацией от 0 до 4.
Доступ к элементам динамических массивов осуществляется так же, как и для статических массивов. Например,
Значением переменной а[0] является первый элемент а1, значением а[9] – последний элемент а10 вектора a.
Значением переменной b[3,6] является элемент матрицы В, находящийся на пересечении 4-ой строки и 7-го столбца, т.е. b47.
Значением переменной c[3,2] является элемент c43.
Повторный вызов SetLength к уже существующему в памяти массиву изменяет его размер. Если новое значение верхней границы больше предыдущего, то все значения элементов сохраняются и в конце добавляются новые нулевые элементы. Если же новое значение верхней границы меньше предыдущего, то массив усекается и в нем остаются значения первых элементов.
Удалить из памяти динамический массив можно одним из 3-х способов:
-оператором присваивания:
…
a:=nil;
...
т.е. массиву а присвоить значение nil(ничего);
-вызвать стандартную процедуру Finalize оператором
…
Finalize(a);
…
-вызвать стандартную процедуру SetLength оператором
…
SetLength(a,0);
…