
- •Введение
- •Глава 1. Основные сведения о работе на персональном компьютере
- •1.1. Конфигурация персонального компьютера
- •Клавиатура
- •Системный блок
- •Монитор
- •1.2. Файловая система ms dos
- •Примеры записи имен файлов
- •1.3. Команды ms dos
- •Системные команды
- •Команды работы с каталогами
- •Команды работы с файлами
- •Команды работы с группой файлов
- •Команды работы с дисками
- •1.4. Инструментальная система nc
- •Основные приемы работы в nc
- •1.5. Контрольные вопросы и задание
- •Тема 1. Конфигурация пк. Клавиатура
- •Тема 2. Файловая система ms dos
- •Тема 3. Команды ms dos
- •Тема 4. Работа в среде nc
- •Глава 2. Работа в интегрированной среде Турбо Паскаль 7.0
- •2.1. Организация вычислений в среде Турбо Паскаль
- •2.2. Главное меню
- •Команда File
- •Команда Edit
- •Команда Search
- •Команда Run
- •Команда Compile
- •2.3. Работа с окнами
- •2.4. Текстовый редактор
- •2.5. Интегрированный отладчик
- •Глава 3. Простейшие конструкции языка Турбо Паскаль
- •3.1. Алфавит языка
- •3.2. Константы и переменные
- •Пример раздела описания переменных
- •3.3. Арифметические выражения
- •Стандартные функции
- •Возведение в степень
- •Примеры программирования арифметических выражений
- •3.4. Контрольные задания
- •1. Составить раздел описания для заданных переменных
- •2. Записать на языке Турбо Паскаль числовые константы
- •3. Записать на языке Турбо Паскаль арифметические выражения
- •4. Записать в виде алгебраической формулы
- •Глава 4. Линейные вычислительные процессы
- •4.1. Оператор присваивания
- •Примеры использования оператора присваивания
- •4.2. Операторы ввода-вывода
- •Операторы ввода исходных данных с клавиатуры
- •Операторы вывода данных на экран
- •4.3. Структура основной программы
- •Общий вид основной программы
- •Пример линейной программы
- •4.4. Контрольные задания
- •1. Записать на языке Турбо Паскаль операторы присваивания
- •Глава 5. Разветвляющиеся вычислительные процессы
- •5.1. Логические выражения
- •Отношения
- •Примеры записи отношений на языке Турбо Паскаль
- •Логические операции
- •Порядок выполнения операций в логических выражениях
- •1. Not. 2. And. 3. Or. 4. Отношения.
- •Примеры записи логических выражений
- •5.2. Условные операторы
- •Короткий условный оператор
- •Полный условный оператор
- •Вложенные структуры условных операторов
- •5.3. Оператор выбора
- •5.4. Контрольные задания
- •1. Записать на языке Турбо Паскаль логические выражения
- •2. Записать на языке Турбо Паскаль логические выражения, принимающие значение true для точек, принадлежащих заштрихованной области (рис. 5.1).
- •3. Начертить на плоскости область, в которой логическое выражение имеет значение true
- •Глава 6. Циклические вычислительные процессы
- •6.1. Операторы цикла с условием
- •Оператор цикла while
- •Оператор цикла repeat…until
- •Основные отличия оператора цикла while от оператора цикла repeat…until
- •6.2. Операторы цикла с параметром
- •Правила использования операторов цикла с параметром
- •6.3. Базовые алгоритмы
- •6.4. Кратные циклы
- •Глава 7. Массивы
- •7.1. Понятие массива
- •7.2. Одномерные массивы
- •Описание одномерного массива
- •Индексные переменные
- •X[I] – индексная переменная (элемент массива).
- •Ввод-вывод одномерных массивов
- •Обработка одномерных массивов
- •7.3. Двухмерные массивы
- •Описание двухмерного массива
- •Ввод-вывод двухмерного массива
- •Обработка матриц
- •Глава 8. Подпрограммы
- •8.1. Структура сложной программы
- •8.2. Процедуры
- •Общий вид описания процедуры
- •Обращение к процедуре
- •Глобальные и локальные переменные
- •Пример программы с процедурой
- •Согласование параметров
- •Механизм замены параметров
- •8.3. Функции
- •Общий вид описания функции
- •Обращение к функции
- •Пример программы с функцией
- •8.4. Параметры-массивы
- •8.5. Примеры программирования задач с использованием подпрограмм
- •Задача 1
- •Задача 2
- •Задача 3
- •Задача 4
- •Глава 9. Текстовые данные
- •9.1. Символьный тип данных
- •Ввод-вывод символьных данных
- •Обработка символьных данных
- •9.2. Строковый тип данных
- •Ввод-вывод строковых данных
- •Обработка строковых данных
- •Пример программирования текстовой задачи
- •9.3. Контрольное задание
- •Глава 10. Записи и файлы данных
- •10.1. Понятие записи
- •10.2. Файлы данных
- •Способы объявления файлов данных
- •Доступ к файлам данных
- •Инициация файла
- •Стандарные функции и процедуры обработки текстовых файлов
- •Пример программирования задачи с использованием файлов данных
- •10.3. Пример решения задачи создания документа
- •4 5 5 Андреева с.В.
- •10.4. Контрольное задание
- •Заключение
- •Библиографический список
- •Приложение 1. Сообщения об ошибках
- •Приложение 2. Таблица альтернативной кодировки символов
7.3. Двухмерные массивы
Двухмерные массивы в математике представляются матрицей:
,
или сокращенно можно записать:
,
где m – число строк;
n – число столбцов;
i, j
– индексы (номера) текущих строки и
столбца, на пересечении которых находится
элемент aij.
Описание двухмерного массива
Описание матрицы в разделе Var задается структурным типом вида:
<имя>: array [m1..m2, n1..n2] of <тип элементов>;
m1..m2 – диапазон значений индекса i, определяющий число строк;
n1..n2 – диапазон значений индекса j, определяющий число столбцов.
По описанию матрицы во внутренней памяти компьютера выделяется область из mn последовательных ячеек, в которые при работе программы записываются значения элементов матрицы. Например, по описанию:
Var
A: array [1..3, 1..5] of real;
в памяти компьютера для элементов матрицы выделяется область, состоящая из 35=15 последовательных ячеек вещественного типа. Из описания видно, что матрица состоит из трех строк и пяти столбцов.
Обращение к отдельным элементам матрицы осуществляется с помощью переменной с двумя индексами, например:
a[i, j]aij;
a[2, 3]a23;
a[2n, k+1]a2n, k+1.
Ввод-вывод двухмерного массива
Для поэлементного ввода и вывода матрицы используется двойной цикл for…to. Если задать индекс i как параметр внешнего цикла, а индекс j как параметр внутреннего цикла, то ввод-вывод матрицы осуществляется построчно.
Пример 1. Организовать ввод целочисленной матрицы M по строкам.
.
Описание матрицы вместе с текущими индексами имеет вид:
Var
M: array [1..2, 1..3] of integer;
i, j: integer;
Ввод в программе реализуется в форме диалога, т.е. сопровождается поясняющим сообщением:
writeln(‘Введите матрицу М’);
for i := 1 to 2 do
for j := 1 to 3 do read(m[i, j]);
На клавиатуре желательно для наглядности восприятия набирать элементы матрицы по строкам, отделяя числа друг от друга одним или несколькими пробелами:
1 2 3 [Enter]
4 5 6 [Enter]
Пример 2. Организовать вывод матрицы M на экран.
Вывод матрицы необходимо реализовать в удобном для чтения виде, т.е. чтобы на одной строке экрана располагалась одна строка матрицы. С этой целью в тело внешнего цикла, помимо внутреннего, включается оператор writeln, который переводит курсор к началу следующей строки экрана после вывода текущей строки матрицы.
for i := 1 to 2 do
begin
for j := 1 to 3 do write(m[i, j]:3);
writeln;
end;
Вывод матрицы на экран будет следующим:
1 2 3
4 5 6
Обработка матриц
Базовыми алгоритмами обработки матриц являются те же алгоритмы, которые используются при обработке одномерных массивов. Однако реализацию этих алгоритмов можно условно рассматривать для двух типов задач.
Алгоритмы реализуются при просмотре всех элементов матрицы (просмотр может быть с условием). Начальная установка алгоритма выполняется перед двойным циклом. В этом случае запись операторов цикла для параметров i и j осуществляется последовательно друг за другом и имеет вид:
<начальная установка>;
for i := 1 to m do
for j := 1 to n do <тело цикла>;
Алгоритмы реализуются внутри каждой строки или каждого столбца матрицы. В этом случае начальная установка алгоритма выполняется между операторами цикла, записанными для параметров i и j. Например, если алгоритм реализуется для каждой строки, то запись в программе имеет следующий вид:
for i := 1 to m do
begin
<начальная установка>;
for j := 1 to n do <тело цикла>;
end;
Ниже рассмотрены примеры программирования задач каждого типа.
Реализация алгоритмов задач первого типа
Задача 1. Дана матрица
вещественных чисел
.
Вычислить значение
,
где P1 и P2 – произведения
положительных и
отрицательных элементов матрицы
соответственно.
Program DМ1_1;
Var
A: array [1..4, 1..6] of real;
i, j: integer;
P1, P2, Z: real;
Begin
writeln(‘Введите матрицу А’);
for i := 1 to 4 do
for j := 1 to 6 do read(a[i,j]);
P1 := 1;
P2 := 1;
for i := 1 to 4 do
for j :=1 to 6 do
begin
if a[i,j]>0 then P1 := P1a[i,j];
if a[i,j]<0 then P2 := P2a[i,j];
end;
Z := P1/abs(P2);
writeln(‘Z=’, Z:10:2);
End.
Задача 2. В квадратной
целочисленной матрице
вычислить модуль разности между числом
нулевых элементов, стоящих ниже главной
диагонали, и числом нулевых элементов,
стоящих выше главной диагонали.
Введем обозначения:
L1 – число нулевых элементов ниже главной диагонали;
L2 – число нулевых элементов выше главной диагонали;
L = |L1 – L2|.
Program DМ1_2;
Var
B: array [1..5, 1..5] of integer;
i, j, L1, L2, L: integer;
Begin
writeln(‘Введите матрицу B’);
for i := 1 to 5 do
for j := 1 to 5 do read(b[i,j]);
L1 := 0;
L2 := 0;
for i := 1 to 5 do
for j := 1 to 5 do
if b[i,j]=0 then
begin
if i>j then L1 := L1+1;
if i<j then L2 := L2 +1;
end;
L := abs(L1 – L2);
writeln(‘L=’, L);
End.
Реализация алгоритмов задач второго типа
Задача 1. В матрице
вещественных чисел первый элемент
каждой строки
поменять местами с минимальным элементом
этой строки. Вывести матрицу
Х после
обмена.
Program DМ2_1;
Var
X: array [1..3, 1..6] of real;
i, j, jmin: integer;
min: real;
Begin
writeln(‘Введите матрицу X’);
for i:= 1 to 3 do
for j := 1 to 6 do read(x[i,j]);
for i:=1 to 3 do
begin
min:=+1E6;
for j:=1 to 6 do
if x[i,j]<min then
begin
min:=x[i,j];
jmin:=j;
end;
x[i,jmin]:=x[i,1];
x[i,1]:=min;
end;
for i:=1 to 3 do
begin
for j:=1 to 6 do write(x[i,j]:6:1);
writeln;
end;
End.
Задача 2. Дана матрица
вещественных чисел
.
Вычислить среднее арифметическое
каждого столбца. Результат оформить в
виде одномерного массива
.
Program DМ2_2a;
Var
C: array [1..8, 1..4] of real;
S: array [1..4] of real;
i, j: integer;
Begin
writeln(‘Введите матрицу C’);
for i := 1 to 8 do
for j := 1 to 4 do read(c[i,j]);
for j := 1 to 4 do
begin
s[j] := 0;
for i := 1 to 8 do s[j]:= s[j] + c[i,j];
s[j] := s[j]/8;
end;
for j := 1 to 4 do write(s[j]:8:2);
writeln;
End.
В приведенной выше программе для вычисления каждого элемента s[j] организован двойной цикл, в котором индекс j является внешним параметром цикла, а индекс i – внутренним. Приведем вариант программы без использования одномерного массива S.
Program DМ2_2b;
Var
C: array [1..8, 1..4] of real;
S: real;
i, j: integer;
Begin
writeln(‘Введите матрицу C’);
for i := 1 to 8 do
for j := 1 to 4 do read(c[i,j]);
for j := 1 to 4 do
begin
S := 0;
for i := 1 to 8 do S:= S + c[i,j];
S := S/8;
writeln(‘Среднее арифметическое ’, j,
‘-го столбца равно’, S:8:2):
end;
End.