Максимальный отрицательный элемент массива

Задача

В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве.

Пояснение к задаче и алгоритм решения

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

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

Перебираем массив в цикле. Если очередной элемент меньше нуля и значение переменной A равно -1, то значит, это первый встретившийся отрицательный элемент. Запоминаем его индекс в переменной A. Если же очередной элемент отрицательный, но A уже не содержит -1, то сравниваем значение текущего элемента с тем, которое содержится по индексу, хранимому в A. Если текущий элемент больше, то записываем его индекс в A.

После завершения цикла проверяем, не равно ли значение A -1. Если не равно, то выводим индекс максимального отрицательного элемента массива и его значение.

Исходный код на языке программирования Pascal

const N = 15;
var
        arr: array[1..N] of integer;
        i: byte;
        index: byte;
begin
        randomize;
        for i:=1 to N do begin
                arr[i] := random(100) - 50;
                write(arr[i],' ');
        end;
        writeln;
 
        index := 0;
        for i:=1 to N do begin
                if (arr[i] < 0) and (index = 0) then
                        index := i
                else
                        if (arr[i] < 0) and (arr[i] > arr[index]) then
                                index := i;
        end;
        if index <> 0 then
                writeln(index,': ',arr[index]);
end.

Пример(ы) выполнения программы на языке Pascal

-36 0 -35 -15 2 -43 -18 -4 -6 -24 -30 -28 47 18 41
8: -4

Исходный код на языке программирования C

#include <stdio.h>
#define N 15
 
main() {
    int arr[N],index, i;
    srand(time(NULL));
    for (i=0; i<N; i++) {
                arr[i] = rand() % 100 - 50;
                printf("%d ", arr[i]);
        }
        printf("\n");
 
        index = -1;
        for (i=0; i<N; i++) {
                if (arr[i] < 0 && index == -1)
                        index = i;
                else
                        if (arr[i] < 0 && arr[i] > arr[index])
                                index = i;
        }
        printf("%d-й = %d\n",index+1,arr[index]);
}

Пример(ы) выполнения программы на языке C

33 -21 24 -36 42 -11 -6 42 32 36 -1 43 -8 24 40
11-й = -1

Исходный код на языке программирования Python

from random import random
N = 15
arr = []
for i in range(N):
        arr.append(int(random() * 100) - 50)
print(arr)
 
i = 0
index = -1
while i < N:
        if arr[i] < 0 and index == -1:
                index = i
        elif arr[i] < 0 and arr[i] > arr[index]:
                index = i
        i += 1
 
print(index+1,':', arr[index])

Пример(ы) выполнения программы на языке Python

[-30, 42, -5, 31, -37, 25, -50, -44, 17, -34, -33, -21, 48, 45, 15]
3 : -5

Исходный код на языке программирования КуМир

алг чет_нечет
нач
  цел N = 15
  целтаб arr[1:N]
  цел i, index
 
  нц для i от 1 до N
    arr[i] := irnd(100) - 50
    вывод arr[i], " "
  кц
  вывод нс
 
  index := 0
  нц для i от 1 до N
    если arr[i] < 0 и index = 0 то
      index := i
     иначе
      если arr[i] < 0 и arr[i] > arr[index] то
        index := i
      все
    все
  кц
  вывод index, ": ", arr[index], нс
кон

Пример(ы) выполнения программы на языке КуМир

19 32 36 -15 -22 3 48 -42 3 -2 -6 -48 33 27 6
10: -2

Исходный код на языке программирования Basic

N = 15
dim arr(N)
for i=0 to N-1
        arr[i] = int(rand() * 100) - 50
        print arr[i] + " ";
next i
print
 
index = -1
for i=0 to N-1
        if arr[i] < 0 then
                if index = -1 then
                        index = i
                else
                        if arr[i] > arr[index] then
                                index = i
                        endif
                endif
        endif  
next i
 
print index+1;
print ": ";
print arr[index]

Пример(ы) выполнения программы на языке Basic

17 31 -21 24 -8 29 7 42 13 -15 -30 30 33 32 -7
15: -7

Особенности решения на языке программирования Basic

Проверка отрицательности элемента вынесена в отдельную ветку if. Иначе возникает ошибка, когда первый элемент неотрицательный, т.к. в Basic-256 при логическом операторе and происходит проверка второго условия даже если первое ложное. И получается, что переменная index отрицательна, что вызывает ошибку выхода за границы массива.

Тема

Массивы

Уровень сложности

Средний

Дата публикации