Как найти минимальный элемент матрицы паскаль

0 / 0 / 1

Регистрация: 13.01.2017

Сообщений: 31

1

Найти минимальный элемент в матрице

15.03.2017, 00:05. Показов 6214. Ответов 1


Студворк — интернет-сервис помощи студентам

1.Заполнить матрицу m*n с клавиатуры. Найти минимальный элемент в матрице.



0



Hitoku

1754 / 1346 / 1407

Регистрация: 28.10.2016

Сообщений: 4,267

15.03.2017, 00:25

2

Лучший ответ Сообщение было отмечено Pudge1488 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses crt;
var
  a:array [1..100,1..100] of integer;
  i,j,min,n,m:integer;
begin
  clrscr;
  write('M,N = '); readln(m,n);
  for i:=1 to m do
    for j:=1 to n do begin
      write('A[',i,',',j,']= ');  readln(a[i,j]);
    end;
  clrscr;
  min:=a[1,1];
  for i:=1 to m do begin
    for j:=1 to n do begin
      write(a[i,j]:4);
      if a[i,j]<min then min:=a[i,j];
    end;
    writeln;
  end;
  write('Min = ',min);
end.



1





Мудрец

(12164),
закрыт



13 лет назад

Дополнен 13 лет назад

ГЛЮКИ:
program variant3;
var
a:array[1..10,1..5] of integer;
i,j,n,k,min,nmin:integer;
begin
readln(n,k);
for i:=1 to n do
for j:=1 to k do begin
writeln(‘a(‘,i,’;’,j,’)=’);
readln(a[i,j]);
end;
min:=a[1,1];
nmin:= ???
for i:=1 to n do
for j:=1 to k do begin
if a[i,j]

Gennady

Гений

(59298)


13 лет назад

Доброго времени суток.

Ищите только индексы. По индексам всегда отобразите сам минимальный элемент

MinI := 1;
MinJ := 1;
for i:=1 to n do
for j:=1 to k do
if a[i,j] < a[MinI,MinJ] then begin
MinI := i;
MinJ := j;
end;
{индексы нашли}
WriteLn(A[MinI, MinJ]); {а так показываем минимальный элемент}

Удачи!

Vlad02Профи (556)

13 лет назад

В
if a[i,j] < a[MinI,MinJ] then begin
MinI := i;
MinJ := j;
end;
Пропущена строка собственно поиска минимального элемента
Соответственно нормальная программа выглядит примерно так:
program variant3;
const
Max_X=10;
Max_Y=5
Type
T_Arr= array[1.. Max_X,1.. Max_Y] of integer;
var
a: T_Arr;
i,j,n,k,min,minI,minJ:integer;
begin
Write(‘Строк=’);
readln(n);
Write(‘Столбцов=’);
readln(k);
for i:=1 to n do
for j:=1 to k do begin
writeln(‘a(‘,i,’;’,j,’)=’);
readln(a[i,j]);
end;
min:=a[1,1];
minI:=1;
minJ:=1 ;
for i:=1 to n do
for j:=1 to k do begin
if a[i,j]

Vlad02Профи (556)

13 лет назад

А сам минимальный элемент вам на блюдечке? или третий цикл перебора? Вот мой вариант и ищет ОДНОВРЕМЕННО минимальный элемент массива и его индексы, а ваш на выходе выдаст элемент за номером 1,1 , можете компильнуть и проверить

Vlad02Профи (556)

13 лет назад

Насчет подсчетов вызовов в вашем вариант осуществляется за цикл ДВА ОБЯЗАТЕЛЬНЫХ вызова элемента массива в моём ОДИН ОБЯЗАТЕЛЬНЫЙ и один в случае выполнения условия сравнения, то есть в наихудшем варианте(монотонно убывающий массив) мой вариант по количеству вызовов равен вашему, в остальных случаях имеем количество необязательных вызовов равное количеству элементов меньших чем все предыдущие, а в среднем это как минимум в 1Ю5 раза меньше, на массивах под милион элементов с динамическим вызовом это скажется существенно, ну а мой последний вариант вообще массивы не использует:)

Vlad02

Профи

(556)


13 лет назад

Собственно Геннадий напомнил студенчество, и соответственно простейшее решение задачи 🙂 с приведёнными требованиями

program variant3;
Var
i,j, IndexI,IndexJ,MinI,MinJ:integer;
x,y:real;{необходимый тип}
begin
y:=1,8e38;{наибольшее возможное число для данного типа}
write(‘Число столбцов=’);
readln(IndexJ);
write(‘Число строк=’);
readln(IndexI);
write(‘Элемент [‘,i,’;’,j’]=’);
readln(x);
for i:=1 to IndexI do
for i:=1 to IndexI do
if x

Vlad02Профи (556)

13 лет назад

Сожрала и исковеркала программу-program variant3;
Var
i,j, IndexI,IndexJ,MinI,MinJ:integer;
x,y:real;{необходимый тип}
begin
y:=1,8e38;{наибольшее возможное число для данного типа}
write(‘Число столбцов=’);
readln(IndexJ);
write(‘Число строк=’);
readln(IndexI);
for i:=1 to IndexI do
for j:=1 to IndexI do begin
write(‘Элемент [‘,i,’;’,j’]=’);
readln(x);
if x

Vlad02Профи (556)

13 лет назад

так как убивает после знака написал словом меньше
program variant3;
Var
i,j, IndexI,IndexJ,MinI,MinJ:integer;
x,y:real;{необходимый тип}
begin
y:=1,8e38;{наибольшее возможное число для данного типа}
write(‘Число столбцов=’);
readln(IndexJ);
write(‘Число строк=’);
readln(IndexI);
for i:=1 to IndexI do
for j:=1 to IndexI do begin
write(‘Элемент [‘,i,’;’,j’]=’);
readln(x);
if x меньше y then begin y:=x;MinI:=i;MinJ:=j end;
end;{j}
write(‘Минимальный элемент X[‘,MinI,’;’,MinJ’]=’,y);
end.

Matrix23. Дана матрица размера $$M times N$$. В каждой строке матрицы найти минимальный элемент.

Решение:

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

program Matrix23;

var

  a:array [1..10,1..10] of integer;

  Min,M, N, i, j:Integer;

begin

Write(‘N: ‘);

Readln(N);

Write(‘M: ‘);

Readln(M);

for  i:=1 to M do

  begin

   writeln(i,‘: ‘);

   for j:=1 to N do

    begin

     Write(j,‘ : ‘);

     Read(a[i,j]);

    end;

  end;

for  i:=1 to M do

  begin

   writeln(i,‘: ‘);

   Min:=a[i,1];

   for j:=2 to N do

    begin

     if a[i,j]<Min then Min:=a[i,j];

    end;

   writeln(‘Минимальный элемент:’,Min);

  end;

end.

Другие задачи из раздела Matrix можно посмотреть здесь.

const n=11;
var a:array[1..n,1..n] of byte;
    i,j,mn,imn,jmn:byte;
    s:integer;
    f:text;
begin
randomize;
assign(f,'output.txt');
rewrite(f);
writeln('Исходная матрица');
writeln(f,'Исходная матрица');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=1+random(100);
    write(f,a[i,j]:4);
    write(a[i,j]:4);
    if i+j=2 then
     begin
      mn:=a[1,1];
      imn:=1;
      jmn:=1;
     end
    else if a[i,j]<mn then
     begin
      mn:=a[i,j];
      imn:=i;
      jmn:=j;
     end
   end;
  writeln(f,'');
  writeln('');
 end;
writeln(f,'Минимальный элемент a[',imn,',',jmn,']=',mn);
writeln('Минимальный элемент a[',imn,',',jmn,']=',mn);
writeln(f,'Измененная матрица');
writeln('Измененная матрица');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    if(i=imn)or(j=jmn) then a[i,j]:=0;
    write(f,a[i,j]:4);
    write(a[i,j]:4);
   end;
  writeln(f,'');
  writeln('');
 end;
writeln(f,'Суммы элементов в столбцах');
writeln('Суммы элементов в столбцах');
for j:=1 to n do
 begin
  s:=0;
  for i:=1 to n do
  s:=s+a[i,j];
  writeln(f,j:2,'=',s:4);
  writeln(j:2,'=',s:4);
 end;
close(f);
end.

Перейти к содержанию

Индексы минимальных элементов матрицы

Просмотров 3.8к. Обновлено 15 октября 2021

Вывести на экран индексы всех минимальных элементов матрицы.

Эта задача отличается от поиска минимума тем, что нужно найти и вывести на экран не само минимальное значение, а его индексы (позицию, положение в матрице). Кроме того, минимальных (но равных между собой) значений в массиве может быть несколько. Следовательно, разумно вывести индексы всех минимальных элементов.

Задача складывается из двух подзадач, которые должны быть решены последовательно:

  1. Поиск минимума в массиве (в данном случае двумерном).
  2. Поиск элементов, равных ранее найденному минимуму.

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

Алгоритм поиска минимального значения:

  1. Присвоить minimum максимально возможное (или больше) значение для исследуемого массива.
  2. Перебрать элементы матрицы (используя конструкцию вложенного цикла). Каждый элемент сравнивать со значением minimum. Если очередной элемент меньше значения minimuma, то следует присвоить значение текущего элемента переменной minimum.

Алгоритм определения позиций всех минимальных элементов матрицы:

  1. Снова перебираем элементы матрицы.
  2. Сравниваем каждый элемент со значением minimum.
  3. Если они равны между собой, то выводим индексы текущего элемента на экран. (Индексы текущего элемента — это значения счетчиков первого и второго циклов.)

Примечания:

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

Pascal


const N = 5; M = 7;
var
mx: array[1..N,1..M] of integer;
min: integer;
i, j: byte;
begin
min := MAXINT;
randomize;
for i:=1 to N do begin
for j:=1 to M do begin
mx[i,j] := random(50) - 25;
write(mx[i,j]:4);
if mx[i,j] < min then min:=mx[i,j];
end;
writeln;
end;
writeln('Минимальное значение: ', min);
for i:=1 to N do
for j:=1 to M do
if mx[i,j] = min then
writeln('строка: ', i, '; столбец: ', j);
end.



-19 6 3 18 -12 -3 24
-4 15 -6 19 -15 -1 4
6 -9 -12 23 -3 3 -11
5 0 -11 -4 -19 -6 1
17 20 -1 6 17 -1 15
Минимальное значение: -19
строка: 1; столбец: 1
строка: 4; столбец: 5

Язык Си


#include < stdio.h>
#define M 7
#define N 5
main() {
int a[N][M];
int min, i, j;
srand(time(NULL));
min = 25;
for (i=0; i< N; i++) {
for (j=0; j< M; j++) {
a[i][j] = rand() % 50 - 25;
printf("%5d", a[i][j]);
if (min > a[i][j]) min = a[i][j];
}
printf("n");
}
printf("%dn", min);
for (i=0; i< N; i++) {
for (j=0; j< M; j++) {
if (min == a[i][j])
printf("row: %d, col: %dn", i+1, j+1);
}
}
}

Python

индекс минимального элемента массива python


from random import random
M = 7
N = 5
a = []
for i in range(N):
b = []
for j in range(M):
b.append(int(random()*50) - 25)
print("%4d" % b[j], end='')
a.append(b)
print()
min_mx = 25
for i in range(N):
min_i = min(a[i])
if min_i < min_mx:
min_mx = min_i
print(min_mx)
for i in range(N):
for j in range(M):
if min_mx == a[i][j]:
print('Row: %d, col: %d' % (i+1,j+1))



Пример выполнения:

-18 -23 -8 17 12 4 -22
16 -10 -18 6 -9 19 23
8 -1 -7 0 -9 24 -12
-5 16 14 -2 1 7 -16
-7 5 1 -23 -4 -4 17
-23
Row: 1, col: 2
Row: 5, col: 4

В языке Python есть встроенная функция min, которая возвращает минимальный элемент одномерного списка. Если же ее применить к двумерному списку, то она возвращает вложенный список, первый элемент которого оказывается минимальным.

Поэтому в коде поиска минимального элемента матрицы эта функция используется к каждой строке (вложенному списку) отдельно.

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

Классический вариант поиска минимального значения матрицы выглядел бы так:

… min_mx = 25 for i in range(N): for j in range(M): if a[i][j] < min_mx: min_mx = a[i][j] …

КуМир


алг индексы минимумов
нач
цел M = 7, N = 5
цел таб a[1:N,1:M]
цел i, j, minimum
minimum := 25
нц для i от 1 до N
нц для j от 1 до M
a[i,j] := int(rand(0,50)) - 25
вывод a[i,j]:4, " "
если minimum > a[i,j] то
minimum := a[i,j]
все
кц
вывод нс
кц
вывод minimum, нс
нц для i от 1 до N
нц для j от 1 до M
если minimum = a[i,j] то
вывод "строка: ",i, ", столбец: ",j, нс
все
кц
кц
кон

Basic-256


M = 7
N = 5
dim a(N,M)
min = 25
for i = 0 to N-1
for j=0 to M-1
a[i,j] = int(rand*50)-25
print a[i,j] + " ";
if min > a[i,j] then min = a[i,j]
next j
print
next i
print min
for i = 0 to N-1
for j=0 to M-1
if min = a[i,j] then print (i+1) + " " + ( j+1)
next j
next i

Добавить комментарий