Правильная четырехугольная призма. Правильная четырехугольная призма Даны 2 коробки имеющие форму

Которую я нашел на сайте компании DataGenetics. Все ошибки по данной статье присылайте, пожалуйста, в личные сообщения.

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

Задача

Тюремщик идет в секретную комнату и подготавливает 100 коробок с крышками. На каждую коробку он наносит числа с нумерацией от 1 до 100. Затем он приносит 100 бумажных табличек, по числу заключенных, и нумерует эти таблички от 1 до 100. После этого он перемешивает 100 табличек и помещает в каждую коробку по одной табличке, закрывая крышку. Заключенные не видят, как тюремщик выполняет все эти действия.

Соревнование начинается, тюремщик отводит каждого заключенного по одному в комнату с коробками и говорит заключенным, что они должны найти коробку, в которой будет находиться табличка с номером заключенного. Заключенные пытаются найти табличку со своим номером, открывая коробки. Каждому разрешается открыть до 50-ти коробок; если каждый из заключенных найдет свой номер, то заключенных отпустят, если хотя бы один из них не найдет свой номер за 50 попыток, то все заключенные умрут.

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

Так какой же шанс, что заключенных помилуют?

  • После открытия коробки заключенным и проверки им таблички она помещается обратно в коробку и крышка снова закрывается;
  • Местами таблички менять нельзя;
  • Заключенные не могут оставлять друг другу подсказки или как-то взаимодействовать друг с другом после начала испытания;
  • Заключенным разрешается обсудить стратегию до начала испытания.

Какая самая оптимальная стратегия для заключенных?

Дополнительный вопрос:

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

Решение маловероятно?

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

Шансы одного заключенного - 50:50. Всего 100 коробок и он может открыть до 50-ти коробок в поисках своей таблички. Если он будет открывать коробки наугад и откроет половину всех коробок, то найдет свою табличку в открытой половине коробок, или его табличка останется в закрытых 50-ти коробках. Его шансы на успех - ½.

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

Для трех заключенных шансы будут ½ × ½ × ½ = ⅛.

Для 100 заключенных, шансы следующие: ½ × ½ × … ½ × ½ (перемножение 100 раз).


Это равняется

Pr ≈ 0.000000000000000000000000000008

То есть это очень маленький шанс. При таком раскладе, скорее всего, все заключенные будут мертвы.

Невероятный ответ

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

Больше чем 30% для всех 100 заключенных! Да это даже больше, чем шансы для двоих заключенных, при условии, что те будут открывать ящики наугад. Но как это возможно?

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

Решение

Для начала расскажу решение, затем разъясню, почему оно работает.

Стратегия крайне легкая. Первый из заключенных открывает коробку с тем номером, который написан на его одежде. Например, заключенный номер 78 открывает коробку с номером 78. Если он находит свой номер на табличке внутри коробки, то это здорово! Если нет, то он смотрит номер на табличке в «своей» коробке и затем открывает следующую коробку с этим номером. Открыв вторую коробку, он смотрит номер таблички внутри этой коробки и открывает третью коробку с этим номером. Далее просто переносим эту стратегию на оставшиеся ящики. Для наглядности смотрим картинку:


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

Красота этой математической задачки - не только знать результат, но и понять, почему эта стратегия работает.

Так почему же стратегия работает?

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


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

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


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

Исследуя коробки по этой цепочке по кругу, они гарантированно в конечном итоге найдут свою табличку.

Единственный вопрос остается в том, найдут ли они свою табличку за 50 ходов.


Длина цепочек

Для того, чтобы все заключенные прошли испытание, максимальная длина цепочки должна быть меньше, чем 50 коробок. Если цепочка длиннее, чем 50 коробок, заключенные, имеющие номера из этих цепочек провалят испытание - и все заключенные будут мертвы.

Если максимальная длина самой длинной цепочки меньше, чем 50 коробок, тогда все заключенные пройдут испытание!

Задумайтесь об этой на секунду. Выходит, что может быть только одна цепочка, которая длиннее 50-ти коробок при любом раскладе табличек (у нас всего 100 коробок, так что если одна цепочка длиннее 50-ти, то остальные будут короче, чем 50 в итоге).


Шансы на расклад с длинной цепочкой

После того, как вы убедили себя, что для достижения успеха максимальная длина цепи должна быть меньше или равна 50, и может быть только одна длинная цепочка в любом наборе, мы можем вычислить вероятность успеха прохождения испытания:

Еще немного математики

Итак, что нам нужно, чтобы выяснить вероятность существования длинной цепочки?

Для цепочки с длиной l, вероятность того, что коробки будут вне этой цепочки равно:

В этой коллекции чисел существует (l-1)! способов расположить таблички.

Оставшиеся таблички могут быть расположены (100-l)! способами (не забываем, что длина цепочки не превосходит 50).

Учитывая это, число перестановок, которые содержат цепочку точной длины l: (>50)


Выходит, есть 100(!) способов раскладок табличек, так что вероятность существования цепочки длиной l равно 1/l. Кстати, этот результат не зависит от количества коробок.

Как мы уже знаем, может быть только один вариант, при котором существует цепочка длиной > 50, так что вероятность успеха рассчитывается по данной формуле:

Результат

31.18% - вероятность того, что размер самой длинной цепочки будет меньше 50 и каждый из заключенных сможет найти свою табличку, учитывая лимит в 50 попыток.

Вероятность того, что все заключенные найдут свои таблички и пройдут испытание 31.18%

Ниже приведен график, показывающий вероятности (по оси ординат) для всех цепей длины l (на оси абсцисс). Красный цвет означает все «неудачи» (данная кривая здесь - это просто график 1/l). Зеленый цвет означает «успех» (расчет немного сложнее для этой части графика, так как существует несколько способов для определения максимальной длины <50). Общая вероятность складывается из зеленых столбцов в 31.18% шанс на спасение.


Гармоническое число (эта часть статьи для гиков)

В математике n-м гармоническим числом называется сумма обратных величин первых n последовательных чисел натурального ряда.


Посчитаем лимит, если вместо 100а коробок мы имеем произвольное большое количество коробок (давайте считать, что у нас есть 2n коробок в итоге).


Постоянная Эйлера-Маскерони - константа, определяемая как предел разности между частичной суммой гармонического ряда и натуральным логарифмом числа.

Так как число заключенных увеличивается, то при условии, если надсмотрщик разрешает заключенным открывать половину всех коробок, то шанс на спасение стремится к числу 30.685%

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

Дополнительный вопрос

Кто-нибудь еще помнит про дополнительный вопрос? Что может сделать наш полезный товарищ, чтобы увеличить шансы на выживание?

Сейчас мы уже знаем решение, так что стратегия тут простая: он должен изучить все таблички и найти самую длинную цепочку из коробок. Если самая длинная цепочка меньше 50-ти, то ему вообще не нужно менять таблички, или поменять их так, чтобы самая длинная цепочка не стала длиннее 50-ти. Тем не менее, если он нашел цепочку длиннее 50-ти коробок, всё, что ему нужно - это поменять содержимое двух коробок из этой цепи, чтобы разбить эту цепочку на две более короткие цепи.

В результате этой стратегии не будет длинных цепочек и все заключенные гарантированно найдут свою табличку и спасение. Так что, поменяв местами две таблички, мы сводим вероятность спасения к 100%!

Вопрос: Определить, поместится ли одна коробка внутри другой


Условие: Даны размеры двух коробок. Определить, поместиться ли одна коробка внутрь другой?!

Ответ:

Сообщение от Joy

максимум 13 влазит

Нет, не 13... Если быть точным, то, то есть, примерно 12,7279... Положить прямоугольник на прямоугольник - это простенькая задачка... А вот воткнуть меньший параллепипед примерно вдоль наибольшей диагонали большего параллепипеда... Это да. Там ещё поиск нужных углов поворота маленькой коробочки вылезает...

Вопрос: Можно ли разместить одну из коробок внутри другой?


