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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.95
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
#1

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

15.05.2010, 21:27. Просмотров 4819. Ответов 12
Метки нет (Все метки)

У меня такая задача:
Последовательность вещественных чисел сохранить в динамическом списке. Поместить в стек все отрицательные числа, исключив их из динамического списка.
Я создала список (вложенный файл), но не знаю, как поместить в стек отрицательные числа.
Может, напишете, как сделать.
0
Вложения
Тип файла: doc первая часть задания1.doc (35.0 Кб, 109 просмотров)
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2010, 21:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поместить в стек из динамического списка (C++):

Поместить символ в стек - C++
Хочу поместить в стек символ и найти в строке с файла этот символ

Стек на основе динамического массива - C++
Надо написать стек на основе динамического массива. Как выделить память под новый элемент? template <typename T> void...

Найти произведение элементов стека и поместить результат в стек - C++
Сформировать стек из 5 чисел. Найти произведение 3-го и 4-го чисел из стека. Результат поместить в стек. если можно хотелось бы с...

Списки. Как создать одновременно 2 списка? Как из второго списка поместить элементы в первый? - C++
2 самых главных вопроса: как создать одновременно 2 списка? как из второго списка поместить элементы в первый? Вообще нигде не могу...

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

Стек из списка - C++
Здравствуйте, обращаюсь за помощью не в первый раз, всегда помогали, отдельное спасибо. Задача такая. Реализовать стек с помощью списка и...

12
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
16.05.2010, 15:28 #2
Решение.
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
#include <iostream>
using namespace std;
 
 
//Описание узла списка.
struct Node {
double d;
Node *next;
Node *prev;
Node():next(NULL),prev(NULL), d(-332215){}
Node(Node* ptr_n, Node *ptr_p , double data): next(ptr_n),prev(ptr_p), d(data) {}
};
 
//Функции для работы со списком.
//--------------------------------------------------------
Node * Create(double data);                  //создает список.
void add(Node**const pend , double data);    //добавить в конец списка.
double pop(Node**const pbeg);                //выборка  из начала списка.
//полная выборка.  
void Update(Node **const pbeg ){ while(*pbeg)pop(pbeg); }       
void Show(Node *ptr); 
//--------------------------------------------------------
 
//Описание узла стека.
struct Stack {
double d;
Stack *next;
Stack(): next(NULL), d(-332215){}
Stack(Stack *ptr, double data): next(ptr), d(data){}
};
 
//-------------------------------------------------------------
//Для работы со стеком:
void push(Stack**const top, double data);      //положить на верщину стека.
double pop(Stack**const top);                  //выборка из стека.
void Show(Stack *ptr);                         //показать стек.
 
//очистить стек.
void Update(Stack **const top) { while(*top)pop(top);   }           
//--------------------------------------------------------------
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top);
 
 
//Клиентская часть.
int main(){
Stack *top = NULL;      //на вершину стека.
 
Node *pbeg = NULL;      //на начало списка.
Node *pend = NULL;      //на конец  списка.
 
pend = Create(200);      //создаем   список.
pbeg = pend;
 
 
int i = -10;
while(i<10){ add(&pend,i); i++; }
cout<<"Print List: ";Show(pbeg);
 
 
DeleteNegFromListANDFormStack(&pbeg,&pend,&top);
 
cout<<"Print List: ";Show(pbeg);
cout<<"Print Stack: ";Show(top);
 
 
Update(&top);    //memory free
Update(&pbeg);   //memore free
return 0;
}
 
 
 
 
 
//создает список.
Node * Create(double data){ Node *pv = new Node(NULL,NULL,data); ; return pv; }
 
//добавить в конец списка.
void add(Node**const pend , double data){
Node *pv = new Node(NULL,*pend,data);
(*pend)->next = pv; 
(*pend) = pv;
}
 
//выборка  из начала списка.
double pop(Node**const pbeg){
Node *tmp = (*pbeg);
if(tmp){
double d = tmp->d;
(*pbeg)=(*pbeg)->next;
delete tmp;
return d;
}
return -1;
}
 
 
 
/*выводить в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr){
//Выводим список с конца. если:
if((ptr->next == NULL)&&(ptr->prev!=NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим сначала если
if((ptr->next != NULL)&&(ptr->prev==NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->next;   } cout<<endl; return; }
return ;
}
 
 
//положить на верщину стека.
void push(Stack**const top, double data){
    if(*top==NULL){
    Stack *pv = new Stack(NULL,data);
    (*top) = pv;
    return ;
    }
    else {
    Stack *pv= new Stack(*top,data);
    (*top) = pv;
    return ;
    }
}
 
//выборка из стека.
double pop(Stack**const top){
Stack * tmp = (*top);   
if(tmp){ double d = tmp->d; (*top)=(*top)->next; delete tmp; return d; }
return -1;
}
//показать стек.
void Show(Stack *ptr){ while(ptr){ cout<<ptr->d<<' '; ; ptr = ptr ->next; } cout<<endl;   }
 
 
 
 
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top){
if((*pbeg)==NULL||(*pend)==NULL)return false;
Node * temp = *pbeg;
 
while(temp){
    if(temp->d<0){
        if(temp ==(*pend)){
        (*pend)=(*pend)->prev;
        (*pend)->next=NULL;
        }
 
    
        else if(temp ==(*pbeg)){
        (*pbeg)=(*pbeg)->next;
        (*pbeg)->prev=NULL;
        }
 
        else  {      
        (temp->prev)->next=temp->next;
        (temp->next)->prev=temp->prev;  }
  
        push(top,temp->d);
        delete temp;  
        temp = NULL; 
        temp = *pbeg; 
        continue;   
    }
temp=temp->next; 
}
 
return 0;
}

Ваше вложение, я не смотрел: не люблю ковыряться в чужом коде.
Надеюсь мое решение вам пригодиться.
3
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
20.05.2010, 00:14  [ТС] #3
Большое спасибо.
Только не подскажете, при запуске программы, я не вижу результаты работы программы. Черный экранчик на секунду мелькнет, и погаснет.
И уже выдается сообщение. Программа завершилась с кодом 0.
Как мне увидеть результаты?

Добавлено через 30 секунд
Genius Ignat,
Большое спасибо.
Только не подскажете, при запуске программы, я не вижу результаты работы программы. Черный экранчик на секунду мелькнет, и погаснет.
И уже выдается сообщение. Программа завершилась с кодом 0.
Как мне увидеть результаты?
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.05.2010, 13:14 #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
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
#include <iostream>
using namespace std;
 
//Описание узла списка.
struct Node {
double d;
Node *next;
Node *prev;
Node():next(NULL),prev(NULL), d(-332215){}
Node(Node* ptr_n, Node *ptr_p , double data): next(ptr_n),prev(ptr_p), d(data) {}
};
 
//Функции для работы со списком.
//--------------------------------------------------------
Node * Create(double data);                  //создает список.
void add(Node**const pend , double data);    //добавить в конец списка.
double pop(Node**const pbeg);                //выборка  из начала списка.
//полная выборка.  
void Update(Node **const pbeg, Node **const pend ){ while(*pbeg)pop(pbeg); (*pend) = NULL; }       
void Show(Node *ptr); 
//--------------------------------------------------------
 
 
//Описание узла стека.
struct Stack {
double d;
Stack *next;
Stack(): next(NULL), d(-332215){}
Stack(Stack *ptr, double data): next(ptr), d(data){}
};
 
 
//-------------------------------------------------------------
//Для работы со стеком:
void push(Stack**const top, double data);      //положить на верщину стека.
double pop(Stack**const top);                  //выборка из стека.
void Show(Stack *ptr);                         //показать стек.
//очистить стек.
void Update(Stack **const top) { while(*top)pop(top);   }   
        
//---------------------------------------------------------------------------------------
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top);
 
 
//Клиентская часть.
int main(){
 
Stack *top = NULL;      //на вершину стека.
 
Node *pbeg = NULL;      //на начало списка.
Node *pend = NULL;      //на конец  списка.
 
pend = Create(-200);      //создаем   список.
pbeg = pend;
 
 
int i = -10;
while(i++<10)add(&pend,i);
cout<<"Print List: ";Show(pbeg);
DeleteNegFromListANDFormStack(&pbeg,&pend,&top);
 
cout<<"Print List: ";Show(pbeg);
cout<<"Print Stack: ";Show(top);
 
Update(&top);           //memory free
Update(&pbeg,&pend);    //memore free
 
system("pause");        //что програ не закрывалась, сразу.
return 0;
}
 
//создает список.
Node * Create(double data){ Node *pv = new Node(NULL,NULL,data); ; return pv; }
 
//добавить в конец списка.
void add(Node**const pend , double data){
Node *pv = new Node(NULL,*pend,data);
(*pend)->next = pv; 
(*pend) = pv;
}
 
//выборка  из начала списка.
double pop(Node**const pbeg){
Node *tmp = (*pbeg);
if(tmp){
double d = tmp->d;
(*pbeg)=(*pbeg)->next;
delete tmp;
return d;
}
return -1;
}
 
 
 
/*выводить в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr){
if(ptr){
if((ptr->next==NULL)&&(ptr->prev==NULL))  {while(ptr){  cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим список с конца. если:
if((ptr->next == NULL)&&(ptr->prev!=NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим сначала если
if((ptr->next != NULL)&&(ptr->prev==NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->next;   } cout<<endl; return; }
return ;
}
 
}
 
 
//положить на верщину стека.
void push(Stack**const top, double data){
    if(*top==NULL){
    Stack *pv = new Stack(NULL,data);
    (*top) = pv;
    return ;
    }
    else {
    Stack *pv= new Stack(*top,data);
    (*top) = pv;
    return ;
    }
}
 
 
//выборка из стека.
double pop(Stack**const top){
Stack * tmp = (*top);   
if(tmp){ double d = tmp->d; (*top)=(*top)->next; delete tmp; return d; }
return -1;
}
//показать стек.
void Show(Stack *ptr){ while(ptr){ cout<<ptr->d<<' '; ; ptr = ptr ->next; } cout<<endl;   }
 
 
 
 
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top){
if((*pbeg)==NULL||(*pend)==NULL)return -1;
Node * temp = *pbeg;
 
//Если в списке только один узел.
if(temp->next==NULL&&temp->prev==NULL&&temp->d<0){
push(top,temp->d);
delete temp;
*pbeg = NULL;
*pend = NULL; 
return 2;
}
 
 
while(temp){
    if(temp->d<0){
        if(temp ==(*pend)){
        (*pend)=(*pend)->prev;
        (*pend)->next=NULL;
        }
 
    
        else if(temp ==(*pbeg)){
        (*pbeg)=(*pbeg)->next;
        (*pbeg)->prev=NULL;
        }
 
        else  {      
        (temp->prev)->next=temp->next;
        (temp->next)->prev=temp->prev;  }
  
        push(top,temp->d);
        delete temp;  
        temp = NULL; 
        temp = *pbeg; 
        continue;   
    }
temp=temp->next; 
}
 
 
 
 
 
return 0;
}
Должно работать.
В программу внес еще поправки небольшие.
1
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
20.05.2010, 19:15  [ТС] #5
Большое спасибо. Все работает. Только генерируются целые числа.
Не сделаете вещественные?
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.05.2010, 19:40 #6
Какая разница все равно числа преобразуются к double.

если так надо увидеть дробную часть.
Поменяйте это:
C++
1
pend = Create(-200);      //создаем   список.
на это:
C++
1
pend = Create(-200.5);      //создаем   список.
и это:
C++
1
2
int i = -10;
while(i++<10)add(&pend,i);
на это:

C++
1
2
double i = -10.0;
while((i+=0.5)<10.0)add(&pend,i);
1
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
23.05.2010, 16:07  [ТС] #7
Если можно, сделайте, пожалуйста, ввод вещественных чисел в массив(или с клавиатуры или случайным образом). А то учитель не принял у меня программу из за этого.
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
23.05.2010, 16:42 #8
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
#include <iostream>
using namespace std;
 
//Описание узла списка.
struct Node {
double d;
Node *next;
Node *prev;
Node():next(NULL),prev(NULL), d(-332215){}
Node(Node* ptr_n, Node *ptr_p , double data): next(ptr_n),prev(ptr_p), d(data) {}
};
 
//Функции для работы со списком.
//--------------------------------------------------------
Node * Create(double data);                  //создает список.
void add(Node**const pend , double data);    //добавить в конец списка.
double pop(Node**const pbeg);                //выборка  из начала списка.
//полная выборка.  
void Update(Node **const pbeg, Node **const pend ){ while(*pbeg)pop(pbeg); (*pend) = NULL; }       
void Show(Node *ptr); 
//--------------------------------------------------------
 
 
//Описание узла стека.
struct Stack {
double d;
Stack *next;
Stack(): next(NULL), d(-332215){}
Stack(Stack *ptr, double data): next(ptr), d(data){}
};
 
 
//-------------------------------------------------------------
//Для работы со стеком:
void push(Stack**const top, double data);      //положить на верщину стека.
double pop(Stack**const top);                  //выборка из стека.
void Show(Stack *ptr);                         //показать стек.
//очистить стек.
void Update(Stack **const top) { while(*top)pop(top);   }   
        
//---------------------------------------------------------------------------------------
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top);
 
 
//Клиентская часть.
int main(){
 
double numb ;
Stack *top = NULL;      //на вершину стека.
Node *pbeg = NULL;      //на начало списка.
Node *pend = NULL;      //на конец  списка.
 
cout<<"Input numb: ";cin>>numb;
pend = Create(numb);      //создаем   список.
pbeg = pend;
;
 
int i = 0;
while(i<10){
cout<<"Input numb: ";cin>>numb;
add(&pend,numb);
i++;
}
 
cout<<"Print List: ";Show(pbeg);
DeleteNegFromListANDFormStack(&pbeg,&pend,&top);
 
cout<<"Print List: ";Show(pbeg);
cout<<"Print Stack: ";Show(top);
 
Update(&top);           //memory free
Update(&pbeg,&pend);    //memore free
 
system("pause");        //что програ не закрывалась, сразу.
return 0;
}
 
//создает список.
Node * Create(double data){ Node *pv = new Node(NULL,NULL,data); ; return pv; }
 
//добавить в конец списка.
void add(Node**const pend , double data){
Node *pv = new Node(NULL,*pend,data);
(*pend)->next = pv; 
(*pend) = pv;
}
 
//выборка  из начала списка.
double pop(Node**const pbeg){
Node *tmp = (*pbeg);
if(tmp){
double d = tmp->d;
(*pbeg)=(*pbeg)->next;
delete tmp;
return d;
}
return -1;
}
 
 
 
/*выводить в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr){
if(ptr){
if((ptr->next==NULL)&&(ptr->prev==NULL))  {while(ptr){  cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим список с конца. если:
if((ptr->next == NULL)&&(ptr->prev!=NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим сначала если
if((ptr->next != NULL)&&(ptr->prev==NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->next;   } cout<<endl; return; }
return ;
}
 
}
 
 
//положить на верщину стека.
void push(Stack**const top, double data){
    if(*top==NULL){
    Stack *pv = new Stack(NULL,data);
    (*top) = pv;
    return ;
    }
    else {
    Stack *pv= new Stack(*top,data);
    (*top) = pv;
    return ;
    }
}
 
 
//выборка из стека.
double pop(Stack**const top){
Stack * tmp = (*top);   
if(tmp){ double d = tmp->d; (*top)=(*top)->next; delete tmp; return d; }
return -1;
}
//показать стек.
void Show(Stack *ptr){ while(ptr){ cout<<ptr->d<<' '; ; ptr = ptr ->next; } cout<<endl;   }
 
 
 
 
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top){
if((*pbeg)==NULL||(*pend)==NULL)return -1;
Node * temp = *pbeg;
 
while(temp){
    if(temp->d<0){
 
//Если в списке остался только один узел, или был только один узел.
if(temp->next==NULL&&temp->prev==NULL){
push(top,temp->d);
delete temp;
*pbeg = NULL;
*pend = NULL; 
return 0;
}
        if(temp ==(*pend)){
        (*pend)=(*pend)->prev;
        (*pend)->next=NULL;
        }
 
    
        else if(temp ==(*pbeg)){
        (*pbeg)=(*pbeg)->next;
        (*pbeg)->prev=NULL;
        }
 
        else  {      
        (temp->prev)->next=temp->next;
        (temp->next)->prev=temp->prev;  }
  
        push(top,temp->d);
        delete temp;  
        temp = NULL; 
        temp = *pbeg; 
        continue;   
    }
temp=temp->next; 
}
 
 
return 0;
}
Вот с вводом.
Так же немного подправил функцию, потому как она не правильно работала если в списке только
отрицательные.
0
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
23.05.2010, 18:32  [ТС] #9
Огромное спасибо!!!!

Добавлено через 1 минуту
Не подскажете, что это такое - d(-332215)
0
Genius Ignat
1241 / 779 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
23.05.2010, 18:48 #10
Некое число по-умолчанию. Можете написать какое нибудь свое число, естественно в пределах допустимого значения типа double.
Это число не имеет в данной программе особого значения.

Добавлено через 1 минуту
d(-332215) - это инициализация данных узла списка.
0
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
23.05.2010, 18:57  [ТС] #11
то есть первоначальное значение информационной части узла? А потом уже вводим, что хотим c клавиатуры?
0
Genius Ignat
23.05.2010, 19:15
  #12

Не по теме:


Если это нужно знать преподавателю, тогда
наберите в гугол: конструктор по умолчанию, и конструктор с параметрами.
Свое время на объяснения тратить не буду, да и тем более я не преподаватель,
что бы кому-то, что то в втолковывать, мне за это не платят.
Надеюсь не обидел.

1
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
23.05.2010, 19:31  [ТС] #13
Я убрала d() совсем - чтобы меньше вопросов было - все равно работает
0
23.05.2010, 19:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2010, 19:31
Привет! Вот еще темы с ответами:

Обмен элементов динамического списка - C++
Народ помогите кто как может или литературы полезной скиньте, что то читал читал, а толку нету. необходимо создать однонаправленный...

Абстрактный класс динамического списка - C++
Как создать из класса динамического списка - абстрактный? Ну ясно что абстрактный класс - это класс с чистой виртуальной функцией. ...

Не выводится содержимое динамического списка - C++
доброго времени суток. структура с типом стринг, трем элементам структуры присваивается значение потом при попытки вывести одно из...

Структура в виде динамического списка - C++
Доброе время суток. Есть программа #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;windows.h&gt; #include...


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

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

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