1 Востаннє редагувалося Desolar (18.04.2018 11:45:22)

Тема: Сортування масиву і вивід кількості елементів на парних позиціях

Вітаю! Проблема в тому, що не можу розібратися саме з шаблонами, бо завдання вимагає їх застосування: "Шаблон класу повинен описувати і забезпечувати набір дій над даними масиву з параметрами , а всі обчислення повинні бути реалізовані у вигляді методів, введення розміру з клавіатури".
Функції для сортування і виведення кількості елементів на парних позиціях я написав правильно, окремо перевіряв.
В іншому нічого не виходить, буду вдячний якщо допоможете мені розібратися і довести програму до розуму.

#include <iostream>
using namespace std;

template <class T>
class Arr {
private:
    T *arr;
    int N, count;
    public: 
        Arr() {
            N = 0;
            count = 0;
            arr = new T[N];      
        }
        ~Arr() {
            delete[] arr;
        }
        
        Arr(int N1);

        int Sum();
        void Sort();
        void par();
};

template <class T>
Arr<T>::Arr(int N1) {
   int N =0;
    cout << "Enter arr size:" << endl;
    cout << "N = ";
    cin >>N;
 arr = new T[N];
    cout << "Enter arr:" << endl;
    for (int i = 0; i < N; i++)
    {
        cin >> arr[i];
    }
}

template <class T>
Arr<T>::Sum() {
int N =0;
    int sum = 0;
    while (N > 0)
    {
        sum += N % 10;
        N /= 10;
    }
    return sum;
}

template <class T>
Arr<T>::Sort() {
    for (int i = 0; i < N; i++)
    {
        for (int j = N - 1; j > i; j--)
        {
            if (Sum(arr[j]) > Sum(arr[j - 1]))
            {
                swap(arr[j], arr[j - 1]);
            }
        }
    }
    cout << "Sorted arr:" << endl;
    for (int i = 0; i < N; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}

template <class T>
Arr<T>::par() {
    for (int i = 0; i<N; i += 2)
        count++;
    cout << "number of Arr elements:" << count << endl;
}

int main()
{
    Arr <int> obj;
    int N;
    obj.Sort(); 
    
    obj.par();    
    system("pause");
    return 0;
}

2

Re: Сортування масиву і вивід кількості елементів на парних позиціях

            N = 0;
            arr = new T[N];    

UB.
Що ж до решти - то нічим не можу допомогти, ви завдання не виклали.

3

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Якщо я правильно зрозумів, то N=0 зайве. Що ви мали на увазі, коли сказали, що завдання не викладене?

4

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Desolar написав:

Якщо я правильно зрозумів, то N=0 зайве. Що ви мали на увазі, коли сказали, що завдання не викладене?

Desolar написав:

В іншому нічого не виходить

А що саме має виходити в іншому?
Виділення 0 пам'яті - це UB. Або ставте NULL, або виділяйте наперед... або забийте і користайте vector.

5 Востаннє редагувалося Desolar (18.04.2018 13:06:02)

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Я мав на увазі, що не виходить розібратися з шаблонами, аби програма працювала з ними. В тому й суті, що хочу зробити без вектора, але для цього треба виправити всі помилки...

6

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Desolar написав:

Я мав на увазі, що з не виходить розібратися з шаблонами, аби прогоама працювала з ними. В тому й суті, що хочу зробити без вектора, але для цього треба виправити всі помилки...

Помилка в програмі - це невідповідність кода завданню, а не повідомлення компілятора. Повідомлення компілятора лише підказує, в чому може бути проблема.
Код є, завдання немає, як ми маємо визначати, де там помилки? Чи це гра "по неправильному коду, який не робить те, що треба, відгадайте, яке мало бути завдання"? Нецікава, скажу вам, гра.

Подякували: leofun011

7 Востаннє редагувалося Desolar (18.04.2018 13:11:52)

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Хм, мені здавалося, що я все ж таки сказав, що  "хочу" від цього кода, але, можливо, я просто незрозуміло висловився, прошу вибачення.
Скину тоді чітке формулювання поставленої задачі з книги: " Шаблонний  клас описує  та  забезпечує  набір  дій  над  даними параметризованого  масиву,  розмірність  якого  визначається  під  час  роботи програми.  Усі  обчислення  та  перетворення  повинні  бути  реалізовані  у  вигляді методів  класу.   У довільному  масиві  обчислити  кількість  елементів масиву,  що  розташовані  по спаданню  і стоять  на парних  позиціях.  "

8

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Вираз "по спаданню" тут виник уперше.
Але тепер геть незрозуміло, чого ви від нас хочете (а відтак, викладач від вас). Якщо у нас є масив з одного елемента - цей елемент на парній позиції (0) чи ні (1)? Він розташований по спаданню чи ні? Припустимо, що малося на увазі, що нумерація іде з нуля, а для того, щоб елементи були по спаданню, треба, щоб їх було хоча б 2. Тоді в масиві {3,0,1} є два елементи на парних позиціях, що розташовані по спаданню (3 та 1) чи ні (0 на непарній між ними заважає)?

Подякували: leofun011

9

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Функції спершу сортують, виводять відсортований масив і лиш тоді дивляться,  які елементи розташовані на парних позиціях і виводять їх кількість. Плюс, нумерація йде від нуля. По суті, заважає.
А що я хочу... щоб то що я написав хоч принаймі працювало :(

10

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Кількість елементів на парних позиціях в масиві дорівнює половині довжини масиву. Якщо нумерація з 0 - то округлити вгору, якщо з 1 - то вниз.

11

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Які хоч помилки виводить?

12

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Гляньте в http://replace.org.ua/topic/9325/ - там схоже завдання, вам же за початковою умовою не сортувати треба.

13

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Просто в завданні вказано, що масив має бути розташований по спаданню, звісно можна самому ввести їх так, но я думаю, що треба функцію сортування.
Список помилок, правда російською:
1. синтаксическая ошибка: отсутствие ";" перед "{" " ,
{: отсутствует заголовок функции (возможно, используется формальный список старого типа" ,
T: необъявленный идентификатор,
Arr: "T" не является допустимым аргументом типа шаблон для параметра "T" -  помилки функції par.
2. синтаксическая ошибка: идентификатор "par" ,
синтаксическая ошибка: идентификатор "Sum"
3. синтаксическая ошибка: отсутствие ";" перед "{" " ,
{: отсутствует заголовок функции (возможно, используется формальный список старого типа" , це в мейні.

14 Востаннє редагувалося koala (18.04.2018 16:52:27)

Re: Сортування масиву і вивід кількості елементів на парних позиціях

А що, місця, де виявлені ці помилки, ваш компілятор не вказує?

15

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Думав так буде зручніше. Вказує він якраз просто на початку тіла функцій.

16

Re: Сортування масиву і вивід кількості елементів на парних позиціях

синтаксическая ошибка: отсутствие ";" перед "{" - 80
{: отсутствует заголовок функции (возможно, используется формальный список старого типа" -80
cинтаксическая ошибка: идентификатор "par" - 73
T: необъявленный идентификатор - 53
Arr: "T" не является допустимым аргументом типа шаблон для параметра "T" - 53
синтаксическая ошибка: отсутствие ";" перед "{" - 53
{: отсутствует заголовок функции (возможно, используется формальный список старого типа" - 53
cинтаксическая ошибка: идентификатор "Sum" - 41

17

Re: Сортування масиву і вивід кількості елементів на парних позиціях

Зробив його простішим, тепер він компілюється і хоч можна ввести кількість елементів та самі елементи.

#include <iostream>
using namespace std;

template <class T>
class Arr {
private:
    T *arr;
    int N, count;
    public: 
        Arr() {
            N = 0;
            count = 0;
            arr = new T[N];
        
            
        }
        ~Arr() {
            delete[] arr;
        }
        
        Arr(int N1);

        void Sort();
        void par();

};

template <class T>
Arr<T>::Arr(int N1) {

    int N = N1;
    cout << "Enter arr size:" << endl;
    cout << "N = ";
    cin >> N;
    
    arr = new T[N];
    
    cout << "Enter arr:" << endl;
    for (int i = 0; i < N; i++)
    {
        cin >> arr[i];
    }

    cout << "arr:" << endl;
    for (int i = 0; i < N; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}





template <class T>
void Arr<T>::Sort() {
    int temp = 0;
    for (int i = 0; i < N - 1; i++)
    {
        for (int j = i + 1; j < N; j++)
        {
            if (arr[i] < arr[j])
            {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }

    }
    cout << "Sorted arr:" << endl;
    for (int i = 0; i < N; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

}

template <class T>
void Arr<T>::par() {
    
    for (int i = 0; i<N; i += 2)
        count++;
    cout << "number of Arr elements:" << count << endl;

}





int main()
{
    Arr <int> obj0(0);
    
    Arr <int> obj;
    
    obj.Sort(); 
    obj.par(); 
    
    
    
    system("pause");
    return 0;
}
Подякували: Ярослав1