Форум программистов, компьютерный форум CyberForum.ru

переделать клас - C++

Восстановить пароль Регистрация
 
yuraha18
 Аватар для yuraha18
2 / 2 / 0
Регистрация: 16.12.2009
Сообщений: 236
11.04.2013, 02:32     переделать клас #1
Всем привет! Надо немножко доработать етот код
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
#include <iostream>
#include <stdio.h>
using namespace std;
const int count = 5;
 
class Stack{
    public:
    int element[count*2];
    int topIndex;
   void Pop();
    int Top();  
    void source(int);
    void imprint(int);
    void sort_all();
    }stack1, stack2, stack3;
    
int main (){
    
    cout << "Введіть дані стеку 1: \n";
     stack1.source(1);
    cout << "Введіть дані стеку 2: \n";
    stack2.source(2);
     cout << "\n Відсортований стек 3: \n" ;
     stack3.sort_all();
    cout << "\n Відсортований стек 1: \n" ;
     stack1.imprint(1);
    cout << "\n Відсортований стек 2: \n" ;
     stack2.imprint(2);
    
    return 0;
}
 
void Stack :: source(int id){
    for (int i=0; i<count; i++)
    { if (id == 1){
        cout << "\t  елемент " << i+1 << ": ";
        cin >> stack1.element[i];
    }
    if (id == 2){
        cout << "\t  елемент " << i+1 << ": ";
        cin >> stack2.element[i];
    }
    }
}
 
void Stack :: imprint(int id){
    int c, a;
    if (id == 1){
    for (int i=0; i<count; i++)
    { a=10000;
        for (int j=0; j<count; j++){
            if (stack1.element[j] < a && stack1.element[j]!=0){
                a=stack1.element[j];
                 c=j;
            }
       }
       stack1.element[c] = 0;
       c=-1;
       cout << a << ' ';
       a = 0;
    }
}
    if (id == 2){
    for (int i=0; i<count; i++)
    { a=10000;
        for (int j=0; j<count; j++){
            if (stack2.element[j] < a && stack2.element[j]!=0){
                a=stack2.element[j];
                 c=j;
            }
       }
       stack2.element[c] = 0;
       c=-1;
       cout << a << ' ';
       a = 0;
    }
}
}
 
void Stack :: sort_all(){
    int c, a;
    for (int i=0; i<count; i++)
     stack3.element[i] = stack1.element[i];
 
   for (int j=count; j<count*2; j++)
     stack3.element[j] = stack2.element[j-count];
     
    for (int b=0; b<count*2; b++)
    { a=10000;
        for (int h=0; h<count*2; h++){
            if (stack3.element[h] < a && stack3.element[h]!=0){
                a=stack3.element[h];
                 c=h;
            }
       }
       stack3.element[c] = 0;
       c=-1;
       cout << a << ' ';
       a = 0;
    }
}
 
void Stack::Pop()
{
    topIndex--;
}
 
int Stack::Top()
{
    return element[topIndex];
}
Возможно ето говнокод, но делалось быстро поетому нет времени оптимизировать. Метод imprint () сортирует елементы. Так вот мне надо доделать ето через дружественные функции и клас. А конкретно для imprint () создать дружественную функцию, а для sort_all() дружественный метод. И чтобы все выводилось как и раньше
П.С помогите, очень надо сдать лабу по ООП С++, а я не люблю писать на плюсах, веб намного интереснее.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 02:32     переделать клас
Посмотрите здесь:

клас обработчик C++
C++ Векторы+клас
C++ матрица. клас
C++ матрица. клас. 2
C++ клас с динамичным масивом
C++ клас Letter, клас Person
C++ клас myDate
клас птиц C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
11.04.2013, 09:26     переделать клас #2
Цитата Сообщение от yuraha18 Посмотреть сообщение
а я не люблю писать на плюсах ...
Да тут дело не столько в С++, а сколько в ООП. Судя по коду, вы абсолютно не понимаете идею. Ну да ладно, не моего ума дело ...
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>
 
using namespace std;
 
class TStack
{
   public:
      static const int CMaxLength = 5;
 
   protected:
      int index;
      int element[CMaxLength];
 
   public:
      TStack();
 
      bool Push(int);
      bool Pop();
      int Top() const;
 
      friend ostream& operator << (ostream& out, const TStack&);
      friend istream& operator >> (istream& in, TStack&);
 
      friend TStack& Sort(TStack&);
      friend class TStackOperations;
};
 
class TStackOperations
{
   public:
      static TStack& Sort(TStack&);
};
//-----------------------------------------------------------------------------
TStack::TStack(): index(-1)
{
   ;
}
//-----------------------------------------------------------------------------
bool TStack::Push(int value)
{
   bool pushed = index < CMaxLength-1;
 
   if (pushed)
   {
      element[++index] = value;
   }
 
   return pushed;
}
//-----------------------------------------------------------------------------
bool TStack::Pop()
{
   bool poped = index > -1;
 
   if (poped)
   {
      index--;
   }
 
   return poped;
}
//-----------------------------------------------------------------------------
int TStack::Top() const
{
   int value = 0;
 
   if (index > -1)
   {
      value = element[index];
   }
 
   return value;
}
//-----------------------------------------------------------------------------
ostream& operator << (ostream& out, const TStack& stack)
{
   for (int i = stack.index; i > -1; --i)
   {
      out << stack.element[i] << " ";
   }
 
   return out;
}
//-----------------------------------------------------------------------------
istream& operator >> (istream& in, TStack& stack)
{
   int value;
   while ((stack.index < stack.CMaxLength-1) && (in >> value))
   {
      stack.Push(value);
   }
 
   return in;
}
//-----------------------------------------------------------------------------
void Swap(int& a, int& b)
{
   int tmp = a;
   a = b;
   b = tmp;
}
//-----------------------------------------------------------------------------
TStack& TStackOperations::Sort(TStack& stack)
{
   for (int i = 0; i < stack.index; ++i)
   {
      int max = i;
      for (int j = i + 1; j <= stack.index; ++j)
      {
         if (stack.element[j] > stack.element[max])
         {
            max = j;
         }
      }
      Swap(stack.element[i], stack.element[max]);
   }
 
   return stack;
}
//-----------------------------------------------------------------------------
TStack& Sort(TStack& stack)
{
   return TStackOperations::Sort(stack);
}
//-----------------------------------------------------------------------------
 
int main()
{
   TStack stack1, stack2, stack3;
 
   cout << "input stack 1 element (max = 5): ";
   cin >> stack1;
 
   cout << "input stack 2 element (max = 5): ";
   cin >> stack2;
 
   cout << "input stack 3 element (max = 5): ";
   cin >> stack3;
 
   cout << "stack 1 = " << Sort(stack1) << endl
        << "stack 2 = " << Sort(stack2) << endl
        << "stack 3 = " << TStackOperations::Sort(stack3) << endl;
 
   system("pause");
 
   return 0;
}
переделать клас

Бинарник + исходник: program.7z
Yandex
Объявления
11.04.2013, 09:26     переделать клас
Ответ Создать тему
Опции темы

Текущее время: 05:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru