Охрана труда:
нормативно-правовые основы и особенности организации
Обучение по оказанию первой помощи пострадавшим
Аккредитация Минтруда (№ 10348)
Подготовьтесь к внеочередной проверке знаний по охране труда и оказанию первой помощи.
Допуск сотрудника к работе без обучения или нарушение порядка его проведения
грозит организации штрафом до 130 000 ₽ (ч. 3 статьи 5.27.1 КоАП РФ).
Повышение квалификации

Свидетельство о регистрации
СМИ: ЭЛ № ФС 77-58841
от 28.07.2014

Почему стоит размещать разработки у нас?
  • Бесплатное свидетельство – подтверждайте авторство без лишних затрат.
  • Доверие профессионалов – нас выбирают тысячи педагогов и экспертов.
  • Подходит для аттестации – дополнительные баллы и документальное подтверждение вашей работы.
Свидетельство о публикации
в СМИ
свидетельство о публикации в СМИ
Дождитесь публикации материала и скачайте свидетельство о публикации в СМИ бесплатно.
Диплом за инновационную
профессиональную
деятельность
Диплом за инновационную профессиональную деятельность
Опубликует не менее 15 материалов в методической библиотеке портала и скачайте документ бесплатно.
15.12.2014

Транспонирование матрицы на языке Паскаль

Трофимов Виктор Геннадьевич
учитель информатики
В работе приведёна программа транспонирования матрицы на языке Паскаль с объяснениями и ключевыми моментами алгоритма

Содержимое разработки

ФИО автора: Трофимов Виктор Геннадьевич

Место работы: ГКООУ санаторная школа-интернат №28 г. Ростова-на-Дону

Должность: учитель информатики и ИКТ

ТРАНСПОНИРОВАНИЕ МАТРИЦЫ

Задача: дана матрица K[X,Y], значения X и Y вводятся пользователем (не более 10), матрица заполняется случайными целыми числами. Сформировать транспонированную матрицуP, вывести её на экран.

Кроме владения языком программирования, вам потребуются следующие знания: двумерные массивы, циклы, вложенные циклы и небольшое понимание декартовой системы координат.

Для решения этой задачи нам потребуются двумерные массивы, k и p, при этом массив k будет служить массивом-источником матрицы, массив p - получателем.

При работе с двумерными матрицами очень часто программисты путают значения осей x и y, для избегания такой путаницы достаточно представить трансформированную декартову систему координат, где точка 0 будет находиться в левом верхнем углу, ось X - вертикальная, ось Y - горизонтальная. Чёткое понимание подобной модели даст преимущество в написании программы и позволит не путаться между счётчиками цикла i,j.

Декартова система координат:

О

с

ь

Y

6

5

4

3

2

1

0

1

2

3

4

5

6

Ось X

Система координат для работы с массивами:

Ось Y / j

О

с

ь

X

/

i

0

1

2

3

4

5

6

1

2

3

4

5

6

Опираясь на систему координат с измененными осями X и Y нам не составит труда проконтролировать работу вложенного цикла (с которым обычно и происходит путаница при работе с двумерными массивами).

Идея проста. Определяем двумерный массив размерностью X, Y, заносим случайные числа от -128 до +127 и следующим же шагом транспонируем матрицу.

Сама программа реализует следующее:

1. Запрашиваем у пользователя значенияX и Y

2. Если хоть одно значение больше 10, то присваиваем ему 10.

3. С помощью вложенного цикла заполняем массив k случайными числами.

4. Выводим на экран массив k для контроля.

5. Транспонируем массив, одновременно передавая значения в массив p.

6. Выводим результат на экран.

7. Готово!

Ниже привожу блоки программы с пояснением:

program transponirovanie; // название программы

uses crt;// библиотека для использования процедур очистки экрана и

// финального ожидания нажатой клавиши

var k: array [1..10, 1..10] of shortint;// объявление первого массива

p: array [1..10, 1..10] of shortint;// объявление второго массива

x, y, i,j: byte;// переменные, нужные нам для ввода

// пользователем размерности массива

// и для счётчиков цикла

Для массивов взяты значения типаshortint, позволяющие указать данные в диапазоне от -128 до +127, целые числа. Для размерности массива и счётчиков цикла достаточно значения типа byte, так как даже в максимальном случае у нас получится всего 10 итераций для любого из циклов.

begin// Начало программы

clrscr;// Очистка экрана

randomize;// Активация генератора случайных чисел

В этом блоке вводятся значения с клавиатуры - X и Y, после чего выполняется проверка. ЕслиX или Y больше 10, то им присваивается максимально возможноей значение - 10.

write('Введите размер матрицы (X xY), не больше 10 ');

readln(x, y);

if (x > 10) then x := 10;

if (y > 10)then y := 10;

Заполнение массива. Не забываем, что x - «подправленная» ось нашей системы координат, направлена слева-сверху вниз. Y - горизонтальная ось, увеличение происходит слева-направо.

for i := 1 to x do

for j := 1 to y do

begin

k[i, j] := -128 + random(256);// Генератор случайных чисел, который формирует число

// от -128 до +127 (минимальный random(256) может

// вернуть число 0, а максимальный число 255)

gotoxy(j * 5, 1 + i);// Позиция на экране для вывода значения

writeln(k[i,j]);// Вывод массива для контроля

end;

Здесь выполняется транспонирование матрицы. Всё просто - меняем оси местами, «вращая» массив на 90 градусов по часовой стрелке. Это достигается путём замены счётчиков цикла i (ось x в исходном массиве) на j (ось y в исходном массиве). Вообразите шахматную доску с расставленными фигурами и «поверните» её на девяносто градусов, тогда стоявшие вверху фигуры окажутся расположены на правой линии, второй сверху ряд - на второй справа линии и так далее. В приведенном коде происходит то же самое.

(Труднее будет перевернуть матрицу на заданное количество градусов, допустим, 45 по часовой, или 30 против часовой. Некоторое подобие алгоритма применяется в игре тетрис, а более сложные его формы - практически во всех современных играх или программах, работающих с фото- видеоматериалами).

for i := 1 to x do

for j := 1 to y do

p[j, i] := k[i, j];

Вывод получившегося транспонированного массива. Формирование позиций на экране для вывода значений происходит путём расчёта (j * 5, 2 + x + i), ось y, формируемая формулой 2 + x + i, всегда будет ниже, чем предыдущий вывод исходного массива.

for i := 1 to y do

for j := 1 to x do

begin

gotoxy(j * 5, 2 + x + i);

writeln(p[i, j]);

end;

readkey;// Ожидания нажатия клавиши

end.// Наконец, конец программы!

Трудность алгоритма заключается именно в определении осей массива и умении программиста сориентироваться, переопределив оси X и Y так, чтобы они подходили для обработки в циклах for. Вот и всё :)

Удачи!

Адрес публикации: https://www.prodlenka.org/metodicheskie-razrabotki/86831-transponirovanie-matricy-na-jazyke-paskal

Свидетельство участника экспертной комиссии
Рецензия на методическую разработку
Опубликуйте материал и закажите рецензию на методическую разработку.
Также вас может заинтересовать
Свидетельство участника экспертной комиссии
Свидетельство участника экспертной комиссии
Оставляйте комментарии к работам коллег и получите документ
БЕСПЛАТНО!
У вас недостаточно прав для добавления комментариев.

Чтобы оставлять комментарии, вам необходимо авторизоваться на сайте. Если у вас еще нет учетной записи на нашем сайте, предлагаем зарегистрироваться. Это займет не более 5 минут.

 

Для скачивания материалов с сайта необходимо авторизоваться на сайте (войти под своим логином и паролем)

Если Вы не регистрировались ранее, Вы можете зарегистрироваться.
После авторизации/регистрации на сайте Вы сможете скачивать необходимый в работе материал.

Рекомендуем Вам курсы повышения квалификации и переподготовки