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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
#1

Перегруз функции - C++

11.08.2009, 20:06. Просмотров 2091. Ответов 29

Вообще задание такое разработать функцию, вычисляющую максимальный элемент:
- в одномерном числовом массиве, состоящем из целых чисел;
- в одномерном числовом массиве, состоящим из вещественных чисел;
- в массиве строк (для этого массива функция должна находить строку с максимальной длиной). С помощью перегруза функции.
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
 
#pragma argsused
//---------------------------------------------------------------------------
int u1(int*op,int a,int max){
 ;
 for(int i=0;i<a;i++){
 if(op[i]>op[max])
   max=i;
 }
 return op[max];
 }
//---------------------------------------------------------------------------
float u2(float*op,int a,int max){
 for(int i=0;i<a;i++){
 if(op[i]>op[max])
    max=i;
 }
 return op[max];
 }
//---------------------------------------------------------------------------
char s3(char op[10], char a, char max){
 for(char i=0;i<a;i++){
 if(sizeof(op[i])>sizeof(op[max]))
    max=i;
 }
return op[max];
}
int main()
{int o,j;
 int*nt=new int[o];
 float*ft=new float[j];
 char l[10];
 cout<<"Vvedite razmer massiva"<<endl;
 cin>>o;
 cout<<"Vvedite razmer massiva"<<endl;
 cin>>j;
 cout<<"Vvedite zeloe chisla"<<endl;//для ввода в массив
  for(int i=0;i<o;i++){
   cin>>nt[i];
  }
 cout<<"Vvedite vehestvennor chisla"<<endl;//для ввода в массив
  for(int i=0;i<j;i++){
   cin>>ft[i];
  }
 cout<<"Vvedite stroku chisel"<<endl;//для ввода в массив строк
 for(int i=0;i<10;i++){
  cin>>(l);
  }
cout<<"Maxmal'nii element massiva zelih chisel= "<<u1(nt,o,0)<<endl;
 cout<<"Maxmal'nii element massiva vehestvennih chisel= "<<u2(ft,j,0)<<endl;
 cout<<"Maxmal'nii element massiva vehestvennih chisel= "<<s3(l,10,' ')<<endl;
        cin.get();
        cin.get();
        return 0;
вот сам текст программы, здесь у меня не работает только подсчет самой длинной строки, хотя если что-то не правильно кроме строк подскажите!!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2009, 20:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегруз функции (C++):

Stack Overflow, перегруз буфера - C++
Добрый день, знаком с перегрузом буфера в теории, хотел бы перейти к практике. Написал простенькую программу, int main(int argc) ...

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции - C++
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть значение, отталкиваясь от первой. Возможно...

Перегруз процессора - Процессоры
Всегда было интересно, какие последствия могут быть у перегруза процессора, т.е. когда он загружен на 100%, из моих знаний - процессор не...

адский перегруз ЦП - Процессоры
Поле Значение Компьютер Тип компьютера ACPI компьютер на базе x86 Операционная система Microsoft Windows 7 Professional Пакет...

Перегруз трафика, где искать - Безопасность
(Другой офис, другой комп) Превышение трафика, логи дают три ip адреса pppoe.spdop.ru фильмы не смотрели, обновления не качали. Все...

Перенос сайта, перегруз шлюза - Администрирование Windows
По работе дали такие задания: 1)Нужно скопировать сайт с домена .com на домен .ru вот сайт http://www.konversia.com/ вобщем, как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.08.2009, 22:16 #16
Цитата Сообщение от pigah Посмотреть сообщение
иначе начнутся проблемы
Со здоровьем?
0
pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
11.08.2009, 22:28 #17
Цитата Сообщение от Gravity Посмотреть сообщение
Со здоровьем?
с компьютером ты память занял и не освободил)
0
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.08.2009, 22:34 #18
Цитата Сообщение от pigah Посмотреть сообщение
с компьютером ты память занял и не освободил)
После выхода из программы, занятая память автоматически обозначается как свободная и становится доступной для других приложений, так что ничего страшного в этом нет. Но с т.з. хорошего тона программирования, оно конечно верно явно освобождать память.
0
M128K145
11.08.2009, 22:56
  #19

Не по теме:

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

0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.08.2009, 23:04 #20
а я бы не усложнял. сигнатуру сделал бы максимально похожей, т.к. отсутствие концепции - хуже неудачной концепции.
итак, наши перегруженные ф-ии будут получать указатель на первый элемент массива и длину его, и возвращать индекс элемента массива с максимальным значением, или -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
/////////////////
int getMax (const int *pArg, int size){
  int max = MIN_INT;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    if (*(pArg+i) > max){
      max =  *(pArg+i);
      iMax = i;
    }
  }
  return i;
}
 
/////////////////
int getMax (const double *pArg, int size){
  double max = MIN_DOUBLE;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    if (*(pArg+i) > max){
      max =  *(pArg+i);
      iMax = i;
    }
  }
  return i;
}
 
/////////////////
int getMax (const char **pArg, int size){
  int maxSize = 0;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    int sz = ::strlen (*(pArg+i));
    if (sz > maxSize){
      maxSize = sz;
      iMax = i;
    }
  }
  return i;
}
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
11.08.2009, 23:25 #21
ну ну)) с шаблонами тут не получится!))

Не по теме:

точнее получится, но тогда нужно создавать чвой класс строки с перегруженном оператором сравнения



Добавлено через 1 минуту 32 секунды
а вот так делать - нехорошо
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
12.08.2009, 00:08 #22
виноват: во всех трех ф-ях:

return iMax;
а не:
return i;
0
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
12.08.2009, 21:25  [ТС] #23
novi4ok,
Цитата Сообщение от novi4ok Посмотреть сообщение
int sz = ::strlen (*(pArg+i));
подскажи как эту строку сделать по проще или вообще убрать заменив на более простую и еще как теперь обращаться к этим функциям правильно.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
13.08.2009, 00:17 #24
Цитата Сообщение от crashc Посмотреть сообщение
novi4ok,

подскажи как эту строку сделать по проще или вообще убрать заменив на более простую и еще как теперь обращаться к этим функциям правильно.
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
#define MIN_DOUBLE -10e88
#define MIN_INT -0x7ffffffe
 
/////////////////
int getMax (const int *pArg, int size){
  int max = MIN_INT;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    if (*(pArg+i) > max){
      max =  *(pArg+i);
      iMax = i;
    }
  }
  return iMax;
}
 
/////////////////
int getMax (const double *pArg, int size){
  double max = MIN_DOUBLE;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    if (*(pArg+i) > max){
      max =  *(pArg+i);
      iMax = i;
    }
  }
  return iMax;
}
 
/////////////////
int getMax (const char **pArg, int size){
  int maxSize = 0;
  int iMax = -1;
  for (int i = 0; i < size; i++){
    int sz = ::strlen (*(pArg+i));
    if (sz > maxSize){
      maxSize = sz;
      iMax = i;
    }
  }
  return iMax;
}
 
 
//////////////////////////
//
void testFunc() {
    int intArray [10] = { 0,1,20,-200,3,5,6,7,2,-2};
    double dArray [10] = { 0,1,20,-200,3,5,6,7,2,-2};// for simplicity
    char *chArray [3] = { "asdfg", ";lksjd;flkajsd;flkja", "aaa" };
    int maxInt = 0;
    double maxDouble = 0;
    char *pMaxString = NULL;
 
    int indexOfMax = getMax (intArray, 10);
    if (indexOfMax != -1){
        maxInt = *(intArray+indexOfMax);// intArray[indexOfMax] если удобнее
    }
    indexOfMax = getMax (dArray, 10);
    if (indexOfMax != -1){
        maxDouble = *(dArray+indexOfMax);// dArray[indexOfMax] если удобнее
    }
    indexOfMax = getMax ((const char**)chArray, 3);
    if (indexOfMax != -1){
        pMaxString = *(chArray+indexOfMax);// chArray[indexOfMax] если удобнее
    }
}
MIN_DOUBLE и MIN_INT я взял с потолка. уточните сами какие значения правильные.

вместо
C++
1
int sz = ::strlen (*(pArg+i));
можете записать так:
C++
1
2
char *pChar = pArg+i;
int sz = ::strlen (pChar);
вам в функцию фактически передали указатель на первый указатель массива, каждый из которых указывает на строку. или другими словами "указатель на указатель на char". pArg указывает на первый указатель на строку, *pArg - на первую строку (ее первый символ), (pArg+i) - на i-тый указатель из этого массива указателей, *(pArg+i) - это указатель на первый символ i-той строки.
запутал окончательно? это хорошо
1
Alexen
5 / 5 / 0
Регистрация: 14.11.2008
Сообщений: 77
13.08.2009, 15:44 #25
MIN_DOUBLE и MIN_INT
Они тебе вообще не нужны просто присвой первые значения массивов и потом с ними сравнивай.
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
13.08.2009, 16:52 #26
Цитата Сообщение от Alexen Посмотреть сообщение
MIN_DOUBLE и MIN_INT
Они тебе вообще не нужны просто присвой первые значения массивов и потом с ними сравнивай.
логично
1
-=ЮрА=-
Заблокирован
Автор FAQ
13.08.2009, 17:46 #27
crashc, перегрузка функций подразумевает использование функций с одинаковым именем, при этом аргументы функции различны, тогда это действительно перегрузка

Вот что у меня получилось по этой проблеме (кстати использовал свои же материалы http://www.cyberforum.ru/cpp-beginne...ost237890.html)
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
#include <windows.h>
#include <shlobj.h>//Подключаем SHL Dialog - диалог выбора файла или каталога
#include <stdio.h>
 
//SHL Dialog, использую для считывания строк из файла, 
//удобней ввести строки в txt-шнике чем каждій раз их вбивать в консоли
//под строкой понимаю текст между символами '\n' [строка] '\n'
 
//функцию, вычисляющую максимальный элемент :
 
//- в одномерном числовом массиве, состоящем из целых чисел;
int findmax(int nCount, int * mass);
//- в одномерном числовом массиве, состоящим из вещественных чисел;
float findmax(int nCount, float * mass);
//- в массиве строк (для этого массива функция должна находить строку с максимальной длиной).
int findmax(int nCount, char ** mass);
 
LPTSTR SelectFile();//Выбор файла с текстом
 
//Подсчёт числа строк в текстовом блоке
//под строкой понимаю текст между символами '\n' [строка] '\n'
//iPos - содержит индексы символов '\n' в блоке str
int GetNumStrings(LPTSTR str);
 
 
int * imass = (int *)malloc(sizeof(int));
float * fmass = (float *)malloc(sizeof(float));
 
char * str = (char *)malloc(sizeof(char));
int * iPos = (int *)malloc(sizeof(int));
 
void main()
{
    FILE *f;char ** smass;
    printf("Enter num elements of int vector\r\n");
    int iCount,i;scanf("%d",&iCount);
    if(0 < iCount)
    {
        imass = (int *)realloc((void *)imass,iCount*sizeof(int));
        for(i = 0; i < iCount; i++)
        {
            printf("mass[%d] : ",i + 1);
            scanf("%d",&imass[i]);
        }
    }
    printf("Enter num elements of float vector\r\n");
    int fCount;scanf("%d",&fCount);
    if(0 < fCount)
    {
        fmass = (float *)realloc((void *)fmass,fCount*sizeof(float));
        for(i = 0; i < fCount; i++)
        {
            printf("mass[%d] : ",i + 1);
            scanf("%f",&fmass[i]);
        }
    }
    int nStrings, sLen;
    char sPath[MAX_PATH];sPath[0] = '\0';
    if(sprintf(sPath,SelectFile()))
    {
        if((f = fopen(sPath,"rb+")))
        {
            fseek(f,0,SEEK_END);
            sLen = ftell(f);
            fseek(f,0,SEEK_SET);
            str = (char *)realloc(str,sLen);
            fread(str,1,sLen,f);
            str[sLen - 1] = '\0';
            fclose(f);
            nStrings = GetNumStrings(str);
            smass = new char * [nStrings];
            for(int i = nStrings - 1; 0 <= i; i--)
            {
                sLen = strlen((LPCTSTR)(str + (iPos[i] + 1)));
                //Копируем строки из блока str в массив smass
                smass[nStrings - (i + 1)] = (char *)malloc(sLen*sizeof(int));
                strcpy(smass[nStrings - (i + 1)], str + (iPos[i] + 1));
                str[iPos[i]] = '\0';
            }
            iPos = (int *)realloc((void *)iPos,sizeof(int));
            if(str)
                str = (char *)realloc(str,sizeof(char));
        }
    }
    int iMAX = -1;
    if(0 < iCount)
        iMAX = findmax(iCount, imass);
    else
        iCount = -1;
    
    float fMAX = -1;
    if(0 < fCount)
        fMAX = findmax(fCount, fmass);
    else
        fCount = -1;
    
    int sMAX_INDEX = -1;
    if(0 < nStrings)
        sMAX_INDEX = findmax(nStrings, smass); 
 
    printf("\r\nMaximal element in int vecor : ");
    if(-1 < iCount)
        printf("%d",iMAX);
    else
        printf("Cann't be computed!");
 
    printf("\r\nMaximal element in float vecor : ");
    if(-1 < fCount)
        printf("%f",fMAX);
    else
        printf("Cann't be computed!");
 
    printf("\r\nMaximal element in string vecor : ");
    if(-1 < sMAX_INDEX)
        printf("%s",smass[sMAX_INDEX]);
    else
        printf("Cann't be computed!");
 
    //Чистим память
    imass = (int *)realloc((void *)imass,sizeof(int));
    fmass = (float *)realloc((void *)fmass,sizeof(float));
    for(i = nStrings - 1; 0 <= i; i--)
        free(smass[i]);
    printf("\r\nEnter NUM1 to enter new massivs\r\n");
    scanf("%d",&i);
    if(i == 1)
        main();
}
 
int findmax(int nCount, int * mass)
{
    int RetVal = mass[0];
    for(int i = 1; i < nCount; i++)
    {
        if(RetVal < mass[i])
            RetVal = mass[i];
    }
    return RetVal;
}
 
float findmax(int nCount, float * mass)
{
    float RetVal = mass[0];
    for(int i = 1; i < nCount; i++)
    {
        if(RetVal < mass[i])
            RetVal = mass[i];
    }
    return RetVal;
}
 
int findmax(int nCount, char ** mass)
{
    int RetVal = 0,sLen;
    for(int i = 0; i < nCount; i++)
    {
        sLen = strlen(mass[RetVal]);
        if(sLen < strlen(mass[i]))
            RetVal = i;
    }
    return RetVal;//Здесь возвращаем индекс строки а не саму строку!!!
}
 
LPTSTR SelectFile()
{
    char sPath[MAX_PATH];sPath[0] = '\0';
    LPCITEMIDLIST lpItemDList;
    BROWSEINFO bi = {NULL, NULL, sPath,
       "Выберите файл для обработки",
        BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES,
        NULL,
        NULL,
        0
    };
    if((lpItemDList=SHBrowseForFolder(&bi)))
    {
        if(SHGetPathFromIDList(lpItemDList, sPath))
            GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath));
    }
    return &sPath[0];
}
 
int GetNumStrings(LPTSTR str)
{
    int RetVal = 0;
    //Вдруг вначале текста идут символы новой строки
    while(str[0] == '\n')
        str++;
    char * chBuf = strchr(str,'\n');
    //На случай если в файле всего 1 строка
    if(!chBuf && strlen(str))
    {
        iPos[RetVal] = 0;
        RetVal++;
    }
    while(chBuf)
    {
        iPos[RetVal] = strlen(str) - strlen(chBuf);
        RetVal++;
        chBuf++;
        if(chBuf)
            chBuf = strchr(chBuf,'\n');
        iPos = (int *)realloc((void *)iPos,sizeof(int)*(RetVal + 1));
    }
    return RetVal;
}
0
Миниатюры
Перегруз функции   Перегруз функции  
Вложения
Тип файла: txt text_block.txt (101 байт, 23 просмотров)
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
11.09.2009, 14:22  [ТС] #28
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 32658858. Read of address 66647361'. Process stopped. Use Step or Run to continue.
При запуске программы стала выходить такая ошибка. скажите почему? вроде всё сделал по аналогии с вашим примером novi4ok.
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
int u1(const int*op,int a){
 int max=0;
 int iMx;
 for(int i=0;i<a;i++){
 if(*(op+i)>max){
   max=*(op+i);
   iMx=i+1;
   }
 }
 return iMx;
 }
//---------------------------------------------------------------------------
float u1(const float*op,int a){
 float max=0;
 int iMx=0;
 for(int i=0;i<a;i++){
 if(*(op+i)>max){
    max=*(op+i);
    iMx=i+1;
    }
 }
 return iMx;
 
 }
//---------------------------------------------------------------------------
char u1(const char**op[10], int a){
 int maxSZ=0;
 int iMx=-1;
 for(char i=0;i<a;i++){
  int sz=::strlen(**(op+i));
   if(sz>maxSZ){
    maxSZ=sz;
    iMx=i+1;
   }
  }
return iMx;
}
int main(){
 int nt[10];
 float ft[10];
 char*l[3] = {"asdfg",";lksjd;flkajsd;flkja","aaa"};
 cout<<"Vvedite zeloe chisla"<<endl;//äëÿ ââîäГ* Гў Г¬Г*Г±Г±ГЁГў
  for(int i=0;i<10;i++){
   cin>>nt[i];
  }
 cout<<"Vvedite vehestvennor chisla"<<endl;//äëÿ ââîäГ* Гў Г¬Г*Г±Г±ГЁГў
  for(int i=0;i<10;i++){
   cin>>ft[i];
  } 
cout<<"Maxmal'nii element massiva zelih chisel= "<<u1(nt,10)<<endl;
 cout<<"Maxmal'nii element massiva vehestvennih chisel= "<<u1(ft,10)<<endl;
 cout<<"Maxmal'nii element massiva vehestvennih chisel= "<<u1((const char***)l,3)<<endl;
        cin.get();
        cin.get();
 delete nt;
 delete ft;
        return 0;
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
11.09.2009, 15:55 #29
C++
1
2
3
4
5
 int nt[10];
 float ft[10];
//---
 delete nt;
 delete ft;
0
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
11.09.2009, 20:05  [ТС] #30
Да эту ошибку я нашел но ошибка то осталась!!!

Добавлено через 2 минуты
Ошибка осталась
Цитата Сообщение от crashc Посмотреть сообщение
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 32658858. Read of address 66647361'. Process stopped. Use Step or Run to continue.
Добавлено через 15 минут
я думаю что ошибка из-за вызова функции u1 для строки.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2009, 20:05
Привет! Вот еще темы с ответами:

Перегруз на FloatToChar; Неупорядочный вывод массива - Delphi
Нужно вывести 2х строковый массив (в форму) 1. Самый простой способ это вывести массив А на Lable: for i2:=1 to 2 do begin ...

Lenovo G560 i3-350m код 17 и перегруз - Ремонт ноутбуков
Доброго всем дня и с Праздником Великой Победы! Lenovo G560 LA-5257P Rev 1.0 проц. i3-350m видео: интегрированное GMA HD мульт...

Перегруз и тормоза на процессоре Intel(R) Core(TM) i5 CPU M430 @ 2.27GHz - Процессоры
Помогите пожалуйста решить проблему с перегрузкой процессора: Процессор: Intel(R) Core(TM) i5 CPU M430 @ 2.27GHz Винда 7 При запуске...

Очень много процессов в диспетчере + рекламные вкладки в хроме и опере. Перегруз системы - Удаление вирусов
Добрый день! Вирусы с переносного жд, были занесены на ПК. Перегрузка системы 90-100%, свободной памяти остается 0-5 мб. Много...


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

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

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