Компонентный Паскаль/Транспонирование многомерных матриц: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 3: Строка 3:
Большая часть информации из прошлой главы применима и к текущей. Единственным уточнением станет то, что для массивов в размере куба и выше транспонирование может быть выполнено множеством способов.
Большая часть информации из прошлой главы применима и к текущей. Единственным уточнением станет то, что для массивов в размере куба и выше транспонирование может быть выполнено множеством способов.
Разбор текста программы предлагается произвести самостоятельно.
Разбор текста программы предлагается произвести самостоятельно.
<source lang="oberon2">
<syntaxhighlight lang="oberon2">
MODULE TestHello13;
MODULE TestHello13;
(* Этот пример показывает как
(* Этот пример показывает как
Строка 77: Строка 77:
BEGIN
BEGIN
END TestHello13.
END TestHello13.
</syntaxhighlight>
</source>


Исходные данные для ввода:
Исходные данные для ввода:
<source lang="dos">
<syntaxhighlight lang="dos">
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
21 22 23 24 25 26 27 28 29 30
</syntaxhighlight>
</source>


Правильный вывод программы:
Правильный вывод программы:
<source lang="dos">
<syntaxhighlight lang="dos">
компилируется "TestHello13" 484 240
компилируется "TestHello13" 484 240
старый модуль TestHello13 выгружен
старый модуль TestHello13 выгружен
Строка 105: Строка 105:
2 5 8 11 14 17 20 23 26 29
2 5 8 11 14 17 20 23 26 29
3 6 9 12 15 18 21 24 27 30
3 6 9 12 15 18 21 24 27 30
</syntaxhighlight>
</source>
{{BookCat}}
{{BookCat}}

Текущая версия от 16:14, 16 апреля 2020

Пример транспонирования многомерной матрицы[править]

Большая часть информации из прошлой главы применима и к текущей. Единственным уточнением станет то, что для массивов в размере куба и выше транспонирование может быть выполнено множеством способов. Разбор текста программы предлагается произвести самостоятельно.

MODULE TestHello13;
	(* Этот пример показывает как
	транспонировать матрицу *)

	IMPORT In, Log, Math;

	VAR
		m1: ARRAY 10, 3 OF INTEGER;
		m2: ARRAY 3, 10 OF INTEGER;

	PROCEDURE Out_m2;
		VAR
			x, y: INTEGER;
	BEGIN
		Log.String('Массив2: '); Log.Ln;
		FOR x := 0 TO 2 DO
			FOR y := 0 TO 9 DO
				Log.Int(m2[x, y])
			END;
			Log.Ln
		END;
	END Out_m2;

	PROCEDURE Out_m1;
		VAR
			x, y: INTEGER;
	BEGIN
		Log.String('Массив1: '); Log.Ln;
		FOR x := 0 TO 9 DO
			FOR y := 0 TO 2 DO
				Log.Int(m1[x, y])
			END;
			Log.Ln
		END;
	END Out_m1;

	PROCEDURE TransMas; (* транспонировние *)
		VAR
			x, y: INTEGER;
	BEGIN
		FOR x := 0 TO 9 DO
			FOR y := 0 TO 2 DO
				m2[y, x] := m1[x, y]
			END;
		END;

	END TransMas;

	PROCEDURE GetMas; (* получение массива *)
		VAR
			x, y: INTEGER;
	BEGIN
		In.Open;
		WHILE In.Done DO
			FOR x := 0 TO 9 DO
				FOR y := 0 TO 2 DO
					In.Int(m1[x, y])
				END;
			END;
		END;
	END GetMas;

	PROCEDURE Start*;
		VAR
	BEGIN
		GetMas;
		TransMas;
		Out_m1;
		Out_m2;
	END Start;

BEGIN
END TestHello13.

Исходные данные для ввода:

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

Правильный вывод программы:

компилируется "TestHello13"   484   240
старый модуль TestHello13 выгружен
Массив1: 
 1 2 3
 4 5 6
 7 8 9
 10 11 12
 13 14 15
 16 17 18
 19 20 21
 22 23 24
 25 26 27
 28 29 30
Массив2: 
 1 4 7 10 13 16 19 22 25 28
 2 5 8 11 14 17 20 23 26 29
 3 6 9 12 15 18 21 24 27 30