Есть квадратная матрица, каждый элемент которой пронумерован. Нужно вычислить
1) зная размерность матрицы и индексы элемента — его порядковый номер
2) Зная порядковый номер элемента и размерность матрицы — его индексы.
Т.е. (нумерация ведется с 0) элемента [1][1] имеет порядковый номер 5, элемент [2][2] — 9 и т.п.
1 2 3
4 5 6
7 8 9
P.S. Вопрос воспринимать в контексте красоты решения, решения «в лоб» не актуальны
Здравствуйте, loknalori, Вы писали:
L>Есть квадратная матрица, каждый элемент которой пронумерован. Нужно вычислить
L>1) зная размерность матрицы и индексы элемента — его порядковый номер
L>2) Зная порядковый номер элемента и размерность матрицы — его индексы.
L>Т.е. (нумерация ведется с 0) элемента [1][1] имеет порядковый номер 5, элемент [2][2] — 9 и т.п.
L>1 2 3
L>4 5 6
L>7 8 9
L>P.S. Вопрос воспринимать в контексте красоты решения, решения «в лоб» не актуальны
А в чем проблема? Если N — размерность матрицы, i, j — индексы, то есть
0 <= i,j < N, k — порядковый номер, то есть 1 <= k <= N*N, то
1) k = i*N + j + 1
2) j = (k — 1) % N; i = [(k-1)/N]
Здравствуйте, loknalori, Вы писали:
L>Т.е. (нумерация ведется с 0) элемента [1][1] имеет порядковый номер 5, элемент [2][2] — 9 и т.п.
L>1 2 3
L>4 5 6
L>7 8 9
Нет уж, извольте! Почему координаты — с 0, а линейный индекс — с 1 ?! Для пущей «красоты», что ли?
… << RSDN@Home 1.2.0 alpha rev. 655>>
имеется некоторая матрица, в которой находятся натуральные числа.
Зная число, необходимо найти его координаты в матрице. Элементы размещены таким образом:
На данный момент я нашёл последовательность, которой соответствует номера по крайней верхней горизонтали (1, 3, 4, 10…):
a(n) = if n mod 2 == 0 then n*(n+1)/2, otherwise (n-1)*n/2 + 1.
И крайней левой вертикали (1, 2, 6, 7…):
a(n) = n*(n+1)/2 if n is odd, otherwise (n-1)*n/2 + 1.
Однако пока что не могу додуматься, как это применить.
К примеру, единица в данной матрице имеет координаты [0, 0], а 19 [2, 3] и так далее.
uses crt;
const K=5;
type mat=array[1..k,1..k] of real;
var a,b:mat;
i,j,m,n:integer;
max1, max2, z:real;
imax1,jmax1,imax2,jmax2: byte;
procedure input (var c:mat);
var i,j:integer;
begin
for i:=1 to k do begin
for j:=1 to k do begin
c[i,j]:=random(50);
end; end;
end;
procedure print (var c:mat);
var i,j:integer;
begin
writeln('Massiv : ');
for i:=1 to k do begin
for j:=1 to k do begin
write(c[i,j]:5:0);
write(' ');
end;
writeln(' ') end;
end;
procedure SearchMax(var c:mat; var max:real; var im,jm: byte);
begin
max:=0;
for i:=1 to k do
for j:=1 to k do
if i = j then
begin
if c[i,j] > max then
begin
max:=c[i,j];
im:=i;
jm:=j;
end;
m:=i; n:=j;
end;
end;
begin
clrscr;
randomize;
input(a);
input(b);
print(a);
print(b);
max1:=0;
max2:=0;
searchmax(a,max1,imax1,jmax1);
searchmax(b,max2,imax2,jmax2);
writeln('');
writeln('x=',max1:6:0,', в строке ',imax1,', в столбце ',jmax1);
writeln('y=',max2:6:0,', в строке ',imax2,', в столбце ',jmax2);
readkey;
end.

5.1.Вводматриц, простейшиеоперации
5.1.1. Различныеспособыввода
Вводить небольшие по размеру матрицы удобно прямо из командной строки. Введите матрицу размерностью два на три:
|
3 |
1 |
−1 |
||
|
A = |
2 |
4 |
3 |
. |
Для хранения матрицы используйте двумерный массив с именем А. При вводе учтите, что матрицу А можно рассматривать как вектор-столбец из двух элементов, каждый из которых является вектор-строкой длиной три. Следовательно, строки при наборе отделяются точкой с запятой – рис. 5.1.
Рис. 5.1
Для изучения простейших операций над матрицами приведем еще несколько примеров. Рассмотрим другие способы ввода. Введите квадратную матрицу размера три так, как описано ниже:
|
4 |
3 |
−1 |
||
|
2 |
7 |
0 |
||
|
B = |
. |
|||
|
−5 |
1 |
2 |
||
Начните набирать в командной строке
>> B = [ 4 3 –1
Нажмите клавишу <Enter>. Обратите внимание, что MatLab ничего не вычислила. Курсор мигает на следующей строке без символа >>. Продолжите
|
Математическое программное обеспечение. Учебное пособие |
-45- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
ввод матрицы построчно, нажимая в конце каждой строки<Enter>. Последнюю строку завершите закрывающей квадратной скобкой. В результате получите
2 7 0 –5 1 2 B =
4 3 –1
2 7 0 –5 1 2
Еще один способ ввода матриц состоит в том, что матрицу можно трактовать как вектор-строку, каждый элемент которой является векторстолбцом. Например, матрицу два на три
|
3 |
−1 |
7 |
||
|
C = |
||||
|
4 |
2 |
0 |
||
можно ввести при помощи команды, показанной на рис. 5.2.
Рис. 5.2
Посмотрите переменные рабочей среды, набрав в командной строкеwhos.
5.1.2. Обращениекэлементамматриц
Доступ к элементам матриц осуществляется при помощи двух индексов – номеров строки и столбца, заключенных в круглые скобки – рис. 5.3.
|
Математическое программное обеспечение. Учебное пособие |
-46- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
Рис. 5.3
Элементы матриц могут входить в состав разных выражений– см.рис. 5.4.
Рис. 5.4
Расположение элементов матрицы в памяти компьютера определяет еще один способ обращения к ним. Матрица А размера m на n хранится в ви-
де вектора длины mn, в котором элементы матрицы расположены один за
другим построчно
[A (1, 1) A (1, 2) . . . A (1, n) . . . A (m, 1) A (m, 2) . . . A (m, n)].
Для доступа к элементам матрицы можно использовать один индекс, задающий порядковый номер элемента матрицы в векторе.
|
Математическое программное обеспечение. Учебное пособие |
-47- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
Матрица С, определенная в предыдущем разделе, содержится в векторе
[С (1, 1) С (1, 2) С (1, 3) С (2, 1) С (2, 2) С (2, 3)].
Индексация при помощи порядкового номера производится, как показано на рис. 5.5.
Рис. 5.5
5.1.3. Сложение, вычитание, умножение, транспонированиеивозведениевстепень
При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы обязано равняться числу строк второй матрицы. Сложение и вычитание матриц, так же как чисел и векторов, осуществляется при помощи знаков плюс и минус. Найдите сумму и разность матриц С и А, определенных выше (см. рис. 5.6).
Следите за совпадением размерности, иначе получите сообщение об ошибке.
Для умножения матриц предназначена звездочка – рис. 5.7. Умножение матрицы на число тоже осуществляется при помощи звез-
дочки, причем умножать можно как справа, так и слева – рис. 5.8.
|
Математическое программное обеспечение. Учебное пособие |
-48- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
Рис. 5.6
Рис. 5.7
|
Математическое программное обеспечение. Учебное пособие |
-49- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
Транспонирование матрицы так же, как и вектора, производится при помощи .’, а символ ‘ означает комплексное сопряжение. Для вещественных матриц эти операции приводят к одинаковым результатам – рис. 5.9.
Рис. 5.8
Рис. 5.9
|
Математическое программное обеспечение. Учебное пособие |
-50- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
Сопряжение и транспонирование матриц, содержащих комплексные числа, приведут к созданию разных матриц – рис. 5.10.
Рис. 5.10
Вспомните, что при вводе вектор-строк их элементы можно разделять или пробелами, или запятыми. При вводе матрицы К применены запятые для более наглядного разделения комплексных чисел в строке.
Возведение квадратной матрицы в целую степень производится с ис-
пользованием оператора (рис. 5.11).
Проверьте полученный результат, умножив матрицу саму на себя. Убедитесь, что вы освоили простейшие операции с матрицами в
MatLab. Найдите значение следующего выражения:
(A + C) B3 (A −C)Т .
Учтите приоритет операций: сначала выполняется транспонирование, потом возведение в степень, затем умножение, а сложение и вычитание производятся в последнюю очередь – рис. 5.12.
|
Математическое программное обеспечение. Учебное пособие |
-51- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
Рис. 5.11
Рис. 5.12
5.1.4. Перемножениематрицыивектора
Поскольку вектор-столбец или вектор-строка в MatLab являются матрицами, у которых один из размеров равен единице, все вышеописанные операции применимы и для умножения матрицы на вектор или вектор-строки на матрицу. Например, вычисление выражения
|
Математическое программное обеспечение. Учебное пособие |
-52- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.1.Ввод матриц, простейшие операции
|
2 |
0 |
1 |
−8 |
||||
|
[1 3 |
− 4 |
8 |
3 |
||||
|
− 2] |
−1 |
||||||
|
0 |
9 |
2 |
4 |
||||
см. на рис. 5.13.
Рис. 5.13
Вматематике ничего не говорится про деление матриц и векторов, однако
вMatLab символ используется для решения систем линейных уравнений.
5.2. Решениесистемлинейныхуравнений
Решите небольшую систему, состоящую из трех уравнений, с тремя неизвестными:
1.2x1 + 0.3x2 −0.2x3 =1.3;0.5x1 + 2.1x2 +1.3x3 = 3.9;−0.9x1 + 0.7x2 +5.6x3 = 5.4.
Введите матрицу системы в массив А, для вектора правой части используйте массив b. Решите систему при помощи символа (рис. 5.14).
|
Математическое программное обеспечение. Учебное пособие |
-53- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.2.Решение систем линейных уравнений
Рис. 5.14
Проверьте, правильный ли получился ответ, умножив А на х. Алгоритм решения систем линейных уравнений при помощи операто-
ров в MatLab определяется структурой матрицы коэффициентов системы. В частности, MatLab исследует, является ли матрица треугольной, или может быть приведена перестановками строк и столбцов к треугольному виду, симметричная матрица или нет, квадратная или прямоугольная (MatLab умеет решать системы с прямоугольными матрицами – переопределенные или не-
доопределенные). Решать системы при помощи разумно, когда выбор алгоритма решения поручается MatLab. Если же имеется информация о свойствах матрицы системы, то лучше использовать специальные методы.
Решение систем небольшой размерности можно выполнить, введя матрицу системы и вектор правой части непосредственно из командной строки. Однако часто требуется найти решение системы, состоящей из большого числа линейных уравнений, причем матрица и вектор правой части системы хранятся в файлах.
5.3. Считываниеизаписьданных
Перед нами стоит задача – решить систему линейных уравнений, матрица и вектор правой части которой хранятся в текстовых файлахmatr.txt, rside.txt, и записать результат в файлsol.txt. Матрица записана в файле построчно, элементы в сроке отделены пробелом, вектор правой части записан в столбик.
Подготовьте файлы с данными, например, в стандартной программе windows-блокнот (NotePad). Скопируйте файлы matr.txt, rside.txt в подкаталог work основного каталога MatLab. Для считывания из файла используйте
команду load, для записи – save (рис. 5.15).
|
Математическое программное обеспечение. Учебное пособие |
-54- |

5.ДВУМЕРНЫЕ МАССИВЫ И МАТРИЦЫ
5.3.Считывание и запись данных
Рис. 5.15
Параметр – ascii означает запись в текстовом формате и может исполь-
зоваться в каталоге work для создания файла sol.txt, в котором будет записано
решение. Посмотреть содержимое файла можно, используя любой текстовый редактор. Для записи результата в файл с двойной точностью следует ис-
пользовать команду save ‘sol.txt’ x –ascii–double.
Аналогично можно записать матрицу в текстовый файл. Запись, на-
|
пример матрицы А, хранящейся в массиве А, в файл |
sol.txt осуществляется |
|
командой save ‘sol.txt’ A –ascii. |
|
Математическое программное обеспечение. Учебное пособие |
-55- |
Соседние файлы в папке 3324_KT
- #
- #
- #
- #
Перейти к содержанию
Найти наибольший элемент и его порядковый номер в массиве
Просмотров 17.8к. Обновлено 15 октября 2021
Заполнить одномерный массив случайными числами. Найти и вывести на экран наибольший его элемент и порядковый номер этого элемента.
Заполнение массива и поиск наибольшего элемента можно выполнять в одном цикле.
Поскольку необходимо найти не только максимальный элемент, но и его индекс, то лучше искать индекс, так как по нему всегда можно получить значение из массива. Конечно, при поиске можно сохранять и индекс, и элемент в двух разных переменных. Однако этого делать не обязательно. До цикла присвоим переменной, в которой будет храниться индекс максимального элемента, значение 1. Это значит, предполагается, что максимальный элемент находится в первой ячейке массива.
Тело цикла будет состоять из следующих действий:
- Сгенерировать случайное число и записать его в очередную ячейку массива.
- Вывести полученное число на экран.
- Если это число больше, чем то, что хранится под индексом, записанным в переменную-максимум, то присвоить этой переменной текущий индекс (не само число!).
После того, как индекс наибольшего элемента будет найден, вывести его на экран. Чтобы вывести элемент по данному индексу, надо использовать выражение извлечения элемента из массива. Например, если max — это индекс, а arr — массив, то выражение будет таким: arr[max].
Pascal
найти максимальный элемент массива паскаль
const N = 10;
var
arr: array[1..N] of integer;
i, max: byte;
begin
randomize;
max := 1;
for i:=1 to N do begin
arr[i] := random(100);
write(arr[i], ' ');
if arr[max] < arr[i] then
max := i;
end;
writeln;
writeln('arr[',max,'] = ',arr[max]);
end.
64 26 99 37 57 64 6 21 48 19
arr[3] = 99
Язык Си
#include < stdio.h>
#define N 10
main() {
int arr[N], i, mx;
srand(time(NULL));
mx = 0;
for (i=0; i< N; i++) {
arr[i] = rand() % 100;
printf("%d ", arr[i]);
if (arr[i] > arr[mx])
mx = i;
}
printf("narr[%d] = %dn", mx, arr[mx]);
}
75 46 7 39 11 29 34 77 86 25
arr[8] = 86
Python
найти максимальный элемент массива python
from random import random
N = 10
arr = [0] * N
mx = 0
for i in range(N):
arr[i] = random() * 100
print("%.2f" % arr[i], end='; ')
if arr[i] > arr[mx]:
mx = i
print("narr[%d] = %.2f" % (mx, arr[mx]))
73.83; 16.23; 30.18; 27.41; 94.27; 46.27; 66.17; 61.07; 18.89; 61.16;
arr[4] = 94.27
КуМир
алг
нач
цел N = 10
целтаб arr[1:N]
цел mx, i
mx := 1
нц для i от 1 до N
arr[i] := irnd(100)
вывод arr[i], " "
если arr[mx] < arr[i] то
mx := i
все
кц
вывод нс,"arr[",mx,"] = ",arr[mx]
кон
57 78 14 96 76 9 19 36 45 54
arr[4] = 96
Basic-256
decimal 1
N = 10
dim arr(N)
mx = 0
for i=0 to N-1
arr[i] = rand * 100
print arr[i] + "; ";
if arr[i] > arr[mx] then mx = i
next i
print "Номер элемента: " + mx
print "Значение элемента: " + arr[mx]
21.9; 58.4; 24.4; 72.6; 88.5; 65.2; 56.6; 65.1; 72.6; 40.4;
Номер элемента: 4
Значение элемента: 88.5

