Как найти максимальный положительный элемент массива

0 / 0 / 0

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

Сообщений: 4

1

Массивы , найти максимальный положительный и произведение элементов

04.01.2018, 11:16. Показов 2988. Ответов 12


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

Здравствуйте уважаемые пользователи.Нужна ваша помощь,нужно написать программу на C++ и по возможности разъяснить её написание.Заранее Огромное Спасибо вам.
9. Дан одномерный массив, состоящий из N целочисленных элементов.
9.1. Найти максимальный положительный элемент.
9.2. Вычислить произведение элементов массива.



0



sad_guy

4 / 4 / 1

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

Сообщений: 151

04.01.2018, 12:00

2

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

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
int n,a,b,i;
int main()
{
    cin>>n;//ввод кол-ва элементов
   int *arr=new int[n];//создание массива
    for(i=0;i<n;i++){//цикл для ввода чисел
        cin>>arr[i];
    }
   a=arr[0];
   b=1;
   for(int i=0;i<n;i++){
    if(a<arr[i]){//поиск наибольшего числа
       a=arr[i];
    }
    b=b*arr[i];//произведение
   }
   cout<<endl<<a<<endl<<b;//вывод хначений
    return 0;
}



1



CopBuroJLoBa

62 / 50 / 39

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

Сообщений: 133

04.01.2018, 12:03

3

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

Решение

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
#include <iostream> 
#include <stdlib.h>
#include <ctime>
#include <stdio.h>
using namespace std;
int main()
{
    setlocale( LC_ALL,"Russian" );
    srand(time(0));
    int i, n, max, pro=1;
    cout << "Введите n: " << endl; 
    cin >> n; 
    int *a = new int [n]; //выделяем память для динамического массива
    
    //создаем массив с положительными/отрицательными элементами
    for(i=0; i<n; i++) if(rand()%10 % 2 == 0) a[i] = rand()%50; else a[i] = -rand()%50;
    cout << "массив: "; for(i=0; i<n; i++) cout << a[i] << " "; cout << endl;
    
    max = a[0]; //пусть нулевой элемент будет наибольшим
    for(i=1; i<n; i++) if(max < a[i]) max = a[i]; 
    //проходим по всему массиву, находя наибольший элемент
    cout << "nmax = " << max; 
    
    //умножаем следующий элемент массива на произведение предыдущих
    for(i=0; i<n; i++) pro*=a[i];
    cout << "npro = " << pro; 
    cout << "nn" << endl;
    
    //освобождаем выделенную память
    delete [] a;
    system("Pause");
    return 0;   
}

Миниатюры

Массивы , найти максимальный положительный и произведение элементов
 



2



1718 / 567 / 187

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

Сообщений: 2,169

04.01.2018, 12:08

4

CopBuroJLoBa, а если все отрицательные будут (нельзя же исключать и такого случая), то что получим ?



0



CopBuroJLoBa

62 / 50 / 39

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

Сообщений: 133

04.01.2018, 12:16

5

мановар, недосмотрел, извините. Будет минимальное отрицательное число близкое к нулю. Так правильно?

C++
1
if(max >= 0) cout << "nmax = " << max; else cout << "nНет положительных чисел";

Миниатюры

Массивы , найти максимальный положительный и произведение элементов
 



0



1718 / 567 / 187

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

Сообщений: 2,169

04.01.2018, 12:22

6

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

Решение

Надо пройтись по массиву и найти 1-е положительное и сделать его максимальным, потом топать от него. Если положительных нет, то выдать об этом сообщение.



1



93 / 92 / 21

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

Сообщений: 187

Записей в блоге: 1

04.01.2018, 12:32

7

В этом случае мановар прав, нужно от первого положительного искать. Другое дело, знает ли об этом преподаватель, который давал это задание



0



1718 / 567 / 187

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

Сообщений: 2,169

04.01.2018, 12:38

8

Старый воин, на верняка знает. Вот увидит код, типа представленного выше и скажет : любезнейший, а что будем делать если все элементы отрицательные? Ну ка исправьте код быстренько. Вот тут ТС и сел.



0



0 / 0 / 0

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

Сообщений: 4

04.01.2018, 17:22

 [ТС]

9

Спасибо Огромное Люди Добрые.Я На первом курсе и полностью не освоил программирование,особенно массивы чуть тяжко даются моей голове

Добавлено через 4 часа 19 минут
А куда мне вставить этот код программы что то у меня неправильно получается,не компилируется она
CopBuroJLoBa.
if(max >= 0) cout << “nmax = ” << max; else cout << “nНет положительных чисел”;

Добавлено через 3 минуты
sad_guy, CopBuroJLoBa, я буду использовать первый код программы немножко изменю его.
А куда мне вставить этот код программы что то у меня неправильно получается,не компилируется она
if(max >= 0) cout << “nmax = ” << max; else cout << “nНет положительных чисел”;



0



4 / 4 / 1

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

Сообщений: 151

04.01.2018, 19:12

10

Если я не ошибаюсь, между n и переменной надо ставить двоеточие



0



1718 / 567 / 187

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

Сообщений: 2,169

04.01.2018, 20:25

11

Цитата
Сообщение от sad_guy
Посмотреть сообщение

надо ставить двоеточие

Надо просто написать нормальную рабочую программу.



0



0 / 0 / 0

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

Сообщений: 4

04.01.2018, 23:19

 [ТС]

12

мановар, она у него работает.Мне просто нужен код для отрицательных чисел и в какую строку в первом коде от sad_guy, её пихнуть нужно узнать мне.Помогите утопающему в программировании))

Добавлено через 10 минут
Все друзья я понял,все работает.Спасибо всем)))



0



1718 / 567 / 187

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

Сообщений: 2,169

05.01.2018, 09:35

13

del



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

05.01.2018, 09:35

Помогаю со студенческими работами здесь

Найти сумму всех отрицательных элементов двухмерного массива, максимальный положительный элемент и его местоположение
Проблема, нужно переписать программу чтобы она работала для двухбайтовых элементов массива, ниже…

Одномерные массивы. Найти минимальный положительный элемент, вычислить среднеарифметическое положительных элементов, вывести ненулевые элементы
помогите пожалуйста решить эту задачу по одномерным массивам

Дан одномерный массив, состоящий…

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

Найти сумму отрицательных элементов главной диагонали матрицы, произведение элементов 3-го столбца, максимальный элемент 1-й строки
помогите составить программу на QBasic!
дана матрица :
-12; 1; 2; -21;
11; -14; 13; 8;

Сформировать двумерный массив, найти произведение положительных элементов, найти максимальный элемент и его значения
Сформировать двумерный массив С (5,5) из случайных целых чисел на интервале .В массиве найти…

Найти максимальный элемент массива и произведение элементов до него
помогите, пожалуйста!

Дан массив А из 10 целых чисел введенных с клавиатуры, найти максимальный…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

13

a_list = [
    [9, 2, 3],
    [4, 5, 6],
    [7, 8, 1]
]
b_list = [1, 2, 3, 4, 5, 6, 78, 0]

индекс наибольшего элемента списка b_list:

index_b_max = b.index(max(b))

индекс наименьшего элемента списка списков a_list:

a_min = a_list[0][0]
index_a_min = 0, 0

for i, sublist in enumerate(a_list):
    for j, el in enumerate(sublist):
        if el < a_min:
            a_min = el
            index_a_min = i, j

поменять местами:

a_list[index_a_min[0]][index_a_min[1]], b_list[index_b_max] = b_list[index_b_max], a_list[index_a_min[0]][index_a_min[1]]

результат:

>>> a_list
[[9, 2, 3], [4, 5, 6], [7, 8, 78]]
>>> b_list
[1, 2, 3, 4, 5, 6, 1, 0]

UPD сам не знаю, откуда я взял “поменять местами” в условии?..
Просто значение максимального элемента b_list записать на место минимального в a_list:

a_list[index_a_min[0]][index_a_min[1]] = max(b_list)

Принцип поиска максимального или
минимального элемента массива заключается
в следующем: в дополнительную переменную
заносится значение первого элемента
массива, которое принимается за максимум
(минимум); затем организовывается перебор
оставшихся элементов массива, каждый
из которых сравнивается с максимумом
(минимумом); если текущий элемент массива
оказывается больше (меньше), чем принятый
за максимум (минимум), то этот элемент
становится максимальным (минимальным).
Таким образом, после завершения перебора
элементов массива в дополнительной
переменной окажется максимальное
(минимальное) значение среди элементов
массива. Фрагмент блок-схемы алгоритма,
реализующий описанный метод приведен
на рисунке 5.2.1.

В блоке 1 дополнительным переменным maxиmin, в которых
будут храниться максимальное и минимальное
значения соответственно, присваивается
значение 1-го элемента массива. Кроме
этого введены еще две переменныеimaxиimin, которые будут
использоваться для хранения номеров
максимального и минимального элементов
массива. С помощью блока модификации
(блок 2) организовывается цикл по перебору
элементов массива Х (перебор начинается
со 2-го элемента, так как 1-й элемент уже
обработан в блоке 1). Если текущий элемент
массиваXiбольше значения, которое хранится в
переменнойmax(блок 3), то за максимум принимается
значение этого элемента:max=Xi,
и запоминается его номер:imax=i(блок 4). Если текущий элемент массива
не больше максимума, то проверяется, не
меньше ли он минимума (блок 5). В случае
если текущий элементXiокажется меньше минимального значения,
которое хранится в переменнойmin,
то за минимум принимается значение
этого элемента:min=Xi,
и запоминается его номер:imin=i(блок 6). После выхода из цикла будут
выведены значения максимального и
минимального элементов, а также их
номера в массиве (блок 7).

Приведенный
выше алгоритм имеет один недостаток –
в нем используется две лишние переменныеmaxиmin.
Зная индекс элемента массива всегда
можно получить его значение, поэтому
нет необходимости хранить максимальное
и минимальное значения в отдельных
переменных. Оптимальный алгоритм
приведен на рис. 5.2.2.

В блоке 1 дополнительным переменным
imaxиimin,
используемых для хранения номеров
максимального и минимального элемента,
присваивается значение 1. Таким образом,
за максимум и минимум принимается 1-й
элемент массива, само же значение этого
элемента нигде дополнительно не
сохраняется. Оставшиеся элементы массива
также перебираются, начиная со второго
(блок 2). При этом каждый элемент массиваXi
сравнивается с
элементами, имеющими номер равныйimax(блок 3) иimin(блок
6), т.е. с элементами принятыми за максимум
(минимум). Если результат проверки
условий является истиной, то в переменныхimaxиiminсохраняются индексы новых максимального
(блок 4) и минимального (блок 6) элементов.
После выхода из цикла будут выведены
значения максимального и минимального
элементов, а также их номера в массиве
(блок 7).

Если в массиве имеется несколько
элементов равных по значению максимальному
(минимальному) элементу, то алгоритмы,
приведенные на рис 5.2.1 и 5.2.2, определят
позицию только первого такого элемента.
Например, чтобы найти количество
элементов массива равных максимальному
и позицию последнего такого элемента,
можно воспользоваться алгоритмом,
приведенным на рис. 5.2.3.

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

Вначале текущий элемент массива Xiсравнивается с максимальным (блок 3).
Если он оказывается больше элемента,
принятого за максимальный, то запоминается
номер этого элемента и переменнойkприсваивается 1 (блок 4). Это означает,
что встретился первый «новый» максимальный
элемент.

Если текущий элемент не больше максимума,
значит, он может быть равным или меньше
максимального элемента. Поэтому в блоке
5 текущий элемент массива Xi
проверяется на равенство
максимальному. Если он оказывается
равным максимуму, то опять запоминается
номер текущего элемента и значение
переменнойkувеличивается на 1 (блок 6). Это означает,
что встретился следующий элемент равный
максимальному элементу. В итоге после
выхода из цикла в переменнойimaxбудет храниться индекс последнего по
счету элемента равного максимальному,
а в переменнойkколичество элементов, равных максимуму.
Если же из блока 6 убрать операциюimax=i,
то в переменнойimax,
как и в предыдущих примерах будет
сохранен номер первого по счету элемента
равного максимальному.

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

Пример 5.2.В массиве Х [N]
найти минимальный положительный элемент.

Массив
Х может содержать как положительные,
так и отрицательные элементы. Поэтому
неизвестно какой элемент массива или
произвольное значение можно принять
за начальный минимум. Решение поставленной
задачи можно разбить на два этапа: поиск
положительных элементов в массиве с
определением первого такого элемента
и поиск среди положительных элементов
минимального по значению. Блок-схема
алгоритма приведена на рис. 5.2.4.

В нашем примере нумерация элементов
массива начинается с единицы, поэтому
в качестве начального значения для
переменной iminпринимается 0 (блок 1), т.е. значение
которое не могут принимать индексы
элементов массива Х. Таким образом
показывается, что при обработке массива
еще не встречался положительный элемент,
который можно принять за начальное
значение для минимума. Затем организовывается
цикл по перебору всех элементов массива
(блок 2). На каждом шаге цикла выполняется
следующая последовательность действий.

В блоке 3 проверяется, не является ли
текущий элемент массива Xiположительным. Если он отрицательный
или равен нулю, то такой элемент
пропускается и над ним не выполняется
никаких действий. ЕслиXi> 0, то в блоке 4 проверяется, не является
ли этот элемент первым встретившимся
положительным элементом массива
(признаком чего служит значениеiminравное 0). В этом случае в блоке 5 переменнойiminбудет присвоено
текущее значениеi.
Таким образом, за начальное значение
для минимума будет принято значение
первого по счету положительного элемента
массива Х. Эта ситуация может возникнуть
только один раз, и при дальнейшей работе
цикла блок 5 больше выполняться не будет.
Остальные положительные элементы
массива в блоке 6 будут сравниваться с
элементом массива, принятым в текущий
момент за минимум. Если такой элемент
окажется меньше минимального, то в блоке
7 в переменнойiminбудет сохранен его номерi.

После выхода из цикла проверяется, не
равно ли значение iminнулю (блок 8), так как сразу же выводить
значение минимального элемента массиваXimin
и его номерimin(блок 9) нельзя. Это объясняется тем что,
если в массиве Х не будет положительных
элементов, то значение переменнойiminостанется равным нулю, а обращение к
несуществующему элементу массиваХ0не допустимо.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

В данной статье вы узнаете, как написать реализацию программы на языке C++, которая находит максимальный и минимальный элемент в массиве и выводит на экран. А узнать множество решений других задач можно в разделе с решениями задач по программированию на языке C++.

Что такое максимальный и минимальный элемент массива

Для начала поймем, что же такое максимальный или минимальный элемент в массиве? Всё просто, максимальный элемент массива — это элемент, который имеет самое большое числовое значение, а минимальный элемент массива — это элемент, имеющий самое маленькое значение.

Пример: в массиве, состоящем из таких элементов: 3, 1, 0, -4, 16, 2 — максимальный элемент равен 16, т.к. это число больше других, а минимальный элемент равен -4, т.к. оно меньше остальных.

Поняв это, можно приступить к решению задачи.

Алгоритм решения задачи

— Инициализация массива, переменных, хранящих минимальное и максимальное значение.

— Заполнение массива случайными числами при помощи цикла и функции, возвращающей случайные числа.

— Вывод массива.

— Сравнение каждого элемента массива: Если элемент больше переменной с максимальным значением, то значение записывается в переменную; Если элемент меньше переменной с минимальным значением, то значение записывается в переменную.

— Вывод переменных с максимальным и минимальным элементом.

Алгоритм решения на языке C++

Для начала нужно подключить заголовок ввода/вывода <iostream>, заголовок стандартных функций <cstdlib> в ней имеется функция rand(), которая позволит заполнить массив случайными числами. Заполнение каждого элемента массива вручную требует времени, его можно сэкономить автоматизировав процесс. Подключаем пространство имён std. Создаём константу N, она будет определять количество элементов в массиве.

#include <iostream> 
#include <cstdlib> 

using namespace std; //Пространство имён std

const int N = 10;//Количество элементов в массиве

int main() 
{

	return 0;
}

В теле функции main() инициализируем массив целых чисел из N лементов, целочисленные переменные max и min, они будут хранить значение максимального и минимального элементов массива соответственно.

	int mass[N], max, min;

Теперь заполним массив случайными числами. Для этого используем цикл от 0 до N (не включительно), который пройдется по каждому элементу массива и поместит случайное значение от 0 до 98. Это можно сделать, использовав функцию rand(), которая возвращает случайное число. Поделить возвращаемое значение на 99 и внести в ячейку остаток от деления, таким образом значение ячейки будет иметь значение в диапазоне от 0 до 99(не включая 99, т.к. остаток от деления не может быть кратным делителю).  При этом выведем значения элементов массива на экран.

	cout << "Элементы: |";
	for(int r = 0; r<N; r++) // Цикл от 0 до N
	{
		mass[r] = rand()%99; // Заполнение случайным числом
		cout << mass[r] << "|"; // Вывод значения
	}
	cout << endl;

В результате программа выведет на экран значения элементов массива, разделенное вертикальными чертами:

Элементы: |28|43|72|79|23|70|55|39|69|1|

Обратите внимание! Если вы программируете под Windows и у Вас не отображаются русские символы в консоли, то советую Вам почитать о решении этой проблемы в статье Русские символы(буквы) при вводе/выводе в консоль на C++.

Далее определим максимальный и минимальный элемент в массиве, для этого вновь пройдемся по массиву циклом. При помощи условия определим максимальный и минимальный элемент массива.

Перед циклом нужно будет занести первый элемент массива в переменные min и max, они будут хранить минимальное и максимальное значение изначально, а во время цикла поменяют его, если найдётся значение меньше для min или больше для max.

	max = mass[0];//Помещаем значения 1-го элемента
	min = mass[0];//массива в переменные
	for(int r = 1; r<N; r++)
	{
		if(max < mass[r]) max = mass[r]; //если значение элемента больше значения переменной max, то записываем это значение в переменную
		if(min > mass[r]) min = mass[r]; //аналогично и для min
	}

После цикла выведем значения min и max.

	cout << "Min: " << min << endl;
	cout << "Max: " << max << endl;

После компиляции и запуска прогамма выводит следующее

Элементы: |28|43|72|79|23|70|55|39|69|1|
Min: 1
Max: 79

Пробегаемся по элементам массива глазами и видим, что минимальное значение — 1, а максимальное — 79. Переменные min и max имеют эти же значения соответственно, следовательно алгоритм работает.

Весь листинг программы на C++

#include <iostream>
#include <cstdlib>

using namespace std;

const int N = 10;

int main() 
{
	int mass[N], max, min;

	cout << "Элементы: |";
	for(int r = 0; r<N; r++)
	{
		mass[r] = rand()%99;
		cout << mass[r] << "|";
	}
	cout << endl;
	
	max = mass[0];
	min = mass[0];
	for(int r = 1; r<N; r++)
	{
		if(max < mass[r]) max = mass[r];
		if(min > mass[r]) min = mass[r];
	}
	cout << "Min: " << min << endl;
	cout << "Max: " << max << endl;
	
	return 0;
}

const
  n = 20;
 
var
  C: array[1..n] of real;
  i: byte;
  a, b, maxelem: real;
  first: boolean;
  
begin
  write('a = ');
  readln(a);
  repeat
    write('b = ');
    readln(b);
  until b > a;
  first := false; //положительный элемент не найден
  for i := 1 to n do begin
    c[i] := random * (b - a) + a;
    write(' ', c[i]:0:3);
    if c[i] > 0 then
      if not first then begin
        maxelem := c[i];
        first := true //положительный элемент найден
      end else
        if maxelem < c[i] then maxelem := c[i]
  end;
  writeln;
  if first then writeln('Максимальный из положительных элементов: ', maxelem:0:3)
  else writeln('Положительных элементов нет')
end.

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