С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для Werwolf_666999
0 / 0 / 2
Регистрация: 19.06.2010
Сообщений: 175

Найти в матрице самый большой элемент и перенести его в верхний правый угол

18.10.2012, 22:14. Показов 2658. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Не могу ни как понять как найти в матрице самый большой элемент и перенести его в верхний правый угол. Есть кусочек постройки матрици:
Создать матрицу NxM. И переставить её так, чтоб наибольший элемент оказался в верхнем - правом углу!

JavaScript
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
<style type="text/css">
#matrix input {width:30px;}
</style>
<form>
Размерность: <input type="text" id="dim">
<input type="button" value="Создать матрицу" onclick="CreateMatrix()">
<input type="button" value="Вычислить" onclick="Determ()">
</form>
 
<div id="matrix"></div>
<script type="text/javascript">
var matrix=[]; //глобальный двумерный массив - матрица
var dim=0;     //число строк и столбцов
function CreateMatrix(){
 dim= parseInt(document.getElementById('dim').value,10) || 0;
 if(dim<1 || dim>12){alert('Задайте число от 1 до 12'); return };
 var htmls='<table class="matrixtable">';
 for(var i=1; i<=dim; i++){
   htmls+= '<tr>';
   for(var j=1; j<=dim; j++){
     htmls+='<td><input type="text" value="0" id="i'+i+'j'+j+'"></td>';
   }
   htmls+= '</tr>';
 };
 htmls+= '</table>';
 document.getElementById('matrix').innerHTML = htmls;
};
function Determ(){
???
};
</script>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2012, 22:14
Ответы с готовыми решениями:

Найти максимальный элемент и перенести его в верхний левый угол
Всем привет! Нужна помощь, есть следующее задание: Дана вещественная матрица размером m x n. Переставляя ее строки и столбцы, добиться...

В заданной матрице найти самый большой отрицательный элемент и самый маленький положительный и вывести их на экран
Помогите пожалуйста с заданиями) Задание 1: Напишите программу, которая создает двухмерный массив и заполняет его по следующему принципу:...

В массиве X найти самый большой элемент и вывести его и его номер на экран, в массиве Y - самый маленький
С помощью датчика случайных чисел сформировать два массива X и Y размерностью 100 и 200 чисел в диапазоне от 0 до 1 и от 0 до 100...

5
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
19.10.2012, 08:37
запомните:
имена переменных, объектов, функций, идентификаторов, имён, классов, свойств объектов и прочего в DOM'e должны быть разными

если на странице есть элемент с id="matrix", то не должно быть на той же странице массива matrix

и это я не "придираюсь"
запустите следующий код в любом браузере
HTML5
1
2
<div id="matrix">123</div>
<script>alert (matrix.innerHTML);</script>
видите - в браузере автоматически создаётся объект под именем, которое является значением id тега и этот объект является ссылкой на сам тег
а вы своим ненужным определением матрицы этот объект "убиваете"
-----

в javascript'e нет матриц в классическом (математическом) их понятии
есть массивы (индексные и хеши)
все массивы в javascript'e - одномерные
однако каждый элемент одномерного массива в свою очередь может быть тоже массивом
именно таким образом и можно создать дву-, трёх- и прочие многомерные массивы
-----

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

и в таблице имеется индексная коллекция строк rows, а в каждой строке - индексная коллекция ячеек cells
так что к каждому элементу этой "матрицы" можно получить доступ как раз используя два индекса - по строкам, и по ячейкам
в общем случае для ячейки j-той строки и k-того столбца - table.rows [j].cells [k]

мысль поняли?
не нужен вам объявленный вами "глобальный двумерный массив - матрица"
просто таблица на странице нужна
-----

ваш код как бы создаёт таблицу
но, во-первых, совершенно пустую - ни в одной ячейке ничего нет
потому непонятно, как вы из многих одинаковых "пустот" собираетесь выискивать какую-то максимальную "пустоту" и помещать её в верхний правый угол?

мей би, вам надо, чтобы скрипт сгенерировал матрицу со случайными элементами?
и уже потом среди этих случайных чисел искал максимальное и помещал его в нужном месте?

во-вторых, вы совершенно напрасно старались и создавали id у каждой ячейки таблицы: выше я вам уже написал, что коллекция строк и много коллекций ячеек (в каждой строке) в таблице имеются автоматически; доступ к любой ячейке возможен по её индексам и без каких-либо id
------

в общем, если и после этих моих замечаний сами не справитесь, то более внятно опишите условие задачи, помогу
а именно:
1) где и как берутся значения элементов матрицы?
2) если их надо генерировать случайным образом, то каков формат этих чисел
они целые? положительные? три знака после запятой? и тыдыитыпы
3) опишите правило, по которому максимальное число "перемещается" в правый верхний угол
как именно перемещается?
просто значение из правого верхнего угла меняется местами с максимальным?
или как-то иначе?
1
 Аватар для Werwolf_666999
0 / 0 / 2
Регистрация: 19.06.2010
Сообщений: 175
19.10.2012, 08:51  [ТС]
kalabuni, Ого! Как всё запущенно у меня!))) Ну попробовал маленько:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var maxIndex1 = 0; 
var maxIndex2 = 0; 
var matrix = Array(2); 
matrix[0] = [0,1]; 
matrix[1] = [2,3]; 
for(var i = 0; i < matrix.length; i++) 
{ 
for(var j = 0; j < matrix.length; j++) 
if(matrix[ i ][j] > matrix[maxIndex1][maxIndex2]) 
{ 
maxIndex1 = i; 
maxIndex2 = j; 
} 
} 
var temp = matrix[0][1]; 
matrix[0][1] = matrix[maxIndex1][maxIndex2]; 
matrix[maxIndex1][maxIndex2] = temp; 
for(var i = 0; i < matrix.length; i++) 
{ 
document.write(matrix[ i ].join(" ")+"<"+"br"+"/>");
Мысль понял вашу. Только знаний не хватает мне реализовать! Я только 3 день с JS сижу!
Ну это малький. Ну а как тогда чтоб с генерировал матрицу (хотя бы 4 на 4) целых чисел?
И Там желательно, чтоб строки и столбцы менялись так чтоб больший был в углу!)))
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
19.10.2012, 08:55
Цитата Сообщение от Werwolf_666999 Посмотреть сообщение
Мысль понял вашу.
вы как раз НИЧЕГО НЕ ПОНЯЛИ

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

но вы с упорством, достойным иного применения, лепите и лепите массив...
зачем?
-----

ещё раз - если хотите, чтобы вам помогли, распишите внятно условия задачи
по пунктам - я их, эти пункты, в конце последнего своего сообщения привел
1
 Аватар для Werwolf_666999
0 / 0 / 2
Регистрация: 19.06.2010
Сообщений: 175
19.10.2012, 09:07  [ТС]
kalabuni, Извините.
Создать матрицу размером X на Y. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в верхнем левом углу.
Такое вот задание...
1) где и как берутся значения элементов матрицы?
надо с генерировать случайным образом: (можно вводит размер XY в ручную или установить уже самому 4 на 4)
2) если их надо генерировать случайным образом, то каков формат этих чисел
они целые? положительные? три знака после запятой? и тыдыитыпы

Желательно только целые и положительные...
3) опишите правило, по которому максимальное число "перемещается" в правый верхний угол
как именно перемещается?
просто значение из правого верхнего угла меняется местами с максимальным?
или как-то иначе?

По заданию: Переставлять ее строки и столбцы...
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
19.10.2012, 15:53
тело документа
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<body onload="document.getElementById ('rw').focus ()">
Укажите размеры матрицы:<tt><ul>
<li>количество строк &nbsp;&nbsp;&nbsp;(от 2 до 16) <input id="rw" maxlength="2" size="2">
<li>количество столбцов (от 2 до 16)                <input id="cl" maxlength="2" size="2">
</ul></tt>
<input id="bG" type="button" value="Сгенерировать матрицу" onclick="Generator ()" disabled>
<script>
// запускаем проверку ввода
// кнопка генерации становится доступной, когда в обоих полях ввода - числа от 2 до 16
var sI = setInterval (function ()
{
var R = document.getElementById ('rw').value, // значение поля "количество строк"
    C = document.getElementById ('cl').value; // значение поля "количество столбцов"
document.getElementById ('bG').disabled =
    ((R && !R.replace (/\d/g, '').length && R > 1 && R < 17)
  && (C && !C.replace (/\d/g, '').length && C > 1 && C < 17)) ? false : true;
}, 100);
</script>
</body>


код скриптового блока, помещаемого в хедер страницы
JavaScript
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
function Generator () // функция генерации матрицы
{
// фиксируем введённые значения 
document.getElementById ('rw').readOnly = true,
document.getElementById ('cl').readOnly = true,
document.getElementById ('bG').disabled = true,
 
// выключаем проверку ввода
clearInterval (sI);
 
// запоминаем в переменных введённые значения
var R = document.getElementById ('rw').value, // количество строк
    C = document.getElementById ('cl').value; // количество столбцов
 
// создаём таблицу из R строк и C столбцов
// заполняем её случайными целыми числами от 1 до R * C (пределы я сам выбрал, вы не указали)
// по условию задачи повторения элементов допустимы, см. "...наибольший элемент (ИЛИ ОДИН ИЗ НИХ)"
var tbl = document.createElement ('table'); tbl.id = 'tb', tbl.cellSpacing = tbl.cellPadding = 0,
tbl.border = 1, tbl.style.cssText = 'margin: 20px 0; border-collapse: collapse';
 
// метод insertRow () добавляет в таблицу строку; аргумент -1 указывает, что эту строку надо
// добавлять в самый конец коллекции строк 
 
// метод insertCell () добавляет в строку ячейку; аргумент -1 указывает, что эту ячейку надо
// добавлять в самый конец коллекции ячеек строки
 
// определим стиль для ячейки
var cs = 'width: 2.5em; height: 2.5em; text-align: center; background-color: #fff; font-weight: 400';
 
for (var r = 0; r < R; r++) for (var ro = tbl.insertRow (-1), c = 0; c < C; c++)
   {
   var ce = ro.insertCell (-1);
   ce.style.cssText = cs, ce.innerHTML = Math.max (Math.floor (Math.random () * R * C), 1);
   // метод Math.random () генерирует вещественное число в пределах от 0 до 1 включительно;
   // метод Math.floor () возвращает минимальное целое, т.е. от 0 до R * C включительно;
   // нижний предел 0 нам не нужен, поэтому используем метод Math.max (), который
   // возможный ноль заменит на 1
   }
 
// выводим готовую таблицу на страницу
document.body.appendChild (tbl);
 
// создаём кнопку для запуска преобразования матрицы
var btn = document.createElement ('input'); btn.id = 'bT'; btn.type = 'button',
btn.value = 'Преобразовать матрицу';
 
// прописываем инструкцию запуска функции подготовки трансформации при клике по кнопке
btn.onclick = PreTransformer;
 
// выводим готовую кнопку на страницу
document.body.appendChild (btn);
}
 
function PreTransformer () // функция подготовки к преобразованию матрицы
{
document.getElementById ('bT').disabled = true; // отключаем кнопку
 
var tbl = document.getElementById ('tb'); // объект-таблица, она же - наша матрица
 
// сначала надо найти максимальный элемент матрицы и его индексы,
// для чего "прокрутим" циклами все строки и все ячейки в строках
for (var ind, m = r = 0, rws = tbl.rows, lr = rws.length; r < lr; r++)
for (var c = 0, cls = rws [r].cells, lc = cls.length; c < lc; c++)
if (parseInt (cls [c].innerHTML) > m) m = parseInt (cls [c].innerHTML), ind = [r, c];
 
// теперь, не только "для красоты", выделим строку и столбец с этим элементом фоном
// cтроку можно было бы сразу, одной командой rws [ind [0]].style.backgroundColor = '#efefef';
// но будем делать циклом
for (c = 0; c < lc; c++) rws [ind [0]].cells [c].style.backgroundColor = '#efefef';
 
// красим теперь столбец
for (r = 0; r < lr; r++) rws [r].cells [ind [1]].style.backgroundColor = '#efefef';
 
// само значение тоже выделим - жирностью (опять же - не только для "для красоты")
rws [ind [0]].cells [ind [1]].style.fontWeight = 900;
 
// ну а потом начинаем переставлять строки и столбцы
// алгоритм перестановки выбрал таким: всякий раз проверяется - что дальше от требуемого
// положения - строка или столбец и переставляется то, что дальше
// таким образом, сначала они "уравняются по дальности", а последние "шаги"
// будут попеременными - сначала столбец, потом строка
 
// чтобы функции перестановки ничего не передавать (и не плодить глобальных переменных)
// используем атрибут LANG таблицы - он никогда никем не используется
// вставим туда в виде строки индексы максимальной ячейки, разделенные дефисом
tbl.lang = ind.join ('-');
 
// запускаем преобразование
TMR = setTimeout (Transformer, 2000); // выбрал время для шага в две секунды
}
 
function Transformer ()                           // функция преобразования матрицы
{
clearTimeout (TMR);                               // очищаем таймер
 
var tbl = document.getElementById ('tb'),         // объект-таблица, она же - наша матрица
    rws = tbl.rows,                               // коллекция строк таблицы
    t = tbl.lang.split ('-'),
    R = parseInt (t [0]),                         // индекс текущей строки
    C = parseInt (t [1]),                         // индекс текущего столбца
    L = document.getElementById ('cl').value - 1; // индекс последнего столбца
 
// так как функция Transformer может быть вызвана, когда достигли
// финального положения, проверяем это
 
if (R == 0 && C == L)                             // урряя! мы в финале
   {
   // убираем раскраску первой строки и последнего столбца
   for (var c = 0; c <= L ; c++) rws [0].cells [c].style.backgroundColor = '#fff';
   for (var r = 0, lr = rws.length; r < lr; r++)
      rws [r].cells [C].style.backgroundColor = '#fff';
 
   // убираем жирность
   rws [R].cells [C].style.fontWeight = 400;
 
   alert ('Преобразование завершено');            // сообщаем юзеру о завершении
   return;                                        // выходим из функции
   }
 
// если на данном этапе мы ещё в функции, то, значит, надо ещё что-то переставить
 
// определяем, что "дальше" от требуемого положения - строка или столбец
if (R > L - C)                            // если строка "дальше" столбца, переставляем строку
   {
   // меняемся свойствами ячеек текущей строки со строкой выше (фон, значения и жирность)
   for (var c = 0; c <= L; c++)
      {
      var tmp = rws [R].cells [c].innerHTML;
      rws [R].cells [c].innerHTML = rws [R - 1].cells [c].innerHTML,
      rws [R - 1].cells [c].innerHTML = tmp;
 
      if (c == C)
         rws [R].cells [C].style.fontWeight = 400,
         rws [R - 1].cells [C].style.fontWeight = 900;
      else
         rws [R].cells [c].style.backgroundColor = '#fff',
         rws [R - 1].cells [c].style.backgroundColor = '#efefef';
      }
   // запоминаем новые индексы
   tbl.lang = (R - 1) + '-' + C;
   }
else // столбец "дальше" строки, переставляем столбец - перекрашиваем, меняем значения и жирность
   {
   for (var r = 0, lr = rws.length; r < lr; r++)
      {
      if (r == R)
         rws [R].cells [C].style.fontWeight = 400,
         rws [R].cells [C + 1].style.fontWeight = 900;
      else
         rws [r].cells [C].style.backgroundColor = '#fff',
         rws [r].cells [C + 1].style.backgroundColor = '#efefef';
 
 
      var tmp = rws [r].cells [C].innerHTML;
      rws [r].cells [C].innerHTML = rws [r].cells [C + 1].innerHTML,
      rws [r].cells [C + 1].innerHTML = tmp;
      }
   // запоминаем новые индексы
   tbl.lang = R + '-' + (C + 1);
   }
// вновь запускаем таймер - для следующей перестановки
TMR = setTimeout (Transformer, 2000);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2012, 15:53
Помогаю со студенческими работами здесь

Путем перестановок строк и столбцов элемент переместить в правый верхний угол подмассива (С Turbo Pascal на C++)
Можете программу преобразовать в C++?? Задан двумерный массив N x N. Последовательно рассматриваются квадратные подмассивы, правый...

Переместить самый максимальный элемент массива в левый верхний угол
Облазил кучу тем, но везде идет перестановка столбцов и строк, но это не то. Пожалуйста помогите, как сделать чтобы самый максимальный...

Переставляя строки и столбцы матрицы, переместить max (min) элемент в левый (правый) верхний (нижний) угол
Дана квадратная матрица порядка n*n . Переставляя её строки и столбцы, добиться того, чтобы max(min) элемент оказался в левом (правом)...

Найти самый большой элемент матрицы по модулю и его индекс
дана квадратная матрица размером . найти самый большой элемент по модулю и его индекс.

Путем перестановок строк и столбцов (целиком) элемент надо переместить в правый верхний угол подмассива (Перевести программу в c++)
program zadanie_5; uses crt; const nn=5; var i, j, imax, jmax, n, k, m: integer; a: array of real; r: real;...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru