Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 5

Получить новую матрицу, переставляя блоки исходной

12.02.2020, 10:17. Показов 859. Ответов 9

Студворк — интернет-сервис помощи студентам
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
75
76
77
78
79
80
81
82
83
84
const
 n = 3;
type
 Telement = byte;
 Tvector = array of Telement;
 Tmatrix_part = 1..4; // нумеруются 1 2
           //       3 4
var
 matrix: array of Tvector;
 i,j:byte;
 
procedure Exchange(const a,b:Tmatrix_part; var i:integer ;var j:integer);
var tmp:Telement;
  x1,y1,x2,y2:byte; // координаты обмениваемых кусков
begin
 case a of
  1 : begin x1:=0; y1:=0; end;
  2 : begin x1:=n; y1:=0; end;
  3 : begin x1:=0; y1:=n; end;
  4 : begin x1:=n; y1:=n; end;
 end;
 
 case b of
  1 : begin x2:=0; y2:=0; end;
  2 : begin x2:=n; y2:=0; end;
  3 : begin x2:=0; y2:=n; end;
  4 : begin x2:=n; y2:=n; end;
 end;
 
 for j:=0 to n-1 do
 for i:=0 to n-1 do
  begin
    tmp:=matrix[x1+i,y1+j];
    matrix[x1+i,y1+j]:=matrix[x2+i,y2+j];
    matrix[x2+i,y2+j]:=tmp;
  end;
end;
 
begin
 randomize;
 SetLength(matrix,2*n,2*n);
 for j:=0 to 2*n-1 do
 begin
 for i:=0 to 2*n-1 do
  begin
   matrix[i,j]:=random(10);
   write(matrix[i,j]:3);
  end;
  writeln;
 end;
 writeln;
 
 //вариант a)
 Exchange(1,2);
 Exchange(3,4);
 
 //выводим результат
 for j:=0 to 2*n-1 do
 begin
 for i:=0 to 2*n-1 do
   write(matrix[i,j]:3);
  writeln;
 end;
 writeln;
 
 //откатываем назад
 Exchange(1,2);
 Exchange(3,4);
 
 //вариант б)
 Exchange(1,4);
 Exchange(2,3);
 
  //выводим результат
 for j:=0 to 2*n-1 do
 begin
 for i:=0 to 2*n-1 do
   write(matrix[i,j]:3);
  writeln;
 end;
 writeln;
 
 readln;
end.
Миниатюры
Получить новую матрицу, переставляя блоки исходной  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2020, 10:17
Ответы с готовыми решениями:

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

Массив: Получить новую матрицу путем деления всех элементов исходной матрицы на ее наибольший по модулю элемент.
Задан двумерный массив А. Получить новую матрицу путем деления всех элементов исходной матрицы на ее наибольший по модулю элемент.

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

9
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
12.02.2020, 10:46
всё неправильно.

Тебя не смущает, например, что в процедуре ты описал 4 (четыре) параметра?
Цитата Сообщение от Mikhail12ru Посмотреть сообщение
Pascal
1
procedure Exchange(const a,b:Tmatrix_part; var i:integer ;var j:integer);
а при вызове указываешь два параметра:
Цитата Сообщение от Mikhail12ru Посмотреть сообщение
Pascal
1
Exchange(1,2);
формально это можно ( и нужно) исправить так:

Pascal
1
2
3
4
5
6
7
procedure Exchange(const a,b:Tmatrix_part);
var
   i,j : integer;
   tmp:Telement;
   x1,y1,x2,y2:byte; // координаты обмениваемых кусков
begin
...
но не уверен, что у тебя там ещё косяки не заложены...
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 5
12.02.2020, 19:20  [ТС]
Исправил, все равно не работает..
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
13.02.2020, 11:32
Цитата Сообщение от Mikhail12ru Посмотреть сообщение
Исправил, все равно не работает..
не "не работает", а не "компилируется"

ошибка в строке 41
Цитата Сообщение от Mikhail12ru Посмотреть сообщение
Pascal
1
SetLength(matrix,2*n,2*n);
замени эту строчку на две:
Pascal
1
2
 SetLength(matrix,2*n);
 for var ii:=Low(matrix) to High(matrix) do SetLength(matrix[ii],2*n);
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 5
13.02.2020, 21:01  [ТС]
скомпилировалось, но не совсем понятно как работает.... и удовлетряет ли поставленной задаче, на скрине кхм...
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
14.02.2020, 10:52
Цитата Сообщение от Mikhail12ru Посмотреть сообщение
скомпилировалось, но не совсем понятно как работает....
т.е. ты написал код, которые "не понятно как работает" ?! Поздравляю, не все так умеют!

Цитата Сообщение от Mikhail12ru Посмотреть сообщение
удовлетряет ли поставленной задаче, на скрине кхм...
на мой взгляд, удовлетворяет.
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 5
14.02.2020, 20:54  [ТС]
под , буквой а, должна быть замена крайних блоков, а разворот блоков, по часовой стрелке, не могу понять, как оптимизировать код, помогите. так то работает, но в идеале должна быть запись другая...
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
75
76
77
78
79
const
 n = 1;
type
 Telement = byte;
 Tvector = array of Telement;
 Tmatrix_part = 1..4; // нумеруются 1 2
           //       3 4
var
 matrix: array of Tvector;
 i,j:byte;
 
procedure Exchange(const a,b:Tmatrix_part);
var
   i,j : integer;
   tmp:Telement;
   x1,y1,x2,y2:byte; // координаты обмениваемых кусков
begin
 case a of
  1 : begin x1:=0; y1:=0; end;
  2 : begin x1:=n; y1:=0; end;
  3 : begin x1:=0; y1:=n; end;
  4 : begin x1:=n; y1:=n; end;
 end;
 
 case b of
  1 : begin x2:=0; y2:=0; end;
  2 : begin x2:=n; y2:=0; end;
  3 : begin x2:=0; y2:=n; end;
  4 : begin x2:=n; y2:=n; end;
 end;
 
 
 for i:=0 to n-1 do
 for j:=0 to n-1 do
  begin
    tmp:=matrix[x1+i,y1+j];
    matrix[x1+i,y1+j]:=matrix[x2+j,y2+i];
    matrix[x2+j,y2+i]:=tmp;
  end;
end;
 
begin
 randomize;
 SetLength(matrix,2*n);
 for var ii:=Low(matrix) to High(matrix) do SetLength(matrix[ii],2*n);
 
 for i:=0 to 2*n-1 do
 begin
 
 for j:=0 to 2*n-1 do
  begin
   matrix[i,j]:=random(10);
   write(matrix[i,j]:3);
  end;
  writeln;
 end;
 writeln;
 
 
 Exchange(3,1);
 Exchange(4,2);
 
 Exchange(1,2);
 Exchange(3,4);
 
 //вариант а)
 Exchange(3,1);
 Exchange(4,2);
 
  //выводим результат
 for j:=0 to 2*n-1 do
 begin
 for i:=0 to 2*n-1 do
   write(matrix[i,j]:3);
  writeln;
 end;
 writeln;
  
end.
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 5
15.02.2020, 09:06  [ТС]
спасибо нашел ошибку в case
0
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 15
30.09.2022, 20:35
Ребят, можете эту задачку на котлине написать?
0
Модератор
10419 / 5707 / 3401
Регистрация: 17.08.2012
Сообщений: 17,364
03.10.2022, 09:18
amanovtimur, создайте новую тему в разделе Kotlin.

В новой теме, если желаете, можете привести ссылку на эту тему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2022, 09:18
Помогаю со студенческими работами здесь

Получить новую строку путем копирования из исходной 5 символов
Написать программу в которой вводится одна строка и выполняются следующие действия 1) получить новую строку путем копирования из исходной...

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

Получить новую матрицу, переставляя блоки исходной
решите задачки!! пожалуйста

Получить новую матрицу, переставляя блоки исходной матрицы
Ребят, есть задача: Дана действительная квадратная матрица порядка 2n. Получить новую матрицу, переставляя ее блоки размера nxn. ...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru