Номер минимального по модулю элемента массива

ЗАДАЧА

Найти номер минимального по модулю элемента массива. Например, в массиве [10, -3, -5, 2, 5] минимальным по модулю элементом является число 2. Его номер 4 (в языках, в которых индексация массивов начинается с нуля, его индекс будет равен 3).

Если стоит задача найти минимальный (или максимальный) элемент по модулю, то значит при поиске нужно сравнивать не сами элементы массива, а их абсолютные значения (модули). Большинство языков программирования имеют встроенную функцию (например, abs()), которая возвращают модуль числа.

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

Алгоритм поиска индекса минимального по модулю элемента массива следующий:

  1. Вводим переменную (например, num) и присваиваем ей индекс первого элемента массива (0 или 1 в зависимости от особенностей языка программирования). Тем самым предполагаем, что первый элемент массива и является минимальным по модулю.
  2. Начинаем в цикле перебор массива со второго элемента и до конца. При этом в теле цикла в заголовке условного оператора (if) сравниваем модуль текущего элемента с модулем элемента, чей индекс хранится в переменной num.
  3. Если абсолютное значение текущего элемента массива меньше, чем элемента с индексом num, то в теле условного оператора присваиваем num индекс текущего элемента.
  4. После того, как цикл закончит свою работу, num будет содержать индекс минимального по модулю элемента. Выводим его на экран как есть или увеличиваем на единицу (номер элемента равен индексу при индексации массива с единицы, и на 1 больше индекса при индексации с нуля).

Данное решение задачи не совсем верное, так как находит только первый минимальный элемент. Однако в массиве их может быть несколько (равных между собой или равных между собой только по модулю). Например, в массе [1, 12, 4, 1, 5, 8, 3] минимальных два элемента: первый и четвертый.

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

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

Ниже в примерах решения задачи на языках программирования реализован первый упрощенный алгоритм (находится только первый минимальный по модулю элемент). Здесь приведем вариант решение задачи по второму алгоритму на языке Pascal:

Pascal



const N = 10;
var
arr: array[1..N] of integer;
i, num: byte;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(100)-50;
write(arr[i]:4);
end;
writeln;

num := 1;
for i:=2 to N do
if abs(arr[i]) < abs(arr[num]) then
num := i;

writeln(num);
end.



36 31 -46 -22 -29 -14 26 -41 15 29
6

Язык Си


#include < stdio.h>
#define N 10
main() {
int arr[N];
char i,num;
srand(time(NULL));
for (i=0; i< N; i++) {
arr[i] = rand()%100 - 50;
printf("%d ", arr[i]);
}
printf("\n");

num = 0;
for (i=1; i < N; i++) {
if (abs(arr[i]) < abs(arr[num]))
num = i;
}

printf("%d\n", num+1);
}



-38 32 39 35 -48 32 -31 -2 -24 -33
7

Python



from random import random
N = 10
arr = []
for i in range(N):
arr.append(int(random() * 100) - 50)
print(arr)

num = 0
for i in range(1, N):
if abs(arr[i]) < abs(arr[num]):
num = i
print(num+1)



[16, -27, 45, -39, 30, -19, 13, 4, 28, -37]
8

КуМир


алг минимальный по модулю
нач
цел N = 10
цел таб arr[1:N]
цел i,num
нц для i от 1 до N
arr[i] := irand(-50,50)
вывод arr[i]:4
кц
вывод нс

num := 1
нц для i от 2 до N
если abs(arr[i]) < abs(arr[num]) то
num := i
все
кц
вывод num, нс
кон



-6 -48 -33 20 -30 -24 -5 -33 28 -18
7

Basic-256


N = 10
dim arr(N)
for i=0 to N-1
arr[i] = int(rand*100) - 50
print arr[i] + " ";
next i
print

num = 0
for i=1 to N-1
if abs(arr[i]) < abs(arr[num]) then
num = i
endif
next i
print num+1



7 -11 -23 27 38 30 17 -41 45 42
1

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Pascal


const N = 10;
var
arr: array[1..N] of integer;
i, num: byte;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(100)-50;
write(arr[i]:4);
end;
writeln;

num := 1;
for i:=2 to N do
if abs(arr[i]) < abs(arr[num]) then
num := i;

writeln(num);
end.



36 31 -46 -22 -29 -14 26 -41 15 29
6
Язык Си

#include < stdio.h>
#define N 10
main() {
int arr[N];
char i,num;
srand(time(NULL));
for (i=0; i< N; i++) {
arr[i] = rand()%100 - 50;
printf("%d ", arr[i]);
}
printf("\n");

num = 0;
for (i=1; i < N; i++) {
if (abs(arr[i]) < abs(arr[num]))
num = i;
}

printf("%d\n", num+1);
}



-38 32 39 35 -48 32 -31 -2 -24 -33
7
Python


from random import random
N = 10
arr = []
for i in range(N):
arr.append(int(random() * 100) - 50)
print(arr)

num = 0
for i in range(1, N):
if abs(arr[i]) < abs(arr[num]):
num = i
print(num+1)



[16, -27, 45, -39, 30, -19, 13, 4, 28, -37]
8
КуМир

алг минимальный по модулю
нач
цел N = 10
цел таб arr[1:N]
цел i,num
нц для i от 1 до N
arr[i] := irand(-50,50)
вывод arr[i]:4
кц
вывод нс

num := 1
нц для i от 2 до N
если abs(arr[i]) < abs(arr[num]) то
num := i
все
кц
вывод num, нс
кон



-6 -48 -33 20 -30 -24 -5 -33 28 -18
7
Basic-256

N = 10
dim arr(N)
for i=0 to N-1
arr[i] = int(rand*100) - 50
print arr[i] + " ";
next i
print

num = 0
for i=1 to N-1
if abs(arr[i]) < abs(arr[num]) then
num = i
endif
next i
print num+1



7 -11 -23 27 38 30 17 -41 45 42
1