0 / 0 / 1
Регистрация: 08.07.2017
Сообщений: 31
1

Создание класса Array

08.07.2017, 16:28. Показов 27081. Ответов 16
Метки нет (Все метки)

МОЖНО ПОДРОБНО (хочу разобраться) заранее благодарен

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

Добавлено через 1 час 7 минут
мужики,ну,помогите с задачей.домашку в понедельник сдавать ,а я хз как
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2017, 16:28
Ответы с готовыми решениями:

Перегрузка операторов для класса Array
Здравствуйте, у меня есть созданный класс array, для него нужно перегрузить операторы <<. >>, =,...

Шаблоны массива класса array (объяснить)
Здравствуйте, я не могу понять, что означает шаблон класса array..Вот само задание: "13. Объявите...

Реализовать шаблонную версию класса Array
#include <cstddef> template <typename T> class Array { // Список операций: // ...

Реализовать шаблонную версию класса Array
Реализуйте шаблонную версию класса Array, не полагаясь на то, что для типа T определен оператор...

16
Рэмбо комнатный
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 510
08.07.2017, 17:10 2
cmetanka, массив типа обычный динамический? просто добавить элемент ты тогда не сможешь

Добавлено через 2 минуты
вектор тебе в помощь в общем то))
0
435 / 345 / 168
Регистрация: 08.04.2013
Сообщений: 1,486
08.07.2017, 20:03 3
Для начала, разбирайся
Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
class Array2D{
private:
    //Количество столбцов и строк
    int kolvo, strok;
    //Динамический двумерный массив матрицы
    int **A;
public:
        
   Array2D operator-(Array2D B){
        if (kolvo != B.kolvo){
            cout << "В матрицах разное количество столбцов" << endl;
            return *this;
        }
        if (strok != B.strok){
            cout << "В матрицах разное количество строк" << endl;
            return *this;
        }
        Array2D result(kolvo, strok);
        for (int i = 0; i <kolvo ; i++)
            for(int j = 0; j < strok; j++)
                result.A[i][j] = A[i][j] - B.A[i][j];
 
        return result;
    }
    //конструктор, с заданием размера матрицы
    Array2D(int a, int b){
        kolvo = a;
        strok = b;
        A = new int*[a];
        for (int i = 0; i < a; i++)
            A[i] = new int[b];
    }
 
 
    //Вывод матрицы
    void show(){
        for(int i = 0; i < kolvo; i++){
            for(int j = 0; j < strok; j++)
                cout << A[i][j] << " ";
            cout << endl;
        }
        cout << endl;
    }
 
    //Ввод матрицы
    void set(){
        for(int i = 0; i < kolvo; i++)
            for(int j = 0; j < strok; j++){
                cout << "A[" << i << "][" << j << "] = ";
                cin >> A[i][j];
            }
    }
};
 
Array2D input(){
    int z, x;
 
    cout << "Введите кол-во строк: ";
    cin >> z;
    cout << "Введите кол-во столбцов: ";
    cin >> x;
    
    Array2D a(z, x);
    a.set();
    return a;
}
 
int main(){
    //Включаем Русский язык
    setlocale(LC_ALL, "rus");
    
    Array2D A = input();
    Array2D B = input();
    //вывод полученных данных на экран
    cout << "Матрица A: \n";
    A.show();
 
    cout << "Матрица B: \n";
    B.show();
 
    Array2D D = A-B;
    
    cout << "Разность матриц А и B: \n";
    D.show();
 
    system("pause");
 //
}
0
1481 / 1198 / 819
Регистрация: 29.02.2016
Сообщений: 3,579
08.07.2017, 22:00 4
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include<iostream>
#include <ctime>
 
using namespace std;
 
class Array
{
private:
    int *arr;
    int N;
public:
    Array() //конструктор без параметров
    {
        N = 1;
        arr = new int[N];
        for (int i = 0; i<N; i++)
            arr[i] = 0;
    }
    Array(int n) //конструктор с одним параметром
    {
        N = n;
        arr = new int[N];
        set();
    }
 
    Array (const Array & source) //конструктор копирования
    {
        N = source.N;
        arr = new int[N];
        for (int i = 0; i<N; i++)
            arr[i] = source.arr[i];
    }
 
    ~Array() //деструктор
    {
        delete[]arr; //освобождение памяти
    }
    int getsize() //возвращение размера массива
    {
        return N;
    }
 
    void print() //показать массив
    {
        for (int i = 0; i<N; i++)
            cout << arr[i] << "  ";
        cout << endl;
    }
 
    void set() //ввод случайных элементов массива
    {
        srand(time(0));
        for (int i = 0; i<N; i++)
            arr[i] = rand() % 100;
    }
 
 
    void sort() //сортировка массива по возрастанию
    {
        int temp; // переменные для хранения мин-ного значения и индекса массива
        for (int i = 0; i<N; i++)
        {
            temp = arr[i]; //инициализируем врем. переменную
            for (int j = i; j<N; j++)
                if (temp>arr[j])//находим минимальный элемент
                {
                    temp = arr[j]; //делаем перестановку
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
        }
    }
    int max()
    {
        sort();
        return arr[N - 1];
    }
    int min()
    {
        sort();
        return arr[0];
    }
};
 
int main()
{
    setlocale(LC_CTYPE, "rus");
    int n;
    cout << "Введите размер массива: ";
    cin >> n;
    Array array(n);
    cout << "Массив" << endl;
    array.print();
    array.sort();
    array.print();
    cout << "Max=" << array.max() << " Min=" << array.min() << endl;
 
    system("pause");
    return 0;
}
3
Заблокирован
08.07.2017, 22:33 5
Цитата Сообщение от afront Посмотреть сообщение
//конструктор копирования
, который течёт.
0
187 / 54 / 19
Регистрация: 23.12.2016
Сообщений: 165
08.07.2017, 22:56 6
Цитата Сообщение от cmetanka Посмотреть сообщение
мужики,ну,помогите с задачей.домашку в понедельник сдавать ,а я хз как
У меня один вопрос - какие домашки в середине июля? Где так над людьми издеваются?
0
836 / 639 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
09.07.2017, 06:39 7
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <cstdlib>
 
template<typename T>
class tarray {
private:
    T*     arr;
    size_t num;
public:
    tarray(void):arr(nullptr), num(0){}
    tarray(const tarray& a):arr(nullptr), num(0){
        *this = a;
    }
    tarray(tarray&& a):arr(nullptr), num(0){
        *this = std::forward<decltype(a)>(a);
    }
    explicit tarray(size_t n, const T& v = T()):arr(nullptr), num(0){
        resize(n, v);
    }
    ~tarray(){ clear(); }
public:
    //изменение размера
    void resize(size_t n, const T& v = T()){
        clear();
        arr  = new T[n];
        T* e = arr + n;
        for(T* p = arr; p != e; ++p)
            *p = v;
        num = n;
    }
 
    //поиск мин/макс
    template<typename Cmp>
    T* find_element(Cmp cmp){
        T* i = arr, *e = arr + num;
        T* p = i;
        for(; i != e; ++i){
            if(cmp(*i, *p))
                p = i;
        }
        return p;
    }
 
    //пирамидальная сортировка
    template<typename Cmp>
    void sort(Cmp cmp){
        if(num <= 1)
            return;
 
        for(size_t i = num / 2 + 1; i > 0; --i) 
            _heapify(i - 1, cmp, num);
 
        for(size_t j = num - 1; j > 0; --j){
            std::swap(arr[0], arr[j]);
            _heapify(0, cmp, j);
        }
    }
 
    tarray& operator = (const tarray& a){
        if(this != &a){
            resize(a.num);
            T* e = a.arr + a.num;
            T* d = arr;
            for(T* p = a.arr; p != e; ++p)
                *d++ = *p;
        }
        return *this;
    }
 
    tarray& operator = (tarray&& a){
        if(this != &a){
            clear();
            arr = a.arr;
            num = a.num;
            a.arr = nullptr;
            a.num = 0;
        }
        return *this;
    }
 
    T& operator [] (size_t i){ return arr[i]; }
    const T& operator [] (size_t i) const { return arr[i]; }
 
    void clear(void){
        if(arr != nullptr)
            delete[] arr;
        arr = nullptr;
        num = 0;
    }
 
    size_t size(void) const { return num; }
    T* begin(void) { return arr; }
    T* end(void) { return arr + num; }
    const T* cbegin(void) const { return arr; }
    const T* cend(void) const { return arr + num; }
private:
    template<typename Cmp>
    void _heapify(size_t i, Cmp cmp, size_t cnt){
        size_t l, r, h;
        while(1){
            l = (i << 1) + 1;
            r = l + 1;
            if((l < cnt) && cmp(arr[i], arr[l]))
                h = l;
            else
                h = i;
 
            if((r < cnt) && cmp(arr[h], arr[r]))
                h = r;
 
            if(h != i){
                std::swap(arr[i], arr[h]);
                i = h;
            } else
                break;
        }
    }
};
 
int main(void){
    tarray<int> arr(10);
    for(size_t i = 0; i < arr.size(); ++i)
        arr[i] = rand() % 10;
 
    //минимум
    int* _min = arr.find_element([](int a, int b) { return (a < b); });
    if(_min != arr.end())
        std::cout << "min: " << *_min << std::endl;
 
    //максимум
    int* _max = arr.find_element([](int a, int b) { return (a > b); });
    if(_max != arr.end())
        std::cout << "max: " << *_max << std::endl;
 
    //сортируем по возрастанию
    arr.sort([] (int a, int b) { return (a < b); });
    for(size_t i = 0; i < arr.size(); ++i)
        std::cout << arr[i] << ' ';
    std::cout << std::endl;
 
    //сортируем по убыванию
    arr.sort([] (int a, int b) { return (a > b); });
    for(size_t i = 0; i < arr.size(); ++i)
        std::cout << arr[i] << ' ';
    arr.clear();
    std::cin.get();
    return 0;
}
0
Заблокирован
09.07.2017, 07:05 8
Цитата Сообщение от Геомеханик Посмотреть сообщение
C++
1
2
3
4
5
6
* * * * T* p = i;
* * * * for(; i != e; ++i){
* * * * * * if(cmp(*i, *p))
* * * * * * * * p = i;
* * * * }
* * * * return p;
Я правильно понял, что ситуация, когда искомый элемент — первый в массиве неотличима от ситуации когда его там нет?

Если эта функция должна искать только минимум и максимум, то зачем понты с темплетом? Если не только минимум и максимум, то она поломана.

Добавлено через 5 минут
Цитата Сообщение от Геомеханик Посмотреть сообщение
85 if(arr != nullptr)
Зачем?
0
1481 / 1198 / 819
Регистрация: 29.02.2016
Сообщений: 3,579
09.07.2017, 09:19 9
C++
1
2
3
4
5
        Array(Array & copy) //конструктор копирования
        {
            arr = copy.arr;
            N = copy.N;
        }
0
Велосипедист...
352 / 219 / 73
Регистрация: 15.12.2015
Сообщений: 785
09.07.2017, 10:05 10
afront, уверен, Вы знаете что делаете, но все же перестрахуюсь:
Цитата Сообщение от afront Посмотреть сообщение
C++
1
arr = copy.arr;
Вы же понимаете, что this->arr и copy.arr будут ссылаться на одну область памяти?

Добавлено через 5 минут
Цитата Сообщение от daun-autist Посмотреть сообщение
, который течёт.
Почему это? Не вижу утечек...
1
1481 / 1198 / 819
Регистрация: 29.02.2016
Сообщений: 3,579
09.07.2017, 10:25 11
C++
1
2
3
4
5
6
        Array(const Array &copy)
        {
            arr = new int[copy.N];
            N = copy.N;
            memcpy(arr, copy.arr, sizeof(int) * N);
        }
0
0 / 0 / 1
Регистрация: 08.07.2017
Сообщений: 31
09.07.2017, 12:49  [ТС] 12
afront,спасибо! расписано очень понятно
0
Заблокирован
09.07.2017, 18:53 13
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Почему это? Не вижу утечек...
Да, чёт я погнал.
0
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 32
22.09.2018, 11:55 14
afront,
C++
1
2
3
4
5
6
7
8
9
10
   int max()
    {
        sort();
        return arr[N - 1];
    }
    int min()
    {
        sort();
        return arr[0];
    }
почему ты именно так отобразил мин и мах значение чисел?
0
1 / 1 / 0
Регистрация: 19.12.2017
Сообщений: 105
13.04.2020, 14:54 15
Здравствуйте.
Создаю массив через конструктор по умолчанию и он выводится на экран через метод Show.
А если создаю с параметрами, то функция срабатывает, но на экране пусто.
Пока не могу понять в чем дело.
Прошу подсказать.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "pch.h"
#include <windows.h>
#include <string>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <malloc.h>
#include <utility>
#include <cassert>
 
using namespace std;
const int NotUsed = system("color 17");
#pragma warning(disable : 4996) // Без этого не работали функции strcpy 
 
class Array
{
private:
    
public:
    int** DM;
    int rows;
    int cols;   
 
    Array()
    {
        cout << "\n Это конструктор по умолчанию \n";
        rows = 3;
        cols = 6;
        DM = new int*[rows];
        for (int i = 0; i < rows; i++)
            DM[i] = new int[cols];  
        
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                DM[i][j] = rand() % 10;             
            }           
        }
    }
 
    Array(int a, int b)
    {
        int rows = a;
        int cols = b;
        cout << "\n Это конструктор с пареметрами (размер массива) \n";          
        DM = new int* [rows];
        for (int i = 0; i < rows; i++)
            DM[i] = new int[cols];
 
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                DM[i][j] = rand() % 10;
            }
        }       
    }
 
    void Show()
    {
        cout << "\n Это метод Show \n";
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cout << " " << DM[i][j];
            }
            cout << endl;
        }
    }   
 
    ~Array()
    {
        cout << "\n Это деструктор \n";
        for (int i = 0; i < rows; i++)
            delete[] DM[i];
        delete []DM;
 
    }
};
 
void main()
{
    RECT lpRectToolBar;
    HWND console = GetConsoleWindow();
    RECT ConsoleRect;
    GetWindowRect(console, &ConsoleRect);
    MoveWindow(console, ConsoleRect.left, ConsoleRect.top, 800, 1000, TRUE);
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Array MAS1;
    MAS1.Show();    
 
    Array MAS3(10,20);
    MAS3.Show();    
}
0
57 / 42 / 15
Регистрация: 06.03.2018
Сообщений: 187
13.04.2020, 15:15 16
Цитата Сообщение от rshelegeda Посмотреть сообщение
Array(int a, int b)
{
int rows = a;
int cols = b;
замени на
C++
1
2
3
4
Array(int a, int b)
 {
 rows = a;
 cols = b;
1
1 / 1 / 0
Регистрация: 19.12.2017
Сообщений: 105
13.04.2020, 15:19 17
Большое спасибо.
Помогли.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2020, 15:19
Помогаю со студенческими работами здесь

Нужна головная программа для класса Array
Вот код#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;stdio.h&quot; #include &quot;math.h&quot; ...

Использование std::array внутри пользовательского класса
Здравствуйте! Я создал класс, одним из полей которого является массив std::array, однако...

Методы класса Array
Приветики всем! Помогите, пожалуйста, с задачкой: &quot;Дана целочисленная прямоугольная матрица. ...

Методы класса Array
Приветики всем! Помогите, пожалуйста, с задачкой: &quot;Дана целочисленная прямоугольная матрица. ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru