1

Тема: допоможіть оформити

завдання стоїть так:
Контейнерний клас описує та забезпечує набір дій над даними параметризованого масиву, розмірність якого визначається під час роботи програми. Усі обчислення та перетворення повинні бути реалізовані у вигляді методів класу.
Дана прямокутна матриця. Визначити номер стовпця, в якому знаходиться найдовша серія з однакових елементів.

програму я написав, але з контейнерами не дружу, допоможіть це все загнати у нього.

текст програми:

#include "stdafx.h"
#include <iostream>
using namespace std;


int main()
{
    system("color F0");
    const int n=3,m=5;
    int arr[n][m]={ {2,5,9,4,4},
                    {2,3,6,4,4},
                    {3,4,7,5,4}};
    int t=0,k=0,l=0,max;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(arr[i][j]==3)
            {
                t++;
                break;
            };
    for(int i=0;i<m;i++)
    {
        k=0;
        for(int j=0;j<n;j++)
        {            
            if(arr[j][i]==arr[j+1][i])
                k++;
            else
                k=0;
            if(k>l)
            {
                max=i;
                l=k;
            }
        
        }    
    }
    cout<<"PadKiB 3 HyJlaMu\t"<<t<<"\n CTOBbec 3 HaydovLLIOY noCJlidoBHiCty\t"<<max+1<<endl;
    return 0;
}

2

Re: допоможіть оформити

Контейнерний клас - це клас, який містить в собі інші класи/об'єкти, це для спрощення розуміння реальних об'єктів і їх моделювання зроблено. Із звичайними класами вмієте працювати?

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

3

Re: допоможіть оформити

Chemist-i написав:

Контейнерний клас - це клас, який містить в собі інші класи/об'єкти, це для спрощення розуміння реальних об'єктів і їх моделювання зроблено. Із звичайними класами вмієте працювати?

я з ними знайомий, але користуватися добре не вмію.

4

Re: допоможіть оформити

Мається на увазі, що під час роботи програми задається розмірність(одновимірний, двовимірний і т.д.) чи розмір масиву? Якщо точно малась на увазі розмірність, то не зовсім зрозуміло, що вважати стовпцем(який саме індекс). Але саму таку структуру даних можна реалізувати у вигляді одновимірного масиву. Тоді якщо n - розмірність, a1, a2, ... an - розміри, то елементу з індексами b1, b2, ... bn відповідатиме в цьому одновимірному масиві елемент з індексом b1*a2*...*an + b2*a3*...*an + ... + bn. У самого цього масиву розмір буде a1*a2*...*an.

5

Re: допоможіть оформити

мається на увазі, що ми маємо матрицю розміром m*k, і під час роботи вони задаються.
але це не так важливо, мені потрібно це все засунути в контейнерний клас.

6

Re: допоможіть оформити

Викиньте слово "контейнерний". Тепер зможете розв'язати задачу?

7

Re: допоможіть оформити

мається на увазі, що ми маємо матрицю розміром m*k, і під час роботи вони задаються.

Тоді все простіше )
У вашому коді в 26 рядку помилка - при j = n-1 ви виходите за межі масиву. Умова в циклі має бути j < n-1.
А базовий клас для вашого завдання може виглядати так:

template<typename T>
class matrix
{
public:
    static const size_t STANDART_SIZE = 2;
    matrix(void)
        : ver_size(STANDART_SIZE), hor_size(STANDART_SIZE), data(new T*[STANDART_SIZE])
    {
        for(size_t i = 0; i < ver_size; i++)
            data[i] = new T[hor_size];
    }
    matrix(size_t v_size, size_t h_size)
        : ver_size(v_size), hor_size(h_size), data(new T*[v_size])
    {
        for(size_t i = 0; i < ver_size; i++)
            data[i] = new T[hor_size];
    }
    ~matrix(void)
    {
        for(size_t i = 0; i < ver_size; i++)
            delete[] data[i];
        delete[] data;
    }
    inline size_t get_vertical_size(void) const
    {
        return ver_size;
    }
    inline size_t get_horizontal_size(void) const
    {
        return hor_size;
    }
    inline const T*& operator[](size_t index) const
    {
        return data[index];
    }
    inline T*& operator[](size_t index)
    {
        return data[index];
    }
    size_t longest_series_ver(void) const
    {
        size_t k, l(0), max(0);
        for(size_t i = 0; i < hor_size; i++)
        {
            k = 0;
            for(size_t j = 0; j < ver_size-1; j++)
            {            
                if(data[j][i] == data[j+1][i])
                    k++;
                else
                    k = 0;
                if(k > l)
                {
                    max = i;
                    l = k;
                }
            }    
        }
        return max;
    }
protected:
    size_t ver_size;
    size_t hor_size;
    T** data;
};

Його можна використати для вашої програми так:

#include <iostream>
using namespace std;

int main(void)
{
    size_t n, m;
    cin >> n >> m;
    matrix<size_t> ar(n, m);
    for(size_t i = 0; i < n; i++)
        for(size_t j = 0; j < m; j++)
            cin >> ar[i][j];
    cout << ar.longest_series_ver()+1 << endl;
    system("pause");
    return 0;
}
Подякували: every1

8

Re: допоможіть оформити

Не можу уявити собі чотирьохвимірний масив.

9

Re: допоможіть оформити

NE_BaNit_MeNe_p... написав:

Не можу уявити собі чотирьохвимірний масив.

Це дуже просто: уявіть n-вимірний масив, а потім покладіть n=4 :)

Прихований текст

Щоправда я навчився десь два тижні тому, коли треба було думати про 16-вимірні вектори.

10

Re: допоможіть оформити

NE_BaNit_MeNe_p... написав:

Не можу уявити собі чотирьохвимірний масив.

Це так само просто, як уявити тривимірну площину

Прихований текст

Далі будь ласка по темі.

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

11

Re: допоможіть оформити

дякую всім за допомогу) розібрався.
тему можна закривати.
код потрібно викладати?

12

Re: допоможіть оформити

every написав:

дякую всім за допомогу) розібрався.
тему можна закривати.
код потрібно викладати?

Бажано. Може комусь знадобиться. Тоді і назву теми перейменуйте, написавши більш інформативно, і додайте в кінці [вирішено]