Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2014, 17:57   #1
CppForYou
Пользователь
 
Регистрация: 08.03.2013
Сообщений: 37
По умолчанию сортировка массива

программа работает правильно, единственное нужно использовать сортировку (по убыванию как мне сказали)
Код:
/*Задан неупорядоченный числовой массив, состоящий из n элементов.
	7. Используя сортировку массива, определить количество элементов, совпадающих по значению с максимальным. 
	*/
#include <iostream>
using namespace std;
 
int SumMaxElement(int mas [], int n, int &cnt)//функция сумм максмальных элементов
{
    int max = mas[0];//определение перменных
    for (int i = 0; i < n; i++)
    {
        if (max == mas[i])//находит максимальный элемент 
            cnt++; 
        if (max < mas[i])//если в массиве встретится такой же элемент (максимальный)
        {
            max = mas[i]; // то считаем их
            cnt = 1;
        }
    }
    return max;
}
//главная функция
int main()
{
    setlocale(LC_ALL, "rus");
    int n, max, cnt = 0;
    int a[100];
    cout << "Введите кол-во элементов массива: ";
    cin >> n;
    cout << "\nВведите элементы массива через Enter\n";
    for (int i = 0; i < n; ++i) {
        cin >> a[i]; //ввод массива
    }
	SumMaxElement(a, n, cnt); //вызов функции
    cout << endl;
    cout << endl << "Максимальный элемент " << SumMaxElement(a, n, cnt)  //вывод макс элемента и сколько их всего
        << endl << "Их всего " << cnt << endl;
    cout << endl;
    return 0;
}
CppForYou вне форума Ответить с цитированием
Старый 17.01.2014, 19:56   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

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

p.s. ваш код работать должен, но не удовлетворяют способу решения поставленному в задании... хотя ваш способ более оптимален и рационален по сравнению с тем который требуется в условии...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 18.01.2014, 14:22   #3
CppForYou
Пользователь
 
Регистрация: 08.03.2013
Сообщений: 37
По умолчанию

спасибо))) лучше сортировать по убыванию))) сортировку отдельной функцией сделать?как лучше будет?
CppForYou вне форума Ответить с цитированием
Старый 18.01.2014, 15:04   #4
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

можно и отдельной (преподам обычно так больше нравится) :
Код:
void sort_mas(int *a, int n){
  int buf;
  for (int i = 0; i < n - 1; i ++)
    for (int j = 0; j < n - 1; j++)
      if (a[j] < a[j+1]){
        buf = a[j];
        a[j] = a[j+1];
        a[j+1] = buf;
        }
  }
вызывать так:
Код:
  sort_mas (a,n);

и еще все же замечание по твоей функции... если максимальный элемент будет стоять на первом месте, то будет в итоге выдавать их количество на 1 больше, т.к. будет идти по первому if где у тебя +1, начинай в цикле не с 0 а 1, и ставь cnt = 1 сразу
ее конечно нужно будет всеравно изменить для эффективности, т.к. массив отсортирован будет, но это так, замечание на будущее, коль что )
Код:
int SumMaxElement(int mas [], int n, int &cnt)//функция сумм максмальных элементов
{
    int max = mas[0];//определение перменных
       cnt = 1;
    for (int i = 1; i < n; i++)
    {
        if (max == mas[i])//находит максимальный элемент 
            cnt++; 
        if (max < mas[i])//если в массиве встретится такой же элемент (максимальный)
        {
            max = mas[i]; // то считаем их
            cnt = 1;
        }
    }
    return max;
}
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
сортировка массива(c++) jambas92 Помощь студентам 0 09.10.2010 21:55
сортировка массива ts-alan Общие вопросы C/C++ 7 08.08.2010 01:47
сортировка массива natasha971929 Помощь студентам 1 14.12.2009 23:49