Письма читателей:

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

From: Stanislav Baldanov <steve@mail.ru>
To: sapisoft@yandex.ru
Date: Wednesday, April 03, 2002, 4:07:09 AM
Subject: На счёт целесообразности использования процедуры для обмена значения с помощью xor

Здравствуйте.

Алексей Ильичёв, как вы думаете насколько оправдано использование той процедуры, которую вы представили?

Procedure swap(Var a, b : integer);
begin
a := a xor b;
b := a xor b;
a := a xor b;
end;

Вместо того чтобы использовать:

a := a xor b;
b := a xor b;
a := a xor b;

Вы будете использовать:

swap(a, b);

Да, конечно, это более кратко. Но этим вы напрочь "снесли" то преимущество, которое имеет непосредственное использование xor без вызова процедуры. А именно скорость и элегантность. И та проблема, о которой вы говорите, в таком случае отпадает за невозможностью её возникновения. Да и в вашем варианте она тоже немыслима. Зачем менять значениями а и а? Вы
может, и найдёте алгоритм, при котором возникает такая необходимость, но это будет говорить лишь о недостатках такого алгоритма.

В чём я не прав?

From: Serhiy Serbin <serhiys@adarvo.com>
To: sapisoft@yandex.ru
Date: Thursday, April 04, 2002, 8:29:57 AM
Subject: "Хорошее" решение задачи, предложенной Serhiy Serbin в #25

Привет,

==================
From: Алексей Ильичёв <alex_z77@mail.ru>
To: sapisoft@yandex.ru
Date: Thursday, March 28, 2002, 11:43:46 PM
Subject: "Хорошее" решение задачи, предложенной Serhiy Serbin в #25


Зачем же уравнение прямой? Гораздо проще посмотреть знак векторного
произведения. Формула для нахождения векторного произведения через координаты
векторов очень простая: x2*y1-x1*y2.

Д.З.: посмотреть на примере, какой знак принимает это произведение при левом
повороте ;-)
==================

Ответ: Да конечно, это абсолютно правильное решение, по крайней мере, я так считаю, опираясь на свои математические знания:). Хочу только добавить, что < 0 для левого, больше для правого и = 0 для продолжения. Но все-таки, если взять уравнение прямой, то эту задачу можно решить чуть иначе.

Построим по точкам i - (i+1) уравнение прямой, конечно же, вида Ax + By + C = 0 (y = kx + b - это частный случай). Коэффициенты находятся однозначно, при условии что i и (i+1) - разные точки. Далее вычислим значение функции: Ax(i+2) +
By(i+2) + C, где x(i+2) и y(i+2) соотвественно координаты третей точки. Далее такое же правило, если больше нуля то правый, если меньше то левый, и равно 0 лежит на первоначальной прямой. Я просто хотел дополнительно подчеркнуть, что
знание этого факта также бывает полезно. Хотя согласен, что первое решение более оптимально :))

==================
From: Алексей Ильичёв <alex_z77@mail.ru>
To: sapisoft@yandex.ru
Date: Thursday, March 28, 2002, 11:16:56 PM
Subject: Ответ на ложное обвинение Yuri Y. Roumega, опубликованное в #25

2.Рекомендуется всем, кто не понял перечитать моё послание ещё разок ;-)

Имеется в виду именно процедура обмена и именно её вызов от одной и той же переменной. Процедура не будет разбираться, куда показывают указатели, переданные ей.

Procedure swap(Var a, b : integer);
begin
a := a xor b;
b := a xor b;
a := a xor b;
end;

Если в параметрах вызова указана одна и та же переменная, то после выполнения оператора a := a xor b обнулится не только A,
но и B. Можете проверить на опыте.
Я бы не стал писать об этом, если бы сам несколько раз на этом не погорел...
==================

Ответ: опять-таки повторюсь, я не силен в синтаксисе Паскаля, но догадываюсь, что речь идет, конечно же, о ссылках на параметры. Просто нет смысла вызывать данную функцию, с параметрами по значению. И конечно, следующий вызов будет
ошибочный, если a <> 0: swap(a, a); Поэтому приведенное замечание абсолютно верно, но данное замечание следует рассматривать более в контексте реализации, а не с точки зрения теории:)) Но в любом случае факт полезный.

Best regards,
Serhiy Serbin

From: Jupiter <jupiter_the_god@hotmail.com>
To: "sapisoft" <sapisoft@yandex.ru>
Date: Saturday, April 06, 2002, 4:53:34 PM
Subject:
Тема в теорию

Приветствую!

Я хочу предложить тему (потому что я сам не раз на этом обламывался) - "Работа с большими числами".

Jupiter
jupiter@au.ru

Алексей Шамис: На сервере "vseolimp.by.ru" есть прекрасная статья на эту тему. У кого нет возможности зайти на сайт, напишите, могу бросить по почте. URL: http://vseolimp.by.ru/train/lessons.shtml. А в этом номере предлагаем задачу на эту тему. Детальный разбор читайте на сайте.