Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 25.02.2015
Сообщений: 22
1

Возвращение исходного массива (классы, указатели)

08.03.2015, 18:47. Показов 516. Ответов 3
Метки нет (Все метки)

нужно сделать так чтоб после каждого действия, при указатели на вызов функции output возвращался первоначально введенный массив. Например :
1) ввожу массив 1 -1 2 3 4
2) работает функция output. "your array: 1 -1 2 3 4"
3) работает функция exercise_1 (заменяет положительные элементы массива на максимальный) "exercise_1: 4 -1 4 4 4"
4) работает функция output. "your array: 1 -1 2 3 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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
      int getcount(){
          int c;
          cout << "Input number of elements - ";
          cin >> c;
          return c;
          }
 
class clArrSort{
      public:
      clArrSort();
      clArrSort(int c);
      int Count;
      int *Arr;
      friend int getcount();
      void sort(bool flag);
      void output();
      void exercise_1();
      void average();
      ~clArrSort();
      int maxVal ();
      int minIndex ();
      private:
      int minmax(bool flag, int low, int hi);
 
      };
 
      class clNewArrSort: public clArrSort {
      public:
      clNewArrSort(){}
 
      ~clNewArrSort(){}
      };
 
      clArrSort::clArrSort(){}
 
      int clArrSort::maxVal() {return Arr[minmax(1,0,Count)];}
      int clArrSort::minIndex() {return minmax(0,0,Count);}
 
      clArrSort::clArrSort(int c)
      {
        Arr = new int[c];
        Count = c;
        for (int i=0; i<Count; i++)
        {
           cout << "Input "<< i << " element - ";
           cin >> Arr[i];
            }}
 
            void clArrSort::average(){
          int low = 0;  int hi = Count;
      int sum = 0;
      for(int i=low; i<hi; i++)
        sum+=Arr[i];
        double average = sum/Count;
        cout << "\n" "average: " << average << "\n";}
 
 
      void clArrSort::output(){
           cout<< "\n" "your array:";
            for (int i=0; i<Count; i++)
        {
            cout<<Arr[i]<< " ";
            }
            cout<<"\n";
           }
 
      int clArrSort::minmax(bool flag, int low, int hi){
          int mid = low;
          int mval = Arr[low];
          for (int i=low; i<hi; i++)
          {
          if (!flag){if (Arr[i]<mval){mval = Arr[i]; mid = i;}}
              else {if (Arr[i]>mval){mval = Arr[i]; mid = i;}}
          }
 
          return mid;
          }
 
 
      void clArrSort::sort(bool flag)
      {
         int low = 0;  int hi = Count;
         cout << "sorted Array: " ;
           for (int i=low; i<hi; i++){
               swap(Arr[i], Arr[minmax(flag,low, hi)]);
           low++;
           cout << Arr[i] << " ";
       }
 
     }
 
 
    void clArrSort::exercise_1(){
          int low = 0;  int hi = Count;
          cout << "exercise_1: ";
    for (int i = low; i<hi; i++){
        if (Arr[i]>0){
                Arr[i] = maxVal();
        }
        cout << Arr[i] << " ";
    }
      }
      clArrSort::~clArrSort(){};
 
int main()
{
    clArrSort *x= new clArrSort(getcount());
    x->output();
    x->exercise_1();
    x->output();
    x->sort(0);
    x->average();
 
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2015, 18:47
Ответы с готовыми решениями:

Указатели и классы: присвоение значения элементу массива, который является полем класса
Доброго времени суток, делал задание, где надо создать класс, полем которого будет массив...

Смена цвета кнопки при ее нажатии и возвращение исходного
Здравствуйте, прошу мне помочь так как я не опытный и только новичок. Смотрите у меня есть...

Сформировать из исходного массива новый, разместив в нем элементы исходного массива, отсортированные по три
Здравствуйте! Нужна ваша помощь. Пользователем вводятся вещественные числа (не больше 100)...

Скопировать элементы исходного массива в два других массива, размером вдвое меньше исходного
/*Написать программу, копирующую последовательно элементы одного массива размером 10 элементов в...

3
Модератор
Эксперт С++
11482 / 9400 / 5649
Регистрация: 18.12.2011
Сообщений: 25,114
08.03.2015, 18:54 2
Перед вызовом функции создайте копию массива,
а после вызова, либо используйте копию,
либо восстановите из копии.
Перегрузите метод operator=
Тогда сможете это сделать очень просто
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    clArrSort x(getcount());
    x.output();
    x.exercise_1();
    x.output();
    clArrSort y=x;
    x.sort(0);
    x=y;
    x.average();
 
    return 0;
}
0
1 / 1 / 0
Регистрация: 25.02.2015
Сообщений: 22
08.03.2015, 19:56  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Перед вызовом функции создайте копию массива,
а после вызова, либо используйте копию,
либо восстановите из копии.
Перегрузите метод operator=
Тогда сможете это сделать очень просто
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    clArrSort x(getcount());
    x.output();
    x.exercise_1();
    x.output();
    clArrSort y=x;
    x.sort(0);
    x=y;
    x.average();
 
    return 0;
}
я думал на д этим. А как создать копию? не могли бы привести пример, а то у меня трудности с этим.
0
Модератор
Эксперт С++
11482 / 9400 / 5649
Регистрация: 18.12.2011
Сообщений: 25,114
08.03.2015, 20:23 4
Цитата Сообщение от JirniXU Посмотреть сообщение
А как создать копию?
Цитата Сообщение от JirniXU Посмотреть сообщение
x=y;
Перегрузка operator=
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clArrSort& operator=(const clArrSort& t)
{
    if(this==&t)
          return *this;
    if(Count!=t.Count)
    {
         delete[] Arr;
         Arr=new int[t.Count];
     }
     Count=t.Count;
     for(int i=0;i<Count;i++)
          Arr[i]=t.Arr[i];
      return *this;
}
Копиконструктор сделайте обязательно по аналогии с operator=
И деструктор должен удалять Arr.

Добавлено через 1 минуту
Цитата Сообщение от JirniXU Посмотреть сообщение
int Count; int *Arr;
Надо сделать private

Добавлено через 1 минуту
Цитата Сообщение от JirniXU Посмотреть сообщение
friend int getcount();
Функция не имеет отношения к классу, зачем friend?

Добавлено через 58 секунд
Цитата Сообщение от JirniXU Посмотреть сообщение
class clNewArrSort:
public clArrSort { public: clNewArrSort(){}
~clNewArrSort(){} };
Это зачем?

И почитайте
Распространенные ошибки
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2015, 20:23

Сформировать из исходного массива новый массив, являющий собой множество элементов исходного массива
Пусть даны целые числа a1, a2, …, an, среди которых могут быть повторяющиеся. Составьте новый...

Указатели на Классы
class B { public: int x; B() { // Конструктор по умолчанию x = 4; } }; class D :...

Классы и указатели
Пишет:&quot;Отсутствуют экземпляры конструктора &quot;Pet::Pet&quot;, соответствующие списку аргументов типы...

Классы, указатели
Здравствуйте! Помогите, пожалуйста, разобраться: 1) Можно ли создать указатель на объект, который...


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

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

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