Максимальный отрицательный элемент массива
Просмотров 7.4к. Обновлено 15 октября 2021
В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве.
Задача поиска максимального отрицательного элемента массива не такая простая, как может показаться на первый взгляд.
Введем переменную (условно назовем ее 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 15main() {
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
максимальное отрицательное число 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 += 1print(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 iindex = -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 iprint 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 отрицательна, что вызывает ошибку выхода за границы массива.
let test12 = [-1, -2, -3];
I’m stuck on this one. I used the below on positive integers but I’m not sure what to change for negatives.
let test = [1 , 2, 3];
var largest= 0;
for (i=0; i<=test.length;i++){
if (test[i]>largest) {
largest=test[i];
}
}
console.log(largest);
asked Oct 25, 2018 at 23:37
3
largest negative integer in an array
Your question can have 3 interpretations:
- The negative integer that is farthest from
0
- The negative integer that is closest to
0
- The largest number in general (you might be struggling if an all negative integer array comes along, because you initialize min to 0)
Just to clarify, smallest is ‘farthest from zero’. But here’s all three ways 🙂 :
const ints = [-3, -2, -1, 0, 1, 2]
const negativeInts = ints.filter(i => i < 0)
const smallestNegative = Math.min(...negativeInts)
const largestNegative = Math.max(...negativeInts)
const largestOverall = Math.max(...ints)
console.log({smallestNegative, largestNegative, largestOverall}) // -3, -1, 2
Hope this helps. Cheers.
answered Oct 26, 2018 at 6:05
Just initialize largest
to -Infinity
rather than 0
. You also need to iterate over the input array’s length, not 0
to largest
:
let test12 = [-1, -2, -3];
var largest = -Infinity;
for (i = 0; i < test12.length; i++) {
if (test12[i] > largest) {
var largest = test12[i];
}
}
console.log(largest);
Another method would be to spread into Math.max
:
let test12 = [-1, -2, -3];
console.log(
Math.max(...test12)
);
answered Oct 25, 2018 at 23:39
6
Largest negative would be -244
, so you can sort and get the first index.
let arr = [-1, -2, -244, -7],
[largets] = arr.slice().sort((a, b) => a - b);
console.log(largets);
answered Oct 25, 2018 at 23:52
EleEle
33.4k7 gold badges37 silver badges75 bronze badges
1
Try this..
var array = [-155,3, 6, 2, 56, 32, 5, -89, -32,115,-150];
array.sort(function(a, b) {
return a - b;
});
console.log(array[0]);
answered Oct 26, 2018 at 6:13
Krupesh KotechaKrupesh Kotecha
2,3963 gold badges20 silver badges40 bronze badges
0
In case you want a programming solution ,like an edit that your program needs to perform even if an all negative array is given, then try this :
let test = [-10, -1, -2, -3];
// just Assign largest to the first element in test.
// the largest int might not be greater than zero,
// but will definitely be larger that any other element in the array.
var largest= test[0];
for (i=0; i<=test.length;i++){
if (test[i]>largest) {
largest=test[i];
}
}
console.log(largest);
answered Oct 26, 2018 at 6:53
BlueZa 0 / 0 / 0 Регистрация: 18.12.2015 Сообщений: 44 |
||||
1 |
||||
Нахождение максимального отрицательного элемента массива23.12.2015, 16:55. Показов 9898. Ответов 10 Метки нет (Все метки)
нахождение максимального отрицательного элемента массива
0 |
Azazel-San Mental handicap 1245 / 623 / 171 Регистрация: 24.11.2015 Сообщений: 2,429 |
||||
23.12.2015, 17:06 |
2 |
|||
А как это максимально отрицательное? Может просто минимальное?
0 |
schoolteacher 39 / 39 / 49 Регистрация: 18.12.2015 Сообщений: 127 |
||||
23.12.2015, 21:27 |
3 |
|||
Может так?
Добавлено через 7 минут
0 |
Mental handicap 1245 / 623 / 171 Регистрация: 24.11.2015 Сообщений: 2,429 |
|
23.12.2015, 21:38 |
4 |
Программа будет работать неверно.. Какой смысл делать массив [-10..10]? Если вы и так заполняете массив с помощю команды рандом.. Причем только положительние, а смысл искать максимально отрицательное число с положительных чисел?
0 |
39 / 39 / 49 Регистрация: 18.12.2015 Сообщений: 127 |
|
23.12.2015, 22:26 |
5 |
Добавлено решение для элементов имеющих положительные значения и отрицательные индексы.
0 |
Azazel-San Mental handicap 1245 / 623 / 171 Регистрация: 24.11.2015 Сообщений: 2,429 |
||||
23.12.2015, 22:53 |
6 |
|||
schoolteacher, при чём тут индексы? Добавлено через 21 минуту
0 |
schoolteacher 39 / 39 / 49 Регистрация: 18.12.2015 Сообщений: 127 |
||||||||
23.12.2015, 23:07 |
7 |
|||||||
Вполне соглашаюсь с Вашим мнением.
И в первой части решения поиск minplus производится среди элементов, имеющих положительные индексы:
то логично предположить, что (возможно) поиск maxminus нужно производить среди элементов, имеющих отрицательные индексы. Добавлено через 3 минуты Добавлено через 4 минуты
0 |
Mental handicap 1245 / 623 / 171 Регистрация: 24.11.2015 Сообщений: 2,429 |
|
23.12.2015, 23:11 |
8 |
schoolteacher, смотря для что для кого значить максимальне отрицательное, скажу свою версию почему так, сто також максимальне число к поимеру 1,4,6,3,9 среди этих чисел макс будет 9, если делать для отрицательных то то что ближе к 0. Ведь среди -5,-7,-4,-1 максотриц. будет -1 ведь оно наибольшее среди отрицательных? Добавлено через 2 минуты
0 |
schoolteacher 39 / 39 / 49 Регистрация: 18.12.2015 Сообщений: 127 |
||||
24.12.2015, 10:05 |
9 |
|||
С алгоритмом и реализацией в Паскале знаком, согласен, спасибо.
0 |
Azazel-San Mental handicap 1245 / 623 / 171 Регистрация: 24.11.2015 Сообщений: 2,429 |
||||||||
24.12.2015, 10:20 |
10 |
|||||||
schoolteacher, я бы сделал так, зачем такие огромные числа?
Добавлено через 10 минут
0 |
bormant Модератор 7533 / 4394 / 2784 Регистрация: 22.11.2013 Сообщений: 12,584 Записей в блоге: 1 |
||||||||||||
24.12.2015, 11:09 |
11 |
|||||||||||
Сообщение было отмечено BlueZa как решение Решение Если исходное задание звучит так:
Если же исходное задание звучит так:
Добавлено через 5 минут
1 |
Как найти максимальный отрицательный элемент в массиве? С++
Знаток
(314),
закрыт
8 лет назад
Артём Соболев
Профи
(637)
8 лет назад
заводишь 2 переменные max и imax (1 – максимальное отрицательное число, 2 – порядковый номер в массиве (не обязательно, зависимо от дальнейшей задачи))
max присваиваешь значение 1 элемента массива, imax присваиваешь 0.
запускаешь цикл, прогоняешь все элементы массива.
пишешь условие (пример на C#):
if ((mas[i]<0) && (max<mas[i]))
{
max=mas[i];
imax=i;
}вроде так…
Duality
Просветленный
(29306)
8 лет назад
Та элементарно – заводишь переменную, присваиваешь его значение первого элемента, а потом проходишь по массиву и сравниваешь с этой переменной – если текущий элемент меньше – пихаешь его в эту переменную. Когда массив кончится в этой переменной у тебя будет наименьший элемент.
Раздел:
Задачи /
Простейшие /
Найти максимальное отрицательное число
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Условие задачи 1.9
Задача 1.9
Даны три целых числа А, В, С. Вывести на экран максимальное отрицательное число.
Именно так звучит условие этой задачи. И, честно говоря, для меня оно не является однозначным.
Что такое максимальное отрицательное число? Это отрицательное число с наименьшим значением? Или всё-таки это отрицательное число, которое имеет наибольшее значение среди остальных?
Например,
-4, -3, -1
Какое число здесь является максимальным отрицательным? -4 или -1?
Вот ведь, загадили русский язык иностранными словами, а теперь сами не можем понять, о чём говорим)))
Если было сказано – “наибольшее отрицательное число”, то всё было бы понятно. В примере наибольшим является -1.
А максимальное – это с какого конца оси на множестве целых чисел? Вот ведь вопрос…
Если попытаться вспомнить строгие математические термины, то тут будет без бутылки не разобраться, потому что придётся вспоминать всё.
Ну да ладно, приняв во внимание, что на русский язык слово “максимальный” переводится как наибольший, а также вспомнив таки немного математику и учтя, что в случае линейно упорядоченного множества (коим и являются наши числа) максимальный элемент является наибольшим, а минимальный – наименьшим, будем считать, что в нашем примере максимальным отрицательным числом будет -1. Из этого и будем исходить при решении задачи.
Однако, надо обратить внимание также на то, что числа А, В, С могут быть положительными (причём как все, так и некоторые из них).
Вариантов решения, как всегда, немало. Можно, например, сохранить эти числа в
массив и отсортировать его по убыванию. А затем перебрать его элементы до тех пор, пока не попадётся первое отрицательное число. Оно и будет максимальным отрицательным. Если же такого не найдётся, значит отрицательных чисел среди А, В, С не было.
Можно попробовать решить задачу рекурсивно (правда, я не пробовал и даже не думал, может и нельзя)))).
Но мы пойдём другим путём…
Вообще, задачка не такая уж и простая. Начинающему программисту придётся поломать голову (но это и хорошо – только так из начинающих программистов получаются опытные – путём ломания голов))).
Возможно, я нашёл не самые лучшие решения. Но по крайней мере они работают. Вот решения на
Паскале и
С++.
Решение задачи 1.9 на Паскале
program maxneg; //**************************************************************** // КОНСТАНТЫ //**************************************************************** const MAX_VAL = 1000; //**************************************************************** // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ //**************************************************************** var A, B, C : Integer; Nums : byte; //**************************************************************** // ФУНКЦИИ И ПРОЦЕДУРЫ //**************************************************************** //**************************************************************** // Возвращает случайное значение //**************************************************************** function GetRandomNum : Integer; begin Result := Random(MAX_VAL) - ((MAX_VAL div 10) * 7); end; //**************************************************************** // Сравнивает два числа // ВХОД: N1, N2 - числа для сравнения // ВЫХОД: 0 - числа равны // 1 - число 1 больше числа 2 // 2 - число 2 больше числа 1 //**************************************************************** function GetMax(N1, N2 : integer) : integer; begin Result := 0; if (N1 > N2) then Result := 1 else if (N1 < N2) then Result := 2; end; //**************************************************************** // Сравнивает три отрицательных числа // ВХОД: N1, N2, N3 - числа для сравнения // ВЫХОД: 'A' - наибольшее число N1 // 'B' - наибольшее число N2 // 'C' - наибольшее число N3 //**************************************************************** function GetMaxABC(N1, N2, N3 : integer) : char; begin Result := 'C'; if GetMax(N1, N2) < 2 then //Если N1 >= N2 begin if GetMax(N1, N3) < 2 then //Если N1 >= N3 Result := 'A'; end else //Если N1 < N2 begin if GetMax(N2, N3) < 2 then //Если N2 >= N3 Result := 'B'; end; end; //**************************************************************** // Определяет знаки чисел и возвращает их в разрядах числа типа BYTE // ВХОД: na, nb, nc - числа A, B, C // ВЫХОД: знаки чисел - бит 2 - число na, бит 1 - число nb, бит 0 - число nc // То есть всего возможны 8 комбинаций: // 0 - все положительные // 1 - С < 0 // 2 - B < 0 // 3 - B и С меньше нуля // 4 - A < 0 // 5 - A и С меньше нуля // 6 - A и B меньше нуля // 7 - все отрицательные //**************************************************************** function GetNumZnak(na, nb, nc : integer) : byte; var ba, bb, bc : byte; begin ba := 0; bb := 0; bc := 0; if na < 0 then ba := 4; if nb < 0 then bb := 2; if nc < 0 then bc := 1; Result := ba + bb + bc; end; //**************************************************************** // Выводит результат на экран // ВХОД: S - имя числа, N - значение числа // ВЫХОД: Если N >= 0, то сообщение об отсутствии отрицательных чисел // Если N < 0, то имя числа и его значение (число N) //**************************************************************** procedure NumberToScreen(S : char; N : integer); begin if N < 0 then WriteLn('The smallest negative number is ', S, ' = ', N) else WriteLn('All the numbers are positive'); end; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА // Алгоритм: // получить только отрицательные числа // сравнить эти числа //**************************************************************** begin //Запустить генератор случайных чисел Randomize; //Получить случайные значения для чисел А, В, С A := GetRandomNum; B := GetRandomNum; C := GetRandomNum; WriteLn('A = ', A, ', B = ', B, ', C = ', C); Nums := GetNumZnak(A, B, C); case Nums of 0 : //Все числа положительные NumberToScreen('A', A); 1 : //Только С < 0; NumberToScreen('C', C); 2 : //Только B < 0; NumberToScreen('B', B); 3 : //B и С меньше нуля if GetMax(B, C) < 2 then //Если B = С или B > C, то NumberToScreen('B', B) //искомое число - это B else //иначе NumberToScreen('C', C); //искомое число - это С 4 : //Только A < 0; NumberToScreen('A', A); 5 : //A и С меньше нуля if GetMax(A, C) < 2 then //Если A = С или A > C, то NumberToScreen('A', A) //искомое число - это A else //иначе NumberToScreen('C', C); //искомое число - это С 6 : //A и B меньше нуля if GetMax(A, B) < 2 then //Если A = B или A > B, то NumberToScreen('A', A) //искомое число - это A else //иначе NumberToScreen('B', B); //искомое число - это B 7 : //Все числа отрицательные; case GetMaxABC(A, B, C) of 'A' : NumberToScreen('A', A); 'B' : NumberToScreen('B', B); 'C' : NumberToScreen('C', C); end; end; WriteLn('The end. Press ENTER...'); ReadLn; end.
Решение задачи 1.9 на С++
#include #include using namespace std; //**************************************************************** // КОНСТАНТЫ //**************************************************************** const int MAX_VAL = 1000; //**************************************************************** // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ //**************************************************************** int A, B, C; char Nums; //**************************************************************** // ФУНКЦИИ И ПРОЦЕДУРЫ //**************************************************************** //**************************************************************** // Возвращает случайное значение //**************************************************************** int GetRandomNum() { int n = (MAX_VAL / 10) * 7; return(rand()%MAX_VAL - (int)n); } //**************************************************************** // Сравнивает два числа // ВХОД: N1, N2 - числа для сравнения // ВЫХОД: 0 - числа равны // 1 - число 1 больше числа 2 // 2 - число 2 больше числа 1 //**************************************************************** int GetMax(int N1, int N2) { int Res = 0; if (N1 > N2) Res = 1; else if (N1 < N2) Res = 2; return(Res); } //**************************************************************** // Сравнивает три отрицательных числа // ВХОД: N1, N2, N3 - числа для сравнения // ВЫХОД: 'A' - наибольшее число N1 // 'B' - наибольшее число N2 // 'C' - наибольшее число N3 //**************************************************************** char GetMaxABC(int N1, int N2, int N3) { char Res = 'C'; if (GetMax(N1, N2) < 2) //Если N1 >= N2 { if (GetMax(N1, N3) < 2) //Если N1 >= N3 Res = 'A'; } else //Если N1 < N2 { if (GetMax(N2, N3) < 2) //Если N2 >= N3 Res = 'B'; } return(Res); } //**************************************************************** // Определяет знаки чисел и возвращает их в разрядах числа типа BYTE // ВХОД: na, nb, nc - числа A, B, C // ВЫХОД: знаки чисел - бит 2 - число na, бит 1 - число nb, бит 0 - число nc // То есть всего возможны 8 комбинаций: // 0 - все положительные // 1 - С < 0 // 2 - B < 0 // 3 - B и С меньше нуля // 4 - A < 0 // 5 - A и С меньше нуля // 6 - A и B меньше нуля // 7 - все отрицательные //**************************************************************** char GetNumZnak(int na, int nb, int nc) { int ba = 0; int bb = 0; int bc = 0; if (na < 0) ba = 4; if (nb < 0) bb = 2; if (nc < 0) bc = 1; return(ba + bb + bc); } //**************************************************************** // Выводит результат на экран // ВХОД: S - имя числа, N - значение числа // ВЫХОД: Если N >= 0, то сообщение об отсутствии отрицательных чисел // Если N < 0, то имя числа и его значение (число N) //**************************************************************** void NumberToScreen(char S, int N) { if (N < 0) cout << "The smallest negative number is " << S << " = " << N << endl; else cout << "All the numbers are positive" << endl;; } //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** int main(int argc, char *argv[]) { //Запустить генератор случайных чисел srand(time(0)); //Получить случайные значения для чисел А, В, С A = GetRandomNum(); B = GetRandomNum(); C = GetRandomNum(); cout << "A = " << A << ", B = " << B << ", C = " << C << endl; Nums = GetNumZnak(A, B, C); switch(Nums) { case 0 : //Все числа положительные NumberToScreen('A', A); break; case 1 : //Только С < 0; NumberToScreen('C', C); break; case 2 : //Только B < 0; NumberToScreen('B', B); break; case 3 : //B и С меньше нуля if (GetMax(B, C) < 2) //Если B = С или B > C, то NumberToScreen('B', B); //искомое число - это B else //иначе NumberToScreen('C', C); //искомое число - это С break; case 4 : //Только A < 0; NumberToScreen('A', A); break; case 5 : //A и С меньше нуля if (GetMax(A, C) < 2) //Если A = С или A > C, то NumberToScreen('A', A); //искомое число - это A else //иначе NumberToScreen('C', C); //искомое число - это С break; case 6 : //A и B меньше нуля if (GetMax(A, B) < 2) //Если A = B или A > B, то NumberToScreen('A', A); //искомое число - это A else //иначе NumberToScreen('B', B); //искомое число - это B break; case 7 : //Все числа отрицательные; switch(GetMaxABC(A, B, C)) { case 'A' : NumberToScreen('A', A); break; case 'B' : NumberToScreen('B', B); break; case 'C' : NumberToScreen('C', C); break; } } system("PAUSE"); return EXIT_SUCCESS; }
|
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение – ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |