Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывести содержимое массива массивов строк 
:(
    Опции темы
2faust
Дата 2.3.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 14.12.2005

Репутация: нет
Всего: нет



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

как это все выглядет :

содержимое файла, которое мне надо записать в массив массивов:

[SATTYPE]
1=0130
2=Hot Bird 1/2/3/6/7A

[DVB]
0=99
1=10719,V,27500,34; Cyfra +
2=10723,H,29900,34; British Telecom
3=10758,V,27500,34; TPS
4=10775,H,28000,34; AFN — American Forces Network
...

Код

char fullstr[81];
char** ppNeedStr;  char* pNeedStr; int *pLineStr; int LineStr[500];
char** ppfreq;                   char* pfreq;        char freq[6];
char** pppolar;                  char* ppolar;        char polar[2];
char** ppsymbolrate;        char* psymbolrate;    char symbolrate[6];
char** ppfeq;                     char* pfeq;        char feq[3];
char** ppnameChannel;    char* pnameChannel;     char nameChannel[255];


void COSDDlg::ReadFromIni(CString file, bool check)
{
    //CString fullstr, substr;
    FILE* fl;

    int i,j, k, m, n,f;
    int i_substr = 0;
    //int len1 = 0; int len2 = 0; int len3 = 0; int len4 = 0;
    bool opa1 = false;
    bool opa2 = false;


    //swprintf(buff, (wchar_t*)"%s", file);
    sprintf(buff, "%s", file);
    

    CString tmp(_T("Файл "));
    tmp += file;
    tmp += _T(" не открылся !!!");
    if ( (fl = fopen(buff,"r")) == NULL)
    {
        MessageBox(tmp);
        exit(1);
    }
    
    int str; int num_str; int p;
    for( num_str=0 ;!feof(fl); num_str++)
    {
        fgets(fullstr, 81, fl);
        str =  strlen(fullstr);
        LineStr[num_str] = str;
    }
    fclose(fl);
    
    int kol_vo_freq = 0;
    int kol_vo_str =  num_str;
    ppNeedStr = (char**) new(int[num_str]);
    num_str = 0; str = 0;
    pLineStr = LineStr;

    // переоткрываю файл
    if ( (fl = fopen(buff,"r")) == NULL)
    {
        MessageBox(tmp);
        exit(1);
    }
    
    while(!feof(fl))
    {
            //len = strlen(fullstr);
            fgets(fullstr, 81, fl);
            //fullstr[strlen(fullstr)] = '\0';

            pNeedStr = new(char[pLineStr[num_str]]);
            strncpy(pNeedStr, fullstr, strlen(fullstr));
            for(f = 0; pNeedStr[f] != '\n'; f++ );
            pNeedStr[f++] = '\0';
            ppNeedStr[num_str] = pNeedStr; 
            

            if( strcmp(fullstr,"\[DVB\]\n\0") == 0)
            {
                opa1 = true;
            }
            else if (opa1)
            {
                if( strcmp(fullstr,"0=99\n\0") == 0)
                {
                    myset = true;
                    opa1 = false;
                    opa2 = true;
                    
                    num_str++; str++;

                    kol_vo_freq = kol_vo_str - num_str;
                    ppfreq        = (char**) new(int[kol_vo_freq]);
                    pppolar        = (char**) new(int[kol_vo_freq]);
                    ppsymbolrate    = (char**) new(int[kol_vo_freq]);
                    ppfeq        = (char**) new(int[kol_vo_freq]);
                    ppnameChannel    = (char**) new(int[kol_vo_freq]);


                    continue;
                }
                
            }
            else if(opa2)
            {

                    //fgets(fullstr, 81, fl);

                    //p = strlen(fullstr);
                    //fullstr[p++] = '\0';
                    //ppNeedStr[num_str] = new(char[pLineStr[num_str]]);
                    //strncpy(ppNeedStr[num_str], fullstr, strlen(fullstr));

                    for( i = 0; fullstr[i] != _T('='); i++ );
                    fullstr[i++]; // add('N='), где N - транспондерная строка

                    // FREQ
                    for(j =0 ; fullstr[i] != _T(','); i++, j++ ) 
                        freq[j] = fullstr[i];
                    freq[j++] = '\0';

                    pfreq = new(char[strlen(freq)]);

                    strcpy(pfreq, freq);
                    ppfreq[i_substr] = pfreq;
                    i_substr++;

                    //CString xx;
                    //xx.Format("%s", ppfreq[i_substr]); // ??????????
                    //xx += " содержимое ppfreq[i_substr][0]" ; 
                    //MessageBox(xx);
                    // end FREQ
                    
                    // POLAR
                    fullstr[i++]; // add(',')
                    polar[0] = fullstr[i++];
                    polar[1] = '\0';

                    ppolar = new(char[strlen(polar)]);

                    strcpy(ppolar, polar);
                    pppolar[i_substr] = ppolar;
                    i_substr++;
                    // end POLAR

                    // SYMBOLRATE
                    fullstr[i++]; // add(',')
                    for(k =0 ; fullstr[i] != _T(','); i++, k++ ) symbolrate[k] = fullstr[i];
                    symbolrate[k++] = '\0';

                    psymbolrate = new(char[strlen(symbolrate)]);

                    strcpy(psymbolrate, symbolrate);
                    ppsymbolrate[i_substr] = psymbolrate;
                    i_substr++;
                    // end SYMBOLRATE

                    // FEQ
                    fullstr[i++]; // add(',')
                    for(m =0 ; fullstr[i] != _T(';'); i++, m++ ) feq[m] = fullstr[i];
                    feq[m++] = '\0';
            
                    pfeq = new(char[strlen(feq)]);

                    strcpy(pfeq, feq);
                    ppfeq[i_substr] = pfeq;
                    i_substr++;
                    //end FEQ

                    // NameChannel
                    fullstr[i++]; // add(';')
                    for( n =0 ; fullstr[i] != _T('\n'); i++, n++  ) nameChannel[n] = fullstr[i];
                    nameChannel[n++] = '\0';

                    pnameChannel = new(char[strlen(nameChannel)]);

                    strcpy(pnameChannel, nameChannel);
                    ppnameChannel[i_substr] = pnameChannel;
                    i_substr++;
                    //end NameChannel

                    // Вывод содержимого
                    
                    tmp = "Файл tmp.txt";
                    tmp += _T(" не открылся !!!");
                    FILE* fl2;
                    if ( (fl2 = fopen("tmp.txt","w")) == NULL)
                    {
                        MessageBox(tmp);
                        exit(1);
                    }

                    char x[] = "Вывод содержимого 2D массива ppNeedStr[][]"; 
                    fprintf( fl2, "%s\n\n", x);
                    for(int g=0; g < num_str; g++)
                    {
                        for(int d=0; d < i_substr; d++)
                        {
                            if(strcmp((char*)ppNeedStr[g][d],"0=99\n\0") == 0)
                            {
                                fprintf( fl2, "%s\n", "0=99");
                                fprintf( fl2, "%s,%s,%s,%s;%s", ppfreq[0][0], pppolar[0][0], ppsymbolrate[0][0], ppfeq[0][0], ppnameChannel[0][0]);
                            }
                            else
                            {
                                fprintf( fl2, "%s", ppNeedStr[g][d]);
                            }
                        }
                    }

                    break; // пока парсим только одну строку, дальше будем проверять флаг 'check'
                    
            } // opa2
            else 
            {
                num_str++; str++;
                continue;
            }

            num_str++; str++;

    } // while
    
    return;
}

PM MAIL   Вверх
Anikmar
Дата 2.3.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(2faust @  2.3.2009,  21:20 Найти цитируемый пост)
ppNeedStr = (char**) new(int[num_str]);

Прикольная конструкция

А в чем собственно проблема? То, что вы записали вы потом не можете прочитать? А вообще, что нужно? Уж больно кода много, лень разбирать.

PM MAIL ICQ   Вверх
2faust
Дата 2.3.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 14.12.2005

Репутация: нет
Всего: нет



проблема заключается в том, что то что записа в 2D массив не могу вывести на распечатку, может поможете:

Код

                    char x[] = "Вывод содержимого 2D массива ppNeedStr[][]"; 
                    fprintf( fl2, "%s\n\n", x);
                    for(int g=0; g < num_str; g++)
                    {
                        for(int d=0; d < i_substr; d++)
                        {
                            if(strcmp((char*)ppNeedStr[g][d],"0=99\n\0") == 0)
                            {
                                fprintf( fl2, "%s\n", "0=99");
                                fprintf( fl2, "%s,%s,%s,%s;%s", ppfreq[0][0], pppolar[0][0], ppsymbolrate[0][0], ppfeq[0][0], ppnameChannel[0][0]);
                            }
                            else
                            {
                                fprintf( fl2, "%s", ppNeedStr[g][d]);
                            }
                        }
                    }


но для этого надо вьехать в код, иначе никак.
PM MAIL   Вверх
azesmcar
Дата 2.3.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



2faust вьехать в этот код? Упаси боже ) притом что код даже не полный.

у тебя 24 переменных в коде, указатели, указатели на указатели..и.т.д..Может пора переходить на STL?

Код

std::list<std::string>


не думаешь что выглядет лучше?
PM   Вверх
Anikmar
Дата 2.3.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(2faust @  2.3.2009,  22:48 Найти цитируемый пост)
но для этого надо вьехать в код, иначе никак. 

Еще как можно, если вы вкратце объясните, что у вас хранится в массивах и что конкретно не выводится.
Мне, например, даже если въеду в код вполне может остаться непонятным условие: 
if(strcmp((char*)ppNeedStr[g][d],"0=99\n\0") == 0) (кстати, зачем завершающий 0?)

Мне кажется, что вашу задачу можно попроще решить - уж больно мудрено массивы организовываются, файл несколько раз прогоняется (причем в общем виде неправильно - если попадется длинная строка, у вас могут возникнуть проблемы).

Есть исходный файл, как я понял. Его нужно считать в массив массивов строк (это проще говоря разбить на несколько файлов, объединенных в массив). Вот у меня и возник вопрос: по какому признаку надо разбивать, чтобы затем записать и какими массивами вы это организовываете.

Возвращаясь к приведенному кусочку кода:
Цитата(2faust @  2.3.2009,  22:48 Найти цитируемый пост)
for(int d=0; d < i_substr; d++)
                        {
                            if(strcmp((char*)ppNeedStr[g][d],"0=99\n\0") == 0)
                            {
                                fprintf( fl2, "%s\n", "0=99");
                                fprintf( fl2, "%s,%s,%s,%s;%s", ppfreq[0][0], pppolar[0][0], ppsymbolrate[0][0], ppfeq[0][0], ppnameChannel[0][0]);
                            }
                            else
                            {
                                fprintf( fl2, "%s", ppNeedStr[g][d]);
                            }

Почему-то я не увидел в функциях записи участия переменной цикла кроме как по условию else. Т.е. при выполнении условия всегда пишем одно и то же? Это ошибка или так нужно?
PM MAIL ICQ   Вверх
Anikmar
Дата 2.3.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



2 раза запостилось почему-то

Это сообщение отредактировал(а) Anikmar - 2.3.2009, 23:21
PM MAIL ICQ   Вверх
2faust
Дата 2.3.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 14.12.2005

Репутация: нет
Всего: нет



Цитата

if(strcmp((char*)ppNeedStr[g][d],"0=99\n\0") == 0) (кстати, зачем завершающий 0?)

увы, иначе почему то у меня строки небыли равны.

постараюсь разьеснить смысл, если это возможно.
на входе имеем файл, в котором каждая строка значима, и в дальнейшем будет использоваться.
когда прохожу строку "0=99", следующую строку надо разбивать на подстроки, и содержимое подстроки должно записываться в свой 2D массив. это удобно, потому как вдальнейшем будут извлекаться , наверное опять непонятно.

пример:
[DVB]
0=99
1=10719,V,27500,34; Cyfra +
2=10723,H,29900,34; British Telecom
3=10758,V,27500,34; TPS
4=10775,H,28000,34; AFN — American Forces Network

/
Код

/дальше каждая строка дожна разбиваться на подстроки и записываться так:
char** ppfreq;                   char* pfreq;        char freq[6];

// прочитали '1='
 for( i = 0; fullstr[i] != _T('='); i++ );
      fullstr[i++]; // add('N='), где N - транспондерная строка

 // FREQ -> 10719 - дальше читаем
 for(j =0 ; fullstr[i] != _T(','); i++, j++ ) 
       freq[j] = fullstr[i];
freq[j++] = '\0'; // freq=10719

pfreq = new(char[strlen(freq)]); // pfreq - указатель на массив строк, с частотами

strcpy(pfreq, freq);
ppfreq[i_substr] = pfreq; // ppfreq[индекс] = указатель_на_массив_строк

// end FREQ


и таких подстрок надо прочитать в других строках, вот поэтому для этого создал 2D массив.
со все освтальным так же.

после того как массив 2D заполним, для проверки хочу вывечти содержимое в файл, для проверки.

PM MAIL   Вверх
Anikmar
Дата 2.3.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(2faust @  2.3.2009,  23:21 Найти цитируемый пост)
 for( i = 0; fullstr[i] != _T('='); i++ );
      fullstr[i++]; // add('N='), где N - транспондерная строка


А вы не задумывались, что сделает программа, если в строке не окажется символа '=' ?
Почему вы не пользуетесь строковыми функциями поиска подстрок, тем же STL, наконец (великолепная поборка алгоритмов)?

PM MAIL ICQ   Вверх
2faust
Дата 2.3.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 14.12.2005

Репутация: нет
Всего: нет



Цитата

А вы не задумывались, что сделает программа, если в строке не окажется символа '=' ?
Почему вы не пользуетесь строковыми функциями поиска подстрок, тем же STL, наконец (великолепная поборка алгоритмов)?

до той строки, до которой дохожу операция '=' обязательно должна присутсвовать.
почему не использовал STL - я еще не могу похвастаться своим богажем знания, поэтому использую старые но проверенный методы.
буду вам благодарен, если предложите вариант, с тем что уже написано, мне бы только записать в 2Д-массив, и проверить что записалось.
для этих операций выбрал указатели.
PM MAIL   Вверх
Anikmar
Дата 2.3.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(2faust @  2.3.2009,  23:36 Найти цитируемый пост)
мне бы только записать в 2Д-массив, и проверить что записалось.
для этих операций выбрал указатели. 


В том-то и дело, что я, например, не совсем понял что вы в массив хотите записать. Может озвучите все-таки задачу? Или военная тайна?

У нас есть файл вида:
Цитата(2faust @  2.3.2009,  23:21 Найти цитируемый пост)
0=99
1=10719,V,27500,34; Cyfra +
2=10723,H,29900,34; British Telecom
3=10758,V,27500,34; TPS
4=10775,H,28000,34; AFN — American Forces Network

Дошли до строки 0=99 и следующие строки (до конца файла?) разбиваем на некие лексические единицы, которые мы должны записать в массивы? Т.е. строка
1=10719,V,27500,34; Cyfra +
Должна записаться так:
в 1-й массив 1
во 2-й 10719
в 3-й V
в 4-й 27500
в 5-й 34
в 6-й Cyfra+
Правильно?
Затем эти массивы в неком вашем внутреннем формате должны быть записаны в отдельный (отдельные) файл(лы)?

PM MAIL ICQ   Вверх
2faust
Дата 2.3.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 14.12.2005

Репутация: нет
Всего: нет



Цитата

Правильно?


да , Вы правильно поняли.

Цитата

Затем эти массивы в неком вашем внутреннем формате должны быть записаны в отдельный (отдельные) файл(лы)?

можно просто записать просто в массивы, так что частоты(т.е. 10719) записываются в массив частот, поляризация(V) записывается в свой массив  и .т.п.
все эти данный должны быть в char'ах, т.е. '10719', 'V', и т.д.т.е. строки
PM MAIL   Вверх
Anikmar
Дата 3.3.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(2faust @  2.3.2009,  23:59 Найти цитируемый пост)
можно просто записать просто в массивы, так что частоты(т.е. 10719) записываются в массив частот, поляризация(V) записывается в свой массив  и .т.п.
все эти данный должны быть в char'ах, т.е. '10719', 'V', и т.д.т.е. строки 


А есть необходимость хранить эти данные в разных массивах?
Не проще написать класс с соответствующими полями, а затем создать один единственный массив классов? 
PM MAIL ICQ   Вверх
inside_pointer
Дата 3.3.2009, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: 5
Всего: 12



Цитата(2faust)

увы, иначе почему то у меня строки небыли равны.


Код

strcmp(fullstr,"\[DVB\]\n\0") == 0)


"..."  - строковой литерал (строковая константа, в смысле неменяемая и не входит в число констант языка)
там в конце всегда нуль-символ невидимый, для того чтобы её длину можно было узнать
strcmp дальше нуль-символа не пойдёт
скобки экранировать не надо, количество экранированных символов зарезервировано
Код

 '\n'
 '\t'
 '\v'
 '\b'
 '\r'
 '\f'
 '\a'
 '\\'
 '\?'
 '\''
 '\"'
 '\001'
 '\x01'

если прочитал из файла [DVB], то символ перевода строки надо от него отрезать, а потом сравнивать, либо применять
strncmp(..., "[DVB]", 5);
плохо то, что символ, который никак не относится к записи, участвует в обработке записи
и полотно это представь, что через месяц будет ещё больше в два раза, ты в нём не поймёшь вообще ничего, даже то, что понимал раньше очень хорошо, а поменять его как-нибудь - тем более, придётся менять его всё или не менять ничего
PM MAIL   Вверх
2faust
Дата 3.3.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 14.12.2005

Репутация: нет
Всего: нет



Цитата

если прочитал из файла [DVB], то символ перевода строки надо от него отрезать, а потом сравнивать, либо применять
strncmp(..., "[DVB]", 5);

согласен.

заводить отдельный класс сейчас это проблематично, хотя вы и правы.
попробую исправить то что уже написал.
PM MAIL   Вверх
Anikmar
Дата 3.3.2009, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(2faust @  3.3.2009,  09:59 Найти цитируемый пост)
заводить отдельный класс сейчас это проблематично, хотя вы и правы.
попробую исправить то что уже написал. 


Если программа нужная и полезная, то лучше ее написать в удобном для сопровождения виде. Смотря сколько строк кода уже написано и какова на данный момент ее работоспособность. В противном случае код разрастется до неимоверных величин, вы сами в нем не разберетесь и все равно будете в итоге писать с нуля (так говорит мой опыт).

Как только появляется необходимость добавить некоторый функционал в код, который написан хаотично и достаточно давно (когда уже не помнишь  что и где писал), то трудоемкость разбора собственных же полетов иногда превышает трудоемкость написания новой версии. 
Я не говорю уже о случаях, когда свой код оставляешь по наследству. Правда в последнем случае может быть даже мрачное злорадное наслаждение.

Добавлено через 4 минуты и 55 секунд
С таким кодом можно долго провозиться.
Например следующий участок:
Код

                    char x[] = "Вывод содержимого 2D массива ppNeedStr[][]"; 
                    fprintf( fl2, "%s\n\n", x);
                    for(int g=0; g < num_str; g++)
                    {
                        for(int d=0; d < i_substr; d++)
                        {
                            if(strcmp((char*)ppNeedStr[g][d],"0=99\n\0") == 0)
                            {
                                fprintf( fl2, "%s\n", "0=99"); // Тут есть переход, а в следующей строке кода нет
                                fprintf( fl2, "%s,%s,%s,%s;%s", ppfreq[0][0], pppolar[0][0], ppsymbolrate[0][0], ppfeq[0][0], ppnameChannel[0][0]);
                            }
                            else
                            {
                                fprintf( fl2, "%s", ppNeedStr[g][d]); // Тут опять нет перехода Это правильно?
                            }
                        }
                    }



В функциях вывода где-то есть переход на новую строку, где-то нет. Это правильно или нет?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.