Почему то не правильно работает, помогите!!!
вот условие:Есть две коробки, первая размером A1×B1×C1, вторая размером A2×B2×C2. Определите, можно ли разместить одну из этих коробок внутри другой, при условии, что поворачивать коробки можно только на 90 градусов вокруг ребер.
Формат входных данных
Программа получает на вход числа A1, B1, C1, A2, B2, C2.
Формат выходных данных
Программа должна вывести одну из следующих строчек:
Boxes are equal, если коробки одинаковые,
The first box is smaller than the second one, если первая коробка может быть положена во вторую,
The first box is larger than the second one, если вторая коробка может быть положена в первую,
Boxes are incomparable, во всех остальных случаях.
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 #include "iostream" using namespace std; int main() { int a1, a2, b1, b2, c1, c2, m, n, k, z, x, c; cin >> a1; cin >> b1; cin >> c1; cin >> a2; cin >> b2; cin >> c2; if ((a1 >= b1) && (a1 >= c1) && (b1 >= c1) ) { m == a1; n == b1; k == c1; } else { if ((a1 >= b1) && (a1 >= c1) && (b1 <= c1) ) { m = a1; n = c1; k = b1; } } if ((b1 >= a1) && (b1 >= c1) && (a1 >= c1) ) { m = b1; n = a1; k = c1; } else { if ((b1 >= a1) && (b1 >= c1) && (c1 >= a1) ) { m = b1; n = c1; k = a1; } } if ((c1 >= a1) && (c1 >= b1) && (b1 >= a1) ) { m = c1; n = b1; k = a1; } else { if ((c1 >= a1) && (c1 >= b1) && (a1 >= b1) ) { m = c1; n = a1; k = b1; } } if ((a2 >= b2) && (a2 >= c2) && (b2 >= c2) ) { z = a2; x = b2; c = c2; } else { if ((a2 >= b2) && (a2 >= c2) && (b2 <= c2) ) { z = a2; x = c2; c = b2; } } if ((b2 >= a2) && (b2 >= c2) && (a2 >= c2) ) { z = b2; x = a2; c = c2; } else { if ((b2 >= a2) && (b2 >= c2) && (c2 >= a2) ) { z = b2; x = c2; c = a2; } } if ((c2 >= a2) && (c2 >= b2) && (b2 >= a2) ) { z = c2; x = b2; c = a2; } else { if ((c2 >= a2) && (c2 >= b2) && (a2 >= b2) ) { z = c2; x = a2; c = b2; } } if ((m = z) && (n = x) && (k = c) ) { cout << "Boxes are equal" ; } else { if ((m > z) && (n > x) && (k > c) ) { cout << "The first box is larger than the second one" ; } else { if ((m < z) && (n < x) && (k < c) ) { cout << "The first box is smaller than the second one" ; } else { cout << "Boxes are incomparable" ; } } } system ("pause" ) ; return 0 ; }

Ответ: Dimension , Алгоритм решения, сначала мы сортируем длины сторон коробок, чтобы потом их сравнить, но! Мне нужно выполнить всё это через оператор if, очень буду благодарен если хотя бы алгоритм напишите, код я уж сам как нибудь=)

Вопрос: Открыть одну форму внутри другой


Всем доброе время суток. Пилю программку одну и не магу понять как в Form1 на половине формы внутри открыть Form2 и.т.д при нажатии на кнопку в MenuStrip1 как на скриншоте.

Скриншот:

Есть код:

vb.net
1 2 3 4 Private Sub Command1_Click() Form2. Visible = True Form1. Visible = False End Sub

Но он открывает отдельно форму программы, а мне нужно чтоб в самой Form1 (не на всю форму) открывалось окно Form2, Form3 и так далее.

Ответ: Спасибо огромное выручили всё заработало

Теперь буду начинку программы писать.

Добавлено через 22 часа 49 минут
Столкнулся вчера с такой проблемой (весь вечер пытался сам решить но не вышло) код рабочий всё нормально. Но вот в чём беда, не магу переключаться между Form2 Form3 и так далее (в обратном порядке) что можно добавить к этому коду?

vb.net
1 2 3 4 5 6 7 8 9 10 Private Sub Form1_Load(ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles MyBase . Load Me . IsMdiContainer = True End Sub Private Sub ArmorToolStripMenuItem_Click(sender As Object , e As EventArgs) Handles ArmorToolStripMenuItem. Click Form2. MdiParent = Me Form2. Show () Form2. Location = New Point((0 ) - (0 ) , 0 ) Form2. ControlBox = False End Sub

То есть мне надо переключаться между Armor, Power armor и.т.д (скрин проекта вверху)

Заранее спасибо.

Добавлено через 32 минуты
Всё нашол решение

Просто дописать строчку надо.

vb.net
1 Form3. Visible = False

Вопрос: Передача выбраной позиции в datagrid из одной формы в другую


Добрый день.
Интересует возможность передачи текущей выбранной позиции в datagrid (+ используется BindingSource, фактически все данные расположены по таблицам в БД MSSQL) расположенного на одной форме в другой datagrid другой формы.

В чем суть, на основной форме есть datagrid допустим со списком ФИО. Мы выбираем, например, вторую фамилию. Тогда на дополнительно открывающейся форме, в другом datagrid должны открыться все вещи, которыми владеет данное ФИО. Следовательно если мы выбираем третью фамилию в списке, то в дополнительной форме со своим datagrid будут уже данные по этой ФИО.
Внутри одной формы это удается реализовать связями (dataSet.Relations.Add), но при создании дополнительной формы, вторая форма не знает, какая позиция выбрана в datagrid на первой форме.
Спасибо.

Ответ:

Сообщение от gmaksim

В первой форме мы вставляем после InitializeComponent(); данный пункт:

И зачем он там???

Сообщение от gmaksim

SELECT " + id + "FROM Tables2

Такой запрос точно не будет работать

Сообщение от gmaksim

Как это сделать я Вам уже целый день говорю!

Сообщение от Даценд

Если лень/некогда/нехочу, можно глянуть Как передать данные из одной формы в другую

С этого все и началось!!! Среди этих вариантов не нашлось подходящих!!!

Вопрос: Как отрыть одну форму внутри другой, чтоб дочерняя не выходила за рамки родительской?


Пробую так (прочитал в этом форуме) ругается "Форма, указанная как MdiParent для данной формы, не является MdiContainer."

Подскажите, пожалуйста, как это сделать?

Добавлено через 1 час 4 минуты
Здесь я понял как, надо было родительской форме свойству isMDIContainer присвоить true.
Теперь другая проблема, пишет что нельзя создать модальную форму внутри этого контейнера, а мне как раз нужна модальная форма

Ответ: И всё-таки, что делать, если нужна именно дочерняя модальная форма?
Т.е. нужно, чтобы, с одной стороны, форма размещалась в рамках родительской (главного окна приложения), а с другой -чтобы всё приложение "подвисало" до окончания работы с ней?

Вопрос: По заданным двум словам определить, можно ли из букв одного слова составить другое


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

Ответ: В условии задачи сказано. Можно ли из букв одного
слова составить другое. Но ничего не сказано о том,
что слова должны быть равной длины. Иными словами
задание можно интерпретировать так. Возможно ли
из букв одного слова составить другое Любой Длины
лишь бы букв хватило.
Есть такая игра из одного длинного слова составить
кучу меньших по длине. (про. проверена)
первое слово главное. ИЗ него строится второе...

QBasic/QuickBASIC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CLS DIM s1 AS STRING DIM s2 AS STRING DIM s AS STRING INPUT "SLOVO_1 = " ; s1 INPUT "SLOVO_2 = " ; s2 FOR i = 1 TO LEN (s1) s = MID$ (s2, i, 1 ) k = INSTR (s1, s) IF k THEN MID$ (s1, k, 1 ) = " " ELSE PRINT "NO" : END END IF NEXT i PRINT "YES" END

Вопрос: Передать указатель на функцию из одного класса в другой


Доброго времени суток. Долго рылся на форуме и в инете в целом, но так и не нашел ответа на вопрос: как передать указатель на функцию из одного класса в другой. Суть такая:

Есть "Класс1", в нем есть метод "Метод"
Есть "Класс2", объекты которого создаются в классе "Класс1"

Суть заключается в том, что "Класс2" должен иметь возможность вызывать "Метод". Мне кажется, что это проще всего сделать передачей указателя на "Метод" в "Класс2". Но оказалось не все так просто. Можете, пожалуйста, продемонстрировать, как это можно сделать. Ну или может быть есть более простой способ вызывать "Метод", прописанный в "Класс1", из "Класс2".

Ответ: Мда. Все было бы проще, если бы метод класса нужно было вызывать в main, а поскольку это другой класс, то совсем все плохо получается. Я в принципе с самого начала такой исход предполагал, но думал что можно проще. Ладно, и на том спасибо)

Добавлено через 18 часов 1 минуту
Нашел-таки, благодаря Stack Overflow () более простой и не громоздкий метод передачи указателя из одного класса в другой:

C++
1 2 3 4 aircraft Aircraft; boer Boer; Boer.setSomeFun ([ & ] (int v) { Aircraft.source_forSomeFun (v) ; } ) ;

Ответ: 1. Используя паттерн MVVM можно обратиться к ViewModel той View, из которой хотим данные получить (короче пункт 3, MVVM просто удобно на WPF творить, судя по заявлениям).
2. Хмм... Статический класс, методы, переменные, свойства. Из одной формы в другую передавать данные через статический класс.
3. В итоге вижу решение в разделении представления от модели(в общем). Используя что-то из этого можно решить вашу проблему.

Как выглядит правильная четырехугольная призма? и получил лучший ответ

Ответ от Edit Piaf[гуру]
Призма – это многогранник, две грани которой (основания призмы) – равные многоугольники с соответственно параллельными сторонами, а остальные грани - параллелограммы, плоскости которых параллельны прямой. Параллелограммы AabB, BbcC и т. д. называются боковыми гранями; рёбра Aa, Bb, Cc и т. д. называются боковыми рёбрами. Высота призмы – это любой перпендикуляр, опущенный из любой точки основания на плоскость другого основания. В зависимости от формы многоугольника, лежащего в основании, призма может быть соответственно: треугольной, четырёхугольной, пятиугольной, шестиугольной и т. д. Если боковые рёбра призмы перпендикулярны к плоскости основания, то такая призма называется прямой; в противном случае – это наклонная призма. Если в основании прямой призмы лежит правильный многоугольник, то такая призма также называется правильной.
Правильной призмой называется прямая призма, основанием которой является правильный многоугольник, то есть в данном случае - квадрат.
Я нарисовала прямую призму, но она может быть и наклонной

Ответ от Happy End [гуру]
кубик



Ответ от 3 ответа [гуру]

Привет! Вот подборка тем с ответами на Ваш вопрос: Как выглядит правильная четырехугольная призма?

Задание:

В правильной четырёхугольной призме ABCDA 1 B 1 C 1 D 1 на ребре СС 1 взята точка К так, что СК: КС 1 = 1: 2.

а) Постройте сечение призмы плоскостью, проходящей через точки D и К параллельно диагонали основания АС.

б) Найдите угол между плоскостью сечения и плоскостью основания, если CC 1 = 4,5√ 2, АВ = 3.

Решение:

а) Так как призма ABCDA 1 B 1 C 1 D 1 правильная, то ABCD — квадрат и боковые грани — равные прямоугольники.

Построим сечение призмы плоскостью, проходящей через точки D и K параллельно AC. Линия пересечения плоскости сечения и плоскости AA 1 C 1 проходит через точку K и параллельна AC.

В плоскости ACC 1 через точку K проведём отрезок KF параллельно диагонали AC.

Так как грани A 1 ADD 1 и B 1 BCC 1 призмы параллельны, то по свойству параллельных плоскостей линии пересечения плоскости сечения и этих граней параллельны. Проведём PK || FD. Четырёхугольник FPKD — искомое сечение.

б) Найдём угол между плоскостью сечения и плоскостью основания. Пусть плоскость сечения пересекает плоскость основания по некоторой прямой p, проходящей через точку D. AC || FK, следовательно, AC || p (если плоскость проходит через прямую, параллельную другой плоскости, и пересекает эту плоскость, то линия пересечения плоскостей параллельна этой прямой). Так как диагонали квадрата взаимно перпендикулярны, то BD ⊥ AC, а значит,
BD ⊥ p. BD — проекция PD на плоскость ABC, поэтому PD ⊥ p по теореме о трёх перпендикулярах. Следовательно, ∠PDB — линейный угол двугранного угла между плоскостью сечения и плоскостью основания.

FK || p, значит, FK ⊥ PD. В четырёхугольнике FPKD имеем FD || PK и KD || FP, значит, FPKD — параллелограмм, а так как прямоугольные треугольники FAD и KCD равны по двум катетам (AD = DC как стороны квадрата, FA = KC как расстояния между параллельными прямыми AC и F K), то FPKD — ромб. Отсюда PD = 2OD.

По условию CK: KC 1 = 1: 2, тогда KC = 1/3*CC 1 = 4,5√2 / 3 = 1,5√2.

В ΔDKC по теореме Пифагора KD 2 = DC 2 + KC 2 , KD = =
√13,5.

AC = 3√2 как диагональ квадрата, OK = EC = 1/2*AC, OK = 1,5√2.

В ΔKOD по теореме Пифагора OD 2 = KD 2 − OK 2 ,

OD = = 3. PD = 2OD = 6.

В прямоугольном треугольнике PDB cos ∠PDB = BD / PD = 3√2 / 6 = √2 / 2 , следовательно, ∠PDB = 45◦ .

Ответ: 45◦ .