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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите! 
:(
    Опции темы
label
Дата 2.5.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите как перевезти из консольной программы в нормальную для Builder'а ....или как убрать классы!!
#include <stdlib.h>
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
class table {
char *S1[16], *S2[16], *S[16], **C;
public:
int IN(int, int); // принадлежать b=(a IN S)
int FIND(int); // найти n: a IN S[n]
void OR(void); // объединить S=(S1 U S2)
void CONCAT(void); // сцепить
void SUB(void); // вычесть S=(S1 \ S2)
void AND(void); // пересечь S=(S1 П S2)
void Init(int); // заполнить S1, S2
void Print(int); // просмотр множества
void Clear(int); // очистка множеств
void Pr(char**);
int IN_S(int);
} T;

int table::IN(int a, int n)
{ int i, j, f=0;
C=(n==1)? S1: (n==2)? S2: S;
for (j=0; j<16; j++)
for (i=0; i<8; i++)
{ if (C[j][i]==100) break;
if (C[j][i]==a)
{ f=1;
break;
}
}
return (f); // f=0 - элемент а не принадлежит множеству, f=1 - принадлежит
}

int table::FIND(int a)
{ int i, j, n=0;
if (T.IN(a, 3) && !T.IN(a, 1) && !T.IN(a, 2)) n=3;
if (T.IN(a, 1) && !T.IN(a, 3) && !T.IN(a, 2)) n=1;
if (T.IN(a, 2) && !T.IN(a, 3) && !T.IN(a, 1)) n=2;
if ((T.IN(a, 3) && T.IN(a, 1)) || (T.IN(a, 3) && T.IN(a, 2)) || (T.IN(a, 1) && T.IN(a, 2))) n=4;
return (n);
/* n=0 - элемент a не принадлежит ни одному множеству
n=3 - элемент a принадлежит множеству S
n=1 - элемент a принадлежит множеству S1
n=2 - элемент a принадлежит множеству S2
n=4 - элемент a принадлежит более, чем одному множеству */
}

void table::OR(void)
{ int i, j, k, f;
for (i=0; i<16; i++)
for (j=0; j<8; j++)
S[i][j]=S1[i][j];
for (i=0; i<16; i++)
for (j=0; j<8; j++)
{ for (f=k=0; k<8; k++)
f=(S2[i][j]==S[i][k])? 1: f;
k=0;
while (S[i][k]!=100) k++;
if (!f) S[i][k]=S2[i][j];
}
}

void table::CONCAT(void)
{ int i, j, k;
for (i=0; i<16; i++)
for (j=0; j<8; j++)
S[i][j]=S1[i][j];
for (i=0; i<16; i++)
for (j=0; j<8; j++)
{ k=0;
while (S[i][k]!=100) k++;
S[i][k]=S2[i][j];
}
}

void table::SUB(void)
{ int s, i, j, k, f;
for (i=0; i<16; i++)
for (s=j=0; j<8; j++)
{ for (f=k=0; k<8; k++)
f=(S1[i][j]==S2[i][k])? 1: f;
if (!f) S[i][s++]=S1[i][j];
}
}

void table::AND(void)
{ int s, i, j, k, f;
for (i=0; i<16; i++)
for (s=j=0; j<8; j++)
{ for (f=k=0; k<8; k++)
f=(S1[i][j]==S2[i][k])? 1: f;
if (f) S[i][s++]=S1[i][j];
}
}

void table::Init(int N)
{ int i, j, n;
T.Clear(1);
for (i=0; i<N; i++)
{ do
n=random(100);
while (T.IN(n, 1));
for (j=0; j<8 && (S1[n%16][j]!=100); j++);
S1[n%16][j]=n;
do
n=random(100);
while (T.IN(n, 2));
for (j=0; j<8 && (S2[n%16][j]!=100); j++);
S2[n%16][j]=n;
}
}

void table::Print(int n)
{ int i, j;
char **X;
clrscr();
switch(n)
{ case 0:
{ cputs(" Множество S");
X=S; Pr(X); } break;
case 1:
{ cputs(" Множество S1");
X=S1; Pr(X); } break;
case 2:
{ cputs(" Множество S2");
X=S2; Pr(X);
}
}
getch();
}

void table:smiler(char **X)
{ int i, j;
window(15,7,64,17);
for (i=0; i<16; i++)
{ cprintf("%2d", i);
textcolor(CYAN); cprintf("¦"); textcolor(WHITE); }
cprintf("\n\r");
for (i=0; i<16; i++)
{ textcolor(CYAN); cprintf("--+"); textcolor(WHITE); }
for (i=0; i<8; i++)
{ cprintf("\n\r");
for (j=0; j<16; j++)
{ if(X[j][i]==100)
cprintf(" ");
else
cprintf("%2d", X[j][i]);
textcolor(CYAN);
cprintf("¦");
textcolor(WHITE);
}
}
window(1,1,80,25);
}

void table::Clear(int n)
{ int i, j;
puts("\a");
for (j=0; j<16; j++)
{ if (n)
{ S1[j]=(char*)calloc(8, sizeof(char));
S2[j]=(char*)calloc(8, sizeof(char));
}
S[j]=(char*)calloc(8, sizeof(char));
for (i=0; i<8; i++)
S[j][i]=(n)? S1[j][i]=S2[j][i]=100: 100;
}
}

void main(void)
{ int i, j, k, k1, n;
T.Clear(1);
randomize();
_setcursortype(_NOCURSOR);
do
{ clrscr();
textcolor(WHITE);
window(20,7,59,17);
cputs("\n\n1. Заполнение ХЕШ-таблиц S1 и S2\n\r");
cputs("2. Просмотр ХЕШ-таблицы S1\n\r");
cputs("3. Просмотр ХЕШ-таблицы S2\n\r");
cputs("4. Просмотр ХЕШ-таблицы S\n\r");
cputs("5. ОПЕРАЦИИ...\n\r");
cputs("0. Выход из программы\n\r");
window(1,1,80,25);
k=getch();
switch(k)
{ case '1': T.Init(20); break;
case '2': T.Print(1); break;
case '3': T.Print(2); break;
case '4': T.Print(0); break;
case '5':
{ clrscr();
window(20,7,59,17);
cputs(" ОПЕРАЦИИ\n\n\r");
cputs(" 1. Принадлежать\n\r");
cputs(" 2. Найти\n\r");
cputs(" 3. Объединить\n\r");
cputs(" 4. Сцепить\n\r");
cputs(" 5. Вычесть\n\r");
cputs(" 6. Пересечь\n\n\r");
k1=getch();
window(1,1,80,25);
_setcursortype(_NORMALCURSOR);
switch(k1)
{ case '1':
{ clrscr();
cprintf("Введите целое число от 0 до 99: ");
scanf("%d", &n);
i=T.IN(n, 3);
cprintf("\n\rЭлемент < %d > ", n);
if (i) cprintf("принадлежит множеству S");
else cprintf("не принадлежит множеству S");
getch();
} break;
case '2':
{ clrscr();
cprintf("Введите целое число от 0 до 99: ");
scanf("%d", &n);
i=T.FIND(n);
cprintf("\n\rЭлемент < %d > ", n);
switch(i)
{ case 0: cprintf("не принадлежит ни одному множеству", n); break;
case 1: cprintf("принадлежит множеству S1", n); break;
case 2: cprintf("принадлежит множеству S2", n); break;
case 3: cprintf("принадлежит множеству S", n); break;
case 4: cprintf("принадлежит более, чем одному множеству", n);
}
getch();
} break;
case '3':
{ T.Clear(0);
T.OR();
} break;
case '4':
{ T.Clear(0);
T.CONCAT();
} break;
case '5':
{ T.Clear(0);
T.SUB();
} break;
case '6':
{ T.Clear(0);
T.AND();
} break;
}
_setcursortype(_NOCURSOR);
}
}
}
while(k!='0');
textcolor(LIGHTGRAY);
clrscr();
}

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


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Ты бы хоть код красиво отредактировал.
PM MAIL   Вверх
chipset
Дата 3.5.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



М
 

1. Пользуйтесь подсветкой кода.
2. Название темы должно быть осмысленным.
Chipset.



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
chaos
Дата 5.5.2005, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



как как ))) берешь и переписываешь на билдер smile
PM WWW   Вверх
pablo
Дата 5.5.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



В такой каше, чёрт ногу сломит. smile


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Дрон
Дата 5.5.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Особенно вот это прикольно:
Цитата
void table:smiler(char **X)


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

Жмём File -> New -> Other... там находим Console Wizard и радуемся жизни smile


--------------------
Да. Именно так.
PM   Вверх
Yanis
Дата 5.5.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Ужас. Не люблю когда код не отформатирован. Вот вариант который компилируется в билдере
Код

#include <stdlib.h>
#include <stdio.h>
#include <alloc.h>
#include <conio.h>

class table
{
  char *S1[16];
  char *S2[16];
  char *S[16];
  char **C;
public:
  int IN(int, int);   // принадлежать b=(a IN S)
  int FIND(int);      // найти n: a IN S[n]
  void OR(void);      // объединить S=(S1 U S2)
  void CONCAT(void);  // сцепить
  void SUB(void);     // вычесть S=(S1 \ S2)
  void AND(void);     // пересечь S=(S1 П S2)
  void Init(int);     // заполнить S1, S2
  void Print(int);    // просмотр множества
  void Clear(int);    // очистка множеств
  void Pr(char**);
  int IN_S(int);
}T;

int table::IN(int a, int n)
{
  int i, j, f = 0;
  C = (n==1)?S1:(n == 2)?S2:S;

  for (j=0; j<16; j++)
    for (i=0; i<8; i++)
    {
      if (C[j][i] == 100) break;
      if (C[j][i] == a)
      {
        f=1;
        break;
      }
    }
  return (f); // f=0 - элемент а не принадлежит множеству, f=1 - принадлежит
};

int table::FIND(int a)
{
  int i, j, n=0;

  if (T.IN(a, 3) && !T.IN(a, 1) && !T.IN(a, 2)) n=3;
  if (T.IN(a, 1) && !T.IN(a, 3) && !T.IN(a, 2)) n=1;
  if (T.IN(a, 2) && !T.IN(a, 3) && !T.IN(a, 1)) n=2;
  if ((T.IN(a, 3) && T.IN(a, 1)) || (T.IN(a, 3) && T.IN(a, 2)) || (T.IN(a, 1) && T.IN(a, 2))) n=4;
  return (n);
/* n=0 - элемент a не принадлежит ни одному множеству
n=3 - элемент a принадлежит множеству S
n=1 - элемент a принадлежит множеству S1
n=2 - элемент a принадлежит множеству S2
n=4 - элемент a принадлежит более, чем одному множеству */
};

void table::OR(void)
{
  int i, j, k, f;

  for (i=0; i<16; i++)
    for (j=0; j<8; j++)
      S[i][j]=S1[i][j];

    for (i=0; i<16; i++)
      for (j=0; j<8; j++)
      {
        for (f=k=0; k<8; k++)
          f = (S2[i][j] == S[i][k])?1: f;
        k=0;
        while (S[i][k]!=100) k++;
        if (!f)
          S[i][k]=S2[i][j];
      }
};

void table::CONCAT(void)
{
  int i, j, k;

  for (i=0; i<16; i++)
    for (j=0; j<8; j++)
      S[i][j]=S1[i][j];

  for (i=0; i<16; i++)
    for (j=0; j<8; j++)
    {
      k=0;
      while (S[i][k]!=100) k++;
      S[i][k]=S2[i][j];
    }
};

void table::SUB(void)
{
  int s, i, j, k, f;

  for (i=0; i<16; i++)
    for (s=j=0; j<8; j++)
    {
      for (f=k=0; k<8; k++)
        f = (S1[i][j]==S2[i][k])? 1: f;
      if (!f) S[i][s++]=S1[i][j];
    }
};

void table::AND(void)
{
  int s, i, j, k, f;

  for (i=0; i<16; i++)
    for (s=j=0; j<8; j++)
    {
      for (f=k=0; k<8; k++)
        f=(S1[i][j]==S2[i][k])? 1: f;
      if (f) S[i][s++]=S1[i][j];
    }
};

void table::Init(int N)
{
  int i, j, n;

  T.Clear(1);
  for (i=0; i<N; i++)
  {
    do
      n=random(100);
    while (T.IN(n, 1));

    for (j=0; j<8 && (S1[n%16][j]!=100); j++);
      S1[n%16][j]=n;

    do
      n=random(100);
    while (T.IN(n, 2));

    for (j=0; j<8 && (S2[n%16][j]!=100); j++);
      S2[n%16][j]=n;
  }
};

void table::Print(int n)
{
  int i, j;
  char **X;

  clrscr();

  switch(n)
  {
    case 0:
    {
      cputs(" Множество S");
      X=S;
      Pr(X);
    }break;

    case 1:
    {
      cputs(" Множество S1");
      X=S1;
      Pr(X);
    }break;

    case 2:
    {
      cputs(" Множество S2");
      X=S2;
      Pr(X);
    }
  } // switch
  getch();
};

void table::Pr(char **X)
{
  int i, j;

  window(15,7,64,17);
  for (i=0; i<16; i++)
  {
    cprintf("%2d", i);
    textcolor(CYAN); cprintf("¦"); textcolor(WHITE);
  }
  cprintf("\n\r");
  for (i=0; i<16; i++)
  {
    textcolor(CYAN);
    cprintf("--+");
    textcolor(WHITE);
  }
  for (i=0; i<8; i++)
  {
    cprintf("\n\r");
    for (j=0; j<16; j++)
    {
      if(X[j][i]==100) cprintf(" ");
      else cprintf("%2d", X[j][i]);
      textcolor(CYAN);
      cprintf("¦");
      textcolor(WHITE);
    }
  }
  window(1,1,80,25);
};

void table::Clear(int n)
{
  int i, j;

  puts("\a");
  for (j=0; j<16; j++)
  {
    if (n)
    {
      S1[j] = (char*)calloc(8, sizeof(char));
      S2[j] = (char*)calloc(8, sizeof(char));
    }
    S[j]=(char*)calloc(8, sizeof(char));
    for (i=0; i<8; i++)
      S[j][i] = (n)? S1[j][i]=S2[j][i]=100: 100;
  }
};

void main(void)
{
  int i, j, k, k1, n;

  T.Clear(1);
  randomize();
  _setcursortype(_NOCURSOR);
  do
  {
    clrscr();
    textcolor(WHITE);
    window(20,7,59,17);
    cputs("\n\n1. Заполнение ХЕШ-таблиц S1 и S2\n\r");
    cputs("2. Просмотр ХЕШ-таблицы S1\n\r");
    cputs("3. Просмотр ХЕШ-таблицы S2\n\r");
    cputs("4. Просмотр ХЕШ-таблицы S\n\r");
    cputs("5. ОПЕРАЦИИ...\n\r");
    cputs("0. Выход из программы\n\r");
    window(1,1,80,25);
    k = getch();
    switch(k)
    {
      case '1': T.Init(20); break;
      case '2': T.Print(1); break;
      case '3': T.Print(2); break;
      case '4': T.Print(0); break;
      case '5':
      {
        clrscr();
        window(20,7,59,17);
        cputs(" ОПЕРАЦИИ\n\n\r");
        cputs(" 1. Принадлежать\n\r");
        cputs(" 2. Найти\n\r");
        cputs(" 3. Объединить\n\r");
        cputs(" 4. Сцепить\n\r");
        cputs(" 5. Вычесть\n\r");
        cputs(" 6. Пересечь\n\n\r");
        k1=getch();
        window(1,1,80,25);
        _setcursortype(_NORMALCURSOR);
        switch(k1)
        {
          case '1':
          {
            clrscr();
            cprintf("Введите целое число от 0 до 99: ");
            scanf("%d", &n);
            i=T.IN(n, 3);
            cprintf("\n\rЭлемент < %d > ", n);
            if (i) cprintf("принадлежит множеству S");
            else cprintf("не принадлежит множеству S");
            getch();
          } break;

          case '2':
          {
            clrscr();
            cprintf("Введите целое число от 0 до 99: ");
            scanf("%d", &n);
            i = T.FIND(n);
            cprintf("\n\rЭлемент < %d > ", n);
            switch(i)
            {
              case 0: cprintf("не принадлежит ни одному множеству", n); break;
              case 1: cprintf("принадлежит множеству S1", n); break;
              case 2: cprintf("принадлежит множеству S2", n); break;
              case 3: cprintf("принадлежит множеству S", n); break;
              case 4: cprintf("принадлежит более, чем одному множеству", n);
            }
            getch();
          } break;

          case '3':
          {
            T.Clear(0);
            T.OR();
          } break;

          case '4':
          {
            T.Clear(0);
            T.CONCAT();
          } break;

          case '5':
          {
            T.Clear(0);
            T.SUB();
          } break;

          case '6':
          {
            T.Clear(0);
            T.AND();
          } break;
        } // switch(k1)
        _setcursortype(_NOCURSOR);
      }
    }
  }
  while(k!='0');
  textcolor(LIGHTGRAY);
  clrscr();
};


Код

void table::Init(int N)
{
  int i, j, n;

  T.Clear(1);
  for (i=0; i<N; i++)
  {
    do
      n=random(100);
    while (T.IN(n, 1));

    // ???
    for (j=0; j<8 && (S1[n%16][j]!=100); j++);
      S1[n%16][j]=n;

    do
      n=random(100);
    while (T.IN(n, 2));

    // ???
    for (j=0; j<8 && (S2[n%16][j]!=100); j++);
      S2[n%16][j]=n;
  }
};

Я не силён в CPP, но может кто-нибудь обяснит почему после циклов стоят ";" Зачем? Или Это ошибка автора?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Дрон
Дата 5.5.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Цитата(Yanis @ 5.5.2005, 20:51)
Я не силён в CPP, но может кто-нибудь обяснит почему после циклов стоят ";" Зачем? Или Это ошибка автора?

Ашибка адназначна smile


--------------------
Да. Именно так.
PM   Вверх
Fixin
Дата 5.5.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



А может поиск совершается?
PM MAIL ICQ   Вверх
Дрон
Дата 5.5.2005, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Цитата(Fixin @ 5.5.2005, 22:33)
А может поиск совершается?

Виноват... вспылил, был не прав smile

Там действительно поиск. Похоже, что это идёт заполнение случайными неповторяющимися числами.

ЗЫ: А потом поглядев на такой исходник некоторые начинают вопить, что С++ неудобочитаемый язык smile


--------------------
Да. Именно так.
PM   Вверх
Fixin
Дата 5.5.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Цитата
А потом поглядев на такой исходник некоторые начинают вопить, что С++ неудобочитаемый язык
Эт точно smile
PM MAIL ICQ   Вверх
DENNN
Дата 6.5.2005, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



Цитата
А потом поглядев на такой исходник некоторые начинают вопить, что С++ неудобочитаемый язык

Честно говоря, этот код читается легко. А вот было бы что позапутанее.....
PM ICQ   Вверх
gepard
Дата 6.5.2005, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



NiJazz
Цитата
Ты бы хоть код красиво отредактировал.

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


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW 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.1103 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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