Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/124: Рейтинг темы: голосов - 124, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 45
1

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

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

Author24 — интернет-сервис помощи студентам
Дан одномерный массив. Определить количество максимальных элементов в массиве.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2011, 19:26
Ответы с готовыми решениями:

Вычислить количество максимальных элементов в массиве
Вычислить количество максимальных элементов в массиве Помогите пожалуйста

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

Написать функцию, которая вычисляет количество максимальных элементов в массиве
#include <iostream> using namespace std; int main() { int n, max, k; cout <<...

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

88
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:35 41
Author24 — интернет-сервис помощи студентам
Петррр, можно было просто за максимум взять -INT_MAX (INT_MAX лежит в limits.h) и было бы счастье .
0
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 20:37 42
CyBOSSeR, спасибо. Где ж ты раньше был.? Сейчас глуну.
0
Заблокирован
28.08.2011, 20:37 43
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вы ее видели? Посмотрите внимательно, она возвращает итератор, а в случае пустой последовательности итератор указывающий на элемент следующий за последним, т.е. этот алгоритм будет работать для пустых последовательностей, достаточно лишь проверить, что возвращаемое значение не указывает на элемент следующий за последним. Ваше же "профессионально решение" в случае пустой последовательности вернет мусор, которым будет инициализировано поле count.
Почему же он вернет мусор?! Посмотрите внимательно! Алгоритму std::for_each (если вы смотрите именно то мле решение, что я имею в виду), передается функционал, конструктор которого инициализирует счетчик равным 0.

Так о каком мусоре вы говорите?!
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
28.08.2011, 20:39 44
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
0
Заблокирован
28.08.2011, 20:40 45
Цитата Сообщение от alex_x_x Посмотреть сообщение
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
Отвечаю: вы не инициализировали T max, а потому в нем может быть любое начальное значение.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 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;
};
1
alex_x_x
28.08.2011, 20:44
  #47

Не по теме:

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

0
Заблокирован
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;
};
Я думаю, вы допустили ошибку. У вас не увеличивается счетчик при первой итерации алгоритма. Вы, вижу, исправили эту ошибку.

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

Добавлено через 7 минут
Цитата Сообщение от alex_x_x Посмотреть сообщение
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
На самом деле отличий много! Мой код профессиональный, ваг - нет. Почему? Вы не адаптировали свой функционал, то есть в нем не определены соответсвующие typedef. Вы счетчик объявили как int, в то время, как например, у класса std::string size_type Объявлен как size_t. И, в третьих, как говорится, хорошо ложка к обеду. Ваш алгоритм уже совершенно не актуален после появления моего алгоритма. Если бы вы первым представили свой алгоритм,то тогда он бы мог быть актуальным.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 21:27 51
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы не адаптировали свой функционал, то есть в нем не определены соответсвующие typedef.
Зачем здесь typedef?
Цитата Сообщение от Сыроежка Посмотреть сообщение
И, в третьих, как говорится, хорошо ложка к обеду. Ваш алгоритм уже совершенно не актуален после появления моего алгоритма. Если бы вы первым представили свой алгоритм,то тогда он бы мог быть актуальным.
По-моему, в этой теме первым появилось решение alex_x_x'а. Да и ничего сверхестественного в Вашем решении нет, я когда увидел эту тему сразу подумал о решении схожим с решением alex_x_x'а, так что ничего оригинального в Вашем подходе нет, чтобы так им кичиться.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:11 52
Цитата Сообщение от silent_1991 Посмотреть сообщение
Давайте. Ваша функция написана "в лоб", ибо она не универсальна. Предложенный мной вариант - алгоритмический....
Не буду разрывать муравейник в этой теме, а то споры те еще шли. Во-первых, моя функция применима в С++ и С (а человеку именно это и надо было). А во-вторых, название "в лоб" к ней не применимо, так как она для С.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 23:14 53
Цитата Сообщение от Thinker Посмотреть сообщение
А во-вторых, название "в лоб" к ней не применимо, так как она для С
Не вижу связи.

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

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

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

Добавлено через 41 секунду
Цитата Сообщение от Thinker Посмотреть сообщение
странные просьбы были у него
А я о чём
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:24 56
Цитата Сообщение от silent_1991 Посмотреть сообщение
Задача учебная, это понятно. Но всё же в своё время появилась парадигма структурного программирования. Она заключалась в том, чтобы разбивать код на подпрограммы, которые и взаимодействовали между собой. Так зачем же отметать эту парадигму и снова писать весь функционал в одном месте?
Я с вами не спорю. Понимаете, студентам полезно рассматривать задачи с разных сторон. Ведь все эти парадигмы не подходят для олимпиадных, например задач. Поэтому надо хотя бы понимать, что бывают и другие подходы.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 23:28 57
Thinker, это-то всё тоже понятно, но, к сожалению, такому "студенту", как ТС, нужно одно - отметка о сдаче лабы. Поэтому такие задачи мы пишем не для них, а больше для себя (выдалась свободная минутка - написал пару-тройку таких лаб, для души). А для себя надо писать правильно.
2
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:32 58
Цитата Сообщение от silent_1991 Посмотреть сообщение
А для себя надо писать правильно.
Все от задачи зависит. Где очень нужна скорость, то приходится не то еще придумывать.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 23:36 59
Thinker, где очень нужна скорость, там вообще ассемблерные вставки используют. Но сомневаюсь, что это в данном случае уместно. Так что в данном лучше красиво и элегантно, чем быстро.
А вообще, преждевременная оптимизация - корень всех бед (с)
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
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;
   }    
}
1
29.08.2011, 00:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2011, 00:15
Помогаю со студенческими работами здесь

Определить количество максимальных элементов в массиве
Постановка задачи: Дан двумерный массив. Определить: а) Количество максимальных элементов в...

Определить количество максимальных элементов в массиве
Дан двумерный массив. Определить: а) количество макс. элементов в массиве б) количество мин....

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

Определить количество максимальных элементов в массиве
Щас через минуты 2 будет к\р, поможете?))) Я буду выкладывать задачи! :drink: Добавлено через 4...


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

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru