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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
FRATER1234
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 236
#1

Помогите с задачками по Многомерные динамические массивы - C++

14.11.2011, 17:41. Просмотров 1217. Ответов 6
Метки нет (Все метки)

Здравствуйте все.
Мне на универ надо две задачки по Си вот эти
1. Написать программу, которая осуществляет добавление строки или столбца в любое место двумерной матрицы по выбору пользователя.

2. Дана матрица порядка MxN (M строк, N столбцов). Необходимо заполнить ее значениями и написать функцию, осуществляющую циклический сдвиг строк и/или столбцов массива указанное количество раз и в указанную сторону.
Прошу помощи у вас в написании их спасибо за предоставленую помощь вашу мне и потраченное время на меня

Добавлено через 10 часов 38 минут
Прошу ну выручите очень надо

Добавлено через 3 часа 58 минут
короче ясно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 17:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите с задачками по Многомерные динамические массивы (C++):

Многомерные динамические массивы - C++
Написать программу, которая дает пользователю ввести 5 фамилий студентов, а затем сортирует их по возрастанию длины фамилии.

Динамические массивы -- помогите с ними разобраться! - C++
Нужно составить программу на Си++: Выбрать из массива неповторяющиеся элементы и сформировать из них динамический массив. Проблема (для...

Помогите с задачками - C++
16. В заданный текст входят только цифры и буквы. Определить, яв-ляется ли текст десятичной, шестнадцатеричной или двоичной записью целого...

Помогите с задачками на C++ - C++
в последней чет еще было про динамическое выделение памяти... :\ lab3 Даны натуральные числа п, а1 ..., an. Получить среднее...

друзья помогите пожалуйста с задачками)) - C++
Перенесено из раздела CyberBlogger.ru Друзья, помогите пожалуйста с задачками )) в одномерном массиве, состоящем из n вещественных...

Многомерные массивы, как перебирать внутренние массивы - C++
Здравствуйте. Такой учебный код и плохо понимаю как перебираются внутренние массивы, может кто пояснит подоходчивее. Именно внутренний...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
14.11.2011, 17:50 #2
Вам сюда: http://www.cyberforum.ru/freelance/
1
FRATER1234
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 236
15.11.2011, 11:13  [ТС] #3
ха так там за бабки пишут

Добавлено через 1 час 40 минут
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
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
void main()
{
 
    int **pmas;
    cout<<"Vvedite razmernost a and b "<<endl;
    int a;
    cin>>a;
    int b;
    cin>>b;
    pmas=new int *[a];
    for(int i=0; i<a; i++)
    {
      pmas[i]=new int [b];
    }
    for(int i=0; i<a; i++)
    {
        for(int j=0; j<b; j++)
        {
            pmas[i][j]=i+1;
            cout<<pmas[i][j];
        }
        cout<<endl;
    }
 
}
Вот сделал к первой задаче код но может подскажите как мне строку или столбец в любое место ?

Добавлено через 1 минуту
C
1
2
3
4
5
6
7
8
9
10
int *parr=new int [b];
for(int i=0; i<b; i++)
{
    parr[i]=3;
}
int **par=new int *[a+1];
for(int i=0; i<a+1; i++)
{
    par[i]=new int [b];
}
я думаю может так сделать через ищо один указатель хотябы попробывать в ставит между строк

Добавлено через 12 часов 2 минуты
Ну может кто то по первой поможет задачке она вродебы не сложная
0
Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
15.11.2011, 12:01 #4
Цитата Сообщение от FRATER1234 Посмотреть сообщение
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
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#include <iostream> 
#include <clocale> 
#include <conio.h> 
#include <time.h> 
using namespace std; 
 
template <typename type>void Create_Array (type ***pArr, const int m, const int n); 
 
template <typename type>void Fill_Array (type **pArr, const int m, const int n); 
 
template <typename type>void Add_Line (type **Destination, type **Source, const int m, const int n, const int b); 
 
template <typename type>void Add_Field (type **Destination, type **Source, const int m, const int n, const int b); 
 
template <typename type>void Print_Array (type **pArr, const int m, const int n); 
 
template <typename type>void Delete_Array (type **pArr, const int m, const int n); 
void Menu (int &a, int &b, int &m, int &n, const int select = 0); 
 
void main() 
{ 
    setlocale (LC_CTYPE, "Russian"); 
    srand (time (NULL)); 
    cout << "Добавление строки или столбца в матрицу.\n"; 
 
    char Exit = 'y'; 
    while (Exit == 'y' || Exit == 'Y') 
    { 
        int m = 0, n = 0, a = 0, b = 0; 
        char **pArr, **pAdd; 
 
        Menu (a, b, m, n, 1); 
 
            //pArr = new char *[m]; 
            Create_Array (&pArr, m, n); 
            Fill_Array (&*pArr, m, n); 
            Print_Array (&*pArr, m, n); 
 
        Menu (a, b, m, n, 2); 
 
            //pAdd = new char *[m]; 
            Create_Array (&pAdd, m, n); 
            a == 1? Add_Line (&*pAdd, &*pArr, m, n, b): Add_Field (&*pAdd, &*pArr, m, 
n, b); 
            Print_Array (&*pAdd, m, n); 
 
        Delete_Array (&*pAdd, m, n); 
        a == 1? Delete_Array (&*pArr, m-1, n): Delete_Array (&*pArr, m, n-1); 
 
        cout << "\n\n\t\tTo continue press \"Y\".\n\t\tFor exit press any key.\t"; 
        Exit = getch(); cout << "\n"; 
    } 
} 
/*    Создание двумерного массива. 
    Принимает указатель на указатель массивов, размеры матрицы. */ 
 
template <typename type> 
void Create_Array (type ***pArr, const int m, const int n) 
{ 
    *pArr = new type *[m]; 
 
    for (int i = 0; i < m; ++i) 
    { 
        (*pArr)[i] = new type [n]; 
    } 
} 
/*    Заполнение массива значениями. 
    Принимает указатель на указатель массивов, размеры матрицы. */ 
 
template <typename type> 
void Fill_Array (type **pArr, const int m, const int n) 
{ 
    for (int i = 0; i < m; ++i) 
    { 
        for (int j = 0; j < n; ++j) 
        { 
            pArr [i][j] = rand() % 28 + 97; 
        } 
    } 
} 
/*    Добавление строки. 
    Принимает указатель на указатель массивов для исходного и целевого массивов,  
    размеры матрицы, номер строки. */ 
 
template <typename type> 
void Add_Line (type **Destination, type **Source, const int m, const int n, const int b) 
{ 
    int k = 0; 
 
    for (int i = 0; i < m; ++i) 
    { 
        if (i + 1 == b) 
        { 
            for (int j = 0; j < n; ++j) 
            { 
                Destination [i][j] = 0; 
            } 
            ++i; 
        } 
 
        for (int j = 0; j < n; ++j) 
        { 
            Destination [i][j] = Source [k][j]; 
        } 
        ++k; 
    } 
} 
/*    Добавление столбца. 
    Принимает указатель на указатель массивов для исходного и целевого массивов,  
    размеры матрицы, номер поля. */ 
 
template <typename type> 
void Add_Field (type **Destination, type **Source, const int m, const int n, const int b) 
{ 
    int k = 0; 
    for (int i = 0; i < m; ++i) 
    { 
        k = 0; 
        for (int j = 0; j < n; ++j) 
        { 
            if (j + 1 == b) 
            { 
                Destination [i][j] = 0; 
            } 
            else 
            { 
                Destination [i][j] = Source [i][k]; 
                ++k; 
            } 
        } 
    } 
} 
/*    Выводит двумерный массив на экран. 
    Принимает указатель на указатель массивов, размеры матрицы. */ 
 
template <typename type> 
void Print_Array (type **pArr, const int m, const int n) 
{ 
    cout << "\n\n\t"; 
    int k = 192; 
    for (int i = 0; i < n; ++i, ++k) 
    { 
        cout << (char) k << "  "; 
    } 
 
    cout << "\n\t"; 
    k = 1; 
    for (int i = 0; i < m; ++i, ++k) 
    { 
        cout << "\n\n   " << k << ".\t"; 
        for (int j = 0; j < n; ++j) 
        { 
            cout << pArr [i][j] << "  "; 
        } 
    } 
} 
/*    Удаляет массив. 
    Принимает указатель на указатель массивов, размеры матрицы. */ 
 
template <typename type> 
void Delete_Array (type **pArr, const int m, const int n) 
{ 
    for (int i = 0; i < m; ++i) 
    { 
        delete [] pArr [i]; 
    } 
    delete [] pArr; 
} 
/*    Меню оператора. 
    Принимает ссылки на изменяемые переменные и аргумент для выбора меню. */ 
 
void Menu (int &a, int &b, int &m, int &n, const int select) 
{ 
    switch (select) 
    { 
    case 1: 
        { 
            cout << "\n\tКоличество строк:\t"; 
            cin >> m; 
            cout << "\tКоличество столбцов:\t"; 
            cin >> n; 
            return; 
        } 
    case 2: 
        { 
            cout << "\n\n\t1. Добавить строку.\n\t2. Добавить столбец.\t"; 
            cin >> a; 
 
            if (a == 1) 
            { 
                cout << "\n\tНомер строки:\t"; 
                while (b < 1 || b > m) 
                { 
                    cin >> b; 
                } 
                ++m; 
            } 
            else 
            { 
                cout << "\n\t2. Номер столбца:\t"; 
                while (b < 1 || b > n) 
                { 
                    cin >> b; 
                } 
                ++n; 
            } 
            return; 
        } 
    default: 
        { 
            cout << "Неправильный аргумент."; 
        } 
    } 
}

Еще какое-то решение:
нажми на меня!

Решение с использованием класса std::vector
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 <vector>
using std::vector;
 
#include <iostream>
#include <iomanip>
 
 
/////////********** Реализация
template <class T>
class matrix : virtual public vector<vector<T> >
{
public:
 matrix() 
  : vector()
 {}
 
 matrix(const matrix& MyT)
  :vector()
 {
  for (vector<T>::size_type i=0; i<MyT.size(); ++i)
   push_back(MyT[i]);
 }
   
 
 matrix(unsigned int M,unsigned int N)
  :vector(M)
 {
  for (unsigned int i=0; i<M; ++i)
   (*this)[i].resize(N);
 }
};
 
//вставка строки
template <class T> void
 ins_row(matrix<T>& m,const vector<T>& v, unsigned int pos)
{
 if ((m.size() == 0 && pos ==0) || (pos <= m.size() && m[0].size() == v.size()) )
 {
  m.insert(m.begin() + pos,v);
 }
}
 
//вставка столбца
template <class T> void
 ins_col(matrix<T>& m,const vector<T>& v,unsigned int pos)
{
 if ((m.size() == 0 && pos == 0) || (pos <= m[0].size() && v.size() == m.size()))
 {
  if (m.size() == 0) m.resize(v.size());
 
  for (vector<T>::size_type i=0; i<v.size(); ++i)
   m[i].insert(m[i].begin()+pos,v[i]);
 }
}
 
//циклический сдвиг вектора
template <class T> void
 shift(vector<T>& v,int count)
{
 int newpos,size = (int)v.size();  vector<T> newv(size);
 for (int i=0; i<size; ++i)
 {
  newpos = i+ (count% size);
  if (newpos<0) newpos+= size;
  else
   if (newpos >=size) newpos-=size;
 
  newv[newpos] = v[i];
 }
 
 v = newv;
}
 
//сдвиг матрицы вниз(вверх)
template <class T> void
 shift_down(matrix<T>& m,int count)
{
 shift(m,count);
}
 
//сдвиг матрицы вправо(влево)
template <class T> void
 shift_right(matrix<T>& m,int count)
{
 for (vector<T>::size_type i=0; i<m.size(); ++i)
  shift(m[i],count);
}
 
//вывод на экран
template <class T> void
 view(const matrix<T>& m)
{
 vector<T>::size_type i,j;
 for (i=0; i< m.size(); ++i)
 {
  for (j=0; j< m[i].size(); ++j)
   std::cout <<std::setw(6) << m[i][j];
  std::cout << std::endl;
 }
 std::cout << std::endl;
}
 
///////************ Демонстрация
#include <stdlib.h>
#include <time.h>
 
void main()
{
///1.вставка строк и столбцов
 matrix<double> m_double;
 
 double arrs[][3] = 
 {
  {1,2,3},
  {4,5,6},
  {7,8,9}, };
 
 ins_row(m_double,vector<double>(arrs[0],arrs[0]+3),0);
 ins_row(m_double,vector<double>(arrs[1],arrs[1]+3),1);
 ins_row(m_double,vector<double>(arrs[2],arrs[2]+3),2);
 view(m_double);
 
 ins_col(m_double,vector<double>(arrs[0],arrs[0]+3),3);
 ins_col(m_double,vector<double>(arrs[1],arrs[1]+3),4);
 view(m_double);
 
///2.Заполнение числами и сдвиг
 matrix<int> m_int(3,3); unsigned int i,j;
 
 srand((unsigned)time(0));
 for (i=0; i<3; ++i)
  for (j=0; j<3; ++j)
   m_int[i][j] = rand()%20;
 
 view(m_int);
 
 shift_down(m_int,1);
 view(m_int);
 
 shift_right(m_int,1);
 view(m_int);
 
 shift_down(m_int,-2);
 view(m_int);
 
 shift_right(m_int,-1);
 view(m_int);
}

Да и еще что-то есть!
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
//Задача 1
#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
void line(int pos);
void column(int pos);
void main()
{
 int col=7, row=7, pos;
 char line;
 //Создаём матрицу
 int **matrix=new int*[col];
 for(int i=0;i<col;i++)
 {
  matrix[i]=new int[row];
 }
 srand((unsigned)time(NULL));
 //Заполняем матрицу случайными значениями
 for(int i=0; i<col; i++)
 {
  for(int j=0; j<row; j++)
  {
   matrix[i][j]=rand()%100;
   cout<<matrix[i][j]<<" ";
  }
  cout<<"
";
 }
 //Просим пользователя определить что вставлять и куда вставлять
 do
 {
  cout<<"Define a place of an insert : ";
  cin>>pos;
 }while((pos<0)||(pos>8));
 //Просим пользователя определиться с вставкой в столбец или в строку
 do
 {
  cout<<"Where to insert
";
  cout<<"line = l"<<" "<<"column = c
";
  cin>>line;
 }while((line!='l')&&(line!='c'));
 //В зависимости от произведённого выбора вызываем соответствующую функцию
 int N=col+1, x=pos-1, z=0, M=row+1, q, y=pos-1;
 switch(line)
 {
  case 'l':
   //Если нужно вставить линию
   {int **ins_line=new int*[N];
   for(int i=0; i<N; i++)
   {
    ins_line[i]=new int[row];
   }
   for(int j=0; j<N; j++)
   {
    for(int s=0; s<row; s++)
    {
     if(x!=j)
     {
       ins_line[j][s]=matrix[z][s];
      cout<<ins_line[j][s]<<" ";
     }
     else
     {
      ins_line[j][s]=-1;
      cout<<ins_line[j][s]<<" ";
     }
    }
    if(x!=j)
    {
     z++;
    }
    cout<<"
";
   }
   for(int i=0; i<N; i++)
   {
    delete[] ins_line[i];
   }
   delete[] ins_line;}
   break;
  case 'c':
   //Если пользователь выбрал столбец
   {int **rower=new int*[col];
   for(int i=0; i<col; i++)
   {
    rower[i]=new int[M];
   }
   for(int j=0; j<col; j++)
   {
    q=0;
    for(int s=0; s<M; s++)
    {
     if(y!=s)
     {
       rower[j][s]=matrix[j][q];
      q++;
      cout<<rower[j][s]<<" ";
     }
     else
     {
      rower[j][s]=-1;
      cout<<rower[j][s]<<" ";
     }
    }
    cout<<"
";
   }
   for(int i=0; i<col; i++)
   {
    delete[] rower[i];
   }
   delete[] rower;}
   break;
 }
 for(int a=0; a<col; a++)
 {
  delete[] matrix[a];
 }
 delete[] matrix;
 getch();
}
//Задача 2
#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
void main()
{
 /*Дана матрица порядка M*N (M строк, N столбцов).Необходимо заполнить её значениями и 
написать функцию, осуществляющую циклический сдвиг строк и/или столбцов массива указанное
колличество раз и в указанную сторону*/
 int col, row, displacement, temp,lin, str;
 char line,column,direction;
 cout<<"Enter the size of a matrix : ";
 cin>>col;
 row=col;
 srand((unsigned)time(NULL));
 int **matrix=new int*[col];
 for(int i=0; i<col; i++)
 {
  matrix[i]=new int[row];
 }
 //Заполняем матрицу значениями
 for(int j=0; j<col; j++)
 {
  for(int a=0; a<row; a++)
  {
   matrix[j][a]=rand()%100;
   cout<<matrix[j][a]<<" ";
  }
  cout<<"
";
 }
 //Выбираем по чём будет происходить сдвиг
 do{
  cout<<"Choose after what to make shift
";
  cout<<"1-line
";
  cout<<"2-column
";
  cout<<"3-line and column
";
  cin>>displacement;
 }while((displacement!=1)&&(displacement!=2)&&(displacement!=3));
 switch(displacement)
 {
  case 1:
   {
      //определяем на сколько будет произведено смещение
      cout<<"Choose on how many to make displacement
";
      cin>>str;
      //Определяем направление смещения
      do{
      cout<<"We determine a direction of displacement
";
      cout<<"left - l "<<"right - r
";
      cin>>direction;
      }while((direction!='l')&&(direction!='r'));
      switch(direction)
      {
      case 'l':
       {
        for(int e=0; e<str; e++)
        {
         for(int j=0; j<col; j++)
         {
          for(int w=0; w<row-1; w++)
          {
           temp=matrix[j][w];
           matrix[j][w]=matrix[j][w+1];
           matrix[j][w+1]=temp;
          }
         }
        }
       }
       break;
      case 'r':
       {
        for(int i=0; i<str; i++)
        {
         for(int j=0; j<col; j++)
         {
          for(int w=row-1; w>0; w--)
          {
           temp=matrix[j][w];
           matrix[j][w]=matrix[j][w-1];
           matrix[j][w-1]=temp;
          }
         }
        }
       }
       break;
      }
     }
   break;
  case 2:
   {
    //определяем на сколько будет произведено смещение
      cout<<"Choose on how many to make displacement
";
      cin>>lin;
      //Определяем направление смещения
      do{
      cout<<"We determine a direction of displacement
";
      cout<<"top - t "<<"bottom - b
";
      cin>>direction;
      }while((direction!='t')&&(direction!='b'));
      switch(direction)
      {
      case 'b':
       {
        for(int i=0; i<lin; i++)
        {
         for(int j=0; j<row; j++)
         {
          for(int w=0; w<col-1; w++)
          {
           temp=matrix[w][j];
           matrix[w][j]=matrix[w+1][j];
           matrix[w+1][j]=temp;
          }
         }
        }
       }
       break;
      case 't':
       {
        for(int i=0; i<lin; i++)
        {
         for(int j=0; j<row; j++)
         {
          for(int w=col-1; w>0; w--)
          {
           temp=matrix[w][j];
           matrix[w][j]=matrix[w-1][j];
           matrix[w-1][j]=temp;
          }
         }
        }
       }
       break;
      }
   }
   break;
  case 3:
   {
    //определяем на сколько будет произведено смещение
      cout<<"Choose on how many to make displacement on lines
";
      cin>>str;
      //Определяем направление смещения
      do{
      cout<<"We determine a direction of displacement
";
      cout<<"left - l "<<"right - r
";
      cin>>direction;
      }while((direction!='l')&&(direction!='r'));
      switch(direction)
      {
      case 'l':
       {
        for(int i=0; i<str; i++)
        {
         for(int j=0; j<col; j++)
         {
          for(int w=0; w<row-1; w++)
          {
           temp=matrix[j][w];
           matrix[j][w]=matrix[j][w+1];
           matrix[j][w+1]=temp;
          }
         }
        }
       }
       break;
      case 'r':
       {
        for(int i=0; i<str; i++)
        {
         for(int j=0; j<col; j++)
         {
          for(int w=col-1; w>0; w--)
          {
           temp=matrix[j][w];
           matrix[j][w]=matrix[j][w-1];
           matrix[j][w-1]=temp;
          }
         }
        }
       }
       break;
      }
      //определяем на сколько будет произведено смещение
      cout<<"Choose on how many to make displacement on column
";
      cin>>lin;
      //Определяем направление смещения
      do{
      cout<<"We determine a direction of displacement
";
      cout<<"top - t "<<"bottom - b
";
      cin>>direction;
      }while((direction!='t')&&(direction!='b'));
      switch(direction)
      {
      case 't':
       {
        for(int i=0; i<lin; i++)
        {
         for(int j=0; j<row; j++)
         {
          for(int w=0; w<col-1; w++)
          {
           temp=matrix[w][j];
           matrix[w][j]=matrix[w+1][j];
           matrix[w+1][j]=temp;
          }
         }
        }
       }
       break;
      case 'b':
       {
        for(int i=0; i<lin; i++)
        {
         for(int j=0; j<row; j++)
         {
          for(int w=col-1; w>0; w--)
          {
           temp=matrix[w][j];
           matrix[w][j]=matrix[w-1][j];
           matrix[w-1][j]=temp;
          }
         }
        }
       }
       break;
      }
   }
   break;
 }
 for(int i=0; i<col; i++)
 {
  for(int j=0; j<row; j++)
  {
   cout<<matrix[i][j]<<" ";
  }
  cout<<"
";
 }
 for(int i=0; i<row; i++)
 {
  delete[] matrix[i];
 }
 delete[] matrix;
 getch();
}


Вывод: Гугль - мой лучший помощник!

Добавлено через 4 минуты
Цитата Сообщение от FRATER1234 Посмотреть сообщение
2. Дана матрица порядка MxN (M строк, N столбцов). Необходимо заполнить ее значениями и написать функцию, осуществляющую циклический сдвиг строк и/или столбцов массива указанное количество раз и в указанную сторону.
Переходим по ссылке: Циклический сдвиг строк
Если ленимся разбирать что там происходит:
кликаем!
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
2.
//Дана матрица порядка MxN (M строк, N столбцов). 
//Необходимо заполнить ее значениями и написать функцию, 
//осуществляющую циклический сдвиг строк и/или столбцов массива указанное количество раз и в указанную сторону.
 
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
 
int ** create(int,int);
void fill(int**,int,int);
void show(int**,int,int);
void rev(int**,int,int,int);
int main(){
int** mas;
int row,col;
 
 
cout<<"Kolichestvo strok dvumernogo massiva: ";
cin>>row;
cout<<"Kolichestvo stolbcov dvumernogo massiva: ";
cin>>col;
 
mas = create(row,col);
fill(mas,row,col);
cout << endl;
show(mas,row,col);
cout << "Vvedite K: ";
int k;
cin >> k;
rev(mas,row,col,k);
show(mas,row,col);
 
return 0;
}
//создание массива
int** create(int row,int col)
{
int**a=new int*[row];
for(int i=0;i<row;i++){
a[i]=new int[col];
}
return a;
}
//заполнение
void fill(int** p,int row,int col){
for(int i=0;i<row;i++){
for(int k=0;k<col;k++){
p[i][k]=rand()%9+1;
}
}
}
//отображение
void show(int**mas,int row,int col){
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
cout<<mas[i][j]<<" ";
}
cout<<endl;
}
}
//прокрутка
void rev(int**mas,int row,int col,int k){
int *tmpm=new int[k];
 
for(int i=0;i<k;i++){
for(int j=0;j<row-k;j++){
tmpm[j]=mas[i][j];
mas[i][j]=mas[i][j+k];
}
for(int j=row-k;j<col;j++){
mas[i][j]=tmpm[j-(row-k)];
}
}
}


p.s: ничего не проверял и не компилил.

Добавлено через 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define ROWS 5
#define COLS 9
 
//--------------------------------------------------------------------------------------
int **create_mass()
{
    int i, j;
    int **ret = (int **) malloc(sizeof(int *) * ROWS);
    for (i = 0; i < ROWS; i++)
        ret[i] = (int *) malloc(sizeof(int) * COLS);
 
    for (i = 0; i < ROWS; i++)
        for (j = 0; j < COLS; j++)
            ret[i][j] = rand() % 100;
 
 
    return ret;
}
 
//--------------------------------------------------------------------------------------
void free_mass(int **mass)
{
    int i;
    for (i = 0; i < ROWS; i++)
        free(mass[i]);
    free(mass);
}
 
//--------------------------------------------------------------------------------------
void print_mass(int **mass)
{
    int i, j;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++)
            printf("%d ", mass[i][j]);
        printf("\n");
    }
 
    printf("\n");
}
 
/* val - на сколько сдвинуть, to - куда сдвинуть (1 либо 0) */
//--------------------------------------------------------------------------------------
void shift_rows(int **mass, int val, int to)
{
    int i, *temp;
 
    if (to) {
        while (val-- > 0) {
            for (i = 0; i < ROWS - 1; i++) {
                temp = mass[i];
                mass[i] = mass[i + 1];
                mass[i + 1] = temp;
            }
        }
    } else {
        while (val-- > 0) {
            for (i = ROWS - 1; i > 0; i--) {
                temp = mass[i];
                mass[i] = mass[i - 1];
                mass[i - 1] = temp;
            }
        }
    }
}
 
/* val - на сколько сдвинуть, to - куда сдвинуть (1 либо 0) */
//--------------------------------------------------------------------------------------
void shift_cols(int **mass, int val, int to)
{
    int i, j, temp;
 
    if (to) {
        while (val-- > 0) {
            for (i = 0; i < COLS - 1; i++) {
                for (j = 0; j < ROWS; j++) {
                    temp = mass[j][i];
                    mass[j][i] = mass[j][i + 1];
                    mass[j][i + 1] = temp;
                }
            }
        }
    } else {
        while (val-- > 0) {
            for (i = COLS - 1; i > 0; i--) {
                for (j = ROWS - 1; j >= 0; j--) {
                    temp = mass[j][i];
                    mass[j][i] = mass[j][i - 1];
                    mass[j][i - 1] = temp;
                }
            }
        }
    }
}
 
//--------------------------------------------------------------------------------------
int main()
{
    int **mass = create_mass();
    print_mass(mass);
    shift_rows(mass, 2, 1);
    print_mass(mass);
    shift_cols(mass, 2, 0);
    print_mass(mass);
    free_mass(mass);
    return (0);
}


Добавлено через 1 минуту
Комментарий автора последнего решения.
ну тут все просто, shift_rows двигает строки, shift_cols - колонки. принимают указатель на массив, на скока двигать, и куда двигать. куда двигать - 1 либо 0. для строк это вверх/вниз, для колонок - лево/право.
можно конечно функции сдвига было оптимизировать, но влом) так же кол во строк и столбцов у меня задается статически в дефайнах. на значения поменять не составит труда.


Добавлено через 5 минут
Да эти ваши интернеты просто пестрят такими задачами,
клик.
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
//Задача 2
#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
void main()
{
    /*Дана матрица порядка M*N (M строк, N столбцов).Необходимо заполнить
её значениями и 
написать функцию, осуществляющую циклический сдвиг строк и/или столбцов массива
указанное
колличество раз и в указанную сторону*/
    int col, row, displacement, temp,lin, str;
    char line,column,direction;
    cout<<"Enter the size of a matrix : ";
    cin>>col;
    row=col;
    srand((unsigned)time(NULL));
    int **matrix=new int*[col];
    for(int i=0; i<col; i++)
    {
        matrix[i]=new int[row];
    }
    //Заполняем матрицу значениями
    for(int j=0; j<col; j++)
    {
        for(int a=0; a<row; a++)
        {
            matrix[j][a]=rand()%100;
            cout<<matrix[j][a]<<"   ";
        }
        cout<<"
";
    }
    //Выбираем по чём будет происходить сдвиг
    do{
        cout<<"Choose after what to make shift
";
        cout<<"1-line
";
        cout<<"2-column
";
        cout<<"3-line and column
";
        cin>>displacement;
       
}while((displacement!=1)&&(displacement!=2)&&(displacement!=3));
    switch(displacement)
    {
        case 1:
            {
                 //определяем на сколько будет произведено
смещение
                 cout<<"Choose on how many to make
displacement
";
                 cin>>str;
                 //Определяем направление смещения
                 do{
                 cout<<"We determine a direction of
displacement
";
                 cout<<"left - l    
"<<"right - r
";
                 cin>>direction;
                
}while((direction!='l')&&(direction!='r'));
                 switch(direction)
                 {
                 case 'l':
                     {
                         for(int e=0; e<str; e++)
                         {
                             for(int j=0; j<col;
j++)
                             {
                                 for(int w=0;
w<row-1; w++)
                                 {
                                    
temp=matrix[j][w];
                                    
matrix[j][w]=matrix[j][w+1];
                                    
matrix[j][w+1]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 case 'r':
                     {
                         for(int i=0; i<str; i++)
                         {
                             for(int j=0; j<col;
j++)
                             {
                                 for(int
w=row-1; w>0; w--)
                                 {
                                    
temp=matrix[j][w];
                                    
matrix[j][w]=matrix[j][w-1];
                                    
matrix[j][w-1]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 }
             }
            break;
        case 2:
            {
                //определяем на сколько будет произведено
смещение
                 cout<<"Choose on how many to make
displacement
";
                 cin>>lin;
                 //Определяем направление смещения
                 do{
                 cout<<"We determine a direction of
displacement
";
                 cout<<"top - t     
"<<"bottom - b
";
                 cin>>direction;
                
}while((direction!='t')&&(direction!='b'));
                 switch(direction)
                 {
                 case 'b':
                     {
                         for(int i=0; i<lin; i++)
                         {
                             for(int j=0; j<row;
j++)
                             {
                                 for(int w=0;
w<col-1; w++)
                                 {
                                    
temp=matrix[w][j];
                                    
matrix[w][j]=matrix[w+1][j];
                                    
matrix[w+1][j]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 case 't':
                     {
                         for(int i=0; i<lin; i++)
                         {
                             for(int j=0; j<row;
j++)
                             {
                                 for(int
w=col-1; w>0; w--)
                                 {
                                    
temp=matrix[w][j];
                                    
matrix[w][j]=matrix[w-1][j];
                                    
matrix[w-1][j]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 }
            }
            break;
        case 3:
            {
                //определяем на сколько будет произведено
смещение
                 cout<<"Choose on how many to make
displacement on lines
";
                 cin>>str;
                 //Определяем направление смещения
                 do{
                 cout<<"We determine a direction of
displacement
";
                 cout<<"left - l    
"<<"right - r
";
                 cin>>direction;
                
}while((direction!='l')&&(direction!='r'));
                 switch(direction)
                 {
                 case 'l':
                     {
                         for(int i=0; i<str; i++)
                         {
                             for(int j=0; j<col;
j++)
                             {
                                 for(int w=0;
w<row-1; w++)
                                 {
                                    
temp=matrix[j][w];
                                    
matrix[j][w]=matrix[j][w+1];
                                    
matrix[j][w+1]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 case 'r':
                     {
                         for(int i=0; i<str; i++)
                         {
                             for(int j=0; j<col;
j++)
                             {
                                 for(int
w=col-1; w>0; w--)
                                 {
                                    
temp=matrix[j][w];
                                    
matrix[j][w]=matrix[j][w-1];
                                    
matrix[j][w-1]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 }
                 //определяем на сколько будет произведено
смещение
                 cout<<"Choose on how many to make
displacement on column
";
                 cin>>lin;
                 //Определяем направление смещения
                 do{
                 cout<<"We determine a direction of
displacement
";
                 cout<<"top - t     
"<<"bottom - b
";
                 cin>>direction;
                
}while((direction!='t')&&(direction!='b'));
                 switch(direction)
                 {
                 case 't':
                     {
                         for(int i=0; i<lin; i++)
                         {
                             for(int j=0; j<row;
j++)
                             {
                                 for(int w=0;
w<col-1; w++)
                                 {
                                    
temp=matrix[w][j];
                                    
matrix[w][j]=matrix[w+1][j];
                                    
matrix[w+1][j]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 case 'b':
                     {
                         for(int i=0; i<lin; i++)
                         {
                             for(int j=0; j<row;
j++)
                             {
                                 for(int
w=col-1; w>0; w--)
                                 {
                                    
temp=matrix[w][j];
                                    
matrix[w][j]=matrix[w-1][j];
                                    
matrix[w-1][j]=temp;
                                 }
                             }
                         }
                     }
                     break;
                 }
            }
            break;
    }
    for(int i=0; i<col; i++)
    {
        for(int j=0; j<row; j++)
        {
            cout<<matrix[i][j]<<"   ";
        }
        cout<<"
";
    }
    for(int i=0; i<row; i++)
    {
        delete[] matrix[i];
    }
    delete[] matrix;
    getch();
}


Добавлено через 2 минуты
Теперь надеюсь, будете с гуглем советоваться!
2
FRATER1234
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 236
15.11.2011, 13:48  [ТС] #5
Благодарствую вам

Добавлено через 54 минуты
Вот сделал я первую задачку
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
#include <stdlib.h> 
#include <time.h> 
#include <iostream>
#include <Windows.h>
#include <string.h>
#include <stdio.h>
using namespace std;
void main()
{
        SetConsoleOutputCP(1251);
        srand(unsigned(time(0)));
        int m1, m2,  sm1=0, sm2=0;
        int **pArr;
        cout<<"Ведите количество строк = ";
        cin>>m1;
        cout<<"Ведите количество столбцов = ";
        cin>>m2;
        pArr = new int*[m1+sm1];
        for (int i = 0; i < m1+sm1; i++)
            pArr[i] = new int[m2+sm2];
 
        for (int i = 0; i < m1+sm1; i++){
            for (int j = 0; j < m2+sm2; j++){
                pArr[i][j]=0;
            }
        }
 
        for (int i = 0; i < m1+sm1; i++){
            for (int j = 0; j < m2+sm2; j++){
                cout << pArr[i][j] << ' ';
            }
            cout<<"\n\n";
        }
        
        cout << "Введите на сколько увеличеть высоту: " << endl;
        cin >> sm1;
        cout << "Введите на сколько увеличеть ширину: " << endl;
        cin >> sm2;
        pArr = new int*[m1+sm1];
        for (int i = 0; i < m1+sm1; i++)
            pArr[i] = new int[m2+sm2];
        
        for (int i = 0; i < m1+sm1; i++){
            for (int j = 0; j < m2+sm2; j++){
                pArr[i][j]=0;
            }
        }
 
        for (int i = 0; i < m1+sm1; i++){
            for (int j = 0; j < m2+sm2; j++){
                cout << pArr[i][j] << ' ';
            }
            cout<<"\n\n";
        }
 
        for (int i = 0; i < m1; i++) 
            delete[]pArr[i];
        delete[]pArr;
}
как сделать рандом ато я проиницилизировал чисто нулям а как сделать чтоб рандомно было я под забыл просто

Добавлено через 18 минут
Всё уже разобрался воть )
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
#include <stdlib.h> 
#include <time.h> 
#include <iostream>
#include <Windows.h>
#include <string.h>
#include <stdio.h>
using namespace std;
void main()
{
        SetConsoleOutputCP(1251);
        srand(unsigned(time(0)));
        int m1, m2;
        int **pArr;
        cout<<"Ведите количество строк = ";
        cin>>m1;
        cout<<"Ведите количество столбцов = ";
        cin>>m2;
        pArr = new int*[m1];
        for (int i = 0; i < m1; i++)
            pArr[i] = new int[m2];
 
        for (int i = 0; i < m1; i++){
            for (int j = 0; j < m2; j++){
                pArr[i][j]=rand()%100;
            }
        }
 
        for (int i = 0; i < m1; i++){
            for (int j = 0; j < m2; j++){
                cout << pArr[i][j] << ' ';
            }
            cout<<"\n\n";
        }
        int sm1=0, sm2=0;
        cout << "Введите на сколько увеличеть высоту: " << endl;
        cin >> sm1;
        cout << "Введите на сколько увеличеть ширину: " << endl;
        cin >> sm2;
        pArr = new int*[m1+sm1];
        for (int i = 0; i < m1+sm1; i++)
            pArr[i] = new int[m2+sm2];
        
        for (int i = 0; i < m1+sm1; i++){
            for (int j = 0; j < m2+sm2; j++){
                pArr[i][j]=rand()%100;
            }
        }
 
        for (int i = 0; i < m1+sm1; i++){
            for (int j = 0; j < m2+sm2; j++){
                cout << pArr[i][j] << ' ';
            }
            cout<<"\n\n";
        }
 
        for (int i = 0; i < m1; i++) 
            delete[]pArr[i];
        delete[]pArr;
}
Спс вам за подсказки в задачах
Nursik77,
0
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
20.03.2012, 18:56 #6
Цитата Сообщение от FRATER1234 Посмотреть сообщение
Благодарствую вам

Добавлено через 54 минуты
Вот сделал я первую задачку

Спс вам за подсказки в задачах
Nursik77,
Идея очень интересная ... только вот я не совсем понял зачем вам такое количество библиотек, когда для реализации хватит и двух iostream и ctime, чтобы сделать с случайными числами...
Вот так:
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
#include <iostream>
#include <ctime>
using namespace std;
void main()
{
                
                srand(unsigned(time(0)));
                int m1, m2;
                int **pArr;
                cout<<"Enter your rows ->";
                cin>>m1;
                cout<<"Enter your columns -> ";
                cin>>m2;
                pArr = new int*[m1];
                for (int i = 0; i < m1; i++)
                        pArr[i] = new int[m2];
 
                for (int i = 0; i < m1; i++){
                        for (int j = 0; j < m2; j++){
                                pArr[i][j]=rand()%100;
                        }
                }
 
                for (int i = 0; i < m1; i++){
                        for (int j = 0; j < m2; j++){
                                cout << pArr[i][j] << ' ';
                        }
                        cout<<"\n\n";
                }
                int sm1=0, sm2=0;
                cout << "How much more rows-> " << endl;
                cin >> sm1;
                cout << "How much more columns -> " << endl;
                cin >> sm2;
                pArr = new int*[m1+sm1];
                for (int i = 0; i < m1+sm1; i++)
                        pArr[i] = new int[m2+sm2];
                
                for (int i = 0; i < m1+sm1; i++){
                        for (int j = 0; j < m2+sm2; j++){
                                pArr[i][j]=rand()%100;
                        }
                }
 
                for (int i = 0; i < m1+sm1; i++){
                        for (int j = 0; j < m2+sm2; j++){
                                cout << pArr[i][j] << ' ';
                        }
                        cout<<"\n\n";
                }
 
                for (int i = 0; i < m1; i++) 
                        delete[]pArr[i];
                delete[]pArr;
}
0
soon
20.03.2012, 19:07     Помогите с задачками по Многомерные динамические массивы
  #7

Не по теме:

Цитата Сообщение от lesha1980 Посмотреть сообщение
когда для реализации хватит и двух iostream и ctime, чтобы сделать с случайными числами...
Все же еще cstdlib - ибо srand оттуда

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2012, 19:07
Привет! Вот еще темы с ответами:

Многомерные массивы - C++
Здравствуйте, уважаемые форумчане! Давненько я не задавал здесь своих глупых вопросов по плюсам. Надо бы исправить ситуацию: В общем, я...

Многомерные массивы и STL - C++
Господа, не подскажете, как создавать многомерные массивы, например с помощью &lt;vector&gt; ? И, соответственно, как к ним обращаться? ...

Задача на Многомерные Массивы - C++
Фирма имеет 5 магазинов. Информация о доходе каждого магазина за каждый месяц хранится в двухмерном массиве (первого магазина – в первой...

Многомерные массивы. Матрица. - C++
Всем привет. Прошу помочь с заданием по программированию, не до конца понимаю кое-что… Задание: Дана матрица целых чисел N x M....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.03.2012, 19:07
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru