Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 60, средняя оценка - 4.75
валентин777
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 45
26.08.2011, 19:26     Определить количество максимальных элементов в массиве. #1
Дан одномерный массив. Определить количество максимальных элементов в массиве.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2011, 19:26     Определить количество максимальных элементов в массиве.
Посмотрите здесь:

C++ В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов.
В массиве A из N элементов (N не больше 30) определить количество элементов... C++
В массиве А(n) (n<=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю. C++
C++ В массиве X определить количество элементов
Определить количество интересных элементов в массиве C++
C++ В матрице случайных числе определить количество положительных, отрицательных, нулевых и максимальных элементов
C++ Определить количество элементов в массиве структур
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:35     Определить количество максимальных элементов в массиве. #41
Петррр, можно было просто за максимум взять -INT_MAX (INT_MAX лежит в limits.h) и было бы счастье .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 20:37     Определить количество максимальных элементов в массиве. #42
CyBOSSeR, спасибо. Где ж ты раньше был.? Сейчас глуну.
Сыроежка
Заблокирован
28.08.2011, 20:37     Определить количество максимальных элементов в массиве. #43
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вы ее видели? Посмотрите внимательно, она возвращает итератор, а в случае пустой последовательности итератор указывающий на элемент следующий за последним, т.е. этот алгоритм будет работать для пустых последовательностей, достаточно лишь проверить, что возвращаемое значение не указывает на элемент следующий за последним. Ваше же "профессионально решение" в случае пустой последовательности вернет мусор, которым будет инициализировано поле count.
Почему же он вернет мусор?! Посмотрите внимательно! Алгоритму std::for_each (если вы смотрите именно то мле решение, что я имею в виду), передается функционал, конструктор которого инициализирует счетчик равным 0.

Так о каком мусоре вы говорите?!
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.08.2011, 20:39     Определить количество максимальных элементов в массиве. #44
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
Сыроежка
Заблокирован
28.08.2011, 20:40     Определить количество максимальных элементов в массиве. #45
Цитата Сообщение от alex_x_x Посмотреть сообщение
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
Отвечаю: вы не инициализировали T max, а потому в нем может быть любое начальное значение.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:42     Определить количество максимальных элементов в массиве. #46
Сыроежка, не увидел инициализацию поля count в конструкторе . Но тогда возникает вопрос, зачем нужно тогда нужно поле initialized? Что мешает сделать так:
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
template <typename T>
 
class MaxCount : public std::unary_function<T, void>
{
public:
   MaxCount() : count( 0 ) {}
   void operator ()( const T &x )
   {
      if ( count == 0 )
      {
         max = x;
         count = 1;
      }
      else if ( max == x )
      {
         ++count;
      }
      else if ( max < x )
      {
         max   = x;
         count = 1;
      }
   }
 
public:
   size_t count;
 
private:
   T max;
};
alex_x_x
28.08.2011, 20:44
  #47

Не по теме:

за меня ответили

Сыроежка
Заблокирован
28.08.2011, 20:45     Определить количество максимальных элементов в массиве. #48
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Сыроежка, не увидел инициализацию поля count в конструкторе . Но тогда возникает вопрос, зачем нужно тогда нужно поле initialized? Что мешает сделать так:
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
template <typename T>
 
class MaxCount : public std::unary_function<T, void>
{
public:
   MaxCount() : count( 0 ) {}
   void operator ()( const T &x )
   {
      if ( count == 0 )
      {
         max = x;
         count = 1;
      }
      else if ( max == x )
      {
         ++count;
      }
      else if ( max < x )
      {
         max   = x;
         count = 1;
      }
   }
 
public:
   size_t count;
 
private:
   T max;
};
Я думаю, вы допустили ошибку. У вас не увеличивается счетчик при первой итерации алгоритма. Вы, вижу, исправили эту ошибку.

Да, можно сделать и так. Но это нисколько не умаляет достоинства моего алгоритма.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:47     Определить количество максимальных элементов в массиве. #49
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я думаю, вы допустили ошибку. У вас не увеличивается счетчик при первой итерации алгоритма.
Сначала запостил, потом поправил, посмотрите, в вашей цитате уже поправленный вариант.
Сыроежка
Заблокирован
28.08.2011, 20:57     Определить количество максимальных элементов в массиве. #50
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Сначала запостил, потом поправил, посмотрите, в вашей цитате уже поправленный вариант.
Да, уже поправленный. Но как я уже сказал, это нисколько не умаляет достоинств алгоритма. К тому же если вы внимательно почитаете то мое сообщение с алгоритмом, я написал его "на коленках", то есть код не набирался в компиляторе.

Добавлено через 7 минут
Цитата Сообщение от alex_x_x Посмотреть сообщение
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
На самом деле отличий много! Мой код профессиональный, ваг - нет. Почему? Вы не адаптировали свой функционал, то есть в нем не определены соответсвующие typedef. Вы счетчик объявили как int, в то время, как например, у класса std::string size_type Объявлен как size_t. И, в третьих, как говорится, хорошо ложка к обеду. Ваш алгоритм уже совершенно не актуален после появления моего алгоритма. Если бы вы первым представили свой алгоритм,то тогда он бы мог быть актуальным.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 21:27     Определить количество максимальных элементов в массиве. #51
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы не адаптировали свой функционал, то есть в нем не определены соответсвующие typedef.
Зачем здесь typedef?
Цитата Сообщение от Сыроежка Посмотреть сообщение
И, в третьих, как говорится, хорошо ложка к обеду. Ваш алгоритм уже совершенно не актуален после появления моего алгоритма. Если бы вы первым представили свой алгоритм,то тогда он бы мог быть актуальным.
По-моему, в этой теме первым появилось решение alex_x_x'а. Да и ничего сверхестественного в Вашем решении нет, я когда увидел эту тему сразу подумал о решении схожим с решением alex_x_x'а, так что ничего оригинального в Вашем подходе нет, чтобы так им кичиться.
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:11     Определить количество максимальных элементов в массиве. #52
Цитата Сообщение от silent_1991 Посмотреть сообщение
Давайте. Ваша функция написана "в лоб", ибо она не универсальна. Предложенный мной вариант - алгоритмический....
Не буду разрывать муравейник в этой теме, а то споры те еще шли. Во-первых, моя функция применима в С++ и С (а человеку именно это и надо было). А во-вторых, название "в лоб" к ней не применимо, так как она для С.
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.08.2011, 23:14     Определить количество максимальных элементов в массиве. #53
Цитата Сообщение от Thinker Посмотреть сообщение
А во-вторых, название "в лоб" к ней не применимо, так как она для С
Не вижу связи.

Добавлено через 1 минуту
Цитата Сообщение от Thinker Посмотреть сообщение
а человеку именно это и надо было
Человек, по-моему, и сам не знает, чего ему надо. То ему в С++ надо, то в С...
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:17     Определить количество максимальных элементов в массиве. #54
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не вижу связи.
Ну, ваш аргумент про универсальность я понял. Но зачем здесь надо было писать отдельные функции поиска максимума, отдельно подсчета количества элементов с тем или иным значением и т.д. Это конкретный пример с одним проходом и все. А про С это то, что у вас уже чисто С++ вариант.

Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
Человек, по-моему, и сам не знает, чего ему надо. То ему в С++ надо, то в С...
Это уже вспоминать смешно, странные просьбы были у него.
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.08.2011, 23:20     Определить количество максимальных элементов в массиве. #55
Цитата Сообщение от Thinker Посмотреть сообщение
Но зачем здесь надо было писать отдельные функции поиска максимума, отдельно подсчета количества элементов с тем или иным значением и т.д.
Задача учебная, это понятно. Но всё же в своё время появилась парадигма структурного программирования. Она заключалась в том, чтобы разбивать код на подпрограммы, которые и взаимодействовали между собой. Так зачем же отметать эту парадигму и снова писать весь функционал в одном месте?

Цитата Сообщение от Thinker Посмотреть сообщение
А про С это то, что у вас уже число С++ вариант
Я это понимаю, но смысл-то один. В одну функцию передаётся результат выполнения другой. Разница в том, что я использовал готовые функции, а можно было изобрести велосипед и написать свои (задача-то учебная, простительно).

Добавлено через 41 секунду
Цитата Сообщение от Thinker Посмотреть сообщение
странные просьбы были у него
А я о чём
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:24     Определить количество максимальных элементов в массиве. #56
Цитата Сообщение от silent_1991 Посмотреть сообщение
Задача учебная, это понятно. Но всё же в своё время появилась парадигма структурного программирования. Она заключалась в том, чтобы разбивать код на подпрограммы, которые и взаимодействовали между собой. Так зачем же отметать эту парадигму и снова писать весь функционал в одном месте?
Я с вами не спорю. Понимаете, студентам полезно рассматривать задачи с разных сторон. Ведь все эти парадигмы не подходят для олимпиадных, например задач. Поэтому надо хотя бы понимать, что бывают и другие подходы.
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.08.2011, 23:28     Определить количество максимальных элементов в массиве. #57
Thinker, это-то всё тоже понятно, но, к сожалению, такому "студенту", как ТС, нужно одно - отметка о сдаче лабы. Поэтому такие задачи мы пишем не для них, а больше для себя (выдалась свободная минутка - написал пару-тройку таких лаб, для души). А для себя надо писать правильно.
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:32     Определить количество максимальных элементов в массиве. #58
Цитата Сообщение от silent_1991 Посмотреть сообщение
А для себя надо писать правильно.
Все от задачи зависит. Где очень нужна скорость, то приходится не то еще придумывать.
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.08.2011, 23:36     Определить количество максимальных элементов в массиве. #59
Thinker, где очень нужна скорость, там вообще ассемблерные вставки используют. Но сомневаюсь, что это в данном случае уместно. Так что в данном лучше красиво и элегантно, чем быстро.
А вообще, преждевременная оптимизация - корень всех бед (с)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2011, 00:15     Определить количество максимальных элементов в массиве.
Еще ссылки по теме:

C++ В чем ошибка? В массиве целых чисел найти количество максимальных элементов
C++ Определить количество положительных элементов в массиве
C++ В массиве из 50 элементов определить количество элементов, кратных 6 и найти минимальный элемент
C++ Определить количество ненулевых элементов в массиве
C++ Определить количество различных элементов в массиве

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
29.08.2011, 00:15     Определить количество максимальных элементов в массиве. #60
silent_1991, все относительно и универсальность тоже
есть ситуации когда нельзя сделать повторный обход, самый простой вариант - работа с потоком

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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
 
template<typename T> struct Comp
{
   Comp() : count(0) {}
   void operator() (const T& t) 
   {
      if (t > max || 0 == count){ max = t; count = 1; }
      else if (t==max) ++count;
   }   
   
   int count;
   T max; 
};
 
int main()
{ 
   std::stringstream str("-10 3 23 2 3 -34 12 23"); 
   Comp<int> comp = std::for_each( std::istream_iterator<int>(str),
                                   std::istream_iterator<int>(),
                                   Comp<int>() );
   if (comp.count)
   {
     std::cout << comp.max << ", count - " << comp.count << std::endl;
   }    
}
Yandex
Объявления
29.08.2011, 00:15     Определить количество максимальных элементов в массиве.
Закрытая тема Создать тему
Опции темы

Текущее время: 03:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru