Как найти максимальное число среди отрицательных

Помогите пожалуйста!Найти максимум из отрицательных элементов?Паскаль.



Профи

(857),
на голосовании



12 лет назад

Голосование за лучший ответ

Дмитрий

Гуру

(4681)


12 лет назад

Очень просто. Если эти элементы в массиве, то
var a:array [1..100] of integer;
i,max:integer;
begin
randomize;
max:=-100;
for i:=1 to 100 do begin //здесь можешь уменьшить кол-во элементов
a[ i ]:=-100+random(200);
write(a[ i ],’ ‘);end;
writeln;
for i:=1 to 100 do
if a[ i ]<0 then
if a[ i ]>max then max:=a[ i ];
writeln(‘Макс отрицательный элемент – ‘,max);
readln;
end.

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a sorted array arr[] consisting of N integers, the task is to find the maximum among the count of positive or negative integers in the array arr[].

    Examples:

    Input: arr[] = {-9, -7, -4, 1, 5, 8, 9}
    Output: 4
    Explanation:
    The count of positive numbers is 4 and the count of negative numbers is 3. So, the maximum among 4, 3 is 4. Therefore, print 4.

    Input: arr[] = {-8, -6, 10, 15}
    Output: 2

    Naive approach:

    This approach to solve the problem is to count the occurrences of positive and negative numbers by traversing the array once. Finally, return the maximum of the counts of positives and negatives.

    Algorithm:

    1. Initialize variables cntpositive and cntnegative as 0.
    2. Traverse the array from 0 to size-1:
          a. If the current element arr[i] is greater than 0, increment cntpositive.
          b. Else if the current element arr[i] is less than 0, increment cntnegative.
    3. Compute the maximum of cntpositive and cntnegative using the max() function.
    4. Return the maximum count.

    Below is the implementation of the above approach:

    C++

    #include "bits/stdc++.h"

    using namespace std;

    int findMaximum(int arr[], int size) {

          int cntpositive = 0, cntnegative = 0;

          for(int i = 0; i < size; i++) {

              if( arr[i] > 0 )

                  cntpositive++;

              else if( arr[i] < 0 )

                  cntnegative++;

        }

          return max(cntpositive, cntnegative);

    }

    int main()

    {

        int arr[] = { -9, -7, -4, 1, 5, 8, 9 };

        int N = sizeof(arr) / sizeof(arr[0]);

        cout << findMaximum(arr, N);

        return 0;

    }

    Time Complexity: O(N) as we are traversing entire array once. Here, N is size of input array.
    Auxiliary Space: O(1) as no extra space has been used.

    Efficient approach: The given problem can be solved by using Binary Search, the idea is to find the first index whose value is positive and then print the maximum of idx and (N – idx) as the result. Follow the steps below to solve the given problem:

    • Initialize two variables, say low as 0 and high as (N – 1).
    • Perform the Binary Search on the given array arr[] by iterating until low <= high and follow the below steps:
      • Find the value of mid as (low + high) / 2.
      • If the value of arr[mid] is positive, then skip the right half by updating the value of high to (mid – 1). Otherwise, skip the left half by updating the value of low to (mid + 1).
    • After completing the above steps, print the maximum of low and (N – low) as the result.

     Below is the implementation of the above approach:

    C++

    #include "bits/stdc++.h"

    using namespace std;

    int findMaximum(int arr[], int size)

    {

        int i = 0, j = size - 1, mid;

        while (i <= j) {

            mid = i + (j - i) / 2;

            if (arr[mid] < 0)

                i = mid + 1;

            else if (arr[mid] > 0)

                j = mid - 1;

        }

        return max(i, size - i);

    }

    int main()

    {

        int arr[] = { -9, -7, -4, 1, 5, 8, 9 };

        int N = sizeof(arr) / sizeof(arr[0]);

        cout << findMaximum(arr, N);

        return 0;

    }

    Java

    import java.io.*;

    public class GFG {

        static int findMaximum(int arr[], int size)

        {

            int i = 0, j = size - 1, mid;

            while (i <= j) {

                mid = i + (j - i) / 2;

                if (arr[mid] < 0)

                    i = mid + 1;

                else if (arr[mid] > 0)

                    j = mid - 1;

            }

            return Math.max(i, size - i);

        }

        public static void main (String[] args)

        {

            int arr[] = { -9, -7, -4, 1, 5, 8, 9 };

            int N = arr.length;

            System.out.println(findMaximum(arr, N));

        }

    }

    Python3

    def findMaximum(arr, size):

        i = 0

        j = size - 1

        while (i <= j):

            mid = i + (j - i) // 2

            if (arr[mid] < 0):

                i = mid + 1

            elif (arr[mid] > 0):

                j = mid - 1

        return max(i, size - i)

    if __name__ == "__main__":

        arr = [-9, -7, -4, 1, 5, 8, 9]

        N = len(arr)

        print(findMaximum(arr, N))

    C#

    using System;

    public class GFG

    {

        static int findMaximum(int []arr, int size)

        {

            int i = 0, j = size - 1, mid;

            while (i <= j) {

                mid = i + (j - i) / 2;

                if (arr[mid] < 0)

                    i = mid + 1;

                else if (arr[mid] > 0)

                    j = mid - 1;

            }

            return Math.Max(i, size - i);

        }

        public static void Main (string[] args)

        {

            int []arr = { -9, -7, -4, 1, 5, 8, 9 };

            int N = arr.Length;

            Console.WriteLine(findMaximum(arr, N));

        }

    }

    Javascript

    <script>

    function findMaximum(arr, size)

    {

      let i = 0,

        j = size - 1,

        mid;

      while (i <= j)

      {

        mid = i + Math.floor((j - i) / 2);

        if (arr[mid] < 0) i = mid + 1;

        else if (arr[mid] > 0) j = mid - 1;

      }

      return Math.max(i, size - i);

    }

    let arr = [-9, -7, -4, 1, 5, 8, 9];

    let N = arr.length;

    document.write(findMaximum(arr, N));

    </script>

    Time Complexity: O(log N)
    Auxiliary Space: O(1)

    Last Updated :
    18 May, 2023

    Like Article

    Save Article

    Раздел:
    Задачи /
    Простейшие /

    Найти максимальное отрицательное число

    Основы программирования 2.0

    Основы программирования
    Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать.
    Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь.
    Подробнее…

    Условие задачи 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

    Как стать программистом 2.0

    Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки…
    Подробнее…

    Помощь в технических вопросах

    Помощь в технических вопросах

    Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение – ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
    Подробнее…

    Формулировка задачи:

    Товарищи программисты, доброго дня!
    прошу содействия в решении следующей задачи:

    Найти максимальный из отрицательных элементов среди произвольных
    20 чисел, вводимых с клавиатуры

    мой ход мыслей таков = не учитывать в цикле положительные элементы, а среди отрицательных – найти минимальный по модулю.
    если же подобное оговарилось ранее, буду признательна ссылке на соответствующую тему.
    Заранее благодарю

    Код к задаче: «Найти максимальный из отрицательных элементов среди произвольных 20 чисел»

    textual

    Sub z()
      Dim x#, m#, i%
      For i = 1 To 20
        x = InputBox("Введите " & i & "-ое число:")
        If x < 0 And (x > m Or m = 0) Then m = x
      Next i
      If m <> 0 Then MsgBox "максимальное из отрицательных = " & m Else MsgBox "отрицательных чисел нет"
    End Sub

    Полезно ли:

    7   голосов , оценка 4.143 из 5

    Часто случается, что в одном диапазоне ячеек находятся вместе положительные и отрицательные числа. Необходимо определить экстремальные значения, но с определенными условиями. Следует получить наименьшее значение для положительных чисел и отдельно для отрицательных. Для решения данной задачи не достаточно просто использовать функции =МИН(), =МАКС() или =НАИМЕНЬШИЙ(), =НАИБОЛЬШИЙ(). Иначе при обращении функций к диапазону с перемешанными положительными и отрицательными числами, будет возвращено только отрицательное наименьшее значение. Поэтому следует использовать специальную формулу с функциями.

    Наименьшее положительное число

    Допустим у нас есть статистика доходов и расходов сети магазинов за месяц. А нам нужно узнать какие из торговых точек наименее затратные по расходам и наименее прибыльны по доходам. Для презентации решения будем использовать пример таблицы с доходами и расходами магазинов как показано на рисунке:

    Доходы и расходы.

    В первую очередь следует найти наименьший доход. Для этого формула должна сначала рассмотреть группу, состоящую только из положительных. После чего найдите наименьшее положительное значение функции. Для этого:

    1. В ячейке D2 введем следующую формулу:
    2. После ввода формулы для подтверждения необходимо нажать комбинацию горячих клавиш: CTRL+SHIFT+Enter, так как она должна выполняться в массиве. Если все сделано правильно тогда в строке формул будут видны фигурные скобки.

    Минимальный доход.

    Разбор принципа действия формулы для поиска наименьшего положительного числа:

    Логическая функция =ЕСЛИ(), которая выполняется в массиве формул, проверяет каждую ячейку диапазона C2:C13 какая из них содержит число меньше чем 0 или равно нулю (<=0). Таким образом создается условная таблица в памяти с логическими значениями:

    • ЛОЖЬ – для положительных чисел (в данном случаи и для нуля);
    • ИСТИНА – для отрицательных чисел.

    После чего в условной таблице функция ЕСЛИ заменяет все значения ИСТИНА на пустые (””). А вместо значения ЛОЖЬ подставляются те числа положительные, которые и были раньше в диапазоне C2:C13. И завершает вычисления формулы функция =МИН(), которая из условной таблицы (уже отфильтрованной от отрицательных значений и нулей) возвращает нам наименьшее положительное число.

    

    Наибольшее отрицательное число в диапазоне ячеек

    Чтобы найти наименьшие расходы среди отрицательных значений укажите наибольшее. Для этого следует выполнить следующие действия:

    1. В ячейке E2 введите формулу:
    2. Так же, как и предыдущей формуле после ввода необходимо нажать комбинацию клавиш: CTRL+SHIFT+Enter, так как она должна выполняться в массиве. Если все сделано правильно в строке формул появятся фигурные скобки.

    Минимальный расход.

    Скачать формулы для поиска наименьшего положительного и наибольшего отрицательного числа

    В результате мы быстро и легко переделили самый слабый магазин по доходам – это №4. А наименее затратная торговая точка по расходам – это магазин №2.

    Добавить комментарий