Text
                    ИНТЕ РНЕ Т-ЖУРНАЛ
АВГУСТ 2008


Д ОМАШ НЯЯ ЛАБОРАТОРИЯ Интернет-журнал колхозников, инженегров и разнорабочих науки. Адрес редакции: domlab@inbox.com Статьи для журнала направлять , указывая в теме письма «For journal». Журнал содержит материалы найденные в Интернет или написанные для Интернет. Журнал является полностью некоммерческим. Никакие гонорары авторам статей не выплачиваются и никакие оплаты за рекламу не принимаются . Явные рекламные объявления не принимаются, но скрытая реклама, содержащаяся в статьях, допускается и даже приветствуется. Редакция занимается только оформительской деятельностью и никакой ответственности за содержание статей не несет. Статьи не редактируются, орфография статей является делом их авторов. При использовании материалов этого журнала, ссылка на него не является обязательной , но желательной. Никакие претензии за невольный ущерб авторам, заимствованных в Интернет статей и произведений, не принимаются. Произведенный ущерб считается компенсированным рекламой авторов и их произведений. По всем спорным вопросам следует обращаться лично в соответствующие учреждения провинции Свободное государство (ЮАР). При себе иметь, заверенные местным нотариусом, копии всех необходимых документов на африкаанс, в том числе, свидетельства о рождении, диплома об образовании, справки с места жительства, справки о здоровье и справки об авторских правах (в 2-х экземплярах). Август 2008 СОДЕРЖАНИЕ История Не смеется ли Господь Бог? 3 Ликбез Из чего все состоит Как физики изучают элементарные частицы 24 57 Литпортал Аналитик 102 Химия Топливные элементы: прошлое, настоящее, будущее 111 Угольная батарея 115 Опыт создания угольного топливного элемента 120 Практика Получение дрожжей из пивных бутылок 134 Электроника^ Экономичный источник питания счетчика Гейгера 142 Сцинтилляционные детекторы ионизирующего излучения 144 Радиолюбительский дозиметр 147 Прибор непрерывного радиационного контроля 153 Радиационный индикатор в радиоприемнике 158 Датчик радиации в охранной системе 161 Компьютер Visual Basic 6.0 Самоучитель для начинающих 163 Дискуссий Не просто бесплатно Обобществленные истины Большой Адронный Коллайдер 288 294 301 Юмор Анекдот 307 Объявления Информация к размышлению 308 НА ОБЛОЖКЕ Не хотите погадать: пронесет — не пронесет, пронесет — не пронесет.... Речь идет о Большом Андронном Коллайдере. Подробности смотрите в разделе «Дискуссии». Впервые, после испытания первой атомной бомбы, мы рискуем всей планетой. Тогда, 63 года назад, Роберт Опеннгеймер, отец американской бомбы, боялся, что цепная реакция может охватить всю планету. Пронесло.
История НЕ СМЕЁТСЯ ЛИ ГОСПОДЬ БОГ? Л.Б. Окунь (в сокращении) 1. Введение Формула Е = тс2 является, пожалуй, самой знаменитой формулой в мире. В сознании сотен миллионов людей она связана с устрашающим атомным оружием. В сознании миллионов она является символом теории относительности. Многочисленные популяризаторы науки убеждают своих читателей, слушателей и зрителей в том, что в согласии с этой формулой масса любого тела (любой частицы) возрастает с увеличением его скорости. И только немногие физики — специалисты в области физики элементарных частиц — знают, что истинная формула Эйнштейна — это Е0 = тс2, где Е0 — энергия, содержащаяся в покоящемся теле, и что масса тела не зависит от скорости, с которой оно движется и, следовательно, не зависит от его кинетической энергии. Большинство физиков, знакомых со специальной теорией относительности, знают, что в ней энергия Е и импульс р свободно движущегося тела связаны соотношением Т?2 ^2 2 _ 2 4 Е — р с = m с где m — масса тела. Однако не все они осознают, что эта формула несовместима с Е = тс2. Еще меньшее число знает, что она абсолютно совместима с Ео = тс2, поскольку Е0 — это значение Е при р = 0. Данная статья написана для тех, кто хотел бы не заблудиться в "трех соснах" этих трех формул, и хотел бы лучше понимать теорию относительности и ее историю.
Когда в 1905 г. Эйнштейн впервые ввел понятие энергии покоя и обнаружил, что масса тела есть мера содержащейся в нем энергии, это так поразило его, что он написал своему другу: "...не смеется ли над этим Господь Бог и не водит ли он меня за нос ". Ниже мы проследим, как на протяжении всей последующей жизни Эйнштейн многократно возвращался к этому вопросу. Мы увидим, как формула Е0 = тс2 прокладывала свой путь в трудах Эйнштейна. Как он тщательно подчеркивал, что масса тела зависит от содержащейся в нем энергии, но никогда не утверждал (в отличие от своих популяризаторов!), что она зависит от его скорости. И тем не менее он ни разу не отмежевался от приписываемой ему формулы Е = тс2, ставшей иконой современной физики в массовом сознании. Если Вы почувствуете, что Вам неинтересно следить за дотошным анализом и сопоставлением текстов, то загляните в конец этой статьи, где сделана попытка кратко описать результаты анализа без излишних технических деталей. Возможно, что после этого подробности неоднократных попыток Эйнштейна прояснить связь между энергией и массой станут Вам более интересны. При написании этой статьи я пользовался первым в мировой литературе Собранием научных трудов Эйнштейна [1]. (Это четырехтомное издание вышло на русском языке в 1965-1967 гг.) Там, где это было возможно, я пользовался1 также многотомным Принстонским собранием. (С 1987 г. в Принстоне стали выходить тома "всех бумаг" Эйнштейна и их переводы на английский язык. К 2007 г. вышло десять томов, пять из которых содержат переписку до 1920 г. и пять — труды до 1921 г.) 2. Пролог. Годы 1881-1904 Хорошо известно, что принцип относительности восходит к Галилею и Ньютону, а теория относительности построена в трудах Лоренца, Пуанкаре, Эйнштейна и Минковского. Представление о массе, зависящей от скорости, возникло в годы, предшествовавшие созданию теории относительности, и в первые годы ее существования. Оно формировалось в статьях Томсона, Хевисайда, Сирла, Абрагама, а также Лоренца и Пуанкаре, пытавшихся согласовать уравнения электромагнетизма Максвелла с уравнениями механики Ньютона. Эти работы стимулировали эксперименты Кауфманна и Бухерера. Обрабатывая свои экспериментальные данные с помощью формул нерелятивистской механики Ньютона, они заключили, что масса возрастает с увеличением скорости. И дело было не только в формулах, но и самом духе, можно сказать, в самой основе нерелятивистской физики, в которой масса есть мера инерции тела. На стыке XIX и XX вв. было еще очень трудно осознать, что эта основа заменяется более общей основой: мерой инерции тела является не его масса, а его полная энергия Е, равная сумме энергии покоя и кинетической энергии. А то обстоятельство, что она при этом входит с множителем 1/с2 подталкивало к тому, что- За исключением первой ссылки, список литературы удален. Специалисты его и так Знают, а не специалисты вряд ли бросятся искать эту литературу на немецком и английском языках. Интересующиеся могут посмотреть оригинал статьи в 5 номере журнала «Успехи физических наук» За этот год.
бы называть Е/с2 массой. Но последующее развитие теории относительности, в основном связанное с именами Эйнштейна, Минковского и Нётер, показало, что понятие массы следует связывать не с полной энергией, а только с энергией покоя . 3. Замечательный 1905 год В 1905 г. Эйнштейн опубликовал три основополагающие статьи, относящиеся к свойствам света и вещества. Он ввел понятие кванта энергии света и с помощью этого понятия объяснил закономерности фотоэффекта, открытые на опыте незадолго до этого. (Величина константы Планка h — кванта действия была известна ранее) . Эйнштейн рассмотрел почти всю совокупность следствий принципа относительности и конечности скорости света. В частности, в он получил формулу преобразования энергии света при переходе от одной инерциальной системы отсчета к другой, движущейся относительно первой со скоростью v: Е' _ 1 - (и/К) cos 0 Е yJl-{v/V)2 Здесь V — скорость света, ф — угол между направлениями движения света и наблюдателя . Он получил выражение для кинетической энергии электрона: где р ~ масса электрона, а и — его скорость. (Кроме того, Эйнштейн вывел выражения для так называемых продольной mi и поперечной mt масс электрона, введенных ранее Абрагамом и Лоренцем, получив ГП\ — (J\-{vfV)2) fi \-{v/vy Последнее выражение, отличающееся от mt Лоренца, неправильное, и Эйнштейн в дальнейшем на нем не настаивал.) Что касается формул для кинетической энергии электрона W и энергии фотона Е , то обе эти формулы Эйнштейн применил в следующей статье при установлении связи между массой и энергией. В этой статье Эйнштейн рассмотрел испускание покоящимся массивным телом двух "количеств света", летящих с равными энергиями L/2 в противоположных направлениях. В этой же статье он впервые ввел энергию покоя массивного тела, обозначив ее до излучения как Е0, а после — как Ei. В силу закона сохранения
энергии Ei = L Затем Эйнштейн рассмотрел тот же процесс в системе отсчета, движущейся относительно тела со скоростью v, и получил для разности кинетических энергий тела до и после излучения При этом он специально оговорил, что из разности кинетических энергий выпадает произвольная аддитивная постоянная С, входящая в выражение для энергии. В течение последующих пятидесяти лет он неоднократно возвращался к вопросу о постоянной С, и мы еще обсудим это. Зависимость от и левой и правой частей равенства одинакова в силу выражения для W. Поскольку скорость v до и после излучения одна и та же, а кинетическая энергия тела уменьшилась, то отсюда непосредственно следует, что масса тела уменьшилась на величину L/V2. Отсюда Эйнштейн сделал вывод: "Масса тела есть мера содержащейся в нем энергии", и заметил, что это, возможно, удастся проверить в распаде радия. Обращает на себя внимание и заглавие статьи: "Зависит ли инерция тела от содержащейся в нем энергии?". В сочетании с ее содержанием оно указывает на то, что Эйнштейн считал именно массу тела мерой его инерции. А это справедливо лишь в ньютоновском приближении. В теории же относительности, как мы знаем сегодня, мерой инерции тела является его полная энергия Е: чем больше полная энергия тела, тем больше его инерция. (Под мерой инерции здесь я имею в виду коэффициент пропорциональности между импульсом и скоростью. Единого коэффициента пропорциональности между силой и ускорением в теории относительности нет. Это установили еще Абрагам и Лоренц, когда ввели продольную и поперечную массы.) Эйнштейн считал, что энергия свободного тела в теории относительности определена лишь с точностью до аддитивной постоянной, подобно потенциальной энергии в ньютоновской механике. Это, по-видимому, привело его к недооценке собственного революционного шага — введения в физику понятия энергии покоя. Дескать, ничего особенного нет в том, что есть энергия покоя Е0, если энергия определена с точностью до С. Но, как мы знаем сегодня, в созданной им теории нет места для С. В теории относительности энергия и импульс свободной частицы определены абсолютно однозначно соотношением Е2 — р2с2 = т2с4, к которому мы еще не раз вернемся. 4. "Не водит ли он меня за нос?" Открытие, что масса зависит от энергии, так поразило Эйнштейна, что он пишет своему другу Конраду Габихту: "Еще мне пришло в голову одно следствие, вытекающее из электродинамического исследования. Принцип относительности в связи с основными максвелловскими уравнениями требует, в частности, чтобы
масса была непосредственной мерой энергии тела. Свет переносит массу. Заметное уменьшение массы должно происходить у радия. Мысль забавная и заманчивая. Не знаю только, не смеется ли надо мной Господь Бог, не водит ли он меня за нос". Похоже, что Бог продолжает водить за нос истолкователей теории относительности до сих пор. 5. Годы 1906-1910. Минковский Эйнштейн опубликовал в 1906 г. две статьи по теории относительности — он рассмотрел перенос массы светом внутри полого цилиндра от одного торца к другому. Чтобы цилиндр как целое не сдвинулся, он потребовал, чтобы свет с энергией Е обладал массой E/V2, воспроизведя тем самым результат Пуанкаре 1900 г. Видимо, он считал недопустимым, чтобы переносчик энергии и массы сам не имел массы, был безмассов. Он рассмотрел метод определения отношения продольной и поперечной масс электрона, которые ранее ввели Лоренц и Абрагам. Таким образом, эти статьи представляли собой шаг назад в вопросе о массе. В 1907 г. Эйнштейн опубликовал четыре статьи по теории относительности. В первой из них обсуждалась частота излучения атома. Во второй подчеркивалось различие между принципом относительности и теорией относительности. Свои работы он считал относящимися к принципу относительности, подобному принципам термодинамики. Что касается теории относительности, то он полагал, что эту теорию еще предстоит построить. Для обсуждаемого нами вопроса особенно важна статья, в которой был сформулирован принцип эквивалентности массы и энергии: "Следует отметить, что упрощающее предположение pV2 = е0 является одновременно выражением принципа эквивалентности массы и энергии..." Упрощающее предположение, о котором здесь идет речь, — это выбор произвольной постоянной в выражении для энергии. Самая подробная статья из опубликованных в 1907 г., состоит из пяти частей: 1. Кинематическая часть; 2. Электродинамическая часть; 3. Механика материальной точки (электрона); 4. К механике и термодинамике систем; 5. Принцип относительности и тяготение. Особый интерес для нас представляют части 4 и 5. В части 4 обсуждается аддитивная постоянная в энергии и показывается, что она не входит в соотношение между импульсом, энергией и скоростью тела. Часть 5 заключается словами: "Таким образом, выведенная теорема о том, что энергии Е соответствует масса величиной Е/с2, выполняется не только для инертной, но и для тяготеющей массы, если остается в силе предположение, введенное в § 17". С одной стороны, в этой фразе утверждается, что как мерой инерции, так и источником гравитации является именно энергия, а не масса. А с другой стороны, ее можно понять и так, что фотон с энергией Е имеет инертную и гравитационную массы, равные Е/с2. Эта неоднозначность интерпретации до сих пор порождает ожесточенные споры. В 1908 г. Эйнштейн совместно с И. Лаубом опубликовал две статьи по электродинамике движущихся макроскопических тел. Хотя эти статьи имеют отношение к теории относительности, тем не менее, обсуждаемой нами проблемы о соотношении между энергией и массой они не затрагивают. Важнейшей вехой в развитии теории относительности стал доклад Германа Мин-
ковского, сделанный в 1908 г. В нем впервые была предложена четырехмерная пространственно-временная формулировка теории относительности. Как известно, в этой формулировке масса частицы является величиной, независящей от ее скорости . Как ни парадоксально, тогда же появилась первая работа Льюиса, в которой массой была объявлена величина Е/с2. Дальнейшее развитие и пропаганду эта точка зрения получила в статьях Льюиса и Толмена. Статья Эйнштейна, опубликованная в 1909 г. , не касалась вопроса о массе и энергии. Но в других статьях, опубликованных тогда же, содержатся высказывания, проливающие яркий свет на его взгляды по этому вопросу. Так, в статье, содержащей текст его первого публичного выступления (на съезде немецких естествоиспытателей в Зальцбурге), Эйнштейн пишет: «В вышедшем в 1902 году превосходном учебнике2 физики Хвольсона, во Введении об эфире говорится: "Вероятность гипотезы о существовании этого агента почти граничит с достоверностью". Но сегодня гипотезу эфира мы должны считать уже устаревшей». И далее: "... инертная масса тела при испускании света уменьшается... Энергия и масса оказываются такими же эквивалентными величинами, как теплота и механическая энергия... теория относительности изменяет наши взгляды на природу света в том отношении, что свет выступает в ней не в связи с гипотетической средой, но как нечто существующее самостоятельно, подобное веществу". В 1910 г. в статьях Эйнштейн и Хопф обсуждали применение теории вероятностей при рассмотрении свойств излучения. Тогда же Эйнштейн опубликовал во французском журнале большой обзор по теории относительности, посвященный в основном преобразованиям пространственных координат и времени с кратким изложением идей Минковского о четырехмерном мире. Только в самом конце статьи он коснулся того, что "масса любого тела зависит от содержащейся в нем энергии... К сожалению, изменения массы W/c2 настолько малы, что в настоящее время нет никакой надежды обнаружить их экспериментальным путем". То, что под содержащейся в теле энергией W он понимает энергию покоя, Эйнштейн не оговаривает. 6. Годы 1911-1915. На пути к общей теории относительности В 1911 г. Эйнштейн опубликовал три статьи по теории относительности. Он обсудил распространение света в гравитационном поле, исходя из того, что фотон с энергией Е имеет инертную и тяжелую массы, равные Е/с2, и получил угол отклонения света в поле Солнца, равный 0,83 дуговой секунды, что в два раза меньше правильного значения, которое он выведет на основе общей теории относительности в 1915 г. (Отмечу, что это же "половинное значение" получил Зольднер еще в 1804 г., но Эйнштейн об этом не Знал, так как статья Зольднера была прочно забыта вскоре после ее публикации.) 2 В 1902 г. был опубликован немецкий перевод Курса, физики
В конце обзорного доклада, в основном посвященного часам и линейкам в теории относительности, Эйнштейн говорит об объединении закона сохранения массы с законом сохранения энергии: "Каким бы странным ни казался этот результат, следует указать, что в некоторых частных случаях данные, известные из опыта, и без теории относительности позволяют с уверенностью заключить, что инертная масса увеличивается с ростом энергии". Возможно, что при этом он имел в виду опыты Кауфманна и Бухерера. Но тогда можно было бы думать, что он считал, что масса возрастает с увеличением и кинетической энергии и, следовательно, скорости . В одной заметке обсуждается сокращение длины движущегося стержня. Работы Эйнштейна в этот период в основном представляют собой попытки создать общую теорию относительности, включающую гравитацию. Специальной теории относительности посвящены только лекции. В высказываниях Эйнштейна, относящихся к 1912 г., опять можно проследить отмеченную выше двойственность интерпретации массы, с одной стороны, как эквивалента энергии покоя и, с другой, — как меры инерции. В них содержится утверждение, что m следует рассматривать как характеристическую константу массивной точки, которая не меняется при движении. Вместе с тем говорится, что энергия свободной частицы определена с точностью до произвольной аддитивной константы. И, тем не менее, тс2 равно энергии покоя. В большой статье, опубликованной в 1913 г. совместно с М. Гроссманом, Эйнштейн продолжает обсуждать пропорциональность инертной и тяжелой масс, с чрезвычайно высокой точностью выявленную в опытах Этвеша, и рассматривает зависимость скорости света с от гравитационного потенциала. В 1914 г. Эйнштейн опубликовал Заметку, в которой нашли отражение его взгляды на понятие массы. К тому же времени относится и рукопись конспекта его лекций по специальной теории относительности. Он обсуждает вклад гравитационного поля в тяжелую массу и инертную массу тела и приходит к выводу, что инерция замкнутой системы полностью определяется ее энергией покоя. В одной приведены выражение 4-вектора энергии-импульса и соотношение Е0/с2 = т, которые следующий раз появятся в работах Эйнштейна лишь в 1921 г. Заметим, что в там m называется массой покоя (Ruhe-masse), что как бы подразумевает, что массы тела в покое и при движении различны. 1915 год ознаменовался завершением создания общей теории относительности в статье этого года. Но уже в предыдущей статье Эйнштейн получил формулы, описывающие два важнейших эффекта этой теории: прецессию перигелия Меркурия и отклонение света гравитационным полем Солнца. Вековое движение перигелия Меркурия (около 40" в столетие), которое нельзя было объяснить влиянием известных тел Солнечной системы, было установлено в 1859 г. Леверье. Эйнштейн вычислил, что общая теория относительности дает 43''. Но поистине всемирно известным стало предсказание угла отклонения света 1,7'' после того, как оно было подтверждено британской экспедицией, наблюдавшей Солнечное затмение в 1919 г.
6. 1917 год. Космологическая константа В 1917 г. вышла популярная книжка. В основном в ней рассказывается о совместном преобразовании пространственных и временных координат. Но там же говорится о кинетической энергии материальной точки, которая равна теперь не mu2/2, а и, следовательно, включает в себя как собственно кинетическую энергию, так и энергию покоя. Далее говорится: "Дорелятивистская физика знала два фундаментальных закона сохранения, а именно: закон сохранения энергии и закон сохранения массы; оба этих фундаментальных закона считались совершенно независимыми друг от друга. Теория относительности слила их в один". И хотя из дальнейшего текста внимательный читатель может заключить, что речь идет о Е0 = тс2, чуть менее внимательный читатель может сделать вывод, что речь идет о Е = тс2. То обстоятельство, что временами Эйнштейн включал энергию покоя в понятие кинетической энергии, не способствовало установлению ясности. Самая знаменитая статья Эйнштейна из вышедших в 1917 г. — это "Вопросы космологии и общая теория относительности". В ней он впервые поставил вопрос о возможной ненулевой плотности энергии вакуума, которую он обозначил буквой А. Эта плотность энергии одинакова во всех точках Вселенной. По существу она представляет собой полностью делокализованную энергию, разлитую по всей Вселенной . Эйнштейн ввел эту космологическую константу, называемую А-членом для того, чтобы описать в общей теории относительности стационарную Вселенную. Но вскоре выяснилось, что достичь устойчивой стационарности на этом пути нельзя. В 1922 г., изучая именно эту работу Эйнштейна, Фридман выдвинул теорию расширяющейся Вселенной. Эйнштейн сначала посчитал, что Фридман ошибся, но потом согласился с ним. В 1929 г. Хаббл представил первые наблюдательные данные в пользу расширения Вселенной. В 1945 г. Эйнштейн опубликовал второе издание работы "Сущность теории относительности" со специальным дополнением "О космологической проблеме", посвященным теории расширяющейся Вселенной. На грани 1970-1980-х годов возникла модель экспоненциально быстрого раздувания (инфляции) ранней Вселенной. Согласно этой модели эффективный космологический член создается в момент образования Вселенной ненулевым вакуумным средним особого скалярного поля, впоследствии превращающегося в энергичные частицы. В 1998-1999 гг. две группы, измерявшие яркости и спектры сверхновых звезд, пришли к выводу, что темп расширения Вселенной ускоряется. Все данные указывают на то, что в обычной материи заключено всего 4 % энергии во Вселенной, около 24 % представлено частицами так называемой темной материи, природа которых пока неизвестна, и приблизительно 70 % всей энергии Вселенной существует в виде космологической постоянной. Ее стали называть темной энергией. Так
возродилась идея эйнштейновского Л-члена. 8. Годы 1918-1920. Нётер В 1918 г. вышла из печати замечательная работа Эмми Нётер, в которой, в частности, было доказано, что динамические законы сохранения следуют из свойств симметрии пространства-времени. Мы знаем, что сохранение энергии является следствием однородности времени, а сохранение импульса — следствием однородности пространства. Сохранение момента импульса (углового момента) следует из изотропии пространства: физика не меняется при вращениях координатных осей в плоскостях ху, yz, zx. Аналогично, лоренц-инвариантность есть следствие того, что физика не меняется при псевдоевклидовых вращениях в плоскостях xt, yt, zt. В письме Гильберту Эйнштейн отметил это открытие Нётер: "Вчера я получил очень интересную статью госпожи Нётер о построении инвариантов. На меня производит впечатление то, что такие вещи можно рассматривать со столь общей точки зрения. Старой гвардии в Гёттингене не повредило бы, если бы ее послали на обучение к госпоже Нётер. Похоже, что она хорошо понимает свое ремесло". Вскоре Эйнштейн направил в печать статью о сохранении энергии в общей теории относительности, в которой, в частности, утверждал, что энергия замкнутой системы играет роль как инертной, так и тяжелой массы. Из публикаций 1919 г. следует отметить краткое сообщение "Проверка общей теории относительности" об открытии отклонения луча света притяжением Солнца и статью в газете Times "Что такое теория относительности?". В ней Эйнштейн написал, в частности: "Наиболее важный результат специальной теории относительности касался инертной массы материальной системы. Оказалось, что инертная масса системы должна зависеть от содержащейся в ней энергии; это привело к представлению о том, что инертная масса является не чем иным, как скрытой энергией. Закон сохранения массы потерял свою независимость и слился с законом сохранения энергии". К 1920 г. относится черновая рукопись большой популярной статьи "Фундаментальные идеи и методы теории относительности, представленные в их развитии", над которой Эйнштейн работал по заказу журнала Nature и которую так и не опубликовал. Тогда же в берлинской газете появилось письмо Эйнштейна "Мой ответ". Письмо начинается словами: «Под претенциозным названием "Рабочее объединение немецких естествоиспытателей" собралось пестрое общество, ближайшая цель которого заключается в том, чтобы развенчать теорию относительности в глазах нефизиков , а вместе с ней и меня как ее основателя». Далее Эйнштейн пишет: "...у меня есть все основания считать, что в основе этой затеи лежит отнюдь не стремление к истине... Отвечаю я только потому, что мои друзья не раз просили меня высказать свою точку зрения. Прежде всего замечу, что, насколько мне известно, сегодня вряд ли можно найти ученого из тех, кто внес заметный вклад в теоретическую физику, который не признавал бы, что теория относительности является логически вполне замкнутой и что она согласуется со всеми твердо установленными данными опыта. Наиболее выдающиеся физики-теоретики — я назову Г.А. Лоренца, А. Зом- мерфельда, М. Лауэ, М. Борна, Дж. Лармора, А. Эддингтона, П. Дебая, П. Ланже-
вена, Т. Леви-Чивиту — стоят на почве теории относительности и сами активно работают над ней... Меня упрекают в том, что я занимаюсь пошлой рекламой теории относительности. Могу лишь заявить, что всю жизнь я любил хорошо обдуманные, трезвые фразы и лаконичный стиль". 9. 1921 год. "Сущность теории относительности" В 1921 г. Эйнштейн был приглашен в Принстон и прочел там лекции, составившие книгу «Сущность теории относительности». В этой книге он впервые максимально публично и однозначно описал, что он понимает под эквивалентностью энергии и массы. В уравнениях он привел выражения для компонент 4-вектора энергии-импульса тела через его массу и скорость. Привел выражение энергии тела в состоянии покоя через его массу: Е0 = тс2. Привел выражение для энергии при малой скорости q: Е = m + mq2/2 + 3mq4/8 + ... (в единицах, в которых с = 1). В тексте между уравнениями он пишет: "Таким образом, масса и энергия сходны по существу — это только различные выражения одного и того же. Масса тела не постоянна; она меняется вместе с его энергией". Затем следует примечание о том, что выделение энергии в радиоактивных распадах обусловлено "эквивалентностью между массой покоя и энергией покоя". При радиоактивном распаде сумма получающихся масс всегда меньше, чем масса распадающегося ядра. Разность проявляется как в виде кинетической энергии порожденных частиц, так и в виде высвобожденной энергии излучения". В этих высказываниях заслуживают быть отмеченными три обстоятельства. Во-первых, при четком определении в уравнениях массы как величины, не зависящей от скорости, использование для нее термина "масса покоя", подразумевающего, что масса зависит от скорости. Во-вторых, отсутствие явного утверждения, что масса изменяется с изменением энергии тела, но не его скорости. В-третьих, утверждение, что масса и энергия — "это только различные выражения одного и того же", в то время как масса — это релятивистский инвариант, т.е. четырехмерный скаляр, а энергия — четвертая компонента четырехмерного импульса. Возможно, именно из-за этих, не вполне точных, слов, сопровождающих вполне четкие формулы, многие читатели до сих пор не видят четкого высказывания в пользу Е0 = тс2 против Е = тс2. Заслуживает упоминания маленькая популярная брошюра «Теория относительности» , автор которой И. Леман благодарит Эйнштейна за ценные указания. Леман восхищается глубиной и изяществом мыслей Минковского и подчеркивает огромность запасов энергии, существующих в форме массы. 10. Годы 1927-1935 В 1927 г. в мире прошли конференции, посвященные двухсотлетию со времени кончины Ньютона. Эйнштейн откликнулся рядом статей. Он писал: "Учение Ньютона не давало никакого объяснения тому в высшей степени замечательному факту, что
вес и инерция тела определяются одной и той же величиной (массой) . Примечательность этого факта поразила самого Ньютона". К 1927 г. в первую очередь благодаря трудам Эйнштейна, стало ясно, что инерция и вес движущегося тела определяются не его массой, а соответственно его энергией Е и величиной ррри/Е, где рц — вектор энергии-импульса. В ньютоновском пределе обе они сводятся к энергии покоя, т.е. к массе. Таково простое объяснение равенства инертной и тяжелой масс в механике Ньютона, которое дает теория относительности. Но Эйнштейн, как мы видим, продолжал пользоваться старой нерелятивистской терминологией. В статье "Фундаментальные понятия физики и изменения, которые произошли в них за последнее время" Эйнштейн сформулировал свое отношение к проблеме причинности в квантовой механике: "Таким образом, теория поля поколебала фундаментальные понятия времени, пространства и материи. Однако одна опора здания оставалась незыблемой: гипотеза причинности. Законы природы таковы, что из состояния мира в некоторый момент времени однозначно следуют все другие его состояния, как в прошлом, так и в будущем. Однако в настоящее время возникли серьезные сомнения относительно понимаемого таким образом принципа причинности. Эти сомнения обусловлены не погоней ученых за новыми сенсациями. Толчком, побудившим к ним, явились факты, кажущиеся противоречащими теории строгой причинности. По-видимому, поле, рассматриваемое как физическая реальность в последней инстанции, не позволяет должным образом объяснить отдельные факты, связанные с излучением и строением атома. Именно здесь мы сталкиваемся с проблемами такой сложности, что для преодоления их требуется чудовищное напряжение интеллектуальной мощи современного поколения физиков". Эта проблема была решена по существу через 20 лет в двух статьях Фейнмана по квантовой электродинамике (см. ниже), но когда это произошло, Эйнштейн не Заметил этого. По-видимому, потому что считал, что вся квантовая физика нарушает причинность. В статье в Британской энциклопедии Эйнштейн описал 4-мерное пространство- время, не упомянув Минковского и совершенно обойдя молчанием 4-мерное пространство энергии-импульса. В речи на торжественном заседании, посвященном 50-летию защиты докторской диссертации Планком, на котором Эйнштейну была вручена медаль Планка, он снова вернулся к проблеме причинности в квантовой механике: "Хотя я глубоко убежден в том, что мы не остановимся на уровне субпричинности, а придем, в конце концов, к сверхпричинности в том смысле, о котором говорилось выше, я восхищаюсь работами физиков молодого поколения, объединенными под названием квантовая механика, и верю в правильность этой теории. Я только считаю, что ограничения , приводящие к статистическому характеру ее законов, должны быть со временем устранены". 29 декабря 1934 г. газета «Питтсбург пост-газетт» опубликовала интервью с Эйнштейном под заголовком "Надежда на атомную энергию отвергается Эйнштейном" .
В декабре 1934 г. Эйнштейн прочел лекцию "Элементарный вывод эквивалентности массы и энергии" на совместном заседании Американского математического общества, Американского физического общества и Американского общества развития науки. Эта лекция была опубликована в 1935 г. в Бюллетене Американского математического общества. Эйнштейн ставит перед собой задачу — доказать эквивалентность массы и энергии, основываясь только на трех предположениях: "помимо преобразований Лоренца, лишь на законах сохранения энергии и импульса". На первых страницах он вводит 4-вектор скорости и, умножая его на массу т, получает 4-вектор, пространственные компоненты которого, — полагает он, — естественно считать импульсом, а временную — энергией" и, таким образом, приписать покоящейся частице энергию покоя m (mc2 в обычных единицах)". "Но, — говорит он, — ниоткуда не следует, что... именно этот импульс удовлетворяет закону сохранения импульса, а эта энергия — закону сохранения энергии. .. Кроме того, не так уж ясно, что следует понимать под энергией покоя, так как энергия определена лишь с точностью до неопределенной аддитивной постоянной ..." — и продолжает: "Сейчас мы покажем, что если законы сохранения энергии и импульса справедливы во всех системах координат, связанных друг с другом преобразованиями Лоренца, то энергия и импульс действительно определяются приведенными выше формулами и предполагаемая эквивалентность массы и энергии покоя также существует" . И Эйнштейн приступает к доказательству того, что законы сохранения действительно выполняются для рассматриваемого им 4-импульса. Для этого он рассматривает энергии и импульсы двух частиц до и после их соударения в различных лоренцовых системах координат и приходит к выводу: "Таким образом, энергия покоя при неупругом соударении изменяется аддитивно, так же как масса. Что касается энергии покоя, то она определяется, как это следует из самого понятия энергии, лишь с точностью до аддитивной постоянной, и мы можем наложить условие, чтобы Е0 обращалось в нуль вместе с т. При этом Е0 = т, что и является доказательством принципа эквивалентности инертной массы и энергии покоя" . Обращает на себя внимание то, что Эйнштейн в этой лекции ни разу не упоминает о теореме Нётер, согласно которой сохранение 4-импульса и лоренц- инвариантность обусловлены свойствами симметрии пространства-времени Минков- ского. Он предпочитает выводить свойства 4-импульса, рассматривая парные соударения в трехмерном пространстве и отдельно предполагая лоренц- инвариантность и сохранение энергии и импульса. 4 мая 1935 г. он публикует в Нью-Йорк Тайме некролог "Памяти Эмми Нётер", в котором очень высоко отзывается о ее заслугах перед математикой и обходит молчанием теорему, которая так важна в физике. Последовательное изложение законов сохранения на основе свойств симметрии пространства-времени в духе Нётер было дано впервые в 1941 г. в «Теории поля» Л.Д. Ландау и Е.М. Лифшица (см. ниже). В 1935 г. была также опубликована знаменитая статья, написанная Эйнштейном совместно с Н. Розеном и Б. Подольским, об интерпретации измерения в квантовой механике. 11. Годы 1938-1948. Атомная бомба В 1938 г. выходит знаменитая научно-популярная книга Эйнштейна и его моло-
дого сотрудника Леопольда Инфельда «Эволюция физики». В ней авторы неоднократно возвращаются к вопросу о массе. Сначала в главе I "Расцвет механистического воззрения", в разделе "Еще одна нить" они вводят понятия инертной и тяжелой массы и говорят об их равенстве как о путеводной нити к общей теории относительности. В главе III "Поле и относительность", в разделе "Относительность и механика" они вводят понятие массы покоя: "Покоящееся тело имеет определенную массу, так называемую массу покоя". Далее они пишут: "...излучение, испускаемое Солнцем и проходящее через пространство, содержит энергию и поэтому имеет массу". И еще: "Согласно теории относительности, нет существенного различия между массой и энергией. Энергия имеет массу, а масса представляет собой энергию. Вместо двух законов сохранения мы имеем только один: закон сохранения массы-энергии. Этот новый взгляд оказался очень плодотворным в дальнейшем развитии физики". Кажется, что это утверждение является адекватным словесным выражением формулы Е = тс2 и не согласуется с формулой Е0 = тс2. В той же главе III, в разделе "Общая теория относительности и ее экспериментальная проверка", рассказывается о том, что эллиптическая орбита Меркурия прецессирует, совершая полный оборот вокруг Солнца за три миллиона лет. Эта прецессия перигелия Меркурия обусловлена релятивистскими свойствами гравитационного поля. В следующем разделе говорится: "Мы имеем две реальности: вещество и поле... Но деление на вещество и поле, после признания эквивалентности массы и энергии, есть нечто искусственное и неясно определенное. Не можем ли мы отказаться от понятия вещества и построить чистую физику поля?" Создание квантовой электродинамики на стыке 1940-1950-х гг., а затем кван- тово-полевой теории электрослабого и сильного взаимодействий и различных моделей так называемого «Великого объединения» всех взаимодействий можно рассматривать как реализацию мечты Эйнштейна о единой теории поля. Но в основе всех этих теорий лежат не только теория относительности, но и квантовая механика, вероятностную интерпретацию которой Эйнштейн не мог принять, утверждая, что "Бог не играет в кости". Именно благодаря квантовой механике понятие материи, вещества не было изгнано из этих теорий, а, наоборот, стало их основой. Это особенно ярко проявляется в языке фейнмановских диаграмм, в которых реальные частицы (в том числе и фотоны) представляют вещество, а виртуальные - силовые поля (см. ниже). Последняя глава IV "Кванты" посвящена рассказу о квантовой механике. В разделе "Кванты света" говорится о том, что свет состоит из зерен энергии — световых квантов — фотонов. В разделе "Волны материи" подчеркивается сходство сочетания корпускулярных и волновых свойств фотонов и электронов: "Одним из наиболее фундаментальных вопросов, поставленных современными успехами науки, является вопрос о том, как согласовать два противоречивых взгляда на вещество и волну". Авторы находятся в одном шаге от того, чтобы признать фотон такой же частицей вещества, как электрон. Но в конце книги они пишут: "Вещество обладает зернистой структурой; оно состоит из элементарных частиц — элементарных квантов вещества. Зернистую структуру имеет электрический заряд и, что самое важное с точки зрения квантовой теории, — зернистую структуру имеет и энергия. Фотоны — это кванты энергии, из которых состоит свет". Таким образом, они отождествляют свет с энергией и противопоставляют его материи. Не в этом ли отождествлении и противопоставлении заключен один из корней путаницы с энергией и массой? 2 августа 1939 г. Эйнштейн по инициативе Лео Сцилларда написал знаменитое письмо президенту Ф.Д. Рузвельту, предостерегающее, что "элемент уран может
быть превращен в новый важный источник энергии". В 1941 г. вышло из печати первое русское издание книги Ландау и Лифшица «Теория поля». В ней все законы сохранения были последовательно получены из свойств симметрии пространства-времени в соответствии с теоремой Нётер. В §10 "Энергия и импульс", который в последующих изданиях стал § 9, были введены 4- вектор энергии-импульса и его квадрат, равный квадрату массы, и обсуждена энергия покоя, хотя обозначения Е0 для нее введено не было. Про неаддитивность массы в теории относительности сказано как о ее несохранении. Но Эйнштейн вряд ли читал этот русский учебник. Не заметил он в 1951 г. и английского перевода. В 1942 г. вышла книга П.Г. Бергмана с предисловием Эйнштейна, в котором, в частности, говорилось: "Эта книга не только дает исчерпывающую систематическую и логически полную трактовку теории относительности, но в ней достаточно полно представлены и ее опытные основания. ...Значительные усилия были потрачены на то, чтобы сделать эту книгу логически и педагогически удовлетворительной; д-р Бергман провел со мной много часов, которые были посвящены этой цели". В главе VI читаем: «...релятивистская кинетическая энергия равна где Е0 - постоянная интегрирования.. Величина тс называется "энергией покоя" частицы, а Т — ее "релятивистской кинетической энергией"». Мне неясно, зачем понадобилось обозначать постоянную интегрирования С буквой Е0. Не понимаю также, зачем "релятивистскую кинетическую энергию" понадобилось обозначать двумя разными буквами: Е и Т. Может быть, была допущена опечатка, и это не кинетическая, а полная энергия? Сразу за этим следует такой текст: «Связь между энергией и массой. Величину, выражающую зависимость импульса от массы, часто называют "релятивистской массой" частицы, a m соответственно "массой покоя". Релятивистская масса равна полной энергии, деленной на с2; масса же покоя в с2 меньше энергии покоя. Таким образом, в теории относительности существует весьма тесная связь между массой и энергией, не имеющая аналога в классической физике». Мы видим, таким образом, что аддитивная постоянная в выражении для энергии и зависимость массы от скорости были сохранены в этой книге. Осталась в ней и неясность, что следует называть релятивистской кинетической энергией. По- видимому, все это, так же как использование термина "релятивистская масса", в какой-то мере отражало взгляды Эйнштейна. 6 августа 1945 г. была сброшена атомная бомба на Хиросиму, а 9 августа — на
Нагасаки. В сентябре английский журнал Дискавери опубликовал фотографии первого испытательного атомного взрыва 16 июля 1945 г. и две статьи: "Прогресс науки" и "Наука, приведшая к атомной бомбе". Во второй из них в хронологии атомных открытий упоминалось: "1905. Специальная теория относительности Эйнштейна показала эквивалентность массы и энергии". Однако среди 25 портретов ученых, от Беккереля до Оппенгеймера, портрета Эйнштейна не было. В сентябре 1945 г. вышла книга Г.Д. Смита Атомная энергия для военных целей. Во введении, в разделе "Сохранение массы и энергии", говорилось: "1.2. Существуют два принципа, ставшие краеугольными камнями здания современной науки. Первый принцип — материя не создается и не уничтожается, и лишь переходит из одного вида в другой — был высказан в XVIII веке и знаком каждому изучающему химию; он известен под названием закона сохранения массы. Второй принцип — энергия не создается и не уничтожается и лишь переходит из одного вида в другой — ... известен под названием закона сохранения энергии. 1.3. ...но, в действительности, эти два принципа являются двумя аспектами единого принципа, так как мы убедились, что вещество может иногда превращаться в энергию, и энергия — в вещество". В разделе "Эквивалентность массы и энергии" говорилось: "1.4. Один из выводов, полученных на довольно ранней стадии развития теории относительности, состоял в том, что инертная масса движущегося тела увеличивается с возрастанием его скорости. Это означало эквивалентность изменения энергии движения тела, т.е. его кинетической энергии и изменения его массы... Количество энергии Е, эквивалентное массе т, по Эйнштейну, определяется уравнением Е = тс2, где с есть скорость света. Это уравнение приводит к удивительным результатам... " В этих отрывках следует обратить внимание на следующее. • Отождествление материи (вещества) и массы. • Отсутствие упоминания закона сохранения импульса, без которого нельзя понять сохранение массы. • Утверждение, что масса увеличивается с возрастанием скорости. • Отсутствие понятия энергии покоя и формулы Е0 = тс 2. Заметьте также, что Г.Д. Смит возглавлял физический факультет Принстонского университета. 1 июля 194 6 г. еженедельник Time вышел с портретом Эйнштейна на обложке на фоне ядерного гриба, на котором было написано Е = тс2. В 194 6 г. Эйнштейн опубликовал две статьи об эквивалентности массы и энергии: "Элементарный вывод эквивалентности массы и энергии" и "Е = тс2: настоятельная проблема нашего времени". В первой из них он частично изменил доказательство 1905 г.: покоящееся тело не испускает, а поглощает радиацию; используется сохранение не энергии, а импульса; используются не формулы преобразования энергии и импульса излучения, а известный угол аберрации звездного света, обусловленный движением Земли: а = и/с. В результате для увеличения массы тела Эйнштейн получает: М' — М = Е/с2, где Е — энергия поглощенного излучения, и заключает: "Это соотношение выражает закон эквивалентности энергии и массы. Увеличение энергии на Е свя-
зано с увеличением массы на Е/с2. Поскольку энергия обычно определяется с точностью до аддитивной постоянной, можем выбрать последнюю так, что Е = Мс2". Из вывода очевидно, что Е здесь означает энергию покоя тела. Почему энергия покоя свободного тела определена с точностью до постоянной, не разъясняется. В краткой научно-популярной статье Эйнштейн рассказывает вначале о законе сохранения энергии на примере кинетической и потенциальной энергии маятника, а затем переходит к сохранению массы: "Масса определяется как противодействие тела ускорению (инертная масса). Она измеряется также весом тела (тяжелая масса). То обстоятельство, что два столь различные определения приводят к одному и тому же значению массы тела является поразительным. Согласно принципу сохранения (а именно, масса остается неизменной при любых физических или химических превращениях) масса является существенной (ввиду своей неизменности) характеристикой материи. Нагревание, плавление, испарение, образование химических соединений не должны изменять полной массы. Физики считали этот принцип справедливым еще несколько десятилетий тому назад. Однако он оказался несостоятельным перед лицом специальной теории относительности. Поэтому он слился с законом сохранения энергии, подобно тому, как примерно шестьюдесятью годами раньше закон сохранения механической энергии объединился с законом сохранения тепла. Мы могли бы сказать, что закон сохранения энергии, поглотив ранее закон сохранения тепла, включил теперь в себя и принцип сохранения массы и управляет всем единолично. Эквивалентность массы и энергии принято выражать (хотя это и не совсем точно) формулой Е = тс2. . ." В этом отрывке заслуживает внимания не только то, что Эйнштейн разъясняет читателю, но и то, чего он не разъясняет, а именно, что в теории относительности мерой инерции является не масса, а энергия, что не масса, а величина РрРи/Е создает и воспринимает гравитационное поле (а потому с точки зрения теории относительности нет ничего поразительного в равенстве инертной и тяжелой масс в ньютоновской механике: они обе равны Е0/с2) , что принцип сохранения энергии "управляет" не единолично, а вместе с принципом сохранения импульса, что энергия и импульс вместе определяют массу и ее сохранение и/или несохранение и что масса эквивалентна энергии покоя. В 194 9 г. были опубликованы "Автобиографические заметки", которые Эйнштейн начал словами: "Вот я здесь сижу и пишу на 68-м году жизни что-то вроде собственного некролога". Так что писал он их в 1946-1947 гг. В этих заметках он попытался рассказать, о чем и как он думал на протяжении многих лет: "Для меня не подлежит сомнению, что наше мышление протекает в основном, минуя символы (слова), и к тому же бессознательно". О создании общей теории относительности он говорит: "Дело в том, что теория должна была соединять в себе следующие вещи: из общих соображений частной теории относительности было ясно, что инертная масса физической системы при увеличении полной энергии (в частности, при увеличении кинетической энергии) должна возрастать; из очень точных опытов (в особенности из опытов Этвеша с крутильными весами) было эмпирически известно с очень большой точностью, что тяжелая масса тела в точности равна его инертной массе". При желании эти слова можно истолковать как то, что формула Е = тс2 не
только следует из специальной (частной) теории относительности, но и является краеугольным камнем общей теории относительности. В июне 1948 г. Эйнштейн в последний раз высказался о массе. В письме Л. Барнету — автору книги Вселенная и д-р Эйнштейн, он написал: «Нехорошо вводить такое понятие массы движущегося тела, для которого нельзя дать ясного определения. Лучше не вводить никакого другого понятия кроме "массы покоя" т. Вместо того чтобы вводить М, лучше привести выражение для импульса и энергии движущегося тела». 12. 194 9 год. Диаграммы Фейнмана В 194 9 г. Фейнман опубликовал статьи "Теория позитронов" и "Пространственно-временной подход к квантовой электродинамике". Эти статьи придали квантовой электродинамике форму, полностью отвечающую симметрии мира Минковского. В них был сформулирован и разработан метод фейнмановских диаграмм. Внешние линии диаграмм отвечают реальным частицам, находящимся на массовой поверхности: для них р2 = т2, где р — 4-импульс частицы, m — ее масса. Внутренние линии отвечают виртуальным частицам, находящимся вне массовой поверхности: для них р2 ф т2. Античастицы выглядят как частицы, движущиеся вспять по времени. Все частицы — массивные и безмассовые — описываются единообразно с той только разницей, что для последних полагается m = 0. (Виртуальные фотоны с положительным р2 называются времениподобными, с отрицательным р2 — пространственно-подобными. ) Разумеется, в основе метода диаграмм лежит понятие инвариантной массы т, не зависящей от скорости частицы. Фейнмановские диаграммы радикально упростили расчеты процессов, в которых участвуют элементарные частицы. Они объединили все виды материи, как для реальных частиц, так и для виртуальных, заменивших собою силовые поля. Ф. Дайсон, который работал в то время вместе с Фейнманом, вспоминал недавно: "В то время, когда молодые физики в Институте высших исследований в Прин- стоне были глубоко погружены в развитие новой электродинамики, Эйнштейн работал в том же здании и ежедневно проходил мимо наших окон по дороге в Институт и обратно. Он ни разу не пришел на наши семинары и ни разу не спросил нас о нашей работе". Как известно, в Институте высших исследований, где работал Эйнштейн, над камином было высечено его знаменитое высказывание о том, что Господь изощрен, но не злонамерен. Как тут не вспомнить его другое высказывание: "Может быть, Господь все-таки злонамерен". 13. Последние годы 1952-1955 В 1952 г. Эйнштейн опубликовал очередное издание популярной книги «Специальная и общая теория относительности", впервые опубликованной в 1917 г. Для этого издания он написал специальное приложение "Относительность и проблема
пространства", с целью «показать, что пространству и времени нельзя с необходимостью приписать раздельное существование, независимо от действительных объектов физической реальности... На этом пути концепция "пустого пространства" теряет свой смысл». Эти слова Эйнштейн относит не только к общей, но и к специальной теории относительности. Понятие виртуальных частиц, по-видимому, ему чуждо. Из предисловия Эйнштейна к книге Джеммера «Понятия пространства» можно увидеть, что мешало Эйнштейну считать фотон материальным объектом: «Что же касается понятия пространства, то ему предшествует психологически более простое понятие места. Место — это, прежде всего, (небольшая) часть поверхности Земли, называемая этим словом. Предмет, место которого указано, является "материальным объектом", или телом». С этой точки зрения любая сколь угодно легкая частица является материальным объектом, а строго безмассовая — нет. В 1895 г. 16-летний Эйнштейн написал свое первое научное эссе о распространении света через эфир. В 1955 г. в последних автобиографических заметках он вспоминает, что именно в этом юношеском возрасте его поразил такой мысленный эксперимент: "Если со скоростью света преследовать луч света, то увидишь волновое поле, не зависящее от времени. Но, похоже, такая вещь не существует. Это был первый детский мысленный эксперимент на тему специальной теории относительности". Мысленные эксперименты играли важную роль в исследованиях Эйнштейна на протяжении всей его жизни. Эйнштейн скончался 18 апреля 1955 г. За месяц до его кончины в Берлине на заседании, посвященном 50-летнему юбилею теории относительности, выступил с докладом Леопольд Инфельд. Первым из трех экспериментальных подтверждений специальной теории относительности он назвал зависимость массы от скорости. Эстафета "релятивистской массы" была передана грядущим поколениям. 14. Бори, Ландау, Фейнман Важная роль в этой эстафете принадлежит книге Макса Борна «Эйнштейновская теория относительности». Выдающийся физик, один из создателей квантовой механики, Борн очень много сделал для пропаганды теории относительности. Первое издание его книги вышло в 1920 г. (русский перевод появился в 1938 г.). Следующее издание вышло уже после смерти Эйнштейна, в 1962 г. (а его русский перевод — в 1964 г. и 1972 г.). К сожалению, в обоих изданиях, оказавших огромное влияние на преподавание физики в XX в., без каких-либо оговорок утверждается, что возрастание массы тела с возрастанием его скорости является экспериментальным фактом. В 1969 г., за год до смерти, Борн опубликовал свою переписку с Эйнштейном, длившуюся с 1916 г. по 1955 г. Ни в одном, из более чем ста писем, вопрос о Зависимости (независимости) массы от скорости не был Затронут. В 2005 г. вышло английское издание этой переписки с пространным предисловием, но и оно обошло молчанием вопрос о массе. Выше я отметил, что книга Ландау и Лифшица Теория поля была первой в мировой литературе монографией по теории относительности, в которой была последо-
вательно проведена мысль о том, масса тела не зависит от его скорости. Тем непонятней, почему в популярной брошюре Ландау и Румера «Что такое теория относительности» авторы предпочли для первого знакомства с теорией выбрать утверждение , что масса зависит от скорости и что это экспериментальный факт. В третьем издании брошюры, опубликованном в 1975 г. Ю.Б. Румер добавил "Странички воспоминаний о Л.Д. Ландау", где, в частности, привел шутливый отзыв о брошюре, который давал ей сам Ландау: "Два жулика уговаривают третьего, что за гривенник он может понять, что такое теория относительности". Замечательные лекции по физике, прочитанные в Калифорнийском технологическом институте Фейнманом в 1961-1964 гг., зажгли любовь к физике в душах миллионов читателей на всем земном шаре. Они учат читателей самостоятельно и честно думать. К сожалению, в лекциях ничего не говорится о фейнмановских диаграммах, придуманных Фейнманом в 194 9 г. и принесших ему Нобелевскую премию 1965 года. Более того, вся теория относительности вводится в этих лекциях через формулу Е = тс2, а не через понятие лоренц-инвариантной массы, лежащее в основе фейнмановских диаграмм. Уже в первой главе Фейнман утверждает, что зависимость массы тела от его скорости — это экспериментальный факт, в четвертой, — что Эйнштейн открыл формулу Е = тс2, в седьмой, — что масса есть мера инерции. В главе 15 появляется формула Щ — Шо/ у/1 — V1 / С1 и обсуждаются следствия "релятивистского роста массы", а в главе 16 выводится эта формула. Заканчивается эта глава словами: "Как ни странно, формула т — то/ у/\ — v2/c2 очень редко употребляется на практике. Вместо этого незаменимыми оказываются два соотношения, которые легко доказать: Е2 - Р2с2 = Мо2с4 и Рс = Еи/с (В этой цитате сохранены все обозначения Фейнмана.) Даже в главе 17, где вводится четырехмерное пространство-время и используются единицы, в которых с = 1, Фейнман по-прежнему говорит о массе покоя то, а не просто о массе т. В течение 2007 г. я расспрашивал по электронной почте бывших учеников, сотрудников и соавторов Фейнмана. Никто из них не мог вспомнить ни одного случая, когда бы в обсуждениях с ними Фейнман использовал понятие релятивистской массы или формулу Е = тс2. А несколько миллионов читателей его лекций твердо уверены, что масса зависит от скорости. Каким образом великий физик, давший нам язык фейнмановских диаграмм, мог
положить в основу фейнмановских лекций понятие массы, зависящей от скорости? Ответ на этот вопрос, возможно, дает Нобелевская лекция Фейнмана. Он описывает в ней многочисленные "тупики", в которые он попадал на своем пути к построению квантовой электродинамики, и выражает уверенность в том, что "множество разных физических идей может описывать одну и ту же физическую реальность". (В частности, про идею движущегося назад по времени электрона он пишет : "Она оказалась очень удобной, но не обязательно необходимой для теории, так как она в точности эквивалентна представлению о море отрицательных энергий" . Но ведь без движущегося вспять по времени электрона не было бы фейнмановских диаграмм, внесших порядок и гармонию во многие области физики.) 15.Эпилог Почему сорняк массы, зависящей от скорости, так устойчив? Прежде всего, потому что в смысле арифметики и алгебры в нем ошибки нет. В любую самосогласованную теорию можно ввести дополнительные "квазифизические величины" путем умножения истинных физических величин на произвольные степени скорости света. Самым ярким примером такой "квазивеличины" является так называемая "релятивистская масса". При известной тщательности вычислений результаты расчетов будут те же, что и в исходной теории. Однако в более высоком смысле теория при введении "квазивеличин" оказывается изуродованной, так как нарушаются ее свойства симметрии. Релятивистская масса представляет собой одну компоненту 4-вектора, в то время как о трех других его компонентах даже не упоминают . Отметим еще несколько объяснений живучести релятивистской массы. Формула Е = тс2 "проще" формулы Е0 = тс2, поскольку в ней нет требующего пояснений дополнительного нулевого индекса. Энергия, деленная на с2, действительно имеет размерность массы. Интуиция, основанная на житейском опыте, подсказывает, что именно масса, а не энергия, является мерой инерции тела и побуждает "тащить" в теорию относительности нерелятивистскую формулу р = ти. В не меньшей степени эта же интуиция побуждает считать источником гравитации "родную" массу, а не какую-то "чужую" величину ррри/Е. Особенно сопротивляется житейская интуиция необходимости рассматривать свет как вид материи. Приведенные выше аргументы могут объяснить "ньютоновские пристрастия" рядового человека, так сказать "пешехода". Но применять их к такому великому физику, как Эйнштейн, слишком легкомысленно. Ведь именно он ввел понятие энергии покоя Е0 в физику и гораздо чаще писал о Е0 = тс2, чем о Е = тс2. Но что остается необъяснимым: почему за полвека, в течение которых Эйнштейн обсуждал связь массы и энергии, он ни разу не привел в своих трудах и письмах формулу Т?2 ^2 2 _ 2 4 Е — р с = m с определяющую лоренц-инвариантную массу? Возможно, в формулировке о полной эквивалентности энергии и массы отразилось его безусловное доверие к своей могучей интуиции. Ведь именно оно, это доверие, обусловило неприятие им квантовой механики. Кажется, что понятие электромагнитного поля он воспринимал не только разумом, но и всем телом. И волновую функцию он воспринимал так же, как электромагнитную волну. Неприятие квантовой механики помешало пересечению мировых линий Эйнштейна и Фейнмана в
пространстве идей, так сказать в ноосфере. Следствием явилось, в частности, то, что Эйнштейн так и не воспринял фотон как частицу материи, а продолжал считать его квантом энергии. 16.Заключение Осматривая выставку в Манеже в 1962 г., Никита Хрущёв (1894-1971) обрушился с бранью на скульптура Эрнста Неизвестного. Когда Хрущёв умер, его дети попросили Неизвестного создать памятник на могиле отца. Основная часть памятника — две вертикальные плиты — из черного и белого мрамора, проникающие друг в друга своими выступами и как бы олицетворяющие зло и добро. История борьбы двух концепций массы в XX в. похожа на эту скульптуру. Свет и тьма боролись друг с другом в каждом из великих творцов современной физики. Принято считать "политически корректным" отстаивание плюрализма мнений. А отстаивание правильности какой-то одной точки зрения — рассматривать как проявление догматизма. Замечательным примером плодотворности плюрализма является дуализм волн и корпускул в квантовой механике. Однако имеются случаи, когда ситуация созрела для выбора определенной терминологии. Именно такова ситуация в вопросе о соотношении массы и энергии. Пришла пора прекратить обманывать все новые поколения школьников и студентов, внушая им, что возрастание массы с увеличением скорости — это экспериментальный факт. Список литературы [1] Эйнштейн А. Собрание научныых трудов А. Эйнштейна Т. 1-4 (Под ред. И Е Тамма, Я А Смородинского, Б Г Кузнецова) (М.: Наука, 1967)
Ликбез ИЗ ЧЕГО ВСЕ СОСТОИТ Каганов М.И. Современная физика развивается стремительно, и люди старшего поколения, те, кто учился в школе и в институте лет 30-40 назад, со многими ее положениями незнакомы: их тогда попросту не существовало. А молодые наши читатели еще не успели про них узнать: научно-популярная литература практически перестала издаваться. В этой статье М. И. Каганов рассказывает об атомах и элементарных частицах и о законах, ими управляющих, о том, что же представляет собой материя .
ВВЕДЕНИЕ Разнообразие вещей, предметов - всего, чем мы пользуемся, что нас окружает, необозримо. Не только по своему предназначению и устройству, но и по используемым для их создания материалам - веществам, как принято говорить, когда нет необходимости подчеркивать их функцию. Вещества, материалы выглядят сплошными, а осязание подтверждает то, что видят глаза. Казалось бы, нет исключений. Текучая вода и твердый металл, столь непохожие друг на друга, сходны в одном: и металл и вода сплошные. Правда, в воде можно растворить соль или сахар. Они находят себе в воде место. Да и в твердое тело, например в деревянную доску, можно вбить гвоздь. Приложив заметные усилия, можно добиться того, что место, которое было занято деревом, займет железный гвоздь. Мы хорошо знаем: от сплошного тела можно отломить небольшой кусочек, можно измельчить практически любой материал. Иногда это трудно, порой происходит самопроизвольно, без нашего участия. Представим себя на пляже, на песке. Мы понимаем: песчинка - далеко не самая мелкая частица вещества, из которого состоит песок. Если постараться, можно песчинки уменьшить, например, пропустив через вальцы - через два цилиндра из очень твердого металла. Попав между вальцами, песчинка раздробится на более мелкие части. По сути, так из зерна на мельницах делают муку. Теперь, когда атом прочно вошел в наше мироощущение, очень трудно представить себе, что люди не знали, ограничен процесс дробления или вещество можно размельчать до бесконечности. Неизвестно, когда люди впервые задали себе этот вопрос. Впервые он был зафиксирован в сочинениях древнегреческих философов. Некоторые из них считали, что, сколько ни дроби вещество, оно допускает деление на еще более мелкие части - предела нет. Другие высказывали мысль, что существуют мельчайшие неделимые частицы, из которых и состоит все. Чтобы подчеркнуть, что частицы эти - предел дробления, они назвали их атомами (по-древнегречески слово "атом" означает неделимый). Необходимо назвать тех, кто первым выдвинул идею существования атомов. Это - Демокрит (родился около 4 60 или 470 года до новой эры, умер в глубокой старости) и Эпикур (341-270 годы до новой эры). Итак, атомному учению почти 2500 лет. Представление об атомах отнюдь не сразу восприняли все. Еще лет 150 назад уверенных в существовании атомов было мало даже среди ученых. Дело в том, что атомы очень малы. Их невозможно разглядеть не только простым глазом, но и, например, с помощью микроскопа, увеличивающего в 1000 раз. Давайте задумаемся: каков размер самых маленьких частиц, которые можно увидеть? У разных людей разное зрение, но, наверное, все согласятся, что увидеть частицу размером менее 0,1 миллиметра нельзя. Поэтому, если воспользоваться микроскопом, можно, хотя и с трудом, разглядеть частицы размером около 0,0001 миллиметра, или 10~7 метра. Сравнив размеры атомов и межатомных расстояний (10~10 метра) с длиной, принятой нами как предел возможности увидеть, поймем, почему любое вещество кажется нам сплошным.
2500 лет - огромный срок. Что бы ни происходило в мире, всегда находились люди, которые пытались ответить себе на вопрос, как устроен окружающий их мир. В какие-то времена проблемы устройства мира волновали больше, в какие-то - меньше. Рождение науки в ее современном понимании произошло сравнительно недавно. Ученые научились ставить эксперименты - задавать природе вопросы и понимать ее ответы, создавать теории, описывающие результаты экспериментов. Теории потребовали строгих математических методов для получения достоверных выводов. Наука прошла длинный путь. На этом пути, который для физики начался около 400 лет назад с работ Галилео Галилея (1564-1642), добыто бесконечное количество сведений о строении вещества и свойствах тел разной природы, обнаружено и понято бесконечное количество разнообразных явлений. Человечество научилось не только пассивно понимать природу, но и использовать ее в своих целях. Мы не будем рассматривать историю развития атомных представлений на протяжении 2500 лет и историю физики в течение последних 400 лет. Наша задача - по возможности кратко и наглядно рассказать о том, из чего и как построено все - окружающие нас предметы, тела и мы сами. Как было уже сказано, все вещества состоят из электронов, протонов и нейтронов . Знаю об этом со школьных лет, но меня не перестает поражать, что все построено из частиц всего трех сортов! А ведь мир так разнообразен! К тому же и средства, которыми пользуется природа для осуществления строительства, тоже достаточно однообразны. Последовательное описание того, как построены вещества разного типа, сложная наука. Она использует серьезную математику. Надо подчеркнуть - какой- то другой, простой теории не существует. Но физические принципы, лежащие в основе понимания строения и свойств веществ, хотя они нетривиальны и трудно представимы, все же постичь можно. Своим рассказом мы попытаемся помочь всем, кого интересует устройство мира, в котором мы живем. МЕТОД ОСКОЛКОВ, ИЛИ РАЗДЕЛЯЙ И ПОЗНАВАЙ Казалось бы, наиболее естественный способ понять, как устроено некое сложное устройство (игрушка или механизм), - разобрать, разложить на составные части. Надо только быть очень осторожным, помня, что сложить будет значительно труднее. "Ломать - не строить" - говорит народная мудрость. И еще: из чего состоит устройство, мы, может быть, поймем, но, как работает, вряд ли. Стоит иногда отвинтить один винтик, и все - устройство перестало работать. Нужно не столько разобрать, сколько разобраться. Так как речь идет не о фактическом разложении всех окружающих нас предметов, вещей, организмов, а о воображаемом, то есть о мысленном, а не о настоящем опыте, то можно не волноваться: собирать не придется. Кроме того, не будем скупиться на усилия. Не будем задумываться, трудно или легко разложить устройство на составные части. Секундочку. А откуда мы знаем, что дошли до предела? Может быть, добавив усилий, сможем пойти дальше? Признаемся себе: мы не знаем, дошли ли до предела. Приходится воспользоваться общепринятым мнением, понимая, что это не слишком надежный аргумент. Но если помнить о том, что это лишь общепринятое мнение, а не истина в последней инстанции, то опасность невелика.
Сейчас общепринято, что деталями, из которых все построено, служат элементарные частицы. И при этом далеко не все. Посмотрев в соответствующий справочник , мы убедимся: элементарных частиц более трехсот. Обилие элементарных частиц заставило задуматься о возможности существования субэлементарных частиц - частиц, из которых состоят сами элементарные частицы. Так появилась идея кварков. Они обладают тем удивительным свойством, что, по-видимому, не существуют в свободном состоянии. Кварков достаточно много - шесть, и у каждого имеется своя античастица. Возможно, путешествие в глубь материи не окончено . Для нашего рассказа обилие элементарных частиц и существование субэлементарных несущественно. В построении веществ непосредственное участие принимают электроны, протоны и нейтроны - все построено только из них. Прежде чем обсуждать свойства реальных частиц, задумаемся, какими нам бы хотелось видеть детали, из которых все построено. Когда речь идет о том, что хотелось бы видеть, конечно, надо учитывать разнообразие взглядов. Отберем несколько черт, которые кажутся обязательными. Во-первых, элементарные частицы должны иметь свойство объединяться в разнообразные структуры. Во-вторых, хочется думать, что элементарные частицы неуничтожимы. Зная, какую длинную историю имеет мир, трудно представить себе, что частицы, из которых он состоит, смертны. В-третьих, хотелось бы, чтобы самих деталей было не слишком много. Глядя на строительные блоки, мы видим, сколь разнообразные постройки могут быть созданы из одинаковых элементов. Знакомясь с электронами, протонами и нейтронами, мы увидим, что их свойства не противоречат нашим пожеланиям, а желанию простоты, несомненно, соответствует то, что в строении всех веществ принимают участие всего три типа элементарных частиц. ЭЛЕКТРОНЫ, ПРОТОНЫ, НЕЙТРОНЫ Приведем важнейшие характеристики электронов, протонов и нейтронов. Они собраны в Таблице 1. Частица Заряд Масса Спин Статистика Электрон ее= -1,602 е ■ю-19 те = 9гЮ9 e'io-31 1/2 Ф Протон е = + 1г602 р ■ю-1Э m =1г673 р ■10"77 1/2 Ф Нейтрон 0 m =1г675 ■ю-77 1/2 Ф Величина заряда дана в кулонах, масса - в килограммах (единицах СИ); слова "спин" и "статистика" будут пояснены ниже.
Обратим внимание на различие в массе частиц: протоны и нейтроны почти в 2000 раз тяжелее электронов. Следовательно, масса любого тела почти целиком определяется массой протонов и нейтронов. Нейтрон, как это следует из его названия, нейтрален - его заряд равен нулю. А протон и электрон имеют одинаковые по величине, но противоположные по знаку заряды. Электрон заряжен отрицательно, а протон - положительно. Среди характеристик частиц нет, казалось бы, важной характеристики - их размера. Описывая строение атомов и молекул, электроны, протоны и нейтроны можно считать материальными точками. О размерах протона и нейтрона придется вспомнить только при описании атомных ядер. Даже по сравнению с размерами атомов протоны и нейтроны чудовищно малы (порядка 10~16 метра). По сути дела, этот короткий раздел сводится к представлению электронов, протонов и нейтронов как строительного материала всех тел в природе. Можно было бы просто ограничиться таблицей 1, однако нам предстоит понять, каким образом из электронов, протонов и нейтронов осуществляется постройка, что заставляет частицы объединяться в более сложные конструкции и каковы эти конструкции . АТОМ - НАИБОЛЕЕ ПРОСТАЯ ИЗ СЛОЖНЫХ КОНСТРУКЦИЙ Атомов много. Оказалось необходимым и возможным упорядочить их специальным образом. Упорядочение дает возможность подчеркнуть различие и сходство атомов. Разумное расположение атомов - заслуга Д. И. Менделеева (1834-1907), который сформулировал периодический закон, носящий его имя. Если временно отвлечься от существования периодов, то принцип расположения элементов крайне прост: они располагаются последовательно по весу атомов. Самый легкий - атом водорода. Последний природный (не созданный искусственно) атом - атом урана, который тяжелее его в 200 с лишним раз. Понимание строения атомов объяснило наличие периодичности в свойствах элементов . В самом начале XX века Э. Резерфорд (1871-1937) убедительно показал, что почти вся масса атома сосредоточена в его ядре - небольшой (даже по сравнению с атомом) области пространства: радиус ядра приблизительно в 100 тысяч раз меньше размера атома. Когда Резерфорд производил свои эксперименты, еще не был открыт нейтрон. С открытием нейтрона было понято, что ядра состоят из протонов и нейтронов, а атом естественно представлять себе как ядро, окруженное электронами, число которых равно числу протонов в ядре - ведь в целом атом нейтрален. Протоны и нейтроны, как строительный материал ядра, получили общее название - нуклоны (с латинского nucleus - ядро). Этим названием мы и будем пользоваться. Количество нуклонов в ядре принято обозначать буквой А. Ясно, что А = N + Z где N - число нейтронов в ядре, a Z - число протонов, равное числу электронов в атоме. Число А носит название атомной массы, a Z - атомного номера. Атомы с одинаковыми атомными номерами называют изотопами: в таблице Менделее-
ва они находятся в одной клеточке (по-гречески изос - равный, топос - место). Дело в том, что химические свойства изотопов почти тождественны. Если таблицу Менделеева рассмотреть внимательно, можно убедиться, что, строго говоря, расположение элементов соответствует не атомной массе, а атомному номеру. Если элементов около 100, то изотопов более 2000. Правда, многие из них неустойчивы, то есть радиоактивны (от латинского radio - излучаю, activus - деятельный) , они распадаются, испуская различные излучения. Опыты Резерфорда не только привели к открытию атомных ядер, но и показали, что в атоме действуют те же электростатические силы, которые отталкивают друг от друга одноименно заряженные тела и притягивают друг к другу разноименно заряженные (например, шарики электроскопа). Атом устойчив. Следовательно, электроны в атоме движутся вокруг ядра: центробежная сила компенсирует силу притяжения. Понимание этого привело к созданию планетарной модели атома, в которой ядро - Солнце, а электроны - планеты (с точки зрения классической физики, планетарная модель непоследовательна, но об этом ниже). Есть целый ряд способов оценить размер атома. Разные оценки приводят к близким результатам: размеры атомов, конечно, различны, но приблизительно равны нескольким десятым нанометра (1 нм = 10~9 м) . Рассмотрим для начала систему электронов атома. В Солнечной системе планеты притягиваются к Солнцу силой гравитации. В атоме действует электростатическая сила. Ее часто называют кулоновской в честь Шарля Огюстена Кулона (1736-1806), установившего, что сила взаимодействия между двумя зарядами обратно пропорциональна квадрату расстояния между ними. Тот факт, что два Заряда Q1 и Q2 притягиваются или отталкиваются с силой, равной Fc = QiQ2/r2 где г - расстояние между зарядами, носит название "Закон Кулона". Индекс "С" присвоен силе F по первой букве фамилии Кулона (по-французски Coulomb). Среди самых различных утверждений мало найдется таких, которые столь же справедливо названы законом, как закон Кулона: ведь область его применимости практически не ограничена. Заряженные тела, каких бы они ни были размеров, а также атомные и даже субатомные заряженные частицы - все они притягиваются или отталкиваются в согласии с законом Кулона. ОТСТУПЛЕНИЕ О ГРАВИТАЦИИ С гравитацией человек знакомится в раннем детстве. Падая, он учится уважать силу притяжения к Земле. Знакомство с ускоренным движением обычно начинается с изучения свободного падения тел - движения тела под действием гравитации. Между двумя телами массы Mi и М2 действует сила FN=-GMiM2/r2 Здесь г - расстояние между телами, G - гравитационная постоянная, равная 6,67259.Ю-11 м3кг_1с~2, индекс "N" дан в честь Ньютона (1643 - 1727). Это выражение называют законом всемирного тяготения, подчеркивая его всеобщий характер. Сила FN определяет движение галактик, небесных тел и падение предметов на Землю. Закон всемирного тяготения справедлив при любом расстоянии меж-
ду телами. Изменения в картину гравитации, которые внесла общая теория относительности Эйнштейна (1879-1955) , мы упоминать не будем. И кулоновская электростатическая сила, и ньютоновская сила всемирного тяготения одинаково (как 1/г2) уменьшаются с увеличением расстояния между телами. Это позволяет сравнить действие обеих сил на любом расстоянии между телами. Если силу кулоновского отталкивания двух протонов сравнить по величине с силой их гравитационного притяжения, то окажется, что FN/FC = 10~36 (Qi = Q2 = ер; Mi = М2 = mp) . Поэтому гравитация сколько-нибудь существенной роли в строении атома не играет: она слишком мала по сравнению с электростатической силой. Обнаружить электрические заряды и измерить взаимодействие между ними не представляет труда. Если электрическая сила так велика, то почему она не важна, когда, скажем, падают, прыгают, бросают мяч? Потому что в большинстве случаев мы имеем дело с нейтральными (незаряженными) телами. В пространстве всегда очень много заряженных частиц (электронов, ионов разного знака). Под воздействием огромной (по атомным масштабам) притягивающей электрической силы, созданной заряженным телом, заряженные частицы устремляются к ее источнику, прилипают к телу и нейтрализуют его заряд. ВОЛНА ИЛИ ЧАСТИЦА? И ВОЛНА И ЧАСТИЦА! Об атомных и еще более мелких, субатомных, частицах очень трудно рассказывать главным образом потому, что их свойствам никаких аналогов в нашей повседневной жизни нет. Можно подумать, что частицы, из которых состоят такие маленькие атомы, удобно представлять себе в виде материальных точек. Но все оказалось гораздо сложнее. Частица и волна... Казалось бы, даже сравнивать бессмысленно, настолько они различны. Наверное, когда думаешь о волне, то прежде всего представляешь себе волнующуюся морскую поверхность. Волны на берег приходят из открытого моря, длины волн - расстояния между двумя последовательными гребнями - могут быть разными. Легко наблюдать волны, имеющие длину порядка нескольких метров. При волнении, очевидно, колеблется масса воды. Волна охватывает значительное пространство . Волна периодична во времени и в пространстве. Длина волны X - мера пространственной периодичности. Периодичность волнового движения во времени видна в повторяемости прихода гребней волн к берегу, а можно ее обнаружить, например, по колебанию поплавка вверх-вниз. Обозначим период волнового движения - время, за которое проходит одна волна, - буквой Т. Величина, обратная периоду, называется частотой V = 1/Т Самые простые волны (гармонические) имеют определенную частоту, которая не меняется во времени. Любое сложное волновое движение может быть представлено в виде совокупности простых волн. Строго говоря, простая волна занимает бесконечное пространство и существует бесконечно долго. Частица, как мы ее себе представляем, и волна абсолютно не похожи.
Со времен Ньютона шел спор о природе света. Что есть свет - совокупность частиц (корпускул, от латинского corpusculum - тельце) или волн? Теории долго конкурировали. Волновая теория победила: корпускулярная теория не могла объяснить экспериментальные факты (интерференцию и дифракцию света). С прямолинейным распространением светового луча волновая теория легко справилась. Немаловажную роль сыграло то, что длина световых волн по житейским понятиям очень мала: диапазон длин волн видимого света от 380 до 760 нанометров. Более короткие электромагнитные волны - ультрафиолетовые, рентгеновские и гамма- лучи, а более длинные - инфракрасные, миллиметровые, сантиметровые и все остальные радиоволны. К концу XIX века победа волновой теории света над корпускулярной казалась окончательной и бесповоротной. Однако XX век внес серьезные коррективы. Казалось, что свет или волны, или частицы. Оказалось - и волны и частицы. Для частиц света, для его квантов, как принято говорить, было придумано специальное слово - "фотон". Слово "квант" происходит от латинского слова quantum - сколько, а "фотон" - от греческого слова photos - свет. Слова, обозначающие название частиц, в большинстве случаев имеют окончание «он». Как ни удивительно, в одних экспериментах свет ведет себя как волны, а в других - как поток частиц. Постепенно удалось построить теорию, предсказывающую, как, в каком эксперименте будет вести себя свет. В настоящее время эта теория всеми принята, разное поведение света уже не вызывает удивления. Первые шаги всегда особенно трудны. Приходилось идти против устоявшегося в науке мнения, высказывать утверждения, кажущиеся ересью. Настоящие ученые искренне верят в ту теорию, которую они используют для описания наблюдаемых явлений . Отказаться от принятой теории очень трудно. Первые шаги сделали Макс Планк (1858-1947) и Альберт Эйнштейн (1879-1955). Согласно Планку - Эйнштейну, именно отдельными порциями, квантами, свет излучается и поглощается веществом. Энергия, которую несет фотон, пропорциональна его частоте: Е = hv. Коэффициент пропорциональности h назвали постоянной Планка в честь немецкого физика, который ввел ее в теорию излучения в 1900 году. И уже в первой трети XX века стало понятно, что постоянная Планка - одна из важнейших мировых констант. Естествен но, она была тщательно измерена: h = 6, 6260755 .10~34 Джс. Квант света - это много или мало? Частота видимого света порядка 1014 с-1. Напомним: частота и длина волны света связаны соотношением v = с/Х где с = 299792458'1010 м/с (точно) - скорость света в вакууме. Энергия кванта hv, как нетрудно видеть, порядка 10~18 Дж. За счет этой энергии можно поднять на высоту 1 сантиметр массу в 10~13 грамма. По человеческим масштабам чудовищно мало. Но это масса 1014 электронов. В микромире совсем другие масштабы! Конечно, человек не может ощутить массу в 10~13 грамма, но глаз человека столь чувствителен, что может увидеть отдельные кванты света - в этом убедились, произведя ряд тонких экспериментов. В обычных условиях человек не различает "зернистости" света, воспринимая его как непрерывный поток. Зная, что свет имеет одновременно и корпускулярную и волновую природу, легче представить себе, что и "настоящие" частицы обладают волновыми свойствами. Впервые такую еретическую мысль высказал Луи де Бройль (1892-1987). Он не пытался выяснить, какова природа волны, характеристики которой предсказал. Со-
гласно его теории, частице массой т, летящей со скоростью v, соответствует волна с длиной волны X = h/mv и частотой V = E/h, где Е = mv2/2 - энергия частицы. Дальнейшее развитие атомной физики привело к пониманию природы волн, описывающих движение атомных и субатомных частиц. Возникла наука, получившая название "квантовая механика" (в первые годы ее чаще называли волновой механикой) . Квантовая механика применима к движению микроскопических частиц. При рассмотрении движения обычных тел (например, любых деталей механизмов) нет никакого смысла учитывать квантовые поправки (поправки, обязанные волновым свойствам материи). Одно из проявлений волнового движения частиц - отсутствие у них траектории. Для существования траектории необходимо, чтобы в каждый момент времени частица имела определенную координату и определенную скорость. Но именно это и запрещено квантовой механикой1: частица не может иметь одновременно и определенное значение координаты х, и определенное значение скорости v. Их неопределенности2 Ах и Av связаны соотношением неопределенностей, открытым Вернером Гейзенбергом (1901-1974): AxAv ~ h/m где m - масса частицы, ah- постоянная Планка. Постоянную Планка часто называют универсальным квантом "действия". Не уточняя термин действие, обратим внимание на эпитет универсальный. Он подчеркивает, что соотношение неопределенности справедливо всегда. Зная условия движения и массу частицы, можно оценить, когда нужно учитывать квантовые законы движения (другими словами, когда нельзя пренебречь волновыми свойствами частиц и их следствием - соотношениями неопределенности), а когда вполне можно пользоваться классическими законами движения. Подчеркнем: если можно, то и нужно, так как классическая механика существенно проще квантовой. Обратим внимание на то, что постоянная Планка делится на массу (они входят в комбинации h/m). Чем масса больше, тем роль квантовых законов меньше. Чтобы почувствовать, когда пренебречь квантовыми свойствами заведомо можно, постараемся оценить величины неопределенностей Ах и Av. Если Ах и Av пренебрежимо малы по сравнению с их средними (классическими) значениями, формулы классической механики прекрасно описывают движение, если не малы, необходимо использовать квантовую механику. Нет смысла учитывать квантовую неопределенность и тогда, когда другие причины (в рамках классической механики) приводят к большей неопределенности, чем соотношение Гейзенберга. Рассмотрим один пример. Помня, что мы хотим показать возможность пользоваться классической механикой, рассмотрим "частицу", масса которой 1 грамм, а размер 0,1 миллиметра. По человеческим масштабам это - крупинка, легкая, маленькая частица. Но она в 1024 раз тяжелее протона и в миллион раз больше атома! Точнее говоря, мы не можем одновременно определить и то и другое. 2 Интервалы возможных Значений.
Пусть "наша" крупинка движется в сосуде, наполненном водородом. Если крупинка летит достаточно быстро, нам кажется, что она движется по прямой с определенной скоростью. Это впечатление ошибочно: из-за ударов молекул водорода по крупинке ее скорость при каждом ударе чуть изменяется. Оценим, на сколько именно. Пусть температура водорода 300 К (температуру мы всегда измеряем по абсолютной шкале, по шкале Кельвина; 300 К = 27°С). Умножив температуру в Кельвинах на постоянную Больцмана кв, = 1,381.10~16 Дж/К, мы выразим ее в энергетических единицах. Изменение скорости крупинки можно подсчитать, воспользовавшись законом сохранения количества движения. При каждом столкновении крупинки с молекулой водорода ее скорость изменяется приблизительно на 10~18 см/с. Изменение происходит совершенно случайно и в случайном направлении. Поэтому величину 10~18 см/с естественно считать мерой классической неопределенности скорости крупинки (Av) кл для данного случая. Итак, (Av)KJ1 = Ю-18 см/с. Местоположение крупинки определить с точностью большей, чем 0,1 ее размера, по- видимому, очень трудно. Примем (Ах) кл = 10~3 см. Наконец, (Ax)Kn(Av)Kn = 10~310~18 = 10~21. Казалось бы, очень маленькая величина. Во всяком случае, неопределенности скорости и координаты так малы, что можно рассматривать среднее движение крупинки. Но по сравнению с квантовой неопределенностью, продиктованной соотношением Гейзенберга (AxAv = 10~27) , классическая неопределенность огромна - в этом случае превышает ее в миллион раз. Вывод: рассматривая движение крупинки, учитывать ее волновые свойства, то есть существование квантовой неопределенности координаты и скорости, не нужно. Вот когда речь идет о движении атомных и субатомных частиц, ситуация резко меняется. САМЫЙ ПРОСТОЙ АТОМ Атом водорода - самый простой из атомов. Его ядро - один протон, вокруг него движется один электрон. Если сравнивать атом водорода с небесными телами, то напрашивается сравнение с Землей до эпохи искусственных спутников, когда вокруг Земли двигалась только Луна. Но кроме баснословного различия масштабов есть еще одно: система Земля - Луна уникальна, а атомов водорода так много, что хочется сказать бесконечно много. И все они одинаковы, тождественны не только по составу, но и по всем своим свойствам. Прежде всего, все эти атомы имеют одинаковые размеры. Расстояние от Луны до Земли медленно, но изменяется: Луна тратит энергию своего движения на приливы и отливы и из-за этого приближается к Земле. А вот атомы водорода, что бы с ними ни происходило, в какие ситуации они бы ни попадали, не меняются. Будто что-то электрону в атоме не позволяет приблизиться к протону. Что бы это могло быть? Начнем с того, что, воспользовавшись положениями классической механики, рассмотрим, как движется притягивающийся к ядру электрон. Сила притяжения компенсируется центробежной силой, то есть e2/r2==mv2/r. Отсюда радиус орбиты электрона г = e2/mv2 Каков он, сказать невозможно. Фактически он может быть каким угодно: чем меньше скорость, тем расстояние от ядра больше. Не удивляйтесь: полная энергия движущегося электрона Е тем больше, чем электрон дальше от ядра. Действи-
тельно, сумма потенциальной и кинетической энергий Е = -e2/r + mv2/2. Но mv2 = е2/г, то есть Е = -е2/2г. Получается, что в одном атоме водорода электрон может быть ближе к ядру, в другом - дальше. Потенциальная энергия электрона U(г), соответствующая силе электростатического притяжения Fc = -е2/г2, есть U (г) = -е2/2г плюс постоянная, которую удобно принять равной нулю. Тогда при бесконечном расстоянии электрона от ядра энергия обращается в нуль. При отрицательной энергии электрон вращается вокруг ядра, а при положительной не связан с ядром и может удалиться на бесконечность. Считая траекторию электрона окружностью, мы заметно упростили картину. Движение по окружности под действием электростатической кулоновской силы - частный случай. В общем случае частица с отрицательной энергией движется по эллипсу, в одном из фокусов которого находится притягивающий центр. Формула, связывающая радиус орбиты частицы с энергией, остается справедливой, если под 2г понимать большую ось эллипса. О То, что с помощью классического подхода не удалось выяснить, почему все атомы водорода имеют одинаковые размеры, неудивительно. Движение микроскопических частиц описывается не классической механикой Ньютона, а квантовой механикой, математический аппарат которой весьма непрост. Не претендуя на строгость, можно поступить так: к классическим формулам добавить условие, вытекающее из того, что движение электрона сопровождает волна де-Бройля. Так в свое время поступил Нильс Бор (1885-1962). Правда, когда Бор создавал теорию атома водорода (1913 год), квантовой механики еще не существовало, но он понимал, что исполь- . / **•' зованный прием требует обоснования. Мы же теперь ' '; знаем, что такое обоснование есть - это кванто- ■' *-фв~ вая механика. \ ; ' * . * • Условие, вытекающее из существования волны де- (-' У Бройля, выглядит так: на траектории электрона обязано поместиться целое число волн де-Бройля, ; \ \ то есть 2%г = пХ, где n = 1, 2, 3 ... - целые чис- ла. Но Я, = 27th/mv (напоминаем, что h = h/2%) . Значит, г = (h/mv) п Ч-'"ч_.' где п = 1,2,3... Сравнив последнее выражение с формулой, связывающей радиус орбиты со скоростью, получим3: 2 2/2 г = ап =а.вП , а.в = Ь. /те где n = 1, 2, 3 ... , индекс "В"- в честь Бора. Величину ав так и называют - радиус Бора. Радиус Бора приблизительно равен 0,053 нанометра (1 нм = 10~9 м) . Подставив это значение в выражение для энергии, имеем: Е = En = - e2/2an = - (me4/2h2) (1/п2) где п = 1,2,3 ... Величину (me4/2h2) называют ридбергом в честь шведского оптика Иоганеса Роберта Ридберга (1854-1919) и обозначают Ry, 1 Ry = 13,6058 эВ. Электронвольт (эВ) - принятая в атомной физике единица энергии, то есть энергия, которую приобретает электрон, пройдя разность потенциалов, равную одному вольту, 1 эВ 3 Приравняв оба выражения для радиуса орбиты, выразим скорость v, и подставим ее выражение для радиуса орбиты через волны де-Бройля.
= 1,60217733'10~19 Дж. Мы еще вернемся к вопросу, большая или маленькая энергия масштаба одного ридберга, а пока попытаемся понять качественную сторону полученных результатов. Из них следует три вывода. Во-первых, электрон в атоме может иметь только дискретные значения энергии. Мы нарочно опустили наименование атома - водород. В любом атоме энергии электронов дискретны. Во-вторых, существует состояние электрона с энергией, меньше которой электрон иметь не может. Это состояние называется основным. Все остальные состояния называют возбужденными. Прежде чем сформулировать третий пункт, придется сказать несколько вступительных слов. Двигаясь с ускорением, заряженная частица излучает электромагнитные волны. На этом принципе устроены все антенны, любые источники электромагнитного излучения - радиоволн, видимого света, рентгеновских и гамма- лучей . А электрон в атоме, в каком бы состоянии он ни находился, не излучает, хотя движется с ускорением. Правда, электрон в возбужденном состоянии может излучить электромагнитную энергию, перейдя в одно из состояний с меньшей энергией. Энергия излучается квантами, и в процессе излучения, как во всех процессах, происходящих в природе, выполняется закон сохранения энергии. Энергия излученного кванта в соответствии с законом сохранения энергии равна hv = En - Em где пит- целые числа и п > т. Сколько времени электрон проведет в возбужденном состоянии, зависит от целого ряда причин, исследованных квантовой механикой. Эти времена различны, но все они конечны. Исключение составляет основное состояние: закон сохранения энергии запрещает электрону, находящемуся в основном состоянии, излучать электромагнитную энергию. Отсюда следует третий вывод: основное состояние электрона в атоме устойчиво . Те, кому для понимания нужен зрительный образ (а таких, видимо, большинство) , наверное, уже представили себе атом водорода в виде колечка, по которому катается электрон вокруг центра, где находится ядро - протон. Придется вас огорчить: эта картинка неверна. Она была бы верной, если бы электрон подчинялся законам классической механики. Настоящая квантовая механика, а не та наглядная комбинация корпускулярных и волновых представлений, которые были изложены, утверждает, что электрон в основном состоянии "размазан" не по окружности, а по сфере, радиус которой равен приблизительно ав. Так что представлять себе атом лучше шариком, а не колечком. Слово "размазан" взято в кавычки неслучайно. Никакого реального размазывания электрона по атому не происходит. Правильнее было бы сказать так: в любой точке сферы радиуса ав, а также вблизи нее есть вероятность обнаружить электрон. Суммарная вероятность найти электрон в атоме, естественно, равна единице. Ведь он действительно там - в атоме! Энергию, равную 1 ридбергу, нужно придать электрону, чтобы он оторвался от ядра, то есть это энергия ионизации атома водорода. Один из способов оторвать электрон таков: атом водорода сталкивается с каким-либо другим атомом, кото-
рый и передает электрону свою энергию. Когда столкновения происходят в газе, то мерой средней энергии движения атомов служит температура Т, а поскольку 1 эВ = 1,16064 104 К, 1 Ry = 1,58'105К, или свыше полутора миллионов градусов. Каким же горячим должен быть газ, чтобы ионизация за счет столкновений происходила часто! А если вспомнить, что первое возбужденное состояние электрона отделено от основного по энергии на "расстояние", равное (3/4) Ry, то и возбуждение атомов водорода будет происходить часто только в очень горячем газе. Другой способ ионизации и/или возбуждения атомов - поглощение фотонов. Энергии квантов видимого света может хватить и на возбуждение, и даже на ионизацию. Нужно лишь иметь в виду, что атом и поглощает и излучает свет только определенными порциями - такими, чтобы электрон смог перейти из одного разрешенного состояния в другое, возбуждая атом. А если энергия кванта больше энергии ионизации, свет заведомо электрон оторвет. Способность разных веществ поглощать и излучать электромагнитную энергию квантами определенной, но различной величины послужила основой спектроскопии - важной экспериментальной методики, позволяющей очень точно определять химический состав. Мы уже обращали внимание на непоследовательность планетарной модели атома, если движение электрона описывать законами классической физики. Согласно классической физике атомы вообще не могут существовать. Заряженная классическая частица, вращаясь с частотой v, непрерывно излучает электромагнитную энергию именно частоты v. Тратя энергию на излучение, классическая частица "медленно и верно", а по человеческим масштабам времени - мгновенно, приближается к ядру и, в конце концов, прилипает к нему - атом исчезает. Квантовая механика, кардинально изменив картину движения атомных и субатомных частиц, оправдала планетарную модель. Невозможно себе представить, как в годы полного триумфа электромагнитной теории Резерфорд решился пожертвовать классической электродинамикой и принять планетарную модель атома. Трудно проникнуть в интуицию гениев. ЯДРА И ЯДЕРНЫЕ СИЛЫ Ни атомы, ни более сложные конструкции из микроскопических частиц без тяжелых ядер, состоящих из нуклонов, существовать не могут. И все же, в нашем рассказе речь пойдет, в основном, не о нуклонах, а об электронах, так как именно они ответственны за конструирование из атомов более сложных структур - молекул и твердых тел. Этот раздел - исключение: в нем мы расскажем о том, какие силы действуют между протонами и нейтронами, позволяя им создавать ядра атомов. При всей простоте атома водорода у него есть изотопы. Всего их три. Обычный атом водорода, у которого ядро - протон, иногда называют протием (слова "протон" и "про- тий" происходят от греческого слова протос - первый). Следующий по массе изотоп - дейтерий (по-гречески деуте- рос - второй). В его ядре один протон и один нейтрон. Самый тяжелый изотоп водорода - тритий (тритос - по- гречески третий). Его ядро состоит из одного протона и Протон R<lC'!?v, П ядро - R~ 10 'нейтрон атом
двух нейтронов. Дейтерий устойчив, тритий живет достаточно долго. Период его полураспада (время, за которое распадается половина ядер) 12,26 года. У всех остальных атомов и их изотопов ядра также состоят из протонов и нейтронов. Нуклоны притягиваются друг к другу ядерными силами, которые совершенно не похожи на те, с которыми мы встречались до сих пор - ни на гравитационные, ни на электростатические. Электростатические силы действуют и на микроскопических и на макроскопических расстояниях. Ядерные силы не проявляют себя на макроскопических расстояниях: они очень быстро спадают с расстоянием. Радиус их действия порядка 10-15 метра. Для этой сверхмалой длины, характеризующей размеры атомных ядер, ввели специальное обозначение: 10~15 м = 1 Фм (ферми, в честь итальянского физика Энрико Ферми, 1901-1954). Все ядра имеют размеры нескольких ферми. Радиус ядерных сил по порядку величины равен размеру нуклона, поэтому ядра - сгустки очень плотной материи. Возможно, самой плотной в земных условиях. Наиболее тесно нуклоны упакованы в ядре атома гелия, которое состоит из двух протонов и двух нейтронов. Атом гелия, лишенный своих электронов, называется альфа-частицей (а-частицей). Во многих случаях удобно считать, что и более тяжелые ядра состоят из альфа-частиц. Не вошедшие в альфа-частицы нуклоны слабее связаны с ядром, чем те, которые находятся в их составе. Ядерные силы - пример сильных взаимодействий. Они многократно превосходят кулоновскую силу (но, конечно, на одинаковом расстоянии). Электростатическое взаимодействие характеризуется энергией порядка нескольких электронвольт, а характерные ядерные энергии в миллион раз больше - мегаэлектронвольты (Мэвы). Короткодействие ограничивает действие ядерных сил ближайшим окружением нуклона, в то время как медленно спадающее с расстоянием электростатическое отталкивание протонов действует во всем объеме ядра. С ростом числа нуклонов ядра становятся неустойчивыми, и поэтому большинство тяжелых ядер радиоактивны, а совсем тяжелые вообще не могут существовать. Конечное число элементов в природе - следствие короткодействия ядерных сил. Однако в конце 60-х годов XX века теория ядра предсказала существование стабильных элементов с порядковыми номерами Z = 110-114, а возможно, и 126 - так называемого "острова стабильности". Эту теорию косвенно подтверждает эксперимент, недавно проведенный в Дубне. Там был получен 114-й элемент с атомной массой А = 289, который "жил" 30 секунд - невероятно долго для атома с ядром такого размера. Сегодня теоретики уже обсуждают свойства сверхтяжелых ядер массой 300 и даже 500, хотя в самой возможности их существования имеются определенные сомнения. Когда говорят о ядерных силах, часто не различают протон и нейтрон. Ядерные силы очень слабо зависят от того, взаимодействует протон с протоном, нейтрон с нейтроном или протон с нейтроном. Удивительный вывод квантовой физики: два нуклона притягиваются друг к другу, потому что обмениваются между собой частицей. Частицу назвали пи-мезоном, или пионом. Один нуклон испускает пи-мезон (л;-мезон) , другой его поглощает, а в результате нуклоны притягиваются друг к другу. В слове мезон «он» - окончание, как у всех названий частиц, а корень мезо взят из греческого, мезос - промежуточный: масса л;-мезона больше массы электрона и меньше массы протона.
Масса л-мезона стала известна еще до открытия этой частицы. По теории (она была создана в 1935 году японским физиком Хидэки Юкава, 1907-1981) между радиусом действия ядерных сил и массой %-мезона т„ существует простая связь: т„ >= h/crn. Есть три сорта л-мезонов - положительный, отрицательный и нейтральный. Их массы несколько отличаются, но все они примерно в 200 раз больше массы электрона. Итак, ядра атомов состоят из протонов и нейтронов. На первый взгляд у нейтрона, как у одного из основных (первичных) элементов, из которых все построено, есть крупный недостаток. Нейтрон недолговечен. В свободном состоянии время его жизни приблизительно 15 минут. Он распадается на протон, электрон и антинейтрино (этот процесс называется Р-распадом, поскольку поток электронов когда-то назывался бета-лучами). Однако в стабильных ядрах, по современным оценкам, время его жизни превышает 1032 лет. Скорее всего, столько же живет протон, распад которого старательно искали, но так пока и не обнаружили. Нестабильность протона предсказал А. Д. Сахаров. В ядре атома сосредоточена атомная энергия. Ее освоение - задача ядерной физики. МОМЕНТ КОЛИЧЕСТВА ДВИЖЕНИЯ Количеством движения, или импульсом частицы, называется произведение ее массы m на скорость v. Изменение импульса происходит тогда и только тогда, когда на частицу действует сила. Если сила не действует, импульс сохраняется, его величина не зависит от времени. Закон сохранения импульса, как и закон сохранения энергии, - один из основных законов природы. Во всех без исключения случаях, что бы ни происходило с системой тел любой природы, ее энергия и импульс не изменяются, лишь перераспределяясь между частями системы, если она ни с чем не взаимодействует (а это и означает, что на нее не действует сила). В атоме водорода движущийся электрон испытывает силу притяжения ядра. Поскольку ядро в тысячи раз тяжелее электрона, можно принять, что оно неподвижно относительно центра масс системы, и считать, что в любом атоме движутся только электроны. Пока ограничимся атомом водорода. При движении электрона вокруг протона сохраняется его полная энергия Е, равная сумме потенциальной и кинетической энергий. Импульс электрона меняется, так как на него действует сила притяжения. Но в данном конкретном случае есть другая величина, которая остается неизменной. Когда частица массы m вращается со скоростью V по окружности радиуса г, то одной из важнейших характеристик ее движения, наряду с энергией, служит момент количества движения (импульса), или просто момент. Обозначим его буквой М. Буквы М и V выбраны прописными, чтобы подчеркнуть: скорость и момент количества движения - величины векторные . Вектор М направлен по оси вращения, а в какую правления вращения. сторону, зависит от на-
При движении частицы под действием силы, обладающей центральной симметрией (а именно такова сила, притягивающая электрон к ядру), момент не зависит от времени - на всей траектории он один и тот же. Можно сказать иначе. Траектория частицы определяется ее энергий Е и моментом М (его величиной и направлением) : траектория (при Е < 0 эллипс или окружность) лежит в плоскости, перпендикулярной вектору момента М. Величина момента М и энергия Е связаны условием 2М2 < | Е |/e2rrie ^ 1. При равенстве, то есть когда величина момента наибольшая при фиксированной энергии, траекторией будет окружность. Чем момент меньше , тем эллипс более вытянут. Это происходит не за счет удлинения большой оси (ее длина зафиксирована значением энергии), а за счет уменьшения малой. Последнему неравенству можно придать несколько странный вид: М2 < h2 (а/ав) . Боровский радиус ав пропорционален h2, поэтому в неравенстве фактически постоянной Планка нет. Переписанное в таком виде неравенство показывает, что момент количества движения М и постоянная Планка h имеют одинаковые размерности . ПРОСТРАНСТВЕННОЕ КВАНТОВАНИЕ Характерная черта квантовой механики - дискретность физических величин: все они меняются не плавно, а скачками. Дискретность - следствие сочетания корпускулярных и волновых свойств атомных и субатомных частиц. С одним примером дискретности мы уже знакомы: электрон в атоме водорода может иметь не любые, а только определенные (дискретные) значения энергии. Если при классическом подходе физическая величина может иметь произвольные значения, а при квантовом - дискретные, говорят, что данная физическая величина квантуется. Момент М квантуется, но он - вектор, имеющий и величину, и определенное направление в пространстве. Квантуется не только величина вектора М, но и его направление. Отсюда название - пространственное квантование. Пространственное квантование - одно из следствий соотношения неопределенностей Гейзенберга. Для его описания надо выбрать в пространстве направление и с ним совместить ось квантования. Слово "выбрать" не очень точно: на самом деле совершенно безразлично, куда направить ось квантования. Сила, действующая на частицу, не зависит от направления, все направления в пространстве эквивалентны, и ось квантования можно ориентировать как угодно. А если бы вектор М был классическим, то есть его свойства описывались законами ньютоновской механики, то и угол 6 между вектором Ми А осью мог быть произвольным. В квантовой механике У Примем ось квантования за ось z прямоугольной (декартовой) системы координат; две другие оси - х и у; Мх, My, Mz = McosB - проекции вектора М на оси выбранной (но ориентированной произвольно) системы координат. Пространственное квантование означает, что угол 6 не произволен, он таков, что проекция вектора М на ось z (ось квантования) принимает целочисленные значения: Mz = -hi, -h(I- не так. Z х
1) ... h(I-l) , hi, где I - целое число или нуль. Всего вектор М может иметь 21+1 проекций на ось квантования. Число I задает длину вектора М - величину момента М: М = |М| = h[I(I+l)]1/2. Кроме Mz, других определенных проекций (Мх, Му) вектор М не имеет вовсе. С ростом числа I момент количества движения становится все более "классическим" : число возможных проекций на ось z возрастает, а величина момента приближается к величине максимальной проекции (М -> |М|макс ). Это простой пример принципа соответствия, согласно которому при определенных условиях формулы, полученные по законам квантовой механики, должны совпадать с формулами, полученными на основе классической механики. В данном случае эти определенные условия формулируются особенно просто: М » h. Вернемся к атому водорода. Выведенное в предыдущем разделе неравенство, которому удовлетворяют энергия и момент количества движения в квантовом случае, выглядит особенно просто: I ^ (п - 1), то есть при фиксированном числе п число I может принять п значений: 0, 1, (п - 1). Следовательно, в основном состоянии (n = 1) у электрона может быть только нулевой момент количества движения. Учтя, что каждому значению числа I соответствует 21 + 1 состояний (различных проекций момента М на ось квантования), нетрудно убедиться, что любому значению п соответствует п2 состояний. Для дальнейшего изложения этот результат очень важен. СПИН - СОБСТВЕННЫЙ МОМЕНТ КОЛИЧЕСТВА ДВИЖЕНИЯ Давайте вернемся к таблице 1. В ней есть столбец "спин", во всех клеточках которого стоит 1/2. Расширим таблицу, внеся в нее л;-мезоны, нейтрино и фотоны (табл. 2) . ТАБЛИЦА 2 Частица Заряд Масса Спин тистика Электрой ее = -1,602-10 19 те = 9,109-1031 Ф Протои ел= + 1,602-Ю9 т,= 1,673-10 27 Ф Нейтрон 0 т = 1,675-Ю-27 'Л Ф тс+-мезон е = +4,80-10 10 т = 0,249-10 27 0 Б л°-мезон 0 т = 0,240-10 27 0 Б ж-мезон е =-4,80-10 10 т =0,249-1027 0 Б Фотои 0 0 1 Б Нейтрино 0 « 0 v2 Ф Возможно, физики предпочитают писать малое латинское «эл», но в этом шрифте оно похоже на «1», поэтому Здесь и далее мы будем использовать «I». Это ведь не принципиально, а просто дань традиции.
Против каждого из мезонов (положительного, отрицательного и нейтрального) в соответствую щей клеточке столбца "спин" стоит 0, у фотона - 1, а у нейтрино - 1/2. Итак, спин электронов, протонов, нейтронов и нейтрино равен половине, л-мезонов - нулю, а фотона - единице. В столбце со странным названием "статистика" против частиц со спином 1/2 стоит буква Ф, а против тех, у которых спин равен 0 или 1, - буква Б. Что же такое спин? Сначала еще несколько слов об обыкновенном моменте количества движения, не о собственном. То, что I - целое число и справедливы формулы, описывающие пространственное квантование, - следствие волнового движения микрочастицы в пространстве. При вращении, казалось бы, всегда что-то движется в пространстве. Когда вращается твердый шарик вокруг оси, проходящей через его центр, все точки в шарике и на его поверхности, кроме расположенных на оси, перемещаются в пространстве. Может ли вращаться точка? На первый взгляд вращение точки - абсурд. Оказывается, нет! Частица, которую можно (а иногда даже следует) считать точечной, способна "вращаться". Правильней сказать так: такая частица обладает собственным моментом вращения, или спином (по-английски spin - вращаться). Эпитет собственный очень важен. Он означает, что этот момент - неизменное, неустранимое свойство частицы, такое же, как ее масса и заряд. А то, что собственный момент не связан с перемещением в пространстве (недаром слово "вращаться" взято в кавычки), приводит к тому, что не обязательно I - целое число. Но число проекций на ось квантования 21 + 1 - целое. В случае собственного момента I может быть либо целым числом, либо полуцелым. Когда речь идет о спине, вместо буквы I принято использовать букву s. Хотя величина собственного момента (спина) есть h[s(s + 1)]1/2, величиной спина частицы считают именно s. Частицы с нулевым или целым значением спина (s=0, 1, 2 ...) называются бозонами (буква Б в таблицах). Частицы с полуцелым спином (не только с s = 1/2, но и с 3/2 или 5/2 ... - такие тоже есть) называются фермионами (буква Ф в таблицах). Каково различие фермионов и бозонов, будет рассказано ниже. Повторим: у электрона, протона, нейтрона и нейтрино спин равен 1/2. Спин, равный 1/2, - удивительный вектор. В этом случае 2s + 1 = 2. Значит, спин электрона, протона, нейтрона, нейтрино имеет лишь две проекции на ось квантования: +1/2 и -1/2. Ось, правда, может иметь произвольное направление в пространстве . Вернемся к концу предыдущего раздела. Электрон имеет две различные проекции спина. Поэтому при фиксированном значении п число состояний электрона равно 2п2: n = 1, 2, 3, 4 . . . 2п2 = 2, 8, 18, 32, 50... Эти числа столь важны, что им выделена отдельная строка. Обратимся теперь к таблице Менделеева. Цифры 2, 8, 18... важны для понима-
ния структуры периодов. Один пример. Инертные газы завершают периоды. Атомные номера - у гелия Не Z = 2; у неона Ne Z = 10, но 10 =2 +8; у аргона Ar Z = 18. Дальше совсем интересно: у криптона Кг Z = 36, но 36 = ZAr + 2 + 8 + 8. У ксенона Хе Z = 54, а 54 = ZKr + 2+ + 8 + 8. Похоже, выписанные выше числа действительно играют какую-то важную роль. Особенно, если вспомнить, что атомный номер Z совпадает с числом электронов в атоме. Чтобы понять, почему числа 2, 8, 18... столь важны, придется познакомиться с одним из фундаментальных положений квантовой физики - с принципом запрета Паули. НЕ РАЗЛИЧИМОС ТЬ И ПРИНЦИП ПАУЛИ Понятие "взаимодействие", наверное, представляется довольно очевидным. Особенно, когда речь идет об атомных или субатомных частицах. Находящиеся на некотором расстоянии друг от друга частицы либо притягиваются одна к другой, либо одна от другой отталкиваются. Взаимодействие - следствие существования у частиц особого свойства, называемого зарядом. Раньше физики знали только электрические заряды - положительный и отрицательный. Углубление в микромир привело к открытию еще нескольких зарядов. В отличие от электрических они не играют роли при взаимодействии макроскопических тел. Когда заряд равен нулю, то, казалось бы, взаимодействия нет. Но квантовая механика вносит свои коррективы. При равенстве соответствующего заряда нулю сила притяжения или отталкивания, обязанная ему, действительно равна нулю. Но взаимодействие все же есть. Оно проявляется в том, что состояние двух одинаковых частиц не есть произвольное состояние каждой из частиц. Состояние должно удовлетворять принципу неразличимости. Квантовые частицы неразличимы в принципе. Это утверждение сильнее, чем утверждение о тождественности частиц в классической физике. В ньютоновской механике частица движется по определенной траектории. За ней можно следить, ее не спутаешь с другой, даже если они тождественны. В квантовой механике у частицы нет определенной траектории. Возможны квантовые скачки, можно с определенной вероятностью обнаружить частицу на первый взгляд в неожиданном месте - непрерывно следить за ней невозможно. Описывая движение двух или нескольких квантовых частиц, нужно использовать условия, которые обеспечивают выполнение принципа неразличимости. Свою неразличимость частицы проявляют по-разному. Как именно, зависит от их спина - целый он (в частности, нулевой) или полуцелый. Если частицы - бозоны, то есть имеют нулевой или целый спин, то функция, описывающая состояние двух частиц, при перестановке частиц местами вовсе не меняется. Если же частицы - фермионы с полуцелым спином, функция, описывающая состояние двух частиц, при перестановке частиц меняет знак. (В квантовой теории перемена частиц местами - чисто математическая процедура: в функции, описывающей их состояние, меняют местами аргументы, относящиеся к разным частицам). Это различие кардинально влияет на поведение совокупностей квантовых частиц - как принято говорить, на их статистику (см. таблицы 1 и 2, столбец "статистика"). О различии статистик можно сказать совсем кратко: любому количеству бозонов ничто не мешает скапливаться в одном состоянии. Именно это их свойство позволило получить "пятое состояние вещества" - так называемый бозе-эйнштейновский конденсат, когерентную материю, комок атомов в одном квантовом состоянии. А число фермионов в каждом состоянии либо 0, либо 1. Третьего не дано! Для фер-
мионов осуществляется запрет: две одинаковые частицы не могут находиться в одном и том же состоянии. Этот запрет в 1924 году впервые сформулировал Вольфганг Паули (1900-1958). Запрет заслуженно называется принципом Паули. Состояние электрона в любом атоме определяют четыре числа: главное квантовое число п (п = 1,2,3...); орбитальный момент количества движения I < (п - 1); проекция момента на ось квантования Iz (таких проекций 21 + 1); проекция спина на ось квантования (их две - либо +1/2, либо -1/2). Принцип Паули запрещает электронам иметь четыре совпадающие характеристики. Этот запрет диктует закон, по которому построена электронная оболочка атома. КАК ПОСТРОЕНА ЭЛЕКТРОННАЯ ОБОЛОЧКА АТОМА Основное состояние любой физической системы — состояние с наименьшей возможной энергией. Именно возможной! Когда какой-то предмет лежит на столе, то, упади он на пол, энергия системы понизится. Но мы стараемся исключить подобную возможность. В атоме водорода электрон не может иметь энергию меньшую, чем энергия основного состояния. Условие квантования запрещает такие состояния . Нам предстоит понять, как распределены электроны по состояниям в атоме, электронная оболочка которого имеет несколько электронов (в тяжелых атомах их довольно много). Общий принцип таков: энергия электронов должна быть наименьшей, но нарушать принцип Паули нельзя. Для описания состояния электронов в атомах приняты следующие обозначения. Если у электрона орбитальное квантовое число 1=0, его состояние обозначается буквой s, если 1=1, буквой р, если 1=2, буквой d, наконец, если I = 3, то буквой f. Буквы эти попали в атомную физику из спектроскопии, где они суть первые буквы названия спектральных серий: s — sharp — резкая, р — principal — главная, d — diffuse — диффузная, f — fundamental — фундаментальная . В атомной физике эти названия, похоже, забыты и остались только буквы. Воспользуемся ими. При таблице Менделеева есть клеточка, в которой объясняются принятые термины. Среди них имеется строка Электронная конфигурация. На ней зафиксировано распределение электронов по состояниям. Попробуем в ней разобраться. Энергия электрона в атоме очень слабо зависит от проекций орбитального I и спинового s моментов на ось квантования. Когда эти зависимости проявляются,
,2 A eq о № и S w 4 en M я S и ч К t=t о « т Е "5 31 к ,с/э 3 =L£ СО ,2 а/ 0-> ;6 .6 б "-3-5 N si IS 3 к - я к з .с "а о. 4 iC/5 1|S а S § =1 й|',т и , 1- 0±D- '(Я ё ё & ■Л i Of 1 * I = is I w I UJ о 1 ft. CQ 0. I Ы E M i з 3 < LU 4 - s3 s|S| 1 s «I 1Д i(3 Eli! UJ Щ1 lis 'J CI ТГ * 12 ж si 1,3 ^2 3U 02 Ell a. I 3
то их называют тонкой и сверхтонкой структурой. Во многих случаях влиянием Iz и sz можно пренебречь. Важна зависимость от величины главного и орбитального квантовых чисел п и I. Выпишем электронные конфигурации первых нескольких атомов (Z — число электронов в атоме). Водород (Н) , Z = 1 Гелий (Не) , Z = 2 Литий (Li), Z = 3 Is1. Is2. ls^s1 Углерод (С), Z = 6: ls22s22p2. Что означают латинские буквы, мы уже знаем. Цифры на строке — значения n, а цифра над строкой — число электронов в состоянии с указанными слева значениями п и 1. Итак: у водорода один электрон в состоянии сп=1и1=0, у гелия два электрона в таком же состоянии, а у лития два электрона все в том же состоянии, а третий в состоянии сп=2и1=0. Третий электрон не попал в состояние Is из-за принципа Паули: в этом состоянии не может находиться более двух электронов (вспомните: 2, 8, 18, 32 ..!). Глядя на обозначение электронной конфигурации, нетрудно представить себе форму электронной оболочки атома. Когда у всех электронов 1=0, оболочка сферически симметрична. Если в оболочке есть электроны с I = 1, электронная оболочка вытянута . Присмотритесь к электронной конфигурации углерода. У него два электрона в р- состоянии. Следовательно, электронная оболочка как-то вытянута. Сказать точно, как именно, невозможно. Каждый из моментов количества движения обоих электронов может иметь одинаковые проекции на ось квантования5 (ко- 2 s т =0 нечно, электроны при этом должны иметь разные проекции спинового момента), а могут электроны в 2р-состоянии иметь разные проекции момента количества движения. Обилие весьма близких по энергии пространственных конфигураций объясняет исключительную роль углерода в веществах, из которых построено 2/> т = 1 Is m = 0 все живое. t ■Ad т = 1 По своим свойствам атомы существенно отличаются друг от друга. Пытаясь понять , чем вызвано различие их химических свойств, почему одни атомы легко объединяются с другими, а иные инертны, античные философы наградили атомы различными специальными приспособлениями: крючочками, петельками и т. п. Но в атомах нет ничего, кроме ядра и электронов. Именно электроны ответственны за химические свойства веществ и их разнообразие. Тонкости химических свойств веществ очень непросто строго объяснить, основываясь на понимании электронных структур атомов и конструкций из атомов. Этим занимается специальная наука — квантовая химия, успехи которой велики. 5 На рисунке «т».
Сосредоточим свое внимание на трех столбцах таблицы Менделеева — на восьмом, в котором инертные газы, и на двух соседних - на седьмом, где типичные металлоиды (фтор, хлор и т.д.), и на столбце 1а, где щелочные металлы (литий, калий,..., а также водород). Восьмой столбец часто помещают перед первым, так что мы не очень погрешили против истины, назвав столбец 1а соседним с восьмым . Электронные структуры атомов этих столбцов помогут, по крайней мере в общих чертах, объяснить их свойства. Вспомним, что квантовое число п определяет «положение» электрона относительно ядра. Чем п больше, тем электрон дальше от ядра. Слово «положение» взято в кавычки, прежде всего, потому, что электрон движется, а, кроме того, как мы говорили, электрон «размазан». И все же, чем больше п, тем этот движущийся и «размазанный» по своей оболочке электрон дальше от ядра. С ростом величины момента I энергия электрона, как правило, тоже растет. Водород — исключение : энергия электрона в атоме водорода от I не зависит вовсе. Электронная конфигурация атомов восьмой группы показывает, что электроны этих атомов необычайно компактно укомплектованы. Ни на один из занятых уровней нельзя добавить ни одного электрона, так как такое добавление вступит в противоречие с принципом Паули. Вот у атомов седьмой группы явно есть одно свободное место, а у всех щелочных металлов есть как бы дополнительный электрон — электрон с максимальной энергией. Он слабее связан с ядром, чем остальные электроны. Перечисленных сведений об электронной структуре атомов хватит, чтобы пояснить , КАК ИЗ АТОМОВ ОБРАЗУЮТСЯ МОЛЕКУЛЫ Когда атомы сближаются друг с другом и их электронные оболочки почти соприкасаются, то может произойти такая перестройка электронных конфигураций атомов , что энергия всей системы несколько уменьшится. При этом возникает связанное состояние сблизившихся атомов. Это и есть молекула. Разнообразие молекул безгранично. Есть молекулы, состоящие из двух атомов, а есть, по атомным масштабам, огромные конгломераты атомов. Ввели далее специальный термин — «макромолекулы». Сколь бы ни были разнообразны молекулы, сколь бы ни были различны их свойства, любая молекула состоит из ядер, ранее принадлежавших атомам, из которых молекула построена, и электронов, создавших новую по сравнению с исходными атомами электронную оболочку. В большинстве случаев перестройка электронной конфигурации затрагивает электроны, которые имеют в атоме наибольшую энергию и слабее других связаны со своим ядром. Их называют валентными (термин происходит от латинского слова valentia, что означает «сила»: валентные электроны — носители силы, объединяющей атомы в молекулы). Нет возможности описать подробно структуру разных молекул. Рассмотрим только простейшие — молекулу водорода Н2 и молекулу поваренной соли NaCl. Молекула водорода. Два протона (ядра атомов водорода) создают вокруг себя притягивающее электроны силовое поле. Вокруг ядер движутся два электрона. Оба они имеют наи-
меньшую из возможных энергий, а их спины расположены антипараллельно. Поэтому принцип Паули не нарушен. Подчеркнем: третьему электрону нет места в том состоянии, в котором находятся два электрона. Возникновение полностью за полненной электронной конфигурации в результате объединения валентных электронов нескольких атомов — часто встречающийся способ образования молекул. Электроны, близко расположенные к ядру в атоме, в процессе объединения атомов в молекулу играют меньшую роль. Правда, они экранируют заряд ядра, поэтому в много электронном атоме силовое поле, притягивающее валентные электроны, создают уже не ядра, а ионы. Заряд иона тем больше, чем больше в атоме валентных электронов. Можно было бы подумать, что молекула водорода тождественна атому, ядро которого состоит из двух нуклонов, - дейтерию. Это не так: атомное расстояние между протонами в молекуле водорода порядка одной десятой нанометра, а между нуклонами в ядре дейтерия — в 100 тысяч раз меньше. Из-за этого энергия связи атомов в молекуле в миллионы раз меньше, чем нуклонов в ядре. Силы, действующие между атомами в молекуле, имеют электростатическую природу. Молекула NaCl. У атома натрия один валентный электрон, а хлору не хватает одного электрона до заполненной конфигурации. При сближении атомов Na и С1 валентный электрон атома натрия займет свободное место в атоме хлора. Возникнут два иона: Na+ и С1~. Как два разноименно заряженных шарика, они притягиваются и, прижавшись друг к другу, образуют молекулу NaCl. Казалось бы, почти все понятно. Но странно - что мешает электронам двух ионов соединиться в одну электронную систему, двигающуюся вокруг двух ядер? Почему ионы ведут себя, как твердые шарики? Конечно, некоторую роль играет то, что электроны, обладая отрицательным зарядом, отталкиваются друг от друга. Но главное не в этом. Раньше было рассказано о безумной идее Луи де Бройля. Она нашла подтверждение в квантовой механике: каждой движущейся частице можно поставить в соответствие волну, длина X которой тем меньше, чем больше импульс частицы р = mv. Выразив импульс р через энергию Е, получим: X = 2р/(2тЕ)1/2 Чем энергия больше, тем длина волны меньше, и наоборот. Если все электроны будущей молекулы соберутся вместе в небольшой области пространства, на каждую частицу придется очень мало места. Длина волны каждого электрона уменьшится, а энергия каждого электрона, и тем самым всех их вместе, сильно возрастет. В результате энергия электронов в молекуле окажется значительно больше их энергии в атомах. Образование молекулы было бы энергетически невыгодно. Итак, волновые (квантовые) свойства электронов мешают слиянию ионов, и каждый ион ведет себя подобно твердому шарику. Описанный способ образования молекул встречается весьма часто. Не будем приводить другие примеры. Они есть в школьных учебниках по химии.
Для характеристики атомов и ионов часто вводят понятие атомного или ионного радиуса, понимая некоторую его условность: шарик такого радиуса не заполнен плотно электронами, но все электроны атома или иона действительно движутся внутри его. Молекулу удобно представлять как сравнительно жесткую конструкцию, построенную из шариков - атомов и/или ионов. При этом положения центров шариков, совпадающих с ядрами атомов, молено считать строго определенными. Из-за относительно большой массы атомов (ионов) квантовая неопределенность их положений часто несущественна и каждая молекула имеет вполне четкую форму. МОЛЕКУЛЫ... ЧТО ЖЕ ДАЛЬШЕ? Пока речь шла только о кирпичиках, из которых состоят все предметы, все биологические объекты и мы сами. Настоящие кирпичи, конечно, во много раз меньше постройки, на которую они были потрачены. Для кирпичной стены размером 10 х 10 х 0,2 метра понадобится примерно 10 тысяч кирпичей. Вычислить легко, а вот что бы перебрать столько кирпичей, тратя на каждый одну секунду, нужно около трех часов. Размер каждой молекулы в несколько раз превышает размер атома. Пусть для простоты каждая молекула имеет линейные размеры порядка 1 нанометра (напомним: 1 нм = 10~9 м = 10~7 см) . Значит, в 1 см3 поместится 1021 молекул. Такое число представить себе невозможно. Попробуем перебрать 1021 молекул, тратя на каждую по-прежнему одну секунду. Время, требуемое на эту процедуру, составит более 1013 лет. Оно превышает возраст Вселенной. Эти оценки помогают представить, как малы размеры атомных частиц по сравнению с окружающими нас предметами, или, как принято говорить, с макроскопическими телами: они состоят из необозримого числа атомов, молекул. Непосредственное наблюдение атомных частиц - заслуга физики XX века. Когда из кирпичей строят стены, то, как правило, применяют специальные скрепляющие вещества, играющие роль клея. Молекулы, объединяясь в макроскопическое тело, обходятся своими силами. Здесь расхожее выражение «своими силами» имеет буквальный смысл: это все те же электростатические силы притяжения и отталкивания, правда, усложненные тем, что заряженные частицы собраны в нейтральные образования. Ведь число отрицательно заряженных частиц (электронов) и в атомах и в молекулах строго равно числу положительных частиц (протонов) . Хотя молекулы нейтральны, на больших расстояниях они притягиваются друг к другу всегда, вне зависимости от того, как построены. Состав и структура молекул определяют величину силы притяжения и ее зависимость от расстояния между молекулами — обстоятельство очень важное для понимания строения и свойств макроскопических тел. При соприкосновении молекулы отталкиваются. Тоже всегда. Отталкиваются по той же причине, по которой отталкиваются атомы при образовании молекул. Итак, все, что мы непосредственно наблюдаем, все предметы и тела состоят из необозримого числа частиц — атомов, молекул, ионов. Мы имеем дело с веществами в разных состояниях. Нагревая, твердое тело удается расплавить, а жидкость
превратить в газ. Охлаждая, этот путь молено пройти в обратном направлении. При превращении тел из одного состояния в другое с атомами, из которых они построены, как правило, ничего не происходит. Превращение тел — свидетельство изменения только их строения, то есть расположения молекул, атомов и/или ионов в пространстве. Как же расположены атомные частицы в макроскопических телах? Наиболее правильно упорядочены молекулы в кристаллах. Правильней было бы сказать — в монокристаллах. В монокристалле у каждой молекулы есть свое место, а весь монокристалл — повторение одной элементарной ячейки. В природе встречаются небольшие монокристаллы алмазов, аметистов, бериллов и многих других драгоценных камней, но особенно большими — массой в сотни кило граммов — вырастают монокристаллы кварца. Для технических нужд (оптики, лазерной и радиотехники) их выращивают искусственно. Однако гораздо чаще кристаллы состоят из множества маленьких монокристалликов — ' кристаллитов, ориентированных случайным образом. Это — поликристаллы (по-гречески monos — один, poly — много). Во многих твердых телах атомы расположены совершенно беспорядочно. Такие тела называют аморфными. Не слишком удачное название: хотя «аморфный» означает «бесформенный», аморфные тела, как и кристаллические, прекрасно сохраняют форму (по-гречески morphe — форма, а — отрицание). И все же, строго говоря, аморфные тела следовало бы отнести к жидкостям. Только у этих «жидкостей» бесконечно большая вязкость, поэтому они не могут течь. Их отличие от кристаллических тел отчетливо проявляется в том, что при нагревании они не превращаются в жидкость, а размягчаются и проявляют свою способность течь. Типичными примерами аморфных твердых тел служат пластические материалы и стекло . И все же в дальнейшем мы будем говорить главным образом о кристаллических твердых телах. Принцип, заставляющий молекулы конденсироваться в кристалл, тот же, что «руководил» электронами при построении атомов, а атомами — при построении молекул . Система частиц должна обладать энергией меньшей, чем та, которую она имела, когда частицы были друг от друга далеко и потому независимы. Но этого мало. Частицы должны расположиться в пространстве так, чтобы им было «неповадно», чуть сдвинувшись, уменьшить свою энергию. Если бы это условие не было выполнено, частицы не преминули бы действительно сойти со своих мест и уменьшить энергию подобно тому, как скатывается шарик на дно ямки, если его положить на склон. На математическом языке сформулированные условия означают, что энергия системы частиц как функция смещений должна иметь минимум. Положения частиц, при которых энергия их системы минимальна, называют положениями равновесия. В предыдущем абзаце вместо молекулы мы использовали слово «частицы». Дело в том, что в процессе конденсации (то есть превращения совокупности частиц из газа в жидкость или в твердое тело) нередко молекулы распадаются на атомы или
ионы. Иногда далее на ионы и электроны (именно так образуются проводники — металлы). Не будем на этом останавливаться. Сосредоточимся на другом - на расположении частиц в пространстве. Каковы их положения равновесия? Каким образом достигается минимум? Минимум достигается, когда частицы расположены вполне определенным образом. Прежде всего — периодически. Но, конечно, условию минимума энергии удовлетворяет не любое периодическое расположение частиц. Между частицами (молекулами, атомами, ионами) должны быть вполне определенные расстояния. Повторим: в монокристалле энергия его частиц имеет минимум. Монокристалл состоит из строго повторяющихся одинаковых ячеек. В каждой ячейке несколько атомов. Бывает, что один, а бывает и несколько десятков. Многие кристаллы обладают ячейками правильной формы. / / / I S С о / Л у- / Характерная черта кристалла — дальний порядок. Зная строение одной ячейки, мы тем самым знаем строение всего монокристалла. Как правило, частицы в ячейке кристалла уложены достаточно плотно. Поэтому величина каждой ячейки порядка нескольких десятых нанометра. Ячейки в кристалле плотно упакованы. В этом смысле они действительно напоминают кирпичи. Можно не только наблюдать структуру кристаллов, но и с большой точностью измерить параметры кристаллических ячеек, а также установить расположение атомов в многоатомной ячейке, измеряя углы рассеяния в них рентгеновских лучей. Этим занимается рентгеноструктурный анализ. Использование рентгеновских лучей обусловлено тем, что их длина волны того же порядка, что размеры ячеек кристаллов. В поликристалле дальний порядок тоже имеет место, но в пределах одного кристаллита. В каждом кристаллите, конечно, меньше ячеек, чем в большом кристалле, но все же очень много. Обычно линейный размер кристаллита порядка 10~4 сантиметра. Следовательно, в каждом кристаллите более миллиарда 109 ячеек. В аморфных твердых телах атомы расположены так, что дальний порядок отсутствует вовсе. Почему же они самопроизвольно, как шарик со склона, не «сваливаются» в кристаллическое состояние? Этот же вопрос можно задать по поводу поликристаллов. Если бы могли, и аморфные тела, и поликристаллы наверняка превратились бы в монокристаллы. Что же им мешает? Дело в том, что каждая молекула или каждый атом сидит в потенциальной ямке. Во всех случаях существует положение атомов в пространстве, которое энергетически выгоднее (имеет меньшую энергию), чем поликристаллическое или аморфное состояние. Но достичь его можно лишь тогда, когда атомы преодолеют потенциальные барьеры. Иногда это им удается. И происходит спонтанная кристаллизация. Ее порой удается наблюдать на очень старых оконных стеклах, где иногда возникают радужные пятна — это свет преломляется в микроскопических кристалликах, выросших на их поверхности. Но часто барьеры столь велики, что поликристаллическое или аморфное состояние вещества совершенно устойчиво. Из таких материалов можно делать что угодно, не опасаясь, что они спонтанно изменят свое состояние.
В жидкостях нет дальнего порядка. Это позволяет им течь, принимать форму сосуда. Но интересно отметить, что ближний порядок в относительном расположении молекул есть и в жидкости. В любой точке объема жидкости ее молекулы образуют упорядоченную структуру, которая «размывается» на небольшом расстоянии от нее. Этот факт тоже установлен с помощью рентгеноструктурного анализа. Превращение кристалла в жидкость — разрушение дальнего порядка. ФИЗИКА ТВЕРДОГО ТЕЛА - СПЕЦИАЛЬНЫЙ РАЗДЕЛ ФИЗИКИ Физика твердого тела сумела связать свойства твердых тел с их строением и со свойствами частиц, из которых они построены. На эту область физики приходится немалая часть современных физических исследований. Под твердым телом понимают именно вещество в твердом состоянии. Иногда в руках физиков имеется для исследования крупинка вещества или пленка толщиной в несколько микрон, а иногда образец столь велик, что его можно считать бесконечным. При всем различии твердых тел их структура похожа. Как уже говорилось, твердые тела имеют либо кристаллическую, либо аморфную структуру. Попробуем представить себе процесс кристаллизации. Пусть для определенности кристалл растет из раствора, куда мы поместили затравку. Кристалл растет слой за слоем, будто подчиняясь какому-то плану. Мы знаем, что процесс роста — естественный процесс — следствие законов физики: силы притяжения между молекулами заставляют их сближаться, а «потребность» добиться минимума энергии заставляет молекулу искать место, где действующая на нее сила равна нулю. Строение молекул определяет силу притяжения между молекулами, а эта сила — энергию связи между частицами, энергию, которую нужно придать частице, чтобы отделить ее от твердого тела. Оценкой энергии связи может служить температура плавления твердого тела. Зависимость температуры плавления Т веществ от атомного номера элемента Z — от числа электронов в атоме демонстрирует периодический закон Менделеева и показывает, сколь различны температуры плавления различных элементов. Некоторые вещества встречаются в природе в различных модификациях. Особенно яркий пример — углерод. И алмаз и графит — разные модификации одного и того же углерода. И это отнюдь не все модификации: в 1985 году были открыты и более сложные углеродные молекулы в форме сфер и трубок - фуллерены и тубелены. Физические свойства разных модификаций одного и того же вещества могут кардинально отличаться. Классические примеры: алмаз и графит, белое и серое олово. Существование веществ в разных формах называется полиморфизмом. Полиморфизм — свидетельство того, как велико влияние на свойства тел взаимного расположения частиц, из которых тело состоит. Остановимся и просуммируем сказанное. Вещества состоят из молекул. Построенные из атомов, молекулы бесконечно разнообразны. Одни молекулы состоят из
нескольких атомов: в молекуле воды Н20 три атома, в молекуле кислорода 02 всего два, молекулой инертного газа, например неона, надо считать просто атом неона. Другие молекулы состоят из большого числа атомов, например, в молекуле гемоглобина их около 5000. В твердом состоянии вещества устроены сравнительно просто. Почти все, чем мы пользуемся, создано руками человека. Предметы, устройства, машины и приборы могут быть очень сложными. Некоторые творения природы бывают удивительно красивы. Все мы неоднократно любовались горами, скалами, бесконечными пляжами, а в минералогических музеях - кристаллами. И все же: все тела неживой природы построены из неорганических веществ. Поражающие воображение структуры и самые вычурные творения инженерного искусства - результат комбинации неорганических веществ. А они, неорганические вещества, сравнительно просты по своему устройству. Просты, если их сравнивать с живыми существами. ЧАСТИЦЫ, ИЗ КОТОРЫХ ПОСТРОЕНЫ ТВЕРДЫЕ ТЕЛА, ДВИЖУТСЯ Твердые тела стабильны. Камень — символ неизменности. Но и в твердом теле не прекращается движение атомных и субатомных частиц. Мы уже знаем, что никогда не прекращается движение электронов в атомах и молекулах, даже когда они находятся в основном состоянии. Понятие «основное состояние», как имеющее наименьшую возможную энергию, применимо и к твердому телу. В основном состоянии его атомы и молекулы не прекращают своего движения. Они колеблются вокруг положений равновесия. Эти колебания называют нулевыми колебаниями, так как происходят далее при нулевой температуре (по абсолютной шкале Кельвина). Нулевые колебания — квантовый эффект: не может частица, обладающая волновыми свойствами, «замереть» в положении равновесия. Это запрещено соотношениями неопределенностей6. Для тяжелых частиц (атомов, молекул) квантовые эффекты значительно меньше, чем для легких электронов, но они есть. Нулевые колебания — пример квантовых эффектов в движении сравнительно тяжелых (по сравнению с электронами) частиц. Особенно впечатляющий пример — гелий. При атмосферном давлении он остается жидким вплоть до абсолютного нуля — так проявляются квантовые свойства движения его атомов. Чтобы гелий затвердел, его надо подвергнуть давлению более 2 6 атмосфер. Нулевые колебания — причина того, что гелий не кристаллизуется при нормальном давлении. Если бы он стал кристаллом, амплитуда нулевых колебаний его атомов превысила бы среднее расстояние между атомами. У других веществ так не бывает. Гелий уникален. Тепловое движение атомных частиц в твердых телах осуществляется в виде колебаний атомов, молекул, ионов — частиц, из которых тело состоит. Частицы, как и в случае нулевых колебаний, колеблются вокруг положений равновесия. Именно эти абстрактные точки — положения равновесия, их расположение строго 6 Ну, раз волна, то должна как-то двигаться.
упорядочено. Если бы можно было сделать мгновенный (буквально!) снимок кристалла, мы убедились бы, что атомы расположены не в точках равновесного положения , а несколько сдвинуты от них — на первый взгляд беспорядочно. Исследуя строение твердых тел, пренебрегать тепловым движением нельзя. С ростом температуры несколько изменяется размер ячейки кристалла, а благодаря этому и размер всего тела. Это явление называется тепловым расширением. Изменение температуры — причина многих количественных изменений параметров тела. Обычно они происходят плавно: немного изменяется температура, немного меняются характеристики твердого тела — плотность, электрическое сопротивление, твердость. Но иногда свойства тела изменяются скачком, причем при вполне определенной температуре. Это событие называют фазовым переходом, а температуру, при которой оно произошло, либо температурой фазового перехода, либо критической температурой. Плавление, превращение жидкости в газ, переход металла в сверхпроводящее состояние — примеры фазовых переходов. Критические температуры зависят от давления, от магнитного поля, от концентрации веществ, входящих в тело. Если на осях координат откладывать значение критической температуры как функцию давления, магнитного поля, концентрации, чертеж будет изображать фазовую диаграмму. При фазовом переходе с кристаллом может произойти одно из двух: либо его структура изменится кардинально, либо произойдет лишь незначительное изменение структуры, однако такое, что приведет к изменению симметрии тела. Иногда в критической точке появляется или исчезает какое-либо характерное свойство: магнетики намагничиваются, сегнетоэлектрики приобретают электрическую поляризацию. Десятилетия теория критических явлений была дразнящей загадкой физики твердого тела. Во второй половине XX века основные черты критических явлений были поняты. Теория критических явлений — одна из глав теории макроскопических явлений , или, как часто говорят, теории конденсированного состояния. Теория конденсированного состояния - разветвленная наука, использующая весьма сложную экспериментальную технику и не менее сложные теоретические построения. Но, несмотря на непрекращающееся возрастание сложности как теории, так и экспериментальной техники, основные представления о том, из чего построены твердые тела, о структурных единицах макроскопических тел не изменяются. Теория конденсированного состояния исходит из факта, что тела состоят из молекул, те - из атомов, а атомы - из электронов и атомных ядер - сгустков нуклонов. Теория основывается на понимании поведения коллективов известных, подробно изученных частиц, свойства которых не надо «подгонять» для объяснения макроскопических явлений. А они бывают столь удивительными, что до тех пор, пока природа явления не понята, кажется, что его нельзя объяснить, не снабдив частицы какими-то специальными свойствами. Один пример — для иллюстрации. Электрическое сопротивление металлов обусловлено столкновениями электронов на своем пути с микроскопическими препятствиями. И движение электронов под действием электрического поля, и их столкновения описываются либо классической, либо квантовой механикой в зависимости от конкретных условий. Но вот в 1911 году нидерландский физик Г. Камерлиг-
Оннес обнаружил, что при критической температуре (при температуре сверхпроводящего перехода) металл теряет сопротивление. Как это может быть? Что произошло? Не изменились ли электроны? 45 лет физики раздумывали над загадочным явлением. Собрали огромный экспериментальный материал. Наконец природа сверхпроводимости в общих чертах была понята. Микроскопическую теорию сверхпроводимости создали три американских физика-теоретика — Дж. Бардин, Л. Купер и Дж. Шрифер (Нобелевская премия 1972 года). Оказалось, что с отдельными электронами при переходе в сверхпроводящее состояние ничего не происходит, но они объединяются в пары, и свойства коллектива электронов кардинально меняются. Фазовый переход металла из нормального в сверхпроводящее состояние - свидетельство изменения свойств не каждого электрона, а всего коллектива электронов, которое, в частности, проявляется в исчезновении сопротивления. ВСЕ НЕ ТАК ПРОСТО Твердые тела могут разрушаться, а под воздействием внешних условий менять не только свои свойства, но и форму. Но это не мешает ощущению того, что именно твердое тело — символ устойчивости, неподвижности. Неизменность твердых тел особенно отчетливо видна при сравнении с биологическими объектами. А ведь и растения, и животные, и мы сами — все, что составляет живую природу, построено из тех же молекул, атомов, ионов, из которых построены твердые тела. В чем же причина такого разительного отличия? Рассказ об этом должен составить содержание другой статьи. Но прежде чем расстаться, хочется обратить внимание на некоторое сходство между живой и неживой природой. Повторим: объекты живой природы построены из тех же первичных элементов, что и объекты неживой природы. Какой бы из биологических объектов мы ни разложили на составные части, «по пути» встретив удивительные конструкции, совершенно непохожие на те, из которых по строены твердые тела, мы в конечном итоге дойдем до протонов, нейтронов и электронов. Более того, «спускаясь» от биологического уровня до физико-химического, исследуя процессы на молекулярно-атомном уровне, мы убеждаемся, что там справедливы те же законы, что и в мире неживой природы. Нет каких-то особых сил7, действующих между атомами и молекулами в недрах живого организма . Это все те же силы притяжения и отталкивания между электрическими зарядами. Конечно, при этом необходимо учитывать, во-первых, структуру изучаемых молекул и, во- вторых, все те ограничения, которые «навязывает» квантовая механика (в частности, принцип Паули). Вернемся к росту кристаллов. Предположим, в насыщенный раствор поваренной соли опустили миниатюрный кристаллик NaCl. Из раствора начнет расти ее кристалл. Он будет строиться по плану, который зафиксирован в зародыше — кристаллике NaCl. При таком описании рост кристалла напоминает рост биологиче- ' Например, бензольное кольцо (см. рис.) С6Н6. В его молекуле атомы углерода и водорода расположены в углах правильного шестиугольника. Такая форма делает молекулу устойчивой. Это объясняется тем, что электроны, связывающие атомы, могут двигаться по всему кольцу углеродных атомов. Бензольные кольца входят в состав многих более сложных соединений.
ского организма, план которого заключен в его зародыше . Только план в зародыше неизмеримо сложнее того, который содержит кристаллик поваренной соли. Вот почему этот заключительный раздел назван: «ВСЕ НЕ ТАК ПРОСТО». * * * Рассказал все, что хотел рассказать. Твердые тела встречаются на каждом шагу. Физика твердого тела своими результатами питает многие отрасли техники. Множество открытий в физике твердого тела сделаны в поисках необходимых технике материалов и свойств. Вполне земная наука. Зачем же я приглашал вглядеться в звездное небо? Из электронов, протонов и нейтронов построены отнюдь не только земные объекты. Все бесчисленные миры: наши соседи (Луна, планеты, Солнце), другие звезды - все они тоже построены из тех же трех частиц. И, похоже, подчиняются тем законам, которые открыты нами, разумными существами на малютке Земле. Откуда нам это известно? Конечно, мы можем взять пробы только с самых ближайших соседей по пространству. Изредка прилетают и не сгорают в земной атмосфере метеориты. Любые образцы, попадающие в руки экспериментаторов, подтверждают наше убеждение. Но главное не в этом. Наблюдения над различными космическими объектами ставило и ставит перед астрофизиками множество задач. Не все они решены, всегда, в любой области развивающейся науки есть задачи, ожидающие своего решения. Но все задачи, которые удалось решить, решены, не выходя за пределы земной физики, если под этим понимать утверждение об электронах, протонах и нейтронах как о строительном материале макроскопических тел и о том, что они подчиняются законам, открытым на Земле. Как уже говорилось, существует более трехсот элементарных частиц. По ходу нашего рассказа кроме электронов, протонов и нейтронов мы упомянули только фотоны, л-мезоны и нейтрино. Говоря об окружающем нас космическом пространстве , следует подчеркнуть, что многие элементарные частицы были обнаружены в составе космических лучей - потоков частиц, прилетающих на Землю из глубин космоса. По-видимому, их роль во Вселенной велика, но какова точно, неизвестно. Мы знаем только, что в строении макроскопических тел роли они не играют. Но хочется все же узнать, что представляют собой те кирпичи, из которых все построено. А как только мы пытаемся понять структуру нуклонов, без полного набора элементарных частиц не обойтись. Дают о себе знать и кварки - частицы, которых нет в свободном состоянии. Возможно, открыв кварки, физика дошла до предела? Не знаю... И самое последнее. Восхищение и объяснение плохо уживаются. Объяснив, как бы ликвидируешь восхищение. Очень хочется, чтобы, поняв в общих чертах принципы устройства всего на свете, вы не потеряли способность восхищаться тем, что для создания всего этого баснословного разнообразия достаточно лишь трех типов частиц — электронов, протонов и нейтронов. «Подумаешь, — скажет скеп- ФиЗики не Знают биологию точно так же, как биологи не Знают физику. Природа не терпит пустоты и, поэтому, между физиком и биологом протиснулся биофизик. Он не Знает ни того, ни другого.
тик, — с помощью двух значков (нуля и единицы) молено закодировать любой текст: скучную инструкцию и прекрасную поэму». Правильно! Но текст, а также любое устройство кто-то создал. Когда кто-то создает уникальную машину или гениальную поэму, он, несомненно, заслуживает восхищения. Но восхищение вызывает и природа9, естественным путем создавшая бесконечное многообразие из электронов, протонов и нейтронов. 9 Так и хочется в этой фразе Заменить слово «природа», словом «бог». Хотелось бы надеятся, что «бог» хорошо усвоил принципы квантовой механики, прежде чем создал нашу Вселенную. А если без «бога», то мы постулируем, что это существует, мы это называем природой. А вот почему это существует, и откуда это все взялось? Нет ответа.
Ликбез КАК ФИЗИКИ ИЗУЧАЮТ ЭЛЕМЕНТАРНЫЕ ЧАСТИЦЫ Собственно говоря, путем столкновений. С элементарными частицами сталкиваются не только физики, с ними сталкивается каждый из нас. Чтобы убедится в этом, достаточно включить счетчик Гейгера. Время от времени он будет щелкать (конечно, если там есть звуковой извещатель). В некоторых городах, типа Чернобыля, Челябинска, Томска он будет щелкать почаще, в других пореже, но все равно покажет какую-то активность. Это естественный радиационный фон Земли. Откуда он берется? Какой-то вклад вносят радиоактивные элементы, содержащиеся в почве, воде и даже воздухе. Остальные прилетает с Солнца и из всех концов Вселенной. Одни частицы ухитряются долететь до поверхности Земли, других может не задержать даже Земля, но большинство частиц сталкивается с молекулами газов атмосферы и вступают с ними в ядерные взаимодействия. Скорости частиц, прилетающих с Солнца, вполне достаточны для таких реакций. При меньших скоростях частицы будут просто отскакивать от ядер. Поглотив частицу ядро, с некоторой вероятностью, развалится, и его осколками будут другие частицы. Но в целом
это процесс случаен, на всех этапах, включая само столкновение частиц с ядрами молекул газов. Некоторые частицы все-таки долетают до поверхности Земли. Именно там, в верхних слоях атмосферы и надо ловить те частицы, из которых состоят ядра. Некоторые частицы там и были найдены. Аппаратура, Зачастую просто фотопластинки, поднималась в верхние слои атмосферы воздушными шарами. Только возможности этого метода ограничены. Именно из-за его вероятностного характера. Появление искомой частицы - событие редкое, ждать порой приходится месяцами, а долго воздушный шар там болтаться не может. К тому же для регистрации некоторых частиц нужно так много аппаратуры, что ее просто туда не доставить . Нужные столкновения приходится организовывать на Земле. Если частица имеет заряд, то ее можно разогнать в электрическом поле, в вакууме. Магнитное поле может только изменить траекторию частицы. В частности можно разогнать протон и вообще ядра элементов. Получение ядер не является сверхсложной проблемой, они могут вылетать при распаде радиоактивных элементов, и может быть даже образовываться в высокотемпературной плазме. Остается только направить разогнанный поток ядер на мишень из какого-либо вещества или же столкнуть два встречных потока. Для разгона ядер и электронов строятся ускорители. К сожалению, прошли те времена, когда ускоритель помещался в одной комнате. Возможности таких ускорителей были исчерпаны еще в прошлом веке. Осталась только мечта иметь сверхмощный ускоритель размером с канцелярский стол. Протяженность современных ускорителей составляет уже десятки километров. Об ускорителях мы еще поговорим, но сначала, а что, собственно говоря, ищут физики? Вопрос, а зачем они это ищут, мы пока оставим без внимания. Будьте уверены, применение этим знаниям найдется, всегда находилось. Сейчас даже государства, фанатически исповедующие ислам, тратят деньги на физические исследования в области ядерной физики. Аллах аллахом, а ядерная бомба уважается больше, чем кривой ятаган. Как уже упоминалось в предыдущей статье, сейчас известно около 300 элементарных частиц. Не всякий студент их все даже запомнит. Одни из них обнаружили физики-экспериментаторы, задав тем самым теоретикам работу по объяснению, откуда они взялись. Другие были сначала предсказаны теоретиками, и только потом найдены экспериментаторами. Постепенно стало ясно, что из некоторых частиц, фундаментальных, состоят все остальные. Кое-какой временной порядок во всем этом безобразии удалось навести. И называется он «Стандартная модель». Стандартная модель Стандартной моделью сегодня принято называть теорию, наилучшим образом отражающую наши представления об исходном материале, из которого изначально по-
строена Вселенная. Она же описывает, как именно материя образуется из этих базовых компонентов, и силы и механизмы взаимодействия между ними. Со структурной точки зрения элементарные частицы, из которых состоят атомные ядра (нуклоны), и вообще все тяжелые частицы — адроны (барионы и мезоны) — состоят из еще более простых частиц, которые принято называть фундаментальными. В этой роли по-настоящему фундаментальных первичных элементов материи выступают кварки, электрический заряд которых равен 2/3 или -1/3 единичного положительного заряда протона. Самые распространенные и легкие кварки называют верхним и нижним и обозначают, соответственно, и (от английского up) и d (down). Иногда их же называют протонным и нейтронным кварком по причине того, что протон состоит из комбинации uud, а нейтрон — udd. Верхний кварк имеет Заряд 2/3; нижний — отрицательный заряд -1/3. Поскольку протон состоит из двух верхних и одного нижнего, а нейтрон — из одного верхнего и двух нижних кварков, вы можете самостоятельно убедиться, что суммарный заряд протона и нейтрона получается строго равным 1 и 0, и удостовериться, что в этом Стандартная модель адекватно описывает реальность. Две другие пары кварков входят в состав более экзотических частиц. Кварки из второй пары называют очарованным — с (от charmed) и странным — s (от strange) . Третью пару составляют истинный — t (от truth, или в англ. традиции top) и красивый — Ь (от beauty, или в англ. традиции bottom) кварки. Практически все частицы, предсказываемые Стандартной моделью и состоящие из различных комбинаций кварков, уже открыты экспериментально. Другой строительный набор состоит из кирпичиков, называемых лептонами. Самый распространенный из лептонов — давно нам знакомый электрон, входящий в структуру атомов, но не участвующий в ядерных взаимодействиях, ограничиваясь межатомными. Помимо него (и парной ему античастицы под названием позитрон) к лептонам относятся более тяжелые частицы — мюон и тау-лептон с их античастицами. Кроме того, каждому лептону сопоставлена своя незаряженная частица с нулевой (или практически нулевой) массой покоя; такие частицы называются, соответственно, электронное, мюонное или таонное нейтрино. Итак, лептоны, подобно кваркам, также образуют три «семейных пары». Такая симметрия не ускользнула от наблюдательных глаз теоретиков, однако убедительного объяснения ей до сих пор не предложено. Как бы то ни было, кварки и лептоны представляют собой основной строительный материал Вселенной. Чтобы понять оборотную сторону медали — характер сил взаимодействия между кварками и лептонами, — нужно понять, как современные физики-теоретики интерпретируют само понятие силы. В этом нам поможет аналогия. Представьте себе двух лодочников, гребущих на встречных курсах по реке. Один гребец от щедрости душевной решил угостить коллегу шампанским и, когда они проплывали друг мимо друга, кинул ему полную бутылку шампанского. В результате действия закона сохранения импульса, когда первый гребец кинул бутылку, курс его лодки отклонился от прямолинейного в противоположную сторону, а когда второй гребец поймал бутылку, ее импульс передался ему, и вторая лодка также отклонилась от прямолинейного курса, но уже в противоположную сторону. Таким образом, в результате обмена шампанским обе лодки изменили направление. Согласно законам механики Ньютона это означает, что между лодками произошло силовое взаимодействие . Но ведь лодки не вступали между собой в прямое соприкосновение? Здесь мы и видим наглядно, и понимаем интуитивно, что сила взаимодействия между лодками была передана носителем импульса — бутылкой шампанского. Физики назвали бы ее переносчиком взаимодействия.
В точности так же и силовые взаимодействия между частицами происходят посредством обмена частицами-переносчиками этих взаимодействий. Фактически, различие между фундаментальными силами взаимодействия между частицами мы и проводим лишь постольку, поскольку в роли переносчиков этих взаимодействий выступают разные частицы. Таких взаимодействий четыре: сильное (именно оно удерживает кварки внутри частиц), электромагнитное, слабое (именно оно приводит к некоторым формам радиоактивного распада) и гравитационное. Переносчиками сильного цветового взаимодействия являются глюоны, не обладающие ни массой, ни электрическим зарядом. Этот тип взаимодействия описывается квантовой хромодинамикой. Электромагнитное взаимодействие происходит посредством обмена квантами электромагнитного излучения, которые называются фотонами и также лишены массы. Слабое взаимодействие, напротив, передается массивными векторными или калибровочными бозонами, которые «весят» в 80-90 раз больше протона, — в лабораторных условиях их впервые удалось обнаружить лишь в начале 1980-х годов. Наконец, гравитационное взаимодействие передается посредством обмена не обладающими собственной массой гравитонами — этих посредников пока что экспериментально обнаружить не удалось. В рамках Стандартной модели первые три типа фундаментальных взаимодействий удалось объединить, и они более не рассматриваются по отдельности, а считаются тремя различными проявлениями силы единой природы. Возвращаясь к аналогии, предположим, что другая пара гребцов, проплывая друг мимо друга по реке, обменялась не бутылкой шампанского, а всего лишь стаканчиком мороженого. От этого лодки также отклонятся от курса в противоположные стороны, но значительно слабее. Стороннему наблюдателю может показаться, что в этих двух случаях между лодками действовали разные силы: в первом случае произошел обмен жидкостью (бутылку я предлагаю во внимание не принимать, поскольку большинству из нас интересно ее содержимое), а во втором — твердым телом (мороженым). А теперь представьте, что в тот день стояла редкостная летняя жара, и мороженое в полете растаяло. То есть, достаточно некоторого повышения температуры, чтобы понять, что, фактически, взаимодействие не зависит от того, жидкое или твердое тело выступает в роли его переносчика. Единственная причина, по которой нам представлялось, что между лодками действуют различные силы, состояла во внешнем отличии переносчика-мороженого, вызванном недостаточной для его плавления температурой. Поднимите температуру — и силы взаимодействия предстанут наглядно едиными. Силы, действующие во Вселенной, также сплавляются воедино при высоких энергиях (температурах) взаимодействия, после чего различить их невозможно. Первыми объединяются (именно так это принято называть) слабое ядерное и электромагнитное взаимодействия. В результате мы получаем так называемое электрослабое взаимодействие, наблюдаемое даже лабораторно при энергиях, развиваемых современными ускорителями элементарных частиц. В ранней Вселенной энергии были столь высоки, что в первые Ю-10 секунды после Большого взрыва не было грани между слабыми ядерными и электромагнитными силами. Лишь после того, как средняя температура Вселенной понизилась до 1014 К, все четыре наблюдаемые сегодня силовые взаимодействия разделились и приняли современный вид. Пока температура была выше этой отметки, действовали лишь три фундаментальные силы: сильного, объединенного электрослабого и гравитационного взаимодействий. Объединение электрослабого и сильного ядерного взаимодействия происходит при температурах порядка 1027К. В лабораторных условиях такие энергии сегодня недостижимы. Самый мощный современный ускоритель — Большой адронный коллайдер
(Large Hadron Collider) — сможет разгонять частицы до энергий, которые составляют всего 0,000000001% от необходимой для объединения электрослабого и сильного ядерного взаимодействий. Так что, вероятно, экспериментального подтверждения этого объединения ждать нам придется долго. Таких энергий нет и в современной Вселенной, однако в первые Ю-35 с ее существования температура Вселенной была выше 1027 К, и во Вселенной действовало всего две силы — электросильного и гравитационного взаимодействия. Теории, описывающие эти процессы, называют «теориями Великого объединения» (ТВО). Напрямую проверить ТВО нельзя, но они дают определенные прогнозы и относительно процессов, протекающих при более низких энергиях. На сегодняшний день все предсказания ТВО для относительно низких температур и энергий подтверждаются экспериментально. Итак, Стандартная модель, в обобщенном виде, представляет собой теорию строения Вселенной, в которой материя состоит из кварков и лептонов, а сильные, электромагнитные и слабые взаимодействия между ними описываются теориями великого объединения. Такая модель, очевидно, не полна, поскольку не включает гравитацию. Предположительно, более полная теория со временем все-таки будет разработана, а на сегодня Стандартная модель — это лучшее из того, что мы имеем. По крайней мере, найдены все элементарные частицы, необходимые и предсказанные по ней. За исключением бозона Хигсса, существование которого необходимо, чтобы сходились некоторые уравнения сохранения. Его и ищут уже несколько лет. THE STANDARD MODEL hcmions Bog one U t up eherm top d S b down strange bottom Ve Vm Vr electron muon tau neutrino neutrino neutrino e M r electron muon tau " У»'! hi- с onfif int'd У ptioton Z boson w W boson 9 gluon Стандартная модель физики элементарных частиц включает в себя шесть кварков, шесть лептонов, частицы-переносчики взаимодействий (фотон, глюон, W- и Z-боЗоны), а также бозон Хиггса. Хигг-
совский бозон — единственная в этой таблице не открытая до сих пор частица. Теперь поговорим, как обещали, об ускорителях. Как было упомянуто ранее, ускорение производится с помощью электрического поля, способного изменять энергию частиц, обладающих электрическим зарядом. Магнитное поле может лишь изменить направление движения заряженных частиц, не меняя величины их скорости, поэтому в ускорителях оно применяется для управления движением частиц (формой траектории). Обычно ускоряющее электрическое поле создаётся внешними устройствами (генераторами). Но возможно ускорение с помощью полей, создаваемых др. заряженными частицами; такой метод ускорения называется коллективным. Ускорители заряженных частиц следует отличать от плазменных ускорителей, в которых происходит ускорение в среднем электрически нейтральных потоков заряженных частиц (плазмы) . Идей в этой области было не мало. Ниже основные из них. Циклотрон - циклический ускоритель нерелятивистских тяжёлых заряженных частиц (протонов, ионов), в котором частицы двигаются в постоянном и однородном магнитном поле, а для их ускорения используется высокочастотное электрическое поле неизменной частоты. Простейший циклотрон впервые был построен в 1931 году американскими физиками Э.Лоуренсом и М.Ливингстоном. Энергии частиц в их экспериментах доходили до 1 МэВ. В циклотроне ускоряемые частицы движутся внутри полости двух чуть раздвинутых полуцилиндров (дуантов), помещенных в вакуумную камеру между полюсами сильного электромагнита. Магнитное поле этого электромагнита искривляет траекторию частиц. Ускорение движущихся частиц происходит в тот момент, когда они оказываются в зазоре между дуантами. В этом месте на них действует электрическое поле, создаваемое электрическим генератором высокой частоты, которая совпадает с частотой обращения частиц внутри циклотрона. При не слишком больших скоростях эта частота не зависит от радиуса окружности и скорости частиц, так что в зазор между дуантами частицы попадают всегда через один и тот же промежуток времени. Получая каждый раз при этом некоторое приращение скорости, они продолжают свое движение дальше по окружности все большего радиуса, и траектория их движения превращается в плоскую раскручивающуюся спираль . На последнем витке этой спирали включается дополнительно отклоняющее поле, и пучок ускоренных частиц выводится наружу. Циклотрон 4 т J ния, 3 — электроды, 4 — источник переменного напряжения. Магнитное поле направлено перпендикулярно плоскости рисунка. 2 Устройство циклотрона. 1 — место поступления частиц, 2 — траектория их движе-
Недостатком циклотрона является то, что заряженные частицы в нем не могут быть ускорены до больших энергий, так как при высоких скоростях начинает проявляться релятивистская зависимость периода обращения от скорости частиц. С ростом скорости этот период возрастает, и поэтому при каждом очередном попадании в ускоряющий зазор частицы начинают все больше опаздывать, пока не оказываются в нем тогда, когда существующее в зазоре поле будет их тормозить. Бетатрон Другое название: индукционный ускоритель. Циклический ускоритель, в котором ускорение частиц осуществляется вихревым электрическим полем, индуцируемым изменением магнитного потока, охватываемого орбитой пучка. Поскольку для создания вихревого электрического поля необходимо изменять магнитное поле сердечника, а магнитные поля в несверхпроводящих машинах обычно ограничены эффектами насыщения железа на уровне ~20кГс, возникает ограничение сверху на максимальную энергию бетатрона. Бетатроны используются преимущественно для ускорения электронов до энергий 10—100 МэВ (максимум достигнутой в бетатроне энергии 300 МэВ). Впервые бетатрон был разработан и создан Видероэ в 1928 году, однако он не заработал. Первый надёжно функционирующий бетатрон был создан Д. В. Керстом лишь в 1940—1941 гг. в США, университет Иллинойса. Именно в бетатроне впервые были подробно изучены квазипериодические колебания, которые совершает частица, так называемые бетатронные колебания. Максимальная энергия, которую удалось достичь в бетатроне не превышает 300 МэВ. С развитием технологии линейного ускорения бетатроны, которые раньше часто применяли для первичного ускорения интенсивного электронного пучка, были сильно потеснены линаками, и в настоящее время используются редко. Классический бетатрон является слабофокусирующей машиной. Пучок циркулирует в тороидальной вакуумной камере, изготовленной из керамики, покрытой изнутри тонкой проводящей плёнкой, чтобы избежать накопления электрического заряда. Из выражения для силы Лоренца можно получить связь между импульсом частицы р, магнитным полем В на орбите пучка и радиусом кривизны р: рс = еВр где с — скорость света, е — заряд электрона. Величину Bp называют жёсткостью частиц. При изменении магнитного поля можем записать выражение для электромагнитной индукции и закон Ньютона: dp е ЭФ dit ~ ъГр~дЬ откуда следует связь между ведущим полем на орбите пучка и потоком, охватываемым орбитой: ДФ = 2пр2В т.н. «закон 2:1». Поток, пронизывающий орбиту пучка, должен быть вдвое больше чем, если бы он создавался однородным магнитным полем, равным по величине ведущему. В противном случае, орбита в процессе ускорения не оставалась бы постоянной. Для выполнения упомянутого требования в бетатроне создаётся специальный железный сердечник. Поскольку создаваемое сердечником поле ограничено по величине из-за насыщения железа, единственный способ повышать энергию — увеличивать размер бета-
трона и, соответственно, его массу. Так, 300-мэвный бетатрон в Иллинойсе весил более 300 тонн. Другое серьёзное ограничение связано с потерями энергии частиц на синхротронное излучение, которые становятся ощутимыми уже начиная с энергии ~100 МэВ. Микротрон (электронный циклотрон) — циклический резонансный ускоритель, в котором, как и в циклотроне, и магнитное поле, и частота ускоряющего поля постоянны во времени, но резонансное условие в процессе ускорения всё же сохраняется за счёт изменения кратности ускорения q. Частица обращается в микротроне в однородном магнитном поле, многократно проходя ускоряющий резонатор. В резонаторе она получает такой прирост энергии, что её период обращения изменяется на величину, равную или кратную периоду ускоряющего напряжения. При этом, если частица с самого начала обращалась в резонанс с ускоряющим полем, этот резонанс сохраняется, несмотря на изменение периода обращения. Например, первый оборот частица проходит за один период ускоряющего поля (т. е. q = 1), второй за два (q = 2), третий — за три (q = 3) и т.д. Ясно, что частица попадает при этом в одну и ту же фазу ускоряющего поля. В микротроне действует механизм автофазировки, так что частицы, близкие к равновесной, также будут ускоряться. Микротрон — ускоритель непрерывного действия и способен давать токи порядка 100 ма, максимальная достигнутая энергия порядка 30 Мэв (СССР, Великобритания). Реализация больших энергий затруднительна из-за повышенных требований к точности магнитного поля, а существенное повышение тока ограничено электромагнитным излучением ускоряемых электронов. Для длительного сохранения резонанса магнитное поле микротрона должно быть однородным. Такое поле не обладает фокусирующими свойствами по вертикали; соответствующая фокусировка производится электрическим полем резонатора. Предлагались варианты микротронов с меняющимся по азимуту магнитным полем (секторный микротрон), но сколько-нибудь значительного развития они пока не получили. Фазотрон (синхроциклотрон) 5 Схематический разрез бетатрона: 1 — полюсы магнита; 2 — сечение кольцевой вакуумной камеры; 3 — центральный сердечник; 4 — обмотки электромагнита; 5 — ярмо магнита . \ / 4 t Микротрон Фазотрон (циклотрон с вариацией частоты) — тип резонансных циклических ускорителей, работающих на принципе автофазировки. В фазотроне магнитное поле постоянно во времени, а частота ускоряющего электрического поля меняется. Фа-
зотрон применяется для ускорения тяжёлых частиц (протонов, дейтронов, ос- частиц) . Крупнейшие современные фазотроны дают протоны с кинетической энергией до 1000 Мэв. В фазотроне частицы движутся по спиральным траекториям от центра, где расположен ионный источник (газовый разряд), к периферии вакуумной камеры (см. рисунок циклотрона) . Энергию они приобретают за счёт многократного прохождения ускоряющего зазора. Ускоренные частицы либо используются внутри камеры, либо выводятся наружу с помощью отклоняющих систем. Изменение частоты ускоряющего поля осуществляется с помощью вариатора — конденсатора переменной ёмкости, включенного в резонансный контур. Вследствие того, что орбита частицы в фазотроне имеет форму спирали, магнит фазотрона не кольцевой, а сплошной, так что магнитная система весьма громоздка. Именно поэтому при энергиях выше 1 Гэв отдают предпочтение синхрофазотрону, хотя достигаемая в нём интенсивность ускоренного пучка существенно ниже. В фазотронах с однородным по азимуту магнитным полем фокусировка по вертикали очень слабая. Для её увеличения иногда применяют дополнительные модуляции магнитного поля по азимуту, т. е. используют знакопеременную фокусировку. Синхрофазотрон Синхрофазотрон (протонный синхротрон) — циклический резонансный ускоритель протонов с изменяющимся во времени магнитным полем изменяющейся частотой ускоряющего электрического поля. При этом они меняются в строгом соответствии друг с другом, так чтобы радиус равновесной орбиты оставался постоянным. С ростом магнитного поля частота обращения сначала увеличивается пропорционально полю, а затем меняется всё медленнее, приближаясь к предельному значению, отвечающему движению частицы со скоростью света; соответственно должна изменяться частота ускоряющего поля. Постоянство радиуса равновесной орбиты позволяет сделать магнит синхрофазотрона в виде сравнительно узкого кольца, что сильно удешевляет установку. Из всех современных ускорителей заряженных частиц синхрофазотроны позволяют получать самые высокие энергии частиц. До 1972 самым большим ускорителем в мире являлся Серпуховский синхрофазотрон (СССР), ускоряющий протоны до энергии 76 Гэв. В 1972 в США (Батейвия) запущен синхрофазотрон на 200 Гэв, в 1975 его энергия была увеличена до 400 Гэв, а в 1976 — до 500 Гэв. В 1976 введён в строй ускоритель на 400 Гэв в Европейском центре ядерных исследований (ЦЕРН, близ Женевы). Проектируются синхрофазотроны на 1000 Гэв и выше. Поскольку предельное значение магнитного поля ограничено техническими возможностями, то, увеличение энергии неизбежно сопряжено с увеличением радиуса установки. Для максимальных достигнутых энергий радиус ускорителей составляет сотни м, а в проектируемых ускорителях на сверхвысокие энергии — несколько км. Именно размер установки, а следовательно и её стоимость, ограничивает предельную достижимую энергию в ускорителе. Наименьшая энергия, для получения которой применяют синхрофазотроны, составляет примерно 1 Гэв, для получения протонов меньшей энергии целесообразно применять фазотроны. Протоны вводятся (инжектируются) в синхрофазотрон извне, из другого ускорителя меньшей энергии. Таким предварительным ускорителем служит линейный ускоритель, а иногда также вспомогательный (бустерный) кольцевой ускоритель, для которого, в свою очередь, инжектором служит линейный ускоритель. Такая многоступенчатая схема, повышая энергию инжекции, облегчает условия работы основного ускорителя (легче выдержать допуски на точность воспроизведения магнит-
ного поля при инжекции, в меньшем диапазоне нужно изменять частоту ускоряющего поля) и удешевляет его, а также повышает достижимую в ускорителе интенсивность ускоренного пучка. В синхрофазотроне со слабой фокусировкой магнитная система состоит из нескольких магнитных секторов, разделённых прямолинейными промежутками. В промежутках располагаются системы ввода, ускоряющие устройства, системы наблюдения за пучком, вакуумные насосы и др. Вводное устройство служит для перевода частиц из инжектора в вакуумную камеру основного ускорителя. Обычно ввод производится с помощью импульсного отклоняющего устройства, электрическое или магнитное поле которого «заворачивает» впускаемые частицы, направляя их по орбите. В вакуумной камере, представляющей собой сплошную замкнутую трубу, охватывающую область вокруг равновесной орбиты, создаётся с помощью непрерывно действующих откачивающих насосов достаточно низкое (~10~6 мм рт. ст.) давление, чтобы рассеяние ускоряемых частиц на остаточном газе не приводило к расширению пучка и потере частиц. Закруглённые участки камеры расположены в зазорах между полюсами электромагнитов, создающих внутри камеры магнитное поле, необходимое для управления движением частиц по замкнутой орбите (заворачивания частиц по орбите). Т. к. радиус равновесной орбиты должен оставаться постоянным, необходимо, чтобы магнитное поле росло в процессе ускорения от значения, соответствующего энергии инжекции, до максимального значения, соответствующего конечной энергии. Возрастание магнитного поля осуществляется увеличением силы тока, протекающего через обмотки электромагнитов. Форма полюсов магнитов подбирается так, чтобы обеспечить слабое спадание магнитного поля по радиусу, необходимое для устойчивого движения частиц в поперечном направлении. В одном или нескольких зазорах расположены ускоряющие устройства, создающие переменное электрическое поле. Частота поля изменяется в строгом соответствии с изменением магнитного поля. Необходимая точность воспроизведения частоты очень велика. Это достигается обычно с помощью системы автоматического слежения за частотой по данным о положении частиц: ошибка в частоте приводит к отходу частиц от равновесного положения, чувствительные датчики регистрируют этот отход, их сигнал усиливается и используется для введения необходимых поправок в частоту. Под действием ускоряющего поля частицы инжектированного пучка распадаются на сгустки, группирующиеся вокруг устойчивых равновесных фаз. Число таких сгустков, располагающихся по окружности ускорителя, равно кратности ускорения 6 J Схема слабофокусирующего синхротрона или синхрофазотрона: 1 — инжектор; 2 — система ввода; 3 — вакуумная камера; 4 — сектор электромагнита; 5 — прямолинейный промежуток; 6 — ускоряющее устройство. Магнитное поле перпендикулярно плоскости рисунка .
q. В процессе ускорения сгустки сокращаются по длине, сжимаясь к равновесной фазе. Одновременно происходит уменьшение поперечных размеров пучка, который в начале ускорения занимает почти всё сечение вакуумной камеры. Схематический разрез магнита ускорителя с сильной фокусировкой: 1 — полюсные наконечники, обеспечивающие сильное изменение магнитного поля В по радиусу; 2 — обмотки электромагнита; 3 — сечение вакуумной камеры. Синхрофазотрон с сильной фокусировкой отличается, прежде всего, устройством магнитной системы, состоящей из большого числа магнитов, в которых чередуются сильное спадание и сильное нарастание магнитного поля по радиусу. Фокусировка частиц в этом случае значительно сильнее, чем в слабофокусирующем ускорителе. Каждый магнит осуществляет две функции: заворачивает частицы по орбите и фокусирует их (система с совмещёнными функциями). Применяется также магнитная структура с разделёнными функциями, в которой для заворачивания частиц используются магниты с однородным полем, а фокусировка осуществляется с помощью магнитных квадрупольных линз, расположенных в промежутках между магнитами. Переход к сильнофокусирующим магнитным системам сопряжён с повышением требований к точности изготовления и монтажа магнитов; при длине кольцевого магнита больше 1 км точность монтажа измеряется десятыми и сотыми долями мм. Это обусловлено большой чувствительностью поведения частиц к различным случайным отклонениям магнитного поля, связанной с резонансной раскачкой пучка. Другая особенность ускорителя с сильной фокусировкой — наличие так называемой критической, или переходной, энергии. При энергии частицы меньше критической устойчивая равновесная фаза расположена на восходящей части кривой напряжения (фаза —фо на рис) , т.к. с увеличением энергии период уменьшается (как в линейном ускорителе). При энергии частицы больше критической увеличение энергии приводит, напротив, к увеличению периода обращения (как в ускорителе со слабой фокусировкой) и равновесной становится фаза +фо- Чтобы при прохождении критической энергии не происходили потери пучка, в момент перехода через критическую энергию в систему вводится быстрое смещение фазы колебаний на 2ф0, так что ускоряемые частицы, которые до критической энергии были сгруппированы вблизи устой-
чивой фазы — ф0, оказываются в окрестности новой устойчивой фазы +фо. Ускоренный в синхрофазотроне пучок либо используется внутри камеры (наводится на внутреннюю мишень), либо выводится из ускорителя отклоняющим устройством того же типа, что и в системе ввода, но более мощным из-за большой скорости частиц. После этого начинается цикл ускорения. Частота следования циклов ускорения в современных синхрофазотронах составляет 5—30 циклов минуту. В каждом цикле ускоряется 1011—1012 частиц. В принципе предельная интенсивность определяется ограничивающим влиянием пространственного заряда. В связи с тем, что синхрофазотроны на сверхвысокие энергии потребовали бы очень больших размеров и сверхвысокой точности изготовления установки (в частности, магнита), рассматриваются возможности применения сверхпроводящих материалов в электромагнитах ускорителя (что позволяет получить магнитные поля по крайней мере в 3—4 раза выше обычных и во столько же раз сократить размеры установки) и методов автоматического управления параметрами ускорителя (что позволяет ослабить требования к точности его изготовления). Синхротрон Синхротрон — циклический резонансный ускоритель электронов, отличающийся от синхрофазотрона тем, что в нём изменяется во времени лишь магнитное поле, а частота ускоряющего электрического поля остаётся неизменной. Так как при постоянной частоте обращения радиус орбиты пропорционален скорости частиц, а для электронов уже при энергии порядка 1 Мэв скорость очень близка к скорости света (т. е. очень слабо меняется с ростом энергии), то радиус равновесной орбиты почти не меняется. Поэтому магнит синхротрона (как и магнит синхрофазотрона) имеет вид кольца. Конструктивно как слабо-, так и сильнофокусирующий синхротроны весьма схожи с синхрофазотроном (поэтому синхрофазотрон и называется также протонным синхротроном). Максимально достижимые в синхротроне энергии определяются в первую очередь электромагнитным излучением релятивистских электронов. Электроны, движущиеся по круговым траекториям, испытывают центростремительное ускорение и, согласно законам электродинамики, должны излучать электромагнитные волны (Синхротронное излучение). Излучаемая электроном за 1 оборот энергия равна: 3 R Е_ (Е0 = т0с2 — энергия покоя частицы, равная для электрона 0,5 Мэв), т. е. очень быстро растет с увеличением энергии электрона. В принципе электромагнитное излучение имеет место при движении по окружности любых заряженных частиц, но для тяжёлых частиц (протонов, ядер) Е0 много больше, чем для электронов , так что их излучение при достигнутых в ускорителях энергиях не проявляется. В больших электронных ускорителях энергия, излучаемая за 1 оборот, становится сравнимой с энергией, набираемой частицей. Получаемая электроном от ускоряющего поля энергия расходуется частью на увеличение энергии частицы, а частью на излучение. Излучение сказывается и на колебаниях частиц около равновесной орбиты: с одной стороны, излучение, действуя подобно трению, вносит затухание в колебания частиц, с другой — из-за квантового характера излучения (излучение фотонов) торможение происходит не плавно, а как бы щелчками, что вносит дополнительную раскачку колебаний. Вследствие больших потерь на излучение ускоряющая система должна развивать очень большую мощность. Хотя посто-
янство частоты обращения позволяет применить резонансные системы с фиксированной частотой, тем не менее, именно трудности создания ускоряющей системы ограничивают в первую очередь предельно достижимые энергии. К 1976 в синхротронах достигнуты максимальные энергии порядка 5—10 Гэв. Существуют проекты синхротронов на 100—150 Гэв. В синхротронах на меньшие энергии (сотни Мэв) вместо инжекции извне (как в синхрофазотроне) часто применяют бетатронную ин- жекцию: ускоритель сначала работает как бетатрон, а после достижения электроном релятивистских скоростей включается ускоряющее ВЧ поле и ускоритель переходит на синхротронный режим. Лазер на свободных электронах В настоящее время интенсивно развивается релятивистская электроника. Значительное место в ней занимают устройства, которые называются Лазерами на Свободных Электронах (ЛСЭ). Их принцип основан на том, что движущаяся заряженная частица (ДЗЧ) приводится в колебательное движение поперек направления своего движения. При этом возникает излучение в малом телесном угле вперед по направлению движения ДЗЧ. Это излучение зависит от продольной скорости ДЗЧ, и шага ондулятора. Оно может быть когерентным, что и дало название ЛСЭ. Для того, чтобы частица имела поперечные колебания, применяется система называемая ондулятором. По принципу воздействия на ДЗЧ ондуляторы делятся на электростатические и магнитные. Здесь рассматривается магнитная система. Недостатком существующих ондуляторов является то, что для создания необходимого магнитного поля (МП) используются постоянные электромагниты с сердечником. Это конструктивно ограничивает шаг ондулятора - L und (период изменения МП в системе). Для создания интенсивного пучка ДЗЧ и увеличения выходной мощности ЛСЭ, может быть применена многоканальная схема со сложением отдельных пучков. 1. Первичные пучки ДЗЧ. 2. Рассеивающая магнитная линза. 3. Суммарный пучок ДЗЧ. 4. Ондулятор. 5. Выходное излучение. Особенностями данной схемы являются: 1. Применение для сборки пучков универсальной магнитной линзы в рассеивающем режиме, что уменьшает апертуру суммарного пучка ДЗЧ.
2. Применение магнитного ондулятора со сверхмалым, регулируемым периодом, что позволяет значительно повысить частоту выходного излучения. При увеличении энергии излучаемого кванта до 80MeV, становится возможной фотоядерная реакция: 83Bi209 + 80MgV -» Au197 + 22Не4 + ^п1 Появляется возможность фотоядерного разложения радиоактивных и обычных материалов . Источником ДЗЧ могут быть электронные и ионные пушки, радиоактивные источники высокой интенсивности (Со, Sr ...) , космические лучи и солнечный ветер и т.д. На рис. Ниже: 1. Секционированная тороидальная катушка с током I (могут быть использованы обмотки электродвигателей различного типа, мощности и назначения); 2. Тороидальное плазменное образование с ДЗЧ (увеличено); оно может быть инициировано путем электрического разряда в парах Н20, СН4, NH3 и других водородосодержащих веществ. 3. МП, исполняющее роль ондулятора. 4. Свободный электрон, образовавшийся при ионизации нейтральной частицы. 5. Выходное излучение / Пунктиром показаны дополнительные управляющие слаботочные обмотки. Они используются для создания слабого МП, которое однонаправлено с основным МП и вращается путем последовательного цикличного переключения обмоток. Это МП - для динамического выравнивания возможных технологических неодно- родностей основного МП. Естественно, что будут реализовываться и обычные механизмы лазерного излучения, так как плазма в устройстве будет состоять из возбужденных ионов легких элементов и их изотопов.
ЛИНЕЙНЫЕ УСКОРИТЕЛИ Также часто называется линак (сокращение от LINear Accelerator). Ускоритель , в котором частицы пролетают однократно. Линейные ускорители чаще всего используются для первичного ускорения частиц, полученных с электронной пушки или источника ионов. Однако, идея линейного коллайдера* на полную энергию также не нова. Основным преимуществом линаков является возможность получения ультрамалых эмиттансов и отсутствие потерь энергии на излучение, которые растут пропорционально четвёртой степени (!) энергии частиц. Линейные ускорители электронов небольших энергий часто используются, как часть самых разных электровакуумных приборов (электронно-лучевая трубка, кинескоп, рентгеновская трубка и др.). Ускоритель высоковольтный Технически наиболее простой. Частицы ускоряются постоянным электрическим полем и движутся прямолинейно по вакуумной камере, вдоль которой расположены ускоряющие электроды. Основные элементы высоковольтного ускорителя - высоковольтный генератор, источник заряженных частиц и система, предназначенная для ускорения частиц Напряжение, получаемое от высоковольтного генератора, подаётся на электроды ускоряющей системы и создаёт внутри этой системы электрическое поле. Заряженные частицы из источника ускоряются этим полем до энергии Е = enu, где е - элементарный электрический заряд, п - число элементарных зарядов ускоряемой частицы, и - напряжение (в вольтах) высоковольтного генератора. Давление внутри ускоряющей системы не должно превышать 10~4-10~5 мм рт. ст., т.к. иначе происходит значительное рассеяние ускоряемых частиц на молекулах газа. Схема высоковольтного ускорителя: 1 — высоковольтный генератор; 2 — источник заряженных частиц; 3 - ускоряющая система; 4 — траектория частицы. Важное преимущество высоковольтного по сравнению с другими типами ускорителей - возможность получения малого разброса по энергии частиц, ускоряемых в постоянном во времени и однородном электрическом поле. С помощью У. в. легко может быть достигнут относительный разброс энергии ~ 10~4, а у отдельных ускорителей 10~5-10~6. Благодаря этому высоковольтные ускорители нашли широкое применение при исследованиях в атомной и ядерной физике. Другое преимущество
высоковольтного ускорителя - возможность создания установок с большой мощностью и высоким кпд, что весьма важно при использовании ускорителей в прикладных целях. В электростатическом ускорителе (ЭСУ) напряжение создаётся электростатическим генератором - генератором, основанным на переносе зарядов механическим транспортёром. Генератор с гибким транспортёром из диэлектрической ленты называется генератором Ван-де-Граафа. металлическая щетка снимает электроны с высоковольтного электрода движущаяся резиновая лента переносит положительный заряд положительно заряженная металлическая щетка снимает электроне источник напряжения изолирующая колонна отрицательно заряженная металлическая пластина Электрические заряды наносятся на поверхность движущегося транспортёра зарядным устройством, состоящим из системы игл и плоского электрода, между которыми создаётся коронный разряд. Затем заряды переносятся к высоковольтному электроду, где при помощи др. аналогичного устройства они снимаются, а вместо них на поверхность транспортёра наносятся заряды противоположного знака, снимаемые первым устройством . Существуют также генераторы с транспортёром в виде жёсткого диэлектрического ротора (роторные электростатические генераторы). С 1960-х гг. в некоторых ЭСУ используется цепной транспортёр с металлическими электродами, соединёнными между собой диэлектрическими звеньями (т. н. пеллетрон), преимущества которого - высокая стабильность зарядного тока, большой срок службы, высокий кпд. Наибольшее напряжение, полученное с иомощью электростатических генераторов, составляет около 20 Мв; проектируются установки на напряжение до 30 Me. В каскадном ускорителе источником напряжения служит каскадный генератор, преобразующий низкое переменное напряжение в высокое постоянное путём последовательного включения постоянных напряжений, получаемых в отдельных каскадах схемы. Существует несколько схем каскадных генераторов, среди которых наиболее известен генератор Кокрофта - Уолтона с последовательным питанием каскадов. В 60-х гг. получили распространение каскадные генераторы с параллельным питанием каскадов: динамитрон, генераторы с индуктивной связью каскадов с источником питания; их преимущество - равномерное распределение напряжения по каскадам, а недостаток - необходимость изоляции каскадов на полное рабочее напряжение установки. Современные каскадные генераторы позволяют получать напряжение до 4 Me при мощности установок в несколько десятков квт.
Умножитель напряжения Кокрофта-Уолсона использовался в первых ускорителях элементарных частиц, которые использовались при разработке атомной бомбы (см. рис.). Данный умножитель, построен в 1937 г. компанией Philips. В трансформаторных ускорителях генератором высокого напряжения является высоковольтный трансформатор, питаемый синусоидальным напряжением. Ускоряющая система таких ускорителей имеет устройство отсечки, обеспечивающее прохождение пучка ускоряемых частиц лишь в те моменты, когда напряжение на вторичной обмотке трансформатора имеет нужную полярность и близко к максимуму. Этим достигается достаточно малый разброс энергии ускоряемых частиц. Высоковольтный трансформатор практически не имеет ограничений по мощности и является наиболее перспективным типом генератора для мощных и сверхмощных высоковольтных ускорителях с энергией ускоренных частиц до 2-3 Мэв. В импульсных ускорителях источником напряжения служат импульсные трансформаторы различных типов (например, Тесла трансформатор), а также ёмкостные генераторы импульсного напряжения. В последних большое число конденсаторов заряжается параллельно от общего источника, затем при помощи разрядников осуществляется их переключение на последовательное, и на нагрузке возникает импульс напряжения с амплитудой до нескольких Мв. Линейные размеры высоковольтных ускорителей определяются напряжением высоковольтного генератора и электрической прочностью его изоляции и ускоряющей системы. Ввиду малой электрической прочности воздуха при атмосферном давлении сооружение высоковольтных ускорителей открытого типа с энергией свыше 1 Мэв обычно нецелесообразно. Ускорители на большую энергию размещаются в герметичных сосудах, заполненных газом при давлении, в 5-15 раз превышающем атмосферное. Это значительно уменьшает размеры ускорителей и снижает стоимость их сооружения. Особенно эффективно применение электроотрицательных газов (фреона и шестифтористой серы), а также их смесей с азотом и углекислотой. Импульсные ускорители с той же целью размещают внутри сосудов с жидким диэлектриком (трансформаторным маслом или дистиллированной водой). Основной способ повышения рабочего градиента напряжения в высоковольтной
изоляции - секционирование изоляционных конструкций, т. е. разделение больших изоляционных промежутков на ряд малых отрезков при помощи металлических электродов с заданным распределением потенциала. Перезарядный ускоритель (тандем). Снижения требуемого напряжения высоковольтного генератора и тем самым уменьшения размеров У. в. можно также добиться, используя перезарядку (изменение знака заряда) частиц в процессе ускорения . / 5 3 4 6 Схема перезарядного (тандемного) ускорителя: 1 — источник отрицательных ионов; 2 — высоковольтный генератор; 3 — высоковольтный электрод; 4 — мишень для перезарядки ионов; 5 — пучок отрицательных ионов; 6 — пучок положительных ионов. В ускорителях такого типа, называемых тандемными, или перезарядными, отрицательные ионы из источника, находящегося под нулевым потенциалом, ускоряются по направлению к высоковольтному электроду генератора и там после взаимодействия с мишенью превращаются в положительные ионы. Затем они продолжают двигаться прямолинейно и вновь ускоряются тем же генератором напряжения. Мишень для перезарядки представляет собой заполненную газом трубку, струю пара или плёнку твёрдого вещества. Существуют установки из двух перезарядных ускорителей . Сдвоенный перезарядный ускоритель: 1 — источник нейтральных частиц; 2, 4 — высоковольтные генераторы первого и второго ускорителей; 3, 5 — высоковольтные электроды; 6, 7 — первая и вторая мишени соответственно для получения и перезарядки ионов; 8 — пучок нейтральных частиц; 9 — пучок отрицательных ионов; 10 — пучок положительных ионов. В этом случае внутрь высоковольтного электрода 1-го ускорителя вводятся (инжектируются) нейтральные частицы малой энергии, которые после взаимодействия с мишенью превращаются в отрицательные ионы. Затем эти ионы ускоряются и инжектируются во 2-й ускоритель. Такая схема позволяет получить однозарядные ионы с утроенной энергией. Индукционный ускоритель В этом устройстве для ускорения используется эдс индукции, возникающая при изменении кольцеобразного магнитного поля. Вдоль оси ускорителя устанавлива-
ются ферромагнитные кольца, охватываемые токовыми обмотками. При резком изменении тока в обмотках происходит быстрое изменение магнитного поля, которое согласно закону электромагнитной индукции создаёт на оси ускорителя электрическое поле Е. Заряженная частица, пролетающая за время существования этого поля вдоль оси, приобретает энергию eEL, где L — пройденное расстояние. Чтобы ускоряющее поле было достаточно велико, нужно быстро изменять магнитное поле, поэтому, время существования ускоряющего поля и, следовательно, длительность импульса ускорения невелики (порядка 10~9—10~6 сек) . Преимущества линейных индукционных ускорителей — большие значения тока ускоренных частиц (сотни и тысячи а), большая однородность пучка (малый разброс по энергии и малые скорости поперечного движения) и большой кпд, т. е. коэффициент преобразования затрачиваемой в ускоряющей системе энергии в энергию пучка. Существующие линейные индукционные ускорители дают электронные пучки с энергией в несколько Мэв. Они применяются преимущественно как источники интенсивных пучков релятивистских электронов в установках для коллективного ускорения частиц и для исследований по термоядерному синтезу, однако по своим возможностям они допускают значительно более широкое применение. Резонансный ускоритель Линейные резонансные ускорители — наиболее распространённый тип линейных ускорителей, особенно на большие энергии. Линейные резонансные ускорители электронов дают энергии от десятков Мэв до ~ 20 Гэв, протонов — до 800 Мэв. Существенное различие между протонным и электронным линейными ускорителями обусловлено главным образом тем, что протоны ускоряются до нерелятивистских или слаборелятивистских скоростей, тогда как электроны — до ультрарелятивистских скоростей; протонные ускорители на энергии ~ 600—800 Мэв, при которых релятивистские эффекты становятся заметными, конструктивно сближаются с электронными . * Коллайдер (англ. collider от англ. collide — сталкиваться) — ускоритель заряженных частиц на встречных пучках, предназначенный для изучения продуктов их соударений. Благодаря коллайдерам удаётся придать элементарным частицам вещества высокую кинетическую энергию, а после их столкновений — наблюдать образование других частиц. По виду коллайдеры подразделяются на кольцевые и линейные. На этом, чтобы не было слишком скучно, рассмотрение ускорителей закончим. Коллайдеры мы еще упомянем пару раз. Главное, что следует уяснить о них - это то, что они могут быть построены на основе какого-либо упомянутого выше ускорителя . Итак, в коллайдере сталкиваются какие-то частицы, как правило тяжелые или тяжелые с легкими. В результате могут рождаться другие частицы. Осталось их обнаружить и измерить их параметры. Задача эта отнюдь не тривиальна. Как уже упоминалось рождение частиц процесс вероятностный и вероятность обнаружения новой частицы довольно мала. Отсюда вывод - тяжелых частиц в сталкивающихся потоках должно быть много. Очень много. Протонные сгустки на Тэватроне1 сталкиваются каждые 400 не, то есть 2,5 миллиона раз в секунду. В течение стандартного ускорительного года произойдет 1 Теватрон (англ. LHC, Tevatron) — кольцевой ускоритель-коллайдер, расположенный в национальной ускорительной лаборатории им. Энрико Ферми в городке Батавия штата Иллинойс, недале-
несколько десятков триллионов (миллионов миллионов) столкновений сгустков. Далее, в каждом столкновении сгустков может произойти несколько (обычно не более 10) независимых столкновений отдельных элементарных частиц. Умножая на четыре года работы2, получаем примерно не более одного миллиона миллиардов столкновений отдельных элементарных частиц. Однако, в подавляющем большинстве случаев эти события совершенно неинтересны. Кроме того, у экспериментаторов просто нет возможности записывать абсолютно все события, оставившие хоть какой-то след в детекторе. Поток данных в этом случае составил бы сотни гигабайт в секунду, или многие петабайты (пета- байт — это миллион гигабайт) в сутки, а такие емкости — при всём уважении к достижениям хайтека — пока недостижимы. Поэтому без отсева событий не обойтись, и тут интересно поговорить о том, как детектор — в данном случае DZero на Тэватроне — умудряется справиться с такой лавиной данных. Обычно после каждого столкновения какие-то частицы рождаются, пролетают сквозь детектор и оставляют в нём свой след. Например, высокоэнергетические заряженные частицы ионизируют вещество на своем пути — выбивают электроны из атомов. Эти бездомные электроны быстро оседают на расположенных поблизости электродах, электроды передают заряд преобразователю, который дает сигнал на выходе из детектора: «электрод номер такой-то собрал столько-то заряда». Если же частица поглощается в детекторе без остатка, то часть ее энергии выделяется в видимом свете. Этот свет собирают фотоумножителями, и на выходе появляется сигнал: «фотоумножитель номер такой-то собрал столько-то фотонов». Из набора таких сигналов и складывается суммарный первичный отклик всего детектора . Пи- 1 ЭС05£ CvK9^)C403 Sat Г/31 0 1 115 О 2004 ЕГ sea <?. 3" ЗоУ ко от Чикаго. В настоящее время он имеет самую высокую в мире энергию пучков частиц. Тева- трон — синхротрон, ускоряющий Заряженные частицы — протоны и антипротоны в подземном кольце длиной 6.3 км до энергии 980 ГэВ (~ 1 ТэВ), отсюда машина получила свое имя - Теватрон.
Если частица имеет заряд, то он отклонится в магнитном поле детектора и попадет в соответствующий сектор. Детектор ускорителя на самом деле представляет собой сложнейшую конструкцию из большого числа элементарных детекторов. Весь набор электроники, которая решает, нужно ли на эти сигналы обращать внимание или их можно проигнорировать, называется триггер. По сути дела, триггер — это «диспетчерская», работающая месяцами без остановки в режиме жесточайшего цейтнота. Сырые данные, которые детектор выдает при каждом столкновении, то есть несколько миллионов раз в секунду, поступают вначале на триггер первого уровня — электронную схему, которая должна увидеть в этих разрозненных данных какие- нибудь объекты. Например, если несколько соседних электродов, расположенных по цепочке, сообщили об осевшем на них заряде — то это хорошо, это значит, тут прослеживается трек — кусочек траектории какой-то частицы. Если таких треков набралось несколько, значит это событие может оказаться интересным и его стоит проанализировать подробнее. Триггер первого уровня пропускает его дальше. Триггер первого уровня работает в очень суровых условиях — на всё про всё ему выделено несколько микросекунд! Слишком долго думать нельзя — иначе буфер переполнится, и те события, которые идут следом, просто потеряются. Поэтому триггер первого уровня работает на алгоритмах, встроенных в микросхемы — без какого-либо программного обеспечения или операционной системы, исключительно на уровне «железа». Событий, отобранный триггером первого уровня, уже намного меньше, чем изначальных — около 2 тысяч в секунду. Они поступают на триггер второго уровня, у которого две задачи: во-первых, полностью оцифровать все сигналы, а во- вторых, выяснить, что за частицы пролетели, сколько их было. Этот триггер делает первый набросок общей картины того, что же «увидел» детектор. С этой за- В данном примере, рассматривалась работа по обнаружению рождения одиночного топ-кварка.
дачей триггер должен справиться за 100 микросекунд, и если событие удовлетворяет заранее введенным критериям, передать его дальше. Эти события, примерно тысяча в секунду, поступают на триггер третьего уровня, а точнее на целую «фабрику» таких триггеров, которые работают параллельно . Каждому такому триггеру дается в тысячу раз больше времени — целая десятая доля секунды! — и за это время он должен полностью разобраться с тем, что это было За событие. Ему надо вычислить углы вылета частиц, их импульсы и энергии, инвариантные массы, проверить суммарный баланс импульса и энергии и т. д. Именно на этой стадии из всех событий, в которых было хоть что-то нетривиальное, выделяются события, которые считаются интересными с точки зрения физики. Таких событий получается около 50 в секунду, и вот они-то и записываются на ленту. (Да-да, сырые данные на Тэватроне записываются не на жесткие диски, а на магнитную ленту.) Сколько же таких зарегистрированных событий наберется за 4 стандартных ускорительных года? 50 записанных событий в секунду, полмиллиарда событий в год, 2 миллиарда событий за 4 года. Это и есть тот исходный массив данных, из которого группа исследователей и начала выбирать события. Читателю, заинтересовавшемуся работой триггеров и — более широко — front- end электроникой, используемой на детекторах элементарных частиц, можно для первого знакомства порекомендовать классическую книгу Клауса Групена «Детекторы элементарных частиц». Мы же поговорим подробнее о простых детекторах элементарных частиц, из которых состоят и детекторы на ускорителях. Информативность любого субатомного опыта напрямую определяется возможностями тех детекторов, которые в нём используются. История ядерной физики и физики частиц это, по существу, история создания всё новых методов регистрации частиц и совершенствования старых. Создание новых методов детектирования частиц неоднократно отмечалось Нобелевскими премиями. В настоящее время в арсенале физиков имеется большое число отдельных детекторов и установок, являющихся комбинацией различных детекторов. Они представляют собой образцы современных технических возможностей и, подчас, самыми совершенными устройствами, которые созданы человеком.
Детекторы служат как для регистрации частиц, так и для определения их энергии, импульса, траектории движения частицы и других характеристик. Для регистрации частиц часто используют детекторы, которые максимально чувствительны к регистрации определенной частицы и не чувствуют большой фон создаваемый другими частицами. Часто в экспериментах приходится выделять «нужные» события на гигантском фоне «посторонних» событий, которых может быть в миллиарды раз больше. Для этого используют различные комбинации счётчиков и методов регистрации, применяют схемы совпадений или антисовпадений между событиями, зарегистрированными различными детекторами, отбор событий по амплитуде и форме сигналов и т. д. Часто используется селекция частиц по времени пролёта ими определённого расстояния между детекторами, магнитный анализ и другие методы, которые позволяют надёжно выделить различные частицы. Число детекторов различного типа велико и нет возможности в этом разделе детально их описать. В то же время читатель должен иметь представление о многообразии способов наблюдения частиц. Поэтому дадим лишь беглый и краткий обзор используемых детекторов с упором на принципы их действия и характеристики. Мы почти не будем касаться технических подробностей, хотя они зачастую представляют не меньший интерес и определяют возможности детектора. Мы также не будем описывать электронику, обрабатывающую сигналы, поступающие с детектора , и особенности использования ЭВМ в этом процессе. Один из наиболее общих принципов регистрации частицы состоит в следующем. Заряженная частица, двигаясь в нейтральной среде детектора (газ, жидкость, твердое тело, аморфное или кристаллическое), вызывает за счет электромагнитных взаимодействий ионизацию и возбуждение атомов среды. Таким образом, вдоль пути движения частицы появляются свободные Заряды (электроны и ионы) и возбужденные атомы. Если среда находится в электрическом поле, то в ней возникает электрический ток, который фиксируется в виде короткого электрического импульса (условно детекторы, использующие этот принцип, будем называть ионизационными) . При возвращении возбужденных атомов в основное (невозбужденное) состояние излучаются фотоны, которые могут быть зарегистрированы в виде оптической вспышки в видимой или ультрафиолетовой области. Этот принцип используется в сцинтилляционных детекторах. При определенных условиях траекторию пролетающей заряженной частицы, можно сделать видимой. Это осуществляется в так называемых трековых детекторах . Нейтральные частицы (такие как нейтрон или -гиперон) непосредственно не вызывают ионизацию и возбуждение атомов среды. Однако они могут быть зарегистрированы в результате появления вторичных заряженных частиц, возникших либо в реакциях этих нейтральных частиц с ядрами среды, либо в результате распада этих частиц. Гамма-кванты также регистрируются по вторичным заряженным частицам - электронам и позитронам, возникающим в среде вследствие фотоэффекта, Комптон-эффекта и рождения электрон-позитронных пар. Нейтрино, возникшее в результате реакции, в силу исключительно малого сечения взаимодействия со средой (10-20 барн) в большинстве случаев вообще не регистрируется детектором. Тем не менее, факт его появления может быть установлен. Дело в том, что ускользнувшее от непосредственного наблюдения нейтрино уносит с собой определённую энергию, импульс, спин, лептонный заряд. Недостачу обнаруживают, регистрируя все остальные частицы и применяя к ним законы сохранения энергии, импульса, момента количества движения, электрического заряда, лептонного заряда и др. Такой анализ позволяет не только убе-
литься, в том нейтрино действительно было, но и установить его энергию и направление вылета из точки реакции. Быстрораспадающиеся частицы детектор «не успевает» зафиксировать. В этом случае они регистрируются по продуктам распада. Общие требования к детектирующей аппаратуре сводятся к определению типа частицы (идентификации) и её кинематических характеристик (энергии, импульса и др.) . Часто тип частицы известен заранее и задача упрощается. Во многих экспериментах, особенно в физике высоких энергий, используются крупногабаритные и сложные комплексы, состоящие из большого числа детекторов различного типа. Такие комплексы, фиксируя практически все частицы, возникающие в эксперименте, дают достаточно полное представление об изучаемом явлении. Основными характеристиками детектора являются - эффективность (вероятность регистрации частицы при попадании её в детектор), временное разрешение (минимальное время, в течение которого детектор фиксирует две частицы как отдельные) и мёртвое время или время восстановления (время, в течение которого детектор после регистрации частицы либо вообще теряет способность к регистрации следующей частицы, либо существенно ухудшает свои характеристики). Если детектор определяет энергию частицы и (или) её координаты, то он характеризуется также энергетическим разрешением (точностью определения энергии частицы) и пространственным разрешением (точностью определения координаты частицы). Камера Вильсона Камера Вильсона — один из первых в истории приборов для регистрации следов (треков) заряженных частиц. Изобретена шотландским физиком Чарлзом Вильсоном между 1910 и 1912 гг. Принцип действия камеры использует явление конденсации перенасыщенного пара: при появлении в среде пара каких-либо центров конденсации (в частности, ионов , сопровождающих след быстрой заряженной частицы) на них образуются мелкие капли жидкости. Эти капли достигают значительных размеров и могут быть сфотографированы. Источник исследуемых частиц может располагаться либо внутри камеры, либо вне ее (в этом случае частицы залетают через прозрачное для них окно). Для исследования количественных характеристик частиц (например, массы и скорости) камеру помещают в магнитное поле, искривляющее треки. фотокамера траектория частицы -О" У///////////Л У///////77ТГ, Камера Вильсона представляет собой емкость со стеклянной крышкой и поршнем в нижней части заполнена насыщенными парами воды, спирта или эфира. Когда поршень опускается, то за счет адиабатического расширения пары охлаждаются и становятся пересыщенными. Заряженная частица, проходя сквозь камеру, оставляет на своем пути цепочку ионов. Пар конденсируется на ионах, делая видимым след частицы. Камера Вильсона сыграла огромную роль в изучении строения вещества. На протяжении нескольких десятилетий она оставалась практически единственным инст-
рументом для визуального исследования ядерных излучений. В 1927 году Вильсон получил за свое изобретение Нобелевскую премию по физике. Впоследствии камера Вильсона в качестве основного средства исследования радиации уступила место пузырьковым и искровым камерам. Пространственное разрешение камеры Вильсона обычно приблизительно 0.3 мм. Рабочей средой чаще всего является смесь паров воды и спирта под давлением 0.1-2 атмосферы (водяной пар конденсируется главным образом на отрицательных ионах, пары спирта - на положительных). Перенасыщение достигается быстрым уменьшением давления за счёт расширения рабочего объёма. Время чувствительности камеры, в течение которого перенасыщение остаётся достаточным для конденсации на ионах, а сам объём приемлемо прозрачным (не перегруженным капельками, в том числе и фоновыми), меняется от сотых долей секунды до нескольких секунд. После этого необходимо очистить рабочий объём камеры и восстановить её чувствительность. Таким образом, камера Вильсона работает в циклическом режиме. Полное время цикла обычно > 1 мин. Важным усовершенствованием, удостоенным в 1948 г. Нобелевской премии (П. Блэкетт), явилось создание управляемой камеры Вильсона. Специальные счётчики отбирают события, которые должны быть зарегистрированы камерой Вильсона, и "Запускают" камеру лишь для наблюдения таких событий. Эффективность камеры Вильсона, работающей в таком режиме, многократно возрастает. "Управляемость" камеры Вильсона объясняется тем, что можно обеспечить очень высокую скорость расширения газовой среды и камера успевает отреагировать на запускающий сигнал внешних счётчиков. Диффузионная камера Перенасыщение пара можно создать не только расширением объёма газовой среды, но и диффузией пара из нагретой области в холодную. Этот принцип используется в диффузионной камере. В отличие от камеры Вильсона диффузионные камеры обладают непрерывной чувствительностью, так как в них диффузия пара из нагретой части в холодную осуществляется постоянно. В диффузионных камерах обычно используются пары спиртов, а для охлаждения - сухой лед. Диффузионные камеры часто помещают в магнитное поле. Дифузионная камера была изобретена в 1936 г. Александром Ландгсдорфом. Пузырьковая камера Пузырьковая камера — прибор для регистрации следов (или треков) быстрых заряженных частиц, действие которого основано на вскипании перегретой жидкости вдоль траектории частицы. Камера заполнена жидкостью, которая находится в состоянии близком к вскипанию. При резком уменьшении давления жидкость становится перегретой. Если в данном состоянии в камеру попадёт ионизирующая частица, то её траектория будет отмечена цепочкой пузырьков пара и может быть сфотографирована. Пузырьковая камера была изобретена Доналдом Глазером (США) в 1952 году. За своё открытие Глазер получил Нобелевскую премию в 1960 году. Луис Уолтер Альварес усовершенствовал пузырьковую камеру Глазера, использовав в качестве перегретой жидкости водород. А также для анализа сотен тысяч фотографий, получаемых при исследованиях с помощью пузырьковой камеры, Альварес впервые применил компьютерную программу, позволявшую анализировать данные с очень боль-
шой скоростью. Пузырьковая камера позволила зафиксировать поведение многих ионизирующих частиц, не поддававшихся ранее наблюдению, и получить о них в тысячи раз большую информацию. В качестве рабочей жидкости наиболее часто применяют жидкие водород и дейтерий (криогенные пузырьковые камеры), а также пропан, различные фреоны, ксенон, смесь ксенона с пропаном (тяжеложидкостные пузырьковые камеры). Перегрев жидкости достигается за счет быстрого понижения давления до значения при котором температура жидкости оказывается выше температуры кипения (при текущем давлении). Понижение давления осуществляется за время ~ 5—15 мсек перемещением поршня (в жидководородных камерах) либо сбросом внешнего давления из объёма, ограниченного гибкой мембраной (в тяжеложидкостных камерах). Частицы впускаются в камеру в момент её максимальной чувствительности. Спустя некоторое время, необходимое для достижения пузырьками достаточно больших размеров, камера освещается и следы фотографируются (стереофотосъёмка с помощью 2—4 объективов). После фотографирования давление поднимается до прежней величины, пузырьки исчезают, и камера снова оказывается готовой к действию. Весь цикл работы составляет величину менее 1 сек, время чувствительности ~ 10—40 мсек. Пузырьковые камеры (кроме ксеноновых) размещаются в сильных магнитных полях. Это позволяет определить импульсы заряженных частиц по измерению радиусов кривизны их траекторий. Движение частицы в пузырьковой камере Пузырьковые камеры, как правило, используются для регистрации актов взаимодействия частиц высоких энергий с ядрами рабочей жидкости или актов распада частиц. В первом случае рабочая жидкость исполняет роли и регистрирующей среды , и среды-мишени. Эффективность регистрации пузырьковой камеры различных процессов взаимодействия или распада определяется в основном её размерами. Наиболее типичный
объём — сотни литров, но существуют камеры гораздо большего размера, например водородная камера «Мирабель» на ускорителе Института физики высоких энергий РАН имеет объём 10 м3; водородная камера на ускорителе Национальной ускорительной лаборатории США — объём 25 м3. Основное преимущество пузырьковой камеры — изотропная пространственная чувствительность к регистрации частиц и высокая точность измерения их импульсов. Недостаток пузырьковой камеры — слабая управляемость, необходимая для отбора нужных актов взаимодействия частиц или их распада. Искровая камера Искровая камера - трековый детектор заряженных частиц, в котором трек (след) частицы образует цепочка искровых электрических разрядов вдоль траектории её движения. Искровая камера обычно представляет собой систему параллельных металлических электродов, пространство между которыми заполнено инертным газом. Расстояние между пластинами от 1-2 см до 10 см. Широко используются проволочные искровые камеры, электроды которых состоят из множества параллельных проволочек. Внешние управляющие счётчики фиксируют факт попадания заряженной частицы в искровую камеру и инициируют подачу на её электроды короткого (10 - 100 не) высоковольтного импульса чередующейся полярности так, что между двумя соседними электродами появляется разность потенциалов, приблизительно 10 кВ. В местах прохождения заряженной частицы между пластинами, за счёт ионизации ею атомов среды, возникают свободные носители зарядов (электроны, ионы), что вызывает искровой пробой (разряд). Разрядные искры строго локализованы. Они возникают там, где появляются свободные заряды, и поэтому воспроизводят траекторию движения частицы через камеру. Отдельные искровые разряды, направлены вдоль электрического поля (перпендикулярно электродам). Совокупность этих последовательных разрядов формирует трек частицы. Этот трек может быть зафиксирован либо оптическими методами (например, сфотографирован), либо электронными. Пространственное разрешение обычной искровой приблизительно 0.3 мм. Частота срабатывания 10 - 100 Гц. Искровые камеры могут иметь размеры порядка нескольких метров. В настоящее время более широкое распространение получила стримерная камера (изобретена в 1963 г. Г.Е. Чиковани и Б.А. Долгошеиным) , которую можно считать разновидностью искровой камеры. Она также является управляемым импульсным газоразрядным детектором, в котором разряд обрывается на более ранней
стадии, не успевая перейти в искру. Для этого на две параллельные плоские металлические пластины, отстоящие друг от друга на десятки сантиметров (обычные размеры стримерной камеры 1x0.5x0.5 мЗ) , подаётся очень короткий (< 20 не) высоковольтный импульс, создающий напряжённость электрического поля до 50 кВ/см. Использование столь короткого импульса обеспечивает прекращение разряда на доискровой (стримерной) стадии. Стримеры - это узкие направленные вдоль поля светящиеся каналы ионизованного газа длиной до нескольких миллиметров, возникающие в предпробойной стадии искрового разряда. Стримеры вырастают в сильном электрическом поле в местах ионизации, созданной заряженной частицей. Совокупность стримеров вдоль пути пролёта частицы формирует её трек. Треки обычно фотографируют. По качеству изображения эти треки несколько уступают тем, которые получают в пузырьковых камерах. Типичное пространственное разрешение стримерной камеры 0.2-0.3 мм. Стримерные камеры часто используют совместно с магнитным полем. В них, в отличие от искровых камер, хорошо воспроизводятся треки в любых направлениях. Распад пиона в искровой камере Многопроволочная пропорциональная камера Многопроволочная пропорциональная камера (МПК) представляет собой систему многих тонких («10 мкм) параллельных проволочек, расположенных в одной плоскости и являющихся анодами, которые находятся в газовом объёме между двумя плоскими параллельными друг другу и аноду катодами (сплошными или проволочными) . В типичном случае анодные проволочки удалены друг от друга на 2 мм и от катодов на расстоянии 8 мм. Разность потенциалов между анодом и катодом несколько кВ. Такие параметры МПК обеспечи- Катодные стрипы X т -2 мм 01 вают газовое усиление 104-105 и пропорциональность амплитуды сигнала энергии, оставленной частицей в объёме газа. Таким образом, МПК это, по существу, система размноженных пропорциональных счётчиков. При прохождении заряженной частицы X через МПК образовавшиеся вдоль следа частицы свободные электроны дают начало лавинам, приходящим на анодные проволочки ближайшие к этим первичным электронам. Электроника регистрирует сигнал с каждой проволочки. Таким образом, приходящие сигналы указывают положение (координаты) частицы в МПК. Для того, чтобы получить трёхмерные координаты частицы в большом объёме, используются системы из десятков
МПК площадью до 10 м , располагающихся параллельно одна за другой, с общим числом проволочек несколько десятков тысяч, причём проволочки двух соседних МПК натянуты взаимно перпендикулярно. Типичное пространственное разрешение современной МПК 0.05-0.3 мм. Временное разрешение несколько наносекунд. Энергетическое разрешение пропорциональной камеры «10%. МПК применяют главным образом в исследованиях элементарных частиц на ускорителях высоких энергий. МПК были разработаны Г. Чарпаком в ЦЕРНе в 1968 г., что было отмечено Нобелевской премией 1992 г. Дрейфовая камера Дрейфовая камера является координатным детектором. Это проволочный газонаполненный ионизационный детектор, в котором координата частицы определяется по времени дрейфа электронов в газе от места ионизации (пролёта частицы) до сигнальных анодных проволочек. Расстояние между проволочками обычно несколько сантиметров . В дрейфовой камере создаётся однородное электрическое поле. Оно включается по стартовым сигналам ^^^ш j г /4 внешних детекторов (чаще всего сцинтилляционных счёт- Ж* \ ^^^Н чиков) , фиксирующих пролёт частицы через камеру. Далее / г ^^^Н появившиеся в объёме камеры свободные электроны дрей- W/т ^^^Н фуют в однородном и постоянном поле к ближайшим прово- ' ^^^^ лочкам. Напряжённость поля в дрейфовом промежутке «1 кВ/см. В непосредственной близости от анодных проволочек происходит образование лавин (газовое усиление достигает 106) и по времени задержки прихода лавин на анодные проволочки относительно стартового сигнала определяются координаты частицы. Пространственное разрешение дрейфовой камеры порядка 0.1-0.2 мм, временное - наносекунды. Дрейфовые камеры могут быть плоскими, цилиндрическими и сферическими, Плоские дрейфовые камеры больших размеров используются в экспериментах на ускорителях высоких энергий. Так в ЦЕРНе разработана дрейфовая камера размером 2x4x5 мЗ. Микростриповые детекторы Д| стрип SiO ~30 мкм р + имплантирован В кремний п-типа Е О о го п + имплантирован Р или As Al ™1 мкм Для очень точного определения координат частиц используют полупроводниковые микростриповые детекторы. Они представляют собой пластины монокристалла кремния, на одну из поверхностей которых наносятся тонкие электроды (стрипы), отстоящие друг от друга на расстоянии «20 мкм, а другая покрывается металлическим слоем. На электроды подается напряжение несколько вольт. Электронно- дырочные пары, образованные пролетающей заряженной частицей в кристалле, двигаются к ближайшим электродам и регистрируются в виде импульсов тока. Про-
странственное разрешение микростриповых детекторов уступает только ядерным эмульсиям и достигает 10 мкм. Временное разрешение - 10~8 с. Ядерные фотоэмульсии Впервые с возможностью регистрации ядерных излучений фотографическим методом столкнулся А. Беккерель, открывший в 1896 г. с помощью фотопластинок радиоактивность урана. Но по настоящему в практику субатомных исследований этот метод вошёл в конце сороковых годов прошлого века после создания С. Пауэллом специальных фотопластинок с толстым эмульсионным слоем (эта работа была отмечена Нобелевской премией). Ядерные эмульсии, как и обычные светочувствительные, состоят из желатина и jt взвешенных частиц кристаллического бромистого серебра (AgBr) Диэлектрические детекторы К ядерным эмульсиям функционально примыкают диэлектрические детекторы (стёкла, слюды, природные и синтетические кристаллы, органические полимеры), которые избирательно чувствительны к многозарядным ионам и осколкам деления ядер. В них, как и в фотоэмульсиях, возникает скрытое изображение в форме остаточных дефектов вдоль трека частицы, которые выявляются химическим травлением. Следы тяжёлых частиц наблюдаются под микроскопом как каналы или лунки диаметром в десятки и сотни мкм. Диэлектрические детекторы имеют высокую эффективность регистрации и низкий уровень фона. Они не чувствительны к свету, альфа-частицам, гамма-излучению, высокоэнергичным малозарядным частицам. Их используют и для регистрации нейтронов по осколкам деления ядер, которое эти нейтроны вызывают. Ионизационная камера Ионизационная камера - простейший газонаполненный детектор. Она представляет собой систему из двух или трёх электродов в объеме, заполненном газом (Не+Ar, Аг+СгН2, Ne) . Ионизационная камера может быть выполнена в виде плоского или цилиндрического конденсатора. Величина прикладываемого напряжения (обычно сотни вольт) подбирается так, чтобы образованные в камере при пролёте заряженной частицы свободные заряды максимально быстро, не успев рекомбиниро- вать, достигали электродов. •i размером до 0.3 мкм, но в отличие от последних имеют существенно большую толщину - до нескольких сотен микрон (толщина обычных эмульсий 10 мкм) . Заряженные частицы, проходя через слой эмульсии, ионизуют атомы, лежащие на их пути. В результате происходит разложение бромистого серебра и образование центров скрытого изображения. При последующей проявке в эмульсии образуются мельчайшие зёрна металлического серебра размером до «1 мкм, которые наблюдаются под микроскопом в виде точек различной жирности. След частицы имеет вид цепочки таких точек со средним расстоянием между ними, не превышающим 5 мкм. По характеру этого следа (концентрации точек и отклонению от прямолинейности) можно идентифицировать тип частицы. Ионизационные камеры бывают интегрирующие и импульсные. В интегрирующих камерах при больших потоках частиц импульсы сливаются и регистрируется ток
пропорциональный среднему энерговыделению. В импульсных камерах регистрируются отдельные импульсы от каждой ионизирующей частицы. Импульсные камеры обычно трехэлектродные. Рабочим объемом служит пространство между катодом и сеткой. Образовавшиеся в результате ионизации электроны под действием поля Екс двигаются по направлению к сет- катод ке, проходят ее под действием поля Еса > Екс и собираются на аноде. Более подвижные электроны собираются за время «10~6 с. Положительные ионы, время сбора которых на три порядка больше за — — — — — — — — — сетка это время остаются практически на месте. Сетка анод экранирует анод от индукционного воздействия положительных ионов. Временное разрешение ионизационной камеры определяется временем сбора зарядов. Таким образом, при регистрации импульса тока от электронов временное разрешение ионизационной камеры будет достигать 10~6 с. Если частица полностью останавливается в объёме камеры, то по величине собранного заряда (количеству электронов, пришедших на анод) легко определить энергию частицы. Эта энергия равна произведению числа электронов п на среднюю энергию 8, необходимую на образование частицей одной пары электрон-ион (для газа 8 « 30-40 эВ). Пропорциональный счётчик Недостатком ионизационной камеры являются очень низкие токи. Этот недостаток ионизационной камеры преодолевается в ионизационных детекторах с газовым усилением. Это позволяет регистрировать частицы с энергией < 10 кэВ, в то время как сигналы от частиц таких энергий в ионизационных камерах "тонут" в шумах усилителя. Газовое усиление это увеличение количества свободных зарядов в объёме детектора за счёт того, что первичные электроны на своём пути к аноду в больших электрических полях приобретают энергию достаточную для ударной ионизации нейтральных атомов рабочей среды детектора. Возникшие при этом новые электроны в свою очередь успевают приобрести энергию достаточную для ионизации ударом. Таким образом, к аноду будет двигаться нарастающая электронная лавина. Это "самоусиление" электронного тока (коэффициент газового усиления) может достигать 103-104. Такой режим работы отвечает пропорциональному счётчику (камере). В названии отражено то, что в этом приборе амплитуда импульса тока (или полный собранный заряд) остаётся пропорциональной энергии, затраченной заряженной частицей на первичную ионизацию среды детектора. Таким образом, пропорциональный счётчик способен выполнять функции спектрометра, как и ионизационная камера. Энергетическое разрешение пропорциональных счетчиков лучше, чем у сцинтилляционных, но хуже, чем у полупроводниковых. Конструктивно пропорциональный счётчик обычно изготавливают в форме цилиндрического конденсатора с анодом в виде тонкой металлической нити по оси цилиндра, что обеспечивает вблизи анода напряженность электрического поля значительно большую, чем в остальной области детектора. При разности потенциалов между анодом и катодом 1000 вольт напряжённость поля вблизи нити-анода может достигать 40 000 вольт/см., в то время как у катода она равна сотням в/см.
id (2 Схема пропорционального счётчика в продольном (а) и поперечном (б) разрезах (аналогично устроен счетчик Гейгера и цилиндрическая ионизационная камера): 1 - нить-анод, 2 - цилиндрический катод, 3 - изолятор, 4 - траектория заряженной частицы, 5 электронная лавина. Электроны и ионы, созданные частицей в результате первичной ионизации атомов инертного газа, показаны соответственно темными и белыми кружочками. Если ещё больше увеличить разность потенциалов между анодом и катодом и увеличить коэффициент газового усиления до значений >104, то начинает нарушаться пропорциональность между потерянной частицей в детекторе энергией и величиной импульса тока. Прибор переходит в режим ограниченной пропорциональности и уже не может быть использован как спектрометр, а лишь как счётчик частиц. Временное разрешение пропорционального счетчика может достигать 10~7с. Пропорциональные счетчики используются для регистрации альфа-, бета-частиц, протонов, гамма-квантов и нейтронов. Пропорциональные счетчики чаще всего заполняют гелием или аргоном. При регистрации заряженных частиц и гамма-квантов для того, чтобы избежать потерь энергии частицами до регистрации используют тонкие входные окна. Иногда источник помещают в объём счетчика. Эффективность регистрации для мягких гамма-квантов с энергией < 20 кэВ > 80%. Для повышения эффективности регистрации более энергетичных гамма-квантов используют ксенон. При регистрации нейтронов пропорциональные счетчики заполняются газами 3Не или 10BF3. Используются реакции п + 3Не —> 3Н + гЕ + 0.764 МэВ n + 10В —> 7Li* + 4Не —> 7Li + 4Не + у (0.48 мэВ) +2.3 МэВ (93%) n + 10В —> 7Li + 4Не + 2.8 МэВ (7%) . Нейтроны регистрируются с помощью заряженных частиц, возникающих в результате этих реакций и вызывающих ионизацию в счетчике. Счётчик Гейгера-Мюллера Счётчик Гейгера (или счётчик Гейгера-Мюллера) - газонаполненный счётчик заряженных элементарных частиц, электрический сигнал с которого усилен за счёт вторичной ионизации газового объёма счётчика и не зависит от энергии, оставленной частицей в этом объёме. Изобретён в 1908 г. X. Гейгером и Э. Резерфор- дом, позднее усовершенствован Гейгером и В. Мюллером.
Конструктивно счётчик Гейгера устроен также как пропорциональный счётчик, т.е. представляет собой цилиндрический конденсатор, заполненный инертным газом. К внутреннему электроду (тонкой металлической нити) приложен положительный потенциал, к внешнему - отрицательный. Функционально счётчик Гейгера также в основном повторяет пропорциональный счётчик, но отличается от последнего тем, что за счёт более высокой разности потенциалов на электродах работает в таком режиме, когда достаточно появления в объёме детектора одного электрона, чтобы развился мощный лавинообразный процесс, обусловленный вторичной ионизацией (газовое усиление), который способен ионизовать всю область вблизи нити- анода. При этом импульс тока достигает предельного значения (насыщается) и не зависит от первичной ионизации. По существу, при попадании в счетчик Гейгера частицы в нём вспыхивает (зажигается) самостоятельный газовый разряд. При этом коэффициент газового усиления может достигать 1010, а величина импульса десятков вольт. Этот счётчик обладает практически стопроцентной вероятностью регистрации заряженной частицы, так как для возникновения разряда достаточно одной электрон-ионной пары. Однако длительность сигнала со счётчика Гейгера сравнительно велика («10~4 с) . Именно такое время требуется, чтобы медленные положительные ионы, заполнившие пространство вблизи нити-анода после пролёта частицы и прохождения электронной лавины, ушли к катоду и восстановилась чувствительность детектора. Источник высокого напряжения Искровой счетчик Если разность потенциалов между анодом и катодом в газонаполненном счетчике превысит некоторое критическое значение, то появление в его объёме свободных носителей зарядов вызовет искровой пробой (разряд). При этом амплитуда электрического сигнала с такого счётчика (называемого искровым) может достигать сотен вольт. После разряда счётчику требуется время 10~3-10~4 с для восстановления (очистки рабочего газового объёма от положительных ионов), после чего он будет в состоянии зарегистрировать новую частицу. В простейшем варианте искровой счётчик представляет собой два плоскопараллельных металлических электрода, к которым приложена разность потенциалов несколько кВ. Площадь электродов - десятки квадратных сантиметров. Пространство между электродами обычно заполнено инертным газом. Зазор между электродами может варьироваться
в пределах 0.1-10 мм. Разрядная искра строго локализована. Она возникает там, где появляются первичные электроны, и поэтому указывает место попадания частицы в счётчик. Полупроводниковые детекторы Газонаполненные детекторы имеют два недостатка. Во-первых, плотность газа низка и энергия, теряемая частицей в объёме детектора мала, что не позволяет эффективно регистрировать высокоэнергичные и слабоионизующие частицы. Во- вторых, энергия, необходимая для рождения пары электрон-ион в газе велика (30-40 эВ), что увеличивает относительные флуктуации числа зарядов и ухудшает энергетическое разрешение. Значительно более удобными в этом плане являются детекторы с твёрдотельной рабочей средой. Наибольшее распространение получили полупроводниковые детекторы из кристаллов кремния (плотность 2.3 г/см3) и германия (5.3 г/см3) . В полупроводниковом детекторе определенным образом создается чувствительная область, в которой нет свободных носителей заряда. Попав в эту область, заряженная частица вызывает ионизацию, соответственно в зоне проводимости появляются электроны, а в валентной зоне - дырки. Под действием напряжения, приложенного к напылённым на поверхность чувствительной зоны электродам, возникает движение электронов и дырок, формируется импульс тока. К полупроводниковому кристаллу прикладывается напряжение до нескольких кВ, что обеспечивает сбор всех зарядов, образованных частицей в объёме детектора . Энергия, необходимая для рождения одной пары электрон-дырка в кремнии равна 3.62 эВ при температуре Т = 300 К и 3.72 эВ при Т = 80 К, германии она равна 2.95 эВ при Т = 80 К. Это при использовании полупроводникового счётчика в качестве спектрометра позволяет в несколько раз улучшить энергетическое разрешение по сравнению с газонаполненными счётчиками, такими как ионизационная камера и пропорциональный счётчик. Для регистрации заряженных частиц используют кремниевые детекторы и детекторы из сверхчистого германия (HpGe). Толщина чувствительной области кремниевых детекторов не превышает 5 мм, что соответствует пробегу протонов с энергией ~30 МэВ и альфа-частиц с энергией ~120 МэВ. Для германия толщина 5 мм соответствует пробегам протонов и альфа-частиц с энергиями ~40 МэВ и ~160 МэВ соответственно. Более того, германиевые детекторы могут быть изготовлены с гораздо более толстой чувствительной областью. Кремниевые детекторы часто используют при комнатной температуре. Германиевые детекторы всегда охлаждают до азотных температур. Большие преимущества даёт применение полупроводниковых детекторов в спектрометрах гамма-квантов. В этом случае применяются специально выращенные кристаллы сверхчистого германия объёмом до нескольких сотен см3. Германий имеет довольно высокий атомный номер Z = 32 и поэтому эффективное сечение взаимодействия гамма-квантов велико (вероятность фотоэффекта пропорциональна Z5, Комптон-эффекта - Z, рождения пар - Z2) . Чтобы добиться наилучшего энергетического разрешения германиевые кристаллы во время эксперимента охлаждают до температуры жидкого азота (77° К). Энергетическое разрешение германиевых детекторов при регистрации гамма-квантов достигает 0.1%, что в десятки раз выше, чем у сцинтилляционных детекторов. Временное разрешение лучших полупроводниковых детекторов 10~8-10~9 с.
Микроканальные пластины Микроканальные пластины (МКП) представляют собой сотовые структуры, образованные большим числом стеклянных трубок (каналов) диаметром 5-15 мкм с внутренней полупроводящей поверхностью, имеющей сопротивление от 20 до 1000 МОм. Другими словами МКП представляет собой сборку большого (несколько миллионов) количества канальных электронных умножителей. Когда налетающая частица (ион, электрон, фотон и т.п.) попадает в канал, из его стенки выбиваются электроны, которые ускоряются электрическим полем, созданным напряжением приложенным к концам канала. Вторичные электроны летят по своим параболическим траекториям, пока не попадут на стенку, в свою очередь, выбивая еще большее количество вторичных электронов. Этот процесс по мере пролета вдоль канала повторяется много раз и на ее выходе формируется электронная лавина. канал полупро водящая верхность электронная лавина на выходе 1-2 кВ Коэффициент усиления МКП g определяется соотношением g = exp (G*(L/d), где G - коэффициент вторичной эмиссии, который зависит от свойств материала стенок канала и приложенного напряжения, L и d - длина и диаметр канала. Отношение L/d у стандартных МКП около 40-80. Коэффициент усиления у однокаскадных МКП ~104, у двухкаскадных (шевронных) ~107, у трехкаскадных - до 109. Чтобы налетающие частицы попадали на стенки каналов, они располагаются под некоторым углом к направлению их движения (обычно 5°-15°). Размеры МКП варьируются от нескольких миллиметров до 10 см и больше. Форма МКП может быть самая разнообразная - округлая, прямоугольная, практически любая, необходимая для конкретного приложения. Кроме того, поверхность их может быть сделана сферической или цилиндрической, для того, например, чтобы соответствовать фокальной плоскости магнитного или электростатического спектрометра . МКП имеют уникальное сочетание свойств - большой коэффициент усиления, высокое пространственное и временное разрешение. (Пространственное разрешение для однокаскадных МКП определяется диаметром канала. Временное - временем пролета электронной лавиной канала, которое меньше 1 не.) МКП используются в различных областях (электронная спектроскопия и микроскопия, масс-спектрометрия, рентгеновская астрономия, ядерные исследования ...). В большинстве случаев используются только некоторые свойства МКП. Так для магнитных или электростатических анализаторов в основном важно пространственное разрешение, а для метода времени пролета временное. Детекторы на базе МКП оптимизируются с учетом решаемых с их помощью задач. В общем случае детекторы на базе МКП состоят из трех частей.
1. Конвертора, который преобразует входное излучение в другое, которое может эффективно взаимодействовать непосредственно с МКП. Например, также как и в ФЭУ используются фотокатоды для сдвига длин волн в область чувствительную для МКП. Для электронов, ионов и ультрафиолета конвертеров обычно не нужно. 2. Собственно сборки МКП. В зависимости от решаемой задачи они могут иметь от одного до трех каскадов. Для временных измерений оптимальными считаются двухкаскадные (шевронные). 3. Вывода данных. Для приложений, в которых пространственное разрешение не имеет значения, для вывода сигнала можно использовать сплошной металлический анод. Там, где важно пространственное разрешение анод может быть секционированным или резистивным и т.д. Использование МКП накладывает довольно жесткие требования к вакуумной системе. Для их нормальной работы требуется давление не менее 6.5 10"4 Па (5 10~6 торр) . По сравнению с ФЭУ, МКП имеют малые габариты, лучшие временные характеристики и заметно меньшую чувствительность к магнитным полям. Сцинтилляционные детекторы Первый сцинтилляционный детектор, названный спинтарископом, представлял собой экран, покрытый слоем ZnS. Вспышки, возникавшие при попадании в него Заряженных частиц, фиксировались с помощью микроскопа. Именно с таким детектором Гейгер и Марсден в 1909 г. провели опыт по рассеянию альфа-частиц атомами Золота, приведший к открытию атомного ядра. Начиная с 1944 г. световые вспышки от сцинтиллятора регистрируют фотоэлектронными умножителями (ФЭУ). Позже для этих целей стали использовать также светодиоды. Сцинтиллятор может быть органическим (кристаллы, пластики или жидкости) или неорганическим (кристаллы или стекла). Используются также газообразные сцин- тилляторы. В качестве органических сцинтилляторов часто используются антрацен (С14Н10) , стильбен (С14Н12) , нафталин (СюН8) . Жидкие сцинтилляторы обычно известны под фирменными именами (например NE213). Пластиковые и жидкие сцинтилляторы представляют из себя растворы органических флуоресцирующих веществ в прозрачном растворителе. Например, твердый раствор антрацена в полистироле или жидкий раствор р-терфенила в ксилоле. Концентрация флуоресцирующего вещества обычно мала и регистрируемая частица возбуждает в основном молекулы растворителя. В дальнейшем энергия возбуждения передается молекулам флуоресцирующего вещества. В качестве неорганических кристаллических сцинилляторов используются ZnS, Nal(Tl), Csl, Bi4Ge30i2 (BGO) и др. В качестве газовых и жидких сцинтилляторов используют инертные газы (Хе, Кг, Аг, Не) и N. Так как в органических сцинтилляторах возбуждаются молекулярные уровни, которые излучают в ультрафиолетовой области для согласования со спектральной чувствительностью регистрирующих свет устройств (ФЭУ и фотодиодов) используются светопреобразователи, которые поглощают ультрафиолетовое излучение и переизлучают видимый свет в области 400 нм. Световой выход - доля энергии регистрируемой частицы конвертируемая в энергию световой вспышки. Световой выход антрацена ~0.05 или 1 фотон на 50 эВ для частиц высокой энергии. У Nal световой выход ~0.1 или 1 фотона на 25 эВ. Принято световой выход данного сцинтиллятора сравнивать со световым выходом
антрацена, который используется как стандарт. Типичные световые выходы пластиковых сцинтилляторов 50-60%. Интенсивность световой вспышки пропорциональна энергии, потерянной частицей, поэтому сцинтилляционный детектор может использоваться в качестве спектрометра, т. е. прибора, определяющего энергию частицы. С помощью сцинтилляционных счетчиков можно измерять энергетические спектры электронов и гамма-лучей. Несколько хуже обстоит дело с измерением спектров тяжелых заряженных частиц (альфа-частицы и др.), создающих в сцинтилляторе большую удельную ионизацию. В этих случаях пропорциональность интенсивности вспышки потерянной энергии наблюдается не при всяких энергиях частиц и проявляется только при значениях энергии, больших некоторой величины. Нелинейная связь амплитуд импульсов с энергией частицы различна для различных фосфоров и для различных типов частиц. Отражатель А1203 , Кристал сцинтиллятора , Оптическое окно tЖидкость для оптического контакта 'Алюминиевый корпус - , Магнитная защита из мю-металла \ . ' Фотоумножитель Алюминиевая крышка Сцинтиллятор и ФЭУ Фотоны, возникшие в сцинтилляторе под действием заряженной частицы, по светопроводу достигают ФЭУ и через его стеклянную стенку попадают на фотокатод. ФЭУ представляет собой баллон, внутри которого в вакууме располагается фотокатод и система последовательных динодов, находящихся под положительным увеличивающемся от динода к диноду электрическим потенциалом. В результате фотоэффекта из фотокатода вылетают электроны, которые затем, ускоряясь в электрическом полем, направляются на систему динодов, где за счет вторичной (ударной) электронной эмиссии образуют нарастающую от динода к диноду электронную лавину, поступающую на анод. Обычно коэффициент усиления ФЭУ (число электронов, достигших анода при выбивании из фотокатода одного электрона) составляет 105-106, но может достигать и 109, что позволяет получить на выходе ФЭУ легко регистрируемый электрический импульс. Временное разрешение ФЭУ составляет Ю-8 - 10~9 с. Энергетическое разрешение сцинтилляционных детекторов ДЕ/Е обычно не лучше нескольких процентов. Временное разрешение определяется главным образом длительностью световой вспышки (временем высвечивания люминофора) и меняется в пределах 10~6 - 10~9 с. Большие объёмы сцинтилляторов позволяют создавать детекторы очень высокой эффективности, для регистрации частиц с малым сечением взаимодействия с веществом .
лавины Черенковский детектор Принцип работы этого детектора основан на регистрации излучения, открытого П.А. Черенковым в 1934 г. и возникающего при движении заряженной частицы в прозрачной среде со скоростью v большей скорости света и в этой среде. Поскольку и = с/п , где с - скорость света в вакууме, an- показатель преломления среды, то условие возникновения черенковского излучения имеет вид v > с/п . Черенковское свечение является когерентным излучением диполей, образующихся в результате поляризации среды пролетающей заряженной частицей, и возникает при возвращении этих диполей (поляризованных атомов) в исходное неполяризо- ванное состояние. Если частица двигается медленно, то диполи успевают поворачиваться в её направлении. Поляризация среды при этом симметрична относительно координаты частицы. И излучения отдельных диполей при возвращении в исходное состояние гасят друг друга. При движении частицы со "сверхсветовой" скоростью за счёт запаздывающей реакции диполей они преимущественно ориентируются в направлении движения частицы. Итоговая поляризация оказывается несимметричной относительно местоположения частицы и излучение диполей нескомпенсиро- ванным. Фотоны черенковского излучения испускаются под углом © к направлению движения частицы, причем величина этого угла определяется соотношением cos 0 = l/|3n где Р = v/c. Это соотношение легко понять на основе принципа Гюйгенса. Геометрия черенковского излучения. Угол 0 = 90° - а
Действительно, огибающая световых волн для частицы, двигающейся со скоростью v > и, представляет собой конус, вершина которого совпадает с положением частицы в данный момент (точка Р' на рисунке), а нормали m к образующим конуса показывают направление распространения черенковского света. На рис. показано, как частица, проходившая в момент времени t через точку Р, породила сферическую электромагнитную волну, которая за время т распространилась от точки Р на расстояние R = и т = ст/n. За то же время частица, двигающаяся со скоростью v > и прошла путь vt > R и оказалась в точке Р'. Волна от точки Р' ещё не успела распространиться в веществе. Конус АР'А граница области, занятой черенковской электромагнитной волной (её фронт) к моменту t + т. Угол 0 это угол между перпендикуляром, опущенным из точки Р на образующую конуса АР', и линией движения частицы (прямой РР'). Очевидно, косинус этого угла равен отношению длин отрезков R и РР', т.е. cos 0 = u/v = l/(3n. Энергия частицы, конвертируемая в черенковское излучение, мала по сравнению с её ионизационными потерями. Число фотонов, излучаемых на 1 см пути, в зависимости от среды (радиатора) колеблется от нескольких единиц до нескольких сот. Это излучение можно наблюдать визуально и регистрировать с помощью фотоплёнки или ФЭУ. На цветной фотоплёнке, расположенной перпендикулярно направлению движения частицы, излучение, выходящее из радиатора, имеет вид кольца сине-фиолетового цвета. Зависимость угла излучения 0 от (3 позволяет, определяя этот угол, найти скорость и энергию частицы. С помощью черенковского детектора можно регистрировать частицы с энергиями вплоть до 100 ГэВ. Черенковский счетчик позволяет эффективно выделять высокоэнергичные релятивистские частицы на уровне большого фона малоэнергичных частиц. Черенковский детектор состоит из радиатора (он может быть твёрдым, жидким или газообразным), оптической системы, обеспечивающей сбор и "доставку" че- ренковских фотонов к фотокатоду ФЭУ (светопровода) и самого ФЭУ (или нескольких ФЭУ). Разрешающее время черенковских счетчиков не превосходит 10~9 с. Устройство черенковского детектора: а - регистрируемая частица, 1 - радиатор, 2 - светопровод, 3 - ФЭУ 1 й -з
Детектор переходного излучения Этот детектор регистрирует заряженные частицы большой энергии по, так называемому, переходному излучению, испускаемому ими при пересечении (переходе) границы раздела сред с различными диэлектрическими проницаемостями (т. е. здесь излучает сама частица, а не среда). Интенсивность переходного излучения пропорциональна квадрату заряда частицы и (при больших энергиях) её релятивистскому фактору у = [1 - (v/c)2]~1/2, т.е. интенсивность переходного излучения высокоэнергичной частицы пропорциональна её энергии Е = тс2у • Основная часть переходного излучения расположена в рентгеновском диапазоне частот. Излучение сосредоточено внутри конуса с углом 0 = 1/ у относительно направления движения частицы. Эти свойства переходного излучения позволяют использовать его для определения массы и заряда частиц при очень больших энергиях (>100 ГэВ), когда другие методы неприменимы или недостаточно эффективны. При одной и той же энергии легкие частицы, у которых релятивистский фактор велик, производят гораздо более интенсивное переходное излучение, чем тяжелые, имеющие относительно малый релятивистский фактор. Большая разница в массах позволяет, например, различать электроны от пионов в диапазоне энергий от 0.5 ГэВ до 200 ГэВ. Так как вероятность испускания фотона переходного излучения при однократном пересечении границы сред мала («1/100) , то используют слоистые или пористые радиаторы с низким атомным номером и большим числом границ раздела (до нескольких сот) . Для регистрации переходного излучения чаще всего используют пропорциональные и дрейфовые камеры, а также сцинтилляционные и полупроводниковые детекторы. Идентификация частиц основана на различии в ионизации, которую производят, например, в пропорциональной камере первичный адрон и суммарной ионизацией производимой переходным излучением и первичным электроном. Калориметры Калориметры предназначены главным образом для измерения полной энергии высокоэнергичных (в том числе и нейтральных) частиц. Детекторы с газовой и жидкой рабочей средой не удобны для этой цели, так как имеют низкую плотность, компенсация которой требует слишком больших объёмов. Однородные твёрдотельные детекторы (сцинтилляторы, полупроводники и др.) также невозможно изготовить таких размеров, чтобы обеспечить полное поглощение энергии релятивистских и слабоионизующих частиц. Проблема решается использованием "сэндвичей", состоящих из чередующихся слоев поглощающих и детектирующих сред. В качестве поглотителей могут быть взяты такие плотные и сильно поглощающие материалы как железо и свинец. В качестве детекторов - твёрдые сцинтилляторы или свинцовые стёкла, эффективно генерирующие черенковское излучение. Частица, попадая в такой твёрдотельный сэндвич, создаёт быстро размножающийся по мере продвижения вглубь каскад (ливень) вторичных частиц. Энергия первичной частицы трансформируется в энергии частиц каскада, а также в возбуждение и ионизацию среды. Если обеспечить размеры калориметра достаточные для остановки и поглощения всех вторичных частиц, то задача будет решена сбором и суммированием всех сигналов с детектирующих слоев. Калориметры делятся на два класса - электромагнитные и адронные.
Электромагнитные калориметры служат для измерения энергии электронов, позитронов и фотонов с энергией больше 100 МэВ (они пригодны и для регистрации мюонов). Каскад вторичных частиц развивается за счёт генерации тормозного излучения и рождения электрон-позитронных пар. Толщина электромагнитного калориметра - десятки сантиметров. В адронных калориметрах первичный адрон производит главным образом вторичные адроны в реакциях неупругого взаимодействия. Адронные ливни имеют большие размеры, чем электромагнитные (соответственно толщина адронного калориметра может достигать нескольких метров), и подвержены значительно большим флуктуа- циям в числе и типе вторичных частиц. Кроме того, лишь небольшая доля энергии первичного адрона остаётся в детектирующем материале калориметра. В этой связи энергетическое разрешение адронных калориметров в десятки раз хуже электромагнитных. Энергетическое разрешение калориметров ДЕ/Е пропорционально Е~1/2, т. е. улучшается с ростом энергии. При энергии частицы 100 ГэВ оно составляет доли процента для электромагнитного калориметра и проценты для адронного. Временное разрешение калориметра определяется "быстродействием" его детектирующей среды. Углеродная мишень-* Детекторы Первичная частица Место взаимодействия Вторичные{ частицы Свинцовый '"поглотитель Один из видов калориметра - устройства, позволяющего регистрировать космические лучи высокой энергии. Прибор состоит из углеродной мишени, в которой происходит генерация вторичных частиц - нейтральных пионов, которые, распадаясь, формируют поток фотонов . Они регистрируются слоями детекторов, расположенных между поглотителями и свинца под мишенью. Измеряя количество вторичных частиц, можно определить энергию первичной. Чем больше слоев детекторов , тем точнее измеряемая энергия. Детекторные комплексы физики высоких энергий Детекторы, используемые в физике высоких энергий для регистрации частиц, состоят, как правило, из нескольких структур, входящих в состав единого регистрирующего комплекса. Каждая структура рассчитана для регистрации частиц с
определенными характеристиками. Отдельные структуры детектора расположены так, чтобы различного типа частицы, последовательно проходя через них, оставляли определённую информацию о прошедшей через них частице. На основе этой информации затем восстанавливаются такие характеристики частицы как её тип, энергия, импульс, характеристики распада. Принципы организации такого комплексного детектора иллюстрируются рис. Частицы рождаются в самой левой части рисунка в результате взаимодействия либо сталкивающихся пучков коллайдера, либо одного пучка ускоренных частиц с неподвижной мишенью. Рожденные частицы удаляются от точки своего появления, последовательно проходя различные структуры детектора. Заряженные частицы, такие как протоны, пионы и каоны, детектируются трековым детектором (он расположен ближе всего к точке реакции) и далее - электромагнитным и адронным калориметрами. Электроны детектируются трековым детектором и электромагнитным калориметром. Нейтральные частицы, такие как нейтроны и фотоны, не детектируются в трековом детекторе. Фотоны детектируются электромагнитным калориметром, а нейтроны идентифицируются по энергии, выделяемой в адронном калориметре. Фотоны Мюоны К , я- р п Трековый детектор Электромагнитный калориметр Адронный калориметр Мюонный детектор Внутренние области детектора Внешние области детектора Так как мюоны имеют максимальный пробег в веществе детектора из всех регистрируемых частиц, для их детектирования обычно используют внешние участки детектора - мюонный детектор. Многослойная структура детектора позволяет восстановить траекторию частицы и определить точку её образования с точностью несколько микрон. Таким образом, каждый тип частиц имеет свою собственную "подпись" в детекторе. Например, если частица обнаруживается только в электромагнитном калориметре то, скорее всего, это фотон. Мюон оставляет информацию во всех структурах детектора . Для примера показан детектор ATLAS, который создается в настоящее время для
регистрации продуктов рр-столкновений коллайдера LHC. Пучки протонов влетают в детектор с диаметрально противоположных направлений и двигаются вдоль его оси, сталкиваясь в центре. Область соударения пучков окружена внутренним детектором (Inner Detector) . Его диаметр составляет 2 м, а длина 6.5 м. Он помещен в сверхпроводящий соленоид, который обеспечивает внутри детектора магнитное поле 2 Тл. В магнитном поле треки частиц искривляются в зависимости от знака заряда частицы и ее импульса. Задача детектора - определение точки соударения протонов и траекторий вторичных частиц, которые образуются в результате соударения. Для этого применяются два типа детектирующих устройств: кремниевые микрострипы (они заполняют самую центральную часть внутреннего детектора и обеспечивают точность измерения координаты около 0.01 мм), и детектор переходного излучения (более удаленная часть внутреннего детектора), состоящий из тонких газонаполненных дрейфовых трубок диаметром 4 мм, между которыми находится вещество радиатора. Детекторы выполнены так, чтобы частицы пересекали их преимущественно перпендикулярно к плоскости детектора или оси трубки. Чтобы выдержать радиационные нагрузки, кремниевые детекторы должны работать при температуре 0° С. Поэтому, эта часть трековой системы помещена в крио- стат. Траектория каждой частицы большой энергии должна иметь 6 прецизионно измеренных точек. Для этого в установке ATLAS используется 12 тысяч кремниевых детекторов. Длина дрейфовых трубок детектора переходного излучения достигает 1.6 м. Точность определения координаты частицы в них составляет около 0.15 мм, но зато число точек измерения на один трек - 36. Кроме того, дрейфовые трубки регистрируют переходное рентгеновское излучение и, таким образом, обеспечивают идентификацию электронов. Всего в детекторе используется около 400 тысяч дрейфовых трубок. Такое большое количество трубок необходимо для того, чтобы обеспечить 4п-геометрию установки, и требованием эффективности восстановления траекторий частиц.
Внутренний трековый детектор заключен в оболочку калориметров. Калориметрия играет важную роль в установке ATLAS. Она обеспечивает прецизионное измерение энергии электронов, фотонов, "струй" адронов, возникающих при адронизации кварков и "недостающей" энергии, уносимой нейтрино или другими нейтральными слабовзаимодействующими частицами, например, гипотетическими суперсимметричными партнерами уже известных частиц. Калориметры состоят из нескольких крупных модулей, предназначенных для регистрации адронов в удаленной части детектора и для регистрации электромагнитного излучения в более центральной его области. Модули электромагнитного калориметра и торцевых адронных калориметров в качестве вещества поглотителя используют жидкий аргон, что обеспечивает необходимое быстродействие, высокое разрешение и высокую радиационную стойкость детектора. Адронный калориметр в более приближенной к центру части собран из железных пластин, прослоенных сцинтилляторами. Это более дешевая и достаточно надежная конструкция по сравнению с жидкоаргонными калориметрами. Мюонная система ATLAS расположена за калориметрами, в которых поглощаются все электроны, фотоны и адроны. Мюоны имеют высокую проникающую способность и в калориметрах поглощаются очень мало. Поэтому практически все зарегистрированные мюонной системой заряженные частицы являются мюонами. Основным типом детекторов в мюонной системе являются дрейфовые трубки диаметром 3 см. Результаты измерений, полученные с помощью мюонной системы (внешней трековой системы), "сшиваются" с данными внутреннего детектора для полной идентификации частиц. ] Поперечное сечение детектора ATLAS: 1 - вакуумная труба, в которой происходит ускорение частиц; 2 - трековый детектор; 3 - со- леноидальный магнит; 4 - электромагнитный калориметр; 5 - адронный калориметр; 6 - мюонный детектор Установка ATLAS будет размещена под землей на глубине 100 м. Соударения протонных пучков (банчей) будут происходить каждые 25 наносекунд, т. е. с частотой 40 МГц. При планируемой на первом этапе светимости ускорителя 1033 см~2сек-1 при каждом столкновении пучков будет происходить в среднем 2-3 протонных соударения. При светимости 1034 см~2сек-1 при каждом столкновении пучков будет происходить уже 25 протонных соударений.
По мере увеличения энергии сталкивающихся пучков детектирование продуктов столкновения становится все более сложной задачей. Детектор ATLAS будет выдавать огромный объём информации. LHC будет создавать в центре детектора почти 109 протон-протонных столкновений в секунду (как уже отмечалось, протонные банчи будут сталкиваться каждые 25 наносекунд) . Такому числу рр-столкновений отвечает объем информации, превышающий 40 миллилонов мегабайт. Однако лишь несколько событий, возникших в результате этого огромного числа столкновений, будут представлять интерес для исследователей, стремящихся к новым открытиям. Для того чтобы выбрать потенциально интересные события (по оценкам их должно быть меньше 100 в секунду), будет использована специальная многоуровневая компьютерная система. Выбранные события подвергнутся особо тщательному off-line анализу. Гигантский объём информации, поступающий с детектора ATLAS (примерно 106 гигабайт в год) , будет делиться среди примерно 2000 физиков из 34 стран и анализироваться ими. Вычислительные ресурсы, необходимые для такого анализа, эквивалентны более чем 10 000 PC Pentium III с частотой 500 МГц. Для успешной обработки данных с детектора ATLAS будут использованы самые последние достижения компьютерных технологий и операционных систем. Пока все.
Литпортал АНАЛИТИК Святослав Логинов В то утро жители города Кобурга были развлечены скандальным зрелищем: всюду прославленный профессор истории и поэзии, заслуженный доктор медицины, почтенный директор гимназии Андеас Либавиус бежал по улице. К тому же, к вящему смущению обывателей, на докторе вместо подобающей ему по годам и званию мантии был надет старый во многих местах прожженный камзол, а в руках он сжимал огромнейшие, черные от копоти щипцы. Доктор гнался за обидчиком. Несомненно, его противник, молодой и более легкий на ногу, сумел бы спастись от разъяренного профессора, если бы не споткнулся и не рухнул прямо в уличную грязь.
-- Значит, мы боимся замарать ручки и огорчить наш благородный нос? -- зловеще проговорил подоспевший Либавиус и, ухватив своими страшными щипцами беспомощного юнца за шею, принялся окунать его головой в лужу, сопровождая каждое погружение кратким наставлением: -- Запомни, сопляк, царских путей в геометрию нет, так сказал Эвклид... Добродетель и порок, согласно Аристотелю, указывают на различия в движении или деятельности, понял, лентяй? Ведь это о тебе писал Гебер: "Кто увлекается воображением, тщеславием и следующими за ними пороками, так же неспособен заниматься алхимией, как слепой или безрукий". А поскольку, по мнению Разеса "начало нашего делания есть очищение", то ты, как часть нечистая, можешь оставаться здесь и жрать конский навоз, раз тебе не по нраву трудиться в лаборатории ! С этими словами Либавиус отпустил провинившегося школяра, отряхнул полы заляпанного камзола, поправил сбившееся набок плоеное жабо и, тяжело дыша, отправился в обратный путь. Подойдя к дверям лаборатории, располагавшейся в бывшем тюремном флигеле, Либавиус привычно задержал дыхание, и лишь потом шагнул через порог и окинул помещение строгим проверяющим взглядом. Как все здесь непохоже на ту идеальную лабораторию, что сам Либавиус придумал и описал еще пятнадцать лет назад! Настоящая алхимическая мастерская должна иметь отдельный зал для печей и перегонок, профессорский кабинет, где бы хранились книги и рукописи; а здесь не оборудованы даже вытяжные трубы, и дым, пугая мирных жителей, выходит прямо в окна. Все работы проводятся в одном обширном зале среди печей, ванн и столов, заваленных частями приборов: взрезанных аламбиков, реторт, паяльных трубок, бурбарбутов, кубов с треснувшим шлемом, щипцов, ножей и прочего, без чего не может работать химик. Только винный погреб при лаборатории был. Там в сосудах из антимония настаивалось рвотное вино, и в больших бочках бродили смеси, предназначенные для мацерации . Ученики, все кроме только что изгнанного, ожидали учителя. Либавиус оглядел повернувшиеся в его сторону лица и медленно, подчеркивая каждую фразу, начал: -- Только что я исторг паршивую овцу из стада жаждущих истины. Причин для того было три: леность рук, скудость ума и непомерное тщеславие. Сегодня этот мерзавец отказался перегонять мочу, объявив, что это несовместимо с его дворянским именем. А ведь сам Альберт Великий не гнушался таким занятием, хотя носил титул графа Боллштедтского. Я спрошу: зачем негодяй пришел к нам? Может, за истиной и познанием сути вещей? Нет! Ему хотелось золота! Безумец надеялся, что выварив горшок ртути, он получит кусок золота. Но Василий Валентин учит, что ртуть не может быть семенем металлов, поскольку она сама металл. Правда, говорят, что многие адепты достигли успеха в столь трудном деле. Среди них называют Гебера, Альберта Великого, Луллия, прозванного Яснейшим, а в наши дни - славного Парацельса, получившего имя Парацельс-златодел. И вся же я предостерегаю вас от этого пути. Ведь Парацельс умер в большой нищете, и я склонен полагать, что его успехи в хризопее рождены непомерным бахвальством - единственным недостатком доблестного химика. Потому-то нам надо стремиться не к ложным призракам, а к истинному знанию...
Либавиус внезапно остановился и резко спросил: -- Что есть алхимия? -- Алхимия есть искусство извлекать совершенные сущности и чистые эссенции из смешанных тел, -- хором ответили слушатели. -- А химия? -- Химия есть доступная исполнению часть алхимии, собственноручно алхимиками совершаемая. Разумеется, четверо школяров наизусть знали эти определения, данные Либа- виусом в его знаменитой "Алхимии" - первой со времен баснословных книг, посвященной герметическому искусству, и представляющей не сборник рецептов и поучений, а ясно и толково написанный учебник. Обычно, услышав знакомые цитаты, профессор гордо выпрямлялся, проводил согнутым пальцем по щегольским усикам и прекращал экзамен. Но сегодня он остался недоволен: -- Как следует понимать эти дефиниции? Кто может объяснить? Молчите?.. Ну, так откройте уши и слушайте, быть может, тогда в ваших лошадиных головах появится хоть одна здравая мысль. Итак: можно, основываясь на том или ином древнем авторитете, верить или не верить в трансмутацию, медикамент, квинтэссенцию и иные прекрасные вещи. Я сорок лет отдал искусству Луллия, но признаюсь, что не умею прокаливать принципы и сгущать идеи. То же, что может быть сделано, относится к химии, и потому мы должны быть химиками, если не хотим прослыть безумцами. Нас могут спросить: но зачем тогда вообще отделять чистое от нечистого? Ответ даст наш добрый учитель Парацельс: "С целью применения в медицине". И еще: "Воистину, я ятрохимик - химик-врачеватель, ибо я знаю и медицину и химию". Врач, не знающий химии, подобен слепцу, но химик, пренебрегающий медициной, похож на тех африканских чудовищ, что, по словам путешественников, состоят из одних только глаз и потому абсолютно нежизненны. Достойно философа искать философский камень, но не менее достойно, как то сделал я, найти камень рвотный и спасти им многих. Я научил людей травить крыс белым мышьяком, а что, при всей их учености, создали Фома, Дуне Скотт и многие иные прославленные философы? Либавиус умолк, подошел к окну, глянул на поднявшееся над островерхими крышами солнце и сказал: -- Мне пора в больницу, а вы тем временем закончите перегонку, брошенную бежавшим мерзавцем, и, кроме того, подготовьте к моему приходу образцы различным металлов: железа, свинца, меди, олова и сурьмы. А если сумеете найти, то добавьте к ним тот новый металл, что назван цинком. И не забудьте поразмышлять над тем, что я вам рассказал сегодня. Андеас Либавиус был очень занятым человеком. Он инспектировал казенные мастерские, был смотрителем училищ и директором городской гимназии. Когда-то, еще в бытность в Ротенбурге, он служил главным городским врачом, да и теперь, перебравшись в Кобург, не оставлял медицины, хотя городские власти ничего не платили ему. Однако, Либавиус не мог бросить врачевания, без больных вся его деятельность теряла смысл, ведь он был ятрохимиком.
Главным же врачом городской больницы был Каспар Эйеглаус - ученик Фомы Эраста и ярый враг ятрохимии. В больнице лечили по старинке - сиропами, мазями и кровопусканиями. И только те больные, которых вел Либавиус, получали лекарства, вышедшие из химической лаборатории. Впрочем, дозировал их Либавиус осторожно , памятуя, что и ртуть, и мышьяк, и антимоний - суть сильные яды. Кроме того, в госпитале Либавиус проводил еще одну серию опытов, которым приписывал особое значение. Еще вчера он отобрал четверых больных, истощенных до крайней степени, явно доживающих свои последние дни, и через тонкую серебряную трубку влил им в вены кровь здоровых сильных людей. Один из больных не выдержал чужой крови и через час скончался. Еще одному -- чахоточному юноше, вскоре снова стало хуже, зато двое других пошли на поправку. Главное же, никого не тронула болезнь святого Антония и, судя по всему, это произошло из-за того, что он вместо обычной полой тростинки воспользовался серебряной иглой. Либавиус ожидал подобного результата. Будучи алхимиком, он прекрасно понимал, что совершенное серебро не станет портить кровь, в то время как из тростинки, как бы хорошо она ни была высушена, в кровь обязательно попадут гнилостные вещества. Многим казалось странным, что Либавиус занимается проблемой переливания крови. У всех на памяти была злая его фраза: "При переливании крови, от барана человеку, всегда присутствует три барана: тот, от которого переливают, тот, которому переливают и тот, который переливает". Он действительно много ругал своих предшественников за то, что они не принимали во внимание различие крови у разных людей, и тем более у человека и четвероногой твари. В самом деле, у одного кровь жирна и густа, у другого подобна воде; люди вспыльчивые носят горячую кровь, которая может повредить при лихорадке. Либавиус всегда старался подбирать людей парами, по сложению и темпераменту, чтобы вливаемая кровь как можно больше походила на свою собственную. Правда, и у него часть больных умирала немедленно после переливания, но Либавиус верил, что найдет причину неприятия чужой крови, упорно продолжал опыты, и немало человек было спасено им в самый казалось последний миг. Хотя Эйнглаус и враждовал с Либавиусом, стараясь не допускать его к больным, но в городской больнице, куда попадают одни только бедняки, бывать не любил, и потому позволял сопернику брать столько больных, сколько тот считал нужным. Две палаты Либавиуса, вмещавшие каждая по сто человек, вечно были переполнены, и осмотр занимал много времени. Кроме общепринятых микстур и пластырей Либавиус назначал еще многие вещества, за некоторыми из которых приходилось посылать в лабораторию. Боль в суставах утихала от белой ртути, против опухолей помогала сулема, от кровавого поноса - сера, а чахотку следовало лечить ржаным хлебом, размоченным в вине. Правда, не все лекарства по карману беднякам. Питьевое золото стоит немало, так же как и толченый жемчуг, помогающий от болей в желудке. После больницы Либавиус Зашел к книготорговцу, у которого купил давно ожидаемую им книгу. С томиком в руках Либавиус поспешил в лабораторию. На этот раз тюремный флигель встретил его таким тяжелым запахом, что даже видавший виды химик невольно шатнулся назад. В полутемной лаборатории оста-
вался всего один ученик по имени Петр Глезер. Перед ним на слабом огне стояла ванночка Марии-еврейки, и на ней, в большом аламбике томилась прозрачная жидкость. На длинное горло аламбика был надет плотно примазанный шлем, из носика которого размеренно капал в приемник распространяющий удушливый запах, дистиллят. Притерпевшийся ко всему Глезер, придвинувшись ближе к масляному светильнику, подставленному под ванночку, читал "Алхимический свод1" Альберта. -- Где остальные? -- спросил Либавиус. -- Они пошли в кабачок, а я остался присмотреть за перегонкой, -- ответил Петр, оторвавшись от книги. Затем он встал и выложил на стол кусок железной проволоки, медную бляшку, маленькие слитки олова и свинца, блестящий осколок металлической сурьмы. -- Цинка нет, -- виновато сказал он, -- но я нашел туцию, из которой его можно добыть. -- Не нужно, -- остановил ученика Либавиус. Он порылся в поясной сумке и добавил к коллекции серебряный талер и тяжелый золотой дублон, какими наводнила христианский мир дорвавшаяся до американского золота Испания. -- Петр! -- начал Либавиус. -- Ты единственный из всех, кого я знаю, можешь стать истинным адептом и, значит, достоин присутствовать при том, что произойдет сейчас. Скажи, в чем бы ты мог растворить все эти вещи? -- Все, кроме золота можно распустить в крепкой водке или красной воде философов, -- ответил Глезер, -- для золота же потребна царская водка... -- Глезер замялся, а потом решительно продолжил: -- И еще я осмелился бы предложить смесь серного олеума, приготовлением которого мы обязаны вам, с крепкой водкой. Полученная таким образом вода, растворяет или изменяет все вещества, это поистине алкагест! -- Универсальный растворитель -- алкагест, -- Либавиус усмехнулся, -- ежели это диво и может быть получено, то немедленно разъест сосуд, и прольется на пол. Затем оно разъест пол, и постепенно будет стекать вся ниже, пока не достигнет Тартара. Думаю, что если подобная вещь где и существует, то только в аду, там в нем растворяют неудачливых алхимиков. Но мы опять отвлеклись. Возьми эти предметы и раствори в чем найдешь нужным. Запомни, что в каком сосуде , но мне того не говори. Я буду ждать тебя на улице. Либавиус вышел на свежий воздух, и с книгой в руках устроился на каменной тумбе неподалеку от зарешеченного окна лаборатории. Когда-то во флигеле помещалась тюремная охрана, и решеток на окнах не было. Решетки пришлось поставить, так как по ночам в окна частенько лезли всяческие болваны, мечтающие найти кусок алхимического золота, взглянуть на гомункулуса, а то и встретиться с дьяволом, который несомненно должен жить в таком месте, и продать ему свою бессмертную душу за сотню фальшивых талеров. Но больше всего лезли за драгоценными камнями, от которых, по слухам, у Либавиуса ломились сундуки. Смотрите предыдущий номер «Домашней лаборатории».
Никаких камней у Либавиуса, разумеется, не было, хотя разговоры о них основание под собой имели. Еще в 1588 году Либавиус был приглашен профессором истории и поэзии в университет города Иены. Там жадный до химии поэт изучил стекольное производство и при этом заметил, что извести многих металлов окрашивают стекло в разные цвета. Сплавлением лучшего хрустального стекла с известью золота Либавиусу удалось получить образцы столь великолепного красного цвета, что опытные ювелиры могли продавать стекла Либавиуса за подлинные рубины. Разумеется, истории об этом прибыли в Кобург гораздо раньше самого Либавиуса. Едва Либавиус увлекся чтением, как ему помешали. К флигелю подошел старик, одетый в столь невообразимые лохмотья, что всякий, не колеблясь, определил бы его профессию. Нищий тащил на веревке худую облезлую собаку. -- Господин доктор, купите пса! -- обратился он к Либавиусу. -- Зачем? -- Либавиус с трудом оторвался от книги. — Это уж вам лучше знать, зачем вы их покупаете, -- ответил нищий. — Но у меня товар самый лучший. Посмотрите, какой он злой, -- старик несколько раз дернул верявку, пытаясь заставить собаку зарычать. -- К тому же, кобель черный. Ежели это и не сам дьявол, то, во всяком случае, в близком с ним родстве. Из такого выйдет какое угодно сильное зелье, поверьте старому человеку... -- Я ничего не покупаю и не занимаюсь черной магией, -- сказал Либавиус, -- так что, если не хочешь познакомиться с духовным судом, убирайся отсюда вместе с твоим бесом. -- Как не занимаетесь?! -- возмутился нищий. -- Да у вас и сейчас на заднем дворе сидит не меньше десятка кобелей! -- Стра-ажа!.. -- вполголоса позвал Либавиус, и бродяга, испустив замысловатое ругательство, исчез. На заднем дворе флигеля действительно сидело на цепи несколько собак. Либавиус, несмотря на полемику с давно умершим Парацельсом, разделял его главное убеждение, что всякое тело, любой яд, может и должен быть целебным лекарством. Тайной оставалось лишь, как применять это тело. В парацельсовы сигнатуры Либавиус решительно не верил, а испытывать как иные, всякое новое вещество на больных, не позволяла совесть врача. И без того слишком многие не видят разницы между химиком и отравителем. И тогда, словно опровергая собственные слова о трех баранах, Андреас Либавиус первым начал испытывать новые земли, кислоты и соли на собаках. Такие данные не могли быть окончательными, но строгий медик считал их необходимыми. Когда перегонкой сулемы с истертым оловом ему удалось получить предмет своей тайной гордости - дымящий спирт Либавия, то он долго не мог найти применения этой замечательной эссенции. И если бы не собаки, то признал бы дымящий спирт бесполезным. Но опыты на животных показали, что любая, сколь угодно застарелая язва, если выжечь ее этим спиртом, начинает быстро и легко рубцеваться. Значит, и баран может пригодиться медику.
Жаль, что свора во дворе еще больше убеждает горожан, что директор гимназии знается с нечистым. Либавиус вздохнул, пожал плечами и снова углубился в книгу. Ждать пришлось долго. Либавиус успел прочитать книгу, проголодался и замерз . Наконец, появился Глезер. -- Возьми понемногу жидкости из каждого сосуда, -- сказал ему Либавиус, -- и разбавляй чистой дождевой водой, пока не исчезнет присущая им окраска, так, чтобы растворы нельзя было отличить по внешнему виду. Через несколько минут Либавиус вошел в помещение. На столе его ждали поставленные в ряд семь одинаковых чаш с прозрачными растворами. -- Теперь, смотри! -- сказал Либавиус. Он отсоединил от аламбика колбу с дистиллятом и долил из нее во все семь чаш. Густое облако белого дыма поднялось над столом. Химики закашлялись. Когда клубы нашатыря рассеялись, стало видно, что в одной из чаш жидкость стала подобна молоку, в другой выпали бурые хлопья, три не изменили своего цвета, а в двух последних жидкость стала васильково-синей. -- Истинный кобальт! -- воскликнул Глезер, осторожно поднимая чашу с синим раствором. -- Цвет яркий и чистый, как эмали Палисси! -- Здесь была медь! -- уверенно сказал Либавиус. -- Там, где выпала темная земля, находилось железо, белая известь указывает свинец. А вот это, - Либавиус коснулся второго посиневшего образца, - вероятно, было золото. Как я и думал, мошенник книготорговец подсунул мне фальшивую монету. Синий цвет тому доказательство. Но ты видишь, он не слишком ярок, значит, меди в золоте было не так много. -- Вся правильно, -- признал ученик. -- И что же из этого следует? -- спросил Либавиус. -- Может быть, новая краска? -- Ты ничего не понял! -- закричал Либавиус. -- Слушай, я тебе объясню. Аристотель говорит, что существует два способа познания сути вещей: синтезис и анализис. Он же оставил нам "аналитику" - учение о доказательстве. К сожалению, это учение, как и все прочие мысли философа, неприменимо к практике. Вспомни, что сказал мудрейший из арабов - Гебер: "Надо признать, как незыблемый принцип, что предположение, не подтвержденное опытом, есть ни что иное, как простое утверждение, которое может быть верным или ложным". Ты видишь, требуется доказательство, анализ! Алхимия же, столь долго бывшая в плену у магии, до сих пор пользовалась одним лишь синтезом, даже когда пыталась разложить свои тела. Приведу пример, бывший у тебя на глазах. Некогда мне удалось доказать, что сера в скрытом виде живет в купоросах. Для этого я, сжегши серу в селитре, получил серный олеум и, сравнив его с купоросным маслом Гебе- ра, увидел, что это одно и то же вещество, только купоросное масло менее чисто и крепко. Эту работу можно было бы назвать аналитической, но и она проводилась методом синтеза, ведь я получал вещества, а не прямые знаки природы.
Лишь сегодня мы можем твердо заявить, что аналитическая химия существует. Возьми перо, Петр и пиши. Либавиус встал и, расхаживая по комнате, начал диктовать: -- Если ты хочешь, сын мой, узнать, заключена ли в каком-либо теле скрытая медь, то возьми этого тела, сколько сочтешь нужным, и раствори приличным случаю образом. К раствору добавляй той чудесной воды, что получена Арнольдом из Виллановы путям многократной перегонки человеческой мочи. Добавляй до тех пор, пока сильное зловоние не укажет тебе конца работы. Если твоя жидкость стала мутна, процеди ее через шелковый чулок. Ты увидишь небесное сияние, тем более яркое, чем больше меди заключало тело. Конец, во славу господа. Либавиус просмотрел написанное. Лицо его побагровело. -- Что ты написал, болван? -- раздраженно спросил он. -- Ты всюду ставишь знак "Венера", а я говорил "медь", и значит, ты должен был писать "купрум". Знаком "Венера" одни обозначают медь, другие олово, а некоторые -- аурипиг- мент. Запомни, если ты хочешь, чтобы твои работы послужили потомкам, в них не должно быть разночтений. Одно неверно понятое слово в рецепте может стоить жизни больному. -- Учитель, -- робко спросил Глезер, -- сегодня вы показали мне способ увидеть скрытую медь. Но ведь такой же анализ можно найти и для золота!.. -- Несомненно, -- подтвердил Либавиус. -- И тогда, -- подхватил школяр, -- добавив этот драгоценный реактив в аламбик или на решетку керотакиса, мы можем заметить момент рождения совершенного металла, а по усилению окраски заключать: правильно ли мы ведем нагрев , и приводят ли наши операции к умножению золота... -- Петр! -- прервал ученика Либавиус. -- Еще раз заклинаю: оставь мысли о невозможном! Ты зря потратишь время, здоровье и деньги. Ты лучший мой ученик, Петр, и мне хотелось бы видеть тебя настоящим ятрохимиком. Поэт сказал: "Опытный врач драгоценнее многих других чело веков". Путь химии - это приготовление лекарств. Это наш путь! -- Хорошо, учитель, -- покорно согласился Пятр. Либавиус достал из поясной сумки купленный дням томик, положил его на стол. -- Прочти это, сказал он. -- Автор этой книги -- один англичанин. Он говорит здесь немало жестоких слов о нашем искусстве, но это жестокость хирурга. Клянусь Геркулесом, этот человек много сделает для науки, и, если он подписал книгу своим настоящим именем, то значит Англия второй раз дарит миру Бэкона. Особо обрати внимание, что пишет Бэкон о значении для науки эксперимента и о пригодности аристотелевой логики. -- Я прочту, -- сказал Глязер. За окном незаметно сгущался вечер. Либавиус начал собираться домой. Он надел широкий, подбитый мехом плащ, теплый берет с наушниками, попрощался с
учеником и вышел. Петр Глезер - бедный студент, не имел своего дома и жил при лаборатории. Ушел Либавиус недалеко. Дорогу ему преградила та самая лужа, в которой он утром купал зазнавшегося дворянина. Либавиус попытался обойти ее, но вспомнил , что забыл трость. Так иногда бывает: целый день бегаешь как мальчишка, без плаща и палки, а под вечер все семьдесят прожитых лет разом наваливаются на плечи. Либавиус повернул назад. Его осаждали невеселые мысли. Сорок лет он отдал науке, с великим трудом оторвался от мечты отыскать философский камень, сделал множество изящных открытий, а теперь не знает, будет ли из этого толк. Достаточно вспомнить Бернара Палисси, замечательного химика-практика. Палисси умер, не оставив учеников, и тайна его прекрасных глазурей и эмалей умерла вместе с ним. Потому-то Либавиус и старался записывать все свои наблюдения как можно подробнее и яснее. К тому же, быть может, Петр продолжит его дело, если его не увлечет химера златоделия. Окна флигеля светятся, неутомимый Петр сидит за книгами. Либавиус тихо открыл дверь, шагнул через порог. Петр сидел возле светильника, но вместо сочинения Френсиса Бэкона перед ним лежал огромнейший фолиант Луллия. Глезер читал вслух, нараспев произнося слова : -- Начинай работу при закате солнца, с запада подвигайся сквозь сумерки на север, измени воду в черную землю, поднимись через разные цвета к востоку, где показывается полная луна. Земля и вода превращены в воздух, мрак исчезает и является свет... -- Боже мой!.. -- простонал Либавиус, схватившись за голову. -- Несчастная химия, будешь ли ты когда-нибудь заниматься делом?
Химия Редактор раздела: В.Витер ТОПЛИВНЫЕ ЭЛЕМЕНТЫ: ПРОШЛОЕ, НАСТОЯЩЕЕ, БУДУЩЕЕ В.Н. Витер На сегодняшний день значительное распространение получили атомная и гидроэнергетика. Определенные успехи достигнуты в применении "нетрадиционных" видов энергии. В то же время основным источником производства электрической энергии остается процесс сжигания органического топлива. В глазах многих людей тепловые электростанции выглядят как памятники прошлому. Но они наше настоящее и ближайшее будущее. Виды используемого топлива могут существенно отличаться (уголь, природный газ, мазут, древесина и др.) . Достаточно разнообразно и аппаратурное оформление. А сам принцип получения электричества остается неизменным. Он состоит в поэтапном преобразовании между разными видами энергии: химическая энергия топлива, тепловая энергия пара (или газов), механическая, электрическая. В этой цепи происходят очень значительные (притом закономерные) потери, кроме того, сооружение соответствующих громоздких установок требует много ресурсов. Возникает вопрос: а нельзя ли осуществить прямое преобразование химической энергии в электрическую? Такие устройства уже давно известны и используются. Это гальванические элементы. Но гальванические элементы используют в качестве "топлива" дорогие и токсичные металлы (цинк, свинец, никель, кадмий и др.) . Кроме того, данные металлы однократно загружаются в элемент при его производстве. Пополнение запасов "топлива" не предусмотрено конструкцией. Поэтому
гальванические элементы нашли применение в основном как портативные источники питания. Представляет интерес прямое преобразование химической энергии в электрическую с использованием более приемлемых видов топлива: природного газа, угля, нефтепродуктов, водорода, метанола, спирта и др. Еще в 1839 г. английский физик и химик Вильям Гров открыл устройство, которое позднее назовут топливным элементом (ТЭ) . Принцип его работы довольно простой и фактически остался без изменений до сегодняшнего времени. Два пористых (например, платиновых) электрода погружены в электролит (раствор серной или фосфорной кислоты). Через один из них подается водород. При этом молекулы водорода диссоциируют на атомы, которые отдают свои электроны поверхности: Через поры второго электрода подается кислород. Молекула кислорода, принимая электроны, восстанавливается до воды: Если электроды соединить проводником, то между ними потечет ток. Для водородных ТЭ электролитом также может служить раствор щелочи или даже твердый материал. Кроме того, вместо водорода могут использоваться много других видов топлива. Данное открытие в значительной мере опередило свое время. Ведь тепловые машины, несмотря на свой низкий к.п.д. (не более 25% в средине 1920-х) производили достаточное количество дешевой энергии. В дальнейшем к.п.д. тепловых машин удалось поднять только до 40-50%. Более того, цикл Карно накладывает четкое ограничение на эту величину: Н2 = 2Н Н - е" = Н 02 +4Е" + 4Н+ = 2Н20 к.п.д. = 100%* (1-T2/Ti) где Ti, Т2 - максимальная и минимальная температуры рабочей среды, К.
Но органическое топливо стабильно дорожает, а его запасы постепенно истощаются. Это вынуждает искать альтернативу тепловым машинам с целью более рационального и экологически безопасного использования топливных ресурсов. ТЭ не являются тепловыми машинами, следовательно, их эффективность не подлежит ограничениям цикла Карно. Выражение для теоретически возможного к.п.д. ТЭ куда более интересно: к.п.д. =100%*(l-TAS/ЛН) где AS и ДН - соответственно изменение энтропии и энтальпии в результате химической реакции. В данном случае ДН>0, a AS может быть как положительной, так и отрицательной. Напомним, что энтропия, как правило, возрастает, когда в ходе реакции увеличивается количество газообразных продуктов (и наоборот). Если количество газообразных продуктов не изменяется, то энтропия остается почти постоянной. Нетрудно видеть, что при AS=0 теоретический к.п.д. = 100%. Примером может служить реакция окисления угля: С + 02 = С02 Еще Нернст подсчитал, что для данного процесса к.п.д. близок к 100%. А если бы для работы удалось использовать реакцию неполного окисления угля 2С + 02 = 2СО то теоретический к.п.д. такого элемента значительно бы превысил 100% (!). Ведь для этой реакции AS > 0. И никаких чудес тут нет. Данное устройство смогло бы преобразовывать в электричество не только химическую энергию угля, а и тепловую энергию окружающей среды. К сказанному можно добавить, что ТЭ не содержат движущихся частей, просты в изготовлении и обслуживании. Так обстоит дело в теории. На практике все значительно сложнее. Разработчики ТЭ сталкивались (и сталкиваются) с большим количеством трудностей самого разнообразного характера. В 1897 г. Жако сконструировал ТЭ, в котором происходило окисление воздухом угля при 400-500 °С. Электролитом служил расплав щелочи NaOH. Элемент имел довольно неплохие характеристики. Это позволило автору предложить его в качестве источника энергии для океанического лайнера. Но через несколько месяцев оказалось , что Жако сделал серьезную химическую ошибку. Углекислый газ, который выделялся при окислении углерода, реагировал со щелочью. При этом образовывалась сода, в результате электролит затвердевал, и работа элемента прекращалась. На этом попытки по созданию ТЭ на угле не закончились. Например, в качестве электролита был использован расплав соды. Несмотря на все усилия, приемлемый для практики прототип создать так и не удалось. Но это обстоятельство совсем не мешает отдельным энтузиастам и по сей день конструировать угольные ТЭ. В 1889 г. Монд и Лагнер сконструировали водородно-кислородный ТЭ, который давал довольно приемлемую плотность тока (0.2 А/см2) . В то же время данный элемент отличался нестабильностью: в процессе работы его характеристики могли резко ухудшиться, причем без видимых причин. Позднее было предложено ряд других оригинальных конструкций водородно-кислородного ТЭ, но все они отличались
недолговечностью и нестабильностью в работе. Ученые поняли, что решение задачи возможно, но на это уйдут многие годы. Инженер Френсис Бэкон внедрил ряд смелых идей по усовершенствованию водородного элемента. Он заменил дорогостоящие платиновые электроды на никелевые. Данное изменение потребовало поднятия температуры до нескольких сотен градусов, а соответственно, и высокого давления (во избежание закипания электролита) . Технически это было вполне реально, но у большинства коллег и потенциальных инвесторов такие идеи вызывали непонимание. Вволю натерпевшись отказов и насмешек, Ф. Бэкон смог продолжить свои работы в Кембриджском университете. Ему удалось создать ТЭ, который давал ток до 0.23 А/см2 на протяжении тысяч часов. А в 1959 г. Он сконструировал батарею ТЭ суммарной мощностью 6 кВт при к.п.д. 80%. Интерес к ТЭ резко усилился в связи с освоением космоса. Водородные ТЭ были выбраны в качестве источников электропитания американских кораблей "Дженеми". По массогабаритным показателям они были более предпочтительны, чем аккумуляторы или солнечные батареи. Усовершенствованные элементы Бэкона были использованы в кораблях "Апполо" при полетах на Луну. На исследование ТЭ были выделены большие материальные и человеческие ресурсы. Их конструкция постоянно совершенствовалась. В частности была реализована возможность применения твердых электролитов. Однако широкому использованию ТЭ в других областях препятствовал целый ряд факторов. Основным из них является низкая сила тока. Еще в 19 веке ученые осознали, что одним из ключевых моментов является материал и конструкция электродов. Именно тогда возникла идея использовать пористые электроды. Но выяснилось, что они очень нестабильны в работе. Ведь либо электролит вытеснял газ из пор либо наоборот. В любом случае поверхность электрода переставала работать и мощность элемента резко падала. Именно в этом и кроется причина неудачи конструкции Монда и Лагнера. Оригинальное решение данной проблемы реализовал Ф. Бекон. Он использовал бипористые электроды, т.е. такие, которые содержали большие и маленькие поры одновременно. Первые служили для подвода газа, а вторые были заполнены электролитом. В определенном смысле такая конструкция напоминает наши легкие. Благодаря применению бипористых электродов удалось поднять плотность тока от единиц до сотен мА/см2, а главное, была достигнута стабильность работы элемента. Очень перспективными казались электроды, которые одновременно содержали гидрофильные (уголь) и гидрофобные (каучук, парафин, битум) материалы. Первые образовывают поры, которые хорошо смачиваются электролитом. Вторые обладают водоотталкивающими свойствами. Их поры служат для подвода газа. Такой ТЭ создал П. Спиридонов в начале 1940-х. Первоначально он давал хорошую плотность тока, но со временем гидрофобные материалы теряли свои свойства, и плотность тока резко падала. Проблема была решена только с помощью тефлона. Благодаря своей уникальной химической стойкости этот полимер не теряет гидрофобных свойств даже при длительном контакте с электролитом. Несмотря на успехи по увеличению плотности тока, напряжение, которое дают ТЭ довольно низко, как правило, не более 1 В. Для получения приемлемой разности потенциалов ТЭ объединяют в батареи. Многие работы были посвящены именно водородным элементам. Но водород в качестве топлива имеет ряд недостатков. Он довольно дорог. Проблема рационального хранения и транспортировки водорода остается нерешенной. Данный газ мож-
но перевести в жидкое состояние только при очень низкой температуре. А при хранении в сжатом состоянии масса водорода мала по сравнению с массой баллона . Поэтому особо актуально стоит проблема использования других видов топлива. С этой целью были исследованы: монооксид углерода, гидразин, аммиак, тет- рагидроборат натрия, метанол, углеводороды и др. Изготовлено много конструкций ТЭ, работающих на гидразине. Их реальные характеристики оказались довольно неплохими, но они были значительно ниже ожидаемых. Гидразин дорог, токсичен и огнеопасен. Такие элементы требуют для своей работы дополнительного оборудования. С позиций теории довольно привлекательным выглядит использование в ТЭ аммиака. Однако на практике оказалось, что такие элементы обладают весьма посредственными характеристиками. Вероятная причина состоит в образовании на электродах пассивирующего поверхностного слоя нитридов. С практической точки зрения выглядит довольно целесообразным непосредственное использование в ТЭ углеводородного топлива. Но электрохимические процессы с участием углеводородов требуют высокой температуры, активных катализаторов и проходят не достаточно интенсивно. Определенные успехи по разработке таких элементов уже достигнуты, в тоже время они имеют целый ряд недостатков. Поэтому для эффективной работы ТЭ является необходимой промежуточная стадия конверсии углеводородов в более приемлемые виды топлив: Н2, СО, метанол. В случае высокотемпературных установок такая конверсия производится прямо в ТЭ. Ряд компаний начали выпуск установок средней мощности, потребляющих природный или биогаз. Данные ТЭ работают с использованием расплавленных солей или твердых электролитов (7,r02 + Y2O3) . Одним из наиболее перспективных видов топлива является метанол. С одной стороны, ТЭ на метаноле заметно менее эффективны водородных. Метанол токсичен. С другой стороны он является дешевым крупнотоннажным продуктом химической промышленности. Метанол легко хранить и транспортировать. В щелочных электролитах окисление метилового спирта происходит значительно более интенсивно, чем в кислотных. Но практическое значение имеют в основном последние (щелочь неустойчива к действию СО2 - продукта окисления метанола). В последнее время ведутся активные работы над созданием и усовершенствованием мета- нольных ТЭ для портативных электронных устройств, в частности - ноутбуков. В заключении следует остановиться на некоторых экономических и социальных аспектах. На сегодняшний день производство электроэнергии во всем мире достаточно централизовано. Мелкие и даже крупные потребители очень зависимы от больших энергетических компаний, которые диктуют им свои условия. Массовое использование ТЭ значительно уменьшит эту зависимость и поможет решить проблему перебоев с поставками электроэнергии. Обратим внимание, что переход на ТЭ невыгоден для нефтегазовых компаний (а также для стран-экспортеров нефти и газа). Причина проста: ТЭ потребляют топливо более рационально, чем тепловые машины. Кроме того, современные агрегаты активно используют принцип когенера- ции - одновременного производства электрической и тепловой энергии. Но не следует, однако забывать, что ТЭ все равно используют углеводороды или продукты их переработки. Существенной проблемой является использование для электродов платиновых металлов и серебра. Но уже намечены пути их значительной экономии и регенерации. Переход от ручной сборки к массовой автоматической должен резко уменьшить цену энергетических установок.
Таким образом, ТЭ прочно входят в нашу повседневную жизнь. В будущем следует ожидать их широкого и разнообразного применения: в быту, на транспорте, в промышленных предприятиях. ПОДВАЛ УГОЛЬНАЯ БАТАРЕЯ Уильям Жако (в сокращении) "Угольная батарея" Уильяма Жако (William Jacques), как заявлялось, имела КПД 82%; однако, его критики показали, что он не учел тепловую энергию печи и энергию, потребляемую воздушным насосом. В результате, реальный КПД был равен всего лишь 8%. ПРЯМОЕ ПОЛУЧЕНИЕ ЭЛЕКТРИЧЕСТВА ИЗ УГЛЯ Ко мне пришло почти как откровение, что если кислород воздуха можно было бы заставить соединяться с углем в таких обстоятельствах, при которых предотвращается производство тепла, и в то же время обеспечивается электропроводящий путь, энергия химической реакции обязательно превратится в электричество. При должных условиях, потенциальная энергия угля предпочтет превратиться в электричество , а не в тепло. Это "откровение" привело к экспериментам, в которых уголь погружался в жидкость , так, чтобы кислород воздуха не контактировал с углем непосредственно во избежание сгорания. Далее, выбиралась такая жидкость, чтобы когда воздух продувался сквозь нее по направлению к углю, кислород воздуха временно вступал в химическую связь с жидкостью и затем замещался последующими порциями кислорода, тем самым, будучи принуждаем к реакции с углем. Жидкости, которые позволяют атомам кислорода и электрическому току проходить сквозь себя, можно назвать "электролитическими проводниками". Таким образом, я считаю, что я открыл новый факт или принцип, ранее неизвестный естественным наукам - принцип, который, как я надеюсь, может быть так же полезен науке, как мое изобретение будет полезным на практике. Говоря научно, мое открытие состоит в том, что если кислород воздуха заставить соединяться с углем через промежуточный электролитический проводник, запасенная энергия угля может быть превращена не в тепло, а сразу в электричество. Грубо говоря, мое изобретение состоит в производстве электричества при соединении кислорода воздуха с углем под слоем подходящей жидкости. Изобретение представляет из себя процесс, а не машину. Процесс может выполняться очень простыми средствами. Ранняя форма аппарата состояла из платинового тигля формой и размером с чайную чашку, частично заполненную обычным едким кали, который поддерживался жидким с помощью газовой горелки. В КОН пла-
тиновой проволокой удерживался в утопленном состоянии кусок обычного кокса размером с арахис. Платиновой трубочкой, по типу соломинки, в гидроксид калия вдувался поток воздуха. Проволока, которой удерживался кокс, образовывала отрицательный полюс, а другая проволока, присоединенная к тиглю, образовывала положительный полюс генератора. Присоединив эти провода к маленькому электромотору, я обнаружил, что при продуве воздуха мотор начинал вращаться. Когда подача воздуха прекращалась, мотор останавливался. Из этого простейшего аппарата получался ток в несколько ампер. Электродвижущая сила была немногим более 1 В. О! 1 -•и Г о L Уголь С погружен в раствор (solution) едкого натра Е. Насос А прокачивает воздух через перфорированное сопло R, которое равномерно распределяет воздух по электролиту. Положительный полюс зафиксирован на железном приемнике I, содержащим раствор, а отрицательный полюс В - на угольном стержне, который поддерживается и изолируется от приемника хомутом S. Две трубы о и i служат для подачи и удаления раствора. Не может быть сомнения, что электрический ток возникал из-за химической реакции кислорода воздуха и кокса (углерода). Измерения показали, что кислород поглощался из воздуха, углерод расходовался и образовывался углекислый газ. Более того, электродвижущая сила почти точно соответствовала получаемой при сжигании углерода в кислороде с получением двуокиси углерода (1,04 В). Когда весь аппарат был расположен так, что все его части находились при одинаковой, максимальной температуре, получался максимальный ток и максимальная ЭДС, что доказывает получение тока не от термоэлектричества. Затем. Позднейшие эксперименты с гораздо большими аппаратами не только подтвердили эти результаты, но и показали, что при должных условиях получаемая электрическая энергия приблизительна равна потенциальной энергии израсходованного в сосуде углерода. Изобретение было сделано. Электричество из угля было получено. Будет ли это
работать в большем масштабе? Могут ли быть преодолены многие практические трудности? Платина дороже золота, поэтому должен быть использован какой-то другой металл. Была попытка использовать железо, но ток получался очень маленьким . Сосуды из меди, свинца, цинка, олова, никеля, магния разрушались. Золото и серебро давали хорошие результаты, но хуже, чем платина. Эксперименты повторялись снова и снова. Не было видно ни одной теоретической причины, почему железо не могло работать так же хорошо, как платина, и сосуды изготовлялись из железа всех видов. Наконец, причина была найдена. Большинство образцов железа имеют масляную поверхность. При нагреве масло превращается в уголь, так, что железный электрод начинает вести себя подобно угольному. Это привело к методу очищения поверхности железа. И затем соответственно очищенный железный сосуд так же хорош, как платиновый, но, конечно, гораздо дешевле. Сосуды теперь делались больше и больше, и теперь они достигают размеров бочки. Получаемый ток измеряется сотнями ампер. Предстояло также преодолеть множество других трудностей. Уголь, в том виде, в котором он поступает из забоев, не является хорошим проводником электричества. И хотя был сконструирован экспериментальный аппарат, в котором оказалось возможным потреблять обычный кокс, сбрасываемый лопатой на топочную решетку, лучше всего оказалось раздробить уголь, сформовать его в большие бруски удобного размера и спечь его, чтобы удалить содержащиеся газы и дать хорошую электропроводность. Скорость, с которой расходуется углерод, и, соответственно, сила электрического тока, получаемого ячейкой, сильно увеличивается, если тщательно насытить все части жидкости избытком кислорода. Наилучшим образом это достигается, если выполнить конец трубки подачи воздуха в виде распылителя, подобно тому, как это сделано в лейке, так, чтобы воздух впрыскивался в жидкость большим количеством тонких струй. Есть много видов жидкостей, которые могут быть использованы как электролитические проводники, но, к сожалению, наиболее подходящие становятся жидкими только при повышенных температурах. Поэтому, определенное количество угля или другого топливо должно сжигаться на решетке под сосудом для поддержания этой температуры. Однако, поскольку при этом нет существенного поглощения тепла, за исключением того, которое используется для подогрева поступающего воздуха и того, которое теряется излучением, можно ожидать, что в больших аппаратах, где большое количество сосудов заключено в теплоизолированную печь, потребление угля будет относительно очень маленьким. Даже в небольшом аппарате мощностью в две лошадиных силы, в котором не было предпринято особых мер для сохранения тепла, измерения показали, что только 1/3 фунта1 угля на каждый л. с. час2 электроэнергии сжигалась на решетке. Паровая машина с динамо-машиной эквивалентной мощности поглощала бы, как минимум, в 40 раз больше. Фунт приблизительно равен 454 г. 2 Лошадиная сила приблизительно равна 0,746 кВт.
Расплавленный КОН имеет много достоинств как электролитический проводник, но у него есть недостаток в том, что он поглощает некоторое количество двуокиси углерода, выделяемой углем или содержащейся в воздухе. Если используется КОН, рано или поздно он загрязняется и требует очистки, несмотря на то, что часть двуокиси углерода выносится током азота, и несмотря на то, что добавлением носителей двуокиси углерода можно выносить часть двуокиси углерода к поверхности для ее выделения. Выбирая электролитические проводники, не имеющие сродства к двуокиси углерода , нужда в частой очистке отпадает, поскольку, к счастью, потребление угля настолько более полное, чем при обычном сжигании, что при относительно чистом угле образуется только немного легко удаляемой золы. Удельная сила тока составляет около 3/4 ампера на квадратный дюйм3. Таким образом, кастрюля, содержащая 6 угольных стержней, каждый диаметром в 3 дюйма и восемнадцать дюймов длиной (удобный для производства и обращения размер), дает около 750 ампер, или немногим больше одной лошадиной силы электрической мощности. ЭДС каждого горшка, большого или маленького - чуть больше 1 В. Когда нужен больший вольтаж, требуемое количество горшков соединяется последовательно и нагревается в общей печи. Воздух прокачивается с помощью воздушного насоса с электроприводом, на что расходуется небольшая часть произведенного электричества. Было бы преждевременным давать какие-то окончательные оценки эффективности нового процесса, если использовать его в большом масштабе. Постоянно делаются улучшения. Только относительно маленькие угольные электрогенераторы были построены, по сравнению с современными паровыми машинами. И нужно помнить, что для этого генератора, как и для паровой машины, увеличение размера означает увеличение КПД, особенно, для угля, сжигаемого на решетке. Однако, по результатам проведенного независимыми экспертами тестирования маленького и относительно грубо сделанного угольного генератора, мощностью 2 л. с, который периодически использовался в течение 6 месяцев, были получены следующие результаты: • Средняя развиваемая электрическая мощность: 2,16 л.с. • Средняя мощность, потребляемая воздушным насосом: 0,11 л.с. • Средняя электрическая мощность, нетто: 2,05 л.с. • Потребление угля в горшках на л. с.'час электроэнергии: 0,233 фунта • Потребление угля на решетке не л. с.'час электроэнергии: 0,336 фунта • Общее потребление угля на л. с.'час электроэнергии: 0,569 фунта • Энергия, получаемая из 1 фунта угля: 1336 Вт*ч (32% от теоретически возможной) Таким образом, КПД этого генератора был в 12 раз выше, чем у средней электростанции, используемой в этой стране, и в 40 раз выше, чем у электростанций соответствующего размера. Однако, есть еще много деталей, над которыми предстоит работа, и предстоит сделать еще много улучшений, до того, как угольный электрогенератор может быть запущен в общее коммерческое использование в масштабах, сопоставимых с современными паровыми машинами. Вопреки тем утверждения, которые я читал, я верю, что еще пройдет некоторое время, пока динамо-машины будут преданы заб- 3 Дюйм = 2,54 см.
вению вместе с паровыми машинами. 100 последовательно соединенных ячеек на печи (Температура электролита: 400-500° С); Выработка: 16 А / 90 V ПОДВАЛ В ПОДВАЛЕ ОПЫТ СОЗДАНИЯ УГОЛЬНОГО ТОПЛИВНОГО ЭЛЕМЕНТА Денис Будяк Статья дана в оригинальном виде, без существенных изменений. Текст может содержать ряд неточностей и спорных моментов по части химии. Предупреждаем, что работа с расплавом щелочи крайне опасна. Попадание капель в глаза означает гарантированную и необратимую потерю зрения. Довольно неприятные последствия имеет вдыхание щелочного аэрозоля. Попадание мельчайших капель на руки вызывает болезненные ожоги. Делать такую работу можно только в защитных очках, перчатках и при хорошей тяге. История Первый элемент был сделан, кажется, из грифеля от русского (это важно) простого карандаша, а корпус был пробкой из-под пива. Все это подогревалось на кухонной плите. Электролитом был порошок "Диггер" для прочистки труб, состоящий из NaOH, если верить этикетке. Поскольку удалось получить какой-то ток, я подумал, что, наверное, такой элемент действительно может работать. Консервные банки начинали течь по швам (припой разъедался щелочью), и я даже не помню, какие результаты получились. Для более серьезного опыта купил жульенницу из нержавейки. Однако с ней ничего не получилось. Мало того, что напряжение было всего 0,5 вольта, оно было еще и направлено не в ту сторону. Также выяснилось, что угольки от карандашей очень любят рассыпаться на составные части. Видимо, они сделаны не из цельного кристалла графита, а склее-
ны из пыли. Та же судьба постигла стержни от пальчиковых батареек. Также были куплены щетки от каких-то электродвигателей, но у них быстро приходили в негодность места, где подводящий провод входит в щетку. К тому же, одна пара щеток, как оказалось, содержала медь или какой-то другой металл (с щетками это бывает). Крепко почесав затылок, я решил, что для надежности лучше сделать сосуд из серебра, а уголек - по технологии, описанной Жако, т.е., спеканием. Серебро стоит умеренных денег (цены колеблются, но где-то порядка 10-20 рублей за грамм). Я встречал чай, который стоит гораздо дороже. Известно, что серебро устойчиво в расплаве NaOH, в то время как железо дает ферраты, например, Na2Fe04. Поскольку вообще железо обладает переменной валентностью, то его ионы могут вызвать в элементе "короткое замыкание", во всяком случае, в теории. Поэтому я решил для начала проверить случай серебра, как более простой. Сначала была куплена мельхиоровая посеребренная ложка, и при испытании со щетками сразу получилось 0,9 В открытой цепи с нужной полярностью, а также, довольно большой ток. Впоследствии (не практически, а теоретически) выяснилось, что серебро тоже может растворяться в щелочи в присутствии пероксида натрия Na202, который в некоторых количествах образуется при продувании воздуха. Будет ли это происходить в элементе или под защитой углерода серебро находится в безопасности - я не знаю. Ложка прожила недолго. Серебряный слой вздулся и она прекратила работать. Мельхиор неустойчив в щелочи (как и большинство существующих на свете материалов) . После этого я сделал специальный стаканчик из серебряной монеты, на котором и была получена рекордная мощность в 0,176 ватт. После этого я решил, что нужно подыскать какое-то более подходящее место для экспериментов, чтобы воспроизвести их в большем масштабе. Вот и вся история. Все это было проделано в обычной городской квартире, на кухне. Я ни разу крупно не обжегся, не устроил пожара и всего один раз пролил расплавленную щелочь на плиту (эмаль немедленно разъело). Инструмент был использован самый простой. Если получится узнать правильный вид железа и правильный состав электролита, то такой элемент сможет сделать на коленке каждый не совсем безрукий мужик. Изготовление серебряного стаканчика Стаканчик делался из серебряных монет 999 пробы (продаются в Сбербанке, около 500 рублей одна монета 30 грамм, важно не перепутать, там есть гораздо более дорогие). Монета расплющивается молотком на наковальне до тонкой пластинки . Чтобы металл не терял пластичность, после каждых нескольких ударов его нужно раскалить докрасна и бросить в холодную воду. Из монеты получается пластинка размером примерно 5x6 см. Соответственно, нужно стараться, чтобы сразу получался не круг, а прямоугольник. Прямоугольник не получится, получится овал. Но можно добиться, чтобы из него можно было сделать прямоугольник 5x6см, обрезав края. Далее делается цилиндрическая заготовка с "припусками торые потом оплавятся и дадут шов. ко-
Потом в эту заготовку вставляется что-то цилиндрическое подходящего диаметра, и край аккуратно сплющивается, чтобы получилось некое подобие тюбика из- под зубной пасты. Результатом сплавления будет то, что параллельные поверхности на краю швов сплавятся где-то на 1-2 мм. Для этого нужно: подмять и обработать надфилем прилегающие кромки, чтобы они хорошо соприкасались утончить самые кромки (тем же надфилем), чтобы у кромки образовался острый край, под углом около 30 градусов. Тогда кромки будут легче плавиться. Получается в сечении вот так: Теперь будем сплавлять. Сначала сплавляем "дно" тюбика, потом - стенку тюбика. Естественно, это делается не за один прием. Аккуратно берем пассатижами весь "тюбик" примерно посередине, чтобы округлый вырез пассатижей охватывал его. Нужно учесть, что при нагревании серебро размягчается и все может раздавиться . Поэтому, зажимать нужно не слишком плотно. Может быть, нужно зажать в тисках, но у меня не было верстака. В тисках было лучше. Во время сварки, или, точнее, сплавления, нужно одновременно учесть много • горячий воздух и выхлопные газы горелки поднимаются вверх. При этом они не должны попадать на баллончик горелки, на лицо, одежду, пассатижи; попадание на баллончик горелки может закончится взрывом баллончика с последующим крупным пожаром. Также желательно держать баллончик в нормальном положении, а не "кверху ногами". • если серебро нагревать слишком долго, изоляция пассатижей может начать плавиться. • пластина достаточно тонкая, а поверхностное натяжение серебра - велико. Если его перегреть, то оно начнет собираться в капли, при этом в пластине образуется дыра; нужно только чуть-чуть подплавить его, чтобы края схватились . При этом нужно начинать с одного из краев шва и вести горелку вдоль шва с некоторой скоростью. • пламя горелки имеет в разных частях разную температуру. Короче, варить серебро таким способом - это искусство. Мы освоили его на пару с соседом, у которого просто золотые руки. При этом стаканчик получился только с третьего или четвертого раза. Запорченные стаканчики приходилось сплавлять в серебряную капельку и начинать все сначала. Наверное, это нужно делать в фарфоровом тигле, но за его отсутствием я делал это в железной банке, и серебро загрязнялось железом. То ли загрязнение не успело стать фатальным, то ли мне пришлось покупать вторую монету (точно уже не помню). фаски факторов:
Лучше попробовать сначала сваривать те обрезки, которые остались от приготовления пластины. Потом нужно отрепетировать весь процесс сварки шва стаканчика при выключенной горелке. И уже потом пробовать. Учтите, что серебро будет долго нагреваться, сам процесс сплавления проходит за секунду, а если продолжить нагрев, то пластина прохудится и придется все начать сначала. После того, как сварили "дно" тюбика, точно так же подгоняем боковой шов на "стенке" тюбика, точно так же захватываем тюбик и свариваем стенку аналогичным образом. Когда стаканчик сделан, его нужно проверить на герметичность, налив воды. Если где-то протекает, можно попробовать подплавить еще, но, вполне возможно, что из этого ничего не выйдет. Затем стаканчик-тюбик должен превратиться в кастрюльку с ручкой, ее тоже лучше всего приварить. Ручка делается из обрезков, оставшихся от приготовления пластины. Поскольку элемент дает большой ток при маленьком напряжении, должна быть довольно большая поверхность контакта между ручкой и кастрюлей. И это должно быть крепкое соединение, т.к. за эту же ручку придется и держать стаканчик во время испытаний. Ручкой в моем случае был обрезок серебра длиной в несколько сантиметров, шириной 7 мм, толщиной - такой же, как толщина стенки стаканчика, а расположение частей и горелки при сварке показано на рисунке. Стаканчик получился двусмысленный, ну да ладно. Кому надо, тот поймет. После присоединения ручку аккуратно отгибаем (серебро достаточно пластично и не должно сломаться). Для работы я использовал газовую горелку KOVEA мощностью 1,8 кВт, купленную в туристическом магазине и работающую от баллона 300 г. Можно конечно, не му- чатся, а купить серебряную стопку, но, во-первых, там серебро лишь 925 пробы, не знаю, что с ним будет при работе элемента. Во-вторых, она стоит порядка 1000 рублей. На момент проведения опыта я был настолько стеснен в средствах, что предпочел мучатся с монетой. Пожалуй, я бы рекомендовал купить стопку. Она не только не потребует времени на обработку (а на это у меня ушло несколько дней), но и больше по объему. ручка стакан
Электрод Можно пытаться использовать чистый графит. Не пробовал. Я выпросил у тетеньки-водителя накладку для рогов троллейбуса, но это было уже в конце моей экспериментальной эпопеи. Еще можно попробовать щетки от двигателей, но они часто бывают с медью, что нарушает чистоту эксперимента. У меня было два варианта щеток, одни оказались с медью. Карандаши не дают никакого результата, потому что у них маленькая площадь поверхности и с них неудобно снимать ток. Стержни от батарей в щелочи разваливаются (что-то происходит со связующим). Вообще говоря, графит - это наихудшее топливо для элемента, т.к. он наиболее химически стоек. Поэтому изготавливаем электрод как положено. Берем древесный уголь (я покупал в супермаркете березовый уголь для шашлыков). Уголь мелется как можно мельче (я молол сначала в фарфоровой ступке, потом купил кофемолку). В промышленности электроды делают из нескольких фракций угля, смешивая их друг с другом. Ничто не мешает сделать так же. Порошок подвергается обжигу для повышения электропроводности: его нужно на несколько минут нагреть до как можно более высокой температуры (1000 градусов и больше). Естественно , без доступа воздуха. Я для этого сделал «горн» из двух вложенных друг в друга консервных банок. Между ними для теплоизоляции навалены кусочки сухой глины. Дно обеих банок пробито для протока воздуха. Внутренняя банка насыпается углями (которые выполняют роль топлива), среди них помещается металлическая коробочка - "тигель", я ее тоже сворачивал из жести от консервной банки. В коробочку запихивается завернутый в бумажный кулек угольный порошок. Должен быть зазор между свертком с углем и стенками "тигля". Он засыпается песком, чтобы не было доступа воздуха. Угли поджигаются, затем сквозь дырки в дне производится наддув обычным феном. Все это довольно пожароопасно - летят искры. Нужны защитные очки, а также нужно смотреть, чтобы рядом не было занавесок, бочек с бензином и других пожароопасных предметов. Лучше бы делать такие дела где-нибудь на зеленой лужайке в период дождей (в перерыве между дождями). Извините, но мне лень рисовать всю эту конструкцию. Думаю, догадаетесь сами. Далее, к обоженному порошку на глаз добавляется некоторое количество сахара (от трети до половины). Это - связующее. Потом - чуть-чуть воды. Бывало я просто плевал в него и добавлял пиво вместо воды, не знаю, насколько это имеет значение; вполне возможно, что органика важна. Все это тщательно перемешивается в ступке. В результате должна получиться пластичная масса. Из этой массы нужно сформовать электрод. Чем лучше ты его спрессуешь, тем лучше. Я брал заглушённый кусок трубки и забивал уголь в трубку меньшей трубкой, с помощью молотка. Чтобы изделие не развалилось при извлечении из трубки, перед набивкой в трубу вставлял несколько ободков из бумаги. Заглушка должна быть съемной, а еще лучше - если труба будет распилена вдоль и соединена хомутами. Тогда после прессовки можно просто разъединить хомуты и достать заготовку уголька в целости и сохранности. В случае съемной заглушки нужно будет выдавить готовую заготовку из трубы (при этом она может развалиться). Уголек у меня имел диаметр 1,2-1,5 см и длину 4-5 см. Готовая форма сушится. Для этого я включал газовую плиту на очень маленький огонь, ставил на нее пустую консервную банку кверху дном и на дно клал уголек. Сушка должна быть достаточно медленной, чтобы пары воды не разорвали заготовку. После испарения всей воды начнет "кипеть" сахар. Он превратится в
карамель и склеит кусочки угля между собой. После остывания нужно просверлить в угольке продольное (вдоль его оси) круглое отверстие, в которое будет вставляться отводящий электрод. Диаметр отверстия примерно 4 мм. При этой процедуре все может развалится, потому что структура хрупкая. Я сначала сверлил 2 мм сверлом, потом аккуратно (вручную) расширял 3-мм и 4-мм сверлами. В принципе, можно это отверстие сделать на этапе формовки, но это значительно сложнее. После того, как все высушено и просверлено, нужно произвести обжиг. Общий смысл - нужно при достаточно плавном наборе температуры подвергнуть уголек сильному и равномерному нагреву без доступа воздуха на некоторое время (около 20 минут). Нагревать нужно постепенно, охлаждать - тоже. Температура - чем выше, тем лучше. Желательно, более 1000 градусов. У меня было оранжевое (ближе к белому) каление железа в импровизированном горне. Промышленные электроды обжигают много суток, с очень плавным подводом-отводом теплоты. Ведь это, по сути - керамика, а керамике свойственна хрупкость. Уголек может и треснуть. Я все делал на глаз. Некоторые угольки трескались потом, при начале эксплуатации . Итак, уголек готов. Он должен иметь как можно меньшее сопротивление. При измерении сопротивления нужно не прикасаться к угольку иглами тестера, как показано на рисунке, и сильно прижать пальцами (только чтобы не треснул). Если сопротивление - 0.3-0.4 ома (это было на грани чувствительности моего тестера), то это - хороший уголек. Если больше 2-3 ом, то плохой (удельная мощность будет маленькая). Если уголек не удался, можно повторить обжиг. После того, как сделали обжиг, делаем отводящий электрод. Это - полоска серебра длиной, равной двукратной (или чуть меньше) длине уголька, шириной - два диаметра отверстия. Толщина, примерно, 0,5 мм. Из нее нужно свернуть цилиндр, внешний диаметр которого равен диаметру отверстия. Но цилиндр не получится, потому что ширина слишком мала, получится цилиндр с продольной прорезью. Эта прорезь важна, для компенсации теплового расширения. Если сделать полный цилиндр, то серебро при нагреве разорвет уголек. "Цилиндр" вставляем в уголек. Нужно сделать так, чтобы он плотно входил в отверстие. Здесь есть две стороны: чрезмерное усилие разорвет уголек, при слабом усилии не будет достаточного контакта (он очень важен). Смотрите рисунок ниже.
отводящий электрод сечение отводящего электрода О уголек Эта конструкция родилась в результате проб и ошибок, она представляется мне более совершенной, чем те хомуты, которые нарисованы в патенте у Жако. Во- первых , при таком контакте ток идет не вдоль, а по радиусу цилиндрического уголька, что позволяет существенно снизить электрические потери. Во-вторых, металлы имеют больший коэффициент теплового расширения, чем уголь, поэтому контакт угля с металлическим хомутом ослабевает при нагреве. В моем случае контакт упрочняется или сохраняет свою силу. В-третьих, если отводящий электрод делать не из серебра, то уголь предохранит его от окисления. Скорее дайте мне патент! Теперь можно еще раз померять сопротивление, одним из полюсов будет токоот- водящий электрод. У тестера 0.3 ома - это уже предел чувствительности, поэтому лучше пропустить ток известного напряжения и измерить его силу. Подача воздуха Берем стальной стерженек от шариковой ручки большой емкости. Желательно - пустой. Удаляем из него блок с шариком - остается просто железная трубочка. Тщательно удаляем остатки пасты (у меня это не очень хорошо получилось и паста потом обуглилась, что мешало жить). Сначала это делается водой, а потом лучше все же несколько раз прокалить стерженек в пламени горелки. Произойдет пиролиз чернил, после этого останется уголь, который можно выковырять. Далее находим какую-то еще трубку, чтобы соединить этот стерженек (он будет раскален) с ПВХ-шной трубкой, ведущей от аквариумного компрессора, которым кондиционируют рыбок. Все должно быть достаточно герметично. На ПВХ-шную трубку ставим регулируемый зажим, потому что даже самый хилый компрессор дает слишком много воздуха. В идеале нужно сделать серебряную, а не стальную трубку и у меня это даже получилось, но я не смог обеспечить герметичное соединение серебряной трубки с ПВХ-шной. Промежуточные трубки сильно травили воздух (из-за тех же тепловых зазоров), поэтому в итоге я остановился на стальном стерженьке. Конечно, эта проблема разрешима, но нужно просто было потратить на это время и силы и подобрать соответствующую ситуации трубку. Вообще, в этой части я сильно отступил от патента Жако. Сделать такую розочку, как нарисована у него, я не смог (а если честно, то я тогда недостаточно хорошо рассмотрел ее конструкцию). Здесь следует сделать небольшое отступление и обсудить, насколько неправильно Жако представлял работу своего элемента. Очевидно, что кислород переходит в ионную форму где-то на катоде, по формуле:
02+4е" = 202 либо какая-то аналогичная реакция, где кислород восстанавливается и соединяется с чем-то. То есть, важно обеспечить тройное соприкосновение воздуха, электролита и катода. Это может происходить при контакте пузырьков воздуха с металлом распылителя и электролитом. То есть, чем больше суммарный периметр всех отверстий распылителя, тем больше должна быть сила тока. Также, если сделать стаканчик с наклонными краями, то поверхность тройного соприкосновения тоже может увеличиться. Другой вариант - это когда на катоде восстанавливается растворенный кислород. В этом случае, площадь тройного соприкосновения не имеет особого значения, а нужно лишь максимизировать площадь поверхности пузырьков, чтобы ускорить растворение кислорода. Правда, в этом случае непонятно, почему растворенный кислород не окисляет уголь непосредственно, без электрохимической реакции (работая "мимо" электрической цепи). Видимо, в этом случае важны каталитические свойства материала стаканчика. Ну ладно, это все лирика. В любом случае, нужно делить струю на мелкие пузырьки. Те попытки сделать это, которые я предпринимал, не были особо успешными. Для этого нужно было сделать тонкие отверстия, с которыми получилась куча проблем. Во-первых, тонкие отверстия быстро засоряются, т.к. железо коррозирует, ржавчина и остатки угля (вспомним, что там когда-то была паста от ручки) выпадают из стерженька и затыкают отверстия. Во-вторых, отверстия получаются неравной величины и сложно заставить воздух идти одновременно из всех отверстий. В-третьих, если два отверстия находятся рядом, то возникает нехорошая тенденция слияния пузырьков еще до их отрыва. В-четвертых, компрессор подает воздух неравномерно, и это тоже как-то влияет на размер пузырьков (видимо, выскакивает один пузырек за один толчок). Все это можно легко наблюдать, налив в прозрачную банку воду и испытав распылитель в ней. Конечно, у щелочи другая вязкость и коэффициент поверхностного натяжения, поэтому придется действовать наугад. Я так и не смог победить
эти проблемы и плюс к этому, проблему утечек воздуха из-за тепловых зазоров. Из-за этих утечек распылитель не мог начать работать, поскольку для этого нужно преодолеть силы поверхностного натяжения. Как раз тут полностью проявились недостатки хомутов. Как их не затягивай, при нагреве они все равно ослабевают. В итоге, я перешел к простейшему распылителю из стерженька от шариковой ручки, который давал только одну струю пузырьков. Видимо, чтобы сделать это по нормальному, нужно тщательно избавиться от утечек, подавать воздух под существенным давлением (больше, чем создаваемое аквариумным компрессором) и через мелкие отверстия. Эта часть конструкции у меня проработана откровенно плохо... Сборка Все. Собираем все вместе. Нужно так все установить на зажимах, чтобы: 1. Не было короткого замыкания через несущую конструкцию. 2. Уголек не касался трубки, вдувающей воздух, а также стенок стаканчика. Это будет трудно, поскольку зазоры малы, зажимы хлипки, а при работе элемента щелочь будет булькать. Также будет действовать архимедова сила, которая будет все смещать куда не надо, и сила поверхностного натяжения, притягивающая уголек к другим предметам. Серебро станет мягким от нагрева. Поэтому, в итоге, я держал уголек пассатижами за конец отводящего электрода. Это было плохо. Для нормальной работы нужно все же сделать крышку (видимо, только из фарфора - глина размокает в щелочи и теряет прочность, может быть, можно обожженную глину использовать) . Идея о том, как сделать эту крышку, есть в патенте Жако. Главное, что она должна довольно хорошо удерживать уголек, т.к. даже при небольшом перекосе он будет касаться стаканчика у дна. Для этого она должна иметь большую высоту. Подобрать такую фарфоровую крышку мне не удалось, сделать керамическую из глины - тоже (все, что я пытался делать из глины - быстро трескалось, видимо, я как-то не так обжигал). Единственная небольшая хитрость состоит в том, чтобы использовать металлическую крышку и слой путь даже плохо обожженной глины в качестве теплоизоляции. Этот путь тоже не так прост. Короче говоря, конструкция элемента была у меня тоже никуда не годной. Еще неплохо заготовить инструмент, которым можно будет достать кусок уголька , который может отвалиться от электрода и упасть в щелочь. Может отвалиться кусок уголька и упасть в щелочь, тогда будет короткое замыкание. У меня в качестве такого инструмента была гнутая стальная скрепка, которую я держал пассатижами. Подводим провода - один к ручке, другой - к отводящему электроду. Можно припаять, хотя я использовал две металлических пластинки и свинчивал их винтиками (все - от детского металлического конструктора). Главное - понимать, что вся конструкция работает при низком напряжении и все соединения должны быть сделаны хорошо. Измеряем сопротивление при отсутствии электролита между электродами - убеждаемся, что оно велико (хотя бы 20 Ом). Измеряем сопротивления всех соединений - убеждаемся, что они малы. Собираем схему с нагрузкой. Например, сопротивление 1 Ом и последовательно включенный амперметр. У тестеров низкое сопротивление амперметра бывает только в режиме измерения единиц ампер, желательно это заранее выяснить. Можно либо включить в режим изменения единиц ам-
пер, (ток получится от 0.001 до 0.4 А), либо вместо последовательно включенного амперметра включить параллельно вольтметр (напряжение будет от 0.2 до 0.9 В) . Желательно предусмотреть возможность менять условия в ходе опыта, чтобы замерять напряжение раскрытой цепи, ток короткого замыкания и ток с нагрузкой 1 ом. А лучше, если сопротивление тоже можно менять: 0.5 Ом, 1 Ом и 2 Ом, чтобы найти то, при котором будет достигнута максимальная мощность. Включаем компрессор от аквариума и заворачиваем зажим, чтобы воздух шел еле-еле. Работоспособность подводящего трубопровода нужно проверить, погружая его в воду. Поскольку плотность щелочи - 2,7, нужно погрузить на соответствующую большую глубину. Полная герметичность не обязательна, главное, чтобы и на такой глубине из конца трубки что-то булькотило. Меры предосторожности Далее идет работа с расплавом щелочи. Как бы объяснить, что такое расплав щелочи? Вам попадало в глаза мыло? Неприятно, правда? Так вот, расплав NaOH - это тоже мыло, только разогретое до 400 градусов и в сотни раз более едкое. Защитные меры при работе с расплавом щелочи строго обязательны! Прежде всего, строго необходимы хорошие защитные очки. Я близорук, поэтому я одевал двое очков - сверху пластиковые защитные, а под них еще и стеклянные . Защитные очки должны защищать от попадания брызг не только спереди, но и сбоку. В такой амуниции я чувствовал себя в безопасности. Несмотря на защитные очки, приближать лицо к аппарату не рекомендуется вовсе. Кроме глаз, необходимо защитить и руки. Я все делал очень аккуратно, поэтому под конец уже "замастерился" и работал в футболке. Это полезно, поскольку попадающие иногда на руки мельчайшие брызги щелочи дают ожог, не позволяющий в течение нескольких дней забыть, с каким веществом имеешь дело. Но на руках, естественно, были перчатки. Сначала резиновые хозяйственные (не самые тонкие), а поверх них - пупырчатые тряпичные пупырышки торчали с задней стороны ладони. Их я смачивал водой, чтобы можно было браться за горячие предметы. В такой паре перчаток руки более-менее защищены. Но нужно следить, чтобы внешние перчатки никогда не были слишком мокрые. Капля воды, попадающая в электролит, мгновенно закипает, при этом электролит очень здорово разбрызгивается. Если такое произошло (а такое у меня происходило раза три) , возникают проблемы с органами дыхания. В этих случаях я немедленно задерживал дыхание, не завершая вдох, и сваливал из кухни подобру-поздорову. Вообще, для защиты органов дыхания нужна хорошая вентиляция при проведении опыта. В моем случае это был просто сквозняк (дело было летом) . Но в идеале это должна быть вытяжка или открытый воздух. Поскольку брызги щелочи неизбежны, все, что находится в ближайшей окрестности стаканчика, покрывается щелочью в той или иной степени. Если взяться за нее голыми руками, можно получить ожег. Нужно все промывать после завершения опыта, в том числе, перчатки. Еще на случай ожога у меня всегда была рядом заготовлена емкость с водой и емкость с разбавленным уксусом, для нейтрализации щелочи при сильном ожоге. Уксус ни разу не пригодился, к счастью и я не могу сказать, стоит ли им поль-
зоваться вообще. В случае ожога нужно сразу смывать щелочь большим количеством воды. Еще есть народное средство от ожогов - моча. Оно, вроде бы, тоже помогает. Работа с элементом Насыпаем в стаканчик сухой NaOH (я покупал средство "Диггер" для прочистки труб). Можно добавить МдО и другие ингредиенты, например, СаСОз (Зубной порошок или мел) или МдСОз (у меня был МдО, добытый друзьями) . Поджигаем горелку и греем. Поскольку NaOH крайне гигроскопичен, нужно это делать сразу (а пакетик с NaOH - плотно закрывать). Неплохо бы сделать так, чтобы стаканчик был окружен теплом со всех сторон - ток ОЧЕНЬ сильно зависит от температуры. Т.е., сделать импровизированную камеру сгорания и направить в нее пламя горелки. Нужно еще следить, чтобы баллончик у горелки не взорвался, по-моему эти горелки достаточно плохо сделаны с этой точки зрения, как я уже писал, для этого нужно, чтобы горячие газы не попадали на баллончик, и лучше держать его в нормальном положении, а не "вверх ногами". Иногда оказывается удобным подводить пламя горелки сверху, но это - уже после того, как все расплавится. Тогда одновременно греется нагнетательная трубка, отводящий электрод (и уголек через него), верх стакана, где больше всего воздушных пузырьков. Если мне память не изменяет, самый большой результат был получен именно таким образом. Через какое-то время щелочь начнет плавиться и ее объем уменьшится. Нужно подсыпать порошка, так, чтобы стаканчик был заполнен на 2/3 по высоте (щелочь будет утекать из-за капиллярности и разбрызгивания). Труба подачи воздуха у меня работала плохо. Из-за теплового расширения зазоры и неплотности увеличатся, а из-за хорошего теплоотвода щелочь в ней может застывать. Иногда воздух вообще переставал поступать. Чтобы это исправить , я делал следующее: 1. Продув (временное аккуратное увеличение подачи воздуха). 2. Подъем (меньше будет напор и воздух вытеснит столб щелочи из трубы). 3. Прогрев (достать из стаканчика и прогреть горелкой, чтобы щелочь внутри распылителя расплавилась). Вообще, элемент начинает хорошо работать при температуре красного каления (щелочь начинает светиться) . При этом начинает идти пена (это СОг) , и раздаются хлопки со вспышками (то ли это водород, то ли СО догорает, я так и не понял). Мне удалось добиться максимальной мощности 0,025 Вт/см2 или 0,176 Вт всего с элемента, при сопротивлении нагрузки в 1,1 Ома. При этом я измерял ток амперметром. А можно было измерять и падение напряжения на нагрузке. Вырождение электролита В элементе происходит нехорошая побочная реакция NaOH + С02 = Na2C03 + Н20 Т.е., через какое-то время (десятки минут) все застынет (температура плавления соды около 800 °С) . Некоторое время это можно преодолевать, подсыпая
еще щелочи, но в конце концов все равно электролит застынет. Вообще говоря, можно использовать NaOH, невзирая на эту проблему, о чем и писал Жако в своем патенте. Поскольку есть способы получения NaOH из ЫагСОз. Например, вытеснение негашеной известью по реакции Na2C03 + Са(ОН)2 = 2NaOH + СаС03 после чего СаСОз можно прокалить и получится опять СаО. Правда, такой способ очень энергоемок и общий КПД элемента при этом упадет очень сильно, да и сложность увеличится. Поэтому, я думаю, что все же нужно искать стабильный состав электролита, который нашли в SARA4 (http://www.sara.com). Вполне возможно , что это можно сделать, найдя заявки SARA на патенты в базе патентного ведомства США (http://www.uspto.gov), тем более, что за прошедшее время они могли стать уже выданными патентами. Но у меня руки пока не дошли. Собственно , и сама эта идея появилась лишь в ходе подготовки этих материалов. Видимо, скоро я все же это сделаю. Итоги, мысли и выводы Тут я, может быть, немного повторюсь. Можно начинать не с серебра, а сразу с железа. Когда я пробовал использовать жульенницу из нержавеющей стали, у меня получилось плохо. Теперь я понимаю, что первая причина этого - низкая температура и большой зазор между электродами. В своей статье Jacques пишет, что плохая работа с железом связана с тем, что к железу пригорает масло и образуется второй угольный электрод, поэтому нужно очень тщательно очистить железо от малейших следов масла, а также использовать железо с низким содержанием углерода. Может быть, и так, но я все же думаю, что есть еще одна, более важная причина. Железо - элемент переменной валентности. Оно растворяется и образует "короткое замыкание". В пользу этого говорит и изменение цвета. При использовании серебра цвет электролита не меняется (серебро - самый устойчивый металл к действию расплавленных щелочей). При использовании железа электролит становится коричневым. При использовании серебра напряжение открытой цепи достигает 0.9 В и выше. При использовании железа - существенно меньше (не помню точно, но не более 0.6 В) . Насчет того, какое железо нужно использовать , чтобы все хорошо работало - есть на других страницах. Еще немного - насчет водяного пара, о котором пишет SARA. С одной стороны, он всем хорош (в теории): не дает железу переходить в раствор. Известна реакция разложения ферратов щелочных металлов горячей водой, что-то типа Na2Fe04 + Н20 = 2NaOH + Fe203 и вроде бы должен сдвигать равновесие в нехорошей побочной реакции. Я посмотрел термодинамику реакции NaOH + С02 = Na2C03 + Н20 с помощью он-лайн программы F*A*C*T (http://www.crct.polymtl.ca/FACT/index.php). При всех температурах равновесие в ней очень сильно сдвинуто вправо, т.е., вода вряд ли может существенно Снимок приложим.
вытеснить углекислый газ из соединения с окисью натрия. Возможно, что ситуация меняется в сплаве ЫаОН-ЫагСОз, либо образуется как бы водный раствор, но я не знаю, как это выяснить. Думаю, что в данном случае практика - критерий истины. Основное, с чем можно столкнуться при проведении опытов с паром - это конденсация. Если где-то по дороге от места ввода воды в воздушную магистраль температура любой стенки упадет ниже 100°С, вода может сконденсироваться, а потом с током воздуха попасть в щелочь в виде капельки. Это очень опасно и нужно этого изо всех сил избегать. Особенно опасно то, что температуру стенок не так легко промерить. Сам я ничего с паром делать не пробовал. Вообще, конечно, нужно проводить такие работы не в квартире, а, как минимум, на даче, и делать сразу элемент большего размера. Для этого, естественно, понадобится больший горн для обжига, большая "печка" для подогрева элемента , больше исходных материалов. Зато будет гораздо более удобно работать со всеми деталями. Особенно это касается устройства самого элемента, который у меня не имел крышки. Сделать большую крышку - гораздо проще, чем маленькую. Насчет серебра. Серебро, конечно, стоит не так уж дешево. Но если делать серебряный электрод достаточно тонким, то элемент с серебром может стать рентабельным. Например, пусть удалось сделать электрод толщиной 0,1 мм. При пластичности и ковкости серебра это будет легко (серебро можно протягивать сквозь валки в очень тонкую фольгу и я даже хотел это делать, но не нашлось валков). При плотности около 10 г/см3, один кубический сантиметр серебра стоит примерно 150 рублей. Он даст 100 квадратных сантиметров поверхности электрода. Можно получить и 200 см2, если взять два плоских уголька и расположить серебряную пластинку между ними. При достигнутой мной удельной мощности в 0,025 вт/см2, получается мощность в 5 ватт или 30 рублей за ватт, или 30.000 рублей за киловатт. Ввиду простоты конструкции, можно ожидать, что остальные компоненты киловатного элемента (печка, воздушный насос) будут существенно дешевле. Корпус при этом можно сделать из фарфора, который относительно стоек к расплаву щелочи. В результате получится не слишком дорого, даже по сравнению с бензоэлектростанциями малой мощности. А уж солнечные батареи с ветряками и термоэлектрогенераторами отдыхают далеко позади. Чтобы еще сильно снизить цену, можно попытаться сделать сосуд из посеребренной меди. В этом случае, слой серебра будет еще в 100-1000 раз тоньше. Правда, мои опыты с мельхиоровой ложкой закончились неудачно, так что неясно, насколько серебряное покрытие окажется стойким. То есть, даже использование серебра открывает довольно неплохие перспективы. Единственное, что может тут оказаться неудачным - это если серебро будет недостаточно стойким. Еще о материалах корпуса. Якобы, при работе элемента большое значение имеют пероксиды натрия, например, ЫагОг, который должен возникать при продуве воздуха в NaOH. При высокой температуре пероксид разъедает практически все вещества. Проводились опыты по измерению потери веса тиглями из различных материалов , в которых содержался расплав пероксида натрия. Самым стойким оказался цирконий, за ним - железо, затем никель, затем фарфор. Серебро не попало в четверку лидеров. К сожалению, не помню точно, насколько серебро устойчиво. Там еще было написано про хорошую стойкость А120з и МдО. Но второе место, которое занимает железо, вселяет оптимизм.
Угольные топливные элементы компании SARA Кр^нье UI для грототигсв MARK II D и MARK III А о э о О 50 100 150 2СС 250 ЭОС пготюсть тока mA ckQ Производительность УТЭ компании SARA
Практика ПОЛУЧЕНИЕ ДРОЖЖЕЙ ИЗ ПИВНЫХ БУТЫЛОК Крис Колби В вашем местном магазине для домашних пивоваров можно купить далеко не любую расу дрожжей. Для получения некоторых, Вам придется приложиться к бутылке . Все что Вам нужно знать, это как добыть дрожжи из пива, дображивавшего в бутылке. В настоящее время домашним пивоварам доступен большой ассортимент пивных дрожжей. Но некоторые специфические штаммы купить иногда невозможно1. Однако при этом бывает возможно их вырастить из пива с бутылочным дображиванием. Большинство сортов покупного пива фильтруют, а некоторые подвергают мгновенной пастеризации перед тарированием по бутылкам, и в таком пиве дрожжей нет. Однако некоторые пивзаводы производят отдельные сорта с дображиванием в бутылке. Часто пивовар указывает этот факт на этикетке своей продукции. Если этого не происходит, тогда о том, что это пиво с дображиванием в бутылке2, 1 Особенно низкотемпературные дрожжи для производства лагера. 2 Наличие осадка совсем не гарантирует того, что пиво при этом непастеризованное, а в осадке присутствуют живые дрожжи.
указывает слой осадка на дне бутылки. Однако, имейте в виду, что некоторые производители для дображивания в бутылке используют другой дрожжевой штамм, нежели штамм для первичного брожения . Например, дрожжи на дне большинства баварских хефевайценов, представляют собой стандартный лагерный штамм. Franziskaner, например, бутилируют вместе с бутылочным штаммом, а не со штаммом hefeweizen. Единственное исключение из этого правила - Шнайдер Вайсе (Schneider Weisse), который как показывает опыт, разливают по бутылкам вместе со штаммом основного брожения. Британское пиво с созреванием в бутылке, чаще всего, дображивают на штамме основного брожения. Для примера, Fuller's 1845, по общему мнению, созревает в бутылке вместе со штаммом основного брожения. Кроме того, Вы должны знать, что некоторые пивовары в ходе брожения используют более одного дрожжевого штамма. Если Вы выращиваете дрожжи из бутылки, нет никакой гарантии, что Вам удастся воскресить все соответствующие штаммы. А если Вам это и удастся, то, скорее всего их количественное соотношение не совпадет с пропорциями, использованными самим пивоваром. Некоторые источники утверждают, что Saison Dupont сбраживается тремя расами, но, приложив немного усилий, все три можно вырастить из бутылки пива. Другими сортами пива, знаменитыми тем, что в них есть дрожжи, которые можно вырастить и использовать для брожения, являются Сьерра-Невада Пэйл эль (Sierra Nevada Pale Ale), Шимэ (Chimay), некоторые сорта Rogue и некоторые сорта пивзавода Каламазу Брюинг (Kalamazoo Brewing (Bell's)). Успех или неудача Вашего предприятия в основном зависит от состояния дрожжей, которых Вы попытаетесь вырастить. Если Вам попадет свежее пиво, которое хранилось в холоде и которое не слишком крепкое, у Вас будут неплохие шансы для оживления дрожжей из бутылки. Дрожжи, которые подвергались стрессу - будь то высокая температура, длительное хранение или высокий уровень алкоголя - рекультивировать намного сложнее. Дрожжи, которые большинство домашних пивоваров стремятся рекультивировать, берутся из британского, немецкого или бельгийского пива. К сожалению, транспортировка по морю, которую переносит это пиво, и высокий уровень алкоголя, которым отличаются некоторые из этих сортов, затрудняет процесс выращивания из них дрожжей. Вам лучше попытаться вырастить дрожжи из пива вашей местной или региональной микропивоварни. (Конечно, если Вы посещаете Европу и сможете достать несколько бутылок пива с бутылочным созреванием, нагрузите им чемодан перед отлетом домой!) Если Вы нашли пиво с бутылочным созреванием, которое на Ваш взгляд является хорошим кандидатом для того, чтобы вырастить из него дрожжи, то вот Вам, как это сделать. Дезинфекция Ключевым моментом для выращивания бутылочных дрожжей является чистота и дезинфекция (а лучше стерилизация) всего применяемого при этом оборудования. Количество жизнеспособных дрожжевых клеток в бутылке может быть очень незначительным и любой загрязняющий микроорганизм, который приземлится на Вашу культуру, может вырасти быстрее, чем Ваши дрожжи и сделает Вашу культуру бес-
полезной. Отнеситесь к вопросу чистоты и дезинфекции серьезней, чем при приготовлении обычной партии пива. При выращивании дрожжей из бутылки, главная идея состоит в том, чтобы из дрожжей, здоровье которых может быть изначально слабым, получить дрожжи жизнеспособные и затем нарастить их до количеств достаточных для последующего использования. Первым делом надо подкормить дрожжи небольшим количеством сусла с тем, чтобы "разбудить их". Самый простой способ заключается в добавлении небольшого количество сусла в бутылку. Готовим сусло Сусло, которое Вы добавляете, должно обеспечить дрожжевым клеткам, которые возможно ослаблены, источник углеводов, кислорода и других питательных веществ . Концентрация этих веществ должна быть достаточно низкой, чтобы не вызвать у дрожжей стресс. Поэтому, приготовьте начальное сусло с плотностью 1.015-1.020 (3,75-5%). Проведите аэрацию воздухом или кислородом и добавьте щепотку питательных веществ для дрожжей. Используйте "комплексную" дрожжевую подкормку, а не диаммофос (DAP - diammonium phosphate), который продается как подкормка для дрожжей во многих магазинах для виноделов. Вам понадобится совсем небольшой объем этого сусла (обычно 2-3 мл) - достаточный, чтобы лишь покрыть дно бутылки. Если Вы выращиваете дрожжи из бутылок объемом 750 мл, поскольку в них разливают многие сорта бельгийского пива, то количество используемого сусла, должно быть соответственно большим, приблизительно 6 мл. На каждом этапе, Вам понадобится подкармливать дрожжи допустимым объемом сусла. При поэтапном выращивании здоровых дрожжевых культур, нормой считается засев дрожжевой культуры в сусло по объему в 5-10 раз превышающее объем самой культуры. На ранних стадиях выращивания дрожжей из бутылки, лучше придерживаться 5-ти кратного поэтапного увеличения объема. Это с одной стороны обеспечивает дрожжи допустимым для метаболизма количеством сусла, а с другой стороны ограничивает рост посторонней микрофлоры. Добавляя сусло в бутылку, старайтесь , чтобы его объем был примерно равен объему, занимаемому осадком. Сусло встречается с дрожжами Перед тем, как открыть бутылку, протрите горлышко и пробку, предпочтительно 70%-ым раствором этанола или изопропиловым спиртом из аптеки. Вылейте пиво, не потревожив дрожжевой осадок. Используйте газовую зажигалку, чтобы опалить верх бутылки. В качестве источника огня можно также использовать газовую плиту на кухне. Перед тем как опалить бутылку, дайте спирту испариться, при работе с открытым пламенем, емкость со спиртом должна быть закрыта. Пару раз медленно проведите бутылку через пламя; не нужно обжигать стекло, чтобы оно нагрелось. Эта процедура должна убить любые микроорганизмы, которые скрывались под кромкой пробки. Поставьте бутылку и дайте ей нагреться до комнатной температуры, при этом закройте верх продезинфицированной алюминиевой фольгой, чтобы предотвратить заражение.
Вылейте питательное сусло на дрожжи по стенке бутылки. Если бутылка имеет выпуклое дно или другие углубления, аккуратно покрутите сусло, чтобы смыть дрожжи с "островка" в находящуюся вокруг "канавку" с суслом. Не надо добавлять много сусла, чтобы покрыть "островок". Опалите верх бутылки и либо установите гидрозатвор (продезинфицированный) или закройте ее продезинфицированной алюминиевой фольгой. В зависимости от того, сколько дрожжей окажется жизнеспособными, меняется и время, которое потребуется, чтобы "разбудить их". Кроме того, Вы не всегда можете заметить видимые признаки брожения на первых стадиях рекультивации дрожжей. В этом смысле лучше пусть инкубация будет происходить в бутылке в относительном тепле - 21-32 °С - в течение 1-3 дней, при этом стоит следить за появлением пены или незначительным помутнением сусла. (Зачастую температура на верху холодильника теплее, чем в самой комнате и это хорошее место для инкубации культур.) Кстати, не подвергайте дрожжевую культуру воздействию яркого источника света для того, чтобы либо согреть ее, либо увидеть признаки брожения. Держать Вашу культуру в полной темноте нет необходимости, но уберите ее от солнца или другого яркого источника света. Первая пересадка в больший объем Когда Вы заметите признаки брожения, либо по прошествии трех дней, перелейте бродящее сусло в небольшой объем свежего сусла, равный приблизительно 15 мл. Отличным контейнером для этого может служить стерильная культуральная пробирка на 15 мл, которая продается в магазинах лабораторной техники3. Пробирки имеют индивидуальную упаковку, стерильны и имеют пробку, которой можно неплотно закрыть пробирку с тем, чтобы дать выход газу, образующемуся в процессе брожения. Вы можете взять маленькую картонную коробку, вырезать в ней круглое отверстие, и она сможет служить держателем для пробирки. Это особенно удобно, если Вы имеете дело с несколькими пробирками. Для Вашей 15 мл культуры, Вы можете добавить в сусло совсем чуть-чуть лизо- цима, буквально один или два кристалла. Лизоцим - это фермент, который убивает молочно-кислые бактерии и продается в магазинах для домашних виноделов. Хотя он убивает только определенные штаммы бактерий, но он позволяет в несколько большей степени защититься от загрязняющей микрофлоры, которая могла попасть в бутылку. Чтобы перелить сусло в Вашу 15 мл (что составляет около половины жидкой унции) культуру, снимите гидрозатвор или фольгу с бутылки, опалите верх, дайте стеклу остыть в течение секунды и перелейте дрожжевую культуру из бутылки в 15 мл пробирку. Немедленно закройте пробкой и снова поставьте на инкубацию при температуре 21-32 °С. Через 1-3 дня, Вы должны заметить признаки брожения. Это может быть пена на поверхности сусла, помутнение сусла и просто выпадение слоя дрожжей на дне пробирки. Если Вы видите эти признаки, Вы в принципе можете вздохнуть свобод- 3Еслитакое в природе не наблюдается,можно использовать простерилизованный флакон,с самодельнойватнойпробкой.
но, поскольку ваши труды увенчались успехом. Вам удалось вырастить дрожжи из бутылки. Если Ваша 15 мл культура бродит, значит, дрожжи должны быть достаточно Здоровыми, чтобы быть в состоянии вынести 10-ти кратное увеличение объема. Чтобы получить дрожжи в количестве достаточном для засева 5-галлонной (19 л) партии пива, Вам понадобиться сделать еще две пересадки - одну объемом около 150 мл и вторую около 1 500 мл. Вторая пересадка Для Вашей культуры объемом 150 мл, Вы можете использовать сусло с плотностью 1.030-1.035 (7.5-8.75 %). Хорошо проаэрируйте, и возможно добавьте малюсенькую щепотку дрожжевой подкормки, но на последующих стадиях больше не утруждайте себя лизоцимом, только если дрожжевая культура имеет кислый запах. Инкубируйте культуру при 21-27 °С в течение 2-5 дней, или пока не закончится брожение. (Понижение верхней температурной границы вызвано тем, что просто на заключительных стадиях роста я предпочитаю поставить свои дрожжи в условия приближенные к реальным условиям брожения4.) Оцениваем дрожжи На этой важной стадии решается, подойдет ли выращенная Вами дрожжевая культура для того, чтобы сделать пиво. Засеянная 15 мл культурой, 150 мл культура должна сбродить как небольшая партия пива. Вы должны видеть появление и опадение дрожжевой шапки по мере работы дрожжей. И, когда всё закончится, полученная в итоге жидкость по вкусу должна быть как пиво. Чтобы узнать, так ли на самом деле обстоит дело, слейте достаточное количество жидкости в продезинфицированный контейнер и поставьте на ночь в холодильник. Для этого прекрасно подойдет 50 мл культуральная пробирка, но также подойдет баночка из-под детского питания или любой другой небольшой, закрывающийся контейнер. Заполните контейнер до краев, закройте и поставьте в холод. Охлаждение вызовет выпадение в осадок большей части дрожжей и даст Вам возможность попробовать получившееся на закваске пиво без дрожжевого привкуса, который мешает дегустации. Если у «стартерного» пива прекрасный вкус, значит пересаживайте его дальше в 1 500 мл и делайте на нем пиво. Если это не так, пусть это послужит вам опытом и попробуйте еще раз. Заключительная пересадка Перед засевом на последнюю стадию, я вношу в процесс одно маленькое изменение. Я даю 150 мл культуре полностью выбродить, а затем я пересаживаю только дрожжей осадок. На предыдущих этапах, я переливал всю культуру целиком. Причина того, что я переливаю только осадок, в желании избавиться от мутировавших клеток (если такие есть), которые потеряли способность к флоккуляции. Как только в полутолитровой дрожжевой закваске появятся признаки активности , она готова к засеву. Как вариант, Вы можете дать ей выбродить, а потом провести вторую дегустацию перед тем как засеять этими дрожжами целую партию драгоценного домашнего пива. Тогда для лагера нужно еще меньше, поскольку основное сбраживание лагера происходит при 6- 8 °С.
Другие подходы У некоторых домашних пивоваров принято использовать намного более простой способ для получения дрожжей из бутылок - они просто заполняют пустую бутылку из-под пива с дрожжами суслом и затем спустя несколько дней засевают этим свое пиво. Если этот способ у Вас сработает - отлично, но я думаю, что мой подход имеет больше шансов на успех. По общему признанию, такой способ предполагает намного больше труда, но Вы при этом не подавляете небольшую дрожжевую колонию в бутылке, добавляя туда сусла больше, чем дрожжи могут сбродить. Говоря об еще большем объеме работы, существует еще один подход, который приняли на вооружение некоторые домашние пивовары. Он состоит в высеве дрожжей из бутылки на чашках Петри, наполненных питательным агаром. Затем, индивидуальные колонии собирают с чашек и выращивают множественные колонии дрожжей. Каждую их них перед использованием оценивают на вкус и работоспособность. Если у Вас есть время (и навыки работы в лаборатории) , вот вам еще один способ. ПОДВАЛ МЕТОДЫ КОНТРОЛЯ ДРОЖЖЕЙ В. Майборода Определение бродильной активности весовым методом Весовой метод заключается в определении количества выделившегося диоксида углерода по разности между массой сусла до и после брожения. Подсчет числа клеток микроорганизмов под микроскопом Для подсчета микроорганизмов обычно используют камеры Тома-Горяева. Счетная камера представляет собой толстое предметное стекло, разделенное четырьмя прорезями на три поперечно расположенные площадки5. Центральная площадка продольной прорезью делится пополам. На каждой половинке выгравирована сетка. Боковые площадки расположены на 0,1 мм выше центральной (глубина камеры) и служат для притирания покровного стекла. Сетка камеры разделена на 225 больших квадратов (15 рядов и 15 квадратов в ряду). Площадь большого квадрата равна 1/25 мм и разделена на 16 малых квадратов. Сторона малого квадрата равна 1/20 мм, площадь - 1/400 мм кв., объем при глубине 0,1 мм - 1/4000 мм куб. Часть больших квадратов разграфлена вертикально, горизонтально или не разграфлена . Подсчет дрожжей в жидких субстратах ведут после предварительного разбавления водой. Заполнение камеры осуществляют в определенном порядке: небольшую каплю исследуемой суспензии наносят на поверхность счетной камеры и покрывают шлифованным плоскопараллельным покровным стеклом. Для соответствия расчетного значения объема камеры и объема находящейся в ней суспензии клеток покровное стекло притирают к сторонам камеры путем смещения его в противоположные сто- 5 Самому не сделать.
роны несколько раз. Вначале можно притереть покровное стекло, а затем из пипетки осторожно заполнить камеру суспензией дрожжей. Подсчет клеток рекомендуется начинать не раньше, чем через 3-5 минут после заполнения камеры, чтобы клетки осели и при микроскопировании были видны в одной плоскости. Подсчет числа клеток проводят с объективом 8х или 4Ох. Число клеток дрожжей обычно подсчитывают в 10 больших квадратах сетки, перемещая последние по диагонали. Учитывают все клетки, лежащие в квадрате сетки, а также пересекающие верхнюю и правую стороны квадрата. При подсчете число клеток в большом квадрате не должно превышать 20, в противном случае исходную суспензию дрожжей разводят водопроводной водой. Для получения достоверного результата общее число подсчитанных клеток микроорганизмов должно быть не менее 600. Число клеток в 1 см куб. исходной суспензии: М = а х 1000 / h х S х п, где: а - среднее число клеток в квадрате сетки; h - глубина камеры, мм; S - площадь квадрата сетки, мм кв.; п - разведение исходной суспензии; 1000 мм куб. = 1 см куб. Определение морфологического состояния клеток Морфологическое состояние клеток определяют путем микроскопирования. Дрожжи должны иметь форму и размеры, соответствующие применяемой расе. Клетки должны быть равномерной величины, с тонкой оболочкой, однородной или мелкозернистой цитоплазмой, небольшими вакуолями. Определение биологической чистоты Для оценки биологической чистоты дрожжей микроскопирование проводят следующим образом: к дрожжевой суспензии для растворения белков прибавляют одну каплю 10%-ного раствора щелочи. Препарат просматривают под микроскопом не менее, чем в 20 полях зрения. В каждом поле зрения должно быть около 50 клеток. Таким образом, просматривают 1000 дрожжевых клеток и определяют содержание диких дрожжей и бактерий. Годными считаются семенные дрожжи, которые содержат не более 1% бактерий и 0,5% диких дрожжей. Определение числа мертвых клеток (окраска по Финку) Определение числа мертвых клеток проводят микроскопированием, окрасив препарат раствором метиленового синего6 с рН=4,6, в котором число окрашенных клеток соответствует действительному числу мертвых клеток в суспензии дрожжей. На предметное стекло наносят одну каплю дрожжевой суспензии и одну каплю краски и накрывают покровным стеклом. Подсчитывают количество всех клеток и в их числе клетки, окрашенные в синий цвет, в 10 полях зрения препарата и вы- 6 Краситель, раньше можно было купить в аптеке, раствор в ампулах.
числяют содержание мертвых клеток в процентах. В хороших семенных дрожжах содержится не более 10% мертвых клеток. Определение способности дрожжей к размножению Способность дрожжей к размножению характеризует количество почкующихся клеток. Число клеток с почками подсчитывают под микроскопом в 10 полях зрения и выражают в процентах к общему количеству. Активно размножающиеся дрожжи содержат 40-70% почкующихся клеток. Определение способности дрожжей к оседанию Для определения способности дрожжей к оседанию сухие пивоваренные дрожжи в количестве 3 г смывают физиологическим раствором (0,85%-ный раствор поваренной соли) в мерный цилиндр вместимостью 500 см3 и диаметром 5 см и доливают до объема 400 см3. После взбалтывания в течение 1 минуты цилиндр оставляют в покое и через 12 минут определяют объем осевших дрожжей. Хорошие хлопьевидные дрожжи за это время образуют осадок толщиной не менее 28 мм.
Электроника ЭКОНОМИЧНЫЙ ИСТОЧНИК ПИТАНИЯ СЧЕТЧИКА ГЕЙГЕРА В автономных приборах непрерывного радиационного контроля, использующих в качестве датчиков радиации счетчики Гейгера, основным энергопотребителем является устройство, преобразующее невысокое напряжение источника питания прибора в напряжение 360...44О В, соответствующее плато счетной характеристики галогенового счетчика Гейгера. Принципиальная схема энергоэкономичного преобразователя напряжений показана на рис. Л CI 220мк* 40 В CZ =*= 0,33 мк СЗ 2,2 мк ' 16В ш X 'tOOВ (К счетчику Гейгера) VSI ую,т 2юо* взо в КД102А J_ BBI К561ЛА7 1щщ^20мкА & г4 UDI2. VB2 КД102А ВВП VTI КТ31ПА А7 <г7к С5 0,033мк$\ 8, R3 ЮМ '5В 1Г А 8ы6 Н DDI +5В £-К6ый7 0В1 Его основу составляет блокинг-генератор, на выходной обмотке которого формируются короткие (5...10 мкс) импульсы амплитудой около 420 В. Через диоды VD3, VD4 они заряжают конденсатор С4. Этот конденсатор и будет источником питания счетчика Гейгера (напомним, что проводимость счетчика Гейгера в паузе между возбуждениями близка к нулю).
Энергоэкономичность преобразователя обеспечивается тем, что межимпульсная пауза в его блокинг-генераторе задается не собственной времязадающей цепочкой R1C3, как это обычно делается, а одновибратором (DDI.1, DDI.2 и др.), работающим на микротоках. Продолжительность паузы в нем tn « R3•С5 выбирают так, чтобы напряжение на выходе преобразователя в режиме фонового счета было близко к высшему значению напряжения на плато счетной характеристики счетчика Гейгера. (В дальнейшем снижение напряжения на выходе преобразователя, его смещение к другому краю плато будет обязано лишь снижению напряжения источника питания.) Блокинг-генератор сформирует внеочередной импульс подпитки конденсатора С4, если на входе 2 элемента DDI.2 возникнет провоцирующий ее импульс. Если этот импульс будет возникать при каждом срабатывании счетчика Гейгера, то это позволит удержать напряжение на выходе преобразователя на уровне, не зависящем от скорости счета. Трансформатор Т1 блокинг-генератора наматывают на ферритовом сердечнике, составленном из двух колец М3000МН 12x8x3 мм. Кольца склеивают, острые их ребра заглаживают наждачной бумагой, и весь сердечник обматывают тонкой фторопластовой или лавсановой лентой. Сначала наматывают обмотку II, она содержит 420 витков провода ПЭВ-2 0,07. Намотку ведут в одну сторону, почти виток к витку, оставляя между ее началом и концом «зазор» 1...1.5 мм. Обмотку II также покрывают слоем изоляции. Далее наматывают обмотку 1-5 витков провода ПЭВШО 0,15...0,2 - и по ней - обмотку III - 2 витка того же провода. Эти обмотки должны быть распределены по сердечнику возможно равномернее. Правильная фазировка обмоток трансформатора (точками показаны их синфазные концы) должна быть соблюдена при его монтаже. Экспериментировать с этим не следует - можно сжечь транзистор. В преобразователе: резисторы Rl, R2 - типа МЛТ-0,125, R3 - КИМ-0,125; конденсатор С1 - любой оксидный, С2, С5 - типа КМ-6 или К10-176, СЗ - К53-30, С4 - К73-9. Преобразователи такой структуры закрывают, по существу, саму проблему питания счетчиков Гейгера от низковольтных источников: потребляемый таким преобразователем ток уже составляет малую часть тока саморазряда большинства гальванических батарей.
СЦИНТИЛЛЯЦИОННЫЕ ДЕТЕКТОРЫ ИОНИЗИРУЮЩЕГО ИЗЛУЧЕНИЯ Для обнаружения ионизирующего излучения нередко используют способность некоторых веществ - сцинтилляторов - делать видимой, светящейся траекторию «простреливающей» их ионизирующей частицы. Сцинтилляционные детекторы ионизирующих излучений имеют определенное преимущество перед счетчиками Гейгера - по амплитуде и длительности вспышки можно судить о типе и энергии породившей ее частицы. Важно и то, что сцинтилля- ционный счетчик имеет значительно большую эффективность, нежели счетчик Гейгера, фиксирующий обычно лишь одну-две частицы из ста в него попавших. Конструктивно сцинтилляционный счетчик прост: нужный сцинтиллятор наклеивают на катод фотоэлектронного умножителя (ФЭУ) и все это помещают в тщательно изолированный от посторонней подсветки бокс. Остальное - подсчет фотоимпульсов , сортировка их по амплитуде, форме и т.п. - дело обычной электронной техники. Принципиальная схема фотоголовки сцинтилляционного счетчика приведена на рис. 1, а высоковольтного преобразователя для ее питания - на рис. 2. Напряжение питания ФЭУ - высокое по отношению к «земле» - подают обычно на его катод. Это позволяет связать анодную цепь ФЭУ с электронным анализатором прибора гальванически, учитывать при необходимости и постоянную составляющую его фототока. Напряжение питания ФЭУ, его распределение между динодами и, соответственно, соотношения номиналов резисторов R2...R13, составляющих динодный делитель, зависят от типа фотоумножителя. Здесь мы воспользовались относительно низковольтным ФЭУ-85. Поскольку режим работы ФЭУ в сцинтилляторах бытового назначения близок к «темновому», сопротивления динодных резисторов могут быть и значительно выше рекомендованных (при сохранении пропорций). ФЭУ-85 № Ю Я4 R5 R6 Я1 R8 № МО Rll RI2 RtJ « J300«1,6 кВ R2,R3 3,3 М; Refill JH Ы Rt5 ± RI2.RI3 6,1 М Ч 22к Ч2В Ч2В 04/ K55WA3 СЗ 0,15 мк ' Рис. 1. Фотоголовка сцинтилляционного детектора ионизирующей радиации Единственная оперативная регулировка в канале - резистор R14 - выполняет очень важную функцию: на компараторе DA1 им задают пороговое напряжение U3-4.
Лишь импульсы, имеющие амплитуду иимп>иЗ-4, откроют компаратор и на его выходе (выв. 9) будет сформирован импульс цифрового стандарта. В автономной, дозиметрической аппаратуре, использующей ФЭУ, возникает проблема их питания. Необходимое ФЭУ высокое напряжение ифэу (0,8...1 кВ и более) , требования к его стабильности (фоточувствительность ФЭУ довольно сильно зависит от напряжения питания) предъявляют к устройствам, формирующим это напряжение, довольно жесткие требования. +12В т 220мя-> 0,68 МК *16В -1- 18 к т .г/ 1 220нк» _L *1бВ К 5,1М С п Чш 2IWU-I Ш5 36004,6КВ ¥73 КПЗОЗГ СИ— RB 620 N R9 270^ 0,33 КК R8 270 я С6 3300* 1,6 кВ НИ Uifj^KKOinoBn РЭУ) Рис. 2. Преобразователь для питания ФЭУ Основу высоковольтного преобразователя, показанного на рис. 2, составляет блокинг-генератор, формирующий на обмотке II трансформатора Т1 импульсы напряжения с амплитудой иимп « ифэу. Через диодный столб VD3 они заряжают конденсатор С5, который становится таким образом источником питания фотоумножителя. Пульсации ифэу (они имею форму «пилы» с временными интервалами между «Зубцами» tn « R7-C4) снимает RC-фильтр (С5, R8, С6, R9, С7). В цепь питания блокинг-генератора введен транзистор VT2, коллекторный ток которого зависит от тока базы, зависящего, в свою очередь, от тока стока полевого транзистора VT3 . Напряжение на Затворе этого транзистора зависит от ифэу, напряжения на стабилитроне VD1 (транзистор VT1 - его токозадающий «резистор») и соотношения «плечей» делителя R3+R4, R6 (резистором R3 выставляют нужное ифэу). Легко видеть, что при понижении ифэу (по абсолютной величине), возникшем по какой-либо дестабилизирующей причине, напряжение питания блокинг-генератора увеличится и воздействие дестабилизирующего фактора будет тем самым в значительной мере компенсировано. Трансформатор блокинг-генератора наматывают на ферритовом кольце М3000МН 20x12x6 мм. В связи с тем, что этот феррит имеет низкое объемное сопротивление, острые ребра сердечника необходимо загладить и тщательно весь его изолировать; обмотать, например, лавсановой или фторопластовой лентой. Первой наматывают обмотку II, содержащую 800 витков провода ПЭВ-2 0,07. Намотку ведут в одну сторону, почти виток к витку, оставляя между началом и концом обмотки промежуток 2...3 мм. Обмотку II также покрывают слоем изоляции. Обмотку I (8 витков ПЭВШО 0,15...0,25) и обмотку III (3 витка тем же проводом) укладывают по сердечнику возможно равномернее. Фазировка обмоток (точками на Т1 отмечены их синфазные концы) должна быть соблюдена при монтаже трансформатора.
О деталях преобразователя. Резистор R6 - КИМ-0,125, R3 - СП-38А, другие - МЛТ-0,125 и 0,25. Конденсаторы СЗ, С4 - КМ-6 или К10-176; С5 ,С7 - К15-5-Н70 (1,5 кВ) или другие керамические на напряжение не менее 1 кВ; С1 и С2 - любые оксидные. Диодный столб 2Ц111А-1 можно заменить четырьмя последовательно включенными диодами типа КД102А. При каких-либо иных заменах нужно иметь в виду, что диодный столб VD3 не только должен иметь высокое обратное напряжение - не менее ифэу, но и малый (при этом напряжении) ток утечки - не более 0 ,1 мкА. Транзистор блокинг-генератора можно заменить на КТ630В. Здесь определяющим параметром является напряжение насыщения транзистора в импульсном режиме: при токе в импульсе l...l,5 А - икэ нас имп >0,3 В. Остаточное напряжение на коллекторе транзистора нетрудно оценить по осциллограмме: по «зазору» между плоской вершиной импульса и линией нулевого потенциала. Ток, потребляемый высоковольтным преобразователем от источника питания, будет зависеть, конечно, от нагрузки. С двумя описанными здесь сцинтилляционны- ми головками, работавшими в режиме радиационного локатора, он не превышал 16 мА.
РАДИОЛЮБИТЕЛЬСКИЙ ДОЗИМЕТР Ионизирующая радиация опасна для человека в любых дозах. В небольших ее воздействие оказывается очень замаскированным - последствия могут проявиться спустя годы, десятилетия и даже в следующих поколениях (онкология, генетические повреждения и др.). С увеличением уровня облучения не только возрастает вероятность таких последствий, но в организме человека возникают нарушения, которые могут привести его к гибели в считанные дни, часы, а то и прямо «под лучом». Так что знать уровень радиации, иметь возможность хотя бы приблизительно оценить его представляется никак не лишним. Обнаружив повышенный уровень ионизирующего излучения, естественно поинтересоваться его источником. Что это: тайно захороненные радиоактивные отходы? Ускоритель соседнего НИИ? Рентгеновский аппарат, «светящий» не туда? Изотопная «мина» просвещенного киллера? Выброшенный за ненадобностью пожарный датчик? Радиоактивный минерал? Кость динозавра?... Какова активность обнаруженного? Конфигурация его излучения?... Для ответов на все эти вопросы нужен прибор, способный в каких- то единицах измерять уровень ионизирующего излучения . Принципиальная схема радиолюбительского дозиметра, ведущего измерения ионизирующего излучения в ЕРФ - в единицах естественного радиационного фона (Бф « 15 мкР/ч), приведена на рис. Датчиком радиации BD1 в дозиметре является счетчик Гейгера типа СБМ20, чувствительный к у- и жесткому р-излучению. Его реакция на естественный радиационный фон - импульсы тока, следующие без видимого порядка со средней скоростью Na = 20...25 имп/мин. Скорость счета в счетчиках Гейгера линейно связана с уровнем радиации. Рис. 1. Принципиальная схема.
Так, на десятикратное увеличение ее уровня счетчик СБМ20 отреагирует десятикратным же увеличением скорости счета - до Ырад = 200...250 имп/мин. Прямая пропорциональность преобразования Ырад <--> Брад начнет нарушаться лишь при очень значительных уровнях радиации, с появлением большого числа импульсов, разделенных слишком малым, за пределами разрешающей способности счетчика, временным интервалом. В паспорте счетчика обычно указывают Nmax - максимальную скорость счета. Для счетчика СБМ20 Nmax = 4000 имп/с. И если он сохранит линейность преобразования Ырад <--> Брад хотя бы до 2000 имп/с, то по скорости счета можно будет численно оценивать радиационные поля в диапазоне Брад =(1...5000) Бф - более чем достаточном для бытового прибора. Рекомендуемое напряжение питания счетчика СБМ20 - ипит = 360...440 В. На этот диапазон напряжений приходится так называемое плато: изменения ипит в этих пределах мало сказывается на скорости счета и принимать меры к его стабилизации нет необходимости. Во всяком случае - в приборах умеренной точности . Устройство, преобразующее напряжение батареи, питающей дозиметр, в высокое напряжение ипит на аноде счетчика Гейгера, построено на блокинг-генераторе (Tl, VT1 и др.) . На повышающей обмотке I его трансформатора формируется короткий - 5...10 мкс - импульс амплитудой 440...450 В, заряжающий через диоды VD1, УБ2 конденсатор С1. Частота следования импульсов блокинг-генератора F « 1/2R6-C3 « 40 Гц. Каждая ионизирующая частица, возбуждающая счетчик Гейгера, становится причиной короткого лавинообразно развивающегося разряда. Возникающие на нагрузке счетчика, резисторе R1, импульсы напряжения поступают на одновибратор (ББ10.3, ББ10.4 и др.), формирующий из них «прямоугольные» импульсы длительностью tфl « R7-C7 « 0,2 мс и амплитудой, достаточной для управления КМОП- микросхемами. Все нужные в приборе временные интервалы и частоты формирует счетчик ББ1. Его задающий генератор работает на частоте кварцевого резонатора ZQ1 - 32768 Гц. Счетный узел дозиметра составлен из трех десятичных счетчиков ББ4, ББ5, ББ6, люминесцентные индикаторы HG1, HG2 и HG3 которых индицируют, соответственно , «единицы», «десятки» и «сотни», и одного двоичного счетчика - ББ7, представляющего «тысячи». Выходы десятичных счетчиков подключены к соответствующим сегментам люминесцентных индикаторов, а выходы счетчика ББ7 - к децимальным точкам этих же индикаторов, на которых «тысячи» индицируются в двоичном коде: 000 - «0», 001 - «1», 010 - «2»,..., 110 - «6», 111 - «7» ( 0 - точка «не горит», 1 - точка «горит»). Емкость счетного узла увеличивается таким образом до «7999». Счетчик ББЗ формирует единицу измерения, принятую в этом приборе. Если его датчик находится в условиях нормального радиационного фона, то на измерительном интервале т;изм = 39 с (это длительность «нуля» на выходе М счетчика ББ1) на вход ББЗ поступает в среднем Ыф-39/60 = (20. . .25) • 39/60 « 16 импульсов. Т.е. в норме, при Ырад « Ыф на табло счетчика будет зафиксировано: «000», если Ырад<16, или «001», если 16<Ырад<32 (время tH3M выбрано так, чтобы флуктуации Ыф практически никогда не достигали значения 2Ыф ). Измерительный интервал т;изм завершается Ьтлнд - 3-секундной демонстрацией результата измерения. Ее формирует счетчик ББ2. На время t блокируется вход счетного узла и включается устройство (VT3, VT4, Т2 и др.), преобразующее на-
пряжение питания микросхем в значительно более низкое напряжение питания накалов люминесцентных индикаторов. Его форма - меандр, частота - 32768 Гц. Интервал индикации Ьтлнд заканчивается переводом всех счетчиков прибора в нулевое состояние. И тут же начинается новый цикл измерения. Прибор смонтирован на односторонней печатной плате размерами 123x88 мм, изготовленной из фольгированного стеклотекстолита толщиной 1,5 мм (рис. 75). На плате установлены все детали, кроме выключателя питания, звукоизлучателя и батареи «Корунд». Почти все резисторы в приборе - типа МЛТ-0,125 (R1 - КИМ- 0,125) . Конденсаторы: CI - К73-9, С2 - КДУ или К2М (на напряжение не менее 500 В), СЗ, С4 и С5 - К53-1, остальные - КМ-6, К10-176 и др.. Трансформатор Т1 наматывают на ферритовом кольце М3000МН К16x10x4,5, предварительно загладив его ребра наждачной бумагой и обмотав тонкой лавсановой или фторопластовой лентой. Первой наматывают обмотку I, содержащую 420 вит ков провода ПЭВ-2 0,07. Ее размещают почти по всему сердечнику, с промежутком 1,5...2 мм между началом и концом. Намотку ведут почти виток к витку, смещаясь по сердечнику лишь в одну сторону. Обмотку I также покрывают слоем изоляции. Обмотки II (8 витков) и III (3 витка) наматывают проводом ПЭВШО 0,15...0,25. • I.. Рис. 2. Печатная плата дозиметра Они должны быть распределены по сердечнику возможно равномернее. При монтаже трансформатора необходимо соблюдать фазировку его обмоток (их начала отме-
чены на схеме значком «•») . Экспериментировать с этим не следует - можно сжечь транзистор VT1. Трансформатор Т2 наматывают на кольце К10х6х5 (феррит 2000НН). Его готовят к намотке так же, как и сердечник для трансформатора Т1. Обмотку I (400 витков) наматывают в два провода (ПЭВ-2 0,07). Конец одной полуобмотки соединяют с началом другой, так образуется средняя точка. Обмотка II содержит 17 витков провода ПЭВ-2 0,25...0,4. Снаружи трансформаторы рекомендуется обмотать пластиковой изолентой - узкой полоской, вырезанной из липкой ПВХ. Это защитит их от неблагоприятных внешних воздействий. Крепят трансформаторы винтом МЗ (резьба в плате). Более простое, казалось бы, крепление трансформатора проволочной скобой таит в себе опасность : скоба может образовать в трансформаторе короткозамкнутый виток; нередкая, к сожалению, ошибка. Во избежание обрыва обмотки или замыкания ее витков крепление должно быть мягким, эластичным. Плату монтируют на передней панели прибора (ударопрочный полистирол, дюралюминий и т.п.), в которой вырезано окно против люминесцентных индикаторов. Оно может быть закрыто зеленым фильтром. На ней же в вырезе нужного размера монтируют пъезоизлучатель ЗП-1 или ЗП-22. А под светодиод HL1 делают соответствующее его размерам отверстие. Корпус прибора - стандартная пластмассовая коробка 130x95x20 мм (например, из-под шашек). Во избежание заметного уменьшения чувствительности прибора к мягкому ионизирующему излучению в стенке корпуса, примыкающей к счетчику Гейгера, нужно сделать вырез 10x65 мм, который затем можно перекрыть редкой решеткой . Конечно, далеко не все из вышеперечисленного является строго обязательным. Резисторы типа МЛТ можно заменить на другие такого же размера. В качестве VT3, VT4 могут быть взяты практически любые n-p-п транзисторы. Если их усиление по току будет невелико, потребуется, возможно, несколько уменьшить сопротивление резисторов R9 и R10. Возможна и даже желательна замена люминесцентных индикаторов ИВЗ на ИВЗА, имеющие меньший ток накала. Рис. 3. Дешифратор для коррекции Ыф {Ыф = 16) Не является незаменимым и счетчик СБМ20. Пригодны любые 400-вольтные счетчики Гейгера, имеющие фоновую активность Ыф « 24 имп/мин. В этом случае в схему прибора не потребуется вносить никаких изменений. Если же Ыф будет иным, то между выходами 1, 2, 4, 8 и 16 счетчика DD3 и входом счетчика- накопителя нужно включить диодно-резисторный дешифратор, в котором установкой
соответствующих диодов должно быть набрано число, возможно более близкое к 0,65 Ыф. На фрагменте схемы (рис. 76) показано, как это сделать для Ыф = 16. Здесь 0,65 Ыф « 11, что в двоичном коде и набрано в дешифраторе. На печатной плате предусмотрено место для установки диодно-резисторного дешифратора. Возможен и другой путь: требуемое Ыф может быть получено параллельным включением нескольких малочувствительных счетчиков Гейгера. Подойдет, например, «батарея» из пяти счетчиков СБМ10 или СБМ21. Светодиод HL1, включающийся при переполнении счетчика-накопителя, т.е. при очень высоком уровне ионизирующего излучения, должен быть красным и возможно более ярким: АЛ307КМ, АЛ307ЛМ и др. Параметры трансформатора Т1 выбраны так, что при разряде батареи питания напряжение на счетчике Гейгера остается в пределах плато счетной характеристики . Таблица демонстрирует зависимость скорости счета от напряжении питания прибора при неизменной активности источника радиации. Напряжение питания,В9,0 8,0 7,0 6,0 5,6 Скорость счета, ед. Ыф 35,8 34,2 34,0 32,8 32,8 Табло счетчика-накопителя может быть выполнено и на жидко-кристаллических индикаторах. Принципиальная схема этого узла с табло типа ИЖЦ5-4/8 показана на рис. 77. Поскольку в табло ИЖЦ5-4/8 четыре разряда, счетчик «тысяч» выполнен здесь аналогично предыдущим - на десятичном счетчике К176ИЕ4. В дозиметре с ЖКИ не нужен, конечно, блок формирования напряжения накала. Поэтому элементы VT3, VT4, Т2, R9, R10 могут быть удалены, a DD9.1 и DD9.2 использованы по другому назначению (в противном случае их входы нужно соединить с «землей» или с «+» источника питания).
Счетчик DD7 может быть сохранен, но лишь для формирования сигнала тревоги: при появлении на табло «8000» - уровня радиации, в 8000 раз превышающего уровень естественного радиационного фона, - он включит тревожную звуковую и световую сигнализации. Еще одна особенность ЖКИ - сигнал на его сегменте должен иметь форму меандра. Сегмент становится заметным (черным), если его меандр находится в проти- вофазе с меандром подложки ЖКИ (выводы 1 и 34) , и остается фоновым, не выделенным, если их фазы совпадают. Счетчик К176ИЕ4 формирует на своих выходах меандры «единичной» и «нулевой» фазы, если на его вход S (выв. 6) подан опорный меандр с частотой следования несколько десятков или сотен герц. Можно, например, подключить входы S всех четырех счетчиков к выходу F (частота 1024 Гц) счетчика QD1. Энергоэкономичность дозиметра с жидкокристаллическим табло будет, конечно, значительно выше, нежели с люминесцентным.
ПРИБОР НЕПРЕРЫВНОГО РАДИАЦИОННОГО КОНТРОЛЯ Прибор непрерывного радиационного контроля - радиационный технорецептор - отличается от дозиметрического прежде всего своим назначением: он обязан своевременно поставить в известность своего владельца о его сближении с источником радиации, о появлении пока еще потенциальной для него опасности. Техническое обеспечение такого режима работы прибора сказывается почти на всех его параметрах. Так, если энергоэкономичность дозиметра является для него показателем достаточно второстепенным, то для технорецептора он - из важнейших: прибор, не способный работать непрерывно, требующий постоянной заботы о своем энергообеспечении, вообще не может быть отнесен к этой категории. С другой стороны, почти теряет смысл вопрос о точности технорецептора. Во всяком случае, в выборе между возможностью «видеть» широкий спектр радиационных излучений и точностью количественной оценки только какой-то его разновидности - лишь гамма-излучения, например, - безусловный приоритет будет иметь спектральная широкополосность прибора. Различаются эти приборы и по форме представления информации. Радиационный технорецептор должен включать ее в рецепторное пространство человека. То есть, он должен обладать способностью информировать своего владельца о радиационной обстановке и ее изменении без какого-либо запроса с его стороны. Обычные в измерительной технике табло и шкалы здесь, очевидно, ничем помочь не могут. Особые требования предъявляются и к надежности технорецептора. Она должна быть не только высокой, но и постоянно проверяемой - отказ прибора должен обнаруживаться незамедлительно. Прибор радиационного контроля должен обладать и высокой радиационной чувствительностью, во всяком случае - быть способным контролировать естественный радиационный фон и практически мгновенно реагировать на сколько-нибудь заметные его изменения. И, наконец, все это мало бы чего стоило, если бы стоило дорого... С учетом вышеизложенного и был спроектирован этот прибор. Его основные параметры: • Спектр контролируемых излучении Р(>0,5 МэВ), у(>0,05 МэВ) • Реакция на естественный радиационный фон (ЕРФ) - акустические импульсы- щелчки, следующие со средней частотой 15...25 имп/мин; • Реакция на изменение уровня радиации - изменение скорости счета (линейная зависимость); • Порог тревожной сигнализации 4...5 ЕРФ • Напряжение источника питания 9 В • Потребляемый ток: в фоновых радиационных полях - 0,15...0,2 мА, в режиме тревожной сигнализации - 3... 4 мА. • Время непрерывной работы (с батареей «Корунд») > 5000 часов • Время выхода на рабочий режим < 1с Принципиальная схема прибора показана на рис. 1. В качестве датчика ионизирующей радиации BD1 используется счетчик Гейгера типа СБМ20. Высокое, напря-
жение на его аноде формирует блокинг-генератор: импульсы напряжения с повышающей обмотки I трансформатора Т1 через диоды VD1, VD2 заряжают конденсатор фильтра С1. Нагрузкой счетчика служит резистор R1 и элементы, связанные с входом 8 микросхемы DDI. Рис. 1. Принципиальная схема На элементах DD1.1, DDI.2, СЗ и R4 собран одновибратор, преобразующий импульс, поступающий со счетчика Гейгера и имеющий затянутый спад, в «прямоугольный» , длительностью 5 ... 7 мс. Фрагмент схемы, включающий в себя элементы DD1.3, DDI.4, С4 и R5, представляет собой управляемый по входу 6 DDI звуковой генератор, возбуждающийся на частоте F « 1/2-R5-C4 « 1 кГц, к парафазному выходу которого (выходы 3 и 4 DDI) подключен пьезоизлучатель НА1. Акустический импульс-щелчок возбуждается в нем «пачкой» электрических импульсов. На элементах VD4, R8...R10, С8 и С9 собран интегратор, управляющий работой порогового усилителя, выполненного на микросхеме DD2. Напряжение на конденсаторе С9 зависит от средней частоты возбуждения счетчика Гейгера; по достижении им потенциала отпирания полевого транзистора, входящего в DD2, включается светодиод HL1: частота и длительность его вспышек будут расти с увеличением уровня радиации. Прибор монтируют на печатной плате, изготовленной из двустороннего стеклотекстолита толщиной 1,5 мм (рис. 69, а). Фольга обратной стороны используется лишь в качестве нулевой шины (она соединена с «-» источника питания), в местах пропуска проводников в ней вытравлены кружки диаметром 1,5...2 мм. Двухцокольный счетчик СБМ20 крепят на печатной плате жесткими скобками (стальная проволока диаметром 0,8...О,9 мм). Их надевают внатяг на выводы счетчика и впаивают в предназначенные для них отверстия. Счетчик с мягкими
выводами (другое оформление счетчика СБМ20) крепят за корпус охватывающими его тонкими скобками (монтажный провод диаметром 0,4...0,6 мм) , отверстия для их распайки - «а-б» и «в-г». Рис. 2. Печатная плата Трансформатор Т1 наматывают на кольцевом сердечнике М3000НМ типоразмера К16x10x4,5 мм. Острые ребра сердечника предварительно заглаживают шкуркой и покрывают весь сердечник электрически и механически прочной изоляцией, например, обматывают лавсановой или фторопластовой лентой. Первой наматывают обмотку I, она содержит 420 витков Провода ПЭВ-2-0,07. Обмотку ведут почти виток к витку, в одну сторону, оставляя между ее началом и концом промежуток в 1... 2 мм. Обмотку I также покрывают изоляцией. Далее наматывают обмотку II-8 витков провода диаметром 0,15...0,2 мм в произвольной изоляции, и поверх нее - обмотку III - 3 витка тем же проводом. Эти обмотки также должны быть распределены по сердечнику возможно равномернее. Расположение обмоток и их выводов должно соответствовать рисунку печатной платы, а их фазировка - указанной на принципиальной схеме (синфазные концы обмоток обозначены точками). Готовый трансформатор рекомендуется покрыть слоем гидроизоляции - обмотать, например, узкой полоской липкой пластиковой ленты. На плату трансформатор крепят винтом МЗ между двумя эластичными, не продавливающими обмоток, шайбами .
При сборке прибора рекомендуется использовать следующие типы конденсаторов: CI - К73-9-630В, С2 - КД-26-500В, С8 и С9 - К10-17-26, С5 - К53-30 или К53- 19; С7, СЮ - К50-40 или К50-35. При возможных заменах следует иметь в виду, что завышенные утечки конденсаторов С1 и С2 (как и обратный ток диодов VD1 и VD2) могут резко увеличить энергопотребление прибора. Оно может быть заметно увеличено и неудачным выбором конденсатора С5. Резисторы: R1 - КИМ-0,125 или СЗ-14-0,125, остальные - МЛТ-0,125, С2-23- ОД25 или С2-33-ОД25. В качестве DDI можно, конечно, взять микросхему К561ЛА7. Диод КД510А - заменить любым кремниевым с током в импульсе не менее 0,5 А. Светодиод годится практически любой, критерий здесь - достаточная яркость. Пьезоизлучатель барабанного типа ЗП-1 может быть заменен излучателем с акустическим резонатором - ЗП-12 или ЗП-22. Возможно применение и других пьезо- излучателей. Критерий здесь - достаточна громкость. В приборе можно использовать не только счетчики Гейгера типа СБМ20. Годятся, без заметных изменений потребительских свойств и каких-либо переделок прибора, счетчики типа СТС5, СБМ32 и СБМ32К. Но существуют счетчики Гейгера, способные значительно увеличить общую и спектральную чувствительность прибора. Например, СБТ7, СБТ9, СБТ10А, СБТ11, СИ8Б, СИ13Б, СИ14Б. Все они имеют тонкие слюдяные «окна» и обладают высокой чувствительностью не только к гамма- и жесткому бета-, но и к мягкому бета- излучению (а СБТ11 - и к альфа-излучению). Правда, их конфигурация потребует внесения существенных изменений в конструкцию корпуса прибора, в общую его компоновку. Для некоторых из них потребуется и коррекция порога тревожной сигнализации. Ничто, кроме растущих габаритов и стоимости, не может помешать ставить и несколько счетчиков Гейгера (их включают параллельно) - для увеличения общей и спектральной чувствительности прибора. Прибор не требует наладки - правильно собранный, он начинает работать сразу. Но есть в нем два резистора, номиналы которых потребуется, возможно, уточнить. Это резистор R5, с помощью которого частоту звукового генератора выводят на частоту механического резонанса пьезоизлучателя (их значительное несовпадние сказывается на громкости щелчка). И резистор R8, определяющий порог тревожной сигнализации (порог повышается при увеличении сопротивления R8). Коррекция порога может потребоваться не только при использовании счетчика, существенно отличающегося от СБМ20 радиационной чувствительностью, но и при перенастройке прибора для работы в условиях повышенного радиационного фона, в условиях, например, уже состоявшегося радиационного загрязнения местности . Прибор прост в обращении и не требует от владельца какой-либо специальной подготовки. Редкое пощелкивание акустических импульсов, следующих друг за другом без видимого порядка, отсутствие тревожной сигнализации (вспышек све- тодиода) говорят о том, что прибор находится в условиях естественного радиационного фона. Это фоновое пощелкивание почти не зависит от времени суток; сезона и местоположения прибора, несколько замедляясь лишь глубоко под землей и ускоряясь в высокогорье.
Увеличение скорости счета при перемещении прибора, а тем более появление тревожной сигнализации, с очень высокой вероятностью означает, что прибор входит в поле источника радиации искусственного происхождения. Удаление от источника - лучший вид радиационной защиты, удаление источника - лучшая дезактивация . Но можно это сделать и чуть позже, предварительно установив местоположение источника, его связь с тем или иным видимым предметом. Поскольку прибор имеет максимальную чувствительность со стороны своего «окна» — выреза в стенке корпуса, примыкающей к счетчику Гейгера, эта процедура напоминает радиопеленгацию. Направление на источник может быть установлено и приближением к нему: источник находится в направлении, на котором скорость счета растет максимально быстро.
РАДИАЦИОННЫЙ ИНДИКАТОР В РАДИОПРИЕМНИКЕ Транзисторный приемник с введенным в него радиационным детектором не только приобретает новую важную функцию, но объединение этих двух аппаратов имеет очевидные выгоды: корпус, источник питания, усилитель низкой частоты и акустический излучатель могут быть в таком «комбайне» общими. Принципиальная схема радиационного блока, встраиваемого в транзисторный радиоприемник , показана на рис. 1. В его основе - радиационный индикатор из предыдущей статьи. Поскольку различаются эти приборы лишь формой тревожного сигнала (вспышки светодиода там и тональные посылки здесь), то здесь уделим основное внимание возможной конструкции такого «комбайна», стыковке его составляющих . Рис. 1. Принципиальная схема встраиваемого радиационного индикатора Все элементы индикатора, за исключением переключателя SA1, монтируют на двусторонней печатной плате, «монтажная» сторона которой показана на рис. 71. Фольгу со стороны деталей используют лишь в качестве нулевой шины-«земли», в местах пропуска проводников в ней вытравлены кружки диаметром 1,5...2 мм, а места соединения с ней «заземляемых» проводников показаны черными квадратами. Высота устанавливаемых на плату деталей не должна превышать 8...9 мм. Счетчик Гейгера крепят на плате со стороны печатных проводников с помощью надетых внатяг на выводы анода и катода проволочных скоб, впаянных затем в предназначенные для них отверстия. Полностью смонтированный радиационный блок (его габариты 19x23x109 мм, масса 22 г) можно установить в радиоприемник так, как это показано на рис. 3 а. В стенке корпуса делают сквозной вырез 11x109 мм для пропуска счетчика Гейгера. Во избежание возможного его повреждения (корпус счетчика очень тонок) на этот вырез наклеивают глубокую (9 мм) накладку, имеющую форму продолговатой коробки с прорезями - окнами. Такое размещение радиационного блока возможно, если в радиоприемнике найдется свободное пространство 12x19x109 мм.
Рис. 2. Печатная плата индикатора сторожа б) Рис. 3. Варианты размещения индикатора в радиоприемнике Вариант размещения, показанный на рис. 3, б, потребует большего пространства - 21x19x109 мм. Правда, габариты приемника в этом случае почти не изменятся: закрывающая вырез в корпусе (9x92 мм) защитная решетка может иметь толщину лишь 1,5...2 мм. Но если радиоприемник мал или «упакован» так, что установить в нем радиационный блок никак не удается, то его можно поместить в отдельный футляр (рис. 4, а) и, связав с приемником тонким трехпроводным кабелем, носить так, как показано на рис. 4, б. Рис. 4. Радиационный индикатор в выносном блоке Выключатель питания SA1, которым к работающему приемнику подключают радиационный индикатор, можно установить в любом удобном для этого месте. Нередко в качестве выключателя удается использовать тот или иной коммутационный элемент самого приемника - например, свободную или не слишком нужную позицию пе-
реключателя диапазонов. Включенный индикатор никак не повлияет на работу приемника - на фоне принимаемой программы появятся лишь редкие (при нормальном радиационном фоне 15...25 имп/мин) акустические щелчки. Радиационный индикатор рассчитан на установку в радиоприемники, имеющие 9- вольтное питание. Но его можно переделать и для работы в приемниках, питающихся от 6-вольтных батарей. Для этого потребуется лишь изменить моточные данные трансформатора Т1: обмотка II должна иметь 5, а обмотка III - 2 витка провода ПЭВШО-0,12.,.О,15. Обмотка I остается без изменений - все те же 420 витков ПЭВ-2-0,07. Среди транзисторных приемников, особенно старых выпусков, могут оказаться модели, в которых с нулевой шиной-«землей» соединен не минус источника питания , а плюс. В таких случаях нужно лишь переполюсовать питание индикатора: соединить его «+» с «землей», а общий провод - с «-» радиоприемника. Номинал резистора R6 выбирают в пределах (10...20)R, где R - сопротивление регулятора громкости радиоприемника. Накладку или решетку, защищающую счетчик Гейгера от возможного повреждения, изготавливают из того же материала, что и корпус приемника. Если это ударопрочный полистирол (обычно это так), то для их склейки можно использовать распущенную в растворителе 647 стружку того же полистирола (того же цвета). Это по существу сварное соединение отличается высокой прочностью. Тем же клеем крепят к корпусу приемника и полистироловые стойки - опоры под печатную плату. Они должны иметь отверстия с резьбой под винт М2. Подходящие стойки, даже с залитыми в них металлическими вкладышами, нередко обнаруживаются в корпусах выброшенных электро- и радиоаппаратов самого разного назначения. Трудности объединения этих двух аппаратов связаны, очевидно, с тем, что обычные бытовые транзисторные радиоприемники изначально на такое их применение не рассчитаны. Конечно, все элементы радиационного блока можно было бы разместить на общей с радиоприемником печатной плате, предусмотрев в его корпусе соответствующее «окно» для счетчика Гейгера. Обратим внимание будущих конструкторов таких «комбайнов» на особенности УНЧ, противоречивость предъявляемых к нему здесь требований. С одной стороны, при работе с радиоприемником УНЧ должен иметь достаточно малые нелинейные искажения, а с другой - при работе лишь с радиационным индикатором - предельно малое, в паузе близкое к нулю, энергопотребление (ток, потребляемый самим индикатором, <0,2 мА). Энергоэкономичность режима радиационного контроля вовсе не самоцель - в сомнительных обстоятельствах радиационную обстановку контролируют непрерывно. В заключение заметим, что описанный здесь радиационный индикатор сохранит свою главную функцию - функцию прибора, следящего за радиационной обстановкой , и без узла, формирующего тревожный сигнал. Поэтому при необходимости (отсутствии, например, микросхемы К176ЛП1) этот узел можно исключить (исключают микросхему DD2, диоды VD4 и VD5, резисторы R8...R13, конденсаторы С8 и С9, а вывод 10 элемента DDI.1 соединяют непосредственно с выводом 6 элемента DDI .3) .
ДАТЧИК РАДИАЦИИ В ОХРАННОЙ СИСТЕМЕ Принципиальная схема датчика, непрерывно контролирующего радиационную обстановку в районе своего расположения, показана на рис. 1. Транзистор VT1, импульсный трансформатор Т1 и др. составляют блокинг- генератор, импульсы с повышающей обмотки I которого через диоды VD1, VD2 заряжают конденсатор С1 до напряжения +360...440 В. Этот конденсатор - источник питания счетчика Гейгера BD1. Импульс напряжения, возникающий на аноде BD1 в момент его возбуждения ионизирующей частицей (см. осциллограмму), поступает на вход формирователя (DDI.1, DDI.2 и др.), преобразующего его в «прямоугольный» длительностью R6•С5 « 1 мс, и затем на вход С счетчика DD2. Выходом датчика является выход «32» счетчика DD2, на котором сигнал 1 - признак радиационной опасности - возникнет лишь в том случае, если Nt - общее число импульсов, поступивших на С-вход счетчика За время Т, достигнет 32. Поскольку Nt зависит от Ыф - средней скорости счета счетчика Гейгера в условиях естественного радиационного фона и ОЫф - его флуктуации, возникающих из-за краткости измерений, то длительность измерительного интервала Т должна быть такой, чтобы вероятность появления Nt +DNt = 32 в результате какого-либо измерения оказалась бы пренебрежимо малой (по характеру происходящих здесь процессов она не может быть равна нулю). Рис. 1. Датчик радиации Так, например, если в счетчике Гейгера, имеющего Ыф = 20 имп/мин (это устанавливают длительными измерениями), при экспозиции Т = 1 мин флуктуации DNt max = 10, т.е. не выходят из пределов 10 имп/мин (это устанавливают в процессе измерения Ыф), то Nt max=20+10<32 и такой датчик не поднимет ложной тревоги .
Может показаться, что измерения можно было бы легко ускорить. Взяв, например, Т = 1/2 мин и сделав выходом датчика выход «16» счетчика DD2. Но если «постоянная составляющая» фона в таком случае уменьшится вдвое и составит Ыф/2 = 10, то его флуктуации - лишь в Ц2 раз, до DNt тах/Ц2 = 10/Ц2 = 7. В таком случае Nt max=10+7>16 и такой датчик будет время от времени подавать сигнал радиационной опасности без какого-либо на то основания. Со всеми вытекающими отсюда последствиями. Прежде всего - недоверием к нему. В тех случаях, когда возникает необходимость зафиксировать и кратковременное появление источника радиации (перемещающегося, например, в проходящем мимо автомобиле), берут счетчик Гейгера, обладающий большей радиационной чувствительностью, или используют несколько малочувствительных счетчиков, набрав нужную чувствительность их числом (счетчики Гейгера можно включать параллельно - при низких, фоновых скоростях счета их радиационные чувствительности суммируются) . Рис. 2. Генератор импульсов сброса к датчику радиации Трансформатор Т1 может быть здесь таким же, как и в предыдущей статье. Принципиальная схема генератора импульсов, задающих паузу Т на входе R счетчика DD2, показана на рис. 2, а. Хотя в этом, как правило, не возникает необходимости — почти всегда охранная система имеет электронные часы с многоразрядным делителем частоты и сформировать нужную последовательность коротких импульсов можно так, как показано на рис. 3, б.
Компьютер Редактор раздела: И. Трус VISUAL BASIC 6.0 САМОУЧИТЕЛЬ ДЛЯ НАЧИНАЮЩИХ (в сокращении) С.Н.Лукин ОКОНЧАНИЕ
ЧАСТЬ III. ПРОГРАММИРОВАНИЕ НА VISUAL BASIC - ВТОРОЙ УРОВЕНЬ Массивы Массивы - одно из главных средств хранения в памяти компьютера больших объемов информации. В основе массивов лежит понятие индекса. Переменные с индексами В математике широко применяются так называемые индексированные переменные. На бумаге они записываются так: Xi х2 be Yi Yi-6 Zij Zi+ij Все маленькие подстрочные цифры и выражения называются индексами. Поскольку в алфавите Visual Basic нет подстрочных букв и цифр, то те же индексированные переменные в Visual Basic приходится обозначать так: X(l) Х(2) В(8) Y(i) Y(i-6) Z(i,j) Z(i + l,j) Зачем математикам нужны индексированные переменные? Их удобно применять хотя бы при операциях над числовыми рядами. Числовой ряд - это просто несколько чисел, выстроенных по порядку одно за другим. Чисел в ряду может быть много и даже бесконечно много. Возьмем, например, бесконечный ряд чисел Фибоначчи: 112 3 5 8 13 21 34 Попробуйте догадаться, по какому закону образуются эти числа. Если вы сами не догадались, то я подскажу: каждое из чисел, начиная с третьего, является суммой двух предыдущих. А теперь попробуем записать это утверждение с помощью языка математики. Для этого обозначим каждое из чисел Фибоначчи индексированной переменной таким образом: Первое число Фибоначчи обозначим так: f(1), Второе число Фибоначчи обозначим так: f(2) и т.д. Тогда можно записать, что f(1)=1 f(2)=1 f(3)=2 f(4)=3 f(5)=5 f(6)=8 Очевидно, что f(3)=f(1)+f(2), f (4)=f (2)+f (3) , f (5)=f (3)+f (4) и т.д. Как математически одной формулой записать тот факт, что каждое из чисел является суммой двух предыдущих? Математики в индексном виде записывают это так: f (i)=f (i-2)+f (i-1) . Для пояснения подставим вместо i любое число, например, 6. Тогда получится : f(6)=f(6-2)+f(6-1) или f(6)=f(4)+f(5), что соответствует определению чисел Фибоначчи. Вадание 115: Запишите в индексном виде, как получается из предыдущего числа ряда последующее: 14 18 22 26 .. 6 12 24 48 . . . 3 5 9 17 33 65 Вот еще примеры, когда математики предпочитают использовать индексы. Пусть мы на протяжении года каждый день раз в сутки измеряли температуру за окном.
Тогда вполне естественно обозначить через t(1) температуру первого дня года, t(2) - второго, , t(365) - последнего. Пусть 35 спортсменов прыгали в высоту. Тогда через п(1) можно обозначить высоту, взятую первым прыгуном, h(2) - вторым и т.д. Одномерные массивы переменных величин Одна из типичных задач программирования формулируется примерно так. Имеется большое количество данных, например, тех же температур или высот. С этими данными компьютер должен что-нибудь сделать, например, вычислить среднегодовую температуру, количество морозных дней, максимальную взятую высоту и т.п. Раньше мы уже вычисляли подобные вещи, и при этом данные вводили в компьютер с клавиатуры одно за другим в одну и ту же ячейку памяти. Однако, программистская практика показывает, что удобно, а часто и необходимо иметь данные в оперативной памяти сразу все, а не по очереди. Тогда для задачи про температуру нам понадобится 365 ячеек. Эти 365 ячеек мы и назовем массивом. Итак, массивом можно назвать ряд ячеек памяти, отведенных для хранения значений индексированной переменной. Вопрос о том, как большое количество значений оказывается в памяти, отложим на будущее. Знаете, что напоминает одномерный массив? Список ListBox. Такой же аккуратный ряд пронумерованных элементов. Рассмотрим на простом примере, как Visual Basic управляется с массивами. Предположим, в зоопарке живут три удава. Известна длина каждого удава в сантиметрах (500, 400 и 600) . Какая длина получится у трех удавов, вытянутых в линию? Обозначим длину первого удава - dlina(l), второго - dlina(2), третьего - dlina(3). Прикажем Visual Basic отвести под эту индексированную переменную массив ячеек в памяти: Dim dlina (1 То 3) As Integer Здесь 1 - нижняя граница индекса, 3 - верхняя граница индекса. Слово То обозначает до. В целом эту строку можно перевести так: Отвести в памяти под переменную dlina ряд ячеек типа Integer, пронумерованных от 1 до 3. Вот программа полностью: Dim dlina(1 То 3) As Integer Dim summa As Integer Private Sub Commandl_Click() dlina(1) = 500 dlina(2) = 400 dlina(3) = 600 'В этот момент в трех ячейках памяти уже находятся числа 'и с ними можно выполнять арифметические действия summa = dlina(1) + dlina(2) + dlina(3) Debug.Print summa End Sub Если смысл написанного выше вам неясен, запустите отладочный пошаговый режим выполнения программы и загляните в текущие значения dlina(1), dlina(2), dlina(3), summa. Теперь запишем ту же программу в предположении, что длины удавов заранее неизвестны и мы их вводим при помощи InputBox: Dim dlina(1 То 3) As Integer Private Sub Commandl_Click() dlina(1) = InputBox("Введите длину 1-го удава")
dlina(2) = InputBox("Введите длину 2-го удава") dlina(3) = InputBox("Введите длину 3-го удава") Debug.Print dlina(l) + dlina(2) + dlina(3) End Sub Вопрос: Что напечатает следующий фрагмент: i = 2: а(3) = 10: a(i) = 100: a(i + 6) = a(i) + a(5 - i) : i = 0: Debug. Print a(i + 3) + a (2) + a(i + 8) Ответ: 220 Пояснение: i = 2 ; a(3) = 10 ; a(2) = 100 ; a(2 + 6) = a(2) + a(5 - 2) ; i = 0 ; Debug.Print a(0 + 3) + a(2) + a(0 + 8) Теперь решим ту же задачу про удавов в предположении, что удавов не три, а тысяча: Dim dlina(l То 1000) As Integer Dim summa As Integer Private Sub Commandl_Click() 'Вводим длины тысячи удавов, хоть это и утомительно и никто так не делает: For i = 1 То 1000 dlina(i) = InputBox("Введите длину " & i & "-го удава") Next 'Здесь на первом выполнении цикла i=l и поэтому компьютер вводит число в ячейку dlina(l), 'на втором - i=2 и поэтому компьютер вводит число в ячейку dlina(2) и т.д. 'Определяем суммарную длину тысячи удавов: summa = 0 For i = 1 То 1000 summa = summa + dlina(i) Next Debug.Print summa End Sub Отлаживая эту программу, возьмите, конечно, вместо числа 1000 число 3. Решим еще одну задачу. Дан ряд из 10 произвольных чисел: а(1), а(2), ... , а (10) . Подсчитать и напечатать суммы восьми троек стоящих рядом чисел: а(1)+а(2)+а(3) , а (2)+а (3)+а (4) , а (3)+а (4)+а (5) , , а(8)+а(9)+а(10) . Dim а(1 То 10) As Integer Private Sub Commandl_Click() a(l) = 23: a(2) = 28: a(3) = 4: a(4) = 0: a(5) = 12 a(6) = 10: a(7) = 23: a(8) = 2: a(9) = 9: a(10) = 1 For i = 1 To 8 Debug. Print a(i) + a(i + 1) + a(i + 2) Next End Sub Вадание 116:. Напишите с использованием массива программу вычисления среднегодовой температуры (Для отладки в компьютере годом можно считать неделю) радание 117: . Подсчитайте количество теплых дней в году (когда температура выше 2 0 град.) Вадание 118: . Каким по порядку идет самый жаркий день? Вадание 119: . Вычислить и распечатать первые 70 чисел Фибоначчи.
Двумерные массивы Поясним суть двумерных массивов на простом примере. Пусть на целом ряде метеостанций, расположенных в разных точках земного шара, в течение многих дней измеряли температуру воздуха. Показания термометров свели в таблицу. Ограничимся для экономии места тремя станциями и четырьмя днями. 1-й день 2-й день 3-й день 4-й день Метеостанция 1 -8 -14 -19 -18 Метеостанция 2 25 28 26 20 Метеостанция 3 11 18 20 25 Требуется (в порядке возрастания трудности): Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день. Распечатать показания термометров всех метеостанций за 2-й день Определить среднюю температуру на третьей метеостанции Распечатать всю таблицу Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла Для этого обозначим показания термометров индексированной переменной с двумя индексами по следующей схеме: t(l,l) t(l,2) t(l,3) t(l,4) t(2,l) t(2,2) t(2,3) t(2,4) t(3,l) t(3,2) t(3,3) t(3,4) Обратите внимание, что первый индекс в скобках обозначает номер строки (метеостанции) , второй - номер столбца (дня) прямоугольной таблицы. Такую таблицу математики называют матрицей. В памяти отводим массив из 3*4=12 ячеек под значения типа Integer индексированной переменной t. Будем называть его двумерным массивом: Dim t (1 То 3, 1 То 4) As Integer Программа: Dim t(l То 3, 1 То 4) As Integer Private Sub Commandl_Click() 'Зададим значения элементов массива примитивным присваиванием: t(l, 1) = -8: t(l, 2) = -14: t(l, 3) = -19: t(l, 4) =-18 t(2, 1) = 25: t(2, 2) = 28: t(2, 3) = 26: t(2, 4) = 20 t(3, 1) = 11: t(3, 2) = 18: t(3, 3) = 20: t(3, 4) = 25 'Выполняем 1 пункт задания: Debug.Print t(2, 4), t(3, 1) 'А теперь распечатаем второй столбец массива (2 пункт задания): For i = 1 То 3: Debug.Print t(i, 2): Next 'Определим среднее значение элементов третьей строки (3 пункт задания): i = 3 s = 0 For j = 1 То 4: s=s+t(i,j): Next Debug.Print s / 4 'Распечатаем всю таблицу (4 пункт задания): For i = 1 То 3 For j = 1 То 4
Debug.Print t(i, j), Next j Debug.Print Next i 'Распечатаем станции и дни с температурой 24-26 градусов (5 пункт задания): For i = 1 То 3 For j = 1 То 4 If t(i, j) >= 24 And t(i, j) <= 26 Then Debug.Print "Станция"; i; "день"; j Next j Next i End Sub Вадание 120: Вычислить разницу между максимальной и минимальной температурой во всей таблице. Какие бывают массивы Массивы бывают не только числовые, но и строковые и типа Date и прочие. Подходит любой известный нам тип. Например: Dim s(l То 50) As String Это означает, что в каждой из 50 ячеек должно находиться не число, а произвольная строка. Вот элементарный пример использования строкового массива: Dim s(l То 50) As String Private Sub Commandl_Click() s(21) = "Привет": Debug.Print s(21) End Sub Вот пример работы с массивами других типов: Dim b(l То 30, 1 То 6) As Boolean Dim DT(1 To 10) As Date Private Sub Commandl_Click() b(2, 3) = False: Debug.Print b(2, 3) DT(2) = #1/15/2156 11:59:42 PM#: Debug.Print DT(2) End Sub Еще пример: Private Enum типРуль вверх влево вниз вправо End Enum Dim Руль(1 To 300) As типРуль Private Sub Commandl_Click() Руль(200) = вправо: Debug.Print Руль(200) Руль(220) = влево: Debug.Print Руль(220) End Sub Здесь будут напечатаны числа 3 и 1, так как элементы перечислимого типа пронумерованы по порядку от 0. Границы индексов в круглых скобках тоже могут быть разными, например: Dim а(20 То 60) As Integer Здесь под числа отводится 41 ячейка. Еще пример: Dim b(0 То 9, -20 То 30) As Integer
Здесь под числа отводится 10*51=510 ячеек. Раз вы объявили границы индексов, то должны их придерживаться. Так, неправильно было бы теперь написать а(15) = 0. Если нижняя граница индекса вашего массива равна нулю, то вы можете сэкономить усилия и вместо Dim f(0 То 9) As Integer писать Dim f(9) As Integer так как Visual Basic по умолчанию считает нижней границей индекса всех массивов число 0. Если же вам хочется, чтобы эта льгота касалась массивов с нижней границей равной не 0, а 1, то наверху программы напишите Option base 1 Массивы могут быть одномерные, двумерные, трехмерные, четырехмерные и т.д Dim а (1 То 10) As Integer -одномерный массив 10 ячеек Dim а (1 То 10, 1 То 5) As Integer -двумерный массив 50 ячеек Dim а (1 То 10, 1 То 5, 1 То 2) As Integer -трехмерный массив 100 ячеек Dim а (1 То 10, 1 То 5, 1 То 2, 1 То 3) As Integer -четырехмерный массив 300 ячеек Использование массивов при программировании игр Какая польза от массивов при программировании игр? Вряд ли хоть одну «умную» игру можно запрограммировать без применения массивов. Возьмем хотя бы «крестики-нолики» на поле размером 3 на 3. Вам придется рисовать на экране большие клетки, а в них - нолики (кружочки) после ваших ходов и крестики (пересекающиеся косые линии) после ходов компьютера. Но этого недостаточно. Чтобы компьютер не поставил случайно крестик в занятом поле, он должен хотя бы Знать, в каких клетках крестики и нолики уже стоят. Анализировать для этого информацию о пикселах экрана очень неудобно. Гораздо разумнее заранее организовать Dim а (1 То 3, 1 То 3) As Integer и записывать туда в нужные места нолики после ходов человека и, скажем, единички после ходов компьютера. Сразу же после записи в массив 0 или 1 программа должна рисовать в соответствующем месте экрана кружок или крестик. Мыслить компьютер мог бы при помощи примерно таких операторов - if а(1,1)=0 And а(1,2)=0 Then а(1,3)=1. Это очевидный защитный ход компьютера - на два кружочка в ряду он ставит в тот же ряд крестик. Проиллюстрируем эту идею подробнее на специально придуманном примитивном примере (типа морского боя). Задание на создание игры: Играют друг против друга два человека на квадратном поле размером 2 на 2: Компьютер в игре участвует только как судья. Сначала первый игрок тайком от второго сообщает компьютеру, в каких двух клетках находятся его одноклеточные корабли (например, в правой верхней и правой нижней). Затем второй производит
два выстрела (наугад - например, в левую верхнюю и правую нижнюю клетки). Если подбиты оба корабля - он выиграл, если один - ничья, если ни одного - проиграл . Сначала запрограммируем эту игру без графики. Поле боя после двух выстрелов будет показано на экране в следующем виде: м к о х Здесь я использовал такие обозначения: о - корабля здесь нет и сюда не стреляли к - неподбитый корабль х - подбитый корабль м - мимо (стреляли и промахнулись) Других вариантов быть не может. До окончания игры поле на экране не показывается. Вот программа: Dim а(1 То 2, 1 То 2) As String * 1 'Поле боя Dim i As Integer Dim j As Integer Dim Подбито As Integer Private Sub Commandl_Click() 'Главная процедура a(l, 1) = "о": a(2, 1) = "о" 'Поначалу на поле боя кораблей нет а(1, 2) = "о": а(2, 2) = "о" Устанавливаем_корабль 1 Устанавливаем_корабль 2 Подбито = О Выстрел 1 Выстрел 2 For i = 1 То 2 For j = 1 То 2 Debug.Print a(i, j); Next j Debug.Print Next i Debug.Print Подбито End Sub ' Пока не стреляли 'Показываем поле боя после битвы: 'Показываем исход битвы Private Sub Устанавливаем_корабль(Номер_корабля As Integer) i = InputBox("Первый игрок, назовите номер строки корабля " & Но- мер_корабля) j = InputBox("Первый игрок, назовите номер столбца корабля " & Но- мер_корабля) a(i, j) = "к" End Sub Private Sub Выстрел(Номер_выстрела As Integer) i = InputBox("Второй игрок, назовите номер строки для выстрела " & Но- мер_выстрела) j = InputBox("Второй игрок, назовите номер столбца для выстрела " & Но- мер_выстрела) If a(i, j) = "к" Then 'Если попал, то
a(i, j) = "x" 'ставим крестик Подбито = Подбито +1 'и увеличиваем счетчик подбитых кораблей Elself a(i, j) = "о" Then 'иначе если промахнулся, то a(i, j) = "м" 'ставим м End If End Sub Пояснения касательно Dim а(1 То 2, 1 То 2) As String * 1 : Конструкция String * 1 означает приказ компьютеру считать значения переменной а имеющими длину в 1 символ. Вообще-то можно было написать просто String, но так все-таки лучше, четче и экономнее. Теперь компьютер отведет в памяти под каждое значение а ровно 1 байт и не будет думать, хватит этого или не хватит. Определение победителя оставляю вам. Когда готова и работает программа без графики, можно подумать о том, как оживить ее графическими изображениями. Эффективнее всего создать единую процедуру, которая сначала оператором Cls все стирает с экрана, а затем все рисует снова согласно новым значениям массива а. Например, рисует во весь экран пустое поле из 4 клеток и тут же их заполняет: скажем, ставит маленькие кружочки туда, куда стреляли и промахнулись, красит красным клетки с подбитыми кораблями и синим - с неподбитыми. Для заполнения достаточно в написанном уже фрагменте, показывающем поле For i = 1 То 2 For j = 1 То 2 Debug.Print a(i, j); Next j Debug.Print Next i вместо Debug.Print a(i, j) написать некий код такого примерно смысла: If a(i, j) = "х" Then Крась_красным i j If a(i, j) = "к" Then Крась_синим i j If a(i, j) = "m" Then Рисуй_кружок i j Здесь мы видим три процедуры с параметрами i и j, от значения которых зависят координаты кружочков на форме и закрашиваемых квадратов. Зависимость эту продумайте сами. Что замечательно - в остальном программа от добавлении графики не изменится . Процедуру эту можно будет, не думая о графике, использовать всякий раз, когда мы хотим обновить поле на экране. Особенно это удобно в настоящем морском бое и настоящих крестиках-ноликах, когда поле надо обновлять после каждого хода. Массивы элементов управления Задача: Выстроить вдоль нижней кромки формы на равных расстояниях друг от друга 20 автомобилей, вот так: Cornmandl
При нажатии кнопки эти автомобили должны прыгнуть вверх, вот так: Commandl (самый левый остается на месте). Трудности: Нам нужно поместить на форму 20 элементов управления Image и загрузить в них картинку автомобиля, что само по себе утомительно. Расположить их вручную на равных расстояниях тоже нелегко. Visual Basic дает возможность изящно преодолеть все эти трудности программным путем. Ваши действия: Поместите на форму один объект Image и дайте ему имя imgABTO. Загрузите в него картинку автомобиля. Обратите внимание на его свойство Index. Оно пусто. Это значит, что данный объект пока не является элементом массива объектов. Заголовок у окна свойств такой: Properties - imgABTO. Придайте свойству Index какое-нибудь целое неотрицательное значение, например 1. Тут же заголовок у окна свойств меняется: Properties - imgABTo(l). Это значит, что данный объект стал элементом массива объектов. Пока в этом массиве один элемент - imgABTo(l). Как создать остальные объекты массива? Можно вручную, скопировав его обычным образом, но отвечая на вопрос - Yes. При этом Visual Basic будет придавать новым объектам индексы от 0 и выше. Но быстрее это сделать программным путем. Так, оператор Load imgABTO(4) создаст (загрузит) на форме новый объект imgABTO с индексом 4. Значит, если применить оператор в цикле, он загрузит нам все нужные объекты и создаст их массив. Безо всякого объявления. Вот программа: Dim i As Integer Dim N As Integer 'Количество объектов Private Sub Form_Load() N = 20 'Загружаем на форму и делаем видимыми все объекты массива, кроме первого (который и так уже загружен): For i = 2 То N Load imgABTO(i) imgABTO(i).Visible = True Next 'Помещаем на свои места все объекты массива: For i = 1 То N imgABTO(i).Top = Height - 1000 imgABTO(i).Left = 300 * i Next End Sub Private Sub Commandl Click()
'Прыжок всех объектов: For i = 1 То N imgABTo(i).Top = imgABTo(i).Top - 50 * (i - 1) Next End Sub Пояснения: Как обычно, первой выполняется процедура Form_Load, которая все создает и расставляет. Затем процедура Commandl_Click выполняет прыжок автомобилей . Вот более "правильный" вариант той же программы, использующий процедуры с параметрами: Dim i As Integer Dim N As Integer Private Sub Form_Load() N = 20 'Загружаем на форму и делаем видимыми все объекты, кроме первого (который и так уже загружен): For i = 2 То N Load imgABTO(i) imgABTO(i).Visible = True Next 'Помещаем на место все объекты: For i = 1 То N Поместить_автомобиль_на_место i Next End Sub Private Sub Commandl_Click() 'Прыжок всех автомобилей: For i = 1 To N Прыжок_автомобиля i Next End Sub 'Процедура, помещающая на место один объект из массива с индексом Но- мер_автомобиля: Private Sub Поместить_автомобиль_на_место(Номер_автомобиля As Integer) imgABTO(Номер_автомобиля).Top = Height - 1000 imgABTO(Номер_автомобиля).Left = 300 * Номер_автомобиля End Sub 'Процедура прыжка одного объекта из массива с индексом Номер_автомобиля: Private Sub Прыжок_автомобиля Прыжок_автомобиля (Номер_автомобиля As Integer) imgABTO (Номер_автомобиля) . Top = imgABTO (Номер_автомобиля) . Top - 50 * (Номер_автомобиля - 1) End Sub В процедуре Прыжок_автомобиля вы можете задавать разным автомобилям разное поведение. Например: If Номер_автомобиля = 8 Then imgABTO(Номер_автомобиля).Тор = 1000 If Номер автомобиля = 14 Then imgABTO(Номер автомобиля).Visible = False
Чтобы удалить (выгрузить) 4-й объект с формы, применяем оператор Unload imgABTO(4). Обратите внимание, что теперь, работая в окне кода и пытаясь получить заготовку процедуры для обработки события, принадлежащего автомобилю, вы получите ее с параметром Index, значение которого равно индексу автомобиля, с которым происходит событие, в массиве. Это позволяет вам задавать разную реакцию автомобилей на одно и то же событие. Например, следующая процедура Private Sub imgABTO_Click(Index As Integer) If Index = 2 Then imgABTO (Index) .Top = imgAB то (Index) .Top + 200 Else imgABTO(Index).Visible = False End Sub позволяет вам превращать любой автомобиль щелчком мыши в невидимку, а 2-й автомобиль вместо этого отскакивает. РАЗНЫЕ ЗВЕРИ В ОДНОМ КОВЧЕГЕ В предыдущей главе я рассматривал массивы - структуры, состоящие из многих данных и объектов. В этой главе я продолжу рассматривать сложные структуры данных и объектов. Но если массивы - это одинаковые солдатики, стоящие стройными рядами в своих строгих батальонах, то те структуры, что мы рассмотрим в этой главе, больше напоминают натюрморт. Тип Variant Массив - это набор элементов. Если вы объявили массив некоторого типа, то он обязан состоять из элементов только этого типа. Например, каждый из десяти элементов массива, объявленного как Dim а(1 То 10) As Integer обязан быть целым числом. Ни один из них не имеет права быть строкой или дробным числом. Имеется целый ряд задач, где хотелось бы, чтобы элементы в наборе имели разный тип. Этого можно достичь, если вообще не объявлять тип массива: Dim а(1 То 3) Private Sub Commandl_Click() а(1) = 32 а(2) = "кошка" а(3) = #8:56:00 АМ# End Sub В этом случае Visual Basic считает, что массив объявлен по умолчанию специальным типом Variant. Это тип-хамелеон. Он не возражает, если объявленная им переменная будет иметь значение любого типа. Он присматривает, чтобы выполнение программы при этом проходило по возможности гладко и без неприятностей для программиста. Вместо Dim а(1 То 3) можно было прямо написать Dim а(1 То 3) As Variant. Еще один пример всеядности Variant (здесь я объявлю этим типом не массив, а переменную): Dim b As Variant 'можно было просто написать Dim b Private Sub Commandl_Click() b = 77 b = "кот" End Sub
Итак, если переменная не объявлена или объявлена без указания типа, Visual Basic считает ее принадлежащей типу Variant. Какой толк от этого типа? Иногда бывает так, что соблюдая приличия и объявляя тип каждой переменной, мы наталкиваемся во время выполнения программы на сообщение об ошибке Туре mismatch (несовпадение типов). Это значит, что выполняя операции над данными разных типов и преобразовывая один в другой, Visual Basic не захотел преступать строгие рамки безопасности и приличий и потерпел крах. Не всегда у начинающего программиста хватает знаний, чтобы разобраться в причинах краха. В этом случае, если вы любите риск, объявите все данные одним типом - Variant или вообще не указывайте тип. Теперь вероятность сообщений об ошибке снизится, хотя несколько увеличится вероятность получения недостоверного результата. Вернемся к нашему желанию иметь набор из элементов разных типов. Программисты не хотят для этого использовать массивы типа Variant. Они используют для этого так называемый пользовательский тип данных. Пользовательский тип данных В Паскале пользовательскому типу данных соответствуют записи, в языке Си - структуры. Рассмотрим простейший пример пользовательского типа: Вы хотите занести в компьютер информацию о ваших любимых компьютерных играх, чтобы затем как-то ее анализировать, например, определить, какая игра занимает самое большое место на диске. Для простоты ограничим информацию об игре тремя элементами: Название игры Сколько места игра занимает на диске (в мегабайтах) Хорошая или плохая графика у игры (ваша оценка) Также для экономии места ограничимся двумя играми. Ваша программа должна будет занести в память информацию об обеих играх, а затем выполнить три задания : Распечатать название первой игры Определить, сколько места займут на диске обе игры вместе Ответить, хороша или плоха графика у второй игры Ваши действия: Для начала нужно создать пользовательский тип данных для размещения информации об одной игре. Нам уже приходилось конструировать перечислимый тип. Здесь действуем аналогично - придумываем новому типу имя (типИ- гра) и пишем: Private Туре типИгра Название As String Объем As Integer Графика_хорошая As Boolean End Type Тип определен. (Объяснение слова Private отложим на будущее). Теперь Visual Basic знает, сколько места в памяти занимает информация об игре и какая у нее структура. Можно отводить место в памяти: Dim Игра1 As типИгра Dim Игра2 As типИгра Вот полный текст программы: 'Создаем пользовательский тип: Private Туре типИгра Название As String Объем As Integer Графика_хорошая As Boolean End Type 'Отводим в памяти место под информацию о двух играх:
Dim Игра1 As типИгра Dim Игра2 As типИгра Private Sub Form_Load() 'Заносим в память компьютера информацию об играх: Игра1.Название = "StarC": Игра2.Название = "Heroes III" Игра1.Объем = 90: Игра2.Объем = 200 Игра1.Графика_хорошая = False: Игра2.Графика_хорошая = True 'Выполняем 1 задание: Debug.Print Игра1.Название 'Выполняем 2 задание: Debug.Print Игра1.Объем + Игра2.Объем 'Выполняем 3 задание: If Игра2.Графика_хорошая Then Debug.Print "Хорошая графика" Else Debug.Print "Плохая графика" End Sub Обратите внимание, что имя элемента отделяется от имени переменной точкой подобно тому, как название свойства объекта отделяется точкой от имени объекта . Выстроенную подобным образом в памяти информацию о чем-либо часто называют базой данных. Всю информацию об одной переменной (в нашем случае об одной игре) называют записью в этой базе данных. Программу, которая извлекает информацию из базы данных, сортирует записи и производит другую обработку информации в базе данных, называют системой управления базой данных. В нашем примере роль системы управления базой данных играет процедура Form_Load. Элементы пользовательского типа могут иметь любой известный вам тип, в том числе быть массивом или пользовательским типом. Пусть вы хотите дополнить информацию об игре именами персонажей игры (не более 20) . Вот каким массивом дополнится определение типа: Private Туре типИгра Название As String Объем As Integer Графика_хорошая As Boolean Персонаж(1 To 20) As String End Type Теперь можно использовать такие операторы: Игра2.Персонаж(4) = "Криган" Игра1.Персонаж(12) = "Fenix" Debug.Print Игра1.Персонаж(10) Усложним задание: Вы хотите создать базу данных о 30 играх. Для этого достаточно вместо объявлений Dim Игра1 As типИгра Dim Игра2 As типИгра объявить массив: Dim Игра(1 То 30) As типИгра Теперь можно использовать операторы: Игра(16).Название = "StarCraft" 'название 16-й игры Игра(8).Персонаж(12) = "Солдат" 'двенадцатый персонаж восьмой игры Debug.Print Игра(16).Название, Игра(8).Персонаж(12) Еще усложним задание: Вы хотите задать более подробную информацию о персонажах, а не только их имя. Вас интересует имя персонажа, количество его здо-
ровья (в численном виде), название его оружия. Для этого вы определяете еще один пользовательский тип. Вот программа: 'Сначала создаем пользовательский тип персонажа, ' так как без него нельзя определить пользовательский тип игры: Private Туре типПерсонаж Имя As String Здоровье As Integer Оружие As String End Type 'Затем создаем пользовательский тип игры: Private Туре типИгра Название As String Объем As Integer Графика_хорошая As Boolean Персонаж(1 To 20) As типПерсонаж 'He больше 20 персонажей в одной игре End Type 'Отводим в памяти место под информацию об играх: Dim Игра(1 То 30) As типИгра Private Sub Form_Load() Игра(8).Персонаж(12).Имя = "Солдат" Игра(8).Персонаж(12).Здоровье = 140 Debug.Print Игра(8).Персонаж(12).Имя, Игра (8) .Персонаж(12).Здоровье End Sub Если вы захотите более подробно описать оружие, то можете создать еще один пользовательский тип. И так далее. Массивы и пользовательские типы могут вкладываться друг в друга, как матрешки, до бесконечности. Так создаются иерархии данных практически в любой области знаний. Задание 121: Создайте базу данных о своих родственниках. О каждом родственнике должно быть известно: Имя Год рождения Цвет глаз Массивы не используйте. Программа должна: Распечатать ваш возраст и цвет глаз Ответить на вопрос - правда ли, что ваш дядя старше тети. Задание 122: Создайте базу данных о своих однокашниках. О каждом однокашнике должно быть известно: Фамилия Имя Пол Год рождения Обязательно используйте массив не меньше, чем из 10 записей. Программа должна: Вычислить средний возраст ваших однокашников Определить, кого среди них больше - дам или кавалеров Ответить на вопрос - есть ли в вашей базе тезки (это нелегко).
Базы данных являются настолько распространенным средством хранения информации, что в Visual Basic есть специальные мощные инструменты для работы с ними . КОЛЛЕКЦИИ Объектные переменные В Visual Basic существует несколько типов, к которым может принадлежать объект. Самый общий тип - это Object. Если мы напишем Dim A As Object, то переменная А сможет принимать значения любых объектов. В нижеприведенном примере она сначала принимает значение метки, а затем формы. Для того, чтобы присвоить переменной значение существующего объекта, простой оператор присваивания не подходит, нужно писать так: Set А = Label1. Создайте проект с меткой. Private Sub Commandl_Click() Dim A As Object Set A = Label1 A.FontSize = 20 A.Caption = "Привет!" 'Меняется надпись на метке Set А = Forml A.Caption = "Еще один привет!" 'Меняется надпись на форме End Sub Вы видите, что как только мы присвоили переменной А значение метки Label1, мы смогли вместо Label1.FontSize = 20 писать A.FontSize = 20. Объектный тип Control - это тип элементов управления. Если мы напишем Dim А As Control, то переменная А сможет принимать значения не любых объектов, а только элементов управления. Зачем все это нужно? Один из примеров применения объектной переменной вы найдете чуть ниже в этом же разделе, где объектная переменная в цикле пробегает значения элементов управления на форме. Коллекции Коллекции так же относятся к пользовательским типам данных, как массивы элементов управления к массивам переменных величин. Коллекция - это набор элементов разного типа, таких как элементы управления, другие объекты. Коллекция и сама является объектом (а почему бы и нет? - коробки в коробке) . Коллекции всеядны, они позволяют иметь в одном наборе и кнопку и метку и переменную величину типа Integer. Я ограничусь распространенным случаем, когда в коллекцию входят только элементы управления. Задача: На вашей форме имеется несколько десятков кнопок, меток и текстовых полей, которые делают свое дело, скажем, помогают обрабатывать банковскую информацию - кто принес деньги, сколько принес, в долларах или рублях, да сколько денег у него стало, да сколько всего в банке денег и т.д. Вам нужно, чтобы в некоторый момент выполнения программы такие-то и такие-то кнопки, метки и текстовые поля из самых разных мест формы (всего, скажем, дюжина объектов) поменяли размер шрифта. Ну, скажем, для того, чтобы привлечь к себе внимание. А в какой-нибудь другой момент эта же дюжина должна сделать что- нибудь другое, например, кнопки из этой дюжины должны быть деактивированы, чтобы на них случайно не нажали. И так далее. Решение: Создадим проект. Для простоты разместим на форме только шесть элементов управления: Label1, Textl, Commandl, Label2, Text2, Command2. Пусть в нашу "дюжину" входят из них только Label2, Text2, Command2. Программным путем
создадим коллекцию из этих объектов. Для этого сначала придумаем ей имя Моя_коллекция и объявим ее так: Dim Моя_коллекция As New Collection Слово Collection означает коллекцию. Слово New мы пишем тогда, когда создаем новый объект (а коллекция - объект). Коллекция объявлена, но пока она пуста. Теперь будем по очереди добавлять объекты в коллекцию подобно тому, как в 0 мы добавляли объекты в массив. Но Здесь другая грамматика. Смотрим программу: Dim Моя коллекция As New Collection 'Объявляем коллекцию Private Sub Commandl_Click() Моя_коллекция.Add Label2 Моя_коллекция.Add Text2, "Текстик" Моя_коллекция.Add Command2, "Кнопочка" Debug.Print Моя_коллекция.Count коллекции Debug.Print Моя_коллекция (1).Caption Моя_коллекция (3).Height = 800 Моя_коллекция ("Текстик").BackColor = For Each Мой_объект In Моя_коллекция Мой_объект.FontSize = 18 Next 'Добавляем в коллекцию 1-й элемент 'Добавляем в коллекцию 2-й элемент 'Добавляем в коллекцию 3-й элемент 'Печатается 3 - число элементов в 'Печатается "Label2" 'Задается высота кнопки Command2 vbYellow 'Задается цвет поля Text2 'ДЛЯ КАЖДОГО объекта В коллекции 'задается размер шрифта For Each Мой_объект In Моя_коллекция 'ДЛЯ КАЖДОГО объекта В коллекции If TypeName(Мой_объект) = "CommandButton" Then Мой_объект.Enabled = False End If Next Моя_коллекция.Remove 2 'Удаляем из коллекции второй элемент Моя_коллекция.Remove "Кнопочка" 'Удаляем из коллекции кнопку End Sub Пояснения: У коллекций есть несколько методов, три из них (Add, Remove, Count) я сейчас поясню: При помощи метода Add мы добавляем в коллекцию элементы. При этом обязательно указывается имя элемента. Также можно через запятую указать произвольную строку - ключ элемента, по которому можно к нему при желании обращаться, что мы и сделали в программе. Как видите, здесь для добавления каждого элемента мы использовали отдельный оператор, хотя есть ситуации, когда можно это делать в цикле. Метод Count просто сообщает число элементов в коллекции: Обращаться к отдельным элементам коллекции можно по индексу, как к элементу массива, а можно и по ключу, там, где он задан. Чтобы удалить отдельный элемент из коллекции (не с формы), используется метод Remove с указанием индекса или ключа элемента. Для коллекций удобно применять специальную разновидность оператора цикла - For Each. Для этого необходимо придумать имя переменной величине, значение которой будет пробегать все элементы коллекции. Мы придумали имя Мой_объект. Когда цикл выполняется в первый раз, Мой_объект "равняется" 1-му элементу коллекции, во второй раз - 2-му и т.д., пока элементы не будут исчерпаны. В остальном синтаксис и порядок выполнения оператора For Each такой же, как и
у привычного нам For. Здесь я не объвлял переменную Мой_объект, а мог бы и объявить - Dim Мой_объект As Control. Здесь мы использовали функцию TypeName, чтобы выбрать из всех элементов коллекции только элементы данного типа. Пояснять ее я не буду, используйте дальше по аналогии. Вообще, вы чувствуете, что с этими коллекциями мы ступили на зыбкую для нас почву работы с объектами? Зыбкая она потому, что мы пока про работу с объектами почти ничего не знаем. Пока вам хватит того, что вы уже узнали. Кстати, оператор For Each можно использовать и при работе с массивами. Рамка (Frame) Рамка объединяет в себе разнотипные элементы управления. В этом рамка похожа на коллекцию. Но у рамок несколько иное назначение, чем у коллекций. Поместите на форму элемент управления Frame, придав ему довольно большие размеры. Затем возьмите из Toolbox и поместите внутрь этой рамки несколько других элементов управления, в том числе еще один Frame. А теперь передвиньте рамку по форме. Вы видите, что объекты внутри рамки передвинулись вместе с ней. Посмотрите на значения свойств Тор и Left любого объекта внутри рамки. Теперь это координаты не относительно формы, а относительно рамки. Если вы захотите мышкой переместить в рамку уже размещенный на форме объект, у вас ничего не получится. Оказавшись внутри границ рамки, он не стал "своим". Убедитесь в этом, сдвинув рамку в сторону. Все уехали, объект остался на месте. Чтобы добиться желаемого, вырежьте (Cut) объект со старого места и наклейте (Paste) в рамку. Аналогичная ситуация, когда вы попытаетесь обнять новой или старой рамкой уже существующие объекты. Управление танком Рамка является удобным средством объединения элементов управления по смыслу . Пример: В программе вы можете изменять значения свойств рамки Top, Left. Объекты, объединенные в рамке, будут при этом перемещаться вместе с ней. Вы можете изменять значения свойств рамки Visible, Enabled. При этом точно так же будут меняться значения этих свойств всех объектов, объединенных в рамке. Это полезно тогда, когда у вас на форме слишком много объектов и все они свободно не умещаются на ней. Вас может выручить то, что Вперед Назад Огонь Управление самолетом Вверх Огонь не все они нужны одновременно. Разделите их между наложенными друг на друга рамками и в каждый момент времени делайте видимой только одну из них. Поэкспериментируйте с цветами, границей, шрифтом рамки. Способностями, аналогичными рамке, обладает и объект PictureBox. Проверьте - в нем точно так же можно размещать элементы управления. Мы знаем и еще один такой объект. Это, конечно же, сама форма. Все подобные объекты называются контейнерами. Элементы управления Многих из описываемых далее элементов управления нет на Toolbox. Чтобы их
добыть, поставьте флажки в Project —» Components —» Microsoft Windows Common Controls 6.0 и Microsoft Windows Common Controls 6.0-2. Флажок (CheckBox) Hi,, Forml [Тройная толщина! Г" Снннй цвет Рисуем окружность Поместите на форму несколько флажков (CheckBox). Запустите проект. Пощелкайте внутри квадратиков. Флажок мы устанавливаем (ставим галочку мышкой или с клавиатуры) тогда, когда хотим сказать "да", а снимаем установку (снимаем галочку мышкой или с клавиатуры), когда хотим сказать "нет". Задача: Нажатием на кнопку нужно нарисовать окружность. Но перед нажатием кнопки мы хотим иметь возможность немножко настроить вид окружности, а именно : одним флажком установить или не установить тройную толщину линии этой окружности, а другим флажком установить или не установить синий цвет этой линии. Если флажки мы не установим, то толщина и цвет будут выполнены по умолчанию (одинарная и черный). Ваши действия: Создайте проект с кнопкой и двумя флажками: Имена флажков - Check1 и Check2. Программа: Private Sub Commandl_Click() Cls If Checkl.Value = vbChecked Then DrawWidth = 3 Else DrawWidth = 1 'Если флажок 1 установлен, то толщина тройная, иначе одинарная If Check2.Value = vbChecked Then ForeColor = vbBlue Else ForeColor = vbBlack 'Если флажок 2 установлен, то цвет синий, иначе черный Circle (500, 500), 300 End Sub Пояснения: У многих элементов управления есть свойство Value (значение), характеризующее главное назначение элемента. Свойство Value флажка имеет 3 значения: vbChecked (установлен, галочка), vbUnchecked (не установлен, пустой белый квадрат), и vbGrayed (галочка на сером фоне - используется нечасто, например, в процессе установки Microsoft Office). Все три значения можно устанавливать в режиме проектирования и программным способом. В режиме работы можно вручную, мышкой или с клавиатуры, устанавливать только первые два значения, причем переключать между этими двумя значениями можно сколько угодно раз. В этом и состоит удобство флажков: перед тем, как совершить решающее нажатие на кнопку, можно поддаться сомнениям и как угодно устанавливать флажки или, передумав, снимать установку. Поэкспериментируйте с цветами, шрифтом флажка. Флажок может иметь и другой внешний вид - графический (свойство Style) с участием картинок. Переключатель (OptionButton) Поместите на форму три элемента управления OptionButton. Запустите проект. Пощелкайте внутри кружочков. Вы видите, что из всех переключателей в любой момент времени только один может быть выбран, остальные автоматически отключаются. Это полезное свойство удобно применять там, где нужно выбрать только одну из несколь- iii^ Forml С Бластер (* Скорчер С Лазерный пистолет С Рогатка Берем оружие
ких возможностей. Например, если персонажу вашей игры нужно выбрать одно оружие из четырех, вы организуете такую группу переключателей ^ А что делать, если вам на той же форме нужно организовать еще одну группу переключателей, например, для выбора поля сражения? Для этого нужно каждую группу поместить в свой контейнер, например, рамку ^ Hit Forml Оружие <~ Бластер (* Скорчер <~ Лазерный пистолет (~~ Рогатка Поле сражения Океан <• Юцстыня; Песочница В противном случае из всех семи переключателей в любой момент времени будет выбран только один. Вы скажете, что переключатели и - флажки - это одно и то же. Неверно. Флажков в любой момент времени может быть установлено сколько угодно, хоть все, а из переключателей может быть выбран только один. Так же, как и у флажка, главным свойством переключателя является Value. Только тип этого свойства логический - когда переключатель выбран, оно равно True. Компьютер может узнать, выбран ли переключатель Optionl, при помощи следующего оператора: If Optionl.Value = True Then Учитывая, что тип свойства логический, можно сократить эту запись: If Optionl.Value Then А можно и еще сократить. Visual Basic позволяет обращаться к главному свойству элемента управления (в нашем случае это Value) сокращенно - вместо Optionl.Value - просто Optionl. Получается: If Optionl Then Вот фрагмент, позволяющий узнать, какой из переключателей группы выбран (имена переключателей: Optionl, 0ption2, ...) : If Optionl Then Debug.Print "Выбран бластер" Elself 0ption2 Then Debug.Print "Выбран скорчер" End If Если вам нужно, чтобы некоторое действие было выполнено не потом, а сразу же после щелчка по переключателю, вы можете для каждого переключателя написать процедуру обработки события Click, но гораздо удобнее объединить все переключатели группы в массив, тогда процедуру придется писать только одну: Private Sub Optionl_Click(Index As Integer) Select Case Index Case 0 Debug.Print "Выбран бластер" Case 1 Debug.Print "Выбран скорчер" End Select End Sub
Поэкспериментируйте с цветами, шрифтом переключателя. Переключатель, как и флажок, может иметь графический внешний вид (свойство Style) - с участием картинок. Полосы прокрутки (HScrollBar и VScrollBar) Для определенности поговорим о горизонтальной полосе прокрутки (HScrollBar). Все сказанное будет полностью относиться и к вертикальной полосе (VScrollBar). Поместите на форму горизонтальную полосу. Запустите проект. Потаскайте мышкой бегунок. Вы, безусловно, знакомы с полосой прокрутки по другим приложениям Windows. Она используется в основном для того, чтобы прокручивать информацию в окне или же просто менять значение какой-нибудь величины. Задача: Изменять с помощью полосы прокрутки значение переменной величины W в пределах от 20 до 50. При щелчке по стрелкам полосы или клавиатуры значение переменной должно меняться на 2, а при щелчке по полосе слева или справа от бегунка значение переменной должно меняться на 5. При запуске проекта бегунок должен стоять на отметке 27. Ваши действия: Создайте проект и поместите на форму горизонтальную полосу прокрутки. Ее имя HScrolll. Установите в соответствии с числами из задания следующие свойства полосы: Min - 20 Мах - 50 SmallChange - 2 LargeChange - 5 Value - 27 Проверьте правильность работы полосы, запустив программу: Private Sub HScrolll_Change() W = HScrolll.Value Debug.Print W End Sub Событие HScrolll Change возникает при любом перемещении бегунка. Задание 123: Поместите рядом с полосой три метки ^ Левая метка должна указывать минимальное значение, правая - максимальное, средняя - текущее. Усложнение: Хорошо бы средняя метка бегала рядом с бегунком. Slider, ProgressBar 1 вй Forml -hi 20 41 50 iii,, Forml
Slider изображен на картинке выше. Его действие и свойства (Min, Мах, SmallChange, LargeChange, Value) аналогичны действию и свойствам полосы прокрутки HScrollBar. ProgressBar в двух видах изображена сверху. Вы наверняка видели такую при инсталляции программ. Зачем она нужна? Пусть ваша программа запускает длительный процесс, во время которого на экране ничего не происходит (например, считывает информацию из 400 файлов). У пользователя может возникнуть тревожное ощущение, что программа зависла. Чтобы этого ощущения не было, вы можете выдать на экран текст "Я занята. Подождите минутку.", которое пропадет, когда дело сделано. Но опять же, пока дело делается, этот текст так долго и неподвижно красуется посреди экрана, что в душу опять закрадываются подозрения. Гораздо лучше создать ProgressBar, полоса которой после считывания информации из каждого файла будет продвигаться на 1/400 часть длины ProgressBar. Поскольку компьютер работает быстро, у пользователя создастся впечатление, что полоса плавно ползет направо. А раз движение есть, значит компьютер не завис! К тому же можно в процессе работы примерно представлять, какая часть ее выполнена . Свойства ProgressBar - Min, Max - аналогичны свойствам полосы прокрутки. Внешний вид определяется свойством Scrolling. Для иллюстрации сказанного создайте проект. Разместите элементы управления, как на картинке. Установите свойство Мах слайдера в 50, у остальных - в 100. Запустите следующие процедуры: Private Sub Commandl_Click() For a = 0 To 40 Step 0.01 ProgressBarl = a Next End Sub Private Sub Command2_Click() For a = 0 To 80 Step 0.1 ProgressBar2 = a Next End Sub Private Sub Command3_Click() For a = 0 To 30 Step 0.001 Sliderl = a Next End Sub Во время выполнения процедур полосы и бегунок слайдера движутся. Если движение слишком быстрое или слишком медленное, измените шаг цикла. На картинке вы видите состояние элементов управления после того, как процедуры отработали . В реальной задаче о копировании 400 файлов вы могли бы сделать так, чтобы при закрытии очередного файла вызывалась процедура пользователя, продвигающая чуть-чуть полосу. Список (ListBox) Поместите на форму список. Его имя - Listl. Заполните список. Для этого зайдите в его свойство List и введите слово "Динамо" - первый элемент списка, после чего нажмите Ctrl-Enter. Теперь введите слово "Спартак" - второй элемент списка, нажмите Ctrl-Enter. И так далее. Запустите проект. Пощелкайте по элементам списка.
iiu Forml ШШ Динамо iСпартак В ЦСКА Торпело Локомотив Печать Если все элементы списка не умещаются в его видимом пространстве, то у списка автоматически возникает полоса прокрутки. А кнопку "Печать" я поместил на форму вот для чего: Задача: Пусть вам нужно напечатать текст "Следующим соперником нашей команды будет команда ...". На месте многоточия должно стоять название команды, выбранной вами из списка. Запустив проект, вы щелчком мыши выбираете нужную команду (на картинке выбран Спартак), а затем нажатием на кнопку печатаете текст. Вот программа: Private Sub Commandl_Click() Debug.Print "Следующим соперником нашей команды будет команда "; Listl.Text End Sub Свойство Text списка Listl - это значение выбранного элемента списка Listl. Пощелкайте по элементам списка, после каждого щелчка нажимая кнопку "Печать". Итак, мы нашли одно из применений списка: он облегчает ввод в компьютер часто встречающихся слов. ComboBox (вариант "Раскрывающийся список") ComboBox - это обогащенный новыми возможностями ListBox. Он существует в трех вариантах. Рассмотрим их по мере усложнения. Поместите на форму ComboBox. Его имя - Combo1. Вариант ComboBox определяется значением его свойства Style. Выберите вариант Dropdown List - "Раскрывающийся список". Заполните ComboBox так же, как вы Заполняли список ListBox. Запустите проект. Список выглядит так ^ iiu Forml ШШ Щелкните по черной треугольной стрелке в правой части списка. Список раскроется и вы сможете выбрать из него любой элемент так же, как вы выбирали элементы из списка ListBox. Программа для ComboBox также будет совершенно аналогична программе для ListBox. Private Sub Command2_Click() Debug.Print "Следующим соперником нашей команды будет команда "; Combo1.Text End Sub Как видите, преимуществом раскрывающегося списка перед обычным является экономия места на форме. ComboBox (вариант "Простой Combo") Поместите на форму ComboBox (а проще скопируйте старый). В его свойстве Style выберите вариант Simple Combo - "Простой Combo". Заполните ComboBox так же, как вы Заполняли список ListBox. Запустите проект. Combo выглядит так ^ iij,, Foiml Combo2 Динамо Спартак. ЦСКА Торпедо Печать Отличие ComboBox от ListBox в том, что сверху от списка имеется текстовое поле. Пока не вводите туда ничего, а просто выбирайте элементы из списка и
печатайте, как в проекте с ListBox. Все получается по-старому. Зачем же нужно текстовое поле? А затем, что если вам вдруг понадобится распечатать команду, которой нет в списке, вы всегда можете ввести ее в текстовое поле и нажать кнопку печати. Вариант "Раскрывающийся список" тоже имеет наверху текстовое поле, только вводить туда ничего нельзя. ComboBox (вариант "Раскрывающийся Combo") Раскрывающийся Combo объединяет в себе преимущества двух других вариантов ComboBox: он выглядит так же компактно, как раскрывающийся список, и позволяет редактировать текстовое поле, как простой Combo. Свойства, события и методы элементов управления ListBox и ComboBox. Все примеры, приведенные здесь относительно ListBox, относятся также и к любому варианту ComboBox. Элементы списков нумеруются с нуля. Оператор Смысл Listl.Addltem "Бавария" В конец списка Listl метод Addltem добавляет элемент Бавария Listl.Addltem "Боруссия", 3 Метод Addltem добавляет элемент Боруссия на место №3 в список Listl. Listl.RemoveIte m 4 Метод Removeltem удаляет элемент №4 из списка Listl. Listl.Clear Опустошить список Listl Debug.Print Listl.Text Напечатать значение выбранного элемента в списке Listl Debug.Print Combo1.Text Напечатать значение текстового поля из ComboBox Debug.Print Listl.List (5) Напечатать значение элемента №5 в списке Listl Listl.List(0) = "Барселона" Присвоить элементу №0 в списке Listl значение Барселона Debug.Print Listl.Listlndex Напечатать номер выбранного элемента в списке Listl. Если элемент не выбран, то печатается -1. Debug.Print Listl.ListCount Напечатать количество элементов в списке Listl Если вы хотите, чтобы элементы списка были отсортированы по алфавиту, то в режиме проектирования установите в True свойство Sorted. В режиме работы его менять нельзя. Сортировка нарушится, если вы будете использовать метод Addltem с индексом. Не забывайте, что сортировка - текстовая, а не числовая, поэтому 28 будет стоять выше, чем 5. У ListBox есть некоторые преимущества перед ComboBox: он может состоять из нескольких столбцов и допускает множественный выбор. Но на этом мы останавливаться не будем. Щелчок или двойной щелчок по элементу списка вызывают, как водится, события Click и DblClick. Задача: Создать на форме простой Combo и 5 кнопок для разнообразной работы с его списком. Вот функции кнопок: Кнопка "Печать" распечатывает содержимое текстового поля Combo
Кнопка "Удаление" удаляет выбранный элемент из списка Кнопка "Добавить" добавляет содержимое текстового поля в список (удобно для быстрого внесения дополнений в список) Кнопка "Перестановка" переставляет выбранный элемент в конец списка (удобно для произвольной сортировки списка) Кнопка "Заменить" заменяет выбранный элемент содержимым текстового поля (удобно для небольших исправлений в написании элемента) Кроме этого, элемент должен распечатываться двойным щелчком. Попробуйте выполнить это задание самостоятельно. Если не получится, то вот программа: Dim номер As String 'Номер выбранного элемента в списке Private Sub ne4aTb_Click() Debug.Print Combol.Text End Sub Private Sub Удаление_С^ск () Combol.RemoveItern Combol.ListIndex End Sub Private Sub flo6aBHTb_Click() Combol.Addltem Combol.Text End Sub Private Sub nepecTaHOBKa_Click() Combol.Addltem Combol.Text Combol.RemoveItern Combol.ListIndex End Sub Private Sub 3aMeHHTb_Click() Combol.List(номер) = Combol.Text End Sub Private Sub Combo1_C1ick() номер = Combol.ListIndex End Sub Private Sub Combol_DblCIick() Печать_С1i ck End Sub Задание 123-1: "Англо-русский словарь". Поместите на форму два раскрывающихся списка. В левый запишите несколько десятков английских слов и упоря- дочте их по алфавиту. В правый запишите в том же порядке переводы этих слов на русский. При выборе слова в левом списке в правом должен появляться перевод. Знакомство с другими элементами управления А теперь просто познакомимся, не вникая, с некоторыми другими элементами управления, имеющимися в Visual Basic. Элементы MonthView и DTPicker Оба они похожи друг на друга, поэтому остановлюсь только на DTPicker. На рисунке вы можете видеть его после запуска проекта с такой процедурой в окне
кода Private Sub DTPickerl_Change() If DTPickerl = #4/24/2001# Then MsgBox "День рождения" End Sub и щелчка мышкой по 2 4 апреля 2001 года. Тут же на картинке вы видите и окно сообщения . Вы можете щелкать по любой дате мышкой, она появится в текстовом поле и будет считаться Значением DTPickerl. Можете щелкнуть по Today. Стрелками влево и вправо вы меняете месяцы. Вы можете вручную писать любую дату в текстовом поле. DTPickerl воспринимает любые даты с 1601 по 9999 годы. Этими элементами удобно пользоваться для ручного заполнения датами списков и баз данных . |П| х| 1 2 3 4 5 6 7 3 10 11 12 13 14 15 1G 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <^1ТшЦ|- 08 0401 Piojectl День рождения 0К UpDown Forml 35 Разместите на форме элемент управления UpDown. Он имеет вид двух кнопок со стрелками. Рядом с ним разместите текстовое поле или другой элемент управления, способный показывать числа. Мы разместили текстовое поле Textl. Задача: При помощи элемента UpDown изменять в текстовом поле числа от 0 до 100 с шагом 5 и обратно. Установите следующие свойства элемента UpDown: Min - 0, Max - 100, Increment - 5, BuddyControl - Textl, BuddyProperty - Default. Запустите проект . Убедитесь в правильности его работы. Элементы DriveListBox, DirListBox, FileListBox Все эти три элемента управления показаны в порядке слева-направо на рисунке . iiu Forml ■i Program Files _JVB98 ■J Проекты Проекты для книги J160-Э лементы упр; 11665-Драйвы-пат Forml. frrn Projectl .vbp Projectl .vbw Поместите их на форму, запустите проект. Пощелкайте по всем трем элементам. Вы видите, что в них отражена информация о вашем компьютере. DriveListBox показывает список логических дисков вашего компьютера, DirListBox показывает
вам папки логического диска и позволяет путешествовать по ним, FileListBox показывает файлы в папке. Как видите, Visual Basic "чувствует" структуру дисков и папок вашего компьютера. Однако, щелчки по элементам не приводят ни к каким конкретным действиям. Вы даже не можете, выбирая логический диск в DriveListBox, изменить логический диск в DirListBox, и выбирая папку в DirListBox, изменить содержимое FileListBox. Не говоря уже о том, чтобы сохраняться или открывать файлы, как это вы привыкли делать при помощи похожих элементов в приложениях Windows. Для всего этого, как вы уже догадались, надо будет писать программу. Но делать этого мы не будем, так как я планирую использовать для этих целей другой, более универсальный и удобный элемент управления - CommonDialog (см. 0) . RichTextBox Это нечто среднее между текстовым полем и редактором Microsoft Word. Другими словами, это текстовое поле, которое вы можете обогатить многими возможностями солидного текстового редактора. Вы сможете создавать в нем вполне приличные документы. Отдельные фрагменты текста в окне RichTextBox вы сможете форматировать по-разному, то есть придавать им разный размер шрифта, разный цвет шрифта, придавать разные стили абзацам и т.д. Созданные документы вы можете сохранять в формате RTF, который воспринимается редактором Word. И открывать , естественно, тоже. Найдете вы его в Project —» Components —» Microsoft RichTextBox Control 6.0. ListView и TreeView Если вы хотите увидеть одно из применений ListView и TreeView, то откройте Проводник Windows. Левая панель проводника это TreeView, а правая - ListView. Элемент TreeView приспособлен для отображения любых древовидных структур, не обязательно структуры папок на диске. Например, вы можете отобразить собственное генеалогическое древо. Элемент ListView приспособлен для удобного отображения списков, включая пиктограммы (значки, иконки) элементов списка. Списки могут отображаться и в табличном виде, подобно таблицам баз данных. Закладка (TabStrip) и строка состояния (StatusBar) Что такое закладка, вы можете посмотреть так: File —» Add Project. Там вы увидите три закладки: New, Existing, Recent. Строка состояния присутствует во многих приложениях Windows. Вот пример строки состояния редактора Microsoft Word: Стр. 158 Разд 1 158/235 На 26,7см Ст 41 Кол 62 Строка состояния всегда присутствует на экране и применяется поэтому для отображения информации, которую всегда удобно держать перед глазами. MSChart Если у вас в проекте есть числовые данные, то элемент управления MSChart поможет вам построить по этим данным красивую диаграмму.
Найдете вы этот элемент в Project —» Components —» Microsoft Chart Control 6.0. Разместите его на форме. Он имеет такой вид ^ Выбирая разные значения свойства chartType, вы изменяете тип диаграммы. Должен сказать, что источник данных для диаграммы подойдет далеко не всякий. PictureClip Применяется для хранения большого числа кадров графической информации. Эти кадры хранятся, как прямоугольные фрагменты одной растровой картинки. Из этих кадров можно делать мультфильмы, мы уже делали мультфильмы. PictureClip позволяет это делать с меньшей затратой ресурсов компьютера. Найдете вы его в Project —» Components —» Microsoft PictureClip Control 6.0. ImageCombo Похож на ComboBox, но для каждого элемента списка показывает еще и пикто- граммку. MSComm Этот элемент обеспечивает передачу и прием информации через последовательный порт компьютера. СТРОКИ, ФАЙЛЫ, ОБРАБОТКА ОШИБОК В этой главе я собрал совершенно необходимые, но разнокалиберные вещи, которые по тематике не подходили к другим главам. Строки Со строковым типом String мы познакомились ранее. Какие интересные задачи связаны с работой со строками? Шифровка-дешифровка информации. Поиск в длинном тексте (например, в словаре или в инструкции по игре) нужного слова, которое просто так, глазами, искать очень долго. Автоматическое исправление орфографических ошибок в диктанте по русскому языку. И так далее. Для решения этих задач мы должны уметь "влезать внутрь строк", то есть анализировать и преобразовывать строки. Visual Basic предоставляет для этого богатый набор функций. Вот некоторые из них: Функция Результат Пояснение "Мото" + "роллер" Мотороллер Операция + над строками просто соединяет строки в одну. Visual Basic может ее спутать со сложением чисел "Мото" & "рол" & "лер" Мотороллер Операция & тоже соединяет строки в одну. Ее рекомендуется всегда применять вместо +, так как со сложением ее не спутаешь Len ("Чук и 9 Длина строки, включая пробелы
Гек") Mid ("Астроном" , 3, 4) трон Часть строки длиной 4, начиная с 3-го символа Mid ("Чук и Гек", 5, 1) и 5-й символ в строке При помощи функции Mid вы можете добраться до каждой буквы в тексте. Следующий фрагмент распечатывает в столбик слово "Телепортация": s = "Телепортация" For i = 1 То Len(s) Debug.Print Mid(s, i, 1) 'Это i-я буква в строке Next Следующая функция позволяет искать в тексте нужное слово: InStr ("Астроном", трон") 3 Позиция (номер символа), начиная с которой строка "трон" находится в строке "Астроном" InStr ("Астроном", "Трон") 0 Строка "Трон" не найдена в строке "Астроном" Left ("Победа", 2) По 2 левых символа в строке Right ("Победа", 3) еда 3 правых символа в строке Ucase ("астРОнОм") АСТРОНОМ Все символы строки переводятся в верхний регистр Lease ("астРОнОм") астроном Все символы строки переводятся в нижний регистр В «Калькулятор» жизнь заставила нас познакомиться с функцией Val, которая преобразует строку в число, а в «Переменные» - с функцией Str, которая преобразует число в строку. Напомним их вам: Val ("20 груш и 8 яблок") 20 Функция читает строку слева направо, пока не натолкнется на символы, никакого отношения к числам не имеющие Val (" - Югруш") -10 На пробелы при этом внимание не обращается 3 * Val ( "2" & "0" ) 60 Выражение "2" & "0" равняется строке "20", ну a Val ( "20" ) равняется числу 20 Str (5 * 5) 25 Число 25 преобразуется в строку "25". Хотя, надо сказать, что Visual Basic при работе с данными во многих случаях сам, без всякого вмешательства, услужливо преобразовывает данные к удобному с его точки зрения типу. Когда мы вводим текст в текстовое окно, мы часто не замечаем, что лишний раз нажали на клавишу пробела, тем более, что лишние пробелы, особенно в самом начале и в самом конце строки, заметить трудно. Мы не всегда заботимся о том, чтобы избавиться от них. А зачем? А затем, что компьютер пробелы видит не хуже любой буквы и считает их полноправными символами. Мы склонны считать строки "Африка" и "Африка " вполне одинаковыми. Компьютер же не может позволить себе такой вольности, он прекрасно видит, что во второй строке в конце стоит пробел. Значит строки не равны и это может привести к неожиданным для нас результатам. Следующие три функции позволяют нам справиться с невнимательностью : Функция Результат Пояснение "Ж" & LTrim(" Бутевни матлны ") & "Ж" ЖБутевни матлны Ж Функция LTrim отсекает ведущие слева пробелы
"Ж" & RTrim(" Бутевни матлны ") & "Ж" Ж Бутевни матлныЖ Функция RTrim отсекает волочащиеся справа пробелы "Ж" & Trim (" Бутевни матлны ") & "Ж" ЖБутевни матлныЖ Функция Trim отсекает пробелы и слева и справа Таблица ASCII Символы, используемые в работе с компьютерами, сведены в так называемую таблицу ASCII. У каждого из них есть порядковый номер в этой таблице. Его нам сообщает функция Asc. Функция же Chr наоборот - по номеру сообщает символ: Функция Результат Пояснение Asc ("Ы") 219 Буква Ы стоит в таблице ASCII под 219 номером Chr (219) Ы Под 219 номером в таблице ASCII стоит буква Ы Всего в таблице ASCII 256 символов, пронумерованных от 0 до 255. Вот фрагмент, распечатывающий эти символы, начиная с 32-го: For i = 32 То 255 Debug.Print Chr(i); Next Вот результат работы фрагмента: !"#$%&'()*+,- /0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]л_чabcdefghijklmnopqrstuvwxyz { I }~Dbr,r„...tt€VoJb<}bKbnF) " ""•—LTMjb>ibkhu УуЛаГ \ §Ё©е«-.-®1 °ilirpf • ё№е»jSsi АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬГЬЭЮЯабвгдежЗийклмнопрстуфхцчшщъыьэюя радание 124: Определите без компьютера, что напечатает оператор Debug.Print Chr(Asc("Ю") +1) ? Задание 125: "Детская шифровка". Среди детей встречается игра, заключающаяся в зашифровке своей речи "для секретности" за счет вставки в произносимые слова какого-нибудь звукосочетания, например, "быр". Тогда вместо слова "корова" будет произнесено "кобырробырвабыр". Составьте программу, которая распечатывает любую строку из 6 букв, после каждой второй буквы вставляя "быр". Если получилось, то решите эту задачу для строки произвольной длины. Задание 126: Давайте поставим задачу шифрования текста более серьезно. Имеется строка текста. Требуется написать программу, которая зашифровывала бы ее в другую строку. Способов шифровки вы можете придумать сколько угодно. Попробуйте такой - заменять каждый символ текста символом, следующим по порядку в алфавите (в таблице ASCII). Тогда слово кот превратится в слово лпу. Составьте, пожалуйста, и программу дешифровки. Когда вы познакомитесь с файлами, вы сможете уже зашифровывать и дешифровывать не отдельные строки, а целые тексты. В том числе и ваши программы. Один из возможных путей программирования таких задач: Начните с того, что объявите массив, состоящий из строк длины 1, то есть, по сути, массив символов. Вот как это сделать: Dim s(20) As String * 1. Заполните массив символами исходной строки. Теперь вам будет удобней с ними работать. Придумайте, что делать с буквой "я". В ответе же эта задача решена другим, более коротким способом. Файлы В Visual Basic существует несколько типов файлов. Мы познакомимся с самым простым из них - текстовым файлом. Вам совершенно не обязательно знать, как
физически устроен носитель, на который файл будет записываться. При работе с текстовым файлом удобно воображать, что носитель - не диск, состоящий из дорожек, а подобен листу бумаги или экрану монитора, файл же - это строки информации на этом листе или экране. Запись в файл и считывание из файла осуществляются магнитной головкой, которая движется по строкам файла строго последовательно, не пропуская ни строки, подобно авторучке, когда вы пишете письмо , или глазу, когда его читаете. Но у магнитной головки нет свободы глаза или авторучки, которые по вашему желанию могут "прыгать" по листу, как хотят. Головка движется строго последовательно, не пропуская ни символа, поэтому такие файлы еще называют файлами с последовательным доступом. Данные в текстовых файлах могут быть числами, строками или иметь другой тип. Сейчас на шести задачах мы научимся работать с текстовыми файлами. Задача 1: Записать слово "Азия" и число 1998 на магнитный диск с: в текстовый файл с именем Filimon.txt, располагающийся в папке VB. Решение: Прежде всего вы должны убедиться, что такая папка действительно существует по указанному адресу. Файла же там может и не быть. Затем придумаем файлу Filimon.txt номер, которым мы будем пользоваться в программе. Пусть это будет 1. Прежде чем начать работать с файлом, он должен быть открыт. При этом компьютер выполняет определенные подготовительные действия для работы с файлом. Вот как выглядит оператор, открывающий текстовый файл для записи: Оператор: Open "C:\VB\Filimon.txt" For Output As #1 Перевод: Открыть файл "C:\VB\Filimon.txt" для вывода как №1 Если файл раньше не существовал, то он создается. Если файл открывается для записи, то магнитная головка перемещается в начало файла. Это означает, как вы можете догадаться, что если в файле было раньше что-то записано, то все сотрется. Вот программа: Private Sub Commandl_Click() Open "C:\VB\Filimon.txt" For Output As #1 'Открыть для записи файл Filimon.txt в папке VB диска С под номером 1 Write #1, "Азия" 'Записать в файл №1 строку "Азия" Write #1, 1998 'Записать в файл №1 в следующую строку число 1998 Close #1 'Закрыть файл №1 End Sub Вы видите, что собственно запись осуществляется оператором Write. После работы с файлом его нужно закрыть оператором Close. Давайте убедимся, что все действительно правильно записалось. Для этого выйдем из Visual Basic в Windows, найдем нужную папку и обнаружим, что там действительно находится файл Filimon.txt. Чтобы заглянуть в него, щелкните по нему дважды мышкой, он откроется программой Notepad и вы увидите, что он содержит две строки: "Азия" 1998 Если вместо двух операторов Write вы напишете один: Write #1, "Азия", 1998 то в файл будет записана одна строка: "Азия",1998
Если вы не хотите стирать содержимое файла, а просто хотите дописать что- нибудь в его конец, то вместо слова Output в операторе Open нужно использовать слово Append. Удобно держать текстовый файл, в который ваша программа сохраняет свои данные , в той же папке, где находятся файлы вашего проекта. В этом случае возникает проблема - при переносе папки с проектом в другое место диска изменяется ее адрес, а значит и адрес файла данных. В операторе же Open указан старый адрес. Visual Basic выдаст сообщение об ошибке. В этой ситуации нужно в операторе Open дать понять компьютеру, что файл находится именно в папке с файлами проекта. Делается это так: Open App.Path & "\Filimon.txt" For ... Арр.Path - это адрес папки вашего проекта, где бы он ни путешествовал. Информация в наш файл может записываться только по порядку, последовательно. Мы не можем записать что-то сперва в начало файла, потом в конец, потом в середину. То же самое относится и к считыванию, о котором сейчас пойдет речь. Задача 2: В файле Filantrop.txt в папке проекта записаны следующие строки: 1999 "Азия" "Африка", 2000 Вывести третью строку на экран монитора. Вот программа: Private Sub Command3_Click() Dim al As Integer 'Четыре переменные в оперативной памяти, Dim а2 As String 'в которые будут загружены данные Dim аЗ As String 'из первых трех строк Dim а4 As Integer 'файла Open App.Path & "\Filantrop.txt" For Input As #1 'Открыть для чтения под номером 1 файл Filantrop.txt из папки проекта Input #1, al 'чтение 1-й строки Input #1, а2 'чтение 2-й строки Input #1, аЗ, а4 'чтение 3-й строки Close #1 'Закрыть файл 1 Debug.Print аЗ, а4 End Sub Вот результаты в окне Immediate: Африка 2000 Вы видите, что собственно чтение осуществляется оператором Input. После работы с файлом его нужно закрыть оператором Close. Обратите внимание, что для того, чтобы добраться до третьей строки, нам пришлось "зря" прочитать первые две. Задача 3: В предыдущей задаче мы еще до считывания знали, как располагаются по строкам и внутри строк данные в файле Filantrop.txt. Однако, нередки случаи, когда мы не имеем об этом представления. Все, что мы знаем, это то, что файл состоит из строк. Тем не менее, хочется прочитать данные из файла, чтобы хотя бы посмотреть на них. Для этого можно приказать Бэйсику загружать каждую строку файла, независимо от того, из каких данных она состоит, в переменную типа String. Вот программа, распечатывающая три первые строки файла Filantrop.txt:
Private Sub Command4_Click() Dim si As String 'Три переменные в оперативной памяти, Dim s2 As String 'в которые будут загружены три Dim s3 As String 'первые строки файла Open App.Path & "\Filantrop.txt" For Input As #1 'Открыть для чтения под номером 1 файл Filantrop.txt из папки проекта Line Input #1, si 'чтение очередной строки файла Debug.Print si Line Input #1, s2 'чтение очередной строки файла Debug.Print s2 Line Input #1, s3 'чтение очередной строки файла Debug.Print s3 Close #1 'Закрыть файл 1 End Sub Загрузку очередной строки в переменную типа String выполняет оператор Line Input. Вот результаты в окне Immediate: 1999 "Азия" "Африка", 2000 Вы видите, что кавычки и запятая не исчезли, как это было в распечатке задачи 2. Это потому, что Line Input не обращает внимания на символы, из которых состоит строка файла. Он просто загружает их подряд в строковую переменную. В нашем случае, например, строка s3 состоит из символов "Африка", 2000, включая кавычки и запятую. Если вы хотите как-то изменить содержимое текстового файла на диске, то вам целесообразно полностью загрузить его в память, изменить его там, как вам надо , а затем то, что получилось, целиком записать обратно в файл. Задача 4: Файл f состоит из 10 строк. Дописать в конец каждой строки восклицательный знак. Программа: Dim s(l То 10) As String Private Sub Commandl_Click() 'Загружаем файл в память: Open App.Path & "\f.txt" For Input As #1 'Открыть для чтения под номером 1 файл f.txt из папки проекта For i = 1 То 10 Line Input #1, s(i) 'чтение очередной строки файла Next Close #1 'Закрыть файл 1 'Преобразовываем строки в памяти: For i = 1 То 10 s(i) = s(i) & "!" 'Добавляем восклицательный знак в каждую строку Next 'Записываем преобразованные строки в файл: Open App.Path & "\f.txt" For Output As #1 'Открыть для записи под номером 1 файл f.txt из папки проекта For i = 1 То 10 Print #1, s(i) 'Запись очередной строки в файл Next Close #1 'Закрыть файл 1
End Sub Вы видите, что в этой программе запись осуществляется оператором Print, а не Write. Иначе бы строки в результирующем файле брались в кавычки, как это было в задаче 2. Таким образом, оператор Print применяется для вывода не только на монитор, но и в файл. Задача 5: Вам нужно прочесть все строки файла, а сколько строк в файле вы не знаете. Ваши действия: В этом случае оператор цикла For не подойдет, так как там нужно указывать точное число строк. Хорошо бы Бэйсику можно было приказать: "Читай, пока файл не кончился". И такой приказ есть. В его основе лежит функция EOF (End of File), которая в процессе последовательного считывания файла все время "чувствует", кончился ли он, и если кончился, принимает значение True, иначе - False. Упомянутый приказ реализуется фрагментом: Do While Not E0F(1) 'Выполняй, пока НЕ наступил КОНЕЦ ФАЙЛА 1 Line Input #1, s(i) i = i + 1 Loop А теперь на примере примитивной задачи продемонстрируем, как программа может сохранять нужные ей данные, чтобы в следующий раз воспользоваться ими: Задача 6: Пусть в файле Данные.txt записано число 10. После запуска программа должна раз в секунду печатать последовательные целые числа, начиная с числа, записанного в этом файле. Больше ничего делать ей не нужно. Понаблюдав некоторое время за печатью чисел, вы завершаете выполнение проекта. Вся соль задачи в том, чтобы при следующем запуске программа начала печатать не с 10, а с того числа, на котором завершился проект. Ваши действия: Вам необходимо сделать так, чтобы при запуске программы число считывалось из файла и счет начинался с него. Вам необходимо сделать так, чтобы при завершении работы последнее из напечатанных чисел записывалось в файл на место десятки. Тогда в следующий раз счет сам собой начнется с него. Создайте таймер. Настройте его интервал на 1 секунду. Программа: Dim Число As Integer Private Sub Form_Load() Open App.Path & "\Данные.txt" For Input As #1 'Открыть для чтения под номером 1 файл Данные.txt из папки проекта Input #1, Число 'Чтение числа, с которого начать счет Close #1 'Закрыть файл №1 End Sub Private Sub Timerl_Timer() 'Процедура таймера, выполняемая раз в секунду Debug.Print Число 'Печать числа Число = Число + 1 'Получаем следующее число End Sub
Private Sub Form_Unload(Cancel As Integer) Open App.Path & "\Данные.txt" For Output As #1 'Открыть для записи под номером 1 файл Данные.txt из папки проекта Write #1, Число 'Запись в файл числа, на котором закончен счет Close #1 'Закрыть файл №1 End Sub Здесь я использовал событие Form_Unload. Оно так же, как и событие Form_Terminate, наступает при завершении работы проекта нажатием на крестик в правом верхнем углу формы. Для нас между этими событиями нет разницы. Кроме файлов с последовательным доступом существуют еще файлы с произвольным доступом. Информация в этих файлах записывается упорядоченно и регулярно, благодаря чему к ней возможен более гибкий и быстрый доступ. На них мы останавливаться не будем. Задание 127: Создайте игру "Угадай число". Компьютер Загадывает число из диапазона от 1 до миллиарда. Человек должен его отгадать. Причем за наименьшее число попыток. При каждой попытке компьютер печатает номер попытки, число, предложенное человеком, и подсказку - "мало" или "много". Поскольку даже у самых умных математиков на угадывание уйдет несколько десятков попыток, то в процессе угадывания может возникнуть желание сохраниться до лучших времен. При запуске игры в следующий раз компьютер должен спросить, начинать ли новую игру или продолжать старую. Если старую, то компьютер должен распечатать все то, что было распечатано в прошлый раз - все номера попыток , числа, подсказки. Что еще можно делать с файлами Visual Basic может выполнять над файлами и папками те же действия, что вы вручную выполняете в Проводнике Windows, а именно: создание папок, копирование , перемещение и уничтожение папок и файлов. Пусть у вас на диске с в папке temp расположены папки 222, 333, 666, 999 и файл 1.txt. Действия над файлами: Оператор Смысл FileCopy "c:\temp\l.txt", "c:\temp\2.txt" Оператор FileCopy копирует файлы. У него два параметра: первый - адрес копируемого файла, второй - адрес файла, в который производится копирование. В данном примере Файл 1.txt копируется в свою же папку под именем 2.txt FileCopy "c:\temp\l.txt", "c:\temp\222\4.txt" Файл l.txt копируется в папку c:\temp\222 под именем 4.txt Name "c:\temp\222\4.txt" As "с:\temp\222\5.txt" Оператор Name As переименовывает и перемещает файлы и папки. Два его параметра имеют тот же смысл, что и у оператора FileCopy. В данном примере Файл 4.txt переименовывается в 5.txt и остается в своей папке. Name "c:\temp\222\5.txt" As Файл 5.txt перемещается в папку temp.
"c:\temp\5.txt" Kill "c:\temp\5.txt" Оператор Kill уничтожает файл. Действия над папками: Name "c:\temp\333" As "с:\temp\444" Папка 333 переименовывается в 444. Name "c:\temp\666" As "с:\temp\222\666" Папка 666 перемещается вместе со всем своим содержимым внутрь папки 222. MkDir "c:\temp\888" Создается пустая папка 888. RmDir "c:\temp\888" Уничтожается пустая папка 888. В программировании широко используется понятие текущей папки. В данный момент времени текущая папка может быть только одна. Назначьте текущей папку, с файлами которой вы в данный момент работаете, и запись адресов в операторах существенно сократится. Например, работая в папке c:\temp\999, вы вместо того, чтобы все время писать операторы вида FileCopy "c:\temp\999\22.txt", "c:\temp\999\44.txt" один раз задаете текущую папку, вот так: ChDir "c:\temp\999" а затем уже все время пишете операторы такого вида: FileCopy "22.txt", "44.txt" Функция CurDir позволяет вам узнать, какая папка в настоящий момент является текущей. Для этого вам достаточно выполнить оператор Debug.Print CurDir. Функция Shell С помощью функции Shell вы можете, не выходя из проекта, запускать другие программы Windows. Например, строка у = Shell ("C:\WINDOWS\Notepad.exe") запускает стандартный текстовый редактор Windows - Блокнот (Notepad). В скобках вы должны указать адрес запускающего файла нужного вам приложения. Вместо адреса можно писать так называемую командную строку: у = Shell ("C:\WINDOWS\Notepad.exe C:\Untitled.txt") Здесь Блокнот откроется с загруженным файлом C:\Untitled.txt. Вы можете управлять видом окна, в котором откроется программа: у = Shell ("C:\WINDOWS\Notepad.exe C:\Untitled.txt", vbMaximizedFocus) Здесь окно будет развернуто на весь экран. Попробуйте другие константы: vbHide, vbNormalFocus, vbMinimizedFocus, vbNormalNoFocus, vbMinimizedNoFocus. Обработка ошибок. Оператор On Error Многие функции и операторы, которыми вы пользуетесь в Visual Basic, вовсе не обязаны при любых обстоятельствах успешно завершать свою работу. Например, вы запустили процедуру для чтения файла с дискеты: Private Sub Commandl_Click() Open "a:\Файлик.txt" For Input As #1 Input #1, a Close #1 Debug.Print a End Sub
но забыли вставить дискету в дисковод. Оператор Open не может выполнить свою работу, Visual Basic выдает сообщение об ошибке и работа приложения прерывается. Рядовой пользователь, работающий с вашим приложением, окажется в затруднительном положении. Он совсем не обязан разбираться в английском тексте сообщения, и если он даже догадается, в чем дело, и вставит дискету, все равно приложение надо будет запускать заново, так как оно прервано. Вы, как программист, должны учитывать, что с вашим приложением будут работать рядовые пользователи, причем даже не очень квалифицированные. Поэтому при программировании вы должны предугадать все возможные неправильные действия пользователя, чтобы при таких действиях приложение не прерывалось, а выдавало вразумительное сообщение на русском языке и советы по выходу из затруднительной ситуации . Кое-что в этом направлении мы уже делали, предохраняя калькулятор от арифметических действий над текстом и от деления на ноль. Самым примитивным способом защиты вышеприведенной программы будет такой: Private Sub Commandl_Click() On Error GoTo ml Open "a:\Файлик.txt" For Input As #1 Input #1, a Close #1 Debug.Print a Exit Sub ml: MsgBox ("Ошибка при вводе файла. Возможно, в дисководе нет дискеты.") End Sub Пояснения: Оператор On Error GoTo ml переводится так: "При возникновении ошибки иди к метке ml". Оператор On Error с момента своего выполнения заставляет компьютер быть начеку, не появится ли ошибка при выполнении программы. При ее появлении сообщение Visual Basic об ошибке уже не возникает, программа не прерывается, а управление передается на метку. Поэтому мы должны ставить оператор On Error раньше, чем операторы, могущие дать ошибку (в нашем случае это Open и Input). После метки вы должны поставить операторы, объясняющие пользователю, в чем дело, и помогающие как-то исправить ситуацию. В нашем случае никаких операторов, кроме MsgBox, не нужно. Забывчивый пользователь вставляет дискету в дисковод и снова жмет кнопку Commandl. Все в порядке. Обратите внимание на оператор Exit Sub. Если бы его не было, оператор MsgBox выполнялся бы всегда, даже при нормальной работе процедуры. Написанный нами код слишком примитивен. Во-первых, мы не можем понять, какой оператор дал ошибку - Open или Input. Во-вторых, причин ошибки может быть несколько: отсутствие дискеты в дисководе, отсутствие файла на дискете и т.п. В первом случае мы вдобавок к оператору On Error GoTo ml вставляем после Open, но перед Input, оператор On Error GoTo m2. В результате ошибка в строке Input будет обрабатываться операторами, начинающимися с метки т2., а ошибка в строке Open будет продолжать обрабатываться операторами, начинающимися с метки ml. Во втором случае к нашим услугам объект Err, свойство которого Number принимает разные значения в зависимости от характера ошибки. Мы можем, например, писать такие строки: If Err.Number =71 Then MsgBox ("В дисководе нет дискеты.") Elself
Номера и имена констант ошибок вы найдете так: Help^Contents^ MSDN Library (если она у вас установлена) -^Visual Studio documentation -^Visual Basic documentation^Reference^Trappable Errors. Функции. Параметры функций Мы с вами уже сталкивались со стандартными функциями. Например, выражение 10+Abs(-20) имеет значение 30, так как функция Abs(-20) обозначает абсолютную величину числа -20. Стандартная функция - это некая скрытая программа, которая принимает свои параметры, указанные в скобках, в качестве исходных данных, что-то делает с ними и в результате получает одну величину, которая и является значением функции. Если вам недостаточно стандартных функций, вы можете создавать собственные функции поль з ов а т еля: Задача: Предположим, вам часто приходится вычислять периметры прямоугольников. Тогда вам было бы удобно иметь функцию вида perimetr(10,4), которая имела бы значение периметра прямоугольника со сторонами 10 и 4. Рассмотрим, как это делается, на примере программы вычисления суммарного периметра трех прямоугольников: Private Function perimetr(dlina As Integer, shirina As Integer) As Long perimetr = 2 * (dlina + shirina) End Function Private Sub Commandl_Click() Debug.Print perimetr(10, 4) + perimetr(20, 30) + perimetr(3, 8) End Sub Здесь щелчком по кнопке Commandl мы запускаем вычисление суммы периметров трех прямоугольников: 10*4, 20*30 и 3*8. А для того, чтобы узнать, как вычислять perimetr, компьютер заглядывает в определение функции, выделенное мной полужирным шрифтом. Вы видите, что определение функции очень похоже на определение процедуры. Но функция в отличие от процедуры обладает некоторыми свойствами переменной величины и поэтому определение функции отличается от определения процедуры следующими двумя вещами: В заголовке функции после скобок с параметрами должен быть указан тип функции (у нас это Long). Внутри определения функции ей хотя бы раз должно быть присвоено какое- нибудь значение, как если бы это была не функция, а обычная переменная (у нас этим занимается оператор perimetr=2*(dlina+shirina)). Обращение к функции также отличается от обращения к процедуре. Если обращение к процедуре - самостоятельный оператор, то обращение к функции - это обычно составная часть выражения (10+Abs(-20) , Debug.Print perimetr(10,4) + perimetr(20, 30)). Рассмотрим другой пример функции: Задача: Напишите функцию Ответ, которая бы в ответ на вопрос человека "Какое сегодня число?" принимала значение правильной даты, а ответом на любой другой вопрос должно служить "Не знаю". Вот программа: Dim q As String Private Function Ответ(Вопрос As String) As String
If Вопрос = "Какое сегодня число?" Then Ответ = Date Else Ответ = "Не Знаю" End Function Private Sub Commandl_Click() q = InputBox("Задайте вопрос") Debug.Print Ответ(q) End Sub Здесь щелчком по кнопке Commandl мы вызываем появление на экране окна InputBox с предложением задать вопрос. Введенный нами вопрос запоминается в переменной q. Следующая строка (Debug.Print Ответ(q)) вызывает к жизни нашу функцию. При этом компьютер, выполняя тело функции, вместо параметра Вопрос работает с переменной q, так как именно она была указана в обращении к функции. Получается очень удобно: когда мы пишем функцию, нам не нужно заботиться о том, какие имена переменных будут использованы при обращении к функции, мы просто даем параметру любое пришедшее в голову имя. И наоборот, когда мы пишем обращение к функции, нам не нужно заботиться о том, какие имена имеют параметры в заголовке функции. Задание 128: Напишите функцию, вычисляющую любое число Фибоначчи. Например, fib(8) - это 8-е число Фибоначчи. Указание: Если будете использовать массив, то дайте ему имя, отличающееся от имени функции, например, f. Локальные переменные Будем называть процедуры и функции подпрограммами, так как они являются составными частями программы. Переменные, которые объявлены в начале окна кода, могут быть использованы в любой подпрограмме этого окна. Говорят, что они видны из любой подпрограммы. Их называют локальными переменными формы. Если же переменные объявлены внутри подпрограммы или являются параметрами подпрограммы, то они и использованы могут быть только внутри нее. Говорят, что они не видны из других подпрограмм. Их называют локальными переменными подпрограммы. О так называемых глобальных переменных поговорим позже. Пример: Dim a As Integer 'а - локальная переменная формы Private Sub Проц1() а = 1 End Sub Private Sub Проц2() Dim b As Integer b = 2 End Sub 'b - локальная переменная процедуры Private Sub ПроцЗ(с As Integer) 'с - локальная переменная процедуры Debug.Print с End Sub Private Sub Commandl_Click() Проц!
Debug.Print a End Sub Здесь a - локальная переменная формы, b и с - локальные переменные процедур. Вы видите, что а нормально используется в двух процедурах. Запустим проект . Щелкнем по кнопке Commandl. Печатается 1. Все в порядке. Процедуры Проц2 и ПроцЗ здесь не работали. Они приведены только для иллюстрации. Теперь попробуем использовать b вне процедуры Проц2. Для этого добавим к программе такую процедуру: Private Sub Command2_Click() Проц2 Debug.Print b 'Ошибочный оператор. Переменная b из процедуры Проц2 'отсюда не видна и не будет напечатана End Sub Щелкнем по кнопке Command2. Вместо 2 печатается пустая строка. Также неудачей закончится попытка использования с. Зачем такие ограничения и неудобства? Какой во всем этом смысл? Поговорим об этом. Создание разных зон видимости для разных переменных является способом повышения надежности больших программ и понижения вероятности запутаться при их написании. Программы, создаваемые сегодня профессиональными программистами, очень велики - десятки и сотни тысяч строк. Таково, например, большинство игровых программ. Естественно, один человек не может достаточно быстро создать такую программу, поэтому пишется она обычно большой группой программистов. Для этого программа делится на части, и каждый программист пишет свою часть. И все равно, в каждой части присутствуют десятки и сотни подпрограмм с десятками и сотнями переменных, в которых человеку легко запутаться. Исследуем взаимодействие подпрограмм в такой программе. Для этого рассмотрим бессмысленную "сложную" программу, не использующую локальных переменных подпрограмм. В ней автор озабочен вычислением переменной у и печатью переменной х: Dim х As Integer 'х - локальная переменная формы Dim у As Integer 'у - локальная переменная формы Private Sub В() у = 10 * 10 Debug.Print "Результат равен"; End Sub Private Sub Commandl_Click() x = 5 В Debug.Print x End Sub Очевидно, программа, как и хотел ее автор, напечатает: Результат равен 5 Все хорошо. Но при большом объеме программы возникает опасность, что автор случайно использует внутри какой-нибудь подпрограммы для ее нужд имя переменной, используемой в другой подпрограмме для других нужд, и таким образом испортит ее значение. Пусть, например, в нашей процедуре В автор опрометчиво присвоил бы значение 10*10 не переменной с именем у, а переменной с именем х. Тогда эта строчка программы выглядела бы так:
х = 10 * 10 Очевидно, данная программа к неудовольствию ее автора напечатала бы Результат равен 100 Для защиты от таких ошибок автор должен внимательно следить, чтобы разные подпрограммы не использовали переменных с одинаковыми именами. Но для больших программ этот контроль очень трудоемок и неудобен. Для того, чтобы избежать его, в современных языках программирования и разработан механизм локальных переменных. Если программист знает, что его число 10*10 нигде, кроме как в процедуре В, не нужно, он объявляет соответствующую переменную любым именем внутри процедуры В, ничуть не заботясь, что переменные с таким же именем встречаются в других местах программы, и все нормально работает: Dim х As Integer 'х - локальная переменная формы Private Sub В() х = 10 * 10 Debug.Print "Результат равен"; End Sub Private Sub Commandl_Click() x = 5 В Debug.Print x End Sub Данная программа к удовольствию ее автора напечатает Результат равен 5 Произойдет это вот по какой причине: Переменные, объявленные внутри и снаружи подпрограммы или внутри разных подпрограмм, Visual Basic считает разными переменными, даже если они имеют одинаковые имена. Переменная х, объявленная снаружи подпрограммы, это совсем другая переменная, чем х, объявленная в подпрограмме, и помещаются эти переменные в разных местах памяти. Поэтому и не могут друг друга испортить. Вы можете вообразить, что это переменные с разными именами хЛОКформ и ■л-локпроц • Переменная, объявленная внутри подпрограммы, невидима снаружи. Она локальна в этой подпрограмме. Она существует, пока работает подпрограмма, и исчезает при выходе из подпрограммы. Переменная же, объявленная снаружи подпрограммы, видна из любой подпрограммы окна кода и каждая подпрограмма может ее испортить. Однако, когда подпрограмма натыкается на переменную х, объявленную внутри самой этой подпрограммы, то она, благодаря описанному механизму, работает только с ней и не трогает переменную х, объявленную снаружи. Для тренировки рассмотрим еще один пример: Dim х As Integer 'х - локальная переменная формы Dim z As Integer 'z - локальная переменная формы Private Sub В() Dim х As Integer 'x - локальная переменная процедуры Dim х As Integer Dim у As Integer x = 20: у = 30: z = 40 'x 'У локальная переменная процедуры локальная переменная процедуры End Sub Private Sub Commandl_Click() x = 1: z = 2 'x и z - локальные переменные формы
в Debug.Print x, z 'x и z - локальные переменные формы End Sub Программа напечатает 1 40 Пояснение: Оператор Debug.Print х, z находится снаружи процедуры В, и поэтому локальная переменная процедуры х=20, объявленная внутри В, из него не видна. Зато прекрасно видна локальная переменная формы х=1, которую он и печатает. Переменная же z не объявлена внутри В, поэтому она является локальной переменной формы, и оператор z=40 с полным правом меняет ее значение с 2 на 40. Для полной ясности приведу порядок работы компьютера с этой программой: В оперативной памяти Visual Basic отводит ячейки под X локформ и Z лок- форм. Процедура Commandl_Click начинает выполняться с присвоения значений X локформ = 1 и Z локформ = 2. Почему локформ, а не локпроц? Потому что переменные с именами X и Z в процедуре Commandl_Click не объявлены, а значит волей- неволей процедуре приходится пользоваться локальными переменными формы. Вызывается процедура В. При этом в оперативной памяти отводится место под X локпроц и У локпроц. Присваиваются значения X локпроц =20, У локпроц = 30 и Z локформ = 40. Программа выходит из процедуры В. При этом исчезают переменные X локпроц = 20 и У локпроц = 30. Компьютер печатает X локформ = 1 и Z локформ = 40. Таким образом, вы видите, что смысл механизма локальных переменных - в увеличении надежности программирования. Я советую те переменные, которые наверняка не понадобятся вне процедуры, делать локальными в ней. Статические переменные Исчезновение значения локальной переменной при выходе из процедуры не всегда удобно. Например, если процедура предназначена для увеличения суммы, объявленной локальной переменной. Следующая процедура будет работать неверно, так как при каждом вызове процедуры сумма будет обнуляться: Private Sub Commandl_Click() Dim Число As Integer Dim Сумма As Integer Число = Textl.Text Сумма = Сумма + Число End Sub Чтобы она не обнулялась, объявим сумму статической переменной: Private Sub Commandl_Click() Dim Число As Integer Static Сумма As Integer Число = Textl.Text Сумма = Сумма + Число End Sub Теперь все в порядке. Массивы как параметры В качестве параметров процедур и функций можно подставлять любые выражения подходящего типа. Например, вместо у = perimetr (10 , 4)
можно было бы написать а = 4 : у = perimetr (10 , а) или а = 3 : у = perimetr (10 , а+1). Параметры процедур и функций можно объявлять, как имеющие самые разные типы, причем не только простые, но и сложные. Если вы не знаете, как правильно объявить тип параметра в заголовке функции или процедуры, можете объявить его как Variant. Рассмотрим для иллюстрации пример с массивами. Задача: Имеется два массива, по два числа в каждом. Напечатать сумму элементов каждого массива. Использовать функцию sum, единственным параметром которой является суммируемый массив. Программа: Dim а(1 То 2) As Integer Dim b(l To 2) As Integer Private Function sum(c As Variant) As Integer sum = c(l) + с(2) End Function Private Sub Commandl_Click() a(l) = 10: a(2) = 20 b(l) = 40: b(2) = 50 Debug.Print sum(a), sum(b) End Sub Вычисляя функцию sum(a), Visual Basic работает с ячейками для элементов массива а, делая с ними все то, что операторы тела функции должны делать со значениями элементов массива с. Вычисляя же функцию sum(b), Visual Basic аналогично работает с ячейками для элементов массива Ь. Задание 129. В школе два класса. В каждом - 5 учеников. Каждый ученик получил отметку на экзамене по физике. Определить, какой из двух классов учится ровнее (будем считать, что ровнее учится тот класс, в котором разница между самой высокой и самой низкой отметкой меньше). Указание: Создать функции Минимум(с), Максимум(с) и Разница(с). Передача параметров по ссылке и по значению Передача параметров по значению - еще один способ повысить надежность программирования. Рассмотрим пример. Вот процедура Квадр, вычисляющая периметр и площадь квадрата по его стороне : Dim A As Integer 'сторона Dim Р As Integer 'периметр Dim S As Integer 'площадь Private Sub Квадр(Сторона As Integer, Периметр As Integer, Площадь As Integer) Периметр = 4 * Сторона Площадь = Сторона А 2 End Sub Private Sub Commandl_Click() A = 10 Квадр A, P, S
Debug.Print "Сторона="; А; "Периметр="; P; "Площадь="; S End Sub Результат: Сторона= 10 Периметр= 40 Площадь= 100 Здесь щелчком по кнопке вы приказываете компьютеру вычислить периметр и площадь квадрата со стороной 10. Компьютер, выполняя тело процедуры Квадр и присваивая значения переменным Периметр и Площадь, тем самым присваивает значения переменным Р и S, то есть изменяет содержимое ячеек памяти, отведенных под эти переменные. Говорят, что в этом случае между вызывающей и вызываемой процедурами осуществляется передача параметров по ссылке. Чтобы подчеркнуть, что вы используете именно этот способ передачи параметров, вы можете записать заголовок процедуры так: Private Sub Квадр (Сторона As Integer, ByRef Периметр As Integer, ByRef Площадь As Integer) хоть это и излишне. При этом способе вызываемая процедура получает полный контроль над переменными А, Р и S вызывающей процедуры и может присваивать им все, что хочет. Это удобно, но небезопасно. Ведь в этом случае переменные становятся беззащитными против ошибок в вызываемой процедуре. Так, программист может случайно, для каких-то других нужд, включить в процедуру какой-нибудь оператор, меняющий значение параметра Сторона, например, Сторона=1. Предположим, в этом случае процедура примет такой вид: Private Sub Квадр(Сторона As Integer, Периметр As Integer, Площадь As Integer) Периметр = 4 * Сторона Площадь = Сторона А 2 Сторона = 1 End Sub Тогда результаты будут напечатаны неверно: Сторона= 1 Периметр= 40 Площадь= 100 Чтобы обезопасить себя от такой ситуации, вы можете явно приказать Бэйсику, чтобы он не смел трогать такую-то переменную, отдающую свое значение параметру. Для этого достаточно заголовок процедуры написать так: Private Sub Квадр (ByVal Сторона As Integer, Периметр As Integer, Площадь As Integer) Теперь, что бы ни произошло с параметром Сторона, значение переменной А меняться не будет. Убедитесь, что теперь снова все в порядке. Такой способ передачи параметров называется передачей параметров по значению. Не переборщите с надежностью. Так, глупо было бы писать Private Sub Квадр (ByVal Сторона As Integer, ByVal Периметр As Integer, ByVal Площадь As Integer) так как результат в этом случае был бы такой: Сторона= 10 Периметр= 0 Площадь= 0 Задание 130: На двух метеостанциях (А и В) в течение года измерялась температура. Соответственно созданы два массива чисел длиной 365. Затем оказалось, что на обеих станциях термометры были испорчены: на станции А термометр все время показывал температуру на 2 градуса выше настоящей, а на станции В - на 3 градуса ниже. Написать процедуру с двумя параметрами, которая исправляет один исходный массив и с ее помощью исправить оба массива. Один параметр - величина поправки, другой - массив температур.
Индукция. Рекурсия Понятие рекурсии - сложное, но необходимое понятие для программиста. Здесь мне никуда не уйти от классического примера о факториале. Факториалом целого положительного числа N называется произведение всех целых чисел от 1 до N. Например, факториал пяти равен 1*2*3*4*5, то есть 120. Факториал единицы считается равным 1. Все понятно. Однако, существует еще один, совершенно ужасный способ определения, что такое факториал. Этот способ определения называется индуктивным. Вот он: "Факториал единицы равен 1. Факториал любого целого положительного числа N, большего единицы, равен числу N, умноженному на факториал числа N-1." Если вам уже все ясно, значит вы - профессор математики. Для обычных людей поясню. Возьмем какое-нибудь конкретное N, например, 100. Тогда ужасное определение будет звучать проще: Факториал числа 100 равен числу 100, умноженному на факториал числа 99. Ну и что? И как же отсюда узнать, чему равен какой-нибудь конкретный факториал, скажем, факториал трех? Будем рассуждать также совершенно чудовищным образом: Смотрю в определение: Факториал трех равен 3 умножить на факториал двух. Не знаю, чему равен факториал двух. Поэтому спускаюсь на ступеньку ниже. Смотрю в определение: Факториал двух равен 2 умножить на факториал единицы. Не знаю, сколько это. Спускаюсь еще на ступеньку. Смотрю в определение: Факториал единицы равен 1. Вот, наконец-то - впервые узнал конкретное число. Значит можно подниматься обратно. Поднимаюсь на одну ступеньку. Факториал двух равен 2 умножить на 1, то есть 2. Хорошо. Поднимаюсь еще на ступеньку. Факториал трех равен 3 умножить на 2, то есть 6. Задача решена! Рассуждая таким образом, можно вычислить факториал любого числа. Этот способ рассуждения называется рекурсивным. Какое отношение все это имеет к компьютерам? Дело в том, что рекурсивный способ рассуждений реализован во многих языках программирования, в том числе -ив Visual Basic. Значит, этим языкам должен быть понятен и индуктивный способ написания программ. Обозначим кратко факториал числа N, как Factorial(N), и снова повторим наш индуктивный способ объяснения: "Если N=1, то Factorial(N) = 1. Если N>1, то Factorial(N) вычисляется умножением N на Factorial(N-1)." В соответствии с этим объяснением напишем на Visual Basic функцию Factorial для вычисления факториала: Private Function Factorial(ByVal N As Integer) As Long If N = 1 Then Factorial = 1 If N > 1 Then Factorial = N * Factorial(N - 1) End Function
Private Sub Commandl_Click() Debug.Print Factorial(3) End Sub Что самое удивительное - функция работает! Несмотря на то, что в программе нигде не употребляется оператор цикла. Вся соль программы в том, что функция Factorial вместо этого включает в себя вызов самой себя - Factorial(N-1). Что же происходит в компьютере во время выполнения программы? Механизм происходящего в точности соответствует нашему путешествию по ступенькам: Все начинается с того, что мы щелкаем по кнопке и Visual Basic пробует выполнить строку Debug.Print Factorial(3). Для этого он вызывает функцию Factorial. Выполнение подпрограммы начинается с того, что в памяти отводится место для всех параметров и локальных переменных, а значит и для нашего параметра N. Затем число 3 подставляется на место параметра N, то есть в память в ячейку N посылается 3. Затем выполняется тело функции. Так как 3>1, то Visual Basic пытается выполнить умножение 3* Factorial(3-1) и сталкивается с необходимостью знать значение функции Factorial(2), для чего вызывает ее, то есть отправляется ее выполнять, недовыполнив Factorial(3), но предварительно запомнив, куда возвращаться. Спускаюсь на ступеньку ниже. В соседнем месте памяти отводится место для N. Это уже другое N, путать их нельзя! В эту ячейку N посылается 2. Затем выполняется тело функции. Пусть вас не смущает, что Visual Basic второй раз выполняет тело функции, не закончив его выполнять в первый раз. Так как 2>1, то Visual Basic пытается выполнить умножение 2* Factorial(2-1) и сталкивается с необходимостью знать значение функции Factorial(1), для чего вызывает ее. Спускаюсь еще на ступеньку. В соседнем месте памяти отводится место еще для одного N. В эту ячейку N посылается 1. Затем выполняется тело функции. Так как 1=1, то Visual Basic вычисляет Factorial=l. Вот - впервые конкретное число. Затем Visual Basic пытается выполнить следующую строку if N>1 then Factorial = N* Factorial(N-1) . Поскольку нельзя сказать, что 1>1, то строка не выполняется и выполнение тела функции закончено. Значит можно подниматься. Поднимаюсь на одну ступеньку. Visual Basic возвращается внутрь тела функции (той, где N=2) и успешно выполняет умножение - Factorial =2*1=2. Поднимаюсь еще на ступеньку. Visual Basic возвращается внутрь тела функции (той, где N=3) и успешно выполняет умножение - Factorial =3*2=6. Задача решена . Итак, рекурсией в программировании называется вызов подпрограммы из тела самой подпрограммы. Чем хорош рекурсивный стиль программирования? В нашей программе о факториале мы как бы и не программировали вовсе, а просто обяснили компьютеру, что такое факториал. Как бы перешли на новый уровень общения с компьютером: вместо программирования - постановка задачи. Чем плох рекурсивный стиль программирования? Если мы для решения той же задачи напишем программу не с рекурсией, а с обычным циклом, то такая программа будет выполняться быстрее и потребует меньше памяти. Задание 131: Напишите рекурсивную функцию fib для вычисления чисел Фибоначчи . Сортировка Здесь вы не узнаете ничего нового о Visual Basic. Будем совершенствовать технику программирования.
Пусть имеется ряд чисел: 8 2 5 4. Под сортировкой понимают их упорядочивание по возрастанию (2 4 5 8) или убыванию (8 5 4 2) . Сортировать можно и строки (как слова в словаре). Сортировка - очень распространенная вещь в самых разных программах, в частности - в системах управления базами данных. Задача: Задан массив из 100 произвольных положительных чисел. Отсортировать его по возрастанию. Идея решения: Если мы не можем сходу запрограммировать задачу, нужно подробно представить себе, в каком порядке мы решали бы ее вручную, без компьютера. Как бы мы сами сортировали 100 чисел? Мы бы запаслись пустым листом бумаги из 100 клеток. Затем нашли бы в исходном массиве максимальное число и записали его в самую правую клетку, а в исходном массиве на его месте записали бы число, меньшее самого маленького в массиве (в нашем случае подойдет 0). Затем нашли бы в изменившемся исходном массиве новое максимальное число и записали его на второе справа место, а на его место в исходном массиве - 0. И так далее. Вот программа для 10 чисел: Const N = 10 'N - размер массива Dim massiv_ishodn(1 То N) As Integer 'Это исходный массив Dim massiv_rezult(1 То N) As Integer 'Это наш пустой лист бумаги 'Вспомогательная функция для поиска максимума в массиве m(l То N) . 'Она выдает значение 'максимального элемента (maximum) и заодно номер этого элемента (Nomer_max): Private Function maximum(m, N As Integer, Nomer_max As Integer) As Integer Dim i As Integer, max As Integer max = m(1): Nomer_max = 1 'max - "временный" максимум For i = 2 To N If max < m(i) Then max = m(i) Nomer_max = i End If maximum = max Next End Function 'Основная процедура сортировки исходного вектора mass_ish 'размера N в результирующий - mass_rez: Private Sub sortirovka(mass_ish, N As Integer, mass_rez) Dim Nom_max As Integer For i = 1 To N mass_rez(N + 1 - i) = maximum(mass_ish, N, Nom_max) 'Пишем "в правую клетку" ma s s_i s h(Nom_max) = 0 'Ноль - на старое место Next End Sub Private Sub Commandl Click()
massiv_ishodn(1) = 41 'Задаем значения элементов исходного массива massiv _ishodn (2) = 8 massiv ishodn(3) = 17 massiv ishodn(4) = 82 massiv ishodn(5) = 20 massiv ishodn(6) = 2 massiv ishodn(7) = 30 massiv ishodn(8) = 12 massiv ishodn(9) = 6 massiv ishodn(10) = 9 sortirovka massiv_ishodn, N, massiv_rezult 'Сортируем массив For i = 1 To N Debug.Print massiv_rezult(i); 'Распечатываем отсортированный массив Next End Sub Функция maximum, кроме того, что сама имеет значение максимального элемента массива, выдает еще порядковый номер максимального элемента - Nomer_max. Это называется побочным эффектом функции. Методов сортировки много. Приведенный метод - самый примитивный. Мало того, что нам пришлось расходовать память на второй массив, для выполнения сортировки массива из 100 элементов понадобилось бы около 100*100=10000 операций сравнения элементов массива между собой. Существуют методы гораздо более эффективные. Приведу один из них - метод пузырька. Представьте себе тонкую вертикальную трубку с водой. Запустим снизу пузырек воздуха. Он поднимется до самого верха и остановится. Затем пустим еще один. Он поднимется наверх и остановится сразу же под первым. Затем запустим третий и так далее все сто пузырьков. А теперь представим, что это не трубка, а наш исходный массив, а вместо пузырьков поднимаются максимальные элементы. Вот алгоритм: Сравним первый элемент массива со вторым, и если второй больше, то ничего не делаем, а если первый больше, то меняем местами первый и второй элементы. В этом вся соль метода. Затем повторяем это со вторым и третьим элементами - если третий больше, то ничего не делаем, а если второй больше, то меняем местами второй и третий элементы. Затем повторяем все это с третьим и четвертым элементами и так далее. Где-то по пути мы встретим максимальный элемент, и он, как пузырек, поднимется у нас до самого верха. Теперь, когда мы знаем, что элемент номер 100 у нас самый большой, нам предстоит решить задачу сортировки для массива из остальных 99 элементов. Метод тот же. Запускаем второй пузырек и так далее. Метод пузырька не требует второго массива, да и сравнений здесь в два раза меньше. Вот программа: Const N = 10 'N - размер массива Dim massiv(1 То N) As Integer 'Это массив 'Сортировка массива mass размером Razmer: Private Sub puziryok(mass, Razmer As Integer) Dim i As Integer
For m = Razmer To 2 Step -1 'Всего пузырьков - 9 For i = 1 To m - 1 'i увеличивается - пузырек ползет вверх If mass(i) > mass(i + 1) Then 'Стоит ли обмениваться значениями с = mass(i) 'Три оператора для обмена значений 'двух элементов с помощью mass(i) = mass(i + 1) 'транзитного элемента с mass(i + 1) = с End If Next i Next m End Sub Private Sub Commandl_Click() massiv(l) = 41 massiv(2) massiv(3) massiv(4) massiv(5) massiv(6) massiv(7) massiv(8) massiv(9) 8 17 82 20 2 30 12 6 'Задаем значения элементов массива massiv(lO) = 9 puziryok massiv, N 'Сортируем массив For i = 1 To N Debug.Print massiv(i); 'Распечатываем отсортированный массив Next End Sub В заключение скажу, что существуют методы гораздо более эффективные, чем метод пузырька. Отсортируйте по возрастанию двумерный массив. Я имею в виду Задание 132 - нужно сделать так, чтобы: а(1,1) <= а(1,2) <= ... <= а(2,1) <= а(2,2) <= <= а(3,1) <= а(3,2) <= <= a(l,N) <= . . . <= a(2,N) <= Объекты, как параметры процедур Параметры процедур вполне могут быть объектного типа. Рассмотрим пример. Пусть вам нравится шрифт Times размера 20, стиля - курсив, синего цвета и вы хотите без хлопот настраивать указанным образом любой подходящий элемент управления на форме. Вы пишете следующую процедуру: Private Sub Настройка_шрифта_для (Элемент_упр As Control) Элемент_упр.Font = "Times" Элемент_упр.FontSize = 20 Элемент_упр.Fontltalic = True Элемент упр.ForeColor = vbBlue
End Sub Здесь Control - объектный тип элементов управления. Теперь вы можете настраивать шрифт элементов управления очень просто: Private Sub Commandl_Click() Настройка_шрифта_для Label1 Настройка_шрифта_для Textl End Sub ПРОЕКТ, КОТОРЫЙ ВЫГЛЯДИТ СОЛИДНО В этой главе мы создадим заготовку "солидного" пректа. Солидного в том смысле, что он будет обладать элементами, наиболее часто встречающимися в большинстве солидных приложений Windows, таких как Microsoft Word, Visual Basic и др. Это диалоговые окна открытия и сохранения файла, выбора цвета, панели инструментов. Для их создания нам понадобятся элементы управления CommonDialog, Toolbar, ImageList. В качестве темы для заготовки проекта я выбрал графический редактор. Несмотря на то, что заготовка будет сверхпримитивна, вам будет понятно, как ее при желании улучшить и приблизить к настоящим графическим редакторам, а также снабдить элементами, которых у настоящих графических редакторов нет. Из чего бывает "сделано" приложение Windows Посмотрим внимательнее, "из каких составных частей собрано" большинство солидных приложений Windows. Конечно, у каждого приложения есть элементы, присущие только ему, они-то и определяют работу приложения в соответствии с его назначением. Так Microsoft Word работает с текстом, Paint - с рисунками а Visual Basic выполняет программы. Но многие составные части присущи большинству приложений, основные из них мы и рассмотрим. При этом пометим для себя, какие элементы Visual Basic создают упомянутые части, умеем ли мы их создавать и работать с ними. Составная часть приложения Windows Элемент Visual Basic Умеем? Главное окно приложения Форма Да Несколько окон внутри главного окна приложения MDI Form Нет Меню Menu Editor Да Полосы прокрутки HScrollBar, VScrollBar Да Панели инструментов Toolbar, CoolBar, ImageList Нет, но сейчас научимся Диалоговое окно открытия файла CommonDialog Нет, но сейчас научимся Диалоговое окно сохранения файла CommonDialog Нет, но сейчас научимся Диалоговое окно выбора цвета CommonDialog Нет, но сейчас научимся Диалоговое окно выбора шрифта CommonDialog Нет Диалоговое окно выбора принтера для CommonDialog Нет
печати Окно помощи Help CommonDialog Нет Обратите внимание, какую богатую палитру возможностей обеспечивает элемент управления CommonDialog. А сам Visual Basic - это магазин кубиков, из которых можно собрать любое приложение Windows. Элемент управления CommonDialog До сих пор я знакомил вас с довольно простыми элементами управления, такими как кнопки, текстовые поля и т.п. Достаточно ли таких простых элементов, чтобы запрограммировать любые приложения Windows? В принципе, да. Возьмем, например, диалоговое окно сохранения файла. Оно похоже в большинстве приложений Windows. Save As Save in: Q (C:. ?|x| "3 ш\ Ш й1 SmI IAJJJKIN IALLADIN IANATCOMP I Antivir I AntiViral Toolkit Pro I ARCHIVE IBC5 I BDE32 I CLASSIC I Corel I corelS IDDWIN2.5 I Dinarno I Disney I DRIVERS I DTEXT23 I Games |L Lukin ► File name: Save as type: Save Cancel Вы видите, что оно состоит из кнопок, флажка, раскрывающихся списков и других простых элементов, большинство из которых мы проходили. Все эти элементы собраны на форме с заголовком Save As. Таким образом, если мы захотим организовать сохранение файла, мы должны будем в проекте создать еще одну форму, которая и будет диалоговым окном. Затем мы поместим на эту форму нужные элементы управления и запрограммируем работу каждого из них. В общем, работа довольно большая, но выполнимая. Разработчики Visual Basic постарались облегчить жизнь программистам и создали элемент управления CommonDialog, который уже имеет вид нужного диалогового окна. Простые элементы управления внутри диалогового окна уже запрограммированы надлежащим образом. Все, что остается программисту - это написать немного кода для настройки окна. Common Dialog - настоящий многоликий Янус. Он может по желанию программиста перестраиваться на выполнение самых разных задач, перечисленных в нижеприведенной таблице. То, какую именно задачу он будет решать, определяется тем, какой из методов этого элемента будет выполнен: Вставьте Common Dialog на панель Toolbox из Projects^Components. Там вы его найдете под именем Microsoft Common Dialog Control 6.0. Затем поместите его на форме. Его имя - Common Dialogl. В режиме работы он не виден и возникает в нужном обличье только при выполнении одного из своих методов: Г~ Open as read-only Задача, решаемая элементом управления Common Dialogl Метод Открытие файла CommonDialogl.ShowOpen Сохранение файла CommonDialogl.ShowSave Выбор цвета CommonDialogl.ShowColor Выбор шрифта CommonDialogl.ShowFont Выбор принтера для печати CommonDialogl.ShowPrinter Окно помощи Help CommonDialogl.ShowHelp
Пример открытия и сохранения файлов с помощью элемента Common Dialog Чтобы лучше представить себе механику работы элемента Common Dialog, рассмотрим пример его использования для считывания и записи информации в произвольные текстовые файлы. Задача: Нажатием на кнопку Commandl поместить на экран диалоговое окно открытия файла, выбрать в нем произвольный текстовый файл, считать из него первую строку, затем при желании нажатием на кнопку Command2 преобразовать эту информацию (дописать в конец строки восклицательный знак), затем нажатием на кнопку Command3 поместить на экран диалоговое окно сохранения файла, выбрать в нем произвольный текстовый файл и информацию записать в него. Вот программа: Dim s As String 'Переменная для хранения считанной и преобразованной информации Private Sub Commandl_Click() CommonDialogl.ShowOpen 'Показать диалоговое окно открытия файла Файл = CommonDialogl.FileName 'Это имя файла выбрано из диалогового окна Open Файл For Input As #1 'Открываем выбранный файл для чтения Line Input #1, s 'Считывание первой строки из выбранного файла Debug.Print s Close #1 End Sub Private Sub Command2_Click() s = s & "!" 'Преобразование информации - добавление в конец строки восклицательного знака End Sub Private Sub Command3_Click() CommonDialogl.ShowSave 'Показать диалоговое окно сохранения файла Файл = CommonDialogl.FileName 'Это имя файла выбрано из диалогового окна Open Файл For Output As #1 'Открываем выбранный файл для записи Print #1, s 'Запись информации в выбранный файл Debug.Print s Close #1 End Sub Пояснения: На операторе CommonDialogl.ShowOpen появляется диалоговое окно открытия файла (аналогичное диалоговому окну сохранения файла, картинка которого показана выше), программа останавливается и ждет, когда мы выберем в окне какой-нибудь текстовый файл. После выбора окно пропадает, имя выбранного файла вместе с адресом становятся значением свойства FileName элемента CommonDialog, программа продолжает работу и это значение используется нами в операторе Open. Аналогично работает и сохранение. В приложениях Windows, таких как Word и Paint, мы привыкли, что открываемый файл становится нам виден в каком-нибудь окне. Здесь же ничего подобного нет,
содержимого файла мы не видим. Для этого нужны дополнительные средства. На них мы не останавливаемся. В диалоговом окне правильно работают многие кнопки и другие элементы. Однако нам нужно позаботиться кое о каких подробностях. Так, если мы хотим видеть в окне только текстовые файлы, нам нужно запрограммировать раскрывающийся список типов файлов. В противном случае мы можем нечаянно открыть графический файл, как текстовый, с неожиданными результатами. Также нужно позаботиться о том, чтобы при нажатии на кнопку Cancel не возникала ошибка. А возникает она по той причине, что оператор Open не знает, какой файл ему открывать. На этом я останавливаться не буду. Вот более "правильная" запись этой же программы, использующая процедуры с параметрами: Dim s As String 'Переменная для хранения считанной и преобразованной информации Private Sub Commandl_Click() CommonDialogl.ShowOpen 'Показать диалоговое окно открытия файла Файл = CommonDialogl.FileName 'Это имя файла - параметр для процедуры Открой Открой Файл End Sub Private Sub Открой(Файл) Open Файл For Input As #1 Line Input #1, s 'Считывание первой строки из файла Debug.Print s Close #1 End Sub Private Sub Command2_Click() s = s & "!" 'Преобразование информации - добавление в конец строки восклицательного знака End Sub Private Sub Command3_Click() CommonDialogl.ShowSave 'Показать диалоговое окно сохранения файла Файл = CommonDialogl.FileName 'Это имя файла - параметр для процедуры Сохрани Сохрани Файл, s 'Сохрани в Файл строку s End Sub Private Sub Сохрани(Файл, s As String) Open Файл For Output As #1 Print #1, s 'Запись информации в файл Debug.Print s Close #1 End Sub
Панель инструментов Toolbar Все вы видели панели инструментов. Они имеются в большинстве солидных приложений Windows. Панель инструментов представляет набор кнопок и других элементов , предназначенных для быстрого выполнения наиболее часто встречающихся действий, таких как открытие, сохранение файлов, выбор размера шрифта и т.п. Кнопки на панели инструментов бывают разных стилей. Некоторые самые распространенные стили показаны на рисунке, где изображен участок панели управления Microsoft Word 97: И ю ж к ч ш- ш т ш Стиль tbrDefault - обьнная кнопка панели управления Стиль tbrPlaceholder - кнопка просто резервирует место для чегото другого,например, поля со списком Стиль tbrCheck - кнопка-фпажок, может быть нажатой или отжатой незави симо от других Стиль tbrButtonGroup - группа-переклкнатель - из всех кнопок группы в каждый момент времени нажатой может быть только одна Задача: Создать панель инструментов из нескольких кнопок. По нажатии одной кнопки Visual Basic должен делать что-нибудь одно, например, выполнять оператор Debug.Print "Нажата первая кнопка"). По нажатии другой кнопки Visual Basic должен делать что-нибудь другое, например, выполнять оператор Debug.Print "Нажата вторая кнопка"). И так далее. Ваши действия: Поместить в Toolbox группу элементов управления Microsoft Windows Common Controls 6.0. Вы их найдете в Projects^Components. Из этих элементов вам понадобятся два: Toolbar и ImageList. Property Pages □ General Buttons | picture | "JJ index: Caption: Key: Style: ToolTipText: Tag: 1 Insert Button Remove Button Первая кнопка Description: Value: 0 - tbrUnpressed 0-tbrDefault 3] ^idth: (Placeholder) Это первая кнопочка Image: Ff W Visible ButtonMenus Index: | | | Text: | Г OK W Enabled Insert ButtonMenu I- MixedState Key: Tag: Г Cancel Help
2^ Разместить элементы Toolbar и ImageList на форме. При этом Toolbar сразу "прилипнет" к верхнему краю формы, как ей в общем-то и положено. Если вам это не нравится, то в пункте 6 вы это поправите. ImageList не будет виден в режиме работы. Его назначение вспомогательное - хранить в виде удобного списка картиночки, которые вы желаете видеть на кнопках панели инструментов. Вставить в ImageList понравившиеся вам картиночки, например из принадлежащей Visual Basic папки Graphics. Для этого щелчком правой клавиши мыши по ImageList и выбором опции Properties вызываем на экран Страницы свойств (Property Pages) этого элемента. Там заходим в закладку Images, нажимаем кнопку Insert Picture, находим в появившемся окне нужную нам папку с картинками и выбираем картинку —» Open. Замечаем, что выбранная картинка появляется в поле Images, а в поле Index появляется 1. Снова Insert Picture и аналогичным образом вставляем вторую картинку. Ее индекс - 2. И так далее. Закончив, нажимаем ОК. Вставить в Toolbar кнопки нужных вам стилей с картинками, взятыми из ImageList. Для этого щелчком правой клавиши мыши по Toolbar и выбором опции Properties вызываем на экран Страницы свойств (Property Pages) этого элемента. Там в закладке General в раскрывающемся списке ImageList объясняем компьютеру, в каком из нескольких возможных элементов управления ImageList хранятся картинки для кнопок. Затем заходим в закладку Buttons, нажимаем кнопку Insert Button, замечаем, что в поле Index появляется 1. Здесь нам необходимо выбрать стиль кнопки (Style) и ввести данные в два поля - Image и Key (ключ) . В поле Image введем индекс картинки из ImageList, которую мы хотим поместить на кнопку. В поле Key введем любое слово, по которому в дальнейшем, как по имени, будем обращаться к этой кнопке. Также полезно заполнить поле ToolTipText, в этом случае при подведении мыши к кнопке будет всплывать подсказка. Закончив с первой кнопкой, снова нажимаем на Insert Button и повторяем всю процедуру для второй кнопки. И так далее. Закончив, нажимаем ОК. Запрограммировать действия кнопок. Для этого сделаем двойной щелчок по панели инструментов. Появится заготовка процедуры, в которой при помощи оператора Select Case программируем действие всех кнопок панели: Private Sub Toolbarl_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case "Первая кнопка" Debug.Print "Нажата первая кнопка" Case "Вторая кнопка" Debug.Print "Нажата вторая кнопка" End Select End Sub Настроить внешний вид и поведение панели инструментов (если хотите, конечно) . Это можно сделать в страницах свойств и в окне свойств панели. Особое General Images | color Current Image Index: [б Key: Tag: Images: T В _i _ J j Insert Picture.. Remove Picture Image Count: 5 OK Cancel Help
внимание обратите на свойство Align, от которого зависит положение панели инструментов на форме. Кроме панели инструментов Toolbar существует еще интересная, с богатыми возможностями панель инструментов Coolbar, на которой мы останавливаться не будем. Панели инструментов предоставляют возможность в режиме работы изменять свой внешний вид и состав, с чем вы, возможно, сталкивались, работая с такими приложениями Windows, как Microsoft Word. Проект - "Графический редактор" Оыврвгъ цвет : 14 n.lflmi ь Проиллюстрируем применение элемента управления CommonDialog и панели инструментов на примере создания простейшего графического редактора. Пусть наш редактор умеет только следующие вещи: Рисовать мышкой, как карандашом. При помощи двух кнопок на панели инструментов выбирать одну из двух возможных толщин рисуемой линии. Выбирать цвет линии. Загружать рисунки из любого графического файла формата BMP. Сохранять рисунки в любом графическом файле формата BMP. Вы видите здесь загруженную с диска картинку, поверх которой линиями разной толщины и цвета нарисованы самолеты и текст. Под кнопкой выбора цвета вы видите панель инструментов из двух кнопок для выбора толщины линии. Вот программа нашего графического редактора (посмотрите, какая короткая!) Dim Цвет As Long 'Цвет карандаша
Private Sub Form Load() 'Начальные установки редактора: AutoRedraw = True BackColor = vbWhite Цвет = vbBlack DrawWidth = 3 'Цвет листа для рисования - белый 'Поначалу цвет карандаша - черный 'Поначалу линия тонкая End Sub Private Sub Commandl_Click() 'Загружаем графический файл CommonDialogl.ShowOpen Forml.Picture = LoadPicture(CommonDialogl.FileName) End Sub Private Sub Command2_Click() 'Сохраняем rp CommonDialogl.ShowSave SavePicture Image, CommonDialogl.FileName End Sub 'Сохраняем графический файл Private Sub Command3 Click() 'Выбираем цвет карандаша CommonDialogl.ShowColor Цвет = CommonDialogl.Color End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) PSet (X, Y), Цвет 'Мышка превращается в карандаш End Select End Sub Пояснения: В процедуре открытия файла я для краткости вместо CommonDialogl.ShowOpen Файл = CommonDialogl.FileName Forml.Picture = LoadPicture(Файл) написал CommonDialogl.ShowOpen Forml.Picture = LoadPicture(CommonDialogl.FileName) В программе используется новый для вас оператор SavePicture Image, CommonDialogl.FileName по которому картинка, нарисованная на поверхности формы, сохраняется в файл, имя которого указано в свойстве CommonDialogl.FileName. На смысле параметра Image я не буду останавливаться. Работа процедуры выбора цвета вам должна быть понятна по аналогии с процедурой открытия файла. При вставке кнопок в панель инструментов я дал первой из них ключ "Тонкая линия", а второй - "Толстая линия". End Sub Private Sub Toolbarl_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case "Тонкая линия" 'Если нажата первая кнопка на панели, DrawWidth =3 'то линия тонкая Case "Толстая линия" 'Если нажата вторая кнопка на панели, DrawWidth =20 'то линия толстая
У нашей процедуры рисования Form_MouseMove есть два существенных недостатка : • Она рисует, по сути, не линию, а последовательность точек, которые сливаются в линию только при медленном движении мышки. Происходит это потому, что события MouseMove вырабатываются не непрерывно, а через некоторые, пусть небольшие, промежутки времени. • Мышь рисует всегда, когда движется, а нам было бы привычней и удобней, чтобы она делала это лишь при нажатой клавише мыши. Вот как дополнится наша программа для устранения этих недостатков: Dim Клавиша_мыши_нажата As Boolean 'Удерживается ли нажатой клавиша мыши 'Координаты мыши при предыдущем (перед текущим) 'наступлении события MouseMove: Dim Х_предыдущее As Long Dim У_предыдущее As Long Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Клавиша_мыши_нажата Then 'Рисуем отрезок прямой от предыдущего положения мыши до текущего: Line (X, Y)-(Х_предыдущее, У_предыдущее), Цвет 'Запоминаем текущее положение мыши для будущего 'срабатывания MouseMove, когда оно будет уже предыдущим: Х_предыдущее = X У_предыдущее = Y End If End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Клавиша_мыши_нажата = True 'В начальный момент рисования предыдущее и текущее положения мыши совпадают: Х_предыдущее = X У_предыдущее = Y End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Клавиша_мыши_нажата = False End Sub Пояснения: Логично считать, что клавиша мыши удерживается нажатой, когда из двух событий - MouseDown и MouseUp последним по времени наступило MouseDown. Вместо точек теперь рисуются отрезки прямых, соединяющие между собой соседние точки. Получается ломаная линия, неотличимая от плавной, гладкой кривой. Если вы хотите улучшить наш графический редактор Если вы хотите улучшить наш графический редактор, то: • Сделайте кнопку очистки листа. • Создайте палитру цветов, как в графическом редакторе Paint. Палитра цветов - та же панель инструментов, только кнопки в ней покрашены в разные цвета. • Создайте еще одну панель инструментов с ластиком, отрезком прямой, прямоугольником, овалом (эллипсом). Интересно сделать пульверизатор (распылитель). Здесь вам понадобятся случайные величины.
Создайте процедуры для рисования крестиков, треугольников и других фигур, которых нет в стандартных графических редакторах, и включите кнопки для их рисования в панель инструментов. Не советую создавать операции с фрагментами изображения: лупу, перенос, копирование и т.п. Для этого вы еще мало знаете. Работа с несколькими формами Все проекты, которые мы до этого создавали, работали в одном окне. Окном этим служила форма, на которой мы и собирали проект. Однако, вы вполне можете создать проект, который работает в двух или нескольких окнах. Например, вы создали игру в шахматы. Игра идет, как обычно, в одном окне. Пока компьютер обдумывает свой ход, вы со скуки щелчком по кнопке в окне игры запускаете новое окно, которое предлагает вам поиграть в созданный вами же тетрис. Когда компьютер сделает ход, вы можете поставить тетрис на паузу и продолжить игру в шахматы. Эту игру тетрис вы создавали в том же самом проекте, но собирали ее на другой форме этого проекта. Посмотрим, как создать в проекте еще одну форму и как наладить простейшее взаимодействие между двумя формами. Создадим новый проект. При этом, как обычно, будет создана форма Forml. Чтобы добавить в проект еще одну форму, нужно выбрать Project^Add Form-^New-^Form-^Open. Откроется форма Form2, а при ней свое окно кода. Таким образом, вы видите, что Visual Basic предоставляет удобную возможность программировать все происходящее в новой форме в окне кода, принадлежащем именно этой форме. Поместим для удобства рядом, как это показано на рисунке, обе формы со своими окнами кода. Разместим на формах показанные элементы управления , а в окна кода запишем программный текст. Запустим проект. Мы видим, как и положено, Forml, а вот Form2 не появляется . Чтобы она появилась, нужно выполнить оператор Form2.Show. Щелкнем по Commandl - форма Form2 появилась. Пощелкайте по кнопкам Command2 на обеих формах. Теперь посмотрите на содержимое процедур Command2_Click в обоих окнах кода. Вы видите, что первая строка обеих процедур красит своего хозяина, вторая - соседа. Таким образом, в каждом окне кода можно, как и обычно, писать операторы, приказывающие что-то сделать в форме-хозяине данного окна, а можно с таким же успехом писать операторы, приказывающие что-то сделать в любой другой форме проекта. Чтобы Visual Basic отличал первый случай от второго, во втором случае перед именем свойства, принадлежащего другой форме, нужно писать имя этой формы с точкой, в первом же случае - не обязательно. Не обязательно, но можно. Так, в левом окне вместо BackColor = vbBlue можно было бы написать Forml.BackColor = vbBlue или даже так - Me.BackColor = vbBlue. Слово Me является указанием на хозяина. Пощелкайте по кнопкам Command3 на обеих формах. Теперь посмотрите на содержимое процедур Command3_Click в обоих окнах кода. Вы видите, что первая строка обеих процедур выводит текст в текстовое окно Text2 своего хозяина, вторая - в текстовое окно Textl соседа. Таким образом, соглашение из предыдущего абзаца об имени формы с точкой применимо не только к свойствам формы, но и к объектам, принадлежащим форме, и, как мы сейчас увидим, методам. 3-я строка обеих процедур при помощи методов els и Print очищает от графики поверхность формы-хозяина и печатает на ней число (11 на левой, 22 на правой) . Слово Me пришлось написать, чтобы Visual Basic не посчитал els: мет-
кой. 4-я строка обеих процедур очищает от графики поверхность формы-соседа и печатает на ней число (21 на левой, 12 на правой). Jij„ Projectl - Forml (Form) Forml Щх] Commandl Command2 Command3 ТекИ Text2 - □ x -Inlxl Textl Text2 - □ x CommsiiMlJ т Clich Private Sub Cornrnand1_ Forrn2.Show End Sub ClickQ Private Sub Cornrnand2 ClickQ BackColor = vbBlue Form2.BackColor = vbYellow End Sub Private Sub Cornrnand3_ClickO Text2.Text = "Форма 1 приветствует саму себя I" Fcrrn2.Textl .Text = "Привет форме 2 от формы 1 I" Me.cls: Print 11 Fonn2.cls: Forrm2.Print 12 End Sub П x Сошшпп(13 т Clrch Private Sub Command2_ClickO BackColor = vbWhite Forml .BackColor = vbBlack End Sub Private Sub Command3_ClickO Text2.Text = "Форма 2 приветствует саму себя I" Forml .Textl .Text = "Привет форме 1 от формы 2 I" Me.cls: Forml .els: End Sub Print 22 Forml.Print 21 Чуть позже вы увидите, что из одной формы можно обращаться не только к свойствам, объектам и методам, принадлежащим другой форме, но и к переменным, процедурам и другим элементам. Правило везде одно: Перед именем элемента, принадлежащего другой форме, нужно ставить имя формы-хозяина с точкой. Модули кода Пусть вы создали проект из двух форм: в одной игра в шахматы, в другой игра в тетрис. Каждая из форм при запуске проекта довольно долго загружается. Поэтому вы хотите, чтобы перед загрузкой форм компьютер спросил у вас, какую форму нужно загружать. Но мы привыкли, что при запуске проекта на экране какая-нибудь форма появляется обязательно и первым делом. Мы можем изменить этот порядок и сделать так, чтобы никакая форма не загружалась. Добавим в проект так называемый модуль кода (его еще называют программным или стандартным или просто модулем) : Project^Add Module^New^Module^Open. Вы видите, что в проект добавилось окно кода модуля Modulel. А ничего похожего на форму не появилось. Ни формы, ни кнопок, ни меток, никаких других элементов управления в модуле кода нет и быть не может. Если форма без кода -
тело без души, то модуль - душа без тела. Ну что ж, в предыдущем разделе мы научились вселять душу в чужое тело, значит и душа нашего модуля на что- нибудь сгодится. Проект можно настроить так, чтобы при запуске ни одна форма не загружалась, а выполнялась процедура со специальным названием Main, находящаяся в модуле кода. Запишем в окно кода нашего модуля четыре строки: 4 ^М*1 Main Sub MainO у = 1при1Вох("Играем в шахматы (1) или в тетрис (2)?", "Введите 1 или 2") If у = 1 Then Forml.Show Else Forrn2.Show End Sub А вот как настраивать проект: Project —» Projectl Properties —» General —» Startup Object —» здесь Visual Basic предложит вам выбор, с чего начинать запуск проекта - с Загрузки формы Forml, с Загрузки формы Form2 или с выполнения процедуры Main. Вы, конечно, выбираете -^Sub Main^OK. Запустив этот проект, вы не видите никакой формы, вместо этого перед вами InputBox с приглашением ввести 1 или 2. Введя 1, вы тем самым загружаете Forml, а введя 2 - Form2. Термином модуль часто называют не только модуль кода, но и форму, и неизвестный пока нам модуль класса и некоторые другие сохраняемые в собственных файлах главные компоненты проекта. Я тоже буду так делать, когда это не будет вызывать путаницы. Работа с несколькими модулями А теперь посмотрите, как выглядит проект предыдущего раздела в окне Project Explorer. *J Э1 D - Projectl (Projectl.vbp) 1 Forms E] Forml (Forml.frm) E] Forrn2 (Forrn2.frrn) i Modules Modulel (Modulel.bas) Он имеет такой вид в зависимости от того, нажата или нет правая из трех кнопок на панели окна. В обоих случаях отображается одна и та же информация, а именно тот факт, что проект Projectl состоит из трех модулей: формы Forml, формы Form2 и модуля кода Modulel. Только в первом случае для нашего удобства модули одного типа объединены в воображаемые папки. Каждый из модулей сохраняется на диске в своем файле. Имя файла вы видите в скобках. Щелкая в окне Project Explorer по нужному модулю, а затем по одной из двух кнопок слева на панели окна, мы можем удобно переключаться между различными окнами модулей. Вы можете удалять модули из проекта, щелкая правой клавишей мыши в окне Project Explorer по ненужному модулю, а затем в открывшемся контекстном меню выбирая Remove. Так, если у вас простой вычислительный проект, вы вообще можете удалить все формы, обойдясь одним только модулем кода. Для ввода инфор- т/г ттт/г тэте пт/г *1\ l Projectl (Projectl.vbp) Е] Forml (Forml,frm) E] ForrnZ (Form2,frrn) *$£ Modulel (Modulel.bas)
мации в компьютер вам достаточно будет использовать InputBox, для вывода - MsgBox, а для вычислений - процедуры в модуле кода. Работа с несколькими проектами При работе с Visual Basic довольно часто встречаются ситуации, когда необходимо открыть в среде Visual Basic одновременно два или несколько проектов. Причина может быть разная, самая тривиальная - необходимость удобного копирования отдельных частей программного текста из одного проекта в другой. Откройте сначала обычным образом один проект. Чтобы открыть еще и другой, вам нельзя использовать, как вы привыкли, File —» Open Project (открыть проект) , так как при этом уже открытый проект закроется. Нужно использовать File —» Add Project (добавить проект) . Откроется диалоговое окно, глядя в которое вы должны решить, хотите ли вы добавить в среду разработки новый проект (закладка New) или же один из уже существующих (закладка Existing) . Затем выбираете нужный проект и —» Open. Теперь на экране вы можете видеть одновременно все формы и окна кода обоих проектов. Если вы добавили новый проект, то при сохранении он попытается сохранить свои файлы в ту же папку, где сохранен первый проект. Не стоит этого разрешать, а если уж разрешили, то проследите, чтобы имена файлов в обоих проектах различались, иначе файлы нового проекта затрут одноименные файлы первого . Вот как выглядит Project Explorer в среде Visual Basic с двумя проектами ^ I Projectl (Projectl.vbp) С] Forml (Forml.frm) С] Form2 (Form2.frm) Modulel (Modulel.bas) \ Project2 (Projectl.vbp) El] Forml (Forml.frm) Modulel (Modulel.bas) Module2 (Module2.bas) Какой из двух проектов будет запускаться, когда вы привычно нажмете кнопку Start на панели инструментов? Вы сами можете это задать, щелкнув правой клавишей мыши в окне Project Explorer по названию нужного проекта, а затем в открывшемся контекстном меню выбрав Set as Start Up. Аналогичным образом можно удалить проект из среды (не с диска), выбрав в этом же контекстном меню Remove Project. Зоны видимости переменных Мы уже сталкивались с этим механизмом, когда переменные, объявленные внутри процедуры, являлись локальными в процедуре, то есть невидимыми снаружи процедуры. Поэтому их нельзя было использовать в других процедурах модуля. Для переменных в Visual Basic определены 3 зоны видимости: Локальные переменные процедуры Видны только внутри процедуры, в которой они объявлены Объявляются оператором Dim внутри процедуры Локальные переменные модуля Видны везде внутри модуля, в котором они объявлены. Из других модулей не видны Объявляются оператором Dim или Private в верхней части модуля, снаружи процедур Глобальные (общедоступные) переменные проекта Видны отовсюду из всех модулей проекта Объявляются оператором Public в верхней части модуля, снаружи процедур
Как видите, первая зона - самая узкая, третья - самая широкая. Пример окна кода: Public a As Integer 'Глобальная переменная Private b As Integer 'Локальная переменная модуля Private Sub Commandl_Click() Private с As Integer 'Локальная переменная процедуры End Sub С первыми двумя зонами видимости вы знакомы. С третьей зоной сейчас познакомимся. Вот как можно из одного модуля обращаться к глобальным переменным, объявленным в другом модуле. Пусть в нашем проекте созданы две формы: Forml и Form2. Вот окно кода формы 1: Public a As Integer Private Sub Commandl_Click() Form2.Show a = 10 End Sub Оператор Public объявляет переменную а как глобальную (или общедоступную), видимую изо всех модулей. Щелкнув по кнопке формы 1, вы присваиваете переменной а значение 10. Вот окно кода формы 2: Private Sub Commandl_Click() Debug.Print Forml.a End Sub Щелкнув по кнопке формы 2, вы печатаете 10 - правильное значение переменной а. Как видите, для того, чтобы обратиться к переменной, объявленной в другом модуле, необходимо указать хозяина переменной. Visual Basic привык, что у чужих элементов хозяин должен быть указан, если же хозяин не указан, значит элемент "свой". Попробуем вместо Debug.Print Forml.а написать просто Debug.Print а. Поскольку хозяин не указан, Visual Basic поймет, что переменная а "своя", то есть принадлежит форме 2. (Это ничего, что она не объявлена, Visual Basic все равно считает ее существующей.) А поскольку "своей" переменной а ничего не присвоено, то ничего и не будет напечатано. В пошаговом режиме вы увидите, что если в форме 1 значение а равно 10, то в форме 2 значение а равно Empty (a=Empty). По английски это значит "пусто", то есть переменной не было присвоено никакого значения. Итак, если мы хотим, чтобы переменная была видна во всем проекте, мы объявляем ее оператором Public. Такая переменная называется глобальной. Если же мы хотим, чтобы переменная была видна только в своем модуле (была локальной в модуле), мы объявляем ее оператором Dim. Вместо оператора Dim принято использовать оператор Private. По действию они неотличимы, но английский смысл слова Private (частная собственность, вход запрещен) лучше подходит к случаю, поэтому программисты в основном используют его. Зоны видимости процедур Процедуры могут быть или глобальными или локальными Для процедур в Visual Basic определены 2 зоны видимости:
Локальные процедуры модуля Видны везде внутри модуля, в котором они объявлены. Из других модулей не видны Объявляются оператором Private Глобальные (общедоступные) процедуры проекта Видны из всех модулей проекта Объявляются оператором Public Вот пример использования глобальной процедуры П2. Окно кода формы 1: Private Sub Commandl_Click() Form2.П2 End Sub Окно кода формы 2: Public Sub П2() Debug.Print "Выполнилась процедура П2" End Sub Щелчком по кнопке формы 1 мы печатаем текст "Выполнилась процедура П2". Зоны видимости констант и типов Для констант в Visual Basic так же, как и для переменных, определены 3 зоны видимости: Локальные константы процедуры Видны только внутри процедуры, в которой они объявлены Объявляются оператором Const внутри процедуры Локальные константы модуля Видны везде внутри модуля, в котором они объявлены. Из других модулей не видны Объявляются оператором Const в верхней части модуля, снаружи процедур Глобальные (общедоступные) константы проекта Видны изо всех модулей проекта Объявляются оператором Public Const в верхней части модуля кода (и только в нем). Перечислимые типы могут задаваться только на уровне модуля, а не процедуры. Слова Private и Public по отношению к ним имеют обычный смысл. Например, в окне кода формы 1 вы можете определить тип: Public Enum tip а b End Enum Тогда в окне кода формы 2 вы можете объявить переменную: Dim s As tip Кстати, в определении перечислимого типа можно убрать слово Public. Visual Basic по умолчанию считает перечислимые типы глобальными. Пользовательские типы тоже могут задаваться только на уровне модуля. Слова Private и Public по отношению к ним также имеют обычный смысл. Но не во всех модулях разрешено объявлять глобальные пользовательские типы.
Затенение Переменные разных модулей или разных процедур вполне могут иметь одинаковые имена. Спрашивается, как Visual Basic определяет, какая из видимых одноименных переменных имеется в виду в каждом конкретном случае? Здесь вступает в действие эффект затенения: из нескольких одноименных переменных всегда имеется в виду более локальная переменная, то есть та, чья зона видимости меньше. То есть переменные, локальные в процедуре, имеют предпочтение перед переменными, локальными в модуле, а те - перед глобальными переменными. В этом есть глубокий смысл. Программист, объявляющий переменные в своей процедуре, может не заботиться о том, что где-то в модуле есть переменные с тем же именем. А программист, объявляющий переменные в своем модуле, может не заботиться о том, что переменные с тем же именем есть где-то в проекте. Пример: Имеется проект из двух форм. Окно кода формы 1: Public a As Integer Private Sub Commandl_Click() Form2.Show a = 1 End Sub Окно кода формы 2: Public a As Integer Private b As Integer Private Sub Commandl_Click() a = 2 Debug.Print Forml.a Debug.Print a b = 3 Debug.Print b End Sub Private Sub Command2_Click() Dim a As Integer Dim b As Integer a = 4 Debug.Print а 'Печатается 4 b = 5 Debug.Print b 'Печатается 5 End Sub Все, что я сказал о зонах видимости и о затенении переменных, в той или иной степени относится и к константам, и к свойствам, и к процедурам, и к другим элементам Visual Basic. Я не буду вдаваться в подробности, но дам один совет, который позволит вам избежать путаницы и конфликтов: давайте разным элементам разные имена. Отсюда вытекает желательность давать элементам разной природы разные префиксы. Теперь несколько слов о пользе модуля кода. Удобство его в том, что он не является "хозяином". Глобальные переменные, константы, типы, процедуры, определенные в нем, являются всеобщим достоянием и могут употребляться в любых других модулях, не требуя указания "хозяина". Модуль кода и используется как вместилище таких глобальных элементов, нужных в других модулях. 'Печатается 1 'Печатается 2 'Печатается 3
Префиксы имен Пусть в вашем проекте вы придумали кнопке имя Сумма, текстовому полю имя Сумма и переменной тоже имя Сумма. Так делать, конечно, нельзя: все имена перепутаются. Но и отказываться от одинаковых имен тоже никак не хочется, потому что они на ваш взгляд наиболее удачно передают смысл своих обладателей. Для того, чтобы не оказаться в такой ситуации, профессиональные программисты используют префиксы - приставки к именам. У всех элементов одной природы префикс одинаков, у элементов разной природы он разный. В нашем случае кнопка будет иметь имя стаЫСумма, текстовое поле - txtCyMMa, переменная типа Double - dblСумма. Вот какие префиксы рекомендует Microsoft для элементов управления: Check box chk Combo box, dropdown list box cbo Command button cmd Common dialog dig Directory list box dir Drive list box drv File list box fil Form f rm Frame fra Horizontal scroll bar hsb Image img ImageList ils Label lbl Line lin List box 1st Menu mnu Picture box pic ProgressBar prg RichTextBox rtf Shape shp Slider sld Text box txt Timer tmr Toolbar tlb TreeView tre UpDown upd Vertical scroll bar vsb А такие - для переменных: Boolean bin Byte byt Collection object col Currency cur Date (Time) dtm Double dbl Error err Integer int Long lng Object obj Single sng String str User-defined type udt Variant vnt Несмотря на то, что от добавления префиксов имена становятся корявыми, мы имеем два серьезных выигрыша: имена не перепутаются и по имени элемента сразу же можно сказать, какого он типа. Если же вы хотите стать профессиональным программистом, то тем более от префиксов вам никуда не уйти, так как глаз должен привыкать читать чужие программы, да и свои программы вы захотите показать профессионалу, который к префиксам привык. А теперь о чувстве меры. Некоторые имена, будь то имя переменной, формы или другого элемента, в программе используются очень часто. Если им давать "по
науке" длинные имена с префиксами, то текст вашей программы будет очень громоздким. Поэтому никто на вас не обидится, если вы в цикле вместо ±п'ЬПеременная_:цикла = 1пШеременная_цикла + 1 у (±пШеременная_цикла) = 2 * а (±пШеременная_цикла) напишете просто i = i + 1 y(i) = 2 * a(i) К чему все эти сложности? Давайте еще раз зададимся вопросом: зачем было выдумывать все эти глобальные и локальные переменные, зоны видимости, эффект затенения и прочее? Не проще ли было все переменные и другие элементы сделать равноправными, тогда, глядишь, и никаких зон, эффектов и прочих сложностей не понадобилось бы? Давайте попробуем так и сделать. Для простоты будем рассуждать только о переменных . Итак, сделаем все переменные равноправными. И пусть безо всяких сложностей все переменные будут видны во всем проекте, другими словами, по нашей терминологии, пусть все они будут глобальными. Тогда большие проекты, создаваемые командой программистов, будет крайне тяжело отлаживать, так как придется следить за тем, чтобы нигде не встретилось одинаковых имен, что и очень неудобно, кстати. Кроме этого, при отладке любой процедуры придется следить за тем, как бы случайно не испортить значение той или иной глобальной переменной, от которой зависит работа других процедур. Во многом потеряют смысл процедуры с параметрами, так как вся их прелесть в том как раз и состоит, чтобы "развязать" создателя процедуры с проектом, чтобы сделать из процедуры "вещь в себе", надежно защищенную от "помех" со стороны проекта. Итак, сделать все переменные глобальными нельзя. Тогда, может быть, сделать их всех локальными? Тоже не получится, так как это крайне затруднит обмен информацией между процедурами и модулями. А без этого обмена проект рассыпется на отдельные процедуры, как карточный домик. Вот и получается, что переменные нужны разные - и глобальные и локальные, и никуда от этого не денешься. Надо разрешать и одноименные переменные. А раз так, то нужны и зоны видимости и эффект затенения. Встает вопрос: какую зону видимости нам выбрать для каждой конкретной переменной? Объявлять ли ее глобальной, локальной в модуле или локальной в процедуре? Здесь совет один - любую переменную делайте как можно более локальной, пусть ее зона видимости будет как можно меньше. Если ее значение нужно только в одной процедуре и больше нигде, делайте ее локальной в этой процедуре. Если ее значение нужно в нескольких процедурах одного модуля, а в других модулях нет, то делайте ее локальной в этом модуле. И только если значение переменной нужно в нескольких модулях, делайте ее глобальной. Такой подход обеспечит вашему проекту максимальную надежность и удобство в отладке. Второй совет - вместо процедур без параметров используйте процедуры с параметрами. Покажу на простом примере, что я имею в виду. Задача: Переменная равна 3. Нужно увеличить ее на 2 и результат напечатать . Дадим переменной имя intA. Вот простейшая программа для решения задачи: Private intA As Integer Private Sub Commandl_Click() intA = 3 intA = intA + 2 Debug.Print intA End Sub
Однако простейшая программа нас не устраивает. Нам нужно показать всю прелесть параметров. Прежде всего разобьем его на две процедуры П1 и П2, первая из которых увеличивает переменную на 2, а вторая распечатывает результат. Private intA As Integer Private Sub Commandl_Click() intA = 3 П1 П2 End Sub Private Sub П1() intA = intA + 2 End Sub Private Sub П2() Debug.Print intA End Sub Программа работает. Но этого мало. Будем усложнять дальше. Добавим к нашим процедурам параметры: Private intA As Integer Private Sub Commandl_Click() intA = 3 П1 intA П2 intA End Sub Private Sub П1(intAA As Integer) intAA = intAA + 2 End Sub Private Sub П2(intAAA As Integer) Debug.Print intAAA End Sub В чем смысл этого ужасного усложнения, этого превращения мухи в слона? Конечно, для нашего простейшего примера нет никакого смысла усложнять программу. Но когда дело дойдет до сложных проектов и процедур, здесь смысл прямой. Зачем делить проект на процедуры, я уже рассказывал. А вот зачем понадобились параметры. Если ваша процедура сложная и делает что-нибудь полезное, то вы вполне можете захотеть использовать ее и в других проектах. Но в другом проекте переменные скорее всего имеют другие имена, например, вместо intA там используется intB. В этом случае вам придется переписывать текст процедуры (в нашем конкретном случае везде заменить intA на intB). А переписывать не хочется. В общем, процедура теряет свою универсальность. Чтобы и переписывать не надо было и универсальность не потерять, применяются параметры. Обратите внимание, что нашим процедурам с параметрами абсолютно все равно, что переменная имеет имя intA. Нигде внутри процедуры оно не встречается, поэтому процедура уверенно делает свое дело, каково бы имя ни было. Да и программисту как-то понятней, чем занимается процедура, если он видит в ее заголовке список параметров , да еще и с подробными комментариями. Это лучше, чем глядеть в тексте процедуры на переменную intA и вспоминать, что это, черт возьми, за переменная и в чем ее смысл. В общем, совет такой - с глобальными переменными и ло-
кальными переменными модуля работайте по возможности через параметры. Что значит "по возможности"? А то, что некоторые такие переменные буквально пронизывают все процедуры проекта и организовывать для них в каждой процедуре параметры - та овчинка, которая не стоит выделки. Обычно таких переменных бывает немного и их легко просто запомнить. Объекты пользователя Ну вот и пришло время создания своих собственных объектов. Поговорим о них. Введение процедур в программирование резко повысило надежность создаваемых больших программ и их обозримость, сделало сам процесс программирования более удобным. Следующим шагом на пути совершенствования программирования стало введение объектов. Объект - это синтез данных (в частности переменных величин) и процедур, которые эти данные обрабатывают. Объекты в программировании напоминают объекты реального мира. Например, чтобы описать стенные часы, мы должны описать как совокупность их составных частей (радиусы шестеренок, длину маятника и прочее - в общем, «данные») так и совокупность процессов взаимодействия этих частей (как качается маятник, как шестеренка цепляет шестеренку и так далее - в общем «процедуры и функции») . Любой элемент управления Visual Basic - объект. Свойства элемента управления - это данные, методы - процедуры. Почти все приложения Windows и сама операционная система Windows запрограммированы на основе объектного подхода. Типичный пример объекта в Windows - окно. Чтобы заставить окно на экране вести себя, как положено, программисту нужно описать его размер, цвет, толщину рамки и прочее (данные) плюс процессы перетаскивания его по экрану, изменения размера и прочее (процедуры и функции) . Инкапсуляция "Объект в футляре" При создании объектов программисты стараются придерживаться принципа инкапсуляции, который заключается в следующем: Данные и действия объекта представляют собой единое целое, образующее всю механику объекта, и хранятся они в одной "упаковке". Чуть позже вы увидите, что эта упаковка - отдельный модуль. Они должны быть как можно меньше видимы снаружи. Хорошо инкапсулированный объект представляет собой некий "черный ящик", эдакого "человека в футляре". Вся работа идет внутри. Внутренние данные меняются при помощи внутренних действий. Никто снаружи не может вмешаться в эту внутреннюю работу. Наружу показывается лишь тот минимум (интерфейс), который необходим для связи с окружающим миром. Влиять на работу объекта можно только тремя способами: Методами Изменяя значения свойств для чтения-записи Изменяя свойства окружающей среды. Инкапсуляция - то, что объединяет объекты в программировании с объектами реального мира. Возьмите летящий самолет. Вы не можете снаружи ни видеть работу его двигателя, ни как-то повлиять на нее. Вы вообще никак не можете повлиять на самолет ни в чем. Все вышесказанное является введением в идеологию объектного программирования. Как мне кажется, это введение поможет вам легче разобраться в механике
объектов, создаваемых вами на компьютере. И теперь пришла пора такие объекты создавать. Лучше всего это делать на примере решения реальной задачи. Вот она. Игра "Сачок". Постановка задачи Давайте создадим такую игру: lo-nnoK Место \ г' место \ ;т1рт? /у )\ аарта S< певца J \. uapoe / / j П .> I □ О 11 -■ п о э Начинай сначала Счетчик врамани 933 1. ГиЛГЛКП Как только проект запущен, из места старта на столе разлетаются во все стороны со случайными скоростями и в случайных направлениях 10 шариков. Они ведут себя как биллиардные шары на столе. Ударившись о бортик, любой шарик отскакивает по Закону отражения. Примечание: Для удобства программирования я назвал по-разному 4 бортика: пол, потолок, стены. Трения нет - и шарики могут бесконечно кататься по столу. Для простоты я не стал программировать соударение шариков между собой, хотя это вполне можно было сделать. Поэтому шарики при столкновении просто пролетают друг сквозь друга. На поле присутствует Ловец (которого раньше я хотел назвать "Сачок", причем в обоих смыслах). Ловцом управляет с клавиатуры игрок. Ловец может двигаться с постоянной скоростью в 4 направлениях: вверх, вниз, влево, вправо, подчиняясь соответствующим клавишам клавиатуры, а также стоять (клавиша Ctrl). Каждый раз, когда ловец соприкасается с шариком, шарик исчезает (он пойман). Задача игрока - побыстрее поймать все 10 шариков. Счетчик времени (импульсов таймера) замирает в момент поимки последнего шарика, чтобы вы могли запомнить результат. При нажатии на кнопку "Начинай сначала" игра начинается сначала. Вот и все. Что здесь будет объектом? Несмотря на то, что у нас нет опыта, интуиция подскажет нам. Конечно же, шары и ловец. Таймер и общая механика работы проекта Теперь давайте продумаем общую механику работы проекта. Она, в общем, напоминает механику работы проектов "Будильник" и "Гонки". Там я писал, что важ-
ную роль в моделировании на компьютере согласованной работы разных механизмов играет таймер, который своими импульсами синхронизирует работу этих механизмов (объектов). Конкретно, очередной импульс таймера "будит" по очереди все эти объекты, каждый из которых выполняет весь цикл своей жизнедеятельности, то есть все свои действия, которые положено выполнять при приходе импульса, после чего "засыпает" до следующего импульса. На следующем импульсе таймера все повторяется снова. Поскольку импульсы следуют друг за другом с большой частотой, создается впечатление непрерывной и одновременной работы объектов (несмотря на то, что они все "бодрствуют" по очереди). Посмотрим, как применить эту идеологию к нашему проекту. В игре 11 объектов: ловец и 10 шаров. Имеется 1 таймер. Он непрерывно на протяжении всей игры посылает импульсы с частотой 18 импульсов в секунду. Вот игра началась. От таймера пошел 1-й импульс. Оживает 1-й шар, "осознает себя, как объект", заглядывает к себе внутрь, запускает всю свою механику и выполняет все, что ему положено в данной обстановке. В начале игры это означает, что он сдвигается на некоторый шаг от точки старта. Выполнив все свои дела, он "засыпает" и "просыпается" 2-й шар, который тоже делает все, что ему положено (сдвигается) , и "засыпает" и т.д. Когда засыпает 10-й шар, просыпается ловец и тоже выполняет все, что диктует ему его механизм, в частности смотрит, не нажата ли клавиша на клавиатуре, и в зависимости от этого сдвигается или остается на месте. После чего засыпает. Все. Все объекты сделали свои дела и спят до прихода 2-го импульса от таймера. Вот пришел 2-й импульс. Просыпается 1-й шар, все делает (сдвигается еще на шаг в том же направлении) и засыпает, просыпается 2-й шар и так далее. Обратите внимание, что в каждый момент времени не спит, работает и движется только один объект. Остальные неподвижны и спят. Однако, поскольку импульсы от таймера следуют друг за другом с большой частотой, создается впечатление непрерывной и одновременной работы объектов: шары летают, ловец ловит. Обратите внимание, что таймер ничего не говорит объектам о том, что они должны делать, они знают это сами, так как это запрограммировано в их процедурах. Таймер всего лишь будит их через равные промежутки времени. Кроме шаров и ловца импульсам таймера у нас в проекте подчиняется счетчик времени на форме. Этап проектирования Хватит теории. Садимся за компьютер. Создайте новый проект. Для краткости дайте форме имя f. Разместите на форме элемент управления Shape - это будут бортики нашего стола. Размер стола не имеет значения, потому что мы так запрограммируем шары и ловца, что они будут чувствовать бортики. Разместите на форме кнопку стас1_Начинай_сначала и текстовое поле txtC4eT4HK времени Украсьте как-нибудь проект. Только не надо ничем заливать прямоугольник стола и не надо помещать на форму фотографию - шары будут тормозить. Создайте модуль кода. В нем нам будет удобно объявлять глобальные элементы нашего проекта. Порядок создания объектов Создание объектов пользователя в Visual Basic проходит в два этапа: Создается собственный пользовательский класс объектов. Аналогия: пусть ваш объект - алюминиевая тарелка. Тогда класс объектов Тарелка есть штамп, которым мы можем наштамповать сколько угодно объектов-тарелок. Вся работа по созданию механизма будущего объекта проходит именно на этом этапе.
По готовому классу объектов создается ("штампуется") сам объект или, как его еще называют, экземпляр класса. Для этого достаточно двух строчек кода. Экземпляров с разными именами можно создать сколько угодно. Можно создать и массив объектов (именно это мы впоследствии и сделаем, создав массив из 10 объектов-шаров). Итак, согласно вышесказанному мы создадим два класса объектов с именами els Ловец и clslllap. Затем по классу els Ловец создадим объект Ловец, а по классу clslllap создадим массив объектов Шар(1 То 10) . Создаем ловца Разобьем создание проекта тоже на две ступени. На первой ступени мы создадим ловца, а шаров не будет. Проект будет функционировать нормально, только без шаров. На второй ступени проект будет готов полностью. Приступим к созданию класса elsЛовец. Каждый пользовательский класс объектов создается в собственном модуле класса. Ведь форма - это модуль, модуль кода - модуль, и класс тоже требует своего модуля, который и будет той "упаковкой", в которой безопасно будут работать его данные и процедуры. Значит, создаем модуль класса. Делается это просто: Project —» Add Class Modules New -^Class Modules Open. И вот перед вами чистое окно кода модуля класса. Впечатление совсем такое же, как при создании модуля кода. В этом окне вы будете объявлять переменные объекта и писать процедуры и функции, из которых и состоит вся механика объекта. Никаких элементов управления и формы у модуля класса нет. В окне свойств модуля класса дайте имя своему классу - elsЛовец. Сохранимся. Мы видим, что Visual Basic сохраняет модуль класса в отдельный файл. Придадим файлу имя Ловец.els. Все готово. Можно бы писать код. Но это делать еще рано. Сначала нужно очень точно продумать поведение нашего ловца, все, что он должен уметь делать. Выпишем все его умения: A. По приходе импульса от таймера он должен: Сдвинуться на некоторый шаг вверх, вниз, влево, вправо, подчиняясь соответствующим клавишам клавиатуры, или стоять (клавиша Ctrl). B. Проверить, не наткнулся ли он на бортик, и если да, то остановиться. При нажатии кнопки "Начинай сначала" возвращаться в исходное положение и там останавливаться. Все. Вы спросите, а как же умение ловить шары, ради которого ловец и создан? Я отвечу - В нашем случае проще запрограммировать "исчезалки", чем "ло- вилки". Поясню. Наткнувшись на шар, ловец не будет предпринимать никаких действий по его "поимке". Наоборот, шар, наткнувшись на ловца, потрудится исчезнуть . Со стороны - никакой разницы. Запрограммируем все действия, перечисленные в пункте А, в одной процедуре, и назовем ее Действие. Запрограммируем все действия, перечисленные в пункте В, в другой процедуре, и назовем ее Начальная_установка. Объект пользователя - мозг без тела Я уже говорил о разнице между модулями формы и кода. Модуль формы снабжен элементами, которые мы собственными глазами видим на экране: это сама прямоугольная форма и элементы управления, расположенные на ней. У модуля кода ни-
чего визуального нет, это просто набор переменных, констант, типов, процедур и функций. Модуль класса в этом повторяет модуль кода. Он может своими процедурами обеспечивать сколь угодно сложное поведение и движение объекта, но все это где-то там, глубоко в памяти компьютера, а самого объекта и движения вы никогда на экране не увидите, так как в модуле класса, как и в модуле кода нет встроенных средств визуализации. Что же делать? Приходится модулю класса пользоваться чужими средствами, конкретно - элементами управления формы. Поместите на форму два элемента управления Image, одному дайте имя imgJloBe4, другому - imglllap (в дальнейшем из imglllap мы породим массив элементов управления imglllap (1 То 10) ) . Они-то и будут теми актерами, которым предназначено изображать живую жизнь наших бестелесных объектов. Это просто марионетки. Умные объекты будут дергать их за ниточки, и они будут надлежащим образом двигаться по экрану. Всем окружающим будет казаться, что это движутся сами объекты. Придайте им соответствующие картинки. У модуля класса нет ни одного элемента управления, значит и таймера тоже нет. Таймером нашего проекта будет таймер, принадлежащий форме. Поместите его на форму. Задайте ему интервал = 10. Щелкните по нему дважды - в окне кода формы появится заготовка процедуры. Напомню, что эта процедура выполняется на каждом импульсе таймера. Значит это и будет главная процедура нашего проекта, задающая ритм всем объектам и элементам управления. Перечислю действия, которые должна выполнять эта процедура: • Разбудить по очереди Шар(1), Шар (2), ... Шар (10) и заставить каждого выполнить свою невидимую работу, в частности вычислить свое положение (координаты) на форме. • Переместить элементы управления imglllap (1), imglllap (2), ... imglllap (10) в положение, вычисленное их объектами Шар(1), Шар (2), ... Шар (10). • Разбудить ловца и заставить его выполнить свою процедуру Действие, в частности вычислить свое положение (координаты) на форме. • Переместить элемент управления 1тдЛовец в положение, вычисленное объектом Ловец. • Увеличить на 1 счетчик времени (импульсов таймера) на форме. Перечислю действия, которые должны выполняться при нажатии на кнопку "Начинай сначала": • Установить в 0 счетчик времени • Установить в 0 переменную-счетчик пойманных шаров. Он нам понадобится, чтобы определить момент окончания игры - как только счетчик станет равен 10. • Заставить ловца выполнить свою процедуру Начальная_установка, то есть прыгнуть в точку старта ловца и там остаться. • Заставить каждый из шаров прыгнуть в точку старта шаров и подготовиться к старту. Как создать объект по его классу Сначала объект Ловец нужно объявить как экземпляр класса elsЛовец. Точно так же, как мы объявляем переменную величину а, как хранительницу экземпляра значения типа Integer. То есть, мы объявляем, из какого "штампа" будет штамповаться наша тарелка: Public Ловец As elsЛовец
Почему Public? Потому что наш ловец должен быть виден и из модуля формы (хотя бы для того, чтобы знать его координаты), и из модуля шара (который тоже должен знать его координаты, чтобы вовремя исчезнуть при столкновении). Строку объявления удобнее написать в модуле кода, чтобы не надо было указывать хозяина объекта. А теперь объект Ловец нужно создать ("отштамповать" тарелку): Set Ловец = New elsЛовец Слово New означает, что создается новый представитель класса объектов elsЛовец. Начиная с этого момента объектом можно пользоваться. Объекты можно создавать в любой момент работы проекта, поэтому указанную строку можно помещать в любое место кода. Поскольку наш ловец понадобится нам с самого начала, поместим эту строку в процедуру Form_Load нашей формы. Первая ступень проекта Итак, вот как выглядит наш проект на первой ступени. На второй ступени к модулю кода и окну кода формы просто добавятся без малейшего изменения строки, касающиеся шаров. А модуль elsЛовец я привожу, естественно, целиком, в окончательном варианте. Модуль кода Public Const РаЗмер_ловца = 500 Public Ловец As elsЛовец 'Объявляем объект Ловец класса elsЛовец Модуль формы Private Sub Form_Load() 'Эта процедура выполняется один раз при запуске проекта txtC4eT4HK времени.Locked = True 'Чтобы в процессе игры нельзя было вручную менять показания счетчика End Sub Private Sub спк1__Начинай_сначала_С^ск () 'Что происходит при нажатии кнопки НАЧИНАЙ СНАЧАЛА Начальная_установка txtC4eT4HK времени.SetFocus 'Чтобы фокус ушел с кнопки, иначе первое нажатие на стрелки клавиатуры не вызывает движения ловца End Sub Private Sub Начальная_установка() txtC4eT4HK времени.Text = 0 'Обнуляем счетчик времени Ловец.Начальная_установка 'Ловец встает в исходную позицию и настраивается на новую игру End Sub Private Sub Timerl_Timer() 'Главная процедура игры, выполняется один раз на каждом импульсе таймера inrc^ овец. Height = Размер_ловца ^дЛовец.Width = Размер ловца Set Ловец = New elsЛовец Начальная_установка KeyPreview = True 'Порождаем объект Ловец 'Чтобы форма реагировала на клавиатуру
Ловец.Действие 'Сначала объект Ловец вычисляет свои координаты, 1тдЛовец.Left = Ловец.х 'Затем изображение Ловца сдвигается на вычисленные координаты 1тдЛовец.Тор = Ловец.у txtC4eT4HK времени.Text = txtC4eT4HK времени.Text + 1 'Действует счетчик времени на форме, увеличивая свои показания на 1 End Sub 'Обработка события - нажатия клавиши на клавиатуре для управления ловцом: Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyUp: Ловец.Руль = вверх Case vbKeyLeft: Ловец.Руль = влево Case vbKeyDown: Ловец.Руль = вниз Case vbKeyRight: Ловец.Руль = вправо Case vbKeyControl: Ловец.Руль = стоп End Select End Sub Модуль elsЛовец Public x As Long 'Координаты ловца Public у As Long Private dx As Long 'Шаг ловца по горизонтали и вертикали между двумя импульсами таймера Private dy As Long Public Enum типРуль 'Направление движения ловца или состояние неподвижности вверх влево вниз вправо стоп End Enum Public Руль As типРуль Private Sub Class_Initialize() 'Процедура, выполняющаяся при рождении ловца dx = 100 dy = 100 End Sub Public Sub Начальная_установка() 'Ловец встает в исходную позицию и останавливается Руль = стоп 'Ставим ловца в исходную позицию: х = f.эЬрБортик.Left + f.эпрБортик.Width * 1 / 4 'Он отстоит по горизонтали на четверть ширины стола от левого его края у = f.эЬрБортик.Тор + f.эЬрБортик.Height / 2 'Он по вертикали расположен посредине стола End Sub Public Sub Действие() 'Главная процедура ловца, выполняется один раз на каждом импульсе таймера Выбираем_куда_ехать_и_делаем_шаг 'Ловец слушается клавиатуру
If Ловец_у_пола_или_потолка Or Ловец_у_стен Then Руль = стоп 'Чтобы ловец случайно не улетел за пределы стола End Sub Private Sub Выбираем_куда_ехать_и_делаем_шаг() Select Case Руль Case вверх: у = у - dy Case вниз: у = у + dy Case влево: х = х - dx Case вправо: х = х + dx Case стоп: 'Поскольку никуда идти не надо, постольку ничего не делаем End Select End Sub Private Function Ловец_у_пола_или_потолка() As Boolean 'ЕСЛИ ловец находится у потолка ИЛИ у пола , ТО: If у < f.shpBopTHK.Top Or у + РаЗмер_ловца > f.эЬрБортик.Top + f.эЬрБортик.Height Then Ловец_у_пола_или_потолка = True Else Ловец_у_пола_или_потолка = False End If End Function Private Function Ловец_у_стен() As Boolean 'ЕСЛИ ловец находится у левой стены ИЛИ у правой, ТО: If х < f.эЬрБортик.Left Or х + РаЗмер_ловца > f.эЬрБортик.Left + f.эЬрБортик.Width Then Ловец_у_стен = True Else Ловец_у_стен = False End If End Function Запустите проект. Проверьте, правильно ли движется ловец. У бортика он должен сам останавливаться. Его можно передвигать и за пределами стола, но с трудом. Обратите внимание, что разные модули используют одноименные процедуры. Например, Начальная_установка. Проблемы в этом нет, так как если процедура задана, как Private, то из других модулей она просто не видна, а если даже Public, то перед своим именем она будет требовать имени хозяина. А теперь пояснения. Работу процедур я буду разбирать в хронологическом порядке, то есть в том, в котором они вызываются после запуска проекта. Об инкапсуляции поговорим попозже. Первой при запуске проекта выполняется процедура Form_Load. Начинается она с того, что высота и ширина элемента управления ^дЛовец (см. текст программы) становятся равными константе Размер_ловца. Затем порождается объект Ловец. При этом генерируется событие - инициализация объекта - и в соответствии с этим выполняется процедура Class_Initialize в модуле класса. Там я только присваиваю значения шагу ловца. После инициализации управление возвращается в процедуру Form Load, а там запускается процедура Начальная установка, которая
выделена в отдельную процедуру, так как выполняется не только при загрузке формы, но и при щелчке по кнопке "Начинай сначала". Выше я уже перечислил действия, которые нужно выполнить при начальной установке. Вы видите, что в текстовом поле на форме появляется 0, затем из процедуры Начальная_установка формы запускается процедура Начальная_установка ловца. Здесь Руль устанавливается в положение стоп. Затем вычисляются координаты точки старта ловца. Возможно, у вас вызовут трудность формулы, встречающиеся в коде. Не поленитесь разобраться в них. Например, f.эпрБортик.Left означает горизонтальную координату левого края элемента управления эпрБортик на форме f. Как видите, объект Ловец использует для своей работы информацию о внешнем мире. После выполния процедуры Начальная_установка ловца управление возвращается в процедуру Начальная_установка формы f. Не найдя там больше ничего, Visual Basic возвращается в Form_Load на строку KeyPreview = True. После выполнения этой и следующей строк Form_Load завершает работу и на игровой площадке наступает покой до прихода первого импульса от таймера. Если вас затруднили все эти пассажи с возвратами управления, запустите пошаговый режим. Это прекрасный способ убедиться в правильности кода. А теперь давайте остановимся и подумаем, что успело произойти. Если вы дошли до этого момента в пошаговом режиме, то обнаружили, что ловец, вопреки ожиданиям, не занял место на старте, несмотря на то, что координаты х и у.вычислены правильно. Это что - упущение проекта? Нет. Просто я не стал обременять процедуру Начальная_установка заботами о перемещении 1тдЛовец. Дело в том, что через 1/18 долю секунды все равно придет импульс от таймера и заработает процедура Timerl_Timer. Там-то и запрограммировано перемещение изображения. Никто и не заметит, что ловец встал на место не сразу. И вот импульс грянул. Заработала процедура Timerl_Timer и первым делом запустила процедуру Ловец.Действие. Давайте пока не будем в нее заглядывать, вообразим, что там ничего существенного не произошло, и пойдем дальше. Следующие две строки как раз и перемещают изображение ловца в точку старта. Вместо 0 в счетчике на форме появляется 1. На этом процедура Timerl_Timer заканчивает свою работу. Все замирает до тех пор, пока через 1/18 долю секунды не придет следующий импульс от таймера. Предположим, вы за это время еще не успели прикоснуться к клавиатуре. Вот импульс грянул. Заработала процедура Timerl_Timer и запустила процедуру Ловец . Действие . Рассмотрим, как она работает. Ее тело состоит из двух строк, вызывающих процедуры и функции с интуитивно ясными именами. Первой выполняется процедура Выбираем_куда_ехать_и_делаем_шаг. Руль у нас после начальной установки находится в положении стоп и ничто его оттуда не вывело, значит оператор Select Case не меняет ни х ни у. Хорошо. Дальше выполняется следующая строка. Вызывается функция Ло- вец_у_пола_или_потолка. Вы можете сами убедиться, что поскольку ловец пока далеко от бортиков, то эта функция принимает значение False. Аналогично, значение False принимает и функция Ловец_у_стен. На этом вторая строка процедуры Ловец.Действие завершается, а с ней и вся процедура. Visual Basic возвращается в процедуру Timerl_Timer. Поскольку ни х ни у не менялись, то следующие две строки процедуры оставляют изображение ловца на месте. Ждем следующего импульса. Пусть до момента его прихода мы успели нажать на клавиатуре стрелку вправо, желая направить ловца направо. Немедленно сработала процедура Form_KeyDown в модуле формы и руль встал в положение вправо. Вот пришел импульс. Опять процедура Timerl_Timer направляет нас в процедуру Ловец . Действие , та - в процедуру Выбираем_куда_ехать_и_делаем_шаг. Поскольку руль повернут направо, вычисляется новое значение х, которое на dx больше
предыдущего. Возвратившись наконец в процедуру Timerl_Timer, Visual Basic согласно новому значению х смещает imgJloBe4 чуть вправо. Ждем следующего импульса и так далее. Вот и вся механика ловца. Теперь поговорим о глобальном и локальном. В проекте я старался максимально придерживаться принципа инкапсуляции, все что можно я делал Private. Поглядите повнимательнее в код ловца. Вы видите 4 процедуры и 1 функцию. Именно они и обеспечивают эту механику. Никакая процедура и функция снаружи модуля в этой механике не участвуют. Ловец самодостаточен. Снаружи осуществляется только Запуск двух методов объекта - Начальная_установка и Действие. Именно поэтому они сделаны Public, иначе их снаружи и запустить было бы нельзя. Но вся механика этих методов, опять же, находится внутри ловца, так что никакого нарушения суверенитета нет. Остальные процедуры и функции сделаны Private, они снаружи и не видны и недоступны. Всю мыслительную работу ловец выполняет сам. Было бы логично, если бы он сам и передвигал ^дЛовец, то есть, если бы строки ^дЛовец. Lef t = Ловец. х ^дЛовец. Тор = Ловец. у находились бы не в модуле формы, а в модуле класса. Здесь это можно было сделать просто, но в том, что касается шаров, пришлось бы пойти на некоторое усложнение программы, и я на это не пошел ни там, ни там. Теперь о переменных. Две переменные, dx и dy, объявлены Private, поэтому они не видны снаружи. И не надо, естественно. А вот переменные х и у объявлены Public, от этого они стали свойствами. Принцип инкапсуляции плачет. Зачем нужно было это делать? Для чего они нужны снаружи? Только для смещения ^дЛовец. Если бы объект Ловец смещал свое изображение сам, то и не надо было бы делать х и у свойствами. Ну ладно. Сделал так сделал. А уж если так, то надо бы сделать их, по крайней мере, только для чтения. Я займусь этим в 0. Вот и все о первой ступени проекта. Создаем шар. Завершаем проект Модуль класса elsЛовец остается прежним. Приведу в окончательном виде все остальное, а именно: модуль класса clslllap, модуль кода и модуль (окно кода) формы. Модуль кода Public Const Число_шаров = 10 Public Const Размер_шара = 200 Public Const РаЗмер_ловца = 500 Public Const Дальность = 200 'Это расстояние, на котором ловец достает шар Public Ловец As elsЛовец 'Объявляем объект Ловец класса elsЛовец Public Шар(1 То Число_шаров) As clslllap 'Объявляем массив объектов Шар класса clslllap Модуль формы Public int4Hcno_noHMaHHbix_:iiEapoB As Integer Private Sub Form_Load() 'Эта процедура выполняется один раз при запуске проекта Dim i As Integer Randomize 'Шары должны разлетаться со случайной скоростью и в случайном направлении 'Настраиваем размеры изображений шара и ловца: imglHap(l) .Height = Размер шара
imglllap (1) .Width = РаЗмер_шара imgJIoBeii. Height = Размер_ловца imgJloBeii. Width = РаЗмер_ловца 'Порождаем массив изображений шара: For i = 2 То Число_шаров Load imglllap (i) imglllap (i) .Visible = True Next i 'Порождаем объект Ловец и массив объектов-шаров: Set Ловец = New elsЛовец For i = 1 То Число_шаров Set lHap(i) = New clslHap Next i Начальная_установка KeyPreview = True 'Чтобы форма реагировала на клавиатуру txtC4eT4HK времени.Locked = True 'Чтобы в процессе игры нельзя было вручную менять показания счетчика End Sub Private Sub спк1__Начинай_сначала_С11ск () 'Что происходит при нажатии кнопки НАЧИНАЙ СНАЧАЛА Начальная_установка txtC4eT4HK времени.SetFocus 'Чтобы фокус ушел с кнопки, иначе первое 'нажатие на стрелки клавиатуры не вызывает движения ловца End Sub Private Sub Начальная_установка() 'Все объекты встают в исходную позицию и настраиваются на новую игру Dim i As Integer txtC4eT4HK времени.Text = 0 'Обнуляем счетчик времени int4Hcno_noHMaHHbix_:iTiapoB = 0 'Обнуляем число пойманных шаров Ловец.Начальная_установка 'Ловец встает в исходную позицию и настраивается на новую игру For i = 1 То Число_шаров 'Все шары встают в исходную позицию и настраиваются на новую игру Шар(i).Начальная_установка Next i End Sub Private Sub Timerl_Timer() 'Главная_процедура игры, выполняется один раз на каждом импульсе таймера Dim i As Integer 'Действуют все шары: For i = 1 То Число_шаров Шар(i).Действие 'Сначала объект Шар вычисляет свои координаты, imglllap (i) .Left = lHap(i) .x 'Затем изображение шара сдвигается на вычисленные координаты imglllap (i) . Top = Шар (i) . у Next i 'Действует ловец: Ловец.Действие 'Сначала объект Ловец вычисляет свои координаты,
imgJloBeu,. Lef t = Ловец. x 'Затем изображение Ловца сдвигается на вычисленные координаты ±тдЛовец.Тор = Ловец.у 'Действует счетчик времени на форме, увеличивая свои показания на 1: If int4Hcno_noHMaHHbix_:iiEapoB О Число_шаров Then txtC4eT4HK времени. Text = txtC4eT4HK времени.Text + 1 End Sub 'Обработка события - нажатия клавиши на клавиатуре для управления ловцом: Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyUp Ловец.Руль = вверх Case vbKeyLeft Ловец.Руль = влево Case vbKeyDown Ловец.Руль = вниз Case vbKeyRight: Ловец.Руль = вправо Case vbKeyControl: Ловец.Руль = стоп End Select End Sub Модуль clslllap Public x As Long 'Координаты шара Public у As Long Private dx As Long 'Шаг шара по горизонтали и вертикали между двумя импульсами таймера Private dy As Long Private Макс_шаг As Long 'Максимально возможное значение шага шара Private Sub Class_Initialize() 'Процедура, выполняющаяся при рождении шара Макс_шаг = 100 End Sub Public Sub Начальная_установка() 'Шар встает в исходную позицию и настраивается на новую игру 'Ставим шар на исходную позицию: х = f.эЬрБортик.Left + f.эЬрБортик.Width * 3 / 4 'Она отстоит по горизонтали на четверть ширины поля от правого его края у = f.эЬрБортик.Тор + f.эЬрБортик.Height / 2 'Она по вертикали расположена посредине поля 'Вычисление шага: dx = Макс_шаг * (1 - 2 * Rnd) 'Шаг по горизонтали случаен и не превосходит Макс_шаг dy = Макс_шаг * (1 - 2 * Rnd) 'Шаг по вертикали случаен и не превосходит Макс_шаг End Sub Public Sub Действие() 'Главная_процедура шара, выполняется один раз на каждом импульсе таймера If Поймали Then Выход_шара_из_игры 'Сначала шар определяет, не поймали ли его, Отскакивать_или_нет 'затем, если бортик рядом, реагирует на него, Шаг 'и наконец делает шаг
End Sub Private Sub Отскакивать_или_нет() If Шар_у_пола_или_потолка Then dy = -dy 'Отскок от пола или потолка Elself Шар_у_стен Then dx = -dx End If End Sub Private Sub Шаг() x = x + dx у = у + dy End Sub Private Function Шар_у_пола_или_потолка() As Boolean If у < f.эЬрБортик.Top Or у + РаЗмер_шара > f.эЬрБортик.Top + f.эЬрБортик.Height Then Шар_у_пола_или_потолка = True Else Шар_у_пола_или_потолка = False End If End Function Private Function Шар_у_стен() As Boolean If x < f.эЬрБортик.Left Or x + РаЗмер_шара > f.эЬрБортик.Left + f.эЬрБортик.Width Then Шар_у_стен = True Else Шар_у_стен = False End If End Function Private Function Поймали() As Boolean 'ЕСЛИ расстояние по горизонтали между центрами шара и 'ловца меньше Дальности 'И если расстояние по вертикали между центрами шара и 'ловца меньше Дальности, ТО If Abs(х - Ловец.х - ((Размер_ловца - Размер_шара) /2)) < Дальность And Abs(у - Ловец.у - ((Размер_ловца - Размер_шара) /2)) < Дальность Then Поймали = True Else Поймали = False End If End Function Private Sub Выход_шара_из_игры() x = -10000: у = -10000: dx = 0: dy = 0 'Убрать шар подальше с глаз долой и чтоб не двигался f. int4Hcno_noJ4MaHHbix_:uiapoB = f. int4Hcno_noJ4MaHHbix_:uiapoB + 1 End Sub ' Реакция на бортик 'Отскок от стен
Запустите проект. Проверьте, правильно ли он работает. Поиграйте значениями шагов ловца и шара, их размерами, числом шаров и другими величинами, подберите наиболее удобные для себя. Пояснения. Обратите внимание, что в обоих классах много одноименных переменных и процедур. Как я уже говорил чуть выше, никакой путаницы здесь произойти не может. Иметь одинаковые имена для элементов одинакового смысла удобно и правильно. В модуле формы разберитесь самостоятельно. Я думаю, что комментариев достаточно . Поговорим подробнее о модуле шара. Совершенно аналогично модулю ловца здесь имеется два метода - Начальная_установка и Действие. Метод Действие главный, он определяет, что должен делать шар в каждое мгновение своего полета . Он должен знать, поймали его или нет, и пора ли отскакивать от бортика. Этому и посвящены первые две из трех строк процедуры Действие. Эти две строки вычисляют нужным образом dx и dy, а третья строка - Шаг - изменяет в соответствии с этими значениями координаты х и у. Все, больше ничего во время движения шара делать не нужно. Теперь посмотрим, что происходит при нажатии на кнопку "Начинай сначала". Выполняется процедура спк1_Начинай_сначала_С1±ск и после пары прыжков по процедурам Visual Basic передает управление процедуре Начальная_установка каждого шара. Здесь трудности у вас может вызвать вычисление dx и dy. Поскольку значение Rnd есть случайное число в диапазоне от 0 до 1, то легко видеть, что как dx, так и dy будут случайными числами в диапазоне от -100 до 100. Этого достаточно, чтобы шар полетел со случайной скоростью в случайном направлении. Теперь насчет отскока. Возможно, тем, кто не очень силен в математике и физике, покажется удивительным, что для отскока от горизонтальной преграды достаточно выполнить оператор dy = -dy, то есть поменять вертикальную составляющую шага на ее противоположное значение. "Но это действительно так!" Аналогично, достаточно выполнить оператор dx = -dx для отскока от вертикальной преграды. Чтобы лучше понять этот факт, запустите пошаговый режим при Макс_шаг=1000 и Число_шаров=1. При этом проследите внимательно за dx и dy, х и у. Недоработки проекта Замеченные мной недоработки проекта вызваны нежеланием усложнять и увеличивать в объеме его код. Вот они: Иногда шар, вместо того, чтобы отскочить от борта, начинает двигаться скачками вдоль него. Возьмем к примеру левый бортик. Почти наверняка это связано с неточностью обработки вещественных чисел в операторе x=x+dx, в результате чего после отскока опять выполняется условие х < f.эЬрБортик.Left и шарик опять выполняет оператор dx = -dx. Рискну посоветовать (сам не проверял): в момент отскока незначительно увеличьте абсоютное значение шага: dx = (dx+0.001). Я не знаю, как поведет себя шар, попавший точно в угол. По идее, он должен там застрять. Но у меня так ни разу не было. Постоянными нажатиями на клавиши направления мы можем передвигать ловца за пределами стола. Ни к чему это. Надо бы запретить. Еще об объектах У вас могло создаться превратное впечатление, что объект - это обязательно что-то движущееся, причем в темпе, задаваемом таймером. Совсем нет. Вспомните элементы управления - список, флажок. Это все тоже объекты. Вы можете создать
класс пользователя, представляющий собой набор процедур и функций для сложной обработки информации в текстовом поле. И таймера здесь никакого не нужно. Вы знаете, что у элементов управления есть свойства, методы и события. У объекта пользователя мы изучили только свойства и методы. А события? Они тоже есть, вернее, вы можете запрограммировать их. Но останавливаться на этом я не буду. Форма как объект Ревниво оберегая и инкапсулируя объекты пользователя, мы совсем забыли о форме. Ведь это тоже объект. И не годится оставлять его незащищенным извне, то есть со стороны модулей классов и кода. Надо инкапсулировать. Все, что можно, делать Private. Кстати, мы ведь можем во время работы проекта "штамповать" нашу форму, как "штамповали" объекты по их классу. Делается это так. Добавьте в форму нашей игры кнопку Commandl и запишите в окно кода формы такую процедуру: Private Sub Commandl Click() Запустите проект и в один из моментов игры нажмите кнопку Commandl. Вы увидите , что игра идет уже на двух столах, причем одна и та же игра. Подвигайте ловца, понажимайте на кнопки. Поразмыслите сами, какие это сулит возможности в будущем. Свойства только для чтения Свойства только для чтения, как я уже говорил чуть раньше, нужны для того, чтобы обезопасить наш объект от вмешательства извне. Давайте сделаем свойством только для чтения свойство х ловца. Идея здесь такая. Объявим х, как Private. Проект сразу перестает работать, так как модулю формы для смещения изображения ловца нужно знать его координаты. Придумаем нашему свойству х "псевдоним", под которым он будет виден снаружи - Хл. Вся "фишка" в том, чтобы написать в классе с1эЛовец глобальную функцию с именем Хл, все тело которой состоит из единственного оператора Хл=х: Public Function Хл() As Long Хл = х End Function Теперь заменим везде снаружи обращение Ловец.х на Ловец.Хл. Поскольку обращение к переменной и функции без параметров синтаксически неотличимо, то снаружи могут сколько угодно думать, что обращаются к переменной Хл, когда на самом деле это функция. Проект работает, проверьте. А где же здесь желанная цель "только для чтения"? А она достигнута. Потому что присваивать значение функции мы можем только в ее теле, а уж никак не из других модулей. Теперь сотрите эту функцию. Создадим ее другим, общепринятым путем. Visual Basic предлагает удобный интерфейс для создания процедур, функций, событий и свойств: ToolssAdd Procedures поставьте переключатели в положение Property (так как мы хотим создать свойство) и Public, дайте имя свойству - Хл SOK. Перед нами появятся две заготовки: Public Property Get Хл() As Variant End Property Public Property Let Хл(ByVal vNewValue As Variant) Dim f1 As New f f1.Show 'Объявляется новая форма fl как копия формы f 'Форма fl загружается и показывается на экране End Sub
End Property Слова Property Get означают "Получи (узнай) значение свойства", а слова Property Let означают "Присвой значение свойству". Нижнюю заготовку стираем, так как она предлагает записать код, позволяющий менять значение Хл снаружи. А верхнюю можно использовать вместо старой функции, заменив для порядка Variant на Long: Public Property Get Хл() As Long Хл = x End Property Здесь открывается простор для контроля со стороны объекта над желающими снаружи видеть свойство и даже для введения их в заблуждение, так как в теле свойства мы можем писать какой угодно код, например: Public Property Get Хл() As Long Хл = x + 1000 If x > 5000 Then MsgBox ("Дальше Замучаю сообщениями") End Property Наследование, полиморфизм Кроме инкапсуляции у классов объектов есть еще две замечательные черты: наследование и полиморфизм. Они важны в тех проектах, где имеются не один-два класса объектов, а целые их системы, иерархии. Понятие о наследовании и полиморфизме я дам вам на уровне аналогий. Вообразим, что мы создали простой класс Автомобиль, наделив его всего лишь двигателем, рулем и 4 колесами. И никаких подробностей. Полюбовавшись работой получившейся самоходной тележки, мы решили развивать проект дальше и создать еще три класса, более богатых и подробных: Амфибия, Грузовик и Автобус. У каждого из новых классов, как и у Автомобиля, есть двигатель, руль и 4 колеса, но вдобавок к ним и много подробностей, например, у Амфибии гребной винт, а у Грузовика - кузов. Как создавать эти 3 класса? Можно так же, как мы создавали clslllap, когда мы вручную записали весь код, причем скопировав часть кода из с1эЛовец. В нашем случае нам можно было бы скопировать весь код Автомобиля в каждый из трех модулей, добавив затем в них для каждого свои процедуры и функции. Но есть гораздо более удобный и "правильный" способ - это наследование. Мы просто объявляем, что новый класс Грузовик является наследником класса Автомобиль. При этом Грузовик неявно (невидимо) приобретает весь код своего родителя - Автомобиля. Ничего не записав в код Грузовика, мы уже можем пользоваться им как Автомобилем. Чтобы снабдить Грузовик дополнительными чертами, мы пишем ему новые процедуры и функции. Аналогично поступаем с Амфибией и Автобусом. Самое интересное то, что если мы изменяем что-то в коде родителя (Автомобиль) , то это изменение тут же сказывается на наследниках. Например, если мы в Автомобиле заменили двигатель внутреннего сгорания на электрический, то эта Замена немедленно произойдет и в Амфибии, и в Грузовике, и в Автобусе. Это очень ценное и удобное качество. Полиморфизм в частном случае - это выполнение разных действий процедурами с одинаковыми именами. Так, метод Начальная_установка шар и ловец выполняют по- разному. При наследовании полиморфизм проявляется тогда, когда мы у наследника как-то изменяем процедуру родителя. Скажем, если для Автомобиля процедура Остановка это просто остановка, то для Автобуса это еще и объявление по громкоговорителю названия остановки. В заключение должен сказать, что Visual Basic версий 6.0 и более ранних не поддерживает настоящие полиморфизм и наследование. Впервые их поддержка осуществлена в Visual Basic.NET.
Понятие о базах данных Что такое база данных, я пояснил на примере базы данных компьютерных игр. В подавляющем большинстве случаев база данных - это одна или несколько прямоугольных таблиц, таких, например, как эта таблица, посвященная боксерам: Фамилия И.О. Дата рождения Спортивное общество Разряд по боксу Агамалов СВ. 12.4.78 Трудовые резервы 3 Парменов Л.В. 31.11.82 Динамо 3 Васин А.Н. 16.10.71 ЦСКА 3 Попов А.А. 14 .2.79 Спартак 2 Яньков В.Ю. 27.1.84 Спартак 2 Иноземцев И.М. 3.3.80 Восток 1 Столбцы таблицы называются полями, строки - записями. Поля могут быть текстовыми (Спортивное общество), числовыми (Разряд по боксу), типа даты и времени (Дата рождения), булевскими, содержать объекты (картинки, звук, видео). Количество записей в реальных базах данных достигает многих тысяч. Обратите внимание, что база данных, рассмотренная нами, к концу раздела приобретает более сложную структуру, чем просто одна прямоугольная таблица, но я ограничусь этим самым простым и распространенным случаем. Для того, чтобы человек мог удобно работать с базами данных, написаны специальные программы - системы управления базами данных (СУБД). Основное, что нужно человеку от СУБД при работе с готовой базой данных - это сортировка, поиск и фильтрация. Например, наша база боксеров отсортирована по разряду. Пользователь должен иметь возможность легко сортировать базу данных по любому полю. Если в базе данных больше ста записей, становится актуальной проблема быстрого поиска нужной записи. Например, в базе данных о 20000 преступников нужно найти запись о Вольдемаре Сидорове, 1972 года рождения, по кличке Бармалей , чтобы посмотреть, есть ли у него шрам на левой щеке. Когда же мы ищем преступника по приметам, то из 20000 записей мы хотим вывести на экран только те несколько, что соответствуют кареглазым блондинам ростом от 175 до 180 см с татуировкой на правой руке. Этот процесс называется фильтрацией. Кроме этих основных задач порядочная СУБД позволяет пользователю изменять содержимое записей, дополнять базу новыми записями, стирать ненужные, распечатывать в удобном виде нужную информацию из базы данных, позволяет при помощи программирования автоматизировать наиболее трудоемкие операции с базами данных и приспосабливать базы данных к конкретным нуждам пользователя. СУБД, наиболее близкая к Visual Basic - это Microsoft Access, входящая в пакет Microsoft Office Professional. В Access вы можете и безо всякого программирования прекрасно работать с реальными базами данных. Ну а программирование работы в Access осуществляется на специальном языке Visual Basic for Applications, который является "диалектом" языка Visual Basic применительно к пакету Microsoft Office. Если вы решили заняться базами данных, то у вас два пути: Быстренько освоить на уровне пользователя Access, и тогда ваша работа с базами данных будет удобной и приятной, а необходимость в программировании вы почувствуете не скоро. Когда же почувствуете, то будете программировать на практически известном вам Visual Basic for Applications. Осваивать работу с базами данных в среде Visual Basic. Это значительно труднее, но зато вы почти сразу же начнете программировать и сможете создавать проекты, в которых работа с базами данных объединена с совершенно други-
ми областями обработки информации (например, с играми). Создаем заготовку базы данных при помощи Visual Data Manager Пусть мы хотим создать базу данных книг, выпущенных мифическим издательством "Контакт" в мифические времена. База данных должна иметь такой вид: Название книги Автор Дата выпуска Количество страниц Понедельник начинается в Стругацкие 3.5.1965 187 субботу Затерянный мир Конан Дойль 15.11.1920 210 За миллиард лет до конца Стругацкие 14.7.1974 118 света Белые ночи Достоевский 30.9.1848 55 Туманность Андромеды Е фремов 12.9.1957 348 Сорочинская ярмарка Гоголь 31.12.1831 26 Наша задача - научиться осуществлять с этой базой все основные необходимые операции: создание, заполнение, изменение, сортировку, фильтрацию. Конечно же, мы не будем пользоваться доморощенным программированием. В Visual Basic имеются специальные инструменты для более быстрого и удобного выполнения всех этих операций. Первым мы используем Visual Data Manager, расположенный в меню Add-Ins. Он представляет собой по сути простенькую СУБД, работающую автономно от среды Visual Basic. Но я его использую только для создания структуры базы данных. Начнем создавать нашу базу, но сначала придумаем имя для таблицы - "Books" (отдельное имя для таблицы необходимо потому, что база данных может содержать несколько таблиц). И для полей тоже придумаем имена: Nazvanie, Avtor, Data, Kol_stran. Add-Ins —» Visual Data Managers File^ New-^ Microsoft Access (мы выбрали Microsoft Access, это значит, что с этой базой данных можно будет в будущем работать не только из Visual Data Manager, но и в Access) —» Version 7.0 MDB. Перед вами откроется окно сохранения, которое предложит сохранить будущую базу в файле с расширением MDB. Дадим файлу имя "Книги" и сохранимся. Окно Visual Data Manager приобретет следующий вид (на картинке в левом окне показана структура таблицы, которую она приобретет позже, а пока там почти пусто) : jjVisDala: C:\Program Н1е5ШВ98\Проекты\Лроекты для книги\220-Базы даннын\2240-Книги\К.ниги_тс]Ь File Utility Window Help ш ш % ш Ш ш Ы ■щ) Database Window + Г^1 Properties Н Fields + Н Nazvanie Гч1 Avtor HI Data [3 Kol_str Indexes Hf Properties Ready User: admin Файл создан. Пора создавать таблицу. Щелкнем правой клавишей мышки внутри
левого окна и в открывшемся контекстном меню выберем New Table. Перед нами откроется пустое окно структуры таблицы (на рисунке оно показано уже заполненным информацией о полях таблицы, причем слева виден список полей, а справа - информация о выделенном поле (Avtor) нашей таблицы): Table Structure Table Name: Field List: Ш Books iNazvanie Data Kol stran Add Field Remove Field Name: Type: Size: CollatingOrder: OrdinalPosition: ValidationText: ValidationRule: Default Value: Avtor Г Г Г W AllowZeroLength Г" Required Index List: Add Index Remove Index Name: Г Г Fields: Г Г Г Build the Table Close Дадим имя таблице. Затем щелкнем по кнопке Add Field, перед нами откроется пустое окно для добавления поля (на рисунке оно показано уже заполненным информацией о поле Nazvanie нашей таблицы): Ш Add Field ш Name: |Nazvanie Type: Size: OrdinalPosition: ValidationText: ValidationRule: |50 Г" FixedField (• VariableField Г W AllowZeroLength Г" Required DefaultValue: OK Close Вам достаточно только дать имя полю и выбрать под меткой Туре его тип. Остальное - тонкости. Нажимая ОК, введем информацию о всех полях, затем закроем окно добавления поля (кнопка Close). Поле можно удалить, выделив его в окне структуры таблицы и нажав кнопку Remove Field. Закончив ввод информации о всех полях, нажимаем кнопку Build the Table и на этом создание структуры таблицы закончено. Все остальное мы будем делать другими инструментами. Работа с базами данных. Элементы управления Data и DBGrid. Язык SQL. Для работы с базами данных непосредственно изнутри проекта Visual Basic удобно применять элемент управления Data, расположенный в Toolbox. Разместим
его на форме. Пусть его имя будет Datal. Прежде всего объясним ему, с каким файлом базы данных он должен работать. Для этого придадим его свойству DatabaseName значение адреса созданного в предыдущем разделе файла. Затем проследим, чтобы свойство Connect имело значение Access, EOFAction - Add New, установим в качестве значения свойства RecordSource (источник записей для работы элемента Datal) имя таблицы нашей базы - Books. Эти свойства можно устанавливать и в режиме работы. Например, Datal.RecordSource = "Books" С этого момента вы можете запускать проект и работать с базой данных программным путем. Однако, не очень-то удобно это делать, не видя во время работы саму таблицу базы данных, a Data сам по себе ее не показывает. Способов увидеть ее несколько. Самый лучший - использование элемента управления DBGrid. Находится он так: Project —» Components^ Microsoft Data Bound Grid Control 5.0. Разместите его на форме. Пусть его имя будет DBGridl. Работать он будет в паре с Data, таблицу которого и будет делать видимой в режиме работы. Установим его свойства: Прежде всего, поскольку в проекте могут присутствовать несколько элементов Data, нужно указать, с каким именно из них будет работать наш DBGrid, другими словами, к кому он будет привязан. Для этого установим значение его свойства DataSource в Datal. Установим также в True следующие свойства DBGridl: AllowAddNew (разрешить вручную добавлять в таблицу новые записи), AllowDelete (разрешить вручную удалять записи из таблицы), AllowUpdate (разрешить вручную изменять данные в таблице). Можете придать какое-нибудь значение свойству Caption. Приступим к заполнению таблицы данными о книгах. Для этого запустим проект. На экране появится пустая таблица. После того, как вы вручную заполните эту таблицу, проект будет иметь следующий вид: и 4 Datal ► ►1 Книжки издательства " (онтакт" Nazvanie Avtor Data Kol str Понедельник начинается в субботу Стругацкие 03.05.65 187 Затерянный мир Конан Дойль 15.11.1920 210 За миллиард лет до конца света Стругацкие 14.07.74 118 Белые ночи Достоевский 30.09.184S 55 Туманность Андромеды Ефремов 12.09.57 348 Сорочинская ярмарка Гоголь 31.12.1831 26 В верхней части вы видите элемент Datal, от лицезрения которого толку мало, поэтому его вполне можно сделать невидимым. Данные, которые вы вводите в поле, проверяются на принадлежность к типу поля. Обратите внимание, что Visual Basic "укоротил" те даты, которые считает "и так понятными". Чтобы удалить запись, выделите ее щелчком по серому прямоугольнику слева от записи и нажмите на клавиатуре Delete. Можно расширять и сужать строчки и столбцы, перетаскивая границу между серыми прямоугольниками. Когда вы завершите выполнение проекта, таблица будет автоматически сохране-
на в файл. К Data можно привязывать не только DBGrid, но и другие элементы, например текстовые поля. Разместите на форме четыре текстовых поля и свяжите их с Datal. Также каждое из этих полей свяжите при помощи свойства DataField со своим полем таблицы. Запустите проект. Пощелкайте мышкой по разным записям в DBGrid. Вы видите, что значения текстовых полей автоматически становятся равными значениям полей текущей записи таблицы. И наоборот, стоит нам изменить содержимое текстового поля, как меняется соответствующее содержимое таблицы. До сих пор мы меняли содержимое базы данных вручную. Посмотрим, как это можно делать программным способом. Таблица разделена на клетки-ячейки. Существует понятие текущей ячейки (current cell), с которой происходит в настоящий момент работа. Она Задается номером записи (DBGridl.Row) и номером поля (DBGridl.Col) . Свойство DBGridl.Text означает содержимое текущей ячейки. Самая верхняя запись имеет номер 0, а не 1. То же относится и к самому левому полю. Например, при работе с нашей базой данных фрагмент DBGridl.Row = 3 DBGridl.Col = 1 Debug.Print DBGridl.Text напечатает слово Достоевский. Вот пример процедуры, которая заполняет числами 2, 3, 4 поле Kol_str в Записях со 2-й по 4-ю: Private Sub Commandl_Click() DBGridl.Col = 3 For i = 2 To 4 DBGridl.Row = i DBGridl.Text = i Next End Sub А вот строка, увеличивающая на одни сутки дату выпуска: DBGridl.Text = DateAdd("d", 1, DBGridl.Text) SQL А теперь посмотрим, как при помощи простейших операторов выполняются такие сложные вещи, как сортировка и фильтрация. Для этого будем использовать популярный универсальный язык общения с базами данных SQL. Вот процедура, сортирующая нашу базу данных по дате выпуска книги: Private Sub Command4_Click() Datal.RecordSourсе = "SELECT Avtor, Nazvanie, Data FROM Books ORDER BY Data" Datal.Refresh End Sub Выполнив эту процедуру, вы увидите на экране такую таблицу: Avtor Nazvanie Data Гоголь Сорочинская ярмарка 31.12.1831 Достоевский Белые ночи 30.9.1848 Конан Дойль Затерянный мир 15.11.1920 Е фремов Туманность Андромеды 12.9.57 Стругацкие Понедельник начинается в субботу 3.5.65 Стругацкие За миллиард лет до конца света 14.7.74
Пояснения: Выше мы писали строку Datal.RecordSource = "Books" имея в виду, что источником данных для работы элемента Datal будет целиком таблица Books. А вот первая строка нашей процедуры выбирает для работы элемента Datal только три поля: Avtor, Nazvanie, Data. Действительно, в переводе с английского команда SELECT Avtor, Nazvanie, Data FROM Books ORDER BY Data означает ВЫБРАТЬ Avtor, Nazvanie, Data ИЗ Books УПОРЯДОЧИТЬ ПО Data To есть работа будет вестись не со всеми полями, а только с тремя перечисленными, причем записи будут упорядочены по возрастанию даты выпуска книги. Если вместо ORDER BY Data написать ORDER BY Data DESC, то записи будут упорядочены по убыванию даты. Строка Datal.Refresh просто приводит предыдущую команду SELECT в действие. Следующая процедура осуществляет фильтрацию. Private Sub Command6_Click() Datal.RecordSource = "SELECT * FROM Books WHERE Kol_str>100" Datal.Refresh End Sub Пояснения: Звездочка в выражении SELECT * FROM Books означает, что мы выбираем все поля таблицы Books. Выражение WHERE Kol_str >100 переводится ГДЕ количество страниц >100 и приказывает вывести на экран только те книжки, что толще 100 страниц. Следующая таблица иллюстрирует некоторые другие возможности SQL: Команда Смысл SELECT * FROM Books WHERE Avtor = 'Стругацкие' AND Data > #21/11/1970# На экран выводятся книжки Стругацких, выпущенные позже 21 ноября 1970 года. Таким образом, в выражении могут содержаться логические операции. Обратите внимание, что 'Стругацкие' берутся в одинарные кавычки, а не двойные, так как вся команда SELECT сама является ни чем иным, как строкой в операторе присвоения, и вторые двойные кавычки создали бы путаницу. SELECT TOP 3 * FROM Books ORDER BY Data DESC На экран выводятся 3 последние книжки, выпущенные издательством. Выражение ORDER BY Data DESC сортирует записи по убыванию даты, а выражение ТОР 3 показывает на экране только верхние 3 записи из отсортированных . SELECT * FROM Books WHERE Kol str BETWEEN 100 AND 200 На экран выводятся книжки с числом страниц МЕЖДУ 100 И 200.
РЕШЕНИЕ ЗАДАНИЙ У Private Sub Квадрат_СИск() Результат.Text = Val(Число1.Text) * Val(Число1.Text) End Sub Private Sub CBPOC_Click() Число1.Text = "" 4ncno2.Text = "" Результат.Text = "" End Sub Private Sub Кл_вычитания_СИск () Результат.Text = Val(Число1.Text) - Val(Число2.Text) Кл_вычитания.Left = 2000 Кл_вычитания.Caption = "Ой!" End Sub Private Sub CBPOC_Click() Число1.Text = "" 4Hcno2.Text = "" Результат.Text = "" Кл_вычитания.Left = 3400 Кл_вычитания.Caption = "-" End Sub 6^ 0 0 Будет напечатано число 211. 8^ 1001 -100 15 -10 9. 82 10 Dim a As Long Dim b As Long Private Sub Commandl_Click() a = 9000000 b = 1000 b = b + a Debug.Print b End Sub
'Задача вычисления средней скорости Dim Скорость1 As Double 'Скорость автомобиля на первом участке пути Dim Время1 As Double 'Время прохождения первого участка Dim Путь1 As Double 'Длина первого участка Dim Скорость2 As Double 'Скорость автомобиля на втором участке пути Dim Время2 As Double 'Время прохождения второго участка Dim Путь2 As Double 'Длина второго участка Dim Средняя_скорость As Double 'Средняя скорость автомобиля Private Sub Commandl_Click() 'Задание исходных данных Скорость1 = 80 Время1 = 3 Скорость2 = 90 Время2 = 2 'Вычисление результата Путь1 = Скорость1 * Время1 Путь2 = Скорость2 * Время2 Средняя_скорость = (Путь1 + Путь2) / (Время1 + Время2) 'Отображение результата Debug.Print Средняя_скорость End Sub 12 'Задача: В самом углу прямоугольного двора стоит прямоугольный дом. 'Подсчитать площадь дома, свободную площадь двора и длину забора. 'Объявляем переменные величины Dim Длина_двора As Integer Dim Ширина_двора As Integer Dim Площадь_двора As Integer Dim Периметр_двора As Integer Dim Длина_дома As Integer Dim Ширина_дома As Integer Dim Площадь_дома As Integer Dim Полпериметра_дома As Integer Dim Свободная_площадь_двора As Integer Dim Длина_Забора As Integer Private Sub Commandl_Click() 'Ввод исходных данных Длина_двора = InputBox("Введите длину двора") Ширина_двора = InputBox("Введите ширину двора") Длина_дома = InputBox("Введите длину дома") Ширина_дома = InputBox("Введите ширину дома") 'Вычисление результатов Площадь_двора = Длина_двора * Ширина_двора Площадь_дома = Длина_дома * Ширина_дома Периметр_двора = 2 * (Длина_двора + Ширина_двора) Полпериметра_дома = Длина_дома + Ширина_дома Свободная_площадь_двора = Площадь_двора - Площадь_дома Длина забора = Периметр двора - Полпериметра дома
'Отображение результатов Textl.Text = Площадь_дома Text2.Text = Свободная_площадь_двора Text3.Text = Длина_забора End Sub 13. 'Задача вычисления длины окружности и площади круга Dim R As Double 'Радиус Dim L As Double 'Длина окружности Dim S As Double 'Площадь круга Dim Pi As Double 'Число "пи", равное 3,14 Private Sub Commandl_Click() 'Задание исходных данных R = Textl.Text 'Величину радиуса берем из текстового поля Pi = 3.1416 'Вычисление результатов L = 2 * Pi * R S = Pi * R А 2 'Отображение результатов с 5 знаками после запятой Print "Длина окружности ="; Format(L, "0.00000") Print "Площадь круга ="; Format(S, "0.00000") End Sub 14 . Dim nazvaniel As String Dim nazvanie2 As String Dim rl As Double Dim r2 As Double Dim vl As Double Dim v2 As Double Dim tl As Double Dim t2 As Double Dim Pi As Double 'Название первой планеты 'Название второй планеты ' Радиус орбиты первой планеты ' Радиус орбиты второй планеты 'Скорость первой планеты 'Скорость второй планеты 'Продолжительность года первой планеты 'Продолжительность года второй планеты 'Число "пи", равное 3,14 Private Sub Commandl_Click() 'Задание исходных данных nazvaniel = InputBox("Введите название первой планеты") rl = InputBox("Введите радиус орбиты первой планеты (в миллионах километров) ") vl = InputBox("Введите скорость первой планеты (в миллионах километров в сутки)") nazvanie2 = InputBox("Введите название второй планеты") r2 = InputBox("Введите радиус орбиты второй планеты (в миллионах километров) ") v2 = InputBox("Введите скорость второй планеты (в миллионах километров в сутки)") Pi = 3.1416 'Вычисление результатов tl = 2 * Pi * rl / vl 'год = время 1 оборота = длина орбиты / скорость, t2 = 2 * Pi * r2 / v2 'а длина орбиты равна два пи * радиус
'Отображение результатов в двух вариантах: Print "Продолжительность года на планете "; nazvaniel; " - "; Format(tl, "О"); _ " суток, а на планете "; nazvanie2; " - "; Format(t2, "О"); " суток" Textl.Text = "Продолжительность года на планете " + nazvaniel + " - " + Format(tl, "О") + " суток, а на планете " + nazvanie2 + " - " + Format(t2, "О") + " суток" End Sub 15. 8 16. 29 17. 6 18. Dim a As Double Dim b As Double Private Sub Commandl_Click() a = InputBox("Введите первое число") b = InputBox("Введите второе число") If а > b Then Debug.Print a + b Else Debug.Print a * b Debug.Print "ЗАДАЧА РЕШЕНА" End Sub 19. Dim a As Double, b As Double, с As Double Private Sub Commandl_Click() a = InputBox("Введите первый отрезок") b = InputBox("Введите второй отрезок") с = InputBox("Введите третий отрезок") If а < b + с Then Debug.Print "Достаточно мал" Else Debug.Print "Слишком велик" End Sub 20. Dim N As Integer, Число_голов As Integer, Число_глаЗ As Integer Private Sub Commandl_Click() N = InputBox("Введите возраст дракона") If N < 100 Then Число_голов =3*N Else Число_голов = 300 + 2 * (N - 100) Число_глаз = 2 * Число_голов Debug.Print Число_голов, Число_глаз End Sub |21 .| Private Sub Commandl_Click() If Commandl.Top < 300 Then Commandl.Top = Commandl.Top + 200 End Sub
22. 23. Dim Загаданное_число As Integer, Отгаданное_число As Integer Private Sub Commandl_Click() Загаданное_число = Int(2 * Rnd) Отгаданное_число = InputBox("Загадано число - 0 или 1. Отгадайте!") If Загаданное_число = Отгаданное_число Then Debug.Print "Угадал" Else Debug.Print "He угадал" End Sub Private Sub Commandl_Click() Имя = InputBox("Как вас Зовут?") If Имя = "Коля" Then MsgBox ("Привет!") Elself Имя = "Вася" Then Forml.BackColor = vbGreen MsgBox ("Здорово!") Elself Имя = "John" Then MsgBox ("Hi!") Else MsgBox ("Здравствуйте!") End If End Sub 25. Dim imya As String Dim vozrast As Integer Private Sub Commandl_Click() Print "Здравствуй, я компьютер, а тебя как зовут?" imya = InputBox("Жду ответа") Print "Очень приятно, "; imya; ". Сколько тебе лет?" vozrast = InputBox("Жду ответа") Print "Ого! Целых"; vozrast; "лет! Ты уже совсем взрослый!" If vozrast > 17 Then InputBox ("В каком институте ты учишься?") Print "Хороший институт" Else InputBox ("В какой школе ты учишься?") Print "Неплохая школа" End If Print "До следующей встречи!" End Sub Dim к As Integer Private Sub Commandl_Click() Commandl.Left = (Forml.Width - 100) * Rnd Commandl.Top = (Forml.Height - 500) * Rnd к = к + 1 Debug.Print к End Sub
26. 27. Замысловатой принцессе нравятся черноглазые, кроме тех, чей рост находится в пределах от 180 до 184. 28. Private Sub Commandl_Click() а = InputBox("Введите дальность выстрела") If а > 28 And а < 30 Then MsgBox ("ПОПАЛ") Elself а >= 30 Then MsgBox ("ПЕРЕЛЕТ") Elself а >= 0 And а <= 28 Then MsgBox ("НЕДОЛЕТ") Else MsgBox ("HE БЕЙ ПО СВОИМ") End If End Sub 29. Dim a As String 'Приветствие человека Dim b As String 'Ответ компьютера Private Sub Commandl_Click() a = InputBox("Компьютер Вас слушает") If a = "Привет" Or a = "Здравствуйте" Or a = "Салют" Then b = a Elself a = "Добрый день" Or a = "Приветик" Then b = "Салют" Elself a = "Здравия желаю" Then b = "Вольно" Else b = "Я вас не понимаю" End If MsgBox (b) End Sub Dim a As Double, b As Double, с As Double Private Sub Commandl_Click() a = InputBox("Введите первый отрезок") b = InputBox("Введите второй отрезок") с = InputBox("Введите третий отрезок") If а > b + с Then Debug.Print "Треугольника не получится" Elself b > а + с Then Debug.Print "Треугольника не получится" Elself с > а + b Then Debug.Print "Треугольника не получится" Else Debug.Print "Треугольник получится" End If End Sub
30. 32. Считаем зайцев 10 зайцев 10 зайцев 11 зайцев 13 зайцев 16 зайцев 20 Зайцев 25 Зайцев 33. 5 Debug.Print "А"; GoTo 5 34 . а = 10000 5 Debug.Print а а = а - 1 GoTo 5 35. а = 100 5 Debug.Print Format(а, "0.00000000") а = а / 2 GoTo 5 36. Процедура движения налево отличается от процедуры движения направо одной строкой: ml: х = х - 0.01 'Компьютер уменьшает горизонтальную координату Процедура движения вниз: Private Sub Command3_Click() у = Image1.Top 'Компьютер узнает, откуда начинать движение ml: у = у + 0.01 'Компьютер увеличивает вертикальную координату Dim Буква As String Private Sub Commandl_Click() Буква = InputBox("Введите строчную букву русского алфавита") Select Case Буква Case "а", "и", "о", "у", "ы", "э" Print "гласный" Case "б", "3", "в", "г", "д", "ж", "й", "л", "м", "н", "р" Print "согласный звонкий" Case "п", "с", "ф", "к", "т", "ш", "х", "ц", "ч", "щ" Print "согласный глухой" Case "е", "ё", "ю", "я", "гь", "ь" Print "какой-нибудь другой, не знаю" Case Else Print "Это не строчная буква русского алфавита" End Select End Sub
Image1.Top = у 'Изображение встает на место, указанное верт. координатой Go То ml End Sub Процедура движения вверх отличается от процедуры движения вниз одной строкой : ml: у = у - 0.01 'Компьютер уменьшает вертикальную координату 37 В. Private Sub Commandl_Click() 'Печатаем 12 3 4 ... 100: а = 1 ml: Debug.Print a; a = a + 1 If a <= 100 Then GoTo ml 'Печатаем 99 98 97 96 . . . 1: a = 99 m2: Debug.Print a; a = a - 1 If a >= 1 Then GoTo m2 End Sub 38. Dim a As Double Private Sub Commandl_Click() a = 0 m: Debug.Print Format(a, "0.000"), Format(a A 2, "0.000000") a = a + 0.001 If a <= 1.00001 Then GoTo m End Sub Почему я вместо If а<=1 написал If а<=1.00001? Причина в незначительных погрешностях, которые допускает компьютер при действиях с десятичными дробями. На моем компьютере при многократном прибавлении 0.001 значение а на некотором этапе перестало быть точным. Конкретнее, у меня получилось вот что: 0,682 + 0,001 = 0,683000000000001 Вследствие этого, при дальнейшем нарастании а последнее сложение было таким: 0,999000000000001 + 0,001 = 1,000000000000001 Легко видеть, что в этом случае для а=1 задание не было бы выполнено, так как компьютер вышел бы из цикла раньше срока. 39. Private Sub Commandl_Click() х = 2700 ml: у = x / 4 + 20 z = 2 * у + 0.23 If у * z < 1 / x Then GoTo m2 Debug.Print Format(x, "0.000000"), Format(y, "0.000000"), Format(z, "0.000000") x = x / 3 GoTo ml
m2 : End Sub 40. x = 300 ml: x = x + 0.01 Imagel.Left = x If x <= 2000 Then GoTo ml 41. Private Sub Command2_Click() 'Ставим объект в начальную точку: х = 300 Imagel.Left = х у = 1000 Image1.Top = у 'Движемся направо: ml: х = х + 0.01 Imagel.Left = х If х <= 2000 Then GoTo ml 'Движемся вниз: m2: у = у + 0.01 Image1.Тор = у If у <= 1500 Then GoTo m2 End Sub Dim Slovo As String Dim i As Integer Private Sub Commandl_Click() i = 1 Do Slovo = InputBox("Введите слово") Debug.Print i; Slovo; "!" i = i + 1 Loop Until Slovo = "Хватит" Debug.Print "Хватит так хватит" End Sub Dim a As Double Private Sub Commandl_Click() a = 0 Do Debug.Print Format(a, "0.000"), Format(a A 2, "0.000000") a = a + 0.001 Loop While a <= 1.00001 End Sub 44 . Private Sub Command2_Click() x = 300 Imagel.Left = x
у = 1000 Image1.Top = у 'Движемся направо: Do х = х + 0.01 Imagel.Left = х Loop While x <= 2000 'Движемся вниз: Do у = у + 0.01 Image1.Top = у Loop Until у > 1500 End Sub v = 20: t = 0: h = 100: s = 0 Do s = v * t h = 100 - 9.81 * t A 2 / 2 Debug.Print Format(t, "0.0"), s, Format(h, "0.000") t = t + 0.2 Loop Until h < 0 Private Sub Commandl_Click() Debug.Print "Прямой счет:"; For i = -5 To 5 Debug.Print i; Next Debug.Print "Обратный счет:"; For i = 5 To -5 Step -1 Debug.Print i; Next Debug.Print "Конец счета" End Sub 47. N = InputBox("Сколько всего кубиков?") For i = 1 To N a = InputBox("Введите сторону кубика") V = a A 3 'Объем кубика Debug.Print "Сторона кубика ="; а, "Объем кубика ="; V Next i 48. Компьютер спросит размеры только одного зала и три раза напечатает его площадь и объем: Площадь пола= 300 Объем зала= 1200 Площадь пола= 300 Объем зала= 1200 Площадь пола= 300 Объем зала= 1200 49. Компьютер напечатает результаты только для последнего зала:
Площадь пола= 5 О Объем зала= 150 50. Компьютер напечатает результат, на 10 превышающий правильный Компьютер напечатает результат, в 2 раза превышающий правильный Компьютер напечатал бы 200 нарастающих значений счетчика Компьютер напечатает 1, если последнее число положительное, и 0 - если неположительное Компьютер запросит только одно число и напечатает 200, если оно положительное, и 0 - если неположительное 51. с_полож = 0 'Обнуляем счетчик положительных чисел с_отриц = 0 'Обнуляем счетчик отрицательных чисел с_больше_10 = 0 'Обнуляем счетчик чисел, превышающих 10 N = InputBox("Сколько всего чисел?") For i = 1 То N а = InputBox("Введите очередное число") If а > 0 Then с_полож = с_полож + 1 If а < 0 Then с_отриц = с_отриц + 1 If а > 10 Then с_больше_10 = с_больше_10 + 1 Next i Debug.Print "Из них положительных -"; с_полож; ", отрицательных -"; с_отриц; ", чисел, превышающих десятку -"; с больше 10 52 Dim a As Double, b As Double Private Sub Command4_Click() с = 0 'Обнуляем счетчик пар Do а = InputBox("Введите первое число пары") b = InputBox("Введите второе число пары") If а = 0 And b = 0 Then Exit Do If a + b = 13 Then с = с + 1 Loop Debug.Print с End Sub 53. 18 10 5 и 8 3 10 3 5 54 . s = 0 'Обнуляем сумматор площади пола For i = 1 То 40 Dlina = InputBox("Введите длину")
Shirina = InputBox("Введите ширину") s = s + Dlina * Shirina 'Наращиваем сумматор площади пола Next i Debug.Print "Общая площадь пола="; s 55. N = InputBox("Сколько учеников в классе?") s = 0 'Обнуляем сумматор баллов For i = 1 То N Балл = InputBox("Введите оценку по физике") s = s + Балл 'Наращиваем сумматор баллов Next i Debug.Print "Средний балл по физике ="; Format(s / N, "0.000") N = InputBox("Сколько сомножителей?") proizv = 1 'Сумматор обнуляем, а накопитель произведения приравниваем 1. Почему? For i = 1 То N Число = InputBox("Введите очередной сомножитель") proizv = proizv * Число 'Наращиваем произведение Next i Debug.Print "Произведение равно"; proizv 1) For k = 3 To 8 For 1 = 0 To 7 Debug.Print k; 1 Next 1 Next k 2) For k = 1 To 3 For 1 = 1 To 3 For m = 1 To 3 For n = 1 To 3 Debug.Print k; 1; m; n Next n Next m Next 1 Next k 3) i = 0 'Обнуляем счетчик For k = 1 To 3 For 1 = 1 To 3 For m = 1 To 3 For n = 1 To 3 i = i + 1 Next n Next m Next 1 Next k Debug.Print i
4) i = О For к = 1 To 3 For 1 = 1 To 3 For m = 1 To 3 For n = 1 To 3 If к <= 1 Debug.Print к; 1; m; n Next n Next m Next 1 Next к Debug.Print i 58. N = InputBox("Сколько чисел?") Min = InputBox("Введите число") Номер_мин_числа = 1 For i = 2 To N chislo = InputBox("Введите число") If chislo < Min Then Min = chislo: Номер_мин_числа = i Next i Debug.Print Min, Номер мин числа 59. Dim N As Integer, Min As Integer, Max As Integer, Рост As Integer Private Sub Commandl_Click() N = InputBox("Сколько одноклассников?") Min = 500 'Заведомо невозможно огромный рост Мах = 0 'Заведомо ничтожный рост For i = 1 То N Рост = InputBox("Введите рост") If Рост < Min Then Min = Рост If Рост > Max Then Max = Рост Next i If Max - Min > 40 Then Debug.Print "Правда" Else Debug.Print "Неправда" End Sub 60. 'На форме Forml ближе к краю размещены два 'маленьких объекта-"кнопки" Imagel и Image2 'с уже загруженными в них картинками, а также большой объект Image3. Private Sub Image1_С1ick() 'ЧТО ДОЛЖНО ПРОИЗОЙТИ ПРИ ЩЕЛЧКЕ МЫШКОЙ ПО "КНОПКЕ" Imagel: Image3.Stretch = False 'Это чтобы большая "рамка" Image3 приняла форму и размеры картины Image3.Visible = False 'А это чтобы большая картина не мелькала при преобразованиях Image3 Image3.Picture = Imagel.Picture 'Копируем картинку с "кнопки" в большую "рамку" Imagel.BorderStyle = 1 'А это чтобы мы видели, какую картинку уже смотрели 'Обнуляем счетчик And 1 <= m And m <= n Then i = i + 1
Form_Factor = Forml.Width / Forml.Height 'Это продолговатость формы Image_Factor = Image3.Width / Image3.Height 'Это продолговатость "рамки" Image3, принявшей картинку If Image_Factor > Form_Factor Then 'Если картинка продолговатей, чем форма, ТО ... Image3.Width = 0.9 * Forml.Width 'картинка, конечно, должна быть чуть поуже формы (на 1/10) Image3.Left = 0.05 * Forml.Width 'а это для симметричности по горизонтали (на 1/20 от левого края) Image3.Height = Image3.Width / Image_Factor 'А это чтобы не исказились пропорции картинки Image3.Тор = (Forml.Height - Image3.Height) / 2 'А это для симметричности по вертикали Else 'ИНАЧЕ ... Image3.Height = 0.9 * Forml.Height 'Картинка, конечно, должна быть чуть покороче формы (на 1/10) Image3.Top = 0.05 * Forml.Height 'А это для симметричности по вертикали (на 1/20 от верхнего края) Image3.Width = Image3.Height * Image_Factor 'А это чтобы не исказились пропорции картинки Image3.Left = (Forml.Width - Image3.Width) / 2 'А это для симметричности по горизонтали End If Image3.Stretch = True 'А это для того, чтобы картина приняла размеры "рамки" после ее успешных преобразований Image3.Visible = True 'А вот теперь можно полюбоваться картиной End Sub Private Sub Image2_Click() 'ЧТО ДОЛЖНО ПРОИЗОЙТИ ПРИ ЩЕЛЧКЕ МЫШКОЙ ПО "КНОПКЕ" Image2: Image3.Stretch = False Image3.Visible = False Image3.Picture = Image2.Picture Image2.BorderStyle = 1 Form_Factor = Forml.Width / Forml.Height Image_Factor = Image3.Width / Image3.Height If Image_Factor > Form_Factor Then Image3.Width = 0.9 * Forml.Width Image3.Left = 0.05 * Forml.Width Image3.Height = Image3.Width / Image_Factor Image3.Top = (Forml.Height - Image3.Height) / 2 Else Image3.Height = 0.9 * Forml.Height Image3.Top = 0.05 * Forml.Height Image3.Width = Image3.Height * Image_Factor Image3.Left = (Forml.Width - Image3.Width) / 2 End If Image3.Stretch = True Image3.Visible = True End Sub
'красим форму в белый цвет 'голова 'увеличиваем толщину линий и точек ' глаз ' глаз 1400) 'рот 'возвращаем обычную толщину линий и точек 'красный цвет линий и текста 1300) 'нос 1300) 'нос 1300) 'нос 'черный цвет линий и текста 'середина 1830), , В 'рука 1830), , В 'рука Private Sub Commandl_Click() BackColor = vbWhite Circle (3300, 1200), 400 DrawWidth = 5 PSet (3450, 1100) PSet (3150, 1100) Line (3200, 1400)-(3400, DrawWidth = 1 ForeColor = vbRed Line (3300, 1200)-(3300, Line (3300, 1200)-(3050, Line (3300, 1300)-(3050, ForeColor = vbBlack Circle (3300, 2200), 600 Line (3500, 1630)-(4550, Line (2030, 1630)-(3080, FillStyle = vbSolid 'приказ рисовать элементы со сплошной FillColor = vbYellow Line (3000, 300)-(3600, 800), , В FillColor = RGB(220, 220, 220) Circle (3300, 3600), 800 DrawWidth = 3 ForeColor = vbBlue Line (2200, 1300)-(1800, 4400) Font = "Times" Font.Italic = True Font.Bold = True Font.Size = 14 CurrentX = 2700 CurrentY = 3300 Print "Снеговик" CurrentX = 2830 Print "Ефрем" End Sub (vbSolid) заливкой ' желтая заливка ' шапка ' серая заливка 'низ 'увеличиваем толщину линий и точек ' синий цвет линий и текста ' посох 'название шрифта ' курсив ' полужирный 'размер шрифта 'координаты начала печати 62. Dim с As Long, R As Long, G As Long, В As Long Private Sub Commandl_Click() x = InputBox("Введите горизонтальную координату точки") у = InputBox("Введите вертикальную координату точки") с = Point(х, у) 'Определяем код цвета заданной точки R = с Mod 256 'Количество красного BG = с \ 256 'Промежуточный результат G = BG Mod 256 'Количество красного В = BG \ 256 'Количество красного Debug.Print с, R, G, В, "Проверка -"; В * 256 * 256 + G * 256 + R 'Следующие три строки - для проверки на 'глазок правильности определения R,G,B: Circle (х, у), 200 DrawWidth =20
PSet (x, у), RGB(R, G, B) 'Определяем, какого цвета больше - R,G или В: If R > G And R > В Then Debug.Print "Красного больше" Elself G > R And G > В Then Debug.Print "Зеленого больше" Elself В > R And В > G Then Debug.Print "Синего больше" Else Debug.Print "Два самых ярких или три цвета одинаково интенсивны" End If End Sub 63. Программа отличается от той, что в разделе, одним числом: х = х + 120 64 . Программа отличается от предыдущей двумя числами: х = 200 Do Until х > 8000 65. Вместо 100 пишем 200. Dim х As Long, у As Long Private Sub Commandl_Click() x = 100 у = 6000 Do Until x > 9000 PSet (x, y) x = x + 100 у = у - 60 Loop End Sub 67. x = 4000: у = 3000: R = 100 Do Until R > 2500 Circle (x, y), R R = R + 100 Loop 68. Private Sub Command3_Click() BackColor = RGB(0, 0, 150) ForeColor = vbYellow 'Компакт-диск: x = 4000: у = 3000: R = 500 Do Until R > 2500 Circle (x, y), R R = R + 20
Loop 'Летающая тарелка: х = 10000: у = 3000: R = 500 Do Until R > 2500 Circle (x, y), R, , , ,1/2 R = R + 20 Loop End Sub 69. x = 4000: y = 500: R = 0 Do Until R > 2500 Circle (x, y), R, , , ,1/2 R = R + 50 y = y + 150 Loop 70. x = 400: y = 500: R = 0 Do Until R > 1500 Circle (x, y)/ r R = R + 20 y = y + 60 x = x + 120 Loop Y = 0 Do Until y > Height Line (0, у)"(Width, y = y + 200 Loop 72. Private Sub Command2_Click() 'Разлиновываем горизонтальными линиями: y = 0 'Разлиновывать начинаем с верхнего края формы Do Until y > Height 'Разлиновываем до нижнего края формы Line (0, у)-(Width, у)'Линию проводим до правого края формы у = у + 200 'Расстояние между линиями = 200 Loop 'Разлиновываем вертикальными линиями: х = 0 'Разлиновывать начинаем с левого края формы Do Until х > Width 'Разлиновываем до правого края формы Line (х, 0)-(х, Height) 'Линию проводим до нижнего края формы х = х + 200 'Расстояние между линиями = 200 Loop End Sub 'Разлиновывать начинаем с верхнего края формы 'Разлиновываем до нижнего края формы у) 'Линию проводим до правого края формы 'Расстояние между линиями = 200 73. Private Sub Command3_Click() 'Разлиновываем горизонтальными линиями: у = 0 'Разлиновывать начинаем с верхнего края формы
Do Until у > Height 'Разлиновываем до нижнего края формы Line (0, у)-(Width, у) 'Линию проводим до правого края формы у = у + 200 'Расстояние между линиями = 200 Loop 'Разлиновываем косыми линиями: х = 0 'Разлиновывать начинаем с левого края формы Do Until х > Width + 2000 'Разлиновываем до правого края формы с запасом в 2000 Line (х, 0)-(х - 2000, Height) 'Линию проводим наискосок до нижнего края формы х = х + 200 'Расстояние между линиями = 200 Loop End Sub 74 . х = 100 'Квадраты начинаем рисовать от левого края формы Do Until х > 8000 'Рисуем их до координаты 8000 Line (х, 3000)-(х + 1000, 4000), , В 'Ширина квадрата = 1000, высота = 4000-3000 х = х + 1500 'Шаг рисования квадратов = 1500 Loop 75. Dim х As Integer, у As Integer 'Координаты левого верхнего угла каждого из 64 квадратов Dim i As Integer 'i - номер столбца на доске (от 1 до 8 слева направо) Dim j As Integer 'j -номер строки на доске (от 1 до 8 сверху вниз) Private Sub Command2_Click() For j = 1 To 8 'Пробегаем 8 клеток по вертикали сверху вниз For i = 1 То 8 'Пробегаем 8 клеток по горизонтали слева направо х = 1000 * i у = 1000 * j 'ЕСЛИ сумма номеров столбца и строки четная, 'то заливка квадрата синяя, ИНАЧЕ желтая: If (i + j) Mod 2=0 Then Цвет_заливки = vbBlue Else Цвет_заливки = vbYellow Line (x, y)-(x + 1000, у + 1000), Цвет_заливки, BF 'рисуем закрашенный квадрат, Next i Next j End Sub 76. Dim x As Integer, у As Integer 'Координаты центров окружностей Private Sub Commandl_Click() у = 1000 'По вертикали ковер простирается от 1000 до 6000 твипов Do Until у >= 6000 х = 1000 'По горизонтали ковер простирается от 1000 до 8000 твипов Do Until х >= 8000 Circle (х, у), 300 х = х + 150 'Расстояние между центрами окружностей - 150 твипов
Loop у = у + 150 Loop End Sub 77. Вместо строки Circle (x, y), 300 пишем строку If x > 2000 Or y < 5000 Then Circle (x, y), 300 78. Вместо строки Circle (x, y), 300 пишем строку If (x > 2000 Or у < 5000) And Not (x > 4000 And x < 5000 And у > 3000 And < 4000) Then Circle (x, y), 300 которую можно вольно перевести так: ЕСЛИ (это не левый нижний угол) И НЕПРАВДА, что (это квадрат в центре), ТО рисуй кружок 79. Line (2000, 1000)-(6000, 5500), , BF 'Черный прямоугольник окна For i = 1 То 1000 DrawWidth = Round(2 * Rnd) + 1 'Толщина Звезд = 1,2,3 PSet (2000 + 4000 * Rnd, 1000 + 4500 * Rnd), 16777216 * Rnd 'Откуда взялись числа 4000 и 4500? Вот откуда: '4000=6000-2000, 4500=5500-1000 Next 80. For i = 1 То 40 Circle (Width * Rnd, Height * Rnd), 200, , , ,1/2 Next 81. Private Sub Command4_Click() For i = 1 To 150 Circle (Width * Rnd, Height * Rnd), 1000 * Rnd, 16777216 * Rnd Next End Sub 82. BackColor = vbBlack 'Черное небо For i = 1 To 200000 'Большое число - чтобы долго рисовалось. Сам процесс приятен. 'Каждый луч прожектора - отрезок от центральной 'точки формы (Width / 2, Height / 2) 'до случайной (Width * Rnd, Height * Rnd): Line (Width / 2, Height / 2)-(Width * Rnd, Height * Rnd), 16777216 * Rnd Next
83. For i = 1 To 1000 'Левая треть стога имеет горизонтальные координаты от 0 до 2000, 'Значит случайная точка внутри этой части - (2000 * Rnd) 'Правая треть стога имеет горизонтальные координаты от 4000 до 6000, 'Значит случайная точка внутри этой части - (4000 + 2000 * Rnd) 'Поскольку стог сделан из сена, то в его цвете преобладают 'красная и зеленая составляющие, а не синяя Line (2000 * Rnd, 6000 * Rnd)-(4000 + 2000 * Rnd, 6000 * Rnd), RGB(100 + 156 * Rnd, 100 + 156 * Rnd, 40 * Rnd) Next 84 . For i = 1 To 10000 Line (Width * Rnd, Height * Rnd)-(Width * Rnd, Height * Rnd), 16777216 * Rnd, BF For j = 1 To 1000000: Next Next 85. Private Sub Commandl_Click() 'Звездное небо с порцией из 400 звезд BackColor = vbBlack For i = 1 То 400 DrawWidth = 1 + Round(2 * Rnd) PSet (Width * Rnd, Height * Rnd), 16777216 * Rnd Next End Sub Private Sub Command2_Click() 'Летающая тарелка Randomize DrawWidth = 1 'Сначала подбираем случайный радиус внутреннего отверстия тарелки: г0 = 500 * Rnd 'Теперь назначаем случайные координаты тарелки: х = Width * Rnd у = Height * Rnd 'Теперь начинаем рисовать саму тарелку - концентрические эллипсы 'с начальным радиусом г0 и конечным радиусом 4 * г0: г = г0 Do Until г > 4 * r0 Circle (х, y)/ г/ vbYellow, , , 1 / 2 r = r + 15 Loop End Sub 86. Private Sub Form_Load() Звук.DeviceType = "WaveAudio" Звук.FileName = "с:\Windows\Media\Chimes.wav" End Sub Private Sub Музыкальная_вставка()'Это требуемая процедура пользователя Звук.Command = "Open"
Звук.Command = "Sound" Звук.Command = "Close" End Sub Private Sub Commandl_Click() Музыкальная_вставка Picturel.Picture = LoadPicture("c:\temp\Rockies.bmp") End Sub Private Sub Command2_Click() Музыкальная_вставка Picturel.Picture = LoadPicture("c:\temp\Porthole.bmp") End Sub 87. Я, король Франции, спрашиваю вас - кто вы такие? Вот ты - кто такой? Я - Атос А ты, толстяк, кто такой? А я Портос! Я правильно говорю, Арамис? Это так же верно, как то, что я -Арамис! Он не врет, ваше величество! Я Портос, а он Арамис. А ты что отмалчиваешься, усатый? А я все думаю, ваше величество - куда девались подвески королевы? Анна! Иди-ка сюда!!! 88. Private Sub Image1_С1ick() Гот овим_рамку_к_приему_ф ото Image3.Picture = Imagel.Picture Imagel.BorderStyle = 1 Ув eличив аем_рамку_и_показыв аем_ф ото End Sub Private Sub Image2_Click() Гот овим_рамку_к_приему_ф ото Image3.Picture = Image2.Picture Image2.BorderStyle = 1 Ув eличив аем_рамку_и_показыв аем_ф ото End Sub Private Sub Готовим_рамку_к_приему_фото() Image3.Stretch = False Image3.Visible = False End Sub Private Sub Увеличиваем_рамку_и_показываем_фото() Form_Factor = Forml.Width / Forml.Height Image_Factor = Image3.Width / Image3.Height If Image_Factor > Form_Factor Then Image3.Width = 0.9 * Forml.Width Image3.Left = 0.05 * Forml.Width Image3.Height = Image3.Width / Image_Factor Image3.Top = (Forml.Height - Image3.Height) / 2
Else Image3.Height = 0.9 * Forml.Height Image3.Top = 0.05 * Forml.Height Image3.Width = Image3.Height * Image_Factor Image3.Left = (Forml.Width - Image3.Width) / 2 End If Image3.Stretch = True Image3.Visible = True End Sub 90. Dim Otstup As Integer 'Расстояние от края формы до центра окружностей Dim Razmer As Integer 'Радиус самой большой окружности Dim Tsvet As Long Private Sub Рисуем_значок__друга () Otstup = 300 Razmer = 200 Tsvet = vbRed Picturel.Circle (Otstup, Otstup), Picturel.Circle (Otstup, Otstup), Picturel.Circle (Otstup, Otstup), Picturel.Circle (Otstup, Otstup), End Sub Private Sub Command3_Click() Picturel.Picture = LoadPicture("c:\temp\Balloons.bmp") Рисуем_значок_друга Picturel.Print , "12.08.2001" End Sub 91. Private Sub Form_Load() Звук.DeviceType = "WaveAudio" End Sub Private Sub Музыкальная_вставка(Звуковой_файл As String) Звук.FileName = Звуковой_файл Звук.Command = "Open" Звук.Command = "Sound" Звук.Command = "Close" End Sub Private Sub Commandl_Click() Музыкальная_вставка "с:\Windows\Media\Chimes.wav" Picturel.Picture = LoadPicture("c:\temp\Rockies.bmp") End Sub Private Sub Command2_Click() Музыкальная_вставка "с:\Windows\Media\Tada.wav" Picturel.Picture = LoadPicture("c:\temp\Porthole.bmp") End Sub Razmer * 1 Razmer * 2 Razmer * 3 Razmer * 4 / 4, Tsvet / 4, Tsvet / 4, Tsvet / 4, Tsvet
92. Private Sub Command3_Click() Picturel.Picture = LoadPicture("c:\temp\Balloons.bmp") Рисуем_значок_друга 300, 200, vbRed Picturel.Print , "12.08.2001" End Sub 93. Private Sub Крестик(x As Integer, у As Integer, Размер As Integer) 'Крестик - это 2 пересекающихся отрезка (Line) Line (x, у + Размер / 2)-(x, у - Размер / 2) Line (х + Размер / 2, у) - (х - Размер / 2, у) End Sub Private Sub Треугольник(x As Integer, у As Integer, Размер As Integer) 'Треугольник - это 3 отрезка (Line) с общими концами 'х и у - координаты левого нижнего угла треугольника Line (х, у)-(х + Размер, у) Line (х, у)-(х + Размер / 2, у - Размер) Line (х + Размер, у)-(х + Размер / 2, у - Размер) End Sub Private Sub Commandl_Click() Крестик 4000, 2000, 400 Треугольник 3000, 1000, 800 End Sub 94 . Dim a As Integer, b As Integer Private Sub Рисуем_среЗ(Выбор_цвета As Integer, Насыщенность As Integer) Размер = 40 'Это длина стороны квадратика For j = 0 То 255 'Внешний цикл - рисует строки квадратиков по вертикали сверху вниз у = j * Размер 'Вертикальная координата строки квадратиков For i = 0 То 255 'Внутренний цикл - рисует квадратики по горизонтали слева направо х = i * Размер 'Горизонтальная координата квадратика Select Case Выбор_цвета Case 1 Line (х, у)-(х + Размер, у + Размер), RGB(Насыщенность, i, j), BF 'квадратик Case 2 Line (x, у)-(x + Размер, у + Размер), RGB(i, Насыщенность , j), BF 'квадратик Private Sub Рисуем_значок_друга(Otstup As Integer, Razmer As Integer, Tsvet As Long) Picturel.Circle (Otstup, Otstup), Razmer * 1 / 4, Tsvet Picturel.Circle (Otstup, Otstup), Razmer * 2 / 4, Tsvet Picturel.Circle (Otstup, Otstup), Razmer * 3 / 4, Tsvet Picturel.Circle (Otstup, Otstup), Razmer * 4 / 4, Tsvet End Sub
Case 3 Line (x, у)-(x + Размер, у + Размер), RGB(i, j, Насыщенность) , BF 'квадратик End Select Next i Next j End Sub Private Sub Commandl_Click() a = InputBox("Введите число 1, 2 или 3. Если фиксированный цвет красный, то 1, если зеленый - 2, синий -3") b = InputBox("Введите насыщенность фиксированного цвета - число от 0 до 255") Рисуем_срез а, b End Sub а и b - неудачные имена, так как не говорят о смысле переменных. В будущем вы увидите, что можно было бы использовать уже применяющиеся имена - Выбор цвета и Насыщенность. 95. Private Sub Commandl_Click() Debug.Print DateAdd("ww", 52, Date) End Sub 96. Private Sub Command2_Click() Дата_рождения = InputBox("Введите дату своего рождения") Debug.Print DateDiff("s", Дата_рождения, Now) End Sub 97. Private Sub Command3_Click() Дата_рождения = InputBox("Введите дату своего рождения") 'Переменная Сколько_мне_лет не совсем точно соответствует общепринятому смыслу. 'Это разность между текущим годом и годом рождения. Сколько_мне_лет = DateDiff("уууу", Дата_рождения, Date) День_рождения_в_этом_году = DateAdd("уууу", Сколько_мне_лет, Да- та_рождения) День_рождения_в_следующем_году = DateAdd("уууу", Сколько_мне_лет + 1, Дата_рождения) If День_рождения_в_этом_году >= Date Then 'Если день рождения позже сегодняшнего числа Сколько_дней_осталось = День_рождения_в_этом_году - Date Else Сколько_дней_осталось = День_рождения_в_следующем_году - Date End If Debug.Print Сколько_дней_осталось End Sub 98. Private Sub Command4 Click()
Текущая_дата = #1/1/1920# Do Until Текущая_дата > #1/1/2940# Дата_через_год = DateAdd("YYYY"/ 1/ Текущая_дата) Число_дней_в_году = DateDiff("у", Текущая_дата, Дата_через_год) Год = DatePart("уууу", Текущая_дата) If (Число_дней_в_году = 366) And Not (Год Mod 4=0) Then Debug.Print "Лишний високосный год -"; Год, Число_дней_в_году End If Текущая_дата = Дата_через_год Loop End Sub Эта программа отлавливает лишние високосные года (не кратные 4) между 1920 и 2940 годами. 99. Dim k As Integer Private Sub Form_Load() к = 100 End Sub Private Sub Timerl_Timer() Debug.Print к к = к + 1 If к > 110 Then Timerl.Enabled = False End Sub 100. Dim x As Integer, у As Integer, R As Integer 'Координаты и радиус колес и прямоугольника Dim Цвет_фигуры As Long, Цвет_фона As Long Private Sub Form_Load() x = 1000: у = 1500: R = 200 DrawWidth = 5 'Толщина линии Цвет_окружности = vbBlack Цвет_фона = BackColor End Sub Private Sub Timerl_Timer() Circle (x, y), R, Цвет_фигуры 'Рисуем одно колесо Circle (х + 1000, у), R, Цвет_фигуры 'Рисуем другое колесо Line (х - 300, у)-(х + 1300, у - 400), Цвет_фигуры, В 'Рисуем прямоугольник For i = 1 То 500000: Next 'Пустой цикл Circle (х, у), R, Цвет_фона 'Стираем одно колесо Circle (х + 1000, у), R, Цвет_фона 'Стираем другое колесо Line (х - 300, у)-(х + 1300, у - 400), Цвет фона, В 'Стираем
прямоугольник х = х + 30 'Перемещаемся немного направо End Sub 101. Private Sub Timerl_Timer() Shape1.Top = Shape1.Top - 20 Shape2.Top = Shape2.Top - 20 End Sub 102 . Private Sub Timerl_Timer() Shape1.Top = Shape1.Top + Shape2.Left = Shape2.Left End Sub 104 . Dim Шаг As Integer, x As Integer Private Sub Form_Load() x = Shapel.Left Шаг = 50 End Sub Private Sub Timerl_Timer() x = x + Шаг Shapel.Left = x If x > Width - Shapel.Width Then Шаг = -50 'Если фигура улетела за правый край формы, то лететь обратно If х < 0 Then Шаг = 50 'Если фигура улетела за левый край формы, то лететь обратно End Sub 105. Dim х As Integer, у As Integer, dx As Integer, dy As Integer 'dx - шаг шарика по горизонтали, 'то есть расстояние по горизонтали между двумя последовательными 'положениями шарика. dy - аналогично по вертикали Private Sub Form_Load() Show 'Чтобы форма показалась на экране до рисования стола Line (450, 450)-(6200, 4600), , В 'бортики стола х = Imagel.Left: у = Imagel.Top 'Начальное положение шарика dx = 40: dy = 60 'Направление движения - вправо вниз End Sub Private Sub Timerl_Timer() x = x + dx: у = у + dy 'Двигаем шарик Imagel.Left = x: Imagel.Top = у 'Двигаем шарик If x < 500 Or x > 5900 Then dx = -dx 'Ударившись о левый или правый борт, 'шарик меняет горизонтальную составляющую скорости на противоположную 20 + 20
If у < 500 Or у > 4300 Then dy = -dy 'Ударившись о верхний или нижний борт, 'шарик меняет вертикальную составляющую скорости на противоположную 'Если шарик в левом верхнем углу или в левом нижнем 'или в правом верхнем или в правом нижнем, то останавливай шарик: If (х < 800 And у < 800) Or (х < 800 And у > 4000) _ Or (х > 5600 And у < 800) Or (x > 5600 And у > 4000) Then Timerl.Enabled = False End Sub Dim x As Long, у As Long, xO As Long, yO As Long Dim t As Double, s As Double, h As Double, v As Double Private Sub Form_Load() Timerl.Enabled = False Show AutoRedraw = True Line (200, 400)-(400, 4400), , В 'башня Line (0, 4400)-(6400, 4400) 'Начальные скорость и время Imagel.Left = х0: Imagel.Top = y0 'Начальное положение камня End Sub Private Sub Commandl_Click() 'Бросаем камень Timerl.Enabled = True End Sub Private Sub Timerl_Timer() s = 40 * v * t: h = 40 * (100 - 9.81 * t A 2 / 2) x = xO + Round(s): у = yO + (4000 - Round(h)) 'Координаты камня в полете 106. ' земля xO = 400: 'Координаты верха башни v = 20: уО = 400 t = 0 Imagel.Left = х: PSet (х, у) 'След камня в полете t = t + 0.1 If h < 0 Then Timerl.Enabled False Imagel.Top = у ' E ели камень упал, время останавливается End Sub 108. Private Sub Timerl_Timer() Label1.FontSize : Label1.ForeColor End Sub Label1.FontSize + 1 : Label1.ForeColor + 10
110-111. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then PSet (X, Y) 'Если левая клавиша мыши нажата, то рисуем End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then DrawWidth = DrawWidth + 1 'Если правая клавиша мыши нажата, то увеличиваем толщину линии End Sub 112. 'В режиме проектирования поместим на форму прямоугольник и три круга. 'Назовем круги Красная_лампа, Желтая_лампа, Зеленая_лампа Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyR Красная_лампа.FillColor = vbRed Желтая_лампа.FillColor = vbBlack Зеленая_лампа.FillColor = vbBlack Case vbKeyY Красная_лампа.FillColor = vbBlack Желтая_лампа.FillColor = vbYellow Зеленая_лампа.FillColor = vbBlack Case vbKeyG Красная_лампа.FillColor = vbBlack Желтая_лампа.FillColor = vbBlack Зеленая_лампа.FillColor = vbGreen End Select End Sub 113. ' В режиме проектирования поместим на форму два Image и два таймера. ' Назовем их Самолет, Снаряд, Таймер самолета, Таймер снаряда Private Sub Form_Load() Таймер_снаряда.Enabled = False End Sub Private Sub Таймер_самолета_Т1тег() Самолет.Left = Самолет.Left - 20 End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Таймер_снаряда.Enabled = True End Sub Private Sub Таймер_снаряда_Т1тег() Снаряд.Top = Снаряд.Top - 50 End Sub
a(i) = a(i-l) + 4 a(i) = 2 * a(i-l) a(i) = 2 * a(i-l) - 1 116-118. Dim t(l To 7) As Integer Private Sub Commandl_Click() t(l) = 8: t(2) = 14: t(3) = 19: t(4) = 22: t(5) = 25: t(6) = 28: t(7) = 26 'Определим среднегодовую температуру: s = О For i = 1 To 7: s=s+t(i): Next Debug.Print s / 7 'Определим количество теплых дней в году: к = О For i = 1 То 7 If t(i) > 20 Then к = к + 1 Next Debug.Print к 'Определим, каким по порядку идет самый жаркий день Min = t(l): nomer = 1 For i = 2 To 7 If t(i) > Min Then Min = t(i): nomer = i Next Debug.Print nomer End Sub 119. Dim fib(l To 70) As Currency Private Sub Commandl_Click() fib(l) = 1: fib (2) = 1 For i = 3 To 70 fib(i) = fib(i - 2) + fib(i - 1) Debug.Print i, fib(i) Next End Sub 120. Dim t(l To 3, 1 To 4) As Integer Private Sub Commandl_Click() t(l, 1) = -8: t(l, 2) = -14: t(2, 1) = 25: t(2, 2) = 28: t(3, 1) = 11: t(3, 2) = 18: Min = t(l, 1): Max = t(l, 1) For i = 1 To 3 For j = 1 To 4 If t(i, j) > Max Then Max If t(i, j) < Min Then Min Next j Next i Debug.Print Max - Min t(l, 3) = -19: t(2, 3) = 26: t(3, 3) = 20: t(i, t(i, j) j) t(l, 4) = -18 t(2, 4) = 20 t(3, 4) = 25
End Sub 123. Private Sub Form_Load() ЬаЬе1_Минимальная.Caption = HScrolll.Min ЬаЬе1_Максимальная.Caption = HScrolll.Max ЬаЬе1_Текущая.Caption = HScrolll.Value End Sub Private Sub HScrolll_Change() ЬаЬе1_Текущая.Caption = HScrolll.Value End Sub 123-1. Private Sub Combo1_C1ick() Combo2.Text = Combo2.List(Combo1.Listlndex) End Sub 124 . Я 125. Private Sub Commandl_Click() s = "Корова" Debug.Print Mid(s, 1,2) + + "быр" End Sub Private Sub Command2_Click() 'Шифруем произвольное слово s = "Консенсус" For i = 1 To Len(s) \ 2 'Len(s) \ 2 - это число полных пар букв в слове Debug.Print Mid(s, 2 * i - 1, 2) + "быр"; 'Печатаем очередную пару букв и "быр" Next 'Допечатываем последнюю нечетную букву, если она есть: If Len(s) Mod 2=1 Then Debug.Print Right(s, 1) End Sub 126. Dim s As String 'Исходная строка Dim si As String 'Результирующая строка Private Sub Commandl_Click() s = "Консенсус" si = "" 'Результирующую строку строим с нуля For i = 1 То Len(s) 'Просматриваем исходную строку слева направо Старый_символ = Mid(s, i, 1) 'Выделяем очередной символ в исходной строке If Старый_символ = "я" Then 'Букву я кодируем в букву а: Новый_символ = "а" Else 'остальные буквы кодируем, как задано в задаче: 'Шифруем слово из 6 букв "быр" + Mid(s, 3, 2) + "быр" + Mid(s, 5, 2)
Новый_символ = Chr(Asc(Старый_символ) + 1) End If si = si + Новый_символ 'Наращиваем результирующую строку на очередной символ Next Debug.Print si 'Печатаем результат End Sub 127 . Dim SecretNumber As Long 'Загаданное компьютером число Dim A As Long 'Число - попытка человека Dim Сообщение As String Dim Количество_попыток As Integer Private Sub Form_Load() Выбор = MsgBox("Продолжим старую игру?", vbQuestion + vbYesNo) If Выбор = vbYes Then Загружаем_сохраненную_игру Else Настраива- ем_новую_игру End Sub Private Sub Настраиваем_новую_игру() Randomize SecretNumber = Round(1000000000 * Rnd) 'Компьютер Загадывает число txtNumber.Text = 0 'Текстовое поле для ввода человеком числа txtMessage.Text = "Попыток не было" 'Текстовое поле для вывода компьютером сообщений Количество_попыток = 0 txtNumberTry.Text = Количество_попыток 'Текстовое поле для вывода количества попыток Open App.Path & "\Данные.txt" For Output As #1 'Открыть для записи под номером 1 файл Данные.txt из папки проекта Write #1, SecretNumber 'Запись в файл загаданного числа End Sub Sub cmdTry_Cli ck() 'Нажатие на кнопку попытки А = Val(txtNumber.Text) If A > SecretNumber Then 'В этом операторе If вся несложная логика игры Сообщение = "Много" Elself А < SecretNumber Then Сообщение = "Мало" Else Сообщение = "Вы угадали" End If txtMessage.Text = Сообщение Количество_попыток = Количество_попыток + 1 txtNumberTry.Text = Количество_попыток Write #1, Количество_попыток; А; Сообщение 'Запись в файл данных очередной попытки End Sub
Private Sub Загружаем_сохраненную_игру() Open App.Path & "\Данные.txt" For Input As #1 'Открыть для чтения под номером 1 файл Данные.txt из папки проекта Input #1, SecretNumber 'Чтение из файла загаданного числа Show 'Чтобы на форме можно было печатать историю игры Print "ИСТОРИЯ ИГРЫ" Do While Not E0F(1) 'Выполняй, пока НЕ наступил КОНЕЦ ФАЙЛА 1 Input #1, Количество_попыток, А, Сообщение 'Чтение из файла данных очередной попытки Print Количество_попыток, А, Сообщение 'Печать на форме истории угадываний Loop Close #1 'Закрыть файл №1 txtNumber.Text = А txtMessage.Text = Сообщение txtNumberTry.Text = Количество_попыток Open App.Path & "\Данные.txt" For Append As #1 'Открыть для дозаписи под номером 1 файл Данные.txt из папки проекта End Sub Private Sub Form_Terminate() Close #1 'Закрыть файл №1 End Sub 128. 'Вариант с использованием массива: Private Function Fibonacci(Nomer As Integer) As Currency Dim fib(l To 70) As Currency fib(l) = 1: fib (2) = 1 For i = 3 To Nomer: fib(i) = fib(i - 2) + fib(i - 1): Next Fibonacci = fib(i - 1) 'Потому i - 1, что на выходе из цикла i равно Nomer + 1 End Function 'Вариант без использования массива: Private Function Fibonacci1(Nomer As Integer) As Currency fibl = 1: fib2 = 1 For i = 3 To Nomer fib3 = fibl + fib2 fibl = fib2 fib2 = fib3 Next Fibonacci1 = fib3 End Function Private Sub Commandl_Click() Debug.Print Fibonacci(68), Fibonacci1(68) End Sub
129. 130. Dim A(l To 366) As Integer 'Показания термометра на станции А Dim В(1 То 366) As Integer 'Показания термометра на станции В Private Sub Исправление(ByVal Поправка As Integer, ByRef с) For i = 1 To 4 'Для отладки приняли, что в году 4 дня. c(i) = c(i) + Поправка Next End Sub Private Sub Commandl_Click() A(l) = 24: A(2) = 25: A(3) = 28: A(4) = 25 B(l) = 14: B(2) = 16: B(3) = 14: B(4) = 17 Исправление -2, A Исправление 3, В For i = 1 To 4 'Распечатываем исправленные значения температур Debug.Print A(i), B(i) Next End Sub 131. Private Function fib(N As Integer) As Currency If N = 1 Or N = 2 Then fib = 1 Else fib = fib(N - 2) + fib(N - 1) Dim a(l To 5) As Integer 'Оценки одного класса Dim b(l To 5) As Integer 'Оценки другого класса Private Function Минимум(с As Variant) As Integer Минимум = с(1) For i = 2 To 5 If с(i) < Минимум Then Минимум = с(i) Next End Function Private Function Максимум(с As Variant) As Integer Максимум = с(1) For i = 2 To 5 If c(i) > Максимум Then Максимум = c(i) Next End Function Private Function Разница(с As Variant) As Integer Разница = Максимум(с) - Минимум(с) End Function Private Sub Commandl_Click() a(l) = 4: a(2) = 5: a(3) = 2: a(4) = 5: a(5) = 4 b(l) = 4: b(2) = 3: b(3) = 4: b(4) = 4: b(5) = 3 If Разница(a) < Разница(b) Then Debug.Print "Первый класс учится ровнее" Else Debug.Print "Второй класс учится ровнее" End Sub
' Изумительная лаконичность! End Function 'За изумительную лаконичность расплачиваемся удручающе 'низким быстродействием. 'Когда N переваливает за пару десятков, результата приходится ждать. 'Ничего подобного не было при вычислении чисел Фибоначчи простым циклом. 'Почему так? А попробуйте подсчитать, сколько в 'памяти компьютера одновременно 'находится недовыполненных экземпляров подсчета функции fib. Private Sub Commandl_Click() Debug.Print fib(20) End Sub 132 . 'Используем метод пузырька. У нас уже имеется 'соответствующая программа для одномерного массива. 'Однако, просто так, в лоб, переделать ее для двумерного 'массива затруднительно. Чтобы не ломать 'уже готовую структуру процедуры метода пузырька, 'вообразим, что мы работаем не с двумерным массивом, 'а с одномерным, получившимся считыванием двумерного 'строчка за строчкой. Далее. Все, что делает метод 'пузырька - это берет элемент одномерного массива 'с указанным номером и ставит его на новое место 'с указанным номером. Поэтому для правильной работы 'метода нам достаточно написать функцию "Возьми", 'которая по указанному номеру воображаемого одномерного 'массива вычисляет номер строки и столбца 'реального двумерного массива и берет оттуда элемент, 'а также процедуру "Положи", которая путем таких же 'вычислений кладет элемент не на воображаемое место, а на реальное. Const М = 3 'М - число строк в массиве Const N = 4 'N - число столбцов Dim а(1 То М, 1 То N) As Integer 'Исходный массив Private Function Возьми(ByVal Номер As Integer) As Integer ' "Номер" - воображаемый номер элемента i = (Номер + N - 1) \ N 'вычисляется номер строки j = Номер Mod N 'вычисляется номер столбца If j = 0 Then j = N Возьми = a(i, j) End Function Private Sub Положи(ByVal Номер As Integer, ByVal Элемент As Integer) ' "Элемент" - это то, что мы кладем на место, 'указанное воображаемым номером "Номер" i = (Номер + N - 1) \ N
j = Номер Mod N If j = 0 Then j = N a(i, j) = Элемент End Sub Private Sub Сортируемо 'Сортировка массива методом пузырька. 'Сравните с ранее написанной процедурой For k = М * N То 2 Step -1 For i = 1 То к - 1 If Возьми(i) > Возьми(i + 1) Then с = Возьми(i) Положи i, Возьми(i + 1) Положи i + 1, с End If Next i Next к End Sub Private Sub Commandl Click() a(l, 1) = a(2, 1) = a(3, 1) = Сортируем For i = 1 Debug. For j 28 29 45 To M Print = 1 To all, a(2, a(3, N 2) = 2) = 2) = 14 28 15 a(l, a(2, a(3, 3) = 3) = 3) = 49 36 20 a(l, a(2, a(3, 4) 4) 4) 'Распечатываем массив после сортировки Debug.Print a(i, j) Next End Next Sub
Дискуссии НЕ ПРОСТО БЕСПЛАТНО Кевин Келли Интернет - это машина для изготовления копий. На его самом нижнем уровне происходит копирование каждого действия, каждого символа, каждой нашей мысли. Когда сообщение доставляется из одного конца интернета в другой, по пути оно несколько раз копируется целиком согласно коммуникационному протоколу. Оборудование для бесперебойного копирования приносит ИТ-компаниям немалые деньги. Каждый бит на любом компьютере куда-нибудь копируется. Вся цифровая экономика приводится в движение бесконечным потоком копий. И в отличие от продукции, сходившей с конвейеров в индустриальную эпоху, они не просто дёшевы - они бесплатны. Наши электронные сети связи были сконструированы таким образом, чтобы поток копий встречал на своём пути как можно меньшее сопротивление. В результате копии распространяются настолько легко, что мы можем считать интернет сверхэффективной системой передачи, в которой однажды созданная копия продолжает распространяться вечно, подобно току в сверхпроводящем кабеле. Мы не раз ви-
дели, как это происходит. Если что-то поддаётся копированию, то попав в интернет , оно там и останется. Эта сверхэффективная система передачи стала основой американской экономики и достатка. На мгновенной дупликации данных, идей и записей держатся все основные секторы экономики, особенно те из них, которые связаны с экспортом - то есть именно те отрасли, в которых США имеет конкурентное преимущество. Достаток страны опирается на гигантскую машину, которая копирует всё без разбора и отдыха. Однако в прошлом дела обстояли иначе, и доход приносила продажа ценных копий. Свободное распространение бесплатных копий подрывает устоявшийся порядок. Как жить, если лучшие результаты наших усилий настолько легко воспроизвести? Где брать деньги, если всё, что есть на продажу - это даровые копии? У меня есть ответ. Вот его краткий вариант: Когда копии сверхдоступны, они лишены ценности. Когда копии сверхдоступны, в дефиците вещи, которые невозможно скопировать. Когда копии бесплатны, зарабатывать нужно на том, что не поддаётся копированию. Но что же нельзя скопировать? Если множество качеств, которые не копируются. Подумайте, например, о "доверии". Доверие нельзя скопировать. Его нельзя купить за деньги. Доверие зарабатывают со временем. Его нельзя скачать. Или изобразить. Или подделать (во всяком случае, надолго). При прочих равных, всегда лучше иметь дело с тем, кому доверяешь. Выходит, что доверие - это нечто, сохраняющее ценность и в мире, тонущем в копиях. Есть несколько похожих на доверие свойств, которые трудно скопировать, и это увеличивает их важность в сетевой экономике. Полагаю, что их лучше рассматривать не с точки зрения производителя, распространителя или творца, а с точки зрения потребителя. Начать можно с простого вопроса, который мог бы задать потребитель: почему я вообще должен платить за вещи, которые можно получить даром? Когда кто-то платит за нечто, доступное бесплатно, что именно он покупает? Я выделяю восемь основных категорий нематериальных ценностей, которые мы приобретаем, когда платим за то, что могли бы получить даром. Это и есть то самое, что делает вещи не просто бесплатными - в самом прямом смысле. Восемь качеств, которые нельзя скопировать. Я зову их генеративами. Их невозможно скопировать, клонировать, подделать или воспроизвести. Каждое из них генерируется в единственном экземпляре, в данном месте и в данное время. Они придают ценность бесплатным копиям и таким образом генерируют нечто, что может быть продано. Восемь генеративов Скорость. Рано или поздно отыщется бесплатная копия чего угодно, но это не значит, что копия, которая окажется у вас в руках сразу после публикации (или, ещё лучше, изготовления), тоже ничего не стоит. Совсем наоборот. Многие
ходят в кинотеатры для того, чтобы увидеть фильм в день премьеры и тратят на билет хорошие деньги, хотя тот же фильм потом можно бесплатно скачать или взять напрокат за копейки. Первое издание книги дороже не из-за его твёрдой обложки, а из-за того, что оно первое. За приоритетный доступ нередко приходится платить. Если рассматривать скорость как продающее свойство, то у неё обнаруживается множество уровней, включая, например, доступ к предварительным версиям, при котором поклонники сами вовлекаются в процесс создания. Предварительные версии, как правило, обесцениваются из-за своей неполноты, но они, тем не менее, обладают генеративными качествами, способными привести к продаже. Скорость относительна, и именно это делает её генеративом. Она должна соответствовать продукту и аудитории. Для блогов время идёт не так, как для фильмов, а блоги и фильмы, в свою очередь, отличаются с этой точки зрения от автомобилей. И всё же скорость может быть использована в каждом случае. Персонализация. Обычная запись концерта, возможно, действительно ничего не стоит, но за копию, переработанную таким образом, чтобы звучание было идеальным именно в вашей гостиной, некоторые готовы дорого заплатить. Издательства могут перерабатывать бесплатные копии книг специально для вас в соответствии с тем, что вы читали до этого. Бесплатная копия фильма может быть перемонтирована именно для вас (например, персональная версия фильма без насилия, но с нецензурной бранью). Обычный аспирин бесплатен, но аспирин, изготовленный с учётом особенностей вашей ДНК, стоит очень дорого. Как многие отмечали, персонализация требует непрерывного диалога между создателями и потребителями, музыкантами и поклонниками, производителем и пользователем. Она требует времени и множества итераций и потому по самой своей сути обладает генеративным качеством. Нельзя скопировать персонализацию, в которой заключены отношения между производителем и потребителем. Торговцы зовут это "липкостью" (stickiness), потому что обе стороны в этих отношениях не склонны бросать созданное после всех усилий, которые были в него вложено, чтобы начать работу с нуля. Интерпретация. Как говорилось в старом анекдоте: программа? Бесплатно! Инструкция? Десять тысяч долларов. Несколько известных компаний, в числе которых Red Hat и Apache, зарабатывают на жизнь именно этим. Они предоставляют платную техподдержку для свободного программного обеспечения. Копия кода, представляющая собой лишь биты, бесплатна, и становится ценной только посредством поддержки и консультаций. В данный момент получить копию своего генетического кода очень дорого, но ситуация скоро изменится. На самом деле, в будущем фармацевтические компании будут сами ПЛАТИТЬ только За то, чтобы узнать вашу ДНК. Но хотя её копия станет бесплатна, интерпретация значения скрытой в ней информации и консультации о способе применения этой информации - то есть, по сути, инструкция к вашим собственным генам - будут недёшевы. Подлинность. Возможно, вам удастся добыть все ключевые программы бесплатно, но даже если вам не нужны инструкции, гарантия надёжности и отсутствия в них ошибок не помешает. Вы заплатите за аутентичность.
От группы Grateful Dead осталось едва ли не бесконечное количество концертных записей. Приобретение аутентичной версии у самих музыкантов гарантирует, что это та самая запись, которая нужна. Или хотя бы то, что она и в самом деле является записью Grateful Dead. Художники давным давно столкнулись с этой проблемой. Репродукции, изготавливаемые с помощью фотографии или литографии, зачастую снабжаются гарантией подлинности - подписью самого художника. Подписанная копия стоит уже дороже. Цифровые водяные знаки и другие подобные технологии не могут защитить произведение от копирования (не забывайте, что копии отличаются сверхтекучестью) , но они придают ему генеративное качество подлинности, которое кое-кого волнует. Простота. От имущества часто сплошная морока. Нужно следить за порядком, обновлять, а в случае с электронными материалами ещё и делать резервные копии. А в этом мобильном мире приходится всё своё носить с собой. Многие, включая и меня самого, были бы только рады свалить такие заботы на кого-то другого путём подписки. Мы бы платили какому-нибудь Всемирному байтохранили- щу, откуда по запросу можно получить любые музыкальные записи в мире там и тогда, когда они нам понадобятся, так же как и любые фильмы или фотографии (наши собственные или других фотографов). Аналогично и с книгами или блогами. Тогда мы сможем поглощать их откуда угодно с наших мобильных телефонов или КПК, с ноутбуков или больших экранов, а о бэкапах и гонорарах авторам пусть думает кто-то другой. Тот факт, что почти любой контент доступен бесплатно для тех, кто готов самостоятельно копаться в нём, сохранять его, пополнять и упорядочивать, со временем станет казаться всё менее и менее привлекательным. Материальность. Электронные копии по определению нематериальны. Можно воспроизвести на своём мониторе бесплатную копию фильма, но что, если хочется посмотреть его в высоком разрешении на гигантском экране? Или, скажем, в сте- реоформате? Текст в PDF всем хорош, но порой всё же хочется ощутить в руках кожаный переплёт с мягкими белыми страницами. Это приятно. А как насчёт вашей любимой (и бесплатной) игры в компании с 35 другими игроками в том же месте? Материальность может принимать бесконечное множество форм. Разумеется, когда-нибудь за высоким разрешением не нужно будет отправляться в кинотеатр, но к тому времени наверняка изобретут какие-нибудь новые технологии воспроизведения, которые будут безумно хороши, но недоступны простому потребителю. Лазерная проекция, стереодисплеи, да что там - настоящее голо- графическое видео! Но ничто не бывает настолько же материальным, как музыка на живом концерте. Музыка бесплатна, материальное присутствие стоит денег. Эта формула быстро превращается в аксиому не только для музыкантов, но и для любых авторов. Книга бесплатна, но выступление писателя стоит денег. Попечительство. Я убеждён, что публика ХОЧЕТ платить творцам. Поклонники рады дарить художникам, музыкантам и писателям знаки своей признательности, потому что это делает их ближе к ним. Но они станут платить лишь в том случае , если это очень просто сделать, сумма разумна, а деньги пойдут напрямую творцу.
Недавний нашумевший эксперимент группы Radiohead, когда музыканты позволили фэнам самим устанавливать цену, которую они готовы заплатить за бесплатную копию музыки, - это прекрасная иллюстрация силы патронажа. Тонкая связь между благодарными поклонниками и художником кое-чего стоит. В случае Radiohead её цена известна: около пяти долларов за скачанную копию. Нетрудно вспомнить и множество других случаев, когда публика платила только потому, что это ей нравилось. Обнаружимость. Если другие генеративы заключены в самом произведении, то обнаружимость располагается на более высоком уровне, где агрегируется множество работ. Нулевая цена не помогает привлечь внимание, а порой даже делает произведение менее заметным; а ведь ненайденные шедевры ничего не стоят. Когда внимания к себе требуют миллионы книг, миллионы фильмов и миллионы приложений - и большая часть из них бесплатна, - возможность быть найденным оказывается очень ценной. Гигантские агрегаторы вроде Amazon и Netflix зарабатывают отчасти как раз на том, что помогают публике находить произведения, которые ей нравятся. Они несут благую весть "длинного хвоста", феномена, который, как известно, возникает, когда нишевая аудитория получает доступ к нишевой продукции. Но длинный хвост, к сожалению, хорош только для гигантских агрегаторов и крупных агрега- торов среднего уровня, таких как издатели, студии и лейблы, а создателей контента он не очень греет. И всё же создатели нуждаются в агрегаторах, поскольку обнаружимость в действительности происходит лишь на более высоком уровне. Вот почему издатели, студии и лейблы (ИСЛ) никогда не исчезнут. Они не нужны для распределения копий (интернет вполне справляется с этим), но необходимы для распределения внимания. В целом океане возможностей ИСЛ отыскивают, выхаживают и дистиллируют работы творцов, которые, по их мнению, привлекут поклонников. Иные посредники, такие как критики и обозреватели, также влияют на потоки внимания. Поклонники полагаются на многоуровневый поисковый аппарат, чтобы обнаруживать стоящие произведения из биллионов созданных. На поиске талантов можно делать деньги. Много лет американское издание TV Guide ("Телегид") зарабатывало больше, чем три обозреваемые им крупнейшие телеканала вместе взятые. Журнал указывал зрителям хорошие программы, которые можно увидеть по телевизору на этой неделе. Программы, которые ничего не стоили и были бесплатны для зрителей. Вряд ли могут быть сомнения, что в мире бесплатности деньги будут делать не только мегаагрегаторы, но и множество ИСЛ, торгующих обнаружимостью и другими генеративными качествами. Эти восемь качеств требуют нового набора умений. Успех в мире бесплатных копий не зависит от умений, связанных с распространением (им теперь занимается Великая копировальная машина). Юридические познания в области авторских прав и интеллектуальной собственности уже не особо полезны. Или способности, связанные с дефицитом. Восемь новых генеративов требуют понимания, как избыток поощряет дарение, как щедрость может быть бизнес-моделью, как важно стало культивировать качества, которые нельзя продублировать одним кликом мыши. Одним словом, деньги в сетевой экономике не следуют за копиями. Они следуют за вниманием, а у внимания - собственные пути.
Внимательные читатели заметят бросающееся в глаза упущение. Я ни слова не сказал о рекламе. Рекламу часто считают решением парадокса бесплатности - едва ли не единственным существующим. Большая часть известных мне предложений о том, как обойтись с бесплатностью, подразумевают использование рекламы. Но по-моему реклама - это лишь один из путей, по которому может распространяться внимание, и в долгосрочной перспективе - лишь один из способов извлечения денег из бесплатного продукта. Но это уже другая история. Под пузырящимся слоем рекламы эти восемь качеств будут порождать повсеместные бесплатные копии и придавать им ценность, которую стоит рекламировать. Генеративы применимы к любым электронным копиям, а кроме того, и к множеству виду копий, стоимость которых стремится к нулю. Даже в традиционных отраслях обнаруживают, что когда стоимость копирования приближается к нулю, материальные копии начинают вести себя подобно цифровым. Карты только что преодолели этот рубеж. Генетика приближается к нему. Гаджеты и мелкие устройства (например, сотовые телефоны) катятся в том же направлении. Фармацевтика давно там, но очень надеется, что никто не заметит. Производство таблетки ничего не стоит. Мы платим за "подлинность" и "скорость", а когда-нибудь станем платить за "персонализацию". Поддерживать генеративы куда сложнее, чем штамповать копии на фабрике. Ещё многому предстоит научиться. Во многом разобраться. Напишите, если вам это удалось.
Дискуссии ОБОБЩЕСТВЛЕННЫЕ ИСТИНЫ Михаил Ваннах "Это верно, что в руках (у товарища Берии) дирижерская палочка. Прекрасно, но ученый все же должен играть первую скрипку, потому что скрипка его задает тон всему оркестру. Главный недостаток товарища Берии в том, что дирижер должен не только размахивать палочкой, но и понимать что к чему. Именно этого Берии не хватает". П. Л. Капица, письмо И. В. Сталину от 25 ноября 1945 года Время универсалов Вот слепой Гомер. Вот "Одиссея". Вот и сам благородный царь Итаки, странствующий по свету после разрушения святого Илиона. А вот далеко не полный перечень знаний и умений сына Лаэрта: "Начал рубить он деревья и скоро закончил работу; Двадцать он бревен срубил, их очистил, их острою медью
Выскоблил гладко, потом уравнял, по снуру обтесавши. Тою порою Калипсо к нему с буравом возвратилась. Начал буравить он брусья и, все пробуравив, сплотил их, Длинными болтами сшив и большими просунув шипами; Дно ж на плоту он такое широкое сделал, какое Муж в корабельном художестве опытный, строит на прочном Судне..." То есть глава государства владеет и навыками лесоруба, и корабельного плотника , и - даже! - опытного судостроителя, сведущего в корабельной архитектуре. А прекрасная нимфа Калипсо не брезгует подсобными работами, поднося Одиссею инструмент. И поскольку - "Радостно парус напряг Одиссей и, попутному ветру Вверившись, поплыл. Сидя на корме и могучей рукою Руль обращая, он бодрствовал; сон на его не спускался Очи, и их не спускал он с Плеяд, с нисходящего поздно В море Воота, с Медведицы, в людях еще Колесницы Имя носящей и близ Ориона свершающей вечно Круг свой, себя никогда не купая в водах океана". Мы вынуждены признать, что отец Телемаха владел еще и навыками судоводителя и был сведущ в мореходной астрономии. А также в метеорологии и гидрографии: "Разом и Евр, и полуденный Нот, и Зефир, и могучий, Светлым рожденный Эфиром, Борей взволновали пучину..." А еще владел муж Пенелопы навыками слова, умея внятно поведать феакам о своих необычных приключениях, был сведущ в олимпийской теологии и ахейской генеалогии, этикете и дипломатии, маскировке, сборе информации, тактике и баллистике смертоносных стрел. (Об изготовлении и украшении собственного ложа можно и умолчать, равно как и о познаниях в животноводстве...) То есть практически весь перечень знаний и технологий, характерных в тот момент для Средиземноморской цивилизации, вполне умещался в голове одного человека. Да еще и государственного руководителя, что само по себе примечательно и неординарно с точки зрения нас сегодняшних... Много позже, на рассвете европейской науки, ум ученого тоже мог вместить практически все ее ветви и отрасли. Так было долго - от Аристотеля до "Аристотеля XIX столетия" - Александра-Фридриха-Вильгельма фон Гумбольдта (Humboldt, 1769-1859). Древние языки, археология, ботаника, горное дело, животное электричество, то есть прохождение сигналов по нервам, вулканология - в этих науках он не просто блистал, он порой создавал их, опережая современников на десятилетия. Его путешествия привели ко Второму, или же подлинному, НАУЧНОМУ, открытию Америки. В 1829 году по просьбе российского правительства, выделившего на это 3200 червонцев, Гумбольдт путешествует по Уралу, Сибири, Каспию. А венчает его
труды и жизнь пятитомный (последний том не Завершен) "Космос", вышедший в 1845-1857 гг. и переведенный на многие европейские языки. Уникальный свод научных знаний середины XIX столетия, составленный крупнейшим ученым, сведущим почти во всех из них. Впрочем, чему удивляться - это было время универсалов... Век специалистов К веку двадцатому сумма знаний, накопленных человечеством, превысила возможности даже самого выдающегося ума. Отдельные отрасли, скажем физика, казались еще вполне обозримыми и даже завершенными, но... заблуждение развеялось быстро - даже у Эйнштейна были весьма непростые отношения с квантовой механикой. А "Техническая энциклопедия", выходившая в СССР в 1927-1936 годах, - это уникальный памятник эпохи, когда всякий раздел технологии был доступен практически любому инженеру. Уже через десяток лет дифференциация знаний, сопровождающая их накопление, сделала это невозможным. Некоторая осведомленность об успехах смежных наук, достигаемая в результате даже самого усердного чтения литературы, не более чем иллюзия. Парадигмы наук, их методы (ведь еще Лейбниц говорил, что "есть вещи поважнее самых прекрасных открытий - это знание метода, которым они были сделаны"), остаются вне рассмотрения. На это просто не хватает сил... И вот - Первая мировая. Кстати говоря, бесплатная Вики1, в отличие от Бри- танники, возводит историю Большой науки именно к Первой мировой (Big Science - Wikipedia). "Настоящий Двадцатый Век" - как назвала Анна Ахматова этот небывалый шторм, до основ потрясший мироустройство европейской иудеохристиан- ской цивилизации. И вот тут-то четко прорисовалось появление на исторической сцене социальных и технологических Больших Систем: Большой политики, Большой промышленности, Большой экономики и Большой науки. Политики и дипломаты (Европа тогда была преимущественно монархической) вели привычную Большую Игру. Но только сходились в ней не профессиональные армии королевств и империй, а целые нации. Одетые в хаки, фельдграу, отечественные серые шинели... Причем, как и подобает Большим сущностям, явление Большой науки не заметить было невозможно: во времена Первой мировой Большой наукой была химия. Придуманный Нобелевским лауреатом Фрицем Габером способ производства азотных соединений из атмосферного воздуха в изобилии обеспечил кайзеровскую армию взрывчаткой и порохами (на удобрения ресурсов не хватало - дети в Германии рождались без ногтей...) . Затем тот же Габер предложил использовать хлор для удушения солдат Антанты. И - понеслось... Хлор в смеси с фосгеном. Синильная кислота с треххлористым мышьяком. "Синий крест" - так маркировались германские снаряды со смесью дифенилхлорарсина, который вызывал кашель, заставляя солдат сбрасывать противогазы, и удушающего их фосгена. Затем - германский Lost, бетабеташтрих-дихлордиэтилсульфид, прозванный отведавшими его сполна французами, ипритом; не менее насладившиеся им британцы звали его горчичным газом. США, вступая в войну, срочно создают жуткий Эджвудский арсенал, рассчитывая на запасы которого, Антанта планировала перейти в 1919 году к массовым атакам крупнейших германских городов с использованием ОВ. С другой стороны - противогазы. Противодымные фильтры. Защитная одежда. И - параллельно - краски для флота и лаки для авиации. Это к тому, что у проприетарных источников Знаний в наше время появилась серьезная и бесплатная альтернатива.
А еще - металлургия. Стали и сплавы. И - молниеносное совершенствование авиационной техники. Новые модели "Фок- керов", "Ньюпоров", "Де Хевилендов" появляются каждые три месяца. Не менее стремителен прогресс авиамоторов. И - средств связи. И - наблюдения. И - первых корабельных баллистических вычислителей. Но ни одно средство нападения не превратилось в меч Зигфрида. Ни одно средство защиты не стало щитом Ахилла. Впрочем, сам термин "Большая наука" появился позднее... "Big Science" был впервые употреблен в 1961 в журнале "Science". Тогда Элвин Вайнберг (Alvin Weinberg, 1915-2006), крупный физик, создатель энергетических реакторов большой мощности, и не менее крупный администратор - директор Окриджской Национальной лаборатории, - опубликовал статью "Impact of Large-Scale Science on the United States" ("Влияние крупномасштабной науки на Соединенные Штаты"). По Вайнбергу "классическая" Большая наука началась с проектов, оплаченных в ходе Второй мировой войны правительством Соединенных Штатов. Это проект "Manhattan" и менее известный проект Лаборатории излучений (Radiation Laboratory), центра радарных исследований Массачусетского технологического института. Использование радаров было одной из важнейших причин победы Объединенных наций во Второй мировой, точнее - одним из важнейших путей, по которым реализовывалось экономическое и научное преимущество держав антигитлеровской коалиции. Битва за Англию, разгром фашистского флота у мыса Матапан, охота на надводные рейдеры нацистов - "Бисмарк", "Шарнхорст" (радиолокаторы тогда носили британское прозвище RDF, Radio Direction Finding)... То, что современная эпоха есть эпоха Большой науки, сегодня знают практически все. Даже те, кто ограничивается СМИ общего назначения, слышали кое-что о телескопе Хаббла и о расшифровке человеческого генома. А кто совсем не читает газет и журналов, мог видеть в голливудских лентах радиотелескоп в Аресибо. Не только в "Контакте" по Карлу Сагану, но и в похождениях Бонда, Джеймса Бонда... Как обычно определяют основные признаки Большой науки? • большой бюджет, куда больший, чем могли дать филантропия или даже промышленность ; • большие штаты - количество ученых возрастает такими темпами, что уже создает трудности в управлении такими коллективами2; [Впрочем, задача управления коллективом, занятым в проекте Большой науки, достаточно тривиальна. Тривиальна не в том смысле, что легко решаема, а в том, что на удивление традиционна. И здесь та же неразбериха, та же грызня, игра амбиций и уязвленных честолюбий, склоки, служебные романы. К тому же, если занятый в Большой науке коллектив организован правильно, большую часть его составляет вспомогательный персонал, управление которым неплохо описал Тейлор - отец научной организации труда, систему которого не раз упрекали в бесчеловечности. А научные коллективы, составленные сплошь из научных работников, мы наблюдали на закате СССР. Но об успехах подобных коллективов автор ничего не слышал. Успехи же одиночек, выбравшихся из таких клоак и встро- 2 Например, Национальная лаборатория в Лос-Аламосе, Нью-Мексико, США, основана в 1943 году для режимных работ. Штат - 12500 человек. Занимаемая территория - 5720 га. Бюджет - $2,2 млрд.
ившихся в мировую науку, - это совсем другая история, о человеческой воле и нонконформизме... ] • большие инструменты - первым из них считается циклотрон Эрнста Лоуренса в его Лаборатории излучений; • большие лаборатории. Увеличение размеров и стоимости научных приборов приводит к появлению гигантских лабораторий. Таких как Лоуренсова Национальная лаборатория в Беркли, CERN или Объединенный институт ядерных исследований советской эпохи. То есть все вроде бы так - выбить из государственного бюджета большие деньги, нанять много ученых, купить, а точнее, построить большой (типа ускорителя) научный инструмент. Оформить все это в структуру большой лаборатории, на большом земельном участке и с большим штатом бюрократов, бухгалтерш и охранников, и - новые знания потекут бурным потоком. Или нет?.. Политическая экономия и экономическая политика Вот старое советское определение. Политическая экономия - наука, изучающая общественные отношения, складывающиеся в процессе производства, распределения, обмена и потребления материальных благ, и экономические законы, управляющие их развитием в исторически сменяющих друг друга общественно- экономических формациях. Политическую экономию следует разделять с экономической политикой. Вот, по бессмертным словам бывшего премьера, лапидарное описание экономической политики - "хотели как лучше". А политическая экономия описывает и объясняет, почему же в очередной раз "получилось как всегда". ...Дорогостоящие научные инструменты существовали и ранее. Скажем - телескопы. Когда-то их строили на пожертвования риэлторов и трамвайных магнатов. Но работали на них вполне в классическом стиле. Ведущий исследователь. Ассистент . Несколько дипломников "на подхвате". А исследования Большой науки - это уже совсем иное качество. Их продукт - уже не статья или книга, пусть даже такая, как "Zur Elektrodynamik bewegter Kurper" ("К электродинамике движущихся тел" Эйнштейна) или "On the Origin of Species" ("Происхождение видов" Дарвина). Результаты Большой науки - это отрасли. Не только науки, но и - техники, и - экономики. Большой экономики. Народного, национального, а то и глобального хозяйства. И еще раз вернемся к различию экономической политики и политической экономии. Успешная экономическая политика осуществляется посредством директивных решений. Пусть волевых, но весьма удачных. С точки зрения ограниченного числа изначально сформулированных критериев. Вот советские успехи в создании атомной отрасли. Вот советские космические успехи. Триумф плановой экономики - довольно отсталая страна выходит на самые пере-
довые рубежи технологии. А вот дальше... Нет обратных связей, присущих рынку и гражданскому обществу. Самонастраивающиеся механизмы, описываемые политической экономией, не включаются. Казалось бы, атомная энергетика в СССР - гражданская дочка сталинско- бериевской Бомбы, - возникла и развивалась весьма эффективно. Но вот реакторы "чернобыльского типа" на АЭС были не результатом работы рыночных механизмов, а следствием директивных решений и изначально военного характера атомной отрасли. В результате мы имеем то, что имеем. Правда, изъятие в 1990-е из атомной энергетики не только амортизации основных фондов, но и заметной части зарплаты высококвалифицированного персонала, принесло отрасли ущерб явно не меньший. Зато дало возможность обогатиться многим посредникам... В нарушение ВСЕХ законов политической экономии. Но в соответствии с проводимой экономической политикой. Аналогично - космическая отрасль и экспорт вооружений. Последний хоть и достиг в прошлом году шести миллиардов долларов, дает лишь ничтожную отдачу от средств, истраченных на структурную милитаризацию СССР, в том числе и на советскую Большую науку. В общем, сколько бы ни потратили денег, сколько бы ни наняли персонала, какие бы большие приборы ни построили и какие бы латифундии ни отвели под лаборатории - Большой наукой это станет лишь тогда, когда окажет влияние на экономическую жизнь НАЦИИ В ЦЕЛОМ, а не на благосостояние отдельных ученых, чиновников , а главное - поставщиков оборудования и строительных подрядчиков вкупе с теми, кто получит "откаты". Поэтому всегда важно знать, как Большая наука, ее результаты, успехи и провалы влияют на общество. Она ведь уже выросла до уровня политэкономии, то есть определяет судьбы ВСЕХ членов общества. На которых незримые манипуляции атомами, битами, а то и квантовыми состояниями могут теперь повлиять гораздо сильнее, чем плотины гидроэлектростанций индустриальной и термоядерные бомбы ранней научной эпох... Это именно тот аспект Большой науки, который больше всего должен интересовать общество, каждого его гражданина. Ведь восполнить дефицит результатов Большой науки невозможно. Они определяют место нации в системе глобальной экономики. Или на вершине, или в... И результаты эти получает не отдельный ученый, обладающий даже самым блестящим разумом, а сложная общественная структура выработки идей, гипотез, их проверки, накопления фактов, хранения и обеспечения доступности для всех. Но при том - структурируемая мыслями кого-то, сочетающего свойства мыслителя и организатора, скорее даже - вождя. И самое главное, что надо понять: Большая наука не есть результат чьих-то субъективных решений. Тогда бы она проходила по ведомству не политэкономии, а экономической политики. Нет, факт ее существования относится к категории необходимого . Вот, к примеру, колхозы, воплощенная мечта о Большом сельском хозяйстве. Дело, разумеется, сугубо добровольное: приезжает уполномоченный и, ласково поглаживая кобуру маузера, специально производимого германской промышленностью для большевиков, этак душевно говорит: "Предлагаю организовать колхоз. Кто против?"
Но тут были возможны варианты. За поворотом дороги - кусты, бузина, винтовочный обрез... А потом через кордон, в Румынию или Маньчжурию. Стараясь не попасться по пути герою-пограничнику Карацупе и его героической собаке с неполиткорректной кличкой Индус. Относительно Большой науки добровольности нет. Ее неизбежность предопределена в случае телескопов - размерами Вселенной, в случае ускорителей - энергией образования искомых частиц. И даже соотношения мировых постоянных, что принято называть "антропологическим парадоксом3", изучение которых - дело, конечно же, добровольное, но абсолютно непосильное отдельным исследователям, делает Большую науку неизбежной. Выбор приоритетов... Вот характерный пример, показывающий, как в Большой науке сплетаются в клубок политика и экономика. Сверхпроводящий суперколлайдер (Superconducting Super Collider), гигантский ускоритель с кольцом 87 км, энергией пучка частиц в 20 ТэВ, должен был открыть человечеству предсказанные Стандартной моделью бозоны Хиггса. Но на память от него остались семнадцать шахт в Техасе, 23,5-км тоннель (привет пирамидам!) да тома парламентских и правительственных бумаг. Дело в том, что Конгресс США в 1987 году оценивал стоимость проекта в $4,4 млрд, но к 1993 году стало ясно, что меньше, чем в $12 млрд. не уложиться. Международная космическая станция требовала финансовых вливаний (российская экономика переживала не лучшие времена), и коллайдеру не повезло. От редакции: Так, что позже пришлось нескольким развитым странам скинутся и построить для тех же целей Большой Адронный Коллайдер. О том, что зто за зверь, читайте нижеследующую статейку взятую с вышеупомянутой Википедии. 3 Знаменитый фактор удивительной пригодности Космоса для развития разумной жизни.
большой адронныи коллаидер Большой адронный коллаидер (англ. Large Hadron Collider, LHC) — ускоритель, предназначенный для разгона протонов и тяжёлых ионов и строящийся в настоящее время в исследовательском центре Европейского совета ядерных исследований CERN (Conseil Europeen pour la Recherche Nucleaire). Одной из основных целей проекта LHC является экспериментальное доказательство существования бозона Хиггса — частицы из Стандартной Модели (СМ) , — а также обнаружение физических явлений вне рамок СМ. Также, планируется исследование свойств W и Z-бозонов, ядерных взаимодействий при сверхвысоких энергиях, процессов рождения и распадов тяжёлых кварков (Ь и t). История строительства Идея проекта Большого адронного коллайдера (БАК) родилась в 1984 году и была официально одобрена десятью годами позже. Его строительство началось в 2001 году, после окончания работы предыдущего большого ускорителя CERN — электрон-позитронного коллайдера LEP (Large Electron-Positron Collider). На БАК предполагается сталкивать протоны с суммарной энергией 14 ТэВ (то есть 14 тераэлектронвольт или 14 -1012 электронвольт) в системе центра масс налетающих частиц, а также ядра свинца с энергией 5,5 ГэВ (5,5-109 электрон- вольт) на каждую пару сталкивающихся нуклонов. БАК строится в туннеле, который прежде занимал LEP. Туннель с длиной окружности 26,7 км проложен на глубине около ста метров под землёй на территории Франции и Швейцарии. Для удержания и коррекции протонных пучков используются 1 624 сверхпроводящих магнита, общая длина которых превышает 22 км. Последний из них был установлен в туннеле 27 ноября 2006 года. Магниты будут работать
при температуре -271 °С. Строительство специальной криогенной линии для охлаждения магнитов закончено 19 ноября 2006 года. Информация о Запуске БАК 8 июля 2008 года, появившаяся на некоторых сайтах, не соответствует действительности. Большинство СМИ ссылались на размещённый в интернете счётчик, источник информации которого неизвестен. На официальном сайте БАК дата запуска коллайдера не указана, однако 8 июля в вечерней программе «Время» на Первом канале была объявлена ориентировочная дата тестового запуска коллайдера — октябрь 2008 года. В официальном коротком техническом отчёте CERN упоминается о том, что не все сектора охлаждены до нужной температуры и что пробная циркуляция пучков начнётся не раньше сентября 2008 года. Первые тестовые столкновения с энергией 900 ГэВ (так называемый Commission Run) должны быть проведены осенью 2008 года. Энергия сталкивающихся пучков во время Commission Run будет в два раза ниже, чем энергия в системе центра масс на коллайдере Tevatron (см. снимок ниже, чтобы представить размеры). В конце 2008 года планируется выход на энергию 7 ТэВ, затем коллайдер закроют на зимний период, в течение которого его постараются оптимизировать. Весной 2009 года ускоритель заработает на полную энергию (14 ТэВ) и будет постепенно повышать светимость. Вид на ускорительный центр Fermilab, США. Теватрон (кольцо на Заднем плане) и кольцо-инжектор. После запуска, БАК будет самым высокоэнергичным ускорителем элементарных частиц в мире, почти на порядок превосходя по энергии своих ближайших конкурентов — протон-антипротонный коллайдер Tevatron, который в настоящее время работает в Национальной ускорительной лаборатории им. Э. Ферми (США), и реля-
тивистский коллаидер тяжёлых ионов RHIC, работающий в Брукхейвенской лаборатории (США) . Технические характеристики Светимость LHC во время Commission Run составит всего 1029 частиц/см2•с. Это весьма скромная величина. Однако, после запуска LHC для экспериментальных исследований светимость будет постепенно повышаться от начальной 5-1032 частиц/см2 • с до номинальной 1,7-1034 частиц/см2•с, что по порядку величины соответствует светимостям современных В-фабрик BaBar (SLAC, США) и Belle (КЕК, Япония). Выход на номинальную светимость планируется в 2010 году. Планируется, что на LHC будут работать четыре детектора: ATLAS (A Toroidal LHC Apparatus), CMS (Compact Muon Solenoid), LHCb (The Large Hadron Collider beauty experiment) и ALICE (A Large Ion Collider Experiment). Установки ATLAS и CMS предназначены для поиска бозона Хиггса и «нестандартной физики». Детектор LHCb оптимизирован под исследования физики b-кварков, а детектор ALICE для поиска кварк-глюонной плазмы или кварк-глюонной жидкости в столкновениях ионов свинца. Россия принимает активное участие как в строительстве LHC, так и в создании всех четырёх детекторов, которые должны работать на коллайдере. Потребление энергии Во время работы коллайдера расчётное потребление энергии комплексом ЦЕРНа составит 180 МВт. Предположительные энергозатраты ЦЕРНа на 2009 год с учётом работающего коллайдера — 1000 ГВт-ч, из которых 700 ГВт-ч придётся на долю ускорителя. Эти энергозатраты — около 10 % от суммарного годового энергопотребления кантона Женева. Сам ЦЕРН не производит энергию, имея лишь резервные дизельные генераторы. Распределённые вычисления Для управления, хранения и обработки данных, которые будут поступать с ускорителя LHC и детекторов, создаётся распределённая вычислительная сеть LCG (LHC Computing GRID), использующая технологию грид. Для определённых вычислительных задач будет задействован проект распределённых вычислений LHC@home.
НЕКОНТРОЛИРУЕМЫЕ ФИЗИЧЕСКИЕ ПРОЦЕССЫ Некоторые специалисты и представители общественности высказывают опасения, что имеется отличная от нуля вероятность выхода проводимых в коллайдере экспериментов из-под контроля и развития цепной реакции, которая при определённых условиях теоретически может уничтожить всю планету. Точка зрения сторонников катастрофических сценариев, связанных с работой LHC, изложена на отдельном сайте http://www.risk-evaluation-forum.org/anonl.htm. Из-за подобных настроений LHC иногда расшифровывают как Last Hadron Collider (Последний Ад- ронный Коллайдер). В этой связи наиболее часто упоминается теоретическая возможность появления в коллайдере микроскопических чёрных дыр, а также теоретическая возможность образования сгустков антиматерии и магнитных монополей с последующей цепной реакцией захвата окружающей материи. Указанные теоретические возможности были рассмотрены специальной группой CERN, подготовившей соответствующий доклад, в котором все подобные опасения признаются необоснованными. Адриан Кент опубликовал научную статью с критикой норм безопасности, которые продвигает CERN, поскольку ожидаемый ущерб (то есть произведение вероятности события на число жертв) является неприемлемым. А именно, при рисках глобальной катастрофы в 1 к 50 миллионам, которая является официальной оценкой CERN, математическое ожидание числа жертв составляет 120 человек, что является неприемлемо высоким по современным нормам безопасности . В качестве основных аргументов в пользу необоснованности катастрофических сценариев приводятся ссылки на то, что Земля, Луна и другие планеты постоянно бомбардируются потоками космических частиц с гораздо более высокими энергиями. Упоминается также успешная работа ранее введённых в строй ускорителей, включая релятивистский коллайдер тяжёлых ионов RHIC в Брукхейвене. Возможность образования микроскопических чёрных дыр не отрицается специалистами CERN, однако, при этом заявляется, что в нашем четырёхмерном пространстве такие объекты могут возникать только при энергиях, на 16 порядков больших энергии пучков LHC. Гипотетически микроскопические чёрные дыры могут появляться в экспериментах на LHC в предсказаниях теорий с дополнительными пространственными измерениями. Такие теории пока не имеют каких-либо экспериментальных подтверждений. Однако, даже если чёрные дыры будут возникать при столкновении частиц на LHC, предполагается, что они будут чрезвычайно неустойчивыми вследствие излучения Хокинга и будут практически мгновенно испаряться в виде обычных частиц. 21 марта 2008 года в федеральный окружной суд Гавайев был подан иск Уолтера Вагнера (англ. Walter L. Wagner) и Луиса Санчо (англ. Luis Sancho), в котором они, обвиняя CERN в попытке устроить конец света, требуют запретить запуск коллайдера до тех пор, пока не будет гарантирована его безопасность. Аргументы в пользу катастрофического сценария По мнению сторонников катастрофического сценария, существует принципиальная разница между бомбардировкой Земли космическими частицами и экспериментами на
ускорителе. В первом случае сталкиваются прилетающие из космоса ультрарелятивистские (летящие со скоростью, близкой к скорости света) элементарные частицы с элементарными частицами на Земле, скорость которых мала. Образующиеся частицы также являются ультрарелятивистскими и улетают в космическое пространство, не успев причинить Земле никакого вреда. В коллайдере же сталкиваются пучки элементарных частиц, летящие с ультрарелятивистскими скоростями в противоположных направлениях. Образующиеся микроскопические чёрные дыры и другие опасные частицы могут вылетать с любыми скоростями. Некоторые из них будут настолько медленными, что не смогут покинуть Землю. Общая теория относительности в виде, предложенном Эйнштейном, не допускает возникновения микроскопических чёрных дыр в коллайдере. Однако они будут возникать , если верны теории с дополнительными пространственными измерениями. По мнению сторонников катастрофического сценария, хотя такие теории и умозрительны, вероятность того, что они верны, составляет десятки процентов. Эффект Хокинга, приводящий к испарению чёрных дыр, также является гипотетическим — он никогда не был экспериментально подтверждён. Поэтому есть достаточно большая вероятность того, что он не действует. Кроме того, высока вероятность образования страпелек. Страпелька («странная капелька») — предположительно существующий объект, состоящий из «странной материи», то есть свободных, а не объединенных в адро- ны кварков. Столкновение страпельки с ядром какого-нибудь атома вызывает его превращение в странную материю, которое сопровождается выделением энергии. В результате во все стороны разлетаются все новые страпельки, что приводит к цепной реакции. Частицы, состоящие из верхних, нижних и странных кварков, обильно производятся в лабораторных условиях, но распадаются за время порядка 10~9 сек. Существует гипотеза, что достаточно большие ядра, состоящие из примерно равного количества верхних, нижних и странных кварков, являются стабильными, поскольку кварки относятся к фермионам, а принцип Паули запрещает двум одинаковым фермионам находиться в одном и том же квантовом состоянии. Если в ядре есть три разных типа кварков, а не два, как в обычных ядрах, то большее количество кварков может находиться в низкоэнергетических состояниях, не нарушая принципа Паули. Такие гипотетические ядра, состоящие из трёх типов кварков, называются страпельками. Аргументы противников катастрофического сценария Высказываются опасения, что страпельки каким-то неизвестным нам образом катализируют превращение обычной материи в страпельки, что может привести к превращению в страпельки всей планеты. Однако даже в этой ситуации коллаидер не представляет опасности, поскольку энергии столкновения частиц там на порядки ниже, чем те, при которых могут образовываться ядра (будь то обычные или страпельки). Кроме того, если бы страпельки возникали в LHC, они бы в ещё больших количествах возникали и в релятивистском ускорителе тяжёлых ионов RHIC, поскольку количество столкновений там выше, а энергии ниже. Но этого не происходит. Коллаидер предназначен для ускорения и сталкивания частиц (адронов, атомарных ядер). Однако, существуют природные источники частиц, скорость и энергия
которых значительно выше, чем в коллайдере. Такие природные частицы обнаруживают в космических лучах. Поверхность планеты Земля частично защищена от этих лучей, но, проходя через атмосферу, частицы космических лучей сталкиваются с атомами и молекулами воздуха. В результате этих природных столкновений в атмосфере Земли рождается множество стабильных и нестабильных частиц. В результате, на планете уже в течении многих миллионов лет присутствует естественный радиационный фон. То же самое (сталкивание элементарных частиц и атомов) будет происходить и в БАК, однако с меньшими скоростями и энергиями, и в гораздо меньшем количестве . Машина времени По информации международного издания New Scientist (англ.), профессор, доктор физико-математических наук Ирина Арефьева и член-корреспондент РАН, доктор физико-математических наук Игорь Волович полагают, что этот эксперимент может привести к созданию машины времени. Они считают, что протонные столкновения могут породить червоточины. Противоположных взглядов придерживается доктор физико-математических наук из НИИ ядерной физики МГУ Эдуард Боос, отрицающий возникновение на БАК чёрных дыр, а следовательно, и временных червоточин.
Юмор Уверяю вас, запуск Большого Адронного Коллайдера совершенно безопасен, сказал Директор, - никаких черных минидыр, никакого конца света не будет! В этот день в комнату Главного Пульта набилось много народу: впервые сюда было допущено столько представителей комиссий, ООН, журналистов... - Позвольте, но как насчет тех странных частиц, - все не унимался главный представитель ООН, - некоторые ученые полагают, что они могут возникнуть в результате ваших опытов с высокими энергиями, а возникнув, способны не только уничтожить нашу планету, но и взорвать всю Вселенную! - Повторяю еще раз, нашими учеными все тщательно просчитано, опасность совершенно ничтожна! - провожаемый объективами камер, Директор прошествовал к главной панели управления, - Но вы только подумайте, какие горизонты перед наукой откроет удачный запуск! Мы проникнем в тайны материи, вернемся на двадцать миллиардов лет назад, воссоздав условия Большого Взрыва! - директорские пальцы легли на большую красную кнопку, - Итак, господа... Кнопка мягко вошла в панель. Прошло двадцать миллиардов лет. - Уверяю вас, запуск Большого Адронного Коллайдера совершенно безопасен, - сказал Директор...
ИНФОРМАЦИЯ К РАЗМЫШЛЕНИЮ Если у вас есть какие-либо идеи о том, как должен выглядеть этот журнал и что публиковать - пишите нам на адрес domlab@ inbox. com. По этому же адресу принимаются статьи. Если хотите попробовать себя в качестве редактора - мы с удовольствием предоставим вам эту возможность . Люди, имеющие способность к этой работе встречаются не часто. Чтобы узнать есть ли такая способность к этому делу у вас - надо попробовать его делать. «Дорогу осилит идущий».