Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
1

Даны две квадратные матрицы 5х5 и 6х6 в текстовых файлах. Трансформировать их в другие матрицы

15.07.2014, 18:06. Показов 2855. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые участники форума.
Напишите, пожалуйста, программу.
Даны две квадратные матрицы 5х5 и 6х6 в текстовых файлах. Трансформировать их в другие матрицы: каждый элемент передвигается на другое место ходом коня, 1-й на 2-е, 2-й на 3-е... 25-й на 1-е на досках 5х5 (открытый маршрут коня)

31021165
201541122
9225617
141982312
12413187

и 6х6 (замкнутый маршрут коня)

4253415187
3514583316
2432617619
13362330932
22272112029
11221283110

Исходные матрицы и полученные трансформацией переписать в новый файл. Задачу можно зазделить на две. Pascal ABC.Net.
Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2014, 18:06
Ответы с готовыми решениями:

Даны две квадратные матрицы n-го порядка (матрицы заполнены произвольно случайными целыми числами из диапазонов [-5; 15]
Даны две квадратные матрицы n-го порядка (матрицы заполнены произвольно случайными целыми числами...

Даны две квадратные матрицы. Вычислить среднее арифметическое элементов главной и побочной диагонали каждой матрицы
помогите написать программный код на c++

Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: а) умножением элементов каждой строки первой матрицы на наибольш
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: а) умножением...

1)Даны две действительные квадратные матрицы порядка n. Получить новую матрицу : А) умножение элементов каждой строки первой матрицы на наибольшее из
1)Даны две действительные квадратные матрицы порядка n. Получить новую матрицу : А) умножение...

25
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7792 / 4616 / 2829
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
19.07.2014, 13:54 2
Pascal
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
const
  path5x5: array [0..25] of Integer = (
     0,11,20,17,24,
    13, 4, 7,10,21,
    18, 9, 2, 5,16,
    23,14, 3, 6,15,
    22,19, 8, 1,12,0);
  path6x6: array [0..36] of Integer = (
     0, 8,19,30,26,22,
    35,27,16, 5, 9, 1,
    12,25,33,29,21,34,
    23,10, 2, 6,14,18,
    31,20, 7, 3,11,15,
     4,17,28,32,24,13,0);
var
  i, j: Integer;
  a: array [0..35] of Integer;
begin
  Assign(input,'input.txt'); Reset(input);
  Assign(output,'output.txt'); Rewrite(output);
  for i:=4 downto 0 do for j:=0 to 4 do Read(a[path5x5[i*5+j+1]]);
  for i:=4 downto 0 do begin
    for j:=0 to 4 do Write(' ',a[i*5+j]:4); WriteLn;
  end;
  WriteLn;
  for i:=5 downto 0 do for j:=0 to 5 do Read(a[path6x6[i*6+j+1]]);
  for i:=5 downto 0 do begin
    for j:=0 to 5 do Write(' ',a[i*6+j]:4); WriteLn;
  end;
end.
1
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
26.07.2014, 09:36  [ТС] 3
Прошу прощения за опоздание с ответом, был в разъездах. О программе. Числа передвигаются не по ходу коня, вразнобой, я не уловил закономерности. Оригинал матрицы не выведен. См. файл для проверки.
Спасибо
Вложения
Тип файла: txt mq56tr.txt (203 байт, 8 просмотров)
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
26.07.2014, 10:07 4
Цитата Сообщение от kayslu Посмотреть сообщение
См. файл для проверки.
И что проверяет этот файл? Если пример исходных матриц из первого поста, то тоже нет никакой закономерности.
Задача сформулирована некорректно. По какому принципу создаются исходные матрицы? Они произвольные? Какая ячейка принимается за 1? Как выбирается маршрут?

Добавлено через 1 минуту
Думаю что условие задачи придумано не Вами, а Вами только исковеркано, поэтому желательно видеть оригинал.
0
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
26.07.2014, 11:55  [ТС] 5
Puporev, во вложении - это матрицы дпя преобразования, а начале темы - это шахматная доска, дорожная карта, маршрутный лист, шаблон для воздействия на матрицы. Оригинал - это я, то есть сам придумал, не бейте слишком сильно, пожалуйста, мне уже 63года, ну, не довелось учиться программированию. Простите, что путаюсь у программистов под ногами.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7792 / 4616 / 2829
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
26.07.2014, 14:58 6
Цитата Сообщение от kayslu Посмотреть сообщение
Числа передвигаются не по ходу коня, вразнобой, я не уловил закономерности. Оригинал матрицы не выведен.
Ок, выписывать маршруты вручную -- задачка ещё та, проще поручить её самой программе:
Pascal
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
type
  IntArr = array [0..65534 div SizeOf(Integer)-1] of Integer;
