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

Работа с текстовыми файлами и строками - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Iska
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 16
07.10.2011, 00:14     Работа с текстовыми файлами и строками #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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
const int n=20;
const int m=20;
main()
  {
    char f1[50],f2[50],fout[50];
    char a[n],b[n];
    int i,j;
    char mas[n];
    char *ps[n][n];
    char bal;
    
    // Ââîä èìåГ*ГЁ ïåðâîãî ГґГ*éëГ*
      printf("Enter name of file F1 \n");
      scanf("%s",f1);
      FILE *ff1;
      ff1=fopen (f1,"r");
    // Ââîä èìåГ*ГЁ âòîðîãî ГґГ*éëГ*
      printf("Enter name of file F2 \n");
      scanf("%s",f2);
      FILE *ff2;
      ff2=fopen (f2,"r"); 
      
    // ÏðîâåðêГ* Г*Г* ñóùåñòâîâГ*Г*ГЁГҐ ГґГ*éëГ*
      if (ff1==NULL || ff2==NULL)  
        { 
         printf("File not found");
         getch();
         return 1; // Âûõîä ГЇГ® îøèáêå             
         }     
         
    // Ââîä èìåГ*ГЁ âûõîäГ*îãî ГґГ*éëГ*
      printf("Enter name of file Fout \n");
      scanf("%s",fout);
      FILE *fo;
      fo=fopen (fout,"w");     
      while(!feof(ff1)) // ïîêГ* Г*ГҐ ГЄГ®Г*ГҐГ¶ ГґГ*éëîâ     
               {
                fgets(a,n,ff1);
                  while(!feof(ff2))
                     fgets(b,n,ff2);
                     if (strcmp(a,b)>0)
                       {               
                        fprintf(fo,"%s\n",b);
                        }
                     if (strcmp(a,b)<0) //Г±Г°Г*ГўГ*ГҐГ*ГЁГҐ ñòðîê           
                       {
                        fprintf(fo,"%s\n",a);
                        i++;
             
    fclose(ff1);
    fclose(ff2);
    fclose(fo);
    //return 0;
    getch();   
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2011, 00:14     Работа с текстовыми файлами и строками
Посмотрите здесь:

работа с текстовыми файлами C++
Работа с текстовыми файлами в С++ C++
Работа с текстовыми файлами C++
Работа с текстовыми файлами C++
C++ Работа с текстовыми файлами в С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 11:11     Работа с текстовыми файлами и строками #21
Цитата Сообщение от Iska Посмотреть сообщение
Упорядочиваю строки. Ваш код попробовала под свои файлы, результат выложила в предпоследнем посте.
Все работает. Последняя строчка только не переносилась на новую строку, а прилеплялась Вот так попробуйте:

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
#include<stdio.h>
#include<string.h>
#define N 1024
 
int Strcmp(char *s0, char *t0)
{
   char s[N], t[N];
   int i;
   strcpy(s, s0);
   strcpy(t, t0);
   for(i = 0; s[i] = tolower(s[i]); i++)
      ;
   for(i = 0; t[i] = tolower(t[i]); i++)
      ;
   return strcmp(s, t);
}
 
int Sort(char *fname1, char *fname2, char *fname3)
{
   FILE *f, *g, *h;
   char s0[N], s[N], t0[N], t[N];
   char *sflag, *tflag;
   f = fopen(fname1, "r");
   g = fopen(fname2, "r");
   h = fopen(fname3, "w");
   if (!f || !g || !h)
   {
       fclose(f); fclose(g); fclose(h);
       return 1;
   }
   sflag = fgets(s, N, f);
   tflag = fgets(t, N, g);
   while (sflag && tflag)
   {
       if (Strcmp(s, t) < 0)
       {
           fprintf(h, "%s\n", s);
           sflag = fgets(s, N, f);
       }
       else
       {
           fprintf(h, "%s\n", t);
           tflag = fgets(t, N, g);
       }
   }
   if (sflag)
      do
          fprintf(h, "%s\n", s);
      while(fgets(s, N, f));
   else
      do
          fprintf(h, "%s\n", t);
      while(fgets(t, N, g));
 
   fclose(f); fclose(g); fclose(h);
   return 0;
}
 
int main()
{
   printf("%d\n", Sort("c:\\a.txt", "c:\\b.txt", "c:\\c.txt"));
   getchar();
   return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.10.2011, 11:13     Работа с текстовыми файлами и строками #22
Цитата Сообщение от Thinker Посмотреть сообщение
Без учета регистра:
В обоих вариантах есть косяк, кажется. Если строки в обоих файлах совпадают, то только одна из них добавится.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 11:15     Работа с текстовыми файлами и строками #23
Цитата Сообщение от Deviaphan Посмотреть сообщение
В обоих вариантах есть косяк, кажется. Если строки в обоих файлах совпадают, то только одна из них добавится.
Вам кажется, все учтено
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.10.2011, 11:18     Работа с текстовыми файлами и строками #24
Хорошо.) Просто сравнение if-else было похоже именно то, что я подумал.)
Сейчас уже понял, что добавляются же все строки и одинаковые тоже добавятся чуть позже. Тупанул.
Iska
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 16
07.10.2011, 11:21  [ТС]     Работа с текстовыми файлами и строками #25
Выдается нолик, создается файлик выходной, в нем след. данные:

a b c d e f g

b c d e f g h

d b c d e f g



с b n k o p

f b j j k l

Не пойму в чем проблема( меняю только имена файлов. А у Вас на каких строках работает? из чего у Вас исходные файлы состоят?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 11:42     Работа с текстовыми файлами и строками #26
Вот так красивее строчки выводит:

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
#include<stdio.h>
#include<string.h>
#define N 1024
 
int Strcmp(char *s0, char *t0)
{
   char s[N], t[N];
   int i;
   strcpy(s, s0);
   strcpy(t, t0);
   for(i = 0; s[i] = tolower(s[i]); i++)
      ;
   if (s0[i-1] == '\n')
      s0[i-1] = '\0';
   for(i = 0; t[i] = tolower(t[i]); i++)
      ;
   if (t0[i-1] == '\n')
      t0[i-1] = '\0';
   return strcmp(s, t);
}
 
int Sort(char *fname1, char *fname2, char *fname3)
{
   FILE *f, *g, *h;
   char s[N], t[N];
   char *sflag, *tflag;
   f = fopen(fname1, "r");
   g = fopen(fname2, "r");
   h = fopen(fname3, "w");
   if (!f || !g || !h)
   {
       fclose(f); fclose(g); fclose(h);
       return 1;
   }
   sflag = fgets(s, N, f);
   tflag = fgets(t, N, g);
   while (sflag && tflag)
   {
       if (Strcmp(s, t) < 0)
       {
           fputs(s, h);
           fputc('\n', h);
           sflag = fgets(s, N, f);
       }
       else
       {
           fputs(t, h);
           fputc('\n', h);
           tflag = fgets(t, N, g);
       }
   }
   if (sflag)
      do
      {
           fputs(s, h);
           fputc('\n', h);
      }
      while(fgets(s, N, f));
   else
      do
      {
           fputs(t, h);
           fputc('\n', h);
      }
      while(fgets(t, N, g));
 
   fclose(f); fclose(g); fclose(h);
   return 0;
}
 
int main()
{
   printf("%d\n", Sort("c:\\a.txt", "c:\\b.txt", "c:\\c.txt"));
   getchar();
   return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от Iska Посмотреть сообщение
Выдается нолик, создается файлик выходной, в нем след. данные:

a b c d e f g

b c d e f g h

d b c d e f g



с b n k o p

f b j j k l

Не пойму в чем проблема( меняю только имена файлов. А у Вас на каких строках работает? из чего у Вас исходные файлы состоят?
На ваших работает и на любых других. Нолик в консоли выводит как результат успешной работы. а результат в файле c:\\c.txt:
a b c d e f g
b c d e f g h
c b n k o p
d b c d e f g
f b j j k l


Iska, ну как, разобрались? Используйте программу из данного поста, она более отшлифована
Iska
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 16
07.10.2011, 11:50  [ТС]     Работа с текстовыми файлами и строками #27
Вы меня извините за назойливость, но все же в результ файле у меня все тоже самое.
Прописываю пути в разные места и все равно все одно и тоже.
Я работаю в Dev-C++ - может быть дело в этом?
Я уже все пересмотрела - не меняются местами сроки и все тут.
Результ файл создается, информация туда пишется, но такое ощущение, что просто из файлов, обходя сортировку.
Для функции tolower подключила модуль #include <ctype.h>.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 11:55     Работа с текстовыми файлами и строками #28
Цитата Сообщение от Iska Посмотреть сообщение
но все же в результ файле у меня все тоже самое.
Не может быть, все проверил, теоретически обосновал, у меня все правильно выдает. Попробуйте сначала с выводом на экран (напишите что на экране будет):

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
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 1024
 
int Strcmp(char *s0, char *t0)
{
   char s[N], t[N];
   int i;
   strcpy(s, s0);
   strcpy(t, t0);
   for(i = 0; s[i] = tolower(s[i]); i++)
      ;
   if (s0[i-1] == '\n')
      s0[i-1] = '\0';
   for(i = 0; t[i] = tolower(t[i]); i++)
      ;
   if (t0[i-1] == '\n')
      t0[i-1] = '\0';
   return strcmp(s, t);
}
 
int Sort(char *fname1, char *fname2, char *fname3)
{
   FILE *f, *g, *h;
   char s0[N], s[N], t0[N], t[N];
   char *sflag, *tflag;
   f = fopen(fname1, "r");
   g = fopen(fname2, "r");
   h = fopen(fname3, "w");
   if (!f || !g || !h)
   {
       fclose(f); fclose(g); fclose(h);
       return 1;
   }
   sflag = fgets(s, N, f);
   tflag = fgets(t, N, g);
   while (sflag && tflag)
   {
       if (Strcmp(s, t) < 0)
       {
           fputs(s, h);
           fputc('\n', h);
           puts(s);
           sflag = fgets(s, N, f);
       }
       else
       {
           fputs(t, h);
           fputc('\n', h);
           puts(t);
           tflag = fgets(t, N, g);
       }
   }
   if (sflag)
      do
      {
           fputs(s, h);
           fputc('\n', h);
           puts(s);
      }
      while(fgets(s, N, f));
   else
      do
      {
           fputs(t, h);
           fputc('\n', h);
           puts(t);
      }
      while(fgets(t, N, g));
 
   fclose(f); fclose(g); fclose(h);
   return 0;
}
 
int main()
{
   printf("%d\n", Sort("c:\\a.txt", "c:\\b.txt", "c:\\c.txt"));
   getchar();
   return 0;
}
Iska
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 16
07.10.2011, 12:03  [ТС]     Работа с текстовыми файлами и строками #29
СПАСИБО ОГРОМНОЕ!
Сейчас все заработало.
Дело в том, что при сравнении двух строк строки д.б. одной длинны. У меня строка одна во втором файле была короче всех остальных.
При выводе строки сейчас переставляются, но между предпоследней строкой и последней стоит пустая строка, но с этим уж я сама попробую разобраться.

Еще раз огромное спасибо!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:09     Работа с текстовыми файлами и строками #30
Цитата Сообщение от Iska Посмотреть сообщение
Дело в том, что при сравнении двух строк строки д.б. одной длинны.
Ну, смотрите сами, программа работает со строками произвольной длины.

Добавлено через 1 минуту
Цитата Сообщение от Iska Посмотреть сообщение
но между предпоследней строкой и последней стоит пустая строка
в последней версии программы все учтено и красиво выводится.
Iska
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 16
07.10.2011, 12:09  [ТС]     Работа с текстовыми файлами и строками #31
Цитата Сообщение от Thinker Посмотреть сообщение
Ну, смотрите сами, программа работает со строками произвольной длины.
Попробую поэкспериментировать.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 12:12     Работа с текстовыми файлами и строками #32
Цитата Сообщение от Iska Посмотреть сообщение
Попробую поэкспериментировать.
Напишите о результатах, очень интересно. Только учтите, если вы в программе что-то меняете, то это на вашей совести
-=ЮрА=-
Заблокирован
Автор FAQ
07.10.2011, 12:37     Работа с текстовыми файлами и строками #33
Цитата Сообщение от Iska Посмотреть сообщение
Очень прошу вашей помощи. Не один день сижу над данной задачей, переделала кучу вариантов - выход не верно ((
Задание: дано два текстовых упорядоченных файла. Необходимо слить их в один, сохранив лексикографическую упорядоченность.
- Я допаял - программа работает с файлами разной длинны и сортирует строки в исходном файле в поредяке следования в алфавите их первых букв
Код Си здесь
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
#include <stdio.h>  //i/o
#include <string.h> //strtok
#include <stdlib.h> //malloc
#include <conio.h>
 
int main()
{
    FILE * f;//Для организации файловых потоков
    char * sBuf1 = NULL;//указатель на текстовый блок с данными из 1-го файла
    char * sBuf2 = NULL;//указатель на текстовый блок с данными из 2-го файла
    long sLen1;//длина текстового блока с данными из 1-го файла
    long sLen2;//длина текстового блока с данными из 2-го файла
    long bLen1;//длина буфера строки из 1-го файла
    long bLen2;//длина буфера строки из 2-го файла
    char * str1, *str2, *str;//Буфферные переменные
    
    //Считываем в буффер 1-ый файл
    if(!(f = fopen("file1.txt","rb+")))
        printf("Error open file1.txt\r\n");
    else
    {
        //Получаем длинну 1-го файла
        fseek(f,0,SEEK_END);
        sLen1 = ftell(f);
        fseek(f,0,SEEK_SET);
        if(!(sBuf1 = (char *)malloc(sLen1 + 1)))
            printf("Error allocation memmory for sBuf1\r\n");
        else
        {
            fread(sBuf1,sLen1,1,f);
            sBuf1[sLen1] = '\0';//Убираем мусор вконце строки
            //при таком выделении памяти malloc он всегда есть :(
        }
        fclose(f);
    }
    //Считываем в буффер 2-ой файл
    if(!(f = fopen("file2.txt","rb+")))
        printf("Error open file2.txt\r\n");
    else
    {
        //Получаем длинну 1-го файла
        fseek(f,0,SEEK_END);
        sLen2 = ftell(f);
        fseek(f,0,SEEK_SET);
        if(!(sBuf2 = (char *)malloc(sLen2 + 1)))
            printf("Error allocation memmory for sBuf1\r\n");
        else
        {
            fread(sBuf2,sLen2,1,f);
            sBuf2[sLen2] = '\0';//Убираем мусор вконце строки
            //при таком выделении памяти malloc он всегда есть :(
        }
        fclose(f);
    }
    if(!(f = fopen("file12.txt","w")))
        printf("Error creation file12.txt\r\n");
    else
    {
        //Если всё считали работаем с текстовыми блоками фафлов
        if(sBuf1 != NULL && sBuf2 != NULL)
        {
            printf("\tStrings from files\r\n");
            //Разбиваем текстовые блоки не строки
            str1 = strchr(sBuf1,'\n');
            str2 = strchr(sBuf2,'\n');
            while(str1 != NULL && str2 != NULL)
            {
                //Каждый раз подрезаем текстовый блок
                //по первому найденному '\n'
                sBuf1[bLen1 = (strlen(sBuf1) - strlen(str1) - 1)] = '\0';
                sBuf2[bLen2 = (strlen(sBuf2) - strlen(str2) - 1)] = '\0';
                if(sBuf1[0] < sBuf2[0])
                {
                    printf("%s\n%s\n",sBuf1,sBuf2);
                    fprintf(f,"%s\n%s\n",sBuf1,sBuf2);
                }
                else
                {
                    printf("%s\n%s\n",sBuf2,sBuf1);
                    fprintf(f,"%s\n%s\n",sBuf2,sBuf1);
                }
                //Сдвигаем указатель в текстовых блоках
                //в позицию найденного '\n'
                sBuf1 += bLen1 + 2;
                sBuf2 += bLen2 + 2;
                str1 = strchr(sBuf1 + bLen1 + 1,'\n');
                str2 = strchr(sBuf2 + bLen2 + 1,'\n');
            }
            //В файлах может быть разное число строк
            //поэтому после while обязательно либо один 
            //из указателей str1(2) == NULL! либо
            //NULL равны оба
            //Если в файле для которого str == NULL
            //запишем его содержимое
            //не забываем также что строка str != NULL
            //содержит 1-м символом '\n'
            if(sBuf1 != NULL && sBuf2 != NULL)
            {
                if(str1)//Значит в sBuf2 - последня стркоа а в str1
                {       //очередная строка из sBuf1
                    if(str1[0] < sBuf2[0])
                    {
                        printf("%s\n%s",str1 + 1,sBuf2);
                        fprintf(f,"%s\n%s",str1 + 1,sBuf2);
                    }
                    else
                    {
                        printf("%s\n%s",sBuf2,str1 + 1);
                        fprintf(f,"%s\n%s",sBuf2,str1 + 1);
                    }
                    //Отвожу указатель вначало текстового блока sBuf2
                    sBuf2 += strlen(sBuf2);
                    sBuf2 -= sLen2;//Потом можно будет free применить
                }
                else//Наоборот осталась последняя стркоа в 1-м файле,
                    //а вот 2-м ещё строки
                {
                    if(str2[0] < sBuf1[0])
                    {
                        printf("%s\n%s",str2 + 1,sBuf1);
                        fprintf(f,"%s\n%s",str2 + 1,sBuf1);
                    }
                    else
                    {
                        printf("%s\n%s",sBuf1,str2 + 1);
                        fprintf(f,"%s\n%s",sBuf1,str2 + 1);
                    }
                    //Отвожу указатель вначало текстового блока sBuf1
                    sBuf1 += strlen(sBuf1);
                    sBuf1 -= sLen1;//Потом можно будет free применить
                }
            }
 
            //Далее запишем содержимое оставшегося файла
            if(str1)
                str = str1;
            else
                str = str2;
            printf("%s",str);
            fprintf(f,"%s",str);
            printf("\r\nWriting in file12.txt complete\r\n");
            
        }
        fclose(f);
    }
    printf("Press any key to continue\r\n");
    getch();
    //PS:Чистить память после sBuf1(2) не обязательно
    //мы всё равно программму завершаем и память под
    //sBuf1(2) уже сама ОС почистить может
    return 0;
}

file1.txt
agjfjhjf
clflhglf
egfh;lf


file2.txt
bkfhklgf
dkghkf


file12.txt = fil1+file2
agjfjhjf
bkfhklgf
egfh;lf
dkghkf
egfh;lf



Не по теме:

Следование строк в выходном файле file12.txt определяется этим условием

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(sBuf1[0] < sBuf2[0])
, мы можем сюда вставить любое нужное нам условие

Миниатюры
Работа с текстовыми файлами и строками  
easybudda
07.10.2011, 15:49
  #34

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
int Strcmp(char *s0, char *t0)
Просто на всякий случай: strcasecmp

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2011, 15:52     Работа с текстовыми файлами и строками
Еще ссылки по теме:

C++ С++ работа с текстовыми файлами
C++ Работа с текстовыми файлами
C++ Работа с файлами и текстовыми строками

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 15:52     Работа с текстовыми файлами и строками #35
Цитата Сообщение от easybudda Посмотреть сообщение

Не по теме:


Просто на всякий случай

Не по теме:

У меня эта функция еще одну функцию выполняет - удаление '\n', но все равно спасибо

Yandex
Объявления
07.10.2011, 15:52     Работа с текстовыми файлами и строками
Ответ Создать тему
Опции темы

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