
- •1. Двоичная система счисления.
- •2. Восьмеричная система счисления.
- •3. Шестнадцатеричная система счисления.
- •4. Сложение и вычитание в 2, 8 и 16 c/c.
- •2. Вещественные числа (числа с плавающей запятой).
- •3. Логические данные.
- •2. Зарезервированные слова.
- •X a8 alpha Massiv z52d9 eps Res_52_a ___75
- •6. Метка.
- •2. Целые типы данных.
- •4. Вещественные типы.
- •1. Раздел описания меток.
- •2. Раздел описания констант.
- •3. Раздел описания типов.
- •4. Раздел описания переменных.
- •6. Раздел операторов.
- •7. Последовательность разделов.
- •1. Формульно-словесный способ.
- •2. Блок-схемный способ.
- •Ввод - вывод одномерного массива
- •2. Ввод массива из текстового файла.
- •3. Вывод одномерного массива на экран.
- •Примеры обработки одномерных массивов
- •1. Параметр цикла должен быть ординального типа.
- •2. Параметр должен быть описан в том же блоке, где находится сам оператор цикла.
- •5. В теле цикла параметр не должен изменяться.
- •6. Начальное и конечное значения параметра цикла вычисляются только один раз, до начала цикла.
- •7. При нормальном завершении цикла значение его параметра считается неопределенным.
- •Контроль ординальных переменных
- •Вставка элемента в упорядоченный массив
- •Удаление элементов из массива
- •«Школьный» алгоритм сортировки
- •Группировка массива методом прямой выборки
- •Группировка массива методом прямого обмена
- •Var c : array[1..10,1..15,1..8] of real.
- •1. Ввод элементов матрицы с клавиатуры.
- •2. Ввод матрицы из текстового файла.
- •3. Вывод матрицы на экран.
- •Тождественные и совместимые типы
- •Обработка в процедуре одномерных массивов с различными именами типов
- •Обработка в процедуре матриц с различными именами типов
- •Var s : string[V],
- •Процедуры и функции для обработки строк
- •Определение битовой структуры поля памяти
- •Процедуры и функции для файлов любого типа
- •Var p : pointer;
- •1. Формирование стека из текстового файла.
- •7. Определение значения и местоположения максимального элемента в стеке.
- •8. Удаление из стека максимального элемента.
- •9. Добавление элемента в упорядоченный стек.
- •2. Добавление нового элемента в очередь.
- •3. Удаление элемента из очереди.
- •6. Удаление произвольного элемента из очереди.
- •7. Добавление нового элемента в произвольное место очереди.
- •1. Формирование дека.
- •Var sin : integer;
- •Процедура заполнения FillChar
- •Процедура перемещения данных move
- •Управление экраном в текстовом режиме
- •Сохранение и восстановление экрана
- •Interface
- •Implementation
- •Процедуры управления текстовым режимом экрана
- •Intr(n:byte; Var Reg:Registers),
- •If KeyPressed then
- •Автоматическая оптимизация программ
- •1. Свертывание констант.
- •2. Слияние констант.
- •3. Вычисление по короткой схеме.
- •4. Удаление неиспользуемого кода.
- •If false then
- •5. Эффективная компоновка.
- •Оверлейная структура программы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Использование сопроцессора
Var c : array[1..10,1..15,1..8] of real.
Компоненты многомерного массива располагаются в памяти таким образом, что наиболее быстро изменяется последний индекс, а наиболее медленно - первый индекс. По отношению к матрице это означает, что ее элементы располагаются в памяти по строкам: вначале все элементы первой строки в соответствии с описанием типа матрицы, затем все элементы второй строки и т.д.
Сравним расположение в памяти элементов одномерного массива и матрицы.
Const Mmax = 30; Nmax = 40;
Type Ar = array[1..Nmax] of byte;
Matrix = array[1..Mmax,1..Nmax] of byte;
Var X : Ar;
A : Matrix;
m, n : byte;
Предположим,
что в программе введено n
= 20 элементов массива X
и
элементов матрицы A
(
Mmax,
n
Nmax).
В
поле памяти, отведенном для массива X,
будут последовательно заняты первые
20 байт. В отличие от этого, поле памяти
A
будет заполнено не всплошную, а
фрагментарно элементами матрицы: 20
байтов первой строки, 20 свободных байтов,
20 байтов второй строки, 20 свободных
байтов, …, 20 байтов пятнадцатой строки,
20 + 540
свободных байтов. Эту фрагментарность
необходимо учитывать в ряде случаев
при программной обработке матрицы.
Если A и B - массивы одного типа, то возможно присваивание B := A . Это связано с общим принципом работы оператора присваивания вида y := x - пересылка содержимого поля x в поле y. Если массивы A и B описаны одним именем типа, то это гарантирует, что структура и длина полей A и B одинаковы, в связи с чем не может быть нарушений работы программы при такой пересылке.
Пусть многомерный массив имеет k индексов (для матрицы k = 2). При обработке такого массива в общем случае производится изменение каждого его индекса. В связи с этим каждому индексу должна соответствовать отдельная переменная, которая при использовании оператора For является именем параметра цикла. Имена переменных-индексов не должны совпадать между собой.
Обработка многомерных массивов выполняется путем использования вложенных циклов, когда тело внешнего цикла содержит в своем составе другой цикл, являющийся для него внутренним.
В В О Д И П Е Ч А Т Ь Э Л Е М Е Н Т О В М А Т Р И Ц Ы
1. Ввод элементов матрицы с клавиатуры.
Как известно, при выполнении процедуры Read(список-ввода) работа программы приостанавливается. С тем, чтобы пользователю было ясно, что от него требует программа, рекомендуется перед процедурой Read выводить на экран соответствующий запрос.
Const Mmax = 30; Nmax = 20;
Type Matrix = array[1..Mmax,1..Nmax] of real;
Var i,j,m,n : byte;
A : Matrix;
Begin
Writeln('Введите размеры матрицы m, n');
Read(m,n); Writeln('m= ',m,' n=',n);
For i:=1 to m do
For j:=1 to n do
Begin
Writeln('Введите элемент матрицы a[',i,',',j,']');
Read(a[i,j]);
End;
2. Ввод матрицы из текстового файла.
Ввод
матрицы по концу файла, как это было
сделано для одномерного массива,
выполнить нельзя, так как при этом
заранее неизвестно, сколько элементов
содержится в одной строке матрицы (одно
и то же общее количество элементов
матрицы
можно получить при различных значениях
и
).
Поэтому рекомендуется в первой строке
текстового файла разместить значения
и
,
а дальше - элементы матрицы. Количество
таких элементов в одной строке текстового
файла не лимитируется. Однако для
удобства просмотра файла целесообразно
каждую строку матрицы начинать с новой
строки файла.
Пример размещения матрицы в файле:
5 8
22.8 34.9 56 -95 -84.9 77.98 5.0 1.8
-12.8 45.8 47 76 66.7 89.58 4.4 -3.6
53.6 -14.3 92 48 38.3 44.96 -1.6 7.9
32.7 69.9 21 -21 -92.6 96.92 8.2 5.0
42.4 74.2 39 -45 14.1 17.11 -9.8 6.1
Const Mmax = 30; Nmax = 20;
Type Matrix = array[1..Mmax,1..Nmax] of real;
Var i,j,m,n : byte;
A : Matrix;
FileA : text;
Begin
Assign(FileA,'Matrix.dat');
Reset(FileA);
Read(FileA,m,n);
For i:=1 to m do
For j:=1 to n do
Read(FileA,a[i,j]);
Close(FileA);
Если
в файле Matrix.dat
содержится менее
элементов, то недостающим элементам
будет присвоено нулевое значение; в
противном случае часть данных из файла
не будет использована.