Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Пятница... Опять задачки ;)   Найти похожие ветки 

 
default ©   (2004-05-01 22:06) [120]

можно сделать так
есть у нас пять карт
В Д Т K 9
пусть кодируем Т(пусть это будет туз бубей)
предварительно задаётся некий порядок на 52 картах
в результате чего для 4 карт В Д К 9 можем написать к примеру
2 3 4 1
1)первой картой задаём масть
1 - черви, 2 - буби, ...
для нашего случая первой картой будет 2
2)второй картой задаём номер карты в данной масти
оставшиеся три карты в соотв-ии с принятым порядком
запишем как 2 3 1
1-2..5
2-6..9
3-10..14 (11-валет, 12-дама и тд.)
для нашего случая второй картой будет 3
3) перестановкой последних двух карт задаём номер карты
в нужном отрезке(пункт 2)
но перестановкой 2 карт можно задать 4 комбинации!
а у нас есть отрезок в пункте 2 в котором находятся 5 номеров!
как быть?!недостаёт информации!но у нас же есть магия помошника!
он просто не будет в качестве карты-загадки брать, к примеру, тузы, ведь среди 5 карт хоть одна имеет другой ранг(то есть пяти тузов для нашего случая быть не может!)!всё задача решена!


 
default ©   (2004-05-01 22:12) [121]

"второй картой задаём номер карты в данной масти"
точнее номер отрезка в котром лежит карта-загадка


 
Sha ©   (2004-05-01 22:47) [122]

2 default

Нельзя ли поянить на примере?
Скажем выпали туз пик, туз крестей и 2,3,4 червей.


 
default ©   (2004-05-01 22:58) [123]

Sha ©   (01.05.04 22:47) [122]
ok хоккей досмотрю и приведу


 
Sha ©   (2004-05-01 23:08) [124]

2 default

Все понял. Отличное рещение. Поздравляю!


 
Sha ©   (2004-05-01 23:41) [125]

2 default

Кажется, я поторопился с поздравлениями...

Как я понял, твое решение выглядит так:

Помощник откладывает в сторону любую карту удовлетворяющую единственному условию: есть еще хотя бы одна бОльшая карта той же масти. Заметим, что при таком выборе отложенная карта не может быть тузом.
Эту бОльшую карту он отрывает первой, указывая фокуснику масть.
Далее из трех оставшихся карт для кодирования одного из трех диапазонов, которым может принадлежать отложенная карта (2..5,6..9,10..К), соответственно выбирается
младшая, средняя или старшая. Эта карта открывается второй.
И наконец, парой оставшихся карт кодируется смещение (0..3)
загаданной карты внутри диапазона.

Проблема в том, что возможно всего два расположения двух последних карт: (младшая,старшая) и (старшая,младшая), - а этого недостаточно для кодирования 4-х смещений :(


 
default ©   (2004-05-02 00:01) [126]

мда...когда писал "но перестановкой 2 карт можно задать 4 комбинации!" думал почему-то о 2 битах...
таким способом не удастся задать 8 карт, опять не хватает инф-ции...


 
default ©   (2004-05-02 00:04) [127]

да когда стал писать пример тоже это увидел, одни расстройства(в шутку)


 
default ©   (2004-05-02 00:13) [128]

даже не 8, а куда больше...


 
Sha ©   (2004-05-02 09:25) [129]

> default ©   (02.05.04 00:01) [126]
> мда...когда писал "но перестановкой 2 карт можно задать 4 комбинации!" думал почему-то о 2 битах...

Я почему-то тоже :)


 
SergP ©   (2004-05-02 10:52) [130]

SergP ©   (30.04.04 18:13)

> Когда гиря находилась в лодке она под действием силы тяжести
> выталкивала столько же воды, сколько находясь на дне (Закон
> Архимеда)

М-да.... Однако.... :-))) Это может быть верным только если плотность гири равна плотности воды....

Думкин ©   (30.04.04 18:21)

> [100] SergP ©   (30.04.04 18:13)

Нет. И при меньше и равно. Правда...есть одно но - найдите.


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


 
Sha ©   (2004-05-03 09:23) [131]

Если кому трудно крутить в уме алгоритм Sha ©   (01.05.04 15:03) [115], то вот исходники для решения задачи #2.
Все по-честному, без обмана.

(* Sha 2004
Демонстрационная программа, доказывающая возможность следующего фокуса.
Из колоды в 52 карты помощник извлекает наугад 5 карт, показывает зрителям и
смотрит сам, после чего выбирает одну из них и прячет. Остальные 4 карты
выкладывает в ряд на столе. Затем приходит фокусник и, глядя на лежащие
карты, называет спрятанную.

Обозначим масти символами m1, m2, m3, m4.
Количество извлеченных карт каждой масти обозначим c1, c2, c3, c4,
причем c1 + c2 + c3 + c4 = 5.
Количество карт, оставленных помощником, обозначим d1, d2, d3, d4,
причем d1 + d2 + d3 + d4 = 4 и d1<=c1, d2<=c2, d3<=c3, d4<=c4.
Не ограничивая общность рассуждений, можем считать, что выполняются неравенства
c1>=c2, c1>=c3, c3>=c4 и масти m1 и m2 одного цвета, а масти m3 и m4 - другого.
в противном случае перенумеруем наши масти.
Флажкам f1, f2, f3, f4 будем присваивать значение 1, если сооветствующая масть
может содержать отложенную карту и 0 в противном случае.

Идея решения состоит в том, чтобы выбрать 2 масти, содержащие не менее 3-х из
5-ти извлеченных карт и спрятать одну этих трех карт. При этом выбор этих мастей
должен быть сделан таким образом, чтобы по мастям 4-х открытых карт фокусник
смог однозначно определить 2 выбранные нами масти.
Т.к. в двух мастях 26 карт и не менее 2-х карт из них уже открыты, то нам
остается закодировать номер одной карты из 24. Мы делаем это, располагая
4 открытых карты одним из 4!=24 способов, и тем самым сообщаем фокуснику
порядковый номер искомой карты в активном подмножестве карт.

Правила определения фокусником масти отложенной карты:

1. Цвет тройки.
    Если оставлены 3 или больше карт одной масти,
    то искомая карта имеет тот же цвет, что эти карты.
2. Масти разноцветных пар.
    Если оставлены пара карт одной (красной) масти
    и пара карт другой (черной) масти,
    то искомая карта имеет одну из этих мастей.
3. Цвет одинокой пары.
    Если оставлены 2 карты разных мастей одного цвета
    и пара карт одной масти другого цвета,
    то искомая карта имеет тот же цвет, что и пара карт.
4. Масти разноцветных карт.
    Если оставлены 2 карты разных мастей разного цвета
    и пара карт произвольной масти,
    то искомая карта имеет ту же масть, что и одна из непарных карт.

Правила выбора карты помощником:

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

 Правила действий помощника и фокусника
--------------------------------------------------------------------------------
 извлеченные       оставленные       где искать       правило
--------------------------------------------------------------------------------
c1  c2  c3  c4    d1  d2  d3  d4    f1  f2  f3  f4
5   0   0   0     4   0   0   0     1   1   0   0    цвет тройки
4   1   0   0     3   1   0   0     1   1   0   0    цвет тройки
4   0   1   0     3   0   1   0     1   1   0   0    цвет тройки
3   2   0   0     3   1   0   0     1   1   0   0    цвет тройки
3   1   1   0     3   0   1   0     1   1   0   0    цвет тройки

3   0   2   0     2   0   2   0     1   0   1   0    масти разноцветых пар

3   0   1   1     2   0   1   1     1   1   0   0    цвет одинокой пары
2   1   1   1     2   0   1   1     1   1   0   0    цвет одинокой пары

2   2   1   0     2   1   1   0     0   1   1   0    масти разноцветных карт
2   1   2   0     2   1   1   0     0   1   1   0    масти разноцветных карт
--------------------------------------------------------------------------------
*)

unit ShaCardU;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Label1: TLabel;
   Label2: TLabel;
   procedure NewCards;
   procedure HideCard;
   procedure FindCard;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 end;

var
 Form1: TForm1;



 
Sha ©   (2004-05-03 09:24) [132]

implementation

{$R *.dfm}

const
 Captions: array[0..2] of string= ("Новый расклад","Спрятать","Угадать");

var
 Edits: array[0..5] of TEdit;

type
 TCardSet= set of 0..51;

 TRule= record
   c, d, f, no: integer;
   end;

const
 Rules: array[0..9] of TRule=(
   (c:$05000000; d:$04000000; f:$01010000; no:0),  //0 цвет тройки
   (c:$04010000; d:$03010000; f:$01010000; no:0),  //1 цвет тройки
   (c:$04000100; d:$03000100; f:$01010000; no:0),  //2 цвет тройки
   (c:$03020000; d:$03010000; f:$01010000; no:0),  //3 цвет тройки
   (c:$03010100; d:$03000100; f:$01010000; no:0),  //4 цвет тройки

   (c:$03000200; d:$02000200; f:$01000100; no:1),  //5 масти разноцветых пар

   (c:$03000101; d:$02000101; f:$01010000; no:2),  //6 цвет одинокой пары
   (c:$02010101; d:$02000101; f:$01010000; no:2),  //7 цвет одинокой пары

   (c:$02020100; d:$02010100; f:$00010100; no:3),  //8 масти разноцветных карт
   (c:$02010200; d:$02010100; f:$00010100; no:3)); //9 масти разноцветных карт

 Permutations: array[0..23] of integer= (
   $00010203, $00010302, $00020103, $00020301, $00030102, $00030201,
   $01000203, $01000302, $01020003, $01020300, $01030002, $01030200,
   $02000103, $02000301, $02010003, $02010300, $02030001, $02030100,
   $03000102, $03000201, $03010002, $03010200, $03020001, $03020100);

//Показать карты
procedure ShowCards(Count: integer);
const
 Names: array[0..12] of string= ("2","3","4","5","6","7","8","9","10","В","Д","К","Т");
 Kinds: array[0..3] of string= ("ч","б","п","к");
var
 i, t: integer;
begin;
 for i:=0 to Count-1 do begin;
   t:=Edits[i].Tag;
   if (t>=0) and (t<52) then Edits[i].Text:=Format("%s %s",[Names[t div 4],Kinds[t mod 4]]);
   end;
 for i:=Count to High(Edits) do Edits[i].Text:="";
 end;

//Подсчет количества карт каждой масти и сортировка
procedure CountCards(var m, n: integer; Count: integer);
var
 mb: array[0..3] of byte absolute m; //количество карт каждой масти
 nb: array[0..3] of byte absolute n; //номера мастей
 b: byte; //временная переменная для обмена байтов
 i: integer; //временная
begin;
 //Подсчет карт каждой масти
 m:=0; for i:=0 to Count-1 do inc(mb[Edits[i].Tag mod 4]);

 //Сортировка мастей
 n:=$03020100;
 if mb[3]<mb[2] then begin;
    b:=mb[3]; mb[3]:=mb[2]; mb[2]:=b; b:=nb[3]; nb[3]:=nb[2]; nb[2]:=b;
   end;
 if mb[1]<mb[0] then begin;
    b:=mb[1]; mb[1]:=mb[0]; mb[0]:=b; b:=nb[1]; nb[1]:=nb[0]; nb[0]:=b;
   end;
 if (mb[3]<mb[1]) or (mb[3]=mb[1]) and (mb[2]<mb[0]) then begin;
    b:=mb[3]; mb[3]:=mb[1]; mb[1]:=b; b:=nb[3]; nb[3]:=nb[1]; nb[1]:=b;
    b:=mb[2]; mb[2]:=mb[0]; mb[0]:=b; b:=nb[2]; nb[2]:=nb[0]; nb[0]:=b;
   end;
 end;

//Определение активного подмножества карт
procedure DefineCardSet(var cs: TCardSet; Kind1, Kind2: integer);
var
 i, t: integer; //временные
begin;
 //Метим масти, которым может принадлежать загадка
 cs:=[];
 for i:=0 to 51 do begin;
   t:=i mod 4;
   if (t=Kind1) or (t=Kind2) then include(cs,i);
   end;

 //Стираем метки у открытых карт
 for i:=0 to 3 do exclude(cs,Edits[i].Tag);
 end;

//Сортировка открытых карт, результат - несортированные упакованные номера открытых карт
function PackAndSortCards(var Sorted: integer): integer;
var
 eb: array[0..3] of byte absolute Sorted; //номера открытых карт
 b: byte; //временная переменная для обмена байтов
 i, t: integer; //временные
begin;
 Result:=0; for i:=0 to 3 do Result:=(Result shl 8) + Edits[i].Tag;
 Sorted:=Result;
 repeat;
   t:=0;
   for i:=0 to 2 do if eb[i]>eb[i+1] then begin;
     inc(t); b:=eb[i]; eb[i]:=eb[i+1]; eb[i+1]:=b;
     end;
   until t=0;
 end;

//Сгенерировать новый расклад
procedure TForm1.NewCards;
var
 i, j, t, ct: integer;
begin;
 for i:=0 to 4 do begin;
   repeat;
     ct:=0;
     t:=Random(52);
     for j:=0 to i-1 do if Edits[j].Tag=t then inc(ct);
     until ct=0;
   Edits[i].Tag:=t;
   end;
 ShowCards(5);
 Edits[4].Color:=clWindow;
 Label1.Caption:="";
 Label2.Caption:="";
 end;

//Выбрать и спрятать одну из 5 карт
procedure TForm1.HideCard;
const
 RuleNames: array[0..3] of string= ("Цвет тройки", "Масти разноцветных пар",
                                    "Цвет одинокой пары", "Масти разноцветных карт");
var
 m: integer; mb: array[0..3] of byte absolute m; //количество карт каждой масти
 n: integer; nb: array[0..3] of byte absolute n; //номера мастей
 e: integer; eb: array[0..3] of byte absolute e; //номера открытых карт
 x: integer; xb: array[0..3] of byte absolute x; //перестановка
 i, t: integer;         //временные
 RuleLine: integer;     //номер расклада
 Kind1, Kind2: integer; //возможные масти
 Index: integer;        //порядковый номер карты-загадки в подмножестве
 cs: TCardSet;          //меченые карты
begin;
 //Подсчет количества карт каждой масти и сортировка
 CountCards(m,n,5);

 //Определение номера расклада
 RuleLine:=0; for i:=1 to High(Rules) do if Rules[i].c=m then RuleLine:=i;

 //Определение возможных мастей
 t:=Rules[RuleLine].c-Rules[RuleLine].d;
 Kind1:=0; while not odd(t) do begin; t:=t shr 8; inc(Kind1); end;
 t:=Rules[RuleLine].f-(Rules[RuleLine].c-Rules[RuleLine].d);
 Kind2:=0; while not odd(t) do begin; t:=t shr 8; inc(Kind2); end;
 Kind1:=nb[Kind1]; //Масть карты-загадки
 Kind2:=nb[Kind2]; //Вторая возможная масть

 //Загадаем карту
 for i:=0 to 3 do begin;
   t:=Edits[i].Tag;
   if t mod 4=Kind1 then begin;
     Edits[i].Tag:=Edits[4].Tag; Edits[4].Tag:=t; break;
     end;
   end;

 //Определим активное подмножество карт
 DefineCardSet(cs,Kind1,Kind2);

 //Определяем порядковый номер загаданной карты в подмножестве (начиная с 0)
 i:=0; Index:=0; t:=Edits[4].Tag;
 while true do begin;
   if i=t then break;
   if i in cs then inc(Index);
   inc(i);
   end;

 //Сортировка открытых карт
 PackAndSortCards(e);

 //Располагаем открытые карты в порядке соответствующем Index
 x:=Permutations[Index]; for i:=0 to 3 do Edits[i].Tag:=eb[xb[i]];

 //Показываем
 ShowCards(5);
 Edits[4].Tag:=-1; //Сотрем номер загаданной карты для большей скрытности
 Edits[4].Color:=clBtnFace;
 Label1.Caption:=Format("Расклад %d",[RuleLine]);
 Label2.Caption:=RuleNames[Rules[RuleLine].no];
 end;



 
Sha ©   (2004-05-03 09:25) [133]

//Угадать загаданную карту.
procedure TForm1.FindCard;
var
 m: integer; mb: array[0..3] of byte absolute m; //количество карт каждой масти
 n: integer; nb: array[0..3] of byte absolute n; //номера мастей
 e, ePacked: integer; eb: array[0..3] of byte absolute e; //номера открытых карт
 x: integer; xb: array[0..3] of byte absolute x; //перестановка
 i, t: integer;         //временные
 RuleLine: integer;     //номер расклада
 Kind1, Kind2: integer; //возможные масти
 Index: integer;        //порядковый номер карты-загадки в подмножестве
 cs: TCardSet;          //меченые карты
begin;
 //Подсчет количества карт каждой масти и сортировка
 CountCards(m,n,4);

 //Определение номера расклада
 RuleLine:=0; for i:=1 to High(Rules) do if Rules[i].d=m then RuleLine:=i;

 //Определение возможных мастей
 t:=Rules[RuleLine].f;
 Kind1:=0;
 while not odd(t) do begin; t:=t shr 8; inc(Kind1); end;
 Kind2:=Kind1; t:=t and (-256);
 while not odd(t) do begin; t:=t shr 8; inc(Kind2); end;
 Kind1:=nb[Kind1]; //Первая возможная масть
 Kind2:=nb[Kind2]; //Вторая возможная масть

 //Определим активное подмножество карт
 DefineCardSet(cs,Kind1,Kind2);

 //Сортировка открытых карт
 ePacked:=PackAndSortCards(e);

 //Вычисляем порядковый номер загаданной карты в подмножестве
 Index:=0;
 while true do begin;
   x:=Permutations[Index];
   t:=0;
   for i:=0 to 3 do t:=(t shl 8) + eb[xb[i]];
   if ePacked=t then break;
   inc(Index);
   end;

 //Отсчитываем загаданную карту
 i:=0;
 while true do begin;
   if i in cs then begin;
     if Index=0 then break;
     dec(Index);
     end;
   inc(i);
   end;

 //Показываем
 Edits[5].Tag:=i;
 ShowCards(6);
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
 t: integer;
begin;
 t:=Button1.Tag;
 case t of
   0: begin; t:=1; NewCards; end;
   1: begin; t:=2; HideCard; end;
   2: begin; t:=0; FindCard; end;
   else exit;
   end;
 Button1.Tag:=t;
 Button1.Caption:=Captions[t];
 end;

procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin;
 Button1.Tag:=0;
 Button1.Caption:=Captions[0];
 for i:=0 to 5 do begin;
   Edits[i]:=TEdit.Create(Self);
   with Edits[i] do begin;
     Parent:=Self; Top:=16; Width:=33; Left:=8+40*i; ReadOnly:=true;
     end;
   end;
 Edits[5].Color:=clBtnFace;
 Label1.Caption:="";
 Label2.Caption:="";
 Self.Caption:="АРМ фокусника";
 Randomize;
 end;

end.

---------------

object Form1: TForm1
 Left = 189
 Top = 102
 Width = 260
 Height = 130
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object Label1: TLabel
   Left = 8
   Top = 64
   Width = 32
   Height = 13
   Caption = "Label1"
 end
 object Label2: TLabel
   Left = 8
   Top = 80
   Width = 32
   Height = 13
   Caption = "Label2"
 end
 object Button1: TButton
   Left = 88
   Top = 48
   Width = 153
   Height = 25
   Caption = "Button1"
   TabOrder = 0
   OnClick = Button1Click
 end
end


 
MBo ©   (2004-05-03 12:02) [134]

>Sha
Вау! :)
Я тоже думал о реализации [114-116] для исследования ;)

Я прорабатывал еще такой вариант - для раскладов типа 5 в 0 или 4 в 1 используем ключ по масти, а для раскладов с наличием 3-4 мастей - используем тот факт, что при этом карты более равномерно распределены по общему интервалу 1-52, и, возможно, удастся однозначно удалять промежуточные карты (но это пока только в голове)


 
2963   (2004-05-03 12:19) [135]

to MBo
Классные задачки...где взял не подскажешь?
или выложи еще...


 
MBo ©   (2004-05-03 14:10) [136]

>2963
>где взял не подскажешь?
большинство запомнилось из Гарднера, Перельмана, еще каких-то книг, что-то  в инете встречал.
>или выложи еще...
В прошлую пятницу был еще набор задачек.


 
Sha ©   (2004-05-04 11:49) [137]

MBo ©   (03.05.04 12:02) [134]

Похожие мысли занимали и мой досуг.
Оказывается, задача #2 допускает обобщение на случай загадывания
одной из m+1 карт, извлеченных из колоды, содержащей 2*m!+m карт m мастей.
Решение настолько простое, что найти его может даже школьник.
Не хочу лишать тебя удовольствия :)


 
Sha ©   (2004-05-05 10:56) [138]

Не знаю, прочитал ли кто предыдущий пост.
Там был намек на другой вариант решения, более красивый. Его легко нащупать для m=2 и m=3.

Ниже приводится решение задачи Sha © (04.05.04 11:49) [137] и ее частного случая - задачи #2.
Желающие решить задачу самостоятельно могут уменьшить яркость своих мониторов :)

Среди m+1 карт m мастей обязательно должны найтись 2 или более карт одной масти. Мысленно расположим все возможные карты данной масти по окружности в порядке старшинства (аналогично тому, как это сделано на циферблате часов) и как-нибудь пометим карты, присутсвующие в выборке. Вычислим расстояние (по ходу часовой стрелки) от каждой помеченной карты до следующей. Т.к. общее количество карт одной масти, равное (2*m!+m)/m=2*(m-1)!+1, является длиной окружности, а количество карт этой масти в выборке не менее двух, то минимальное расстояние между картами d лежит в интервале 1<=d<=(m-1)!
Помощник первой открывает карту, имеюшую минимальное расстояние до следующей карты, загадывает эту самую следующую карту и,  располагая рядом с первой остальные выбранные (m-1) карт одним из (m-1)! способов, сообщает фокуснику расстояние до загаданной карты.


 
MBo ©   (2004-05-05 13:04) [139]

>Sha ©   (05.05.04 10:56) [138]
Вот где сила, как оказалось -  в циклическом заворачивании мастевого пространства :)))

И нетривиально, конечно, то, что не нужно все m карт использовать для указания дистанции - такое "ухудшение" даже в голову не приходило ;(


 
Sha ©   (2004-05-05 13:22) [140]

MBo ©   (05.05.04 13:04) [139]

Еще один интересный вопрос.
Оба решения предполагают одинаковый размер колоды для 2-х и 4-х мастей. Так ли это будет для 6, 8 и более мастей?


 
MBo ©   (2004-05-05 13:33) [141]

>Sha ©   (05.05.04 13:22) [140]
Не понял ;((


 
Sha ©   (2004-05-05 13:50) [142]

MBo ©   (05.05.04 13:33) [141]

Например, если колода состоит из 4 мастей, то оба решения дают ответ для количества карт в каждой масти меньшего или равного 13 или количества карт в колоде <= 52. Т.е. максимальная мощность колоды совпадает для этих решений.

Вопрос: а каково максимальное количество карт в колоде в случае 6 мастей для каждого из этих решений?



Страницы: 1 2 3 4 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.82 MB
Время: 0.045 c
1-1084361537
TEXHAPb
2004-05-12 15:32
2004.05.23
Как простым способом организовать "горячие клавиши" (shortcuts)?


1-1083853109
Анонимщик
2004-05-06 18:18
2004.05.23
Критические секции


6-1080819517
bytebutcher
2004-04-01 15:38
2004.05.23
Подскажите как использовать TIdTunnelMaster и TIdTunnelSlave?


4-1081006648
Kor@l
2004-04-03 19:37
2004.05.23
Удаление


1-1083742315
KillOfCats
2004-05-05 11:31
2004.05.23
DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский