0 / 0 / 0 Регистрация: 03.05.2009 Сообщений: 14 |
|
1 |
|
Найти наибольший элемент матрицы и его индексы12.02.2010, 23:25. Показов 6498. Ответов 7
Дана действительная матрица размера 4 на N. Найти значение наибольшего по модулю элемента, а так же индексы этого элемента.
0 |
Law[L]esS 117 / 114 / 89 Регистрация: 31.10.2009 Сообщений: 191 |
||||
12.02.2010, 23:36 |
2 |
|||
1 |
Платежеспособный зверь 8818 / 4245 / 1618 Регистрация: 28.10.2009 Сообщений: 11,386 |
|
12.02.2010, 23:44 |
3 |
неправильная это программа. для одного значения она выдает верный ответ, а вписал randomize и начала лажу выдавать
0 |
Inadequate Retired 7726 / 2558 / 671 Регистрация: 17.10.2009 Сообщений: 5,100 |
||||
12.02.2010, 23:57 |
4 |
|||
Недосмотрел, что матрица действительная, но думаю, что такие мелочи ТС перепишет самостоятельно…
0 |
Law[L]esS 117 / 114 / 89 Регистрация: 31.10.2009 Сообщений: 191 |
||||
13.02.2010, 00:05 |
5 |
|||
0 |
Retired 7726 / 2558 / 671 Регистрация: 17.10.2009 Сообщений: 5,100 |
|
13.02.2010, 00:13 |
6 |
Law[L]esS, как-то у Вас нелогично чуток написана программа. Зачем 8 циклов? Непонятно…
0 |
117 / 114 / 89 Регистрация: 31.10.2009 Сообщений: 191 |
|
13.02.2010, 00:42 |
7 |
Law[L]esS, как-то у Вас нелогично чуток написана программа. Зачем 8 циклов? Непонятно… Отдельно заполнение массива, отдельно вывод, нахождение максимума, само число и его позиции.
0 |
Retired 7726 / 2558 / 671 Регистрация: 17.10.2009 Сообщений: 5,100 |
|
13.02.2010, 11:42 |
8 |
esS]Отдельно заполнение массива, отдельно вывод, нахождение максимума, само число и его позиции. То, что у Вас написано я понимаю, мне не понятно для чего Вы это сделали все отдельно…
esS]у Вас в программе будут указана только 1 пара координат, хотя число может встречатся более 1 раза Обычно в задачах такого рода и требуется найти координаты первого из максимальных если их несколько. Но даже если ТС будет нужно найти все, то я думаю, что у него не составит труда дописать несколько строк.
0 |
К оглавлению | Назад | Вперёд
Все программы, код которых выложен здесь, являются работоспособными. На момент написания программ использовалась среда PascalABC.Net 3.0 (и 3.3).
Простые задачи[править]
Максимальные элементы столбцов матрицы[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; Max: array [0..M - 1] of integer; begin for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := Random(10); Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; for var j := 0 to M - 1 do begin Max[j] := integer.MinValue; for var i := 0 to N - 1 do if A[i, j] > Max[j] then Max[j] := A[i, j]; end; Writeln('Максимумы:'); for var j := 0 to M - 1 do Write(Max[j]:3); end.
begin Print(MatrRandom(3, 3, 0, 10).Cols().Select(x -> x.Max())); end.
Смотрите также: реализация на C#.
Смотрите также: реализация на VB.
Количество двузначных чисел с четной суммой цифр[править]
Формула, по которой можно узнать сумму цифр двузначного числа: n div 10 + n mod 10.
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; C: integer; procedure Print(); // Производит вывод матрицы. begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := Random(100); Print(); for var i := 0 to N - 1 do for var j := 0 to M - 1 do if (Abs(A[i, j]) >= 10) and (Abs(A[i, j]) < 100) and ((A[i, j] div 10 + A[i, j] mod 10) mod 2 = 0) then Inc(C); WritelnFormat('Количество двузначных чисел с четной суммой цифр равно {0}.', C); end.
Смотрите также: реализация на С#.
Смотрите также: реализация на VB.
Наибольший по модулю элемент матрицы[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; Max, MaxI, MaxJ: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := -10 + Random(20); Print(); Max := 0; for var i := 0 to N - 1 do for var j := 0 to M - 1 do if Abs(A[i, j]) > Max then begin Max := Abs(A[i, j]); MaxI := i; MaxJ := j; end; WritelnFormat('Наибольший по модулю элемент матрицы с индексами [{0}, {1}] равен {2}.', MaxI, MaxJ, Max); end.
Смотрите также: реализация на C#.
Смотрите также: реализация на VB.
Поменять местами строки матрицы[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := Random(10); Print(); var i1 := Random(N); var i2 := Random(N); for var j := 0 to M - 1 do Swap(A[i1, j], A[i2, j]); Print(); end.
Смотрите также: реализация на C#.
Произведение элементов матрицы[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; Mult: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := 1 + Random(10); Print(); Mult := 1; for var i := 0 to N - 1 do for var j := 0 to M - 1 do Mult *= A[i, j]; WritelnFormat('Произведение элементов матрицы равно {0}.', Mult); end.
Узнать, сколько раз встречается данное число в матрице[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; C, K: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; end; begin Readln(K); for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := Random(10); Print(); for var i := 0 to N - 1 do for var j := 0 to M - 1 do if A[i, j] = K then Inc(C); WritelnFormat('Количество чисел, равных K, равно {0}.', C); end.
Смотрите также: реализация на C#.
Запись матрицы в список по столбцам[править]
begin var A := MatrRandom(); var L := new List<integer>(); for var j := 0 to Length(A, 1) - 1 do for var i := 0 to Length(A, 0) - 1 do L.Add(A[i, j]); L.ToArray().Println(); end.
Количество единиц в столбце, равное номеру столбца[править]
begin var A := MatrFill(ReadlnInteger(), ReadlnInteger(), 0); for var j := 0 to Length(A, 1) - 1 do for var i := 0 to j do A[i, j] := 1; A.Println(); end.
4 варианта заполнения матрицы по треугольникам[править]
const N = 10; var A: array [0..N - 1, 0..N - 1] of char; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do if (i > j) and (N - i - 1 > j) then A[i, j] := '+' else A[i, j] := '.'; for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]); Writeln(); end; end.
const N = 10; var A: array [0..N - 1, 0..N - 1] of char; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do if (i < j) and (N - i - 1 > j) then A[i, j] := '+' else A[i, j] := '.'; for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]); Writeln(); end; end.
const N = 10; var A: array [0..N - 1, 0..N - 1] of char; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do if (i < j) and (N - i - 1 < j) then A[i, j] := '+' else A[i, j] := '.'; for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]); Writeln(); end; end.
const N = 10; var A: array [0..N - 1, 0..N - 1] of char; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do if (i > j) and (N - i - 1 < j) then A[i, j] := '+' else A[i, j] := '.'; for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]); Writeln(); end; end.
Арифметические прогрессии в строках матрицы[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; IsProgression: boolean; begin for var i := 0 to N - 1 do begin WritelnFormat('Ввод {0}-ой строки:', i + 1); for var j := 0 to M - 1 do Readln(A[i, j]); end; IsProgression := true; if M > 2 then for var i := 0 to N - 1 do begin var D := A[i, 1] - A[i, 0]; for var j := 2 to M - 1 do if A[i, j] - A[i, j - 1] <> D then begin IsProgression := false; break; end; if not IsProgression then break; end; if IsProgression then Writeln('Каждая строка матрицы является арифметической прогрессией.') else Writeln('Существует несколько или одна строк, которые не являются арифметическими прогрессиями.'); end.
Средняя сложность[править]
Удаление строк с нулями[править]
const N = 4; M = 5; var A: array [0..N - 1, 0..M - 1] of integer; Size: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to Size - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; end; function HasZeros(i: integer): boolean; // Возвращает true, если i-ая строка матрицы имеет нули. begin Result := false; var j := 0; while (j < M) and not Result do begin if A[i, j] = 0 then Result := true; Inc(j); end; end; procedure RemoveStr(n: integer); // Удаляет i-ую строку матрицы. begin if Size > 0 then begin for var i := n to Size - 2 do for var j := 0 to M - 1 do A[i, j] := A[i + 1, j]; for var j := 0 to M - 1 do A[Size - 1, j] := -1; Dec(Size); end; end; begin Size := N; for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := Random(10); Print(); var i := 0; while i < Size do if HasZeros(i) then RemoveStr(i) else Inc(i); Print(); end.
Суммирование элементов строки до последнего отрицательного[править]
Суммировать положительные элементы строки до последнего отрицательного и записать в список. Если отрицательных чисел в строке нет — записать в список 0.
begin var Matrix := MatrRandom(5, 5, -10, 10).Print(); var R := Matrix.Rows().ToArray(); var L := new List<integer>; for var i := 0 to R.Length - 1 do if not R[i].Any(x -> x < 0) then L.Add(0) else begin var row := R[i].ToArray(); L.Add(row.Where((x, index) -> (x > 0) and (index < row.FindLastIndex(x -> x < 0))).Sum()); end; L.Println(); end.
Количество отрицательных элементов под главной диагональю[править]
const N = 4; var A: array [0..N - 1, 0..N - 1] of integer; C: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do A[i, j] := Random(10) - 3; Print(); for var i := 0 to N - 1 do for var j := 0 to N - 1 do if (i > j) and (A[i, j] < 0) then Inc(C); WritelnFormat('Количество отрицательных элементов под главной диагональю матрицы равно {0}.', C); end.
Смотрите также: реализация на C#.
Смотрите также: реализация на VB.
Минимальные элементы на пересечении строк и столбцов[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; Min, MinI, MinJ: integer; Found: boolean; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := Random(100); Print(); for var i := 0 to N - 1 do begin Min := integer.MaxValue; Found := true; for var j := 0 to M - 1 do if A[i, j] < Min then begin Min := A[i, j]; MinI := i; MinJ := j; end; for var i2 := 0 to N - 1 do if A[i2, MinJ] < Min then Found := false; if Found then break; end; if not Found then Writeln('Минимального элемента на пересечении строк и столбцов не найдено.') else WritelnFormat('Индексы минимального элемента {0} равны [{1}, {2}].', Min, MinI, MinJ); end.
Смотрите также: реализация на C#.
Максимальный элемент диагонали[править]
const N = 3; var A: array [0..N - 1, 0..N - 1] of integer; Max: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do A[i, j] := Random(10); Print(); Max := integer.MinValue; for var i := 0 to N - 1 do if A[i, i] > Max then Max := A[i, i]; WritelnFormat('Максимальный элемент диагонали равен {0}.', Max); end.
Последний элемент строки матрицы — сумма всех элементов в той же строке матрицы[править]
const N = 3; M = 3; var A: array [0..N - 1, 0..M - 1] of integer; i, j: integer; S: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(A[i, j]:5); Writeln(); end; end; begin for i := 0 to N - 1 do for j := 0 to M - 1 do A[i, j] := Random(10); Print(); for i := 0 to N - 1 do begin S := 0; for j := 0 to M - 2 do Inc(S, A[i, j]); A[i, j + 1] := S; end; Print(); end.
Заполнение матрицы одним циклом[править]
const N = 5; var A: array [0..N - 1, 0..N - 1] of integer; procedure Print(d: integer); begin for var i := 0 to Pred(N) do begin for var j := 0 to Pred(N) do Write(A[i, j]:d); Writeln(); end; Writeln(); end; begin for var i := 0 to Pred(Sqr(N)) do A[i div N, i mod N] := i; Print(4); end.
Сложные задачи[править]
Переворот главной диагонали[править]
const N = 4; var A: array [0..N - 1, 0..N - 1] of integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do A[i, j] := Random(10); Print(); for var i := 0 to N div 2 - 1 do Swap(A[i, i], A[N - i - 1, N - i - 1]); Print(); Readln(); end.
Переворот побочной диагонали[править]
const N = 4; var A: array [0..N - 1, 0..N - 1] of integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do A[i, j] := Random(10); Print(); for var i := 0 to N div 2 - 1 do Swap(A[i, N - i - 1], A[N - i - 1, i]); Print(); end.
Произведение ненулевых диагональных элементов[править]
const N = 4; var A: array [0..N - 1, 0..N - 1] of integer; M: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:3); Writeln(); end; end; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do A[i, j] := Random(4); Print(); M := 1; for var i := 0 to N - 1 do if (A[i, i] <> 0) and (i <> N div 2) then M *= A[i, i]; for var i := 0 to N - 1 do if A[i, N - i - 1] <> 0 then M *= A[i, N - i - 1]; WritelnFormat('Произведение ненулевых элементов равно {0}.', M); end.
Заполнение матрицы по правилу[править]
Вариант 1[править]
1 | 0 | 2 | 0 | 3 |
0 | 4 | 0 | 5 | 0 |
6 | 0 | 7 | 0 | 8 |
const N = 4; M = 7; var A: array [0..N - 1, 0..M - 1] of integer; V: integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:5); Writeln(); end; end; begin for var i := 0 to Pred(N) do begin for var j := 0 to Pred(M) do if (i + j) mod 2 = 0 then begin Inc(V); A[i, j] := V; end; end; Print(); end.
Вариант 2[править]
Правило заполнения:
1 | 2 | 3 | 4 | 5 |
2 | 1 | 2 | 3 | 4 |
3 | 2 | 1 | 2 | 3 |
4 | 3 | 2 | 1 | 2 |
5 | 4 | 3 | 2 | 1 |
const N = 5; var A: array [0..N - 1, 0..N - 1] of integer; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:5); Writeln(); end; end; begin for var d := -N + 1 to N - 1 do for var j := 0 to N - 1 do begin var i := j + d; if (i >= 0) and (i < N) then A[i, j] := Abs(d) + 1; end; Print(); end.
Смотрите также: реализация на C#.
Смотрите также: реализация на VB.
i := j + d можно рассматривать как функцию, где вместо f(x) пишется i, а вместо правой части выражения — j + d.
Вариант 3[править]
1 | 2 | 3 | 4 |
8 | 7 | 6 | 5 |
9 | 10 | 11 | 12 |
16 | 15 | 14 | 13 |
const N = 5; var A: array [0..N - 1, 0..N - 1] of real; Value: integer := Sqr(N); procedure Print(d: integer); begin for var i := 0 to Pred(N) do begin for var j := 0 to Pred(N) do Write(A[i, j]:d); Writeln(); end; Writeln(); end; begin if N mod 2 = 0 then for var i := Pred(N) downto 0 do for var j := 0 to Pred(N) do begin var f := i mod 2 <> 0; A[i, Ord(f) * j + Ord(not f) * (Pred(N) - j)] := Value; Dec(Value); end else for var i := Pred(N) downto 0 do for var j := 0 to Pred(N) do begin var f := i mod 2 = 0; A[i, Ord(f) * j + Ord(not f) * (Pred(N) - j)] := Value; Dec(Value); end; Print(3); end.
Заполнение матрицы по спирали[править]
const N = 10; var A: array [0..N - 1, 0..N - 1] of integer; i, j: integer; Count: integer; Value: integer; procedure Print(); begin for var i1 := 0 to N - 1 do begin for var j1 := 0 to N - 1 do Write(A[i1, j1]:6); Writeln(); end; end; begin repeat var b := Pred(N) - Count; while j <= b do begin A[i, j] := Value; Inc(j);Inc(Value); end; Inc(i);Dec(j); while i <= b do begin A[i, j] := Value; Inc(i);Inc(Value); end; Dec(i);Dec(j); while j >= Count do begin A[i, j] := Value; Dec(j);Inc(Value); end; Dec(i);Inc(j);Inc(Count); while i >= Count do begin A[i, j] := Value; Dec(i);Inc(Value); end; Inc(i);Inc(j); until Count > N div 2; Print(); end.
Транспонирование матрицы[править]
Пример транспонирования матрицы:
-1 | 2 | 4 | 0 | 7 |
3 | -5 | 24 | 9 | -3 |
-10 | -8 | -2 | -4 | 1 |
преобразовать в:
-1 | 3 | -10 |
2 | -5 | -8 |
4 | 24 | -2 |
0 | 9 | -4 |
7 | -3 | 11 |
const N = 3; M = 1; var MatrixA, MatrixB: array [,] of integer; procedure Print(a: array [,] of integer); begin Writeln('Матрица:'); for var i := 0 to Length(a, 0) - 1 do begin for var j := 0 to Length(a, 1) - 1 do Write(a[i, j]:3); Writeln(); end; end; begin SetLength(MatrixA, N, M); SetLength(MatrixB, M, N); for var i := 0 to N - 1 do for var j := 0 to M - 1 do MatrixA[i, j] := Random(10); for var i := 0 to N - 1 do for var j := 0 to M - 1 do MatrixB[j, i] := MatrixA[i, j]; Print(MatrixA); Print(MatrixB); end.
Сортировка столбцов матрицы по первой строке[править]
const N = 4; M = 7; type TData = auto class Key, Index: integer; end; var A: array [0..N - 1, 0..M - 1] of integer; Outcome: array [0..N - 1, 0..M - 1] of integer; DataArray: array [0..M - 1] of TData; procedure Print(); begin Writeln('Матрица:'); for var i := 0 to N - 1 do begin for var j := 0 to M - 1 do Write(Outcome[i, j]:3); Writeln(); end; end; procedure Sort(l, r: integer); begin var i := l; var j := r; var m := DataArray[Round((l + r) / 2)].Key; repeat while DataArray[i].Key < m do Inc(i); while DataArray[j].Key > m do Dec(j); if i <= j then begin Swap(DataArray[i], DataArray[j]); Inc(i); Dec(j); end; if l < j then Sort(l, j); if i < r then Sort(i, r); until i > j; end; begin for var i := 0 to N - 1 do for var j := 0 to M - 1 do A[i, j] := Random(10); for var j := 0 to M - 1 do DataArray[j] := new TData(A[0, j], j); Sort(0, M - 1); for var j := 0 to M - 1 do for var i := 0 to N - 1 do Outcome[i, j] := A[i, DataArray[j].Index]; Print(); end.
Узоры на матрицах[править]
Математика индексов матрицы — теория.
Бабочка[править]
const N = 10; var A: array [0..N - 1, 0..N - 1] of char; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do if (i <= N - j - 1) or (i <= j) then A[i, j] := '+' else A[i, j] := '.'; for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:2); Writeln(); end; end.
Песочные часы[править]
const N = 9; var A: array [0..N - 1, 0..N - 1] of char; begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do if (i <= N - j - 1) and (i <= j) or (i >= N - j - 1) and (i >= j) then A[i, j] := '+' else A[i, j] := '.'; for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:2); Writeln(); end; end.
Заполнение диагоналей матрицы по правилу[править]
0 | 1 | 2 | 3 | 4 |
0 | 0 | 1 | 2 | 3 |
0 | 0 | 0 | 1 | 2 |
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
const N = 10; var A: array [0..N - 1, 0..N - 1] of integer; K: integer; begin K := 1; for var D := 1 to N - 1 do begin for var i := 0 to N - 1 do for var j := 0 to N - 1 do if i <= j - D then A[i, j] := K; Inc(K); end; for var i := 0 to N - 1 do begin for var j := 0 to N - 1 do Write(A[i, j]:5); Writeln(); end; end.
uses crt; const n = 6; var a: array[1..4,1..n] of integer; i,j,max,o,p: integer; begin randomize; for i:= 1 to 4 do for j:= 1 to n do a[i,j]:= random(20)-8; for i:= 1 to 4 do begin writeln; for j:= 1 to n do write(a[i,j]:3); end; for i:= 1 to 4 do for j:= 1 to n do begin if abs(a[i,j]) > max then max:= abs(a[i,j]); end; for i:= 1 to 4 do for j:= 1 to n do begin if (a[i,j] = max) then begin writeln; writeln('maks element = ',max,' ego rasspolozhenie - [',i,',',j,']'); end; end; end.
Перейти к содержанию
Найти максимальные элементы столбцов матрицы
Просмотров 7.1к. Обновлено 15 октября 2021
Найти максимальный элемент каждого столбца матрицы.
При поиске наибольших элементов в столбцах внешний цикл должен перебирать столбцы, а внутренний — элементы в столбцах. Это значит, что во внутреннем цикле меняется первый индекс элемента, второй остается постоянным в рамках одной итерации внешнего цикла.
В теле внешнего цикла сначала предполагается, что наибольшим является первый элемент текущего столбца. Первый элемент каждого столбца имеет индекс строки, равный 1 (или 0 при индексации с нуля). Второй индекс — это номер столбца, определяется счетчиком внешнего цикла.
Далее в теле внешнего цикла выполняется внутренний цикл, перебирающий элементы текущего столбца, начиная со второго элемента столбца. В теле внутреннего цикла текущий элемент сравнивается с тем, что записан в переменной-максимуме. Если текущий больше, то он присваивается этой переменной.
После завершения внутреннего цикла переменная-максимум будет содержать наибольший элемент столбца, который можно вывести на экран.
Pascal
const N = 15; M = 10;
var
arr: array[1..N,1..M] of byte;
i,j,max: byte;
begin
randomize;
for i:=1 to N do begin
for j:=1 to M do begin
arr[i,j] := random(256);
write(' |',arr[i,j]:3,'| ');
end;
writeln;
end;
for i:=1 to M do
write(' ----- ');
writeln;
for j:=1 to M do begin
max := arr[1,j];
for i:=2 to N do
if arr[i,j] > max then
max := arr[i,j];
write(' ',max:3,' ');
end;
writeln;
end.
Пример(ы) выполнения программы на языке Pascal:| 75| |230| | 21| | 95| |219| |102| | 64| |125| | 8| |132|
|190| | 73| |127| | 85| |110| |188| | 45| |108| |104| |233|
| 85| |160| | 47| |158| | 32| | 75| | 59| |149| |175| |226|
|179| |208| |239| |238| |120| | 83| |120| |135| |252| | 19|
| 33| |217| |247| | 82| | 0| |125| |190| | 53| | 87| |186|
|239| | 48| | 29| | 35| |210| | 96| | 46| | 17| |106| |225|
|232| | 1| |201| | 1| | 54| |249| | 46| |179| |122| | 58|
| 66| |190| |161| | 84| | 88| | 33| |201| | 64| | 43| | 7|
|206| |114| |196| | 4| |137| |165| | 63| |144| |183| |121|
|151| | 9| |161| |120| |197| |228| | 20| |121| |176| |217|
|109| | 19| |188| |105| |114| |230| |217| |172| |194| |127|
|138| |222| |116| |132| | 92| |105| |222| | 73| | 94| | 16|
| 30| |127| |125| | 54| |134| |240| | 75| |227| |215| | 38|
| 87| | 64| |167| |191| |212| |157| | 62| |231| |166| |177|
|184| |179| |201| | 19| |242| |185| | 31| |226| |101| |123|
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
239 230 247 238 242 249 222 231 252 233
Язык Си
#include < stdio.h>
#define N 15
#define M 10
main() {
int arr[N][M], i, j, max;
srand(time(NULL));
for (i=0; i< N; i++) {
for (j=0; j< M; j++) {
arr[i][j] = rand() % 256;
printf(" |%3d| ", arr[i][j]);
}
printf("n");
}
for (j=0; j< M; j++)
printf(" ----- ");
printf("n");
for (j=0; j< M; j++) {
max = arr[0][j];
for (i=1; i< N; i++)
if (arr[i][j] > max)
max = arr[i][j];
printf(" %3d ", max);
}
printf("n");
}
Python
найти максимальный элемент столбца матрицы Python
from random import random
N = 15
M = 10
arr = []
for i in range(N):
lst = []
for j in range(M):
lst.append(int(random() * 256))
arr.append(lst)
for i in range(N):
for j in range(M):
print(" |%3d| " % arr[i][j], end='')
print()
for i in range(M):
print(" ----- ", end='')
print()
for j in range(M):
mx = arr[0][j]
for i in range(N):
if arr[i][j] > mx:
mx = arr[i][j]
print(" |%3d| " % mx, end='')
print()
КуМир
алг
нач
цел N = 15, M = 10
целтаб t[1:N,1:M]
цел mx, i, j
нц для i от 1 до N
нц для j от 1 до M
t[i,j] := irnd(256)
вывод " |",t[i,j]:3,"| "
кц
вывод нс
кц
нц для i от 1 до M
вывод " ----- "
кц
вывод нс
нц для j от 1 до M
mx := t[1, j]
нц для i от 2 до N
если t[i,j] > mx то
mx := t[i,j]
все
кц
вывод ' ',mx:3,' '
кц
кон
Basic-256
N = 15
M = 10
dim arr(N,M)
for i=0 to N-1
for j=0 to M-1
arr[i,j] = int(rand*90)+10
print arr[i,j] + " ";
next j
next i
for j=0 to M-1
print "-----";
next j
for j=0 to M-1
max = arr[0,j]
for i=1 to N-1
if arr[i,j] > max then max = arr[i,j]
next i
print max + " ";
next j
Долго проболел, не ходил в универ, задали:
Определить наибольший элемент в каждой строке матрицы A[B,C], где B<=10, C<=15.
Можете объяснить, что тут вообще надо сделать?
Виталина
111 золотой знак2 серебряных знака8 бронзовых знаков
задан 10 ноя 2014 в 11:50
У тебя есть матрица [10,15]:
- Делаешь цикл по строкам.
- Объявляешь переменную max = первому элементу в этой строке.
- Бежишь по строке и сравниваешь max с текущим элементом x[i,j].
- Если max < x[i,j] то max = x[i,j].
- Выводишь max (или записываешь куда-нибудь).
- Переходишь к следующей строке.
ответ дан 10 ноя 2014 в 12:14
whispeerwhispeer
8994 золотых знака12 серебряных знаков30 бронзовых знаков
2
Ну… Как что делать? Взять тетрадь у однокурсников и порешать задачи в ней, все.
А что непонятного? Наибольший элемент в наборе чисел (например, в массиве) определить умеете? Вот и прогоните определение наибольшего элемента для каждой из строк матрицы. (Как адресуются элементы в матрице, знаете?)
Обновление
Ну хоть с однокурсницами, девочки с первой парты обычно с удовольствием всё объясняют.
Насколько я понял задание, B
и C
— размеры матрицы, соответственно по иксу и по игреку. А числа в матрице любые.
Обновление 2
То есть вы
- заводите матрицу размера «с запасом»: 10 на 15;
- запрашиваете у юзера настоящие размеры. Проверяете, вылазят ли они за границы, если да, ругаетесь на юзера;
- вводите матрицу поэлементно;
- пробегаетесь по строкам, в каждой находите макс. элемент и выводите;
- PROFIT!
ответ дан 10 ноя 2014 в 12:04
VladDVladD
206k27 золотых знаков289 серебряных знаков521 бронзовый знак