Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 2

Поменять местами две матрицы NxN, стоящих на главной диагонали

19.11.2019, 20:49. Показов 765. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано матрицу 2Nx2N, условно состоит из 4х матриц NxN. Поменять местами две матрицы NxN, стоящих на главной диагонали.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2019, 20:49
Ответы с готовыми решениями:

Поменять местами две матрицы n × n, стоящие на главной диагонали
Дана матрица 2n × 2n, которая условно состоит из четырех матриц n × n. Поменять местами две матрицы n × n, стоящие на главной...

Максимум главной диагонали матрицы поменять местами с минимумом ее побочной диагонали
Дана квадратная матрица порядка n. Если в главной диагонали имеется хотя бы одно отрицательное число, то максимум главной диагонали...

Дан двумерный массив B размера m*m. Поменять местами максимальный элемент в главной диагонали матрицы с минимальным элементом в побочной диагонали
Дан двумерный массив B размера m*m. Поменять местами максимальный элемент в главной диагонали матрицы с минимальным элементом в побочной...

7
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
20.11.2019, 11:19
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
program Project1;
 
var
  a: array[1..20,1..20] of integer; // Переменная для хранения массива.
  n: integer; // Переменная для хранения значения размерности субматриц.
  i,j: integer; // Вспомогательные переменные для организации циклов.
  tmp: integer; // Промежуточная переменная для организации обмена значениями.
begin
  write('Введите значение размерности матрицы (не более 10): ');
  Readln(n);
  for i:= 1 to 2*n do
    for j:= 1 to 2*n do
    begin
      write('Введите значение элемента [',i,',',j,']: ');
      Readln(a[i,j]);     // Ввод значений в матрицу.
    end;
  writeln('Исходный массив: ');
  for i:= 1 to 2*n do
    begin
      for j:= 1 to 2*n do
        write(a[i,j]:5);    // Вывод матрицы в консоль.
      Writeln;
    end;
  for i:= 1 to n do
    for j:= 1 to n do
      begin
        tmp:= a[i,j];         // Обмен значениями субматриц на главной диагонали.
        a[i,j]:= a[i+n,j+n];
        a[i+n,j+n]:= tmp;
      end;
  writeln('Измененный массив: ');
  for i:= 1 to 2*n do
    begin
      for j:= 1 to 2*n do
        write(a[i,j]:5);     //  Вывод измененной матрицы в консоль.
      Writeln;
    end;
  Readln;
end.

Та же самая программа, но оформлена красиво.
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
67
68
69
70
program Project1;
uses
  crt;
var
  a: array[1..20,1..20] of integer; // Переменная для хранения массива.
  n: integer; // Переменная для хранения значения размерности субматриц.
  i,j: integer; // Вспомогательные переменные для организации циклов.
  tmp: integer; // Промежуточная переменная для организации обмена значениями.
begin
  randomize; 
  write('Введите значение размерности матрицы (не более 10): ');
  Readln(n);
  for i:= 1 to 2*n do
    for j:= 1 to 2*n do
    begin
      //write('Введите значение элемента [',i,',',j,']: ');
      //Readln(a[i,j]);     // Ввод значений в матрицу.
      a[i,j]:= random(100);
    end;
  writeln('Исходный массив: ');
  for i:= 1 to 2*n do
    begin
      for j:= 1 to 2*n do
        begin
          if (i <= n) and (j <= n) then
            textcolor(14) // Желтый.
          else
            if (i <= n) and (j > n) then
              textcolor(15)  // Белый.
            else
              if (i > n) and (j <= n) then
                textcolor(15) // Белый.
              else
                if (i > n) and (j > n) then
                  textcolor(10);  // Зеленый.
          write(a[i,j]:5);    // Вывод матрицы в консоль.
        end;
      Writeln;
    end;
  for i:= 1 to n do
    for j:= 1 to n do
      begin
        tmp:= a[i,j];         // Обмен значениями субматриц на главной диагонали.
        a[i,j]:= a[i+n,j+n];
        a[i+n,j+n]:= tmp;
      end;
  textcolor(7);
  writeln('Измененный массив: ');
  for i:= 1 to 2*n do
    begin
      for j:= 1 to 2*n do
        begin
          if (i <= n) and (j <= n) then
            textcolor(10) // Зеленый.
          else
            if (i <= n) and (j > n) then
              textcolor(15) // Белый.
            else
              if (i > n) and (j <= n) then
                textcolor(15) // Белый.
              else
                if (i > n) and (j > n) then
                  textcolor(14); // Желтый.
          write(a[i,j]:5);     //  Вывод измененной матрицы в консоль.
        end;
      Writeln;
    end;
  textcolor(7);
  Readln;
end.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   Black     0    { Чёрный }
   Blue      1    { Синий  }
   Green     2    { Зелёный  }
   Cyan      3    { Голубой }
   Red       4    { Красный  }
   Magenta   5    { Фиолетовый  }
   Brown     6    { Коричневый  }
   LightGray 7    { Светло-серый  }
 
Светлые цвета
    
   DarkGray      8 { Тёмно-серый  }
   LightBlue     9 { Светло-синий  }
   LightGreen   10 { Светло-зелёный  }
   LightCyan    11 { Светло-голубой }
   LightRed     12 { Светло-красный }
   LightMagenta 13 { Светло-фиолетовый }
   Yellow       14 { Жёлтый  }
   White        15 { Белый }
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
20.11.2019, 21:23
ValentinNemo,
хозяйке на заметку:
25-35 "красивой" программы легко заменить на:
Pascal
1
2
3
4
5
const
  W=5;
  Colors: array [0..3] of Byte = (LightGreen, White, White, Yellow);
...
  TextColor(Colors[2*Ord(i<=n)+Ord(j<=n)]);
Добавлено через 3 минуты
на всякий случай:
Pascal
25
26
27
28
29
30
31
  for i:=1 to 2*n do begin
    for j:=1 to 2*n do begin
      TextColor(Colors[2*Ord(i<=n)+Ord(j<=n)]);
      Write(a[i,j]:W);
    end;
    WriteLn;
  end;
Pascal
49
50
51
52
53
54
55
  for i:=1 to 2*n do begin
    for j:=1 to 2*n do begin
      TextColor(Colors[2*Ord(j<=n)+Ord(i<=n)]);
      Write(a[i,j]:W);
    end;
    WriteLn;
  end;
1
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
20.11.2019, 23:32
bormant, спасибо. Код получился компактнее и проще, но он труднопонимаемый. Трудно будет запомнить. Функцию Ord() я очень редко использую.

Добавлено через 4 минуты
Я вот озаботился другим. В моем примере для матрицы 10 на 10 нужно вызывать процедуру textcolor 100 раз. А по хорошему, ее нужно вызывать только 20 раз. Думал, думал и ничего не придумал.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
21.11.2019, 12:00
ValentinNemo,
это несложно, достаточно разделить внутренний цикл на «до» и «после»
Pascal
1
2
3
4
5
6
7
  for i:=1 to 2*n do begin
    TextColor(...);
    for j:=1 to n do Write(a[i,j]:W);
    TextColor(...);
    for j:=n+1 to 2*n do Write(a[i,j]:W);
    WriteLn;
  end;
1
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
21.11.2019, 15:10
bormant, спасибо! Код с меньшим количеством вызовов textcolor() мне больше нравится, хотя он выглядит более громоздким.
Было бы интересно сравнить время исполнения "красивых" программ: первого варианта, вашего варианта и третьего варианта программы.
Вариант от bormant,
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
program Project1;
uses
  crt;
const
  W = 5;
var
  a: array[1..20,1..20] of integer; // Переменная для хранения массива.
  n: integer; // Переменная для хранения значения размерности субматриц.
  i,j: integer; // Вспомогательные переменные для организации циклов.
  tmp: integer; // Промежуточная переменная для организации обмена значениями.
  Colors: array [0..3] of Byte = (LightGreen, White, White, Yellow);
  // Переменная для хранения массива с кодами цветов.
begin
  randomize;
  write('Введите значение размерности матрицы (не более 10): ');
  Readln(n);
  for i:= 1 to 2*n do
    for j:= 1 to 2*n do
    begin
      //write('Введите значение элемента [',i,',',j,']: ');
      //Readln(a[i,j]);     // Ввод значений в матрицу.
      a[i,j]:= random(100);
    end;
  writeln('Исходный массив: ');
  for i:=1 to 2*n do
    begin
      for j:=1 to 2*n do
        begin
          TextColor(Colors[2*Ord(i <= n)+Ord(j <= n)]);
          Write(a[i,j]:W);
        end;
      WriteLn;
    end;
  for i:= 1 to n do
    for j:= 1 to n do
      begin
        tmp:= a[i,j];         // Обмен значениями субматриц на главной диагонали.
        a[i,j]:= a[i+n,j+n];
        a[i+n,j+n]:= tmp;
      end;
  textcolor(7);
  writeln('Измененный массив: ');
  for i:=1 to 2*n do
    begin
      for j:=1 to 2*n do
        begin
          TextColor(Colors[2*Ord(j <= n)+Ord(i <= n)]);
          Write(a[i,j]:W);
        end;
      WriteLn;
    end;
  textcolor(7);
  Readln;
end.

Третий вариант.
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
67
68
69
70
71
72
73
74
program Project1;
uses
  crt;
var
  a: array[1..20,1..20] of integer; // Переменная для хранения массива.
  n: integer; // Переменная для хранения значения размерности субматриц.
  i,j: integer; // Вспомогательные переменные для организации циклов.
  tmp: integer; // Промежуточная переменная для организации обмена значениями.
  w: integer; // Переменная для форматирования вывода текста.
begin
  w:= 5;
  randomize;
  write('Введите значение размерности матрицы (не более 10): ');
  Readln(n);
  for i:= 1 to 2*n do
    for j:= 1 to 2*n do
    begin
      //write('Введите значение элемента [',i,',',j,']: ');
      //Readln(a[i,j]);     // Ввод значений в матрицу.
      a[i,j]:= random(100);
    end;
  writeln('Исходный массив: ');
  for i:= 1 to n do
    begin
      TextColor(14);   // Желтый.
      for j:=1 to n do
        Write(a[i,j]:W);
      TextColor(15);    // Белый.
      for j:=n+1 to 2*n do
        Write(a[i,j]:W);
      WriteLn;
    end;
  for i:= n+1 to 2*n do
    begin
      TextColor(15);  // Белый.
      for j:=1 to n do
        Write(a[i,j]:W);
      TextColor(10);  // Зеленый.
      for j:=n+1 to 2*n do
        Write(a[i,j]:W);
      WriteLn;
    end;
  for i:= 1 to n do
    for j:= 1 to n do
      begin
        tmp:= a[i,j];         // Обмен значениями субматриц на главной диагонали.
        a[i,j]:= a[i+n,j+n];
        a[i+n,j+n]:= tmp;
      end;
  textcolor(7);
  writeln('Измененный массив: ');
  for i:= 1 to n do
    begin
      TextColor(10);    // Зеленый.
      for j:= 1 to n do
        Write(a[i,j]:W);
      TextColor(15);    // Белый.
      for j:= n+1 to 2*n do
        Write(a[i,j]:W);
      WriteLn;
    end;
  for i:= n+1 to 2*n do
    begin
      TextColor(15);  // Белый.
      for j:= 1 to n do
        Write(a[i,j]:W);
      TextColor(14);  // Желтый.
      for j:= n+1 to 2*n do
        Write(a[i,j]:W);
      WriteLn;
    end;
  textcolor(7);
  Readln;
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
21.11.2019, 19:33
ValentinNemo,
хозяйке на заметку:
с комментариями // и
var Colors: ... = (...)
это вы разделом ошиблись, Turbo Pascal такого не съест ;-)
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
21.11.2019, 20:33
bormant, про коментарий почему раньше не сказали.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2019, 20:33
Помогаю со студенческими работами здесь

Элементы главной диагонали матрицы поменять местами
Суть задания такова: Сделать двумерный массив в виде функции , в данном массиве элементы главной диагонали должны меняться местами. ...

Поменять местами элементы главной и побочной диагонали матрицы
Нужно помочь с тремя заданиями.(ниже) желательно сделать к ним и блок схемы. 1. Создать массив. Напечатать его в общепринятом...

Поменять местами максимальный элемент в главной диагонали матрицы
Дан двумерный массив B размера m*m. Поменять местами максимальный элемент в главной диагонали матрицы с минимальным элементом в побочной...

Найти количество нулевых элементов матрицы, стоящих: выше главной диагонали; ниже главной диагонали
Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной...

Найти количество нулевых элементов матрицы, стоящих: выше главной диагонали; ниже главной диагонали
Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru