
- •Учебно-методическое пособие
- •Маршрутная карта изучения дисциплины по Модулю 1
- •1. Логические и арифметические основы эвм
- •1.1. Десятичная система счисления
- •1.2. Двоичная система счисления
- •1.3. Восьмеричная и шестнадцатеричная системы счисления
- •1.4. Перевод чисел из любой системы счисления в десятичную
- •1.5. Перевод чисел из десятичной системы счисления в любую другую
- •Вопросы для самоконтроля
- •Методические указания для выполнения практического задания №1. «Системы счисления»
- •Приложение 1. Таблица вариантов заданий
- •2. Алгебра логики
- •2.1. Логические операции
- •Импликация
- •Антиконъюнкция
- •Антидизъюнкция
- •Логические схемы
- •Пример решение логических задач средствами алгебры логики
- •Методические указания для выполнения практического задания №2. «Алгебра логики». Построение таблиц истинности.
- •Пример построения логических схем
- •Методические указания для выполнения практического задания №3. «Алгебра логики». Построение логических схем
- •Приложение 2. Таблица вариантов заданий
- •4. Индивидуальное задание. Модуль 1. «Построение логических схем по заданным булевым выражениям»
- •Приложение 3. Таблица вариантов индивидуального задания
- •Приложение 4. Титульный лист идз
- •Маршрутная карта изучения дисциплины по Модулю 2
- •5. Введение в алгоритмизацию
- •6. Знакомство со средой Турбо Паскаль
- •6.1. Общие сведения
- •6.2. Запуск Турбо-Паскаля на выполнение
- •6.3. Назначение функциональных клавиш системы Турбо-Паскаль
- •6.4. Работа с текстовым редактором Турбо-Паскаля
- •Клавиши перемещения курсора
- •Работа с блоками текста
- •7. Основы алгоритмизации
- •7.1. Алгоритм
- •7.2. Алгоритмические структуры
- •Самоконтроль
- •8. Программирование на языке Pascal
- •8.3. Типы данных
- •Целые типы
- •Логический тип
- •8.5. Структура программы на языке Паскаль
- •8.6. Описательная часть программы
- •8.10. Комментарии в программе
- •Пример программы линейной структуры
- •Вопросы для самоконтроля
- •8.11. Методические указания для выполнения практического задания №4. «Следования»
- •Приложение 5. Таблица вариантов заданий
- •9. Ветвления
- •9.1. Операторы условия и перехода
- •Логический оператор
- •Операции отношения
- •Логические операции
- •9.2. Оператор выбора
- •Пример программы разветвленной структуры
- •Вопросы для самоконтроля
- •9.3. Методические указания для выполнения практического задания №5. «Ветвления»
- •Приложение 6. Таблица вариантов заданий
- •10. Циклические вычислительные процессы
- •10.1. Оператор цикла с параметром
- •10.2. Оператор цикла с постусловием
- •10.3. Оператор цикла с предусловием
- •10.4. Вложенные циклы
- •10.5. Оператор прерывания цикла
- •Пример программы циклической структуры
- •Вопросы для самоконтроля
- •10.6. Методические указания для выполнения практического задания №6. «Циклы»
- •Приложение 7. Таблица вариантов заданий
- •11. Операции с индексированными переменными
- •11.1. Массивы одномерные
- •11.2. Описание массивов
- •Ввод элементов массива
- •Вывод элементов массива
- •11.3. Обработка одномерных массивов
- •Пример программы обработки одномерного массива
- •Вопросы для самоконтроля
- •11.4. Методические указания для выполнения практического задания №7. «Операции с индексированными переменными»
- •Приложение 8. Таблица вариантов заданий
- •12. Двумерные массивы
- •12.1. Матрицы
- •12.2. Описание двумерного массива
- •Ввод элементов двумерного массива
- •Вывод элементов двумерного массива
- •12.3. Обработка двумерных массивов
- •Пример программы обработки двумерного массива
- •Вопросы для самоконтроля
- •12.4. Методические указания для выполнения практического задания №8. «Матрицы»
- •Приложение 9. Таблица вариантов заданий
- •13. Подпрограммы
- •13.1. Функции и процедуры
- •Структура программы, содержащей процедуру (функцию)
- •13.2. Процедуры
- •13.3. Вложенные процедуры Директива forward
- •13.4. Функции
- •Пример программы с использованием подпрограмм
- •Вопросы для самоконтроля
- •Методические указания для выполнения практического задания №9. «Подпрограммы»
- •Приложение 10. Таблица вариантов заданий
- •14. Обработка строк текста
- •14.1. Символьные переменные
- •Фрагмент таблицы ascii-кодов букв латинского алфавита
- •Фрагмент таблицы ascii-кодов букв русского алфавита
- •14.2. Функции обработки символьных переменных
- •14.3. Строковые переменные
- •14.4. Функции обработки строковых переменных
- •14.5. Процедуры обработки строковых переменных
- •14.6. Примеры обработки строковых переменных
- •Вопросы для самоконтроля
- •15. Структурированные типы данных
- •Пример программы использования массива записей
- •Вопросы для самоконтроля
- •Методические указания к выполнению индивидуального задания по Модулю 2. «Массивы записей»
- •Приложение 11. Таблица вариантов индивидуального задания
12. Двумерные массивы
12.1. Матрицы
Если в массиве хранится таблица значений, то такой массив называют двумерным, а его элементы нумеруются двумя индексами – номером строки и номером столбца, на пересечении которых находится данный элемент.
В памяти компьютера все элементы массива занимают одну непрерывную область. Двумерный массив располагается в памяти по строкам.
Двумерный массив можно представить в виде матрицы:
.
12.2. Описание двумерного массива
Для двумерных массивов:
var
a : array[1..n ,1..m] of <тип>;
Где a – имя массива;
n, m – количество строк и столбцов в массиве;
<тип> – тип элементов массива.
Количество элементов в массиве - n
m.
Например:
var
mas: array [1…10,1..10] of real;
begin
…
Описан массив mas, содержащий 100 элементов вещественного типа (10 строк и 10 столбцов).
Размер массива должен быть задан в явном виде (как в предыдущем фрагменте), или через const.
Например:
const
n = 5, m=5;
var
mas: array[1…n,1..m] of real;
begin
…
Описан массив mas, содержащий 25 элементов целого типа (5 строк и 5 столбцов).
Каждый элемент массива определяется с помощью двух индексов, стоящих справа от имени в квадратных скобках.
a[i, j] – элемент стоящий на пересечении i-ой строки и j-го столбца.
a[i, i] – элементы главной диагонали.
a[i, 2] – элементы второго столбца.
Индекс может быть переменной, константой, арифметическим выражением целого типа.
Если количество строк равно количеству столбцов, матрица называется квадратной.
Обработка двумерных массивов производится при изменении индексов элементов.
Все элементы главной диагонали удовлетворяют условию:
i=j
(номер строки равен номеру столбца).
Все элементы побочной диагонали удовлетворяют условию:
i+j=n+1
(n – количество строк и столбцов).
Элементы, расположенные над главной диагональю удовлетворяют условию:
i<j
(номер строки строго меньше номера столбца).
Элементы, расположенные под главной диагональю удовлетворяют условию:
i>j
(номер строки строго больше номера столбца).
Ввод элементов двумерного массива
…
for i:=1 to n do
for j:=1 to m do
readln(a[i]);
…
Данный фрагмент позволит ввести элементы массива по строкам.
Для ввода элементов массива по столбцам, достаточно в предыдущем фрагменте поменять местами внутренний и внешний циклы.
Вывод элементов двумерного массива
…
for i:=1 to n do
begin
for j:=1 to n do
write(a[I,j],‘ ‘);
writeln;
end;
…
Данный фрагмент позволит вывести элементы массива в виде матрицы.
12.3. Обработка двумерных массивов
Рассмотрим типовые задачи обработки двумерных массивов с использованием вложенных циклов.
Задача.
Составить программу подсчета суммы и произведения элементов двумерного массива вещественных чисел.
Таблица идентификаторов
№ |
Наименование переменной |
Обозначения в программе |
1 |
Имя массива |
a |
2 |
Количество строк |
n |
3 |
Количество столбцов |
m |
4 |
Индексы массива |
I,j |
5 |
Сумма элементов |
s |
6 |
Произведение элементов |
p |
program matr;
uses
crt;
var
a:array [1...10, 1...10] of real;
i, j, n, m: integer;
s,p :real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i, j]);
s:=0; p:=1;
{ поиск суммы и произведения }
for i:=1 to n do
for j:=1 to m do
begin
s:=s + a[i,j];
p:=p * a[i,j];
end;
writeln(‘ Сумма элементов s=’,s:8:3);
writeln(‘ Произведение элементов p=’,p:8:3);
readln;
end.
Задача.
Задана квадратная матрица целых чисел. Составить программу подсчета суммы элементов, расположенных над главной диагональю.
Таблица идентификаторов
№ |
Наименование переменной |
Обозначения в программе |
1 |
Имя массива |
a |
2 |
Количество строк и столбцов |
n |
3 |
Индексы массива |
I,j |
4 |
Сумма элементов над главной диагональю |
s |
program matr_1;
uses
crt;
var
a:array [1..10, 1..10] of real;
i, j, n, m : integer;
s,p : real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
for i:=1 to 3 do
for j:=i +1 to 3 do
s:=s+a[i,j];
writeln('Сумма элементов s=', s);
readln;
end.
Для ввода элементов массива используются вложенные циклы с указанием номера вводимого элемента.
Для поиска суммы элементов над главной диагональю во внутреннем цикле задан закон изменения параметра внутреннего цикла:
j:=i+1.
Задача.
Задана целочисленная квадратная матрица. Определить является ли она симметричной относительно главной диагонали.
Таблица идентификаторов
№ |
Наименование переменной |
Обозначения в программе |
1 |
Имя массива |
a |
2 |
Количество строк и столбцов |
n |
3 |
Индексы массива |
I,j |
4 |
Флажок |
f |
program matr_2;
uses
crt;
var
a : array [1..10, 1..10] of integer;
i, j, n, f : integer;
begin
clrscr;
writeln(‘ Введите n<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]);
f:=0
for i:=1 to n do
for j:=i to n do
if a[i,j]<>a[j,i] then f:=1;
if f=0 then writeln(‘ матрица симметрична’)
else writeln (‘матрица не симметрична’);
readln;
end.
При решении этой задачи сравниваются элементы расположенные над главной диагональю ( a[ i,j ] ) с элементами, расположенными под главной диагональю ( a[ j,i ] ) .
Задача.
Задана матрица вещественных чисел. Образовать одномерный массив, где каждый j – й элемент равен произведению элементов j-ого столбца двумерного массива.
Таблица идентификаторов
№ |
Наименование переменной |
Обозначения в программе |
1 |
Имя двумерного массива |
a |
2 |
Имя одномерного массива |
b |
3 |
Количество строк |
n |
4 |
Количество столбцов |
m |
5 |
Индексы массива |
I,j |
program matr_3;
uses crt;
var
a: array [1...10, 1...10] of integer;
b: array [ 1..10 ] of integer;
i, j, n, f : integer;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln (a[i, j]);
writeln(‘ Исходная матрица ’);
for i:=1 to n do
begin
for j:= 1 to n do
write( a[I,j] , ‘ ‘);
writeln;
end;
writeln(‘ Образованный одномерный массив ’);
for j:=1 to m do
begin
b[ j ]:=1;
{ накапливается произведение элементов j столбца }
for i:=1 to n do
b[ j ]:= b[ j ] * a[ i, j ];
write( b[ j] , ‘ ‘);
end;
readln;
end.
Задача.
Задана целочисленная матрица a(m*n). Упорядочить элементы каждой строки по возрастанию.
Таблица идентификаторов
№ |
Наименование переменной |
Обозначения в программе |
1 |
Имя двумерного массива |
a |
2 |
Количество строк, столбцов |
n, m |
3 |
Индексы массива |
I,j |
4 |
Флажок |
f |
5 |
Дополнительная переменная для обмена соседних элементов |
p |
program mart_4;
uses crt;
var
a: array[1...10, 1...10] of integer;
i,j,n,f : integer;
begin clrscr;
writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i, j]);
writeln(‘ Исходная матрица ’);
for i:=1 to n do
begin
for j:=1 to n do
write(a[I,j],‘ ‘);
writeln;
end;
{ переход от строки к строке }
for i:=1 to n do
{ сортировка i-ой строки }
repeat
f:=0;
for j:=1to m-1 do
if a[i,j]>a[i,j+1] then
begin p:=a[i,j]; a[i,j]=a[i,j+1]; a[i,j+1]:=p; f:=1; end;
until f=0;
writeln(‘ Преобразованная матрица ’);
for i:=1 to n do
begin
for j:= 1 to n do
write( a[I,j] , ‘ ‘);
writeln;
end;
readln;
end.
f =0 – признак того, что все элементы данной строки упорядочены.