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

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

Просмотров 7.5к. Обновлено 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 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

максимальное отрицательное число 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 отрицательна, что вызывает ошибку выхода за границы массива.

Вот простое и элегантное решение. На С, но это несущественно, по большому счёту весь его смысл в ифе. Должен же ТС хоть что-то сделать сам? Пусть хоть на шарп переведёт. Подозреваю, что для него даже это не тривиально.

int array[10] = {
    0, -1, 2, -3, 4, -5, -6, -7, 8, 9
};

int max_negative(void)
{
    int max = 0;
    for( int i = 0; i < 10; ++i ) {
        if( array[i] < 0 && ( max == 0 || array[i] > max ) ) {
            max = array[i];
        }
    }
    return max;
}

int main(void)
{
    int n = max_negative();
    if( n == 0 ) {
        puts("No negative numbers.");
    } else {
        printf("max negative = %dn", n);
    }

    return 0;
}

3 / 3 / 0

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

Сообщений: 99

1

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

27.10.2017, 21:17. Показов 18836. Ответов 2


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

5. Дан одномерный массив (вектор), состоящий из N целочисленных элементов.

5.1. Ввести массив с клавиатуры.

5.2. Найти максимальный отрицательный элемент.

5.3. Вычислить сумму отрицательных элементов массива.

 Комментарий модератора 
П.5.16.Правил
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос — одна тема.

5.4. Вывести положительные элементы на экран.



0



zss

Модератор

Эксперт С++

13111 / 10381 / 6209

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

Сообщений: 27,767

27.10.2017, 22:09

2

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

Решение

Образцы (шаблоны) программ для типовых задач
Заменить функцию

C++
1
2
3
4
5
6
7
8
9
10
11
12
// пример обработки - Найти максимальный отрицательный элемент
int Work(int* M,int n)
{
    int sum=0;
    for(int i=0;i<n;i++)
    {
        if(M[i]<0 && (sum==0 || sum<M[i]) )
            sum=M[i];
    }
    return sum;
// если отрицательных нет, то возвратится ноль
}



0



Геомеханик

837 / 640 / 940

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

Сообщений: 1,409

28.10.2017, 07:11

3

C++
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <iterator>
 
//максимальный элемент
template<typename T, typename Cmp>
T find_max(T a, T b, Cmp ucmp){
    while((a != b) && !ucmp(*a))
        ++a;
 
    T p = a;
    while(a != b){
        if(ucmp(*a) && (*a > *p))
            p = a;
        ++a;
    }
    return p;
}
 
//вывод
template<typename T, typename Cmp, typename Out>
void output_print(T a, T b, Cmp ucmp, Out _out){
    while(a != b){
        if(ucmp(*a))
            *_out++ = *a;
        ++a;
    }
}
 
int main(void){
    const int N = 5;
    int a[N];
    std::cout << "Enter-" << N << " : ";
    for(int& v : a)
        std::cin >> v;
    std::cin.sync();
 
    //максимальный отрицательный элемент
    int* p = find_max(a, a + N, [] (int n) { return (n < 0); });
    if(p != a + N)
        std::cout << "max: " << *p;
    else
        std::cout << "No!";
    std::cout << std::endl;
 
    //вывод положительных чисел
    output_print(a, a + N, [] (int n) { return (n > 0); }, std::ostream_iterator<int>(std::cout, " "));
    std::cin.get();
    return 0;
}



0



Uses crt;
Var
x: Array[1..100] of Integer;
a,n,max: Integer;
BEGIN
Clrscr;
Randomize;
Writeln('Введите кол-во элементов: '); Readln(n);
Writeln('Исходный массив:');
For a:=1 to n do
begin
  x[a]:=Random(101)-50;
  Write(x[a],' ');
end;
max:=-51;
For a:=1 to n do
If x[a]<0 Then
begin
  If x[a]>max Then
  max:=x[a];
end;
Writeln;
Writeln('Наибольший отриц. элемент: ',max);
Readln
END.

Оглавление:

  • 1 Задача — Максимальный отрицательный элемент массива
    — программирование на Pascal, Си, Кумир, Basic-256, Python

    • 1.1 Pascal
    • 1.2 Язык Си
    • 1.3 Python
    • 1.4 КуМир
    • 1.5 Basic-256

Задача — Максимальный отрицательный элемент массива
— программирование на 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 отрицательна, что вызывает ошибку выхода за границы массива.

Did you find apk for android? You can find new Free Android Games and apps.

Понравилась статья? Поделить с друзьями:
  • Как исправить перекос таза у взрослого в домашних условиях
  • Плохо работает колесико на мышке как исправить
  • Как найти свою вторую половинку женщине молитва
  • Мое устройство в гугл плей как найти
  • Мегафон как найти мелодию