- •Учебно-методическое пособие
- •Маршрутная карта изучения дисциплины по Модулю 1
- •1. Логические и арифметические основы эвм
- •Системы счисления
- •1.1. Десятичная система счисления
- •1.2. Двоичная система счисления
- •1.3. Восьмеричная и шестнадцатеричная системы счисления
- •1.4. Перевод чисел из любой системы счисления в десятичную
- •1.5. Перевод чисел из десятичной системы счисления в любую другую
- •Вопросы для самоконтроля
- •Методические указания для выполнения практического задания №1. «Системы счисления»
- •Приложение 1. Таблица вариантов заданий
- •2. Алгебра логики
- •2.1. Логические операции
- •Инверсия
- •2.2. Нормальные формы
- •Конъюнктивная нормальная форма
- •Дизъюнктивная нормальная форма
- •3. Применение средств алгебры логики для описания функционирования устройств компьютера
- •3.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.1. Алфавит языка
- •8.2. Арифметические выражения и правила их записи
- •Знаки операций
- •Операции div и mod
- •8.3. Типы данных
- •Целые типы
- •Логический тип
- •8.5. Структура программы на языке Паскаль
- •8.6. Описательная часть программы
- •8.7. Исполнительная часть программы
- •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.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 - количество строк и столбцов в массиве;
<тип> - тип элементов массива.
Количество элементов в массиве - nm.
Например:
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 - признак того, что все элементы данной строки упорядочены.