procedure ReadPath(
  var f: Text;
  n: Integer;
  var path);
var
  i, j, k: Integer;
  p: IntArr absolute path;
  d: ^IntArr;
begin
  GetMem(d, n*SizeOf(Integer));
  for i:=n-1 downto 0 do
    for j:=0 to n-1 do
      Read(f, d^[i*n+j]);
  for i:=0 to sqr(n)-1 do begin
    k:=d^[i]+1;
    if k>sqr(n) then k:=1;
    for j:=sqr(n)-1 downto 0 do
      if d^[j]=k then Break;
    p[i]:=j;
  end;
  FreeMem(d, n*SizeOf(Integer));
end;
 
procedure ReadByPath(
  var f: Text;
  n: Integer;
  const path;
  var matrix);
var
  p: IntArr absolute path;
  m: IntArr absolute matrix;
  i, j: Integer;
begin
  for i:=n-1 downto 0 do
    for j:=0 to n-1 do
      Read(f, m[p[i*n+j]]);
end;
 
var
  p5, m5: array [1..5,1..5] of Integer;
  p6, m6: array [1..6,1..6] of Integer;
  f: Text;
  i, j: Integer;
begin
  Assign(f, 'path.txt'); Reset(f);
  ReadPath(f, 5, p5);
  ReadPath(f, 6, p6);
  Close(f);
 
  Assign(f, 'input.txt'); Reset(f);
  ReadByPath(f, 5, p5, m5);
  ReadByPath(f, 6, p6, m6);
  Close(f);
 
  Assign(f, 'output.txt'); Rewrite(f);
  for i:=5 downto 1 do begin
    for j:=1 to 5 do Write(f, m5[i, j]:3, ' '); WriteLn(f);
  end;
  WriteLn(f);
  for i:=6 downto 1 do begin
    for j:=1 to 6 do Write(f, m5[i, j]:3, ' '); WriteLn(f);
  end;
  Close(f);
end.
path.txt:
Код
3	10	21	16	5
20	15	4	11	22
9	2	25	6	17
14	19	8	23	12
1	24	13	18	7

4	25	34	15	18	7
35	14	5	8	33	16
24	3	26	17	6	19
13	36	23	30	9	32
22	27	2	11	20	29
1	12	21	28	31	10
input.txt:
Код
 3  10  21  16   5
20  15   4  11  22
 9   2  25   6  17
14  19   8  23  12
 1  24  13  18   7

 4  25  34  15  18   7
35  14   5   8  33  16
24   3  26  17   6  19
13  36  23  30   9  32
22  27   2  11  20  29
 1  12  21  28  31  10
output.txt:
Код
  2   9  20  15   4 
 19  14   3  10  21 
  8   1  24   5  16 
 13  18   7  22  11 
 25  23  12  17   6 

  8  12   6  11  17   9 
  2   9  20  15   4   8 
 19  14   3  10  21   2 
  8   1  24   5  16  19 
 13  18   7  22  11   8 
 25  23  12  17   6  13
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
26.07.2014, 15:19 7
Цитата Сообщение от bormant Посмотреть сообщение
выписывать маршруты вручную
Можно шаблон описать в константе-массиве координат, где указываются координаты полей, откуда берется число.
Типа такого(это начало для шаблона 5)
Pascal
1
2
3
4
5
6
type koord=record
           x,y:integer;
           end;
const sh5:array[1..5,1..5] of koord=
(((x:3;y:2),(x:3;y:1),(x:2;y:1),(x:2;y:2),(x:2;y:3)),
 ((x:4;y:3),(x:4;y:1),(x:1;y:1),(x:1;y:2),(x:1;y:3)),
Или нет?
0
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
26.07.2014, 16:38  [ТС] 8
bormant, во 2- й строке неподьемная мне ошибка "Ожидался интерпретатор". Помогите.

Добавлено через 37 минут
bormant, На какой версии Паскаля Вашу программу прогонять? Мой Pascal ABC.Net не узнает слова, требует ";" в середине инструкции. "SizeOf" я изменил на "izeOf", проехал несколько строк до следующей ошибки.
Пожалуйста, помогите
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
26.07.2014, 16:56 9
Цитата Сообщение от kayslu Посмотреть сообщение
На какой версии Паскаля Вашу программу прогонять?
Можно в Турбо Паскаль.
0
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
26.07.2014, 17:12  [ТС] 10
Puporev, Турбо Паскаль под Вин8 не идет
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
26.07.2014, 17:14 11
Ну ждите когда bormant переделает на Паскаль АВС.net
1
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
26.07.2014, 17:17  [ТС] 12
Ошибка в описании типов, слово служебное, если заменить его, дальше в теле вылазят косяки, я теряюсь
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7792 / 4616 / 2829
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
28.07.2014, 02:04 13
Цитата Сообщение от Puporev
Можно шаблон описать в константе-массиве координат, где указываются координаты полей, откуда берется число.
У меня так было в самом начале сделано, только массив был свернут в одномерный. Правда выписать маршрут без ошибок, как позже выяснилось, не удалось, накосячил

kayslu, не силён я в PascalABC.net, увы, передача безтиповых параметров действительно сделана в стиле Turbo Pascal, дабы не писать под каждый из массивов отдельные процедуры. Но логика решения прослеживается легко.
Если что, TP под Win8 работает в DosBox.
1
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.07.2014, 09:04 14
Вот пример для n=5;
работает в любом Паскале.
Pascal
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
//шаблон для перестановки
const sh5:array[1..5,1..5,1..2] of byte=
               (((3,2),(3,1),(2,1),(2,2),(2,3)),
                ((4,2),(4,1),(1,1),(1,2),(1,3)),
                ((4,3),(5,1),(5,2),(1,5),(1,4)),
                ((5,3),(5,4),(5,5),(2,5),(2,4)),
                ((3,3),(4,4),(4,5),(3,5),(3,4)));
var a,b:array[1..5,1..5] of integer;
    f:text;
    i,j:byte;
begin
assign(f,'input.txt');
reset(f);
for i:=1 to 5 do
for j:=1 to 5 do
read(f,a[i,j]);
close(f);
assign(f,'output.txt');
rewrite(f);
for i:=1 to 5 do
 begin
  for j:=1 to 5 do
   begin
    b[i,j]:=a[sh5[i,j,1],sh5[i,j,2]];
    write(f,b[i,j]:4);
   end;
  writeln(f)
 end;
close(f);
end.
input.txt
Код
 3  10  21  16   5
20  15   4  11  22
 9   2  25   6  17
14  19   8  23  12
 1  24  13  18   7
output.txt
Код
   2   9  20  15   4
  19  14   3  10  21
   8   1  24   5  16
  13  18   7  22  11
  25  23  12  17   6
Добавлено через 1 минуту
Аналогично сделать для n=6;
1
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
28.07.2014, 10:08  [ТС] 15
bormant, запустил ТП в DosBoxе. Никак не пойму, как переписывался path в 1-й Вашей программе? Обе программы не дают правильного результата. Во вводной, в самом начале, - это пути, их не надо преобразовывать, они сами преобразовывают матрицу, во вложении текст. файлик - это исходная матрица, его надо преобразовать. Простите, что с самого начала меня не поняли. Как переписать пути 1-й программы?

Добавлено через 48 минут
Puporev, Ваша программа тоже неверно работает. Кроме того, Вы преобразовали пути вместо матрицы. В задаче элементы одной матрицы (пути) служат индексами другой (обрабатываемой матрицы). Походите конем по доске и нумеруйте клетки, они же ходы. Так получены пути (см. в самом начале). Наложите матрицу на доску. Теперь надо элемент матрицы над клеткой №1 доски переместить над клетку №2 доски (ход коня). И так со всеми. Пути показывают положение элементов матрицы до пуска программы и после. Очень прошу простить за невнятность и сумбурность моих пояснений.
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.07.2014, 10:40 16
Цитата Сообщение от kayslu Посмотреть сообщение
Ваша программа тоже неверно работает. Кроме того, Вы преобразовали пути вместо матрицы
Работает также как и у bormant, а исходная матрица взята для наглядности. Запишите в файл любую другую матрицу.
0
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
28.07.2014, 10:40  [ТС] 17
Puporev, прошу прощения, Ваша программа работает, это я вводил неправильно, добавлял порядок матрицы. Буду пытаться приспособить его на 6х6. Большое Вам спасибо за терпение и помощь.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7792 / 4616 / 2829
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
28.07.2014, 13:59 18
Цитата Сообщение от kayslu Посмотреть сообщение
Как переписать пути 1-й программы?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
  path5x5: array [0..24] of Integer = (
     11, 12,  5,  6,  7,
     16, 15, 10,  1,  2,
     21, 20,  0,  4,  3,
     22, 23, 24,  9,  8,
     17, 18, 19, 14, 13);
  path6x6: array [0..35] of Integer = (
      8, 12,  6, 11, 17,  9,
     14,  3, 19,  1,  2, 15,
     25,  0, 18,  4,  5, 28,
     31, 30,  7, 34, 35, 10,
     13, 33, 22, 16, 32, 21,
     26, 20, 24, 29, 23, 27);
Получены дописыванием в процедуру ReadPath следующего фрагмента:
Pascal
1
2
3
4
5
6
  Write('  path',n,'x',n,': array [0..',n*n-1,'] of Integer = (');
  for i:=0 to n*n-2 do begin
    if i mod n = 0 then begin WriteLn; Write('':4); end;
    Write(p[i]:3,',');
  end;
  WriteLn(p[n*n-1]:3,');');
Алгоритм их получения описан в процедуре ReadPath ответа #6. В каждой ячейке указан индекс ячейки,
в которую переедет значение текущей.
И чтение подправить, убрав +1:
Pascal
1
2
3
Read(a[path5x5[i*5+j]]);
...
Read(a[path6x6[i*6+j]]);
1
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
28.07.2014, 14:23  [ТС] 19
В общем, приспособил программу от Puporev для матриц 6х6:

Pascal
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
31
32
33
34
35
36
37
{Даны две квадратные матрицы 5х5 и 6х6 в текстовых файлах. Трансформировать их в другие матрицы: каждый элемент 
передвигается на другое место ходом коня, 1-й на 2-е, 2-й на 3-е... 25-й на 1-е на досках 5х5 (открытый маршрут коня)...}
const sh5: array[1..6, 1..6, 1..2] of byte = (((3, 2), (3, 1), (2, 5), (2, 2), (3, 4), (3, 5)), //шаблон для перестановки
                                              ((1, 3), (4, 1), (1, 1), (1, 6), (4, 6), (1, 4)),
                                              ((4, 3), (5, 3), (1, 2), (2, 6), (2, 3), (1, 5)),
                                              ((6, 2), (2, 1), (5, 1), (5, 6), (2, 4), (6, 5)),
                                              ((6, 3), (3, 3), (6, 1), (6, 6), (3, 6), (6, 4)),
                                              ((4, 2), (5, 4), (5, 5), (5, 2), (4, 4), (4, 5)));
var a, b: array[1..6, 1..6] of integer;
    f: text;
    i, j: byte;
begin
 Assign(f, 'it.txt'); ReSet(f);
 for i := 1 to 6 do
  for j := 1 to 6 do
   Read(f, a[i, j]);
 Close(f);
 Assign(f, 'output.txt'); ReWrite(f); 
 for i := 1 to 6 do
  begin
   for j := 1 to 6 do
    begin
     Write(f, a[i, j]: 3);
    end;
    WriteLn(f);
  end;
 for i := 1 to 6 do
  begin
   for j := 1 to 6 do
    begin
     b[i, j] := a[sh5[i, j, 1], sh5[i, j, 2]];     
     Write(f, b[i, j]: 3);
    end;
    WriteLn(f)
  end;
 Close(f);
end.
Спасибо, парни
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7792 / 4616 / 2829
Регистрация: 22.11.2013
Сообщений: 13,112
Записей в блоге: 1
28.07.2014, 14:34 20
Цитата Сообщение от kayslu Посмотреть сообщение
Обе программы не дают правильного результата.
Программа из сообщения 6 даёт правильный результат, проверить просто, возьмите в качестве исходной матрицы матрицу пути из 1-го сообщения, если преобразование верно, во второй матрице каждая ячейка после преобразование станет на 1 меньше (вместо 2 -- 1, вместо 3 -- 2, вместо 1 -- 25 или 36) вычтите из исходной матрицы результат:
Код
 3 10 21 16  5      2  9 20 15  4       1 1 1 1 1 1
20 15  4 11 22     19 14  3 10 21       1 1 1 1 1 1
 9  2 25  6 17      8  1 24  5 16       1 1 1 1 1 1
14 19  8 23 12     13 18  7 22 11       1 1 1 1 1 1
 1 24 13 18  7     25 23 12 17  6     -24 1 1 1 1 1

 4 25 34 15 18  7   3 24 33 14 17  6    1 1 1 1 1 1
35 14  5  8 33 16  34 13  4  7 32 15    1 1 1 1 1 1
24  3 26 17  6 19  23  2 25 16  5 18    1 1 1 1 1 1
13 36 23 30  9 32  12 35 22 29  8 31    1 1 1 1 1 1
22 27  2 11 20 29  21 26  1 10 19 28    1 1 1 1 1 1
 1 12 21 28 31 10  36 11 20 27 30  9  -35 1 1 1 1 1
Ах да, в сообщении #6 в выводе матрицы 6x6 есть опечатка имени копипасты , вместо m6 написано m5, после исправления получается вышеописанный результат.
0
28.07.2014, 14:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2014, 14:34
Помогаю со студенческими работами здесь

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

Даны две квадратные матрицы, найти A^2+B
Дано две квадратные матрицы A и B. Определить A^2+B. Помогите пожалуйста я даже не знаю с чего...

Даны две целые квадратные матрицы C и T порядка n
Помогите плиз, очень надо сдать лабу чтобы закрыть сетку, а я не понимаю :wall::sorry: :( очень...

Даны две действительные квадратные матрицы порядка n
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу путем прибавления к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru