Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 60, средняя оценка - 4.75
валентин777
0 / 0 / 1
Регистрация: 01.06.2011
Сообщений: 45
#1

Определить количество максимальных элементов в массиве. - C++

26.08.2011, 19:26. Просмотров 8743. Ответов 88
Метки нет (Все метки)

Дан одномерный массив. Определить количество максимальных элементов в массиве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2011, 19:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить количество максимальных элементов в массиве. (C++):

Определить индекс первого из максимальных элементов в массиве
Пожалуйста, решите те задачи которые можете: 1).Сортировка выбором...

В чем ошибка? В массиве целых чисел найти количество максимальных элементов
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 16...

Определить количество одинаковых максимальных четных значений среди элементов массива
Дан массив А(100), заполненный случайными значениями в диапазоне от 150 до 250....

В матрице случайных числе определить количество положительных, отрицательных, нулевых и максимальных элементов
1. В матрице размерами N*M определить количество положительных, отрицательных...

В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов.
1. В массиве A из N элементов (N не больше 30) определить количество элементов,...

В массиве А(n) (n<=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю.
В массиве А(n) (n&lt;=7) хотя бы один нуль. Определить количество положительных и...

88
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
31.08.2011, 20:40 #81
Цитата Сообщение от easybudda Посмотреть сообщение
Я-то думал, что если t <= max, то чему там count равно уже не проверяется... Или ещё какой-то тонкости не улавливаю?
Выражения в условных операторах вычисляются слева направо. При этом не обязательно вычисляется все выражение целиком.
В случае выражения expr1 && expr2 && ... && exprn, вычисление закончится "преждевременно" если одно из подвыражений окажется ложным, а следственно и все выражение целиком.
В случае выражения expr1 || expr2 || ... || exprn, вычисление закончится "преждевременно" если одно из подвыражений окажется истинным, а следственно и все выражение целиком.

У тела первого условного оператора в коде alex_x_x'a при первом вызове оператора() нет шансов не выполнится.
Цитата Сообщение от easybudda Посмотреть сообщение
А чем, кстати, по умолчанию поля типа int в классе инициализируются?
Если они явно не были инициализированы, то чем повезет . Это относится ко всем примитивным типам.
1
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
31.08.2011, 20:42 #82
Цитата Сообщение от easybudda Посмотреть сообщение
А чем, кстати, по умолчанию поля типа int в классе инициализируются?
Если в списке инициализации их нет, то они вообще не инициализируются. В отличие от объектов.

Добавлено через 55 секунд

Не по теме:

Эх...

0
Сыроежка
Заблокирован
02.09.2011, 21:07 #83
Цитата Сообщение от easybudda Посмотреть сообщение
Странно, но работает. Я-то думал, что если t <= max, то чему там count равно уже не проверяется... Или ещё какой-то тонкости не улавливаю?

Вот кстати ещё одно очень простое любительское решение
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
 
int main(){
    const int size(10);
    int arr[size] = { 1, 3, 5, 3, 2, 5, 4, 3, 1, 2 };
    int me = *std::max_element(arr, arr + size);
    std::cout << "Max element: " << me << " meets " << std::count(arr, arr + size, me) << " times" << std::endl;
    
    return 0;
}
Может тоже было, но на вскидку не нашёл в этой теме.



Вот ей-богу надоело уже! Оставьте при себе своё мнение о профессионализме участников форума, а то ведь в правилах есть пункт "неуважительное отношение". С совсем небольшой натяжкой вполне применим. Надо оно Вам?

Добавлено через 4 минуты
А чем, кстати, по умолчанию поля типа int в классе инициализируются? Случайно не INT_MIN (ну или как там в С++ правильно минимальное значение обозначается)? А то есть подозрение, что минимальный элемент вот как-раз из-за этого нюанса и не найдётся, и не посчитается...
Вы берете примитивные ситуации и радуетесь, что работает. Я вас разочарую! Представьте себе, что у вас объект класса содержит указатель на char. А при сравнении элементов используется стандартная функция strcmpТогда использование перегруженного оператора сравнения может привести к непредсказуемым последствием.
Вы мне заявите, что пользователь при определении конструктора по умолчанию должен был инициализировать этот указатель значением NULL. Но что изменится? Произойдет аварийное завершение функции, так как будет обращение к нулевому адресу!
Вы мне снова можете возразить, что пусть пользователь об этом сам позаботится в реализации оператора <. Хорошо. Пользователь позаботился и включил в реализацию этого оператора исключение.

bool operator < ( const T &, const T & ) throw( std::exception );

Вполне грамотный код. Если его объект содержит какие-то не инициализированные данные, то произойдет исключение. Итак, он запускает алгоритм и получает исключение! "Откуда?!!!", - удивится пользователь. Ведь он на вход давал вполне корректные данные.

То есть на сампом деле имеет место, что, образно говоря, вы за его спиной, то есть без его санкции используете объекты, которые пользователь не хотел бы чтобы они использовались.

Другой пример. Я встречал его в бухгалтерии. Там можно было создавать документ с пустыми полями. То есть ни дата, ни номер документа будут неизвестны, пока бухгалтер не заполнит поля документа и не сохранит его в базе. Однако если каким-то случайным образом в базе данных обнаруживался пустой документ, то система его регистрировала в журнале ошибок. То есть при каждой операции, если, вдруг, обнаруживался пустой документ, сразу же регистрировалась такая ситуация, так как этого не должно было быть, потому что этого, как говорят, не могло быть.
Теперь представим использование вашего алгоритма. Выполняется сравнение, и система обнаруживает, что откуда-то появился пустой документ, например, пустая накладная. Система заносит об этом в свой жернал регистрации соответсвующее сообщение, чтобы пользователи потом разобрались, что произошло. И так каждый раз, когда вы будете вызывать этот алгоритм, журнал регистрации будет пополняться сообщениями об ошибке! Мало того, что это может привести к переполнению жернала регистрации ошибок, пользователи вообще могут не понять, из-за чего это сообщение беретсая. А берется оно из-за того, что алгоритм самовольно начинает сравнивать не инициализированный объект с уже имеющимся!

Это вообще плохой дизайн, когда программа делает то, о чем ее не просит пользователь! То есть, как в данном алгоритме, начинает сравнивать не инициализированные объекты.

Добавлено через 1 минуту
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Выражения в условных операторах вычисляются слева направо. При этом не обязательно вычисляется все выражение целиком.
В случае выражения expr1 && expr2 && ... && exprn, вычисление закончится "преждевременно" если одно из подвыражений окажется ложным, а следственно и все выражение целиком.
В случае выражения expr1 || expr2 || ... || exprn, вычисление закончится "преждевременно" если одно из подвыражений окажется истинным, а следственно и все выражение целиком.

У тела первого условного оператора в коде alex_x_x'a при первом вызове оператора() нет шансов не выполнится.

Если они явно не были инициализированы, то чем повезет . Это относится ко всем примитивным типам.
Проблема в том, что вы забываете, что эти операторы могут быть перегружены! По крайней мере стандарт этого не запрещает!
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
02.09.2011, 21:24 #84
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы берете примитивные ситуации и радуетесь, что работает. Я вас разочарую! Представьте себе, что у вас объект класса содержит указатель на char. А при сравнении элементов используется стандартная функция strcmpТогда использование перегруженного оператора сравнения может привести к непредсказуемым последствием.
Вы мне заявите, что пользователь при определении конструктора по умолчанию должен был инициализировать этот указатель значением NULL. Но что изменится? Произойдет аварийное завершение функции, так как будет обращение к нулевому адресу!
Вы мне снова можете возразить, что пусть пользователь об этом сам позаботится в реализации оператора <. Хорошо. Пользователь позаботился и включил в реализацию этого оператора исключение.
bool operator < ( const T &, const T & ) throw( std::exception );
Вполне грамотный код. Если его объект содержит какие-то не инициализированные данные, то произойдет исключение. Итак, он запускает алгоритм и получает исключение! "Откуда?!!!", - удивится пользователь. Ведь он на вход давал вполне корректные данные.
То есть на сампом деле имеет место, что, образно говоря, вы за его спиной, то есть без его санкции используете объекты, которые пользователь не хотел бы чтобы они использовались.
Другой пример. Я встречал его в бухгалтерии. Там можно было создавать документ с пустыми полями. То есть ни дата, ни номер документа будут неизвестны, пока бухгалтер не заполнит поля документа и не сохранит его в базе. Однако если каким-то случайным образом в базе данных обнаруживался пустой документ, то система его регистрировала в журнале ошибок. То есть при каждой операции, если, вдруг, обнаруживался пустой документ, сразу же регистрировалась такая ситуация, так как этого не должно было быть, потому что этого, как говорят, не могло быть.
Теперь представим использование вашего алгоритма. Выполняется сравнение, и система обнаруживает, что откуда-то появился пустой документ, например, пустая накладная. Система заносит об этом в свой жернал регистрации соответсвующее сообщение, чтобы пользователи потом разобрались, что произошло. И так каждый раз, когда вы будете вызывать этот алгоритм, журнал регистрации будет пополняться сообщениями об ошибке! Мало того, что это может привести к переполнению жернала регистрации ошибок, пользователи вообще могут не понять, из-за чего это сообщение беретсая. А берется оно из-за того, что алгоритм самовольно начинает сравнивать не инициализированный объект с уже имеющимся!
Это вообще плохой дизайн, когда программа делает то, о чем ее не просит пользователь! То есть, как в данном алгоритме, начинает сравнивать не инициализированные объекты.
Много букв и все не по делу. Как это относится к сказанному easybudda? О чем Вы вообще?

Цитата Сообщение от Сыроежка Посмотреть сообщение
Проблема в том, что вы забываете, что эти операторы могут быть перегружены! По крайней мере стандарт этого не запрещает!
Приведите пример когда перегрузка оператора || приведет к тому что тело условного оператора не выполнится:
C++
1
2
3
4
SomeType t;
int count = 0;
if (t > max || 0 == count)
  std::cout << "it works!" << std::endl;
Вот только исключениями бросаться не надо.

Цитата Сообщение от Сыроежка Посмотреть сообщение
bool operator < ( const T &, const T & ) throw( std::exception );
Непустые спецификации исключений уже давно преданы анафеме, статья Герба Саттера по этому поводу.
0
Сыроежка
Заблокирован
02.09.2011, 21:31 #85
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Много букв и все не по делу. Как это относится к сказанному easybudda? О чем Вы вообще?

Приведите пример когда перегрузка оператора || приведет к тому что тело условного оператора не выполнится:
C++
1
2
3
4
SomeType t;
int count = 0;
if (t > max || 0 == count)
  std::cout << "it works!" << std::endl;
Непустые спецификации исключений уже давно преданы анафеме, статья Герба Саттера по этому поводу.
Я не занимаюсь, как бы помягче сказать, неадекватными людьми ! Это вы не по адресу обратились. Если вы не поняли, о чем я написал, и на какой вопрос я ответил, это ваши проблемы.
Что касается перегрузки операторов, то вы и здесь не поняли, о чем идет речь! Речь идет о том, что когда вызывается перегруженный оператор, то условие того, что правое выражение не будет выполняться, о чем в том сообщении говорилось, не верно! Вызывается оператор-функция, и все ее аргументы будут вычисляться!

[текст удалён]
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
02.09.2011, 21:51 #86
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Сыроежка Посмотреть сообщение
Если вы не поняли, о чем я написал, и на какой вопрос я ответил, это ваши проблемы.
Если Вы не в состоянии донести информацию до слушателя, то это исключительно Ваша проблема. Или Вы просто говорите, чтобы сказать?
Цитата Сообщение от Сыроежка Посмотреть сообщение
Что касается перегрузки операторов, то вы и здесь не поняли, о чем идет речь! Речь идет о том, что когда вызывается перегруженный оператор, то условие того, что правое выражение не будет выполняться, о чем в том сообщении говорилось, не верно!
Тот факт, что переопределение логического оператора грубо говоря отменяет sequence point, а следственно и "ленивое" вычисление условного оператора, никакого отношения к вопросу на который был дан ответ не имеет.

Сыроежка, думаю, Вам ничего в этой жизни как разработчику не грозит. Вы не умеете говорить, не умеете слушать, Вы игнорируете вопросы. Врядли адекватный человек будет работать в команде с такой надменной личностью как Вы. Самомнение аля "Я Дартаньян, все п**арасы" службу Вам не сослужит. Будьте проще.
3
NickoTin
Почетный модератор
Эксперт .NET
8435 / 3557 / 401
Регистрация: 14.06.2010
Сообщений: 4,512
Записей в блоге: 9
02.09.2011, 22:01 #87
Сыроежка, почти каждая тема с Вашим участием разрастается до 5+ страниц, и я Вас предупреждаю: это не раздел холивары. Я Вам предлагаю покинуть данную тему, пока не были применены санкции.
1
magirus
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
27941 / 15659 / 960
Регистрация: 15.09.2009
Сообщений: 67,839
Записей в блоге: 78
02.09.2011, 22:10 #88
SSTREGG, простите, но так как тема перешла на личности, и возвращаться в лоно адекватного обсуждения, не смотря на увещевания администрации, не собирается - ЗАКРЫТО.
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
03.09.2011, 09:27 #89
Да и санкции применены после многократных предупреждений.
0
03.09.2011, 09:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2011, 09:27
Привет! Вот еще темы с решениями:

В массиве из 50 элементов определить количество элементов, кратных 6 и найти минимальный элемент
В массиве из 50 элементов определить количество элементов, кратных 6 и найти...

В массиве X определить количество элементов
В массиве X определить количество элементов меньших среднего ариф*метического...

В массиве A из N элементов (N не больше 30) определить количество элементов...
1. В массиве A из N элементов (N не больше 30) определить количество элементов,...

Определить количество положительных элементов в массиве
Написать функцию, определяющую количество положительных элементов в массиве....


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

Или воспользуйтесь поиском по форуму:
89
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru