19 / 16 / 10
Регистрация: 07.11.2015
Сообщений: 136
1

Удалить из списка все элементы, большие среднего арифметического

04.02.2016, 20:03. Показов 4412. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Задача такая:Написать программу по созданию, просмотру, добавлению и решению поставленной задачи для двунаправленного линейного списка. Создать список из случайных целых чисел. Удалить из списка все элементы, большие среднего арифметического.
Как работать со структурой такого типа я похоже понял, написал алгоритм, функции по созданию, удалению.

Теперь суть проблемы: при построении решения ошибок не выдает. В процессе выполнения пункта меню 4 (Удалить из списка все элементы, большие среднего арифметического.) выбрасывает и выдает ошибку: Unhandled exception at 0x01321c54 in Alexey.exe: 0xC0000005: Access violation reading location 0x00000008.

Я написал цикл вайлом (те while(t!=NULL)). Как я понимаю как только мой указатель выйдет за список, он укажет в NULL. Соответственно это будет последняя итерация и больше в вайл не войдет. При пошаговой отладке видно, что он проходит 11 раз (я сделал 11 псевдорандомных элементов). Удаляет все элементы, которые больше среднего арифметического и на 11 итерации естественно t уже смотрит в NULL (t=t->Next). Это видно и в окне переменных. Но на 12 итерацию происходит попадание в вайл, уже удалять нечего, т.к. все уже удалено, и по тексту следует t=t->Next;. Которое уже итак смотрит в никуда и тут компилятор выдает ошибку.
Надеюсь, моя проблема ясна. Прошу помощи у знающих - что я делаю не так. Так же может быть по остальному тексту что-то режет глаз, тк я новичок. MS VS2010. Код ниже. Спасибо.
Кликните здесь для просмотра всего текста
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
//Написать программу по созданию, просмотру, добавлению и решению поставленной задачи для двунаправленного линейного списка. 
//13. Создать список из случайных целых чисел. Удалить из списка все элементы, большие среднего арифметического.
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
#include<math.h>
struct Spis
{
int info;
Spis *Prev,*Next;
};
 
Spis*begin,*end,*t;
int menu();
void View(Spis*begin);                  //просмотр списка
Spis* Create(Spis**begin,Spis**end);    //создание списка
Spis* Add(Spis**begin,Spis**end);       //добавление элемента
void Del(Spis**begin);                  //удаление списка
void DelMaxMid(Spis*begin);             //Удалить из списка все элементы, большие среднего арифметического
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int menu1;
 
do
{
    menu1=menu();
    switch(menu1)
    {
    case 1:         //1 - создать список из случайных целых чисел
        {
        begin=Create(&begin,&end);
        break;
        }
 
    case 2:         //2 - просмотр списка
        {
        View(begin);
        break;
        }
    case 3:         //3 - добавление элементов списка
        {
        begin=Add(&begin,&end);
        break;
        }
    case 4:         //4 -Удалить из списка все элементы, большие среднего арифметического
        {
            DelMaxMid(begin);
            break;
        }
    case 5:
        {
        Del(&begin);
        if(begin==NULL)
            puts("Проверено! ");
        _getch();
        }
 
    }
 
 
}while(menu1!=5);
 
}
 
int menu()// меню по созданию, просмотру, добавлению и решению поставленной задачи
{
    int enter;
printf("\t\tМЕНЮ ПРОГРАММЫ\n");
printf("\t1 - создать список из случайных целых чисел в диапазоне от 1 до 10\n");
printf("\t2 - просмотр списка\n");
printf("\t3 - добавление элементов списка\n");
printf("\t4 - yдалить из списка все элементы, большие среднего арифметического\n");
printf("\t5 - выход\n");
printf("___________________________________________________________________________\n");
printf("Введите пункт меню: ");
scanf("%d",&enter);
return enter;
}
 
Spis* Create(Spis**begin,Spis**end)
{
    *begin=NULL;    
    Spis*t=(Spis*)malloc(sizeof(Spis));
    t->info=rand()%10;
    t->Prev=NULL;
    t->Next=NULL;
    *begin=*end=t;
    for(int i=0;i<10;i++)
    {
        t=(Spis*)malloc(sizeof(Spis));
        t->info=rand()%10;
        t->Prev=NULL;
        t->Next=*begin;
        (*begin)->Prev=t;       
        *begin=t;
    }
    printf("\n\tСписок создан\n\n");
    return t;
}
 
void View(Spis*begin)
{
    t=begin;
    while(t!=NULL)
    {
        printf("%d\n",t->info);
        t=t->Next;
    }
}
 
Spis* Add(Spis**begin,Spis**end)
{
    t=(Spis*)malloc(sizeof(Spis));
    printf("\n\n Введите значение для добавления: ");
    scanf("%d",&t->info); 
    t->Prev=NULL;
    t->Next=*begin;
    (*begin)->Prev=t;
    *begin=t;
    return t;
}
 
void Del(Spis**begin)
{
    Spis*t=*begin;
    while(*begin!=NULL)
    {   
        t=*begin;
        *begin=(*begin)->Next;      
        free(t);
    }
    puts("Память очищена");    
}
 
void DelMaxMid(Spis*begin)      //Удалить из списка все элементы, большие среднего арифметического
{
    Spis*key=NULL;
    int q_namber=0,summ=0;  //количество элементов  
    double s_ar;    //среднее арифметическое
    t=begin;
    while(t!=NULL)
    {
        q_namber++;
        summ+=t->info;
        t=t->Next;
    }
    s_ar=(double)summ/q_namber;
    printf("\nСреднее арифметическое: %0.2lf\n",s_ar);
    t=begin;
    while(t!=NULL)
    {
        t=begin;
        while(t!=NULL)      //иду по списку, пока не найду тот эл-т, который больше s_ar;  //среднее арифметическое
        {
            if(t->info>s_ar)
            {
                key=t;
                break;
            }
            t=t->Next;
        }
        if(key!=NULL)               //cамо удаление из списка
        {
            if(key==begin)          //если элемент расположен в начале
            {
                begin=begin->Next;
                begin->Prev=NULL;
            }
            else 
                {
                    if(key==end)    //если он в конце   
                    {
                        end=end->Prev;
                        end->Next=NULL;
                    }
                    else            //или в "теле"
                    {
                        (key->Prev)->Next=key->Next;
                        (key->Next)->Prev=key->Prev;
                    }
            }
            free(key);              //затираю память
        key=NULL;
        }   
        else 
            t=t->Next;
    }   
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2016, 20:03
Ответы с готовыми решениями:

Функция обнуляющая все элементы массива большие среднего арифметического
Написать функцию, которая в массиве вещественных чисел обнуляет все элементы, которые больше...

Все элементы таблицы, меньшие среднего арифметического ее значений, заменить на -1, большие - на 1
Помогите сделать 10 прог очень надо я в Си неочень шарю 1) Дано целочисленных прямоугольную...

Все элементы, большие среднего арифметического положительных чисел, заменить на первое положительное значение массива
Помогите: В массиве С все элементы, больше среднего арифметического положительных чисел, заменить...

Удалить из массива все элементы, меньшие по значению среднего арифметического
Задан вещественный массив размера N. Удалить из массива все элементы, меньшие по значению среднего...

10
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
05.02.2016, 10:24 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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
//Написать программу по созданию, просмотру, добавлению и решению поставленной задачи для двунаправленного линейного списка. 
//13. Создать список из случайных целых чисел. Удалить из списка все элементы, большие среднего арифметического.
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
#include<math.h>
struct Spis
{
int info;
Spis *Prev,*Next;
};
 
Spis*begin,*end,*t;
int menu();
void View(Spis*begin);  //просмотр списка
Spis* Create(Spis**begin,Spis**end);    //создание списка
Spis* Add(Spis**begin,Spis**end);   //добавление элемента
void Del(Spis**begin);  //удаление списка
void DelMaxMid(Spis*begin); //Удалить из списка все элементы, большие среднего арифметического
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int menu1;
 
do
{
menu1=menu();
switch(menu1)
{
case 1: //1 - создать список из случайных целых чисел
{
begin=Create(&begin,&end);
break;
}
 
case 2: //2 - просмотр списка
{
View(begin);
break;
}
case 3: //3 - добавление элементов списка
{
begin=Add(&begin,&end);
break;
}
case 4: //4 -Удалить из списка все элементы, большие среднего арифметического
{
DelMaxMid(begin);
break;
}
case 5:
{
Del(&begin);
if(begin==NULL)
puts("Проверено! ");
_getch();
}
 
}
 
 
}while(menu1!=5);
 
}
 
int menu()// меню по созданию, просмотру, добавлению и решению поставленной задачи
{
int enter;
printf("\t\tМЕНЮ ПРОГРАММЫ\n");
printf("\t1 - создать список из случайных целых чисел в диапазоне от 1 до 10\n");
printf("\t2 - просмотр списка\n");
printf("\t3 - добавление элементов списка\n");
printf("\t4 - yдалить из списка все элементы, большие среднего арифметического\n");
printf("\t5 - выход\n");
printf("___________________________________________________________________________\n");
printf("Введите пункт меню: ");
scanf("%d",&enter);
return enter;
}
 
Spis* Create(Spis**begin,Spis**end)
{
*begin=NULL;    
Spis*t=(Spis*)malloc(sizeof(Spis));
t->info=rand()%10;
t->Prev=NULL;
t->Next=NULL;
*begin=*end=t;
for(int i=0;i<10;i++)
{
t=(Spis*)malloc(sizeof(Spis));
t->info=rand()%10;
t->Prev=NULL;
t->Next=*begin;
(*begin)->Prev=t;   
*begin=t;
}
printf("\n\tСписок создан\n\n");
return t;
}
 
void View(Spis*begin)
{
t=begin;
while(t!=NULL)
{
printf("%d\n",t->info);
t=t->Next;
}
}
 
Spis* Add(Spis**begin,Spis**end)
{
t=(Spis*)malloc(sizeof(Spis));
printf("\n\n Введите значение для добавления: ");
scanf("%d",&t->info); 
t->Prev=NULL;
t->Next=*begin;
(*begin)->Prev=t;
*begin=t;
return t;
}
 
void Del(Spis**begin)
{
Spis*t=*begin;
while(*begin!=NULL)
{   
t=*begin;
*begin=(*begin)->Next;  
free(t);
}
puts("Память очищена");    
}
 
void DelMaxMid(Spis*begin)  //Удалить из списка все элементы, большие среднего арифметического
{
Spis*key=NULL;
int q_namber=0,summ=0;  //количество элементов 
double s_ar;    //среднее арифметическое
t=begin;
while(t!=NULL)
{
q_namber++;
summ+=t->info;
t=t->Next;
}
s_ar=(double)summ/q_namber;
printf("\nСреднее арифметическое: %0.2lf\n",s_ar);
t=begin;
while(t!=NULL)
{
t=begin;
while(t!=NULL)  //иду по списку, пока не найду тот эл-т, который больше s_ar;  //среднее арифметическое
{
if(t->info>s_ar)
{
key=t;
break;
}
t=t->Next;
}
if(key!=NULL)   //cамо удаление из списка
{
if(key==begin)  //если элемент расположен в начале
{
begin=begin->Next;
begin->Prev=NULL;
}
else 
{
if(key==end)    //если он в конце   
{
end=end->Prev;
end->Next=NULL;
}
else    //или в "теле"
{
(key->Prev)->Next=key->Next;
(key->Next)->Prev=key->Prev;
}
}
free(key);  //затираю память
key=NULL;
}   
else 
t=t->Next;
}   
}
0
zer0mail
05.02.2016, 10:27
  #3

Не по теме:

Я считаю так: если некто просит помощи и при этом не способен нормально отформатировать код, то этому некту помогать не стоит. :(

0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
05.02.2016, 10:28 4
Цитата Сообщение от Logovas Посмотреть сообщение
t=t->Next;
в какой строке?

сумбурно как-то все написано, имхо трудночитабельно (есть же стандартные приемы работы с памятью, файлами, списками и глаз уже такие конструкции сразу видит, а у вас сложнее), поэтому даже с отладчиком сами понять не можете что у вас происходит
0
19 / 16 / 10
Регистрация: 07.11.2015
Сообщений: 136
05.02.2016, 10:43  [ТС] 5
SergioO, функция по решению задачи начинается со строки 139.
while(t!=NULL) который выполняет 12-тую операцию вместо существующих 11 начинается со строки 154.
190 строка - самая последняя в цикле - передвигает указатель на следующий Next

Off: код вставил именно так, т.к. это мое первое сообщение на форуме. Исправлюсь.
Применил стандартный прием работы со списком из учебника, и даже с отладчиком не понимаю что у меня происходит, по этому и обратился на форум за помощью.
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.02.2016, 10:44 6
Вот что вам следует сделать:
1) отказаться от вложенных циклов, а сделать один
2) если при итерировании списка, вы нашли элемент, который нужно удалить, вы его удаляете, НО итератор списка должен после этого получить значение элемента, который оказался на месте УДАЛЕННОГО элемента. А если элемент удалять не надо, то итератор отправляйте в следующий.

Если аккуратно все сделаете, то должно работать, если других косяков нет.
1
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
05.02.2016, 16:17 7
Logovas, из книги пример говорите?
сначала я не мог main найти, потом его, мэйна конец.
читайте по Си Кэрниган, Ритчи "Язык программирования Си" 3-е издание
вы ж в Visual Studio работаете?

сделайте так

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
try {
//код вашей программы из main
}
catch( std::exception& e) {
        std::cout << " a standard exception was caught, with message '" << e.what() << "'\n";
    }
}
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.02.2016, 16:19 8
SergioO, в си нет исключений
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
05.02.2016, 16:26 9
есть лекция в на ютубе типа основы С++ 1 семестр, лекция то ли 10 или 11, там списки делают. лекции так себе, но на раз пойдет.
Р.Сэджвик "Фундаментальные алгоритмы на Си" том 1-4, стр 92 -109 тоже доступно про списки (базовые понятия)

в С++ есть в STL <list> или list.cpp для работы со списками можете туда заглянуть, но, если вы вообще понимаете о чем я.

Добавлено через 2 минуты
HighPredator, лоб не расшибите, пожалуйста, хоть он у вас и защищен
C++
все равно человек сисдит в VS и скорее всего просто консольное приложение "пилит", а если нет, то создаем новый консольный проект копируем код туда и делаем то, что я посоветовал, те обрабатываем исключение
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.02.2016, 16:32 10
Цитата Сообщение от SergioO Посмотреть сообщение
все равно человек сисдит в VS и скорее всего просто консольное приложение "пилит", а если нет, то создаем новый консольный проект копируем код туда и делаем то, что я посоветовал, те обрабатываем исключение
Человек в простом списке засыпался, а вы предлагаете ему исключения пообрабатывать? Омг.
1
19 / 16 / 10
Регистрация: 07.11.2015
Сообщений: 136
06.02.2016, 20:38  [ТС] 11
HighPredator, удалил вложенный цикл, немножко подправил. Все заработало. Спасибо помощь.

Кликните здесь для просмотра всего текста
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
//Написать программу по созданию, просмотру, добавлению и решению поставленной задачи для двунаправленного линейного списка. 
//13. Создать список из случайных целых чисел. Удалить из списка все элементы, большие среднего арифметического.
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
#include<math.h>
 
struct Spis
{
int info;
Spis *Prev,*Next;
};
 
Spis*begin,*end,*t;
int menu();
void View(Spis*begin);                  //просмотр списка
Spis* Create(Spis**begin,Spis**end);    //создание списка
Spis* Add(Spis**begin,Spis**end);       //добавление элемента
void Del(Spis**begin);                  //удаление списка
Spis* DelMaxSAr(Spis*begin);            //Удалить из списка все элементы, большие среднего арифметического
 
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int menu1;
 
do
{
    menu1=menu();
    switch(menu1)
    {
    case 1:         //1 - создать список из случайных целых чисел
        {
        begin=Create(&begin,&end);      
        break;
        }
 
    case 2:         //2 - просмотр списка
        {
        View(begin);
        t=begin;
        break;
        }
    case 3:         //3 - добавление элементов списка
        {
        begin=Add(&begin,&end);
        break;
        }
    case 4:         //4 -Удалить из списка все элементы, большие среднего арифметического
        {
            DelMaxSAr(begin);
            begin=t;
            break;
        }
    case 5:
        {
        Del(&begin);
        if(begin==NULL)
            puts("Проверено! ");
        _getch();
        }
    }
}while(menu1!=5);
}
 
int menu()// меню по созданию, просмотру, добавлению и решению поставленной задачи
{
    int enter;
printf("\t\tМЕНЮ ПРОГРАММЫ\n");
printf("\t1 - создать список из случайных целых чисел в диапазоне от 1 до 10\n");
printf("\t2 - просмотр списка\n");
printf("\t3 - добавление элементов списка\n");
printf("\t4 - yдалить из списка все элементы, большие среднего арифметического\n");
printf("\t5 - выход\n");
printf("___________________________________________________________________________\n");
printf("Введите пункт меню: ");
scanf("%d",&enter);
return enter;
}
 
Spis* Create(Spis**begin,Spis**end)
{
    *begin=NULL;    
    Spis*t=(Spis*)malloc(sizeof(Spis));
    t->info=rand()%10;
    t->Prev=NULL;
    t->Next=NULL;
    *begin=*end=t;
    for(int i=0;i<10;i++)
    {
        t=(Spis*)malloc(sizeof(Spis));
        t->info=rand()%10;
        t->Prev=NULL;
        t->Next=*begin;
        (*begin)->Prev=t;       
        *begin=t;
    }
    printf("\n\tСписок создан\n\n");
    return t;
}
 
void View(Spis*begin)
{
    t=begin;
    while(t!=NULL)
    {
        printf("%d  ",t->info);
        t=t->Next;
    }
    printf("\n ");
    t=begin;
 
}
 
Spis* Add(Spis**begin,Spis**end)
{
    t=(Spis*)malloc(sizeof(Spis));
    printf("\n\n Введите значение для добавления: ");
    scanf("%d",&t->info); 
    t->Prev=NULL;
    t->Next=*begin;
    (*begin)->Prev=t;
    *begin=t;
    return t;
}
 
void Del(Spis**begin)
{
    Spis*t=*begin;
    while(*begin!=NULL)
    {   
        t=*begin;
        *begin=(*begin)->Next;      
        free(t);
    }
    puts("Память очищена");    
}
 
Spis* DelMaxSAr(Spis*begin)     //Удалить из списка все элементы, большие среднего арифметического
{
    Spis*key=NULL;
    int q_namber=0,summ=0;  //количество элементов  
    double s_ar;    //среднее арифметическое
    t=begin;
    while(t!=NULL)
    {
        q_namber++;
        summ+=t->info;
        t=t->Next;
    }
    s_ar=(double)summ/q_namber;
    printf("\nСреднее арифметическое: %0.2lf\n",s_ar);
    t=begin;
    while(t!=NULL)
    {       
                //иду по списку, пока не найду тот эл-т, который больше s_ar;  //среднее арифметическое
 
        if(t->info>s_ar)            
            key=t;                      
        
        if(key!=NULL)               //cамо удаление из списка
        {
            if(key==begin)          //если элемент расположен в начале
            {
                begin=begin->Next;
                begin->Prev=NULL;
                t=begin;
            }
            else 
                {
                    if(key==end)    //если он в конце   
                    {
                        t=key->Prev;
                        end=end->Prev;
                        end->Next=NULL;
                    }
                    else            //или в "теле"
                    {
                        t=key->Next;
                        (key->Prev)->Next=key->Next;
                        (key->Next)->Prev=key->Prev;
                    }
            }
            free(key);              //затираю память
        key=NULL;
        }   
        else 
            t=t->Next;
    }       
    View(begin);
    t=begin;
    return t;
}
0
06.02.2016, 20:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2016, 20:38
Помогаю со студенческими работами здесь

Удалить из нее все элементы, значение которых больше среднего арифметического
Задание: Дана последовательность х1...х20. Удалить из нее все элементы, значение которых больше...

Удалить элементы, большие среднего арифметического в массиве
Удалить элементы, большие среднего арифметического в массиве. Тестовый массив 4 5 6 -4 -5 -12 -34...

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

Из файла вещественных чисел удалить элементы, большие среднего арифметического
Помогите пожалуйста решить данную задачку:...


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

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

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