Задача — Максимальный отрицательный элемент массива
— программирование на Pascal, Си, Кумир, Basic-256, Python
В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве.
Задача поиска максимального отрицательного элемента массива не такая простая, как может показаться на первый взгляд.
Введем переменную (условно назовем ее 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. -36 0 -35 -15 2 -43 -18 -4 -6 -24 -30 -28 47 18 41
8: -4 Язык Си #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-й = %dn",index+1,arr[index]);
} 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]) [-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-256 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] 17 31 -21 24 -8 29 7 42 13 -15 -30 30 33 32 -7
15: -7
Проверка отрицательности элемента вынесена в отдельную ветку if. Иначе возникает ошибка, когда первый элемент неотрицательный, т.к. в Basic-256 при логическом операторе and происходит проверка второго условия даже если первое ложное. И получается, что переменная index отрицательна, что вызывает ошибку выхода за границы массива.