Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Техническое задание'
Предмет закупки - поставка автомобиля Audi, A8 D4 Long 4.0 TFSI Q Tc (420 лс), в количестве 1 (одной) штуки, год выпуска 2013г., цвет черный перламутр...полностью>>
'Документ'
«Освободиться от страха угрожающих хозяйству тех или иных опасностей – значит приобрести новую экономическую силу. Эту задачу с успехом способно выпол...полностью>>
'Документ'
4. Подтвердить номер мобильного телефона (или электронной почты). При регистрации через телефон на указанный номер придет SMS-сообщение с кодом подтве...полностью>>
'Документ'
Прибытие в Барселону. Встреча в аэропорту, групповой трансфер в маленькое, но гордое - государство Андорра в Пиренейских горах. Размещение в отеле и п...полностью>>

Главная > Документ

Сохрани ссылку в одной из сетей:
Информация о документе
Дата добавления:
Размер:
Доступные форматы для скачивания:

1

Смотреть полностью

ВОПРОСЫ

для абитуриентов, поступающих на специальность 0712 (150302) «Триботехника» после окончания техникума, или после окончания 3-го курса техникума

А. Основы теории трения, износа и смазки

  1. Роль трения и износа в народном хозяйстве.

  2. Сила трения; коэффициент трения;

  3. Трение качения, трение скольжения;

  4. Износ, изнашивание;

  5. Износостойкость;

  6. Пути повышения износостойкости поверхностей деталей машин;

  7. Масла, смазки и смазочные материалы.

Б. Техническая эксплуатация оборудования

  1. Техническая эксплуатация как производственный процесс.

  2. Техническое обслуживание и ремонт машин.

  3. Системы планово-предупредительная система ремонтов (ППР) и планово-предупредительная система осмотров (ППО).

  4. Оценка нормативов ремонта машин по надежности их элементов

  5. Техническая диагностика. Основные понятия.

  6. Основные понятия о надежности машин. Свойства.

  7. Процессы и состояния элементов машин.

  8. Отказы и повреждения. Классификация.

В. Основы компьютерного моделирования трибосопряжений

  1. Информация и информационные процессы.

  2. Основное устройство персонального компьютера.

  3. Базовые программные средства. Работа с редакторами текстов.

  4. Базовые программные средства. Работа с электронными таблицами.

  5. Защита информации в ЭВМ.

  6. Основы программирования.

Г. Механика материалов

  1. Сопротивление материалов: деформации упругие и пластические; закон Гука,

  2. Сопротивление материалов: испытание на растяжение и сжатие; диаграмма растяжения

  3. Детали машин: общие сведения о передачах зубчатых, фрикционных, червячных

  4. Детали машин: общие сведения о передачах ременных, цепных, о передаче винт–гайка;

  5. Детали машин: общие сведения о соединениях шпоночных, в муфтах;

  6. Классификация подшипников;

  7. Методы расчета и проектирования узлов машин и механизмов.

Д. Материаловедение

  1. Классификация межатомных сил связи.

  2. Периодическая таблица Д.И. Менделеева.

  3. Строение поверхности материалов.

  4. Фрикционные и антифрикционные материалы.

  5. Механические свойства материалов.

  6. Шероховатость поверхности и средства её измерения.

Основы теории трения, износа и смазки

1Роль трения и износа в народном хозяйстве.

Трение может быть полезным и вредным - эту аксиому человек освоил еще на заре цивилизации. Ведь два самых главных изобретения - колесо и добывание огня - связаны именно со стремлением уменьшить и увеличить эффекты трения. Однако понимание природы трения и законов, которым подчиняется это явление, возникло не так уж давно и, к сожалению или к счастью, еще далеко от совершенства. Триботехника – наука о контактном взаимодействии твердых тел при их относительном движении, охватывающая весь комплекс вопросов трения, изнашивания и смазки машин. В некоторых странах, в том числе и России, вместо термина триботехника употребляют термины трибология и трибоника. Название научной дисциплины трибология образовано от греческих слов «трибос» - трение и «логос» - наука. Она охватывает теоретические и экспериментальные исследования физических (механических, электрических, магнитных, тепловых), химических, биологических и других явлений, связанных с трением, изнашиванием и смазкой. Как наука, трибология имеет научно-технические разделы: трибофизику, трибохимию, триботехническое материаловедение, трибомеханику, трибоинформатику и др.

Этапы развития триботехники в России

Триботехника, как и другие науки, непрерывно развивается. Этапы ее развития связаны с созданием корабельной техники, металлообрабатывающей промышленности, железнодорожного транспорта, автомобильной промышленности, авиации и космонавтики.

В России основы науки о трении и изнашивании были заложены в период организации Российской академии наук. Великий ученый М. В. Ломоносов сконструировал прибор для исследования сцеплений между частицами тел «долгим стиранием», который явился прототипом современных приборов для определения износостойкости материалов. М. В. Ломоносов является основоположником теории изнашивания материалов и экспериментальных исследований в этой области, он связал понятие о прочности с представлениями о силах связи между частицами. Занимаясь подбором материалов для опор часовых механизмов, М. В. Ломоносов указал на целесообразность применения для этой цели стекла.

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

Мировую известность получили работы Н. П. Петрова по теории смазки подшипников. Над проблемой смазки работали Н. Е. Жуковский и С. А. Чаплыгин, математически разработавшие вопрос о теории смазочного слоя (за границей над гидродинамической теорией смазки работали О. Рейнольдс, А. Кингсбери, Герси и др.).

Следует отметить, что в 1880-1881 годах Д. И. Менделеев разработал научные основы производства смазочных масел из мазута тяжелых кавказских нефтей.

В период развития индустрии в России широко развернулись работы в области триботехники.  Большое влияние на развитие представлений о молекулярном механизме процессы внешнего трения оказали работы Б. В. Дерягина, предложившего в 1934 году свой вариант двучленного закона трения. Теория Б. В. Дерягина оказала большое влияние на все последующие попытки создания теории в любой современной теории по трибологии.

Первый обзор о развитии учения о трении и изнашивании в нашей стране был выполнен в 1947 году профессором Ленинградского политехнического института А. К. Зайцевым в книге «Основы учения о трении, износе и смазке машин». В 1956 году И. В. Крагельский и В. С. Щедров опубликовали монографию «Развитие науки о трении», в которой отмечают, что трение представляет собой сложную совокупность многих физических явлений, и раскрывают путь развития научной мысли в этом направлении с XVI века до 40-х годов XX столетия. Монография о трении без смазочного материала написана указанными авторами по первоисточникам с глубоким анализом русских и зарубежных работ и получила признание во многих странах.

В 1957 году в сборнике «Теоретические основы конструирования машин» М. М. Хрущев дал обзор о «Развитии учения об износостойкости деталей машин», в котором последовательно изложил развитие работ в области износостойкости по отдельным наиболее разработанным вопросам: развития представлений о причинах и процессах изнашивания: исследование влияния шероховатости обработанной поверхности деталей машин на износ металлов; исследование абразивного изнашивания и изнашивания при схватывании; методы испытания на изнашивание; антифрикционные материалы и методы расчета деталей машин на износ.

Весьма перспективна возможность значительного улучшения фрикционно-износных характеристик некоторых пар трения при граничной смазке за счет реализации эффекта избирательного переноса, открытого Д. Н. Гаркуновым и И. В. Крагельским в 1965 году. Следует отметить еще две работы отечественных трибологов, также удостоенных дипломами за открытия: эффекта аномально низкого трения при бомбардировке ядрами гелия некоторых материалов (А. А. Силин, М. А. Тальрозе, Е. А. Духовский и др.) и явления водородного изнашивания (А. А. Поляков, Д. Н. Гаркунов).

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

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

1)      учение о трении и изнашивании деталей машин;

2)      конструктивные решения вопросов трения и изнашивания;

3)      технологические методы повышения износостойкости

деталей;

4)      эксплуатационные мероприятия по повышению долговечности машин. 

 Инженерно-технические проблемы триботехники

   Наиболее актуальными инженерно-техническими проблемами в триботехнике на сегодняшний день являются следующие:

экономика и триботехника;

создание «безызносных» узлов трения машин;

разработка методов расчета деталей на износ;

защита деталей машин от водородного изнашивания;

расширение применения финишной антифрикционной безабразивной обработки (ФАБО) трущихся деталей;

совершенствование смазывания деталей сочленений;

исследование электрических, магнитных и вибрационных явлений при изнашивании;

подготовка инженерных кадров по триботехнике;

разработка новой теории трения и безызносности;

триботехника, интересы здоровья и защиты окружающей среды;

программа исследований водородного изнашивания и избирательного переноса;

построение и реализация банка данных по триботехнике и единство терминов и определений в триботехнике;

необычные условия работы машин и приборов;

компьютерная трибология.

   А также к проблемам триботехники можно отнести проблемы технического обновления различных отраслей машиностроения.

2Сила трения; коэффициент трения;

Трение может быть полезным и вредным - эту аксиому человек освоил еще на заре цивилизации. Ведь два самых главных изобретения - колесо и добывание огня - связаны именно со стремлением уменьшить и увеличить эффекты трения.

Однако понимание природы трения и законов, которым подчиняется это явление, возникло не так уж давно и, к сожалению или к счастью, еще далеко от совершенства.

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

Среди бесчисленных научных достижений и первая формулировка законов трения.

Он ещё в 1519 утверждал, что сила трения, возникающая при контакте тела с поверхностью другого тела, пропорциональна нагрузке (силе прижима), направлена против направления движения и не зависит от площади контакта.

Модель Леонардо да Винчи была переоткрыта через 180 лет Г. Амонтоном и получила окончательную формулировку в работах Ш. О. Кулона (1781). Амонтони Кулон ввели понятие коэффициента трения как отношения силы трения к нагрузке, придав ему значение физической константы, полностью определяющей силу трения для любой пары контактирующих материалов. До сих пор именно эта формула

Fтр = fтр P,

где P - сила прижатия, а Fтр - сила трения, является единственной формулой,фигурирующей в учебниках по физике, а значения коэффициента трения fтр для различных материалов (сталь по стали, сталь по бронзе, чугун по коже ит.д.) входят в стандартные инженерные справочники и служат базой для традиционных технических расчетов. Однако уже в XIX веке стало ясно, что закон Амонтона-Кулона не дает правильного описания силы трения, акоэффициенты трения отнюдь не являются универсальными характеристиками.
Прежде всего, было отмечено, что коэффициенты трения зависят не только оттого, какие материалы контактируют, но и от того, насколько гладкообработаны контактирующие поверхности. Выяснилось также, что силастатического трения отличается от силы трения при движении. Чтобы напомнить, что обычно понимается под статическим трением, представим схемупростейшего эксперимента. Будем пытаться сдвинуть с места тело потянув затрос с пружинным динамометром. При малом перемещении конца троса телоостается на месте: силы, развиваемой пружиной динамометра, недостаточно.
Обычно говорят, что на контактирующих поверхностях развивается сила трения, уравновешивающая приложенную силу. Постепенно увеличиваем перемещение ивместе с ним упругую силу, приложенную к телу. В какой-то момент онаоказывается достаточной для того, чтобы стронуть тело с места.
Зарегистрированное в этот момент показание динамометра и называют обычносилой статического трения, характеризующего предельные возможностинеподвижного (статического) сцепления тел. Если мы будем продолжатьмедленно вытягивать трос, то тело поедет по поверхности. Оказывается, что регистрируемые в ходе движения показания динамометра будут не такими, как вмомент страгивания. Обычно сила трения при медленном движении меньше силыстрагивания, статического трения. Кулон изучал именно силу трения примедленном взаимном перемещении контактирующих тел и установил, что эта силане зависит от величины скорости, а только от направления движения (всегданаправлена против движения).

3Трение покоя, качения, трение скольжения;

3.1 Трение скольжения.

Под трением понимают сопротивление, возникающее при перемещении одного тела относительно другого, прижатого к первому. При этом различают трение покоя, скольжения и качения.
Силой трения покоя (Fn) называют сдвиговое усилие, прикладываемое кконтактирующим телам, и не вызывающее их взаимного скольжения. При этом взаимное перемещение (Ln) достигается за счет деформации материала выступов шероховатости в зоне контакта и называется предварительным смещением. Ононосит в основном упругий характер и исчезает при снятии сдвигающего усилия.
Однако по мере роста сдвигающего усилия предварительное смещениеприобретает пластический характер и становится частично необратимым.
Силу трения можно представить в виде произведения удельной силы трения
(() и фактической площади контакта (Аr):
F = (Ar. (1)
Под коэффициентом трения понимают отношение силы трения к действующему наконтакте нормальному усилию:
( = F/N. (2)
Здесь также различают коэффициенты трения покоя (статический) и скольжения
(кинетический).
В зависимости от характера смазочной прослойки различают 4 вида трения:сухое, граничное, гидродинамическое (жидкостное) и смешанное (одновременноимеются элементы сухого, граничного и гидродинамического трения). В первомслучае контактируют несмазываемые поверхности, покрытые окисными пленками итончайшими слоями молекул газов и воды, адсорбированными из окружающейсреды. Во втором случае, помимо перечисленных пленок, присутствуют молекулысмазочных материалов в виде тонкого слоя толщиной в несколько молекул,которые прочно связаны с поверхностью. В третьем случае слой жидкой смазкиполностью разделяет сопряженные поверхности.
Сухое и граничное трения сходны по своей природе и имеют общиезакономерности. Причиной служит то обстоятельство, что при граничном трениимономолекулярные слои смазки прочно связаны с твердой поверхностью,обладают твердообразными свойствами и как бы служат продолжением твердойфазы. Поэтому, как и при сухом трении, фактически имеет место контакт двухтвердых поверхностей. Отличие проявляется в разных значениях коэффициентатрения. Если при сухом трении он обычно больше 0,2 , то при граничном еговеличина заключена в интервале 0,05-0,2.
Механизм возникновения трения объясняет молекулярно-механическая теориятрения, в разработку которой внесли большой вклад российские ученые (Б.В.
Дерягин, И.В. Крагельский и др.) и зарубежные (Боуден, Тейбор, Томлинсон идр.). В соответствии с этой теорией трение имеет двойственную молекулярно-механическую природу. Силу трения можно представить как сумму молекулярной
(адгезионной) и механической (деформационной) составляющих:
F = FA + F( . (3)
Молекулярная составляющая обусловлена сопротивлением разрыву молекулярныхлибо межатомных связей, которые возникают между контактирующими телами.
Механизм этого процесса аналогичен описанному в гл. 2 для разрушениякристаллической решетки при сдвиге. Рассеяние работы трения в теплотусвязано с упругой деформацией кристаллических решеток. Работа внешней силыпереходит в потенциальную энергию решеток. После разрыва связипотенциальная энергия переходит в энергию колебаний атомов - во внутреннюю.
Механическая составляющая вызвана сопротивлением упругому и пластическомуоттеснению выступов контактирующих тел, внедрившихся при движении вконтроповерхности.
Для измерения силы трения применяют различные трибометры. На них изучаюттрение образцов в виде дисков, контактирующих торцами; цилиндров,контактирующих по образующей, и т.д. Наиболее простым и часто используемымявляется трибометр.
На рисунке ниже представлена схема этого устройства.

Образец 1 прикрепляется к пружинному динамометру 3 и прижимается кконтртелу 2, приводимому в движение. Динамометр измеряет силу трения.
Прибор позволяет исследовать влияние на трение шероховатостиповерхностей, материалов пары трения, нормальной нагрузки, скоростискольжения, температуры, смазки и многих других факторов.

Схема трибометра.

3.2 Трение качения.

Если бы колесо, катящееся по основанию, не испытывало проскальзывания, то такое движение было бы чистым качением и путь, проходимый любой точкой поверхности колеса по основанию за один оборот, составлял бы 2(r. Однако качения без проскальзывания не бывает. Колесо и основание испытывают упругие деформации. При этом колесо в зоне контакта сжимается, а основание - растягивается (стрелки на рис. а).
[pic] [pic] а) б)

Взаимодействия колеса с опорой.

Поэтому на контакте постоянно происходит проскальзывание колесаотносительно основания. Это один из источников рассеяния энергии. Другим источником является вязкоупругое поведение материалов основания колеса.
Если к оси колеса не приложено тяговое усилие, то дуга контакта симметрична
(см. рис. а), и реакция опоры соосна с нормальной нагрузкой. Если приложитьтяговое усилие и колесо приходит в движение, то зона контакта искажается
(см. рис.б). Материал сзади колеса не успевает восстановить форму. Прималых скоростях коэффициент трения качения увеличивается с повышениемскорости, а при больших - уменьшается.
Также существует гидродинамическое трение как один из основных видовтрения.
Гидродинамическое (жидкостное) трение характеризуется тем, что трущиесяповерхности разделены слоем масла. Минимальная толщина слоя должна бытьбольше, чем суммарная высота наиболее высоких микронеровностей обеихповерхностей: hmin( (Rmax1+Rmax2(.

4Изнашивание, износ

Изнашивание – процесс разрушения и отделения материала с поверхности твердого тела и (или) накопления его остаточной деформации при трении, проявляющийся в постепенном изменении размеров и (или) формы тела.

Износ – результат изнашивания, определяемый в установленных единицах.

5Износостойкость;

Износостойкость – свойство материала оказывать сопротивление изнашиванию в определенных условиях трения, оцениваемое величиной, обратной скорости изнашивания или интенсивности изнашивания.

6Пути повышения износостойкости поверхностей деталей машин;

6Масла, смазки и присадки к ним.

Смазка – действие смазочного материала, в результате которого между двумя поверхностями уменьшается сила трения и (или) интенсивность изнашивания.

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

Конец XIX века ознаменовался замечательными достижениями в исследовании вязкости, то есть трения в жидкостях. Наверное, с доисторических времён известно, что смазанные жиром или даже просто смоченные водой поверхности скользят значительно легче. Смазка трущихся поверхностей применялась с момента зарождения техники. В 1886 году О. Рейнольдс разработал первую и принципиально на то время новую теорию смазки.

Она заключалась в том, что

1) при наличии достаточно толстого слоя смазки, обеспечивающего отсутствие непосредственного контакта трущихся поверхностей, сила трения определяется только свойствами (гидродинамикой) смазочного слоя. Сила статического страгивания равна нулю, а с ростом скорости сила сопротивления движению увеличивается.

2) если же смазки недостаточно, то действуют все три механизма: сила статического сопротивления страгиванию с места; Кулонова сила и сила вязкого сопротивления.

Итак, к концу XIX века выяснилась картина зависимости силы трения от скорости. Но уже на пороге XX века возникло сомнение в правильности этой картины при очень малых скоростях. В 1902 году Штрибек опубликовал данные, свидетельствующие о том, что при отсутствии смазки сила сопротивления не падает сразу с уровня силы страгивания до кулоновой силы, а возникает постепенное падение силы с ростом скорости - эффект, противоположный гидродинамической вязкости. Этот факт был многократно перепроверен в дальнейшем и теперь обычно именуется Штрибек-эффектом. Картина зависимости силы трения от скорости приобрела форму, использующуюся до сегодняшнего дня.

Б. Техническая эксплуатация оборудования

1Техническая эксплуатация как производственный процесс.

2Техническое обслуживание и ремонт машин.

3Системы планово-предупредительная система ремонтов (ППР) и планово-предупредительная система осмотров (ППО).

4Оценка нормативов ремонта машин по надежности их элементов

5Техническая диагностика. Основные понятия.

6Основные понятия о надежности машин. Свойства.

7Процессы и состояния элементов машин.

8Отказы и повреждения. Классификация.

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

  1. Техническая эксплуатация как производственный процесс.

Техническая эксплуатация ПО представляет собой производственный процесс, который является неотъемлемой частью коммерческой эксплуатации объекта конечного применения. И на него распространяются экономические законы любых процессов производства. В соответствии с этими законами для возникновения производственного процесса необходимо иметь три элемента:

  1. труд как целесообразная деятельность человека;

  2. предмет труда, на который направлен эта деятельность;

  3. средства труда с помощью которых человек воздействует на предмет труда.

Привести примеры для конкретной машины.

Цель ТЭ - обеспечение экономичной и надежной работы ПО при его коммерческой эксплуатации с минимальными затратами. Для достижения этой цели в ТЭФ входят следующие три элемента:

  • Техническое использование

  • Техническое обслуживание

  • Ремонт

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

Техническое обслуживание – это комплекс мероприятий и средств по поддержанию ПО в нормальном техническом состоянии.

Ремонт - это комплекс мероприятий и средств по восстановлению работоспособности ПО после отработки назначенного ресурса или отказа.

  1. Техническое обслуживание и ремонт машин.

Процессы ТО и ремонта представляют собой совокупность операций по поддержанию и восстановлению утрачиваемой со временем исправности или работоспособности судов и их элементов.

Общая цель ТО и ремонта состоит в предотвращении отказов и сохранении в течении заданного времени высокого уровня технического состояния ПО путем выполнения ремонтно - профилактических операций с минимальными затратами времени с средств.

С технологической точки зрения ТО и ремонт мало отличаются друг от друга.

Главные различия состоят в стадии выполнения и объеме работ, а так же - в организации и исполнителях этих технологических процессов, а при плановой экономике - еще и в источниках финансирования.

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

Ремонт - это комплекс операций по восстановлению работоспособного состояния объектов, выполняемых, как правило, ремонтными или другими специализированными предприятиями с выводом их из эксплуатации.

Известно несколько организационных направлений проведения (стратегий) технических обслуживаний и ремонтов ПО. К ним, в частности, относятся:

  • ремонт по мере возникновения отказов ПО,

  • ремонт на основании без разборного контроля технического состояния (мониторинга) элементов ПО,

  • ремонт по результатам плановых осмотров ПО (система ППО),

  • планово-предупредительная система ремонтов (ППР).

Выбор стратегии ремонтов зависит от назначения и режима работы ПО. Наиболее простая система по отказу ПО обычно применяется для бытовой техники, которая ремонтируется в случае возникновения отказов.

Для ответственных машин промышленного назначения такая система не пригодна и опасна. Для нее чаще всего применяют систему ППР на основе нормативов периодичности и объемов ремонта основных видов, которые учитывают долговечность соответствующих деталей и узлов.

Для некоторых машин применяют систему ППО, при которой вопрос о необходимости ремонта решают по результатам планового освидетельствования.

Ремонт на основании безразборного контроля технического состояния элементов ПО требует оснащения их специальными средствами диагностики наиболее опасных процессов деградации элементов машин. Эта система дает наибольший эффект в сочетании с системой ППР.

На практике возможны и смешанные системы ТОР, когда ремонты выполняются на основе системы ППР, а часть работ по ТО - по потребности.

  1. Системы ППР и ППО.

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

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

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

В общем случае в систему ППР входят три вида ремонта:

  • текущий,

  • средний,

  • капитальный.

Основными характеристиками каждого y-го вида ремонта являются:

  • назначенный ресурс до ремонта Ry, тыс.ч

  • номенклатура работ по технологическому процессу

  • трудоемкость ремонта Wy, тыс. нормо-час.

  • продолжительность ремонта y, тыс. час .

Соотношения между видами ремонта можно выразить следующим образом

Rт < Rс < Rк ,

Wт < Wс < Wк ,

т < с < к .

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

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

  1. продолжительность ремонтного цикла, равная назначенному ресурсу до капитального ремонта Rк ,

  2. количество ремонтов каждого вида в цикле ny,

  3. суммарное число ремонтов в цикле  ny .

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

,

где m - число видов ремонта (m=3).

  1. Оценка нормативов ремонта машин по надежности их элементов

Система ППР основных машин и механизмов ПО включает в себя стандартные виды ремонтов: текущий, средний и капитальный. Параметры этих ремонтов определяются по данным Руководств по эксплуатации, ТУ на ремонт или нормативам (графикам) ремонта, составленных применительно рассматриваемому элементу судна при эксплуатации судов данного типа с учетом режима их эксплуатации.

Кроме того в систему ППР включаются плановые технические обслуживания, периодичность и объем работ у которых меньше, чем у текущего ремонта.

В зависимости от содержания и объема работ технические обслуживания так же могут иметь несколько видов и обозначаться ТО-1, ТО-2, ТО-3 и т.д., или просто характеризоваться периодичностью их выполнения,

Располагая параметрами ремонтного цикла можно изобразить его схему примерно так как это показано на рисунке.

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

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

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

Учитывая принцип кратности ремонтов, работы по ремонту или ТО меньшего ранга, как правило, входят в состав ремонта более высокого ранга.

  1. Техническая диагностика. Основные понятия.

Техническая диагностика (ТД) - это комплекс операций по оценке технического состояния и выявлению дефектов деталей без разборки или с минимальной разборкой машины с целью прогнозирования их оста­точного ресурса и перечня работ по предстоящему плановому ремонту.

Диагностический параметр - это физическая величина, непосред­ственно замеряемая. СТД и функционально зависимая от степени повре­ждения исследуемого элемента СТС. Диагностические параметры могут быть обобщенными и частными.

Обобщенные диагностические параметры отражают интегральное вли­яние изнашивания различных деталей на работоспособность машины. Частный диагностирующий параметр более точно указывает на сте­пень износа конкретной детали.

Для прогнозирования технического состояния и остаточного ресурса необходимо определять диагностические параметры через некоторые промежутки времени, строить по ним характеристику диагностического параметра и рассчитывать остаточный ресурс по моменту достижения допустимого диагностического параметра.

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

Обобщенные диагностические параметры отражают интегральное вли­яние изнашивания различных деталей на работоспособность машины. Частный диагностирующий параметр более точно указывает на сте­пень износа конкретной детали.

Величина диагностического параметра зависит от прибора и градуировки его регистрирующего органа. К таким величинам относятся сила тока в А, напряжение тока в В, линейные величины в мм, давле­ние или вакуум в МПа, температура в °С, сопротивление в ОМ, уровень вибрации в дБ и др. Корреляционная зависимость этих параметров от исследуемой физической величины, характеризирующей степень повреждения элемента машины, определяется путем специальных научных исследований, что позволяет формировать шкалу прибора в размерности исследуемой физической величины (например высота столбика ртути может быть совмещена со шкалой температуры в 0С.)

  1. Основные понятия о надежности машин. Свойства.

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

Под понятием «надежность» следует понимать свойство объекта выполнять и сохранять во времени требуемые функции в заданных режимах и условиях применения, обслуживания, ремонтов, хранения и транспортирования.

В свою очередь надежность состоит из таких групп свойств как безотказность, долговечность, ремонтопригодность и сохраняемость.

Безотказность - свойство объекта непрерывно сохранять работоспособность в течении некоторого времени или некоторой наработки.

Долговечность - свойство объекта сохранять работоспособность до перехода в предельное состояние при установленной системе технического обслуживания и ремонтов.

Ремонтопригодность - свойство объекта, заключающееся в приспособленности к предупреждению и обнаружению причин возникновения его отказов, повреждений и устранению их последствий путем приведения ремонтов и технических обслуживаний.

Сохраняемость - свойство объекта непрерывно сохранять исправное и работоспособное состояние в течении и после режима ожидания, хранения и (или) транспортирования.

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

  1. Процессы и состояния элементов машин.

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

Деградационный процесс - процесс изменения (ухудшения) технического состояния объекта под воздействием конкретных внешних и внутренних факторов. Например можно отметить такие характерные процессы деградации как изнашивание и коррозия.

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

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

Это позволяет осуществлять контроль уровня состояния элементов с учетом вероятности входа их из строя.

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

Назначенный уровень предельного состояния - установленная нормативно-технической документацией величина, достижение которой соответствует не­исп­равному состоянию и возникновению повреждения элемента объекта.

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

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

  1. Отказы и повреждения. Классификация.

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

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

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

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

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

Зависимый отказ - отказ элемента объекта, обусловленный повреждениями или отказами других элементов.

Конструкционный отказ - отказ, возникший в результате нарушения установленных правил и (или) норм конструирования.

Независимый отказ - отказ элемента объекта, не обусловленный повреждениями или отказами других элементов.

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

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

Эксплуатационный отказ - отказ, возникший в результате нарушения установленных правил и (или) условий эксплуатации объекта.

В. Основы компьютерного моделирования трибосопряжений

  1. Информация и информационные процессы.

С понятием информации в курсе информатики учащиеся знакомятся, как правило, на первых же уроках, т. к. это понятие является одним из основных. Сам термин происходит от латинского слова informatio, что означает "сообщение, разъяснение".

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

Человек с помощью разнообразных технических устройств занимается сбором, хранением, поиском, обработкой, кодированием и передачей информации. Все эти процессы будем называть информационными. Со сбором, поиском, обработкой, хранением и передачей информации учащиеся постоянно встречаются в реальной жизни. Кодирование же информации является нечто новым , на которое необходимо обратить особое внимание при изучении темы. Основой для любого кодирования служит алфавит - конечный набор знаков (символов) любой природы, из которых конструируется сообщение на данном языке. Но одна и та же запись может нести разную смысловую нагрузку, поэтому для представления информации применяют разные коды - наборы условных обозначений для представления информации. Поэтому процесс приема и передачи информации можно изобразить в виде схемы:

Наиболее значимым для развития техники оказался способ представления информации с помощью кода, состоящего всего из двух символов: 0 и 1, называемые битами (наименьшая единица измерения информации). Боле крупная единица - байт. 1 байт = 8 бит. Условились считать, что объем информации, содержащейся в одном символе, равен 1 байту. Тогда легко определить объем информации , содержащейся в слове, предложении, на странице и т. д. Принято пользоваться и более крупными единицами информации: килобит, мегабит, гигабит, килобайт, мегабайт, гигабайт.

Объясните схему и приведите свои примеры:

Приведите примеры к следующей схеме:

Таблица: "Человек и информация"

Информация и знания

Чем является информация для человека?

Информация для человека - знания

Три типа информационных процессов

Хранение, передача и обработка

Роль органов чувств в процессе восприятия информации

Информация к человеку поступает через все органы чувств: слух, зрение, вкус, обоняние, осязание

Языки естественные и формальные: символьная форма представления информации

Естественные языки - русский, английский и др. Формальные - языки математики, химии, музыки, информатики, логики, программирования и др.

Образная информация

Информация, воспринимаемая человеком и не сводимая к символьной форме: вкусы, запахи, картины природы

Содержательный подход к измерению информации

Отчего зависит информативность сообщения, принимаемого человеком?

Сообщение информативно, если оно содержит новые и понятные сведения для принимающего его человека

Единица измерения информации

1 бит

Количество информации в сообщении об 1 из N равновероятных событий

2i = N

Алфавитный подход к измерению информации

Что такое алфавит, мощность алфавита?

Алфавит - множество символов, используемых для представления информации в некотором языке. Мощность алфавита - число символов в алфавите (N)

Информационный вес символа в алфавите

Количество информации, которое несет один символ в тексте

Измерение информационного объема текста с алфавитной точки зрения

Число символов умножить на вес символа в алфавите

Байт, Кбайт, Мбайт, Гбайт

1 байт = 8ы бит, 1 Кбайт=1024 байт, 1Мбайт=1024 Кбайт...

Скорость информационного полтока и пропускная способность канала

Скорость информационного потока измеряется в бит/с. Пропускная способность канала - максимальная скорость информационного потока

  1. Основное устройство персонального компьютера.


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

Компьютер состоит из следующих блоков:

Монитор – выводит информацию пользователю. Бывают черно-белые и цветные (отличают размером диагонали и размером минимальной точки на экране).


Клавиатура – вводит информацию в компьютер при помощи клавиш.



Мышь – перемещает указатель мыши по экрану и вводит команды пользователя.

Системный блок – содержит электронную «начинку» компьютера (мозги).



В системном блоке находятся:

1 Материнская плата

2 Центральный процессор

3 Оперативная память

4 Карты расширений

5 Блок питания

6 Оптический привод

7 Жесткий диск

Главные характеристики процессора:

поколение, к которому он принадлежит;

тактовая частота в Мега Герцах (миллионов колебаний в секунду).

Поколения процессоров.

(через дефис указана тактовая частота в МГц)

Память – хранит данные и программы.

Виды памяти:

ВЗУ (внешнее запоминающее устройство)

ОЗУ (оперативное запоминающее устройство) – хранит программы и данные во время работы компьютера, при выключении компьютера информация разрушается.

ПЗУ (постоянное запоминающее устройство) – информация закладывается на заводе-изготовителе и впоследствии не изменяется. Она необходима для первоначальной загрузки компьютера.

Устройство, считывающее и записывающее информацию на дискеты называется дисковод. Жесткие диски (винчестеры) содержат значительно больше информации и работают быстрее, чем гибкие диски, находятся внутри системного блока, содержат от 1 до 100 Гбайт информации. Компакт-диски содержат большое количество информации (до 750 Мб), долговечны, удобны. Бывают музыкальные и с программным обеспечением. Устройство для их считывания называется дисковод CD-ROM.

Кроме процессора и памяти в системном блоке находятся электронные платы, обеспечивающие и расширяющие возможности ПК:

видео-плата - изображение для монитора;

звуковая плата - звук для колонок;

внутренний модем - связь по телефонной линии, выход в Internet;

сетевая плата - обмен данными между компьютерами, объединенными в локальную сеть и др.

В
нешние устройства ПК

Принтер – печатает на бумаге. Бывает:

1) матричный – печатает иголками через красящую ленту;

2) струйный – разбрызгивает краску по листу бумаги;

3) лазерный – наносит специальный порошок на бумагу с помощью лазерных лучей.

Принтеры всех этих видов бывают: черно-белые и цветные.

С

канер - вводит рисунки и тексты в компьютер. Бывает: ручной и планшетный.

Модем - соединяет компьютер с телефонной линией. Бывает: внешний и внутренний.

З
вуковые колонки - воспроизводят звуки и мелодии. Компьютер оборудованный звуковыми колонками и звуковой платой называется мультимедийным. Мультимедиа – это объединение звука и видео.

  1. Базовые программные средства. Работа с редакторами текстов.

Работа с редактором, общие замечания.

Неяркие кнопки – неактивные. Они недоступны. Некоторые причины, почему может быть недоступна кнопка:

• нет выделенного элемента (обычно это кнопки форматирования текста)

• курсор не стоит в поле редактирования

• нет данных в буфере (обычно это кнопки вставки текста из других программ)

Кнопка «Источник» переводит редактор в режим работы с html-кодом (подходит для продвинутых пользователей).

Кнопка «Сохранить» используется для отправки отредактированного текста на сервер (дублируется функциональность кнопки «Сохранить изменения» внизу страницы).

Кнопка «Новая страница» очистит вашу страницу.

Кнопка "Полноэкранный режим". Разворачивает окно редактора на всю ширину вашего браузера.

Кнопка «Разрыв страницы»

Кнопка «Вырезать» активна только если у вас есть выделенный текст. Выделите мышью текст, который вы хотите удалить и нажмите на эту кнопку – текст будет удален. (Это касается не только текста, но и картинок, и таблиц).

Кнопка «Копировать» отправит выделенный вами кусок страницы в буфер (используется, когда нужно разместить несколько однородных кусков).

Кнопка «Вставить» вставит текст из буфера (вставляет не только тексты, но и таблицы, но без картинок).

Кнопка «Вставить только текст» вставляет из буфера неформатированный текст (таблицы переформатируются в сплошной текст). Эту кнопку полезно использовать для копирования из Word – удаляется все специальное форматирование этой программы, которое может потом некорректно сохраняться редактором.

Еще одна кнопка, позволяющая корректно вставить текст из Word – «Вставить из Word» . Сохраните нужный вам текст в буфер в Word и в выпавшем диалоговом окне редактора выполните все указания.

Кнопка «Отменить» позволяет вам отменить последнее действие. Вы можете отменить только 5 последних действий. Потом кнопка становится неактивной.

Кнопка «Повторить» возвращает обратно отмененное действие.

Кнопка «Выделить все» выделяет все содержимое редактора. (Удобно использовать, когда вам нужно задать определенное форматирование всему тексту страницы).

Кнопка «Убрать форматирование» вычищает все форматирование страницы, оставляя «голый» текст.

Кнопка «Жирный» делает выделенный вами текст жирным шрифтом.

Кнопка «Курсив» делает весь выделенный вами текст курсивом.

Кнопка «Подчеркнутый» подчеркивает весь выделенный вами текст.

Кнопка «Зачеркнутый» зачеркивает весь выделенный вами текст.

Кнопка «Подстрочный индекс» делает весь выделенный вами текст подстрочным.

Кнопка «Надстрочный индекс» делает весь выделенный вами текст надстрочным.

Кнопка «Вставить/Удалить нумерованный список» создает нумерованный список для выделенного абзаца. В дальнейшем при переводе строки автоматически создается пункт списка. Если вы не хотите, чтобы следующий абзац был пунктом списка, поставьте курсор на этот абзац (убрав все остальное выделение) и отключите кнопку списка.

Другой вариант: при переводе строки используйте не кнопку «Enter» на клавиатуре, а сочетание кнопок «Enter» и «Shift» одновременно. Поэкспериментируйте и вы поймете, чем эти два варианта отличаются.

Кнопка «Вставить/Удалить маркированный список» работает аналогично предыдущей с той только разницей, что список создается ненумерованный.

Кнопка «Уменьшить отступ» сдвигает выделенный абзац влево (если есть куда сдвигать). В работе со списками она может убрать список или при вложенных списках, переместить пункт на уровень выше.

Кнопка «Увеличить отступ» - обратная функция п.23.

Кнопка «По левому краю» выравнивает весь выделенный текст по левому краю (состояние по умолчанию).

Кнопка «По центру» выравнивает весь выделенный текст по центру.

Кнопка «По правому краю» выравнивает весь выделенный текст по правому краю.

Кнопка «По ширине» выравнивает весь выделенный текст по всей ширине поля.

Кнопка «Вставить/Редактировать ссылку» создает ссылку из выделенного текста. При нажатии на эту кнопку выпадает диалоговое окно:

У данного окна 3 вкладки.

Первая вкладка «Информация ссылки» открывается по умолчанию. Вы можете выбрать тип ссылки: будет это обычная ссылка на другую страницу вашего или другого сайта (“URL”). При выборе «URL» вы должны будете выбрать протокол. Если не знаете, что это такое, при ссылке на страницы какого-либо сайта выбирайте http://. Кнопка «Просмотреть на сервере» в нашем случае отключена (показывает пустую директорию).

Вкладка «Цель» определяет, в каком окне должна открываться ссылка.

Можно использовать "Всплывающее окно" для показа изображений вашей статьи в оригинальном размере. Для этого необходимо знать размер - что указывается в "Ширине" и "Высоте" и скопировать во вкладке "Вставить/Редактировать изображение"

Кнопка «Убрать ссылку» работает только тогда, когда у вас в редакторе выделена ссылка. Она делает текст снова обычным текстом, без ссылки.

Кнопка «Вставить/Редактировать изображение» открывает диалоговое окно для добавления картинки.

Окно чем-то похоже на диалоговое окно добавления ссылки. Вы точно также можете указать путь к имеющейся картинке (на нашем сервере или на другом). С помощью вкладки «Закачать» вы также можете закачать картинку на сервер (обратите внимание, картинка может иметь только три расширения: .jpg, .gif, .png, в противном случае она просто не отобразится в браузере).

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

Здесь вы можете использовать уже имеющиеся. размещенные вами ранее изображения (указатель 2). Или разместить новое (указатель 2). Нажав кнопку "Обзор" вы увибите файлы и папки вашего компьтера. найдите нужное изборажение, выделите его щелкнув по нему курсором один раз, затем нажмите открыть. Теперь пустое поле рядом с кнопкой обзор вы можете видеть путь к файлу изображения. Нижимайте "Загрузить" файл. После загрузки в списке вы можете видеть нужный вам файл.

Разметить изображение в страницу вы можете если указатель окна (зеленоая полоса) указывает на необходимый файл. Далее следует нажать "добавить" или нажать кнопку на клавиатуре "Insert".

Теперь в окне "Свойства изображения" в поле URL вы можете видеть путь к картинке. размещенной и выбранной вами.

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

В информации об отображении можно установить способ обтекания картинки текстом (поле «Выравнивание»), отступы от картинки (вертикальный и горизонтальный отступ, устанавливается в пикселах, оптимально – 10), рамку вокруг картинки («Бордюр», тоже устанавливается в пикселах, лучше вручную установить 0, если рамка не нужна, особенно если используете картинку, как ссылку), высоту и ширину картинки (не устанавливайте эти параметры больше, чем реальная высота и ширина картинки, иначе она будет отображена в плохом качестве, нажмите на иконку замочка, чтобы картинка была пропорциональной), альтернативный текст (хорошим тоном считается, чтобы у всех картинок был альтернативный текст, служащий как бы надписью к картинке. Можно использовать ключевые слова сайта для альтернативного текста – полезно для поднятия рейтинга в поисковиках).

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

Кнопка «Вставить/Редактировать таблицу» открывает диалоговое окно для добавления таблицы.

Здесь вы можете задать количество строк и колонок таблицы, ее ширину и высоту, а также размер рамки (размер бордюра) таблицы, ее выравнивание на странице (по умолчанию – слева), промежуток между ячейками и отступ внутри ячейки, а также заголовок таблицы. Все размеры – в пикселях. Только ширину таблицы можно задать в пикселях и процентах. Для того, чтобы установить таблицу по всей ширине окна, поставьте 100%.

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

Выбрав «Свойства ячейки», вы вызовете выпадающее диалоговое окно, в котором можете установить ширину этой ячейки, заворачивание текста (т.е. текст может переноситься внутри ячейки на другую строку или нет), выравнивание внутри ячейки (горизонтальное: по левому краю, по правому или по центру; вертикальное – по верху, по низу или по центру), а также цвет фона или рамки ячейки (нажмите на кнопку «Выбрать» и выберите нужный вам цвет из палитры).

Диапазон строк и диапазон колонок – лучше не используйте, если не уверены в том, что это вам очень нужно и вы понимаете, как это работает. Т.к. недочеты в этом пункте могут привести к тому, что вся таблица «поедет».

Ширина колонок также, как и ширина таблицы может задаваться в пикселях и в процентах (от общей ширины таблицы). Обратите внимание, чтобы сумма ширин всех колонок таблицы была равна 100%.

Будьте аккуратны, вставляя строки, столбцы, разбивая и соединяя ячейки. Почаще сохраняйте промежуточный результат.

Кнопка «Горизонтальная линия» добавляет горизонтальную линию. По умолчанию она имеет ширину поля, в котором вы находитесь. Однако, с помощью мыши вы можете растягивать или сжимать ее. А используя иконку «Цвет текста» (см. ниже), вы сможете раскрасить ее в нужный вам цвет.

«Цвет текста» - выпадающее окошко, в котором вы можете либо выбрать имеющийся в палитре цвет, либо, нажав «Цвета…» получить дополнительное диалоговое окно, где уже сможете установить более подходящий вам цвет для текста.

Обратите внимание: текст, которому вы хотите задать цвет, должен быть выделен!

Аналогично работает кнопка «Цвет фона». С ее помощью вы можете задать фон для выделенного блока.

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

Кнопка «Якорь» помогает организовать гиперссылки внутри одного документа последовательно с кнопкой «Вставить/Редактировать ссылку».

Список «Форматирование» также дает вам возможность установить уже имеющееся форматирование. Обратите внимание: некоторые заголовочные теги переопределены и отображаться будут не так, как вы видите на этой странице. Экспериментируйте, но аккуратно.

Кнопка "Спецсимволы" дает возможность вставить в текст специальные символы в текст.

Кнопка "Найти" помогает искать в тексте определенные слова.

Кнопка "Заменить" одно слово другим.

  1. Базовые программные средства. Работа с электронными таблицами.

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

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

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

  • проведения однотипных расчетов над большими наборами данных;

  • автоматизации итоговых вычислений

  • решения задач путем подбора значений параметров, табулирования формул;

  • обработки результатов экспериментов;

  • проведения поиска оптимальных значений параметров;

  • подготовки табличных документов;

  • построения диаграмм и графиков по имеющимся данным.

Одним из наиболее распространенных средств работы с документами, имеющими табличную структуру, является программа Microsoft Excel.

Программа MS Excel — это мощный и достаточно простой в использовании пакет обработки электронных таблиц, предназначенный для решения широкого круга планово-экономических, учетно-статистических, научно-технических и других задач, в которых числовая, текстовая или графическая информация с некоторой регулярной, повторяющейся структурой представлена в табличном виде. Электронная таблица так же, как и обычная таблица, состоит из строк и столбцов, на пересечении которых располагаются ячейки. Однако, в отличие от обыкновенной, ЭТ служит не только для наглядного представления числовой, текстовой и графической информации. Основное отличие электронной таблицы от обычной состоит в возможности размещения различных расчетных формул в ее ячейках, а также в широкой автоматизации обработки представленных в табличном виде данных.

Основные возможности MS Excel

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

После запуска Excel на экране появляется окно, состоящее из нескольких элементов:

Документы MS Excel записываются в файлы, имеющие расширение .xls.

Кроме того, MS Excel может работать с электронными таблицами и диаграммами, созданными в других распространенных пакетах, а также преобразовывать создаваемые им файлы для использования их другими программами Основные возможности и инструменты программы MS Excel:

  • широкие возможности создания и изменения таблиц произвольной структуры-

  • автозаполнение ячеек таблицы;

  • богатый набор возможностей форматирования таблиц;

  • богатый набор разнообразных функций для выполнения вычислений

  • автоматизация построения диаграмм различного типа;

Создание электронных таблиц Microsoft Excel

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

Основные понятия электронных таблиц

Документ Excel называется рабочей книгой. Рабочая книга представляет собой набор рабочих листов, каждый из которых имеет табличную структуру и может содержать одну или несколько таблиц. В окне документа в программе Excel отображается только текущий рабочий лист, с которым и ведется работа. Каждый рабочий лист имеет название, которое отображается на ярлычке листа, отображаемом в его нижней части. С помощью ярлычков можно переключаться к другим рабочим листам, входящим в ту же самую рабочую книгу. Чтобы переименовать рабочий лист, надо дважды щелкнуть на его ярлычке.

Рабочий лист состоит из строк и столбцов. Столбцы озаглавлены прописными латинскими буквами и, далее, двухбуквенными комбинациями. Всего рабочий лист может содержать до 256 столбцов, пронумерованных от А до IV. Строки последовательно нумеруются цифрами, от 1 до 65 536 (максимально допустимый номер строки).

Одна из ячеек всегда является активной и выделяется рамкой активной ячейки. Эта рамка в программе Excel играет роль курсора. Операции ввода и редактирования всегда производятся в активной ячейке. Переместить рамку активной ячейки можно с помощью курсорных клавиш или указателя мыши.

Диапазон ячеек. На данные, расположенные в соседних ячейках, можно ссылаться в формулах, как на единое целое. Такую группу ячеек называют диапазоном. Наиболее часто используют прямоугольные диапазоны, образующиеся на пересечении группы последовательно идущих строк и группы последовательно идущих столбцов. Диапазон ячеек обозначают, указывая через двоеточие номера ячеек, расположенных в противоположных углах прямоугольника, например: А1 :С15.

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

Ввод, редактирование и форматирование данных

Отдельная ячейка может содержать данные, относящиеся к одному из трех типов: текст, число или формула, — а также оставаться пустой. Программа Excel при сохранении рабочей книги записывает в файл только прямоугольную область рабочих листов, примыкающую к левому верхнему углу (ячейка А1) и содержащую все заполненные ячейки.

Тип данных, размещаемых в ячейке, определяется автоматически при вводе. Если эти данные можно интерпретировать как число, программа Excel так и делает. В противном случае данные рассматриваются как текст. Ввод формулы всегда начинается с символа «=» (знака равенства).

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

Чтобы завершить ввод, сохранив введенные данные, используют кнопку Enter в строке формул или клавишу ENTER. Чтобы отменить внесенные изменения и восстановить прежнее значение ячейки, используют кнопку Отмена в строке формул или клавишу ESC. Для очистки текущей ячейки или выделенного диапазона проще всего использовать клавишу DELETE.

Форматирование содержимого ячеек. Текстовые данные по умолчанию выравниваются по левому краю ячейки, а числа — по правому. Чтобы изменить формат отображения данных в текущей ячейке или выбранном диапазоне, используют команду Формат ► Ячейки. Вкладки этого диалогового окна позволяют выбирать формат записи данных (количество знаков после запятой, указание денежной единицы, способ записи даты и прочее), задавать направление текста и метод его выравнивания, определять шрифт и начертание символов, управлять отображением и видом рамок, задавать фоновый цвет.

В ячейке может находиться:

  • содержимое;

  • примечание;

  • формат.

Ячейка может содержать до 255 символов, которые трактуются как ее содержимое. Это может быть:

  • текст;

  • число;

  • денежное значение

  • процентное значение

  • дата;

  • время;

  • формула;

  • графический объект.

Вычисления в электронных таблицах

Формулы.

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

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

Ссылки на ячейки.

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

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

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

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

Абсолютные и относительные ссылки.

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

Пусть, например, в ячейке В2 имеется ссылка на ячейку A3. В относительном представлении можно сказать, что ссылка указывает на ячейку, которая располагается на один столбец левее и на одну строку ниже данной. Если формула будет скопирована в другую ячейку, то такое относительное указание ссылки сохранится, Например, при копировании формулы в ячейку ЕА27 ссылка будет продолжать указывать на ячейку, располагающуюся левее и ниже, в данном случае на ячейку DZ28.

При абсолютной адресации адреса ссылок при копировании не изменяются, так что ячейка, на которую указывает ссылка, рассматривается как не табличная. Для изменения способа адресации при редактировании формулы надо выделить ссылку на ячейку и нажать клавишу F4. Элементы номера ячейки, использующие абсолютную адресацию, предваряются символом $. Например, при последовательных нажатиях клавиши F4 номер ячейки А1 будет записываться как А1,$А$1,А$1 и $А1. В двух последних случаях один из компонентов номера ячейки рассматривается как абсолютный, а другой — как относительный.

Группа ячеек (диапазон) задается через двоеточие, например, B3:D4 (или B3..D4) и образует прямоугольник, включающий ячейки ВЗ, СЗ, D3, В4, С4, D4.

В каждую из ячеек можно занести число, формулу (арифметическое выражение) или теши. Если в ячейку ЭТ записана формула, то в исходном состоянии на экране отображается значение этой формулы, а не она сама. Операндами формулы могут быть математические функции, константы, номера ячеек (содержимое ячейки с указанным номером). Ячейка ЭТ имеет сложную «многослойную» структуру, в ней может стоять ссылка на другую ячейку, значение которой является результатом вычислений по другой формуле и т.д.

  1. Защита информации в ЭВМ.

1. Факторы угроз сохранности информации в информационных системах.

Умышленные факторы сохранности информации в СОД (системы обработки данных) зарубежные специалисты подразделяют на угрозы со стороны пользователей ЭВМ и лиц, не являющихся пользователями. Несанкционированный доступ к информации может включить неавторизованное пользование информацией системы и активную инфильтрацию. Неавторизованное пользование информацией отождествляется с ситуацией, когда неавторизованный пользователь получает возможность ознакомиться с информацией, хранимой в системе, и использовать ее в своих целях (прослушивание линий связи пользователей с ЭВМ, анализ информационных потоков, использование программ, являющихся чужой собственностью).

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

Намеренные попытки проникновения в СОД могут быть классифицированы как пассивные и активные.

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

Активное проникновение в систему представляет собой прямое использование информации из файлов, хранящихся в СОД. Такое проникновение реализуется обычными процедурами доступа: использованием известного способа доступа к системе или ее части с целью задания запрещенных вопросов, обращения к файлам, содержащим интересующую информацию; маскировкой под истинного пользователя после получения характеристик (идентификаторов) доступа; использованием служебного положения, т.е. незапланированного просмотра (ревизии) информации файлов сотрудниками вычислительной установки.

Активное проникновение в СОД может осуществляться скрытно, т.е. в обиход контрольных программ обеспечения сохранности информации.

Наиболее характерные приемы проникновения: использование точек входа, установленных в системе программистами, обслуживающим персоналом, или точек, обнаруженных при проверке цепей системного контроля; подключение к сети связи специального терминала, обеспечивающего вход в систему путем пересечения линии связи законного пользователя с ЭВМ с последующим восстановлением связи по типу ошибочного сообщения, а также в момент, когда законный пользователь не проявляет активности, но продолжает занимать канал связи; аннулирование сигнала пользователя о завершении работы с системой и последующее продолжение работы от его имени.

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

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

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

2. Требования к защите информационных систем.

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

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

Организационные требования к системе защиты реализуются совокупностью административных и процедурных мероприятий. Требования по обеспечению сохранности должны выполняться прежде всего на административном уровне. С этой целью: - ограничивается несопровождаемый доступ к вычислительной системе (регистрация и сопровождение посетителей); - осуществляется контроль за изменением в системе программного обеспечения; - выполняется тестирование и верификация изменения в системе программного обеспечения и программах защиты; - организуется и поддерживается взаимный контроль за выполнением правил обеспечения сохранности данных; - ограничиваются привилегии персонала, обслуживающего СОД; - осуществляется запись протокола о доступе к системе; - гарантируется компетентность обслуживающего персонала.

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

С точки зрения обеспечения доступа к СОД необходимо выполнять следующие процедурные мероприятия: - разработать и утвердить письменные инструкции на запуск и останов системы; - контролировать использование магнитных лент, дисков, карт, листингов, порядок изменения программного обеспечения и доведение этих изменений до пользователя. - разработать процедуру восстановления системы при сбойных ситуациях; - установить политику ограничений при разрешенных визитах в вычислительный центр и определить объем выдаваемой информации; - разработать систему протоколирования использования ЭВМ, ввода данных и вывода результатов; - обеспечить проведение периодической чистки архивов и хранилищ лент, дисков, карт для исключения и ликвидации неиспользуемых; - поддерживать документацию вычислительного центра в соответствии с установленными стандартами.

3. Классификация схем защиты информационных систем.

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

Следует иметь в виду, что все типы защиты взаимосвязаны и при выполнении своих функций хотя бы одной из них сводит на нет усилия других. Предлагаемые и реализованные схемы защиты информации в СОД очень разнообразны, что вызвано в основном выбором наиболее удобного и легко осуществимого метода контроля доступа, т.е. изменением функциональных свойств системы.

В качестве классификационного признака для схем защиты можно выбрать их функциональные свойства. На основе этого признака выделяются системы: без схем защиты, с полной защитой, с единой схемой защиты, с программируемой схемой защиты и системы с засекречиванием. В некоторых системах отсутствует механизм, препятствующий пользователю в доступе к какой-либо информации, хранящейся в системе. Характерно, что большинство наиболее распространенных и широко применяемых за рубежом СОД с пакетной обработкой не имеют механизма защиты. Однако такие системы содержат обычно развитый аппарат обнаружения и предотвращения ошибок, гарантирующий исключение разрушений режима функционирования.

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

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

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

Защищаемая подсистема представляет собой cовокупность программ и данных, правом доступа к которым наделены лишь входящие в подсистему программы.Обращение к этим программам возможно, в свою очередь, только в заранее ограниченных точках. Таким образом, программы подсистемы контролируют доступ к защищаемым объектам. Подобный механизм защиты с различными модификациями реализован только в наиболее совершенных СОД.

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

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

Вопросы организации защиты информации должны решаться уже на предпроектной стадии разработки СОД.

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

  1. Основы программирования.

Общее понятие алгоритма

Понятие алгоритма - одно из основных понятий программирования и математики. Алгоритм - это последовательность команд, предназначенная исполнителю, в результате выполнения которой он должен решить поставленную задачу. Алгоритм записывается на формальном языке, исключающем неоднозначность толкования. Исполнитель - это человек, компьютер, автоматическое устройство и т.п. Он должен уметь выполнять все команды, составляющие алгоритм, причем механически, "не раздумывая".

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

В математике рассматриваются различные виды алгоритмов - программы для машин Тьюринга, алгоритмы Маркова (нормальные алгоритмы), частично рекурсивные функции и т.п. Знаменитый тезис Чёрча утверждает, что все виды алгоритмов эквивалентны друг другу, т.е. классы задач, решаемых разными типами алгоритмов, всегда совпадают. Тезис этот недоказуем (можно лишь доказать совпадение для двух конкретных типов алгоритмов, например, машин Тьюринга и нормальных алгоритмов), но никто в его верности не сомневается. Так что все языки программирования эквивалентны друг другу и различаются лишь тем, насколько они удобны для решения конкретных классов задач. Например, объектно-ориентированные языки оптимальны для программирования в оконных средах, а язык Фортран успешно применяется в научных и инженерных расчетах.

Большинство используемых в программировании алгоритмических языков имеют общие черты. В то же время, при изложении идеи алгоритма, например, при публикации в научной статье, не всегда целесообразно пользоваться каким-либо конкретным языком программирования, чтобы не загромождать изложение несущественными деталями. В таких случаях применяется неформальный алгоритмический язык, максимально приближенный к естественному. Язык такого типа называют псевдокодом. Для специалиста не составляет труда переписать программу с псевдокода на любой конкретный язык программирования. Запись алгоритма на псевдокоде зачастую яснее и нагляднее, она дает возможность свободно выбирать уровень детализации, начиная от описания в самых общих чертах и кончая подробным изложением.

Псевдокод объединяет существенные черты множества алгоритмических языков. Для записи алгоритмов в данном курсе будет использоваться как псевдокод, так и конкретные языки: Си, C++ и C#.

Алгоритмические языки

Программирование начиналось с записи программ непосредственно в виде машинных команд (в кодах, как говорят программисты). Позже для облегчения кодирования был разработан язык Ассемблера, который позволяет записывать машинные команды в символическом виде. Например, программисту не нужно помнить числовой код операции сложения, вместо этого можно использовать символическое обозначение ADD. Язык Ассемблера зависит от системы команд конкретного компьютера. Он достаточно удобен для программирования небольших задач, требующих максимальной скорости выполнения. Однако крупные проекты разрабатывать на языке Ассемблера трудно. Главная проблема состоит в том, что программа, написанная на Ассемблере, привязана к архитектуре конкретного компьютера и не может быть перенесена на другие машины. При усовершенствовании компьютера все программы на Ассемблере приходится переписывать заново.

Почти сразу с возникновением компьютеров были разработаны языки высокого уровня, т.е. языки, не зависящие от конкретной архитектуры. Для выполнения программы на языке высокого уровня ее нужно сначала перевести на язык машинных команд. Специальная программа, выполняющая такой перевод, называется транслятором или компилятором. Оттранслированная программа затем выполняется непосредственно компьютером. Существует также возможность перевода программы на промежуточный язык, не зависящий от архитектуры конкретного компьютера, но тем не менее максимально приближенный к языку машинных команд. Затем программа на промежуточном языке выполняется специальной программой, которая называется интерпретатором. Возможен также вариант компиляции "на лету" (Just In Time Compilation), когда выполняемый фрагмент программы переводится с промежуточного языка на язык машинных команд непосредственно перед выполнением.

Наиболее распространенные компилируемые языки - это Си, C++, Фортран, Паскаль. Интерпретируемые и компилируемые на лету языки - это в основном объектно-ориентированные языки, такие как Java, Visual Basic и C#. Все они вначале переводятся на промежуточный язык: для Java это так называемый байткод языка Java, для Visual Basic и C# - так называемый промежуточный язык (Intermediate Language или просто IL), являющийся одним из основных компонентов платформы ".Net" фирмы Microsoft. Промежуточный язык может интерпретироваться специальным исполнителем (например, виртуальной Java-машиной), но, как правило, в современных системах применяется компиляция на лету, что позволяет достичь большего быстродействия.

Исторически одним из первых языков высокого уровня был Фортран. Он оказался исключительно удачным - простым и в то же время очень эффективным. До сих пор большая часть научных и инженерных программ написана на Фортране. Тем не менее, в последние 20 лет программисты отдают предпочтение языку Си и связанной с ним линии объектно-ориентированных языков - C++, Java и C#.

Другой значительной вехой в истории алгоритмических языков является разработка языка Алгол-60 (расшифровывается как aлгоритмический язык - ALGOrithmic Language). Возникновение языка Алгол-60 связано с развитием структурного подхода к программированию, в котором используется вложение конструкций языка друг в друга. Так, основная единица языка - оператор - может быть простым или составным, т.е. состоящим в свою очередь из нескольких операторов, заключенных в блок с помощью ключевых слов begin и end. Внутри блока можно описывать локальные переменные, недоступные извне блока, и даже подпрограммы или функции.

Язык Алгол-60 способствовал развитию алгоритмических языков, его наследником является, например, Паскаль и вся линия связанных с ним языков: Modula-2, Oberon и Delphi. Тем не менее, Алгол-60 оказался далеко не таким удачным, как Фортран. В нем присутствовали непродуманные решения, в частности, возможность вложения подпрограмм внутрь других подпрограмм, а также неудачный механизм передачи параметров подпрограмм. Из-за этого Алгол-60 не был реализован на практике в полном соответствии со стандартом (в отличие от языков типа Алгамс, отступавших от стандарта в сторону простоты и удобства использования). Язык Паскаль появился тоже как коррекция Алгола-60, но, к сожалению, унаследовал его главное неудачное решение - вложенность подпрограмм друг в друга. Также в первоначальном варианте языка Паскаль отсутствовала возможность разбиения программы на файлы. Эти недостатки были затем исправлены автором Паскаля, замечательным швейцарским ученым и педагогом Никлаусом Виртом, в языках Modula-2 и Oberon. Но, к сожалению, программистское сообщество проигнорировало язык Oberon, остановившись на немного улучшенном варианте языка Паскаль. В настоящее время Паскаль, как правило, используется для обучения программированию, но не в практической работе.

Наконец, самый успешный язык программирования - язык Си и связанная с ним линия объектно-ориентированных языков: C++, Java, C#. В отличие от Алгола-60, язык Си был создан не теоретиками, а практическими программистами, обладающими при этом высокой математической культурой. Язык был разработан в конце 60-х годов XX века. Он впервые позволил реально избавиться от Ассемблера при создании операционных систем. Например, практически весь текст операционной системы Unix написан на языке Си и, таким образом, не зависит от конкретного компьютера. Главным достоинством Си является его простота и отсутствие псевдонаучных решений (таких, как вложенность блоков программ друг в друга: в Си функция не может содержать внутри себя другую функцию, а переменные четко разделяются на глобальные и локальные - не так, как в Алголе, где локальные переменные подпрограммы являются глобальными для всех вложенных в нее подпрограмм). Просто и ясно описан механизм передачи параметров в функцию (только по значению). Программист, создающий программу на Си, всегда четко понимает, как эта программа будет выполняться. Понятие указателя, статические и автоматические (стековые) переменные языка Си максимально близко отражают устройство любого современного компьютера, поэтому программы на Си эффективны и удобны для отладки.

В настоящее время подавляющая часть программ пишется на языках Си и C++. Интерфейс любой операционной системы (так называемый API - Application Program Interface), т.е. набор системных вызовов, предназначенных для разработчиков прикладных программ, как правило, представляет собой набор функций на языке Си. Наконец, современные объектно-ориентированные языки также основаны на языке Си. Это язык C++, занимающий промежуточное положение между традиционными и объектно-ориентированными языками, а также объектно-ориентированные языки Java и C#.

В курсе будем использовать псевдокод для неформальной записи алгоритмов, а также языки Си, C++ и C# для практического программирования. Применение объектно-ориентированных языков C++ и C# значительно облегчает программирование оконных приложений в системах типа Windows, тогда как при разработке программ, не связанных с графическим интерфейсом (например, математических расчетов), можно обойтись и более простым языком Си.

Управляющие конструкции алгоритмического языка

Большинство алгоритмических языков относится к так называемым процедурным языкам, в которых основной единицей является оператор. Оператор представляет собой команду на выполнение некоторого действия. Язык, таким образом, состоит в основном из фраз в повелительном наклонении. Альтернативой операторам являются описания, определяющие объекты или типы объектов и их взаимосвязи. Считается, что чем больший процент составляют описания, тем более совершенным является язык. Существуют алгоритмические языки, состоящие в основном из описаний (функциональные языки), однако, данный курс ограничивается процедурными языками.

Всякий алгоритм предназначен исполнителю, который однозначно понимает команды алгоритма. Пример: опишем алгоритм проезда от Аэровокзала в Москве до аэропорта Домодедово.

алгоритм Проезд от Аэровокзала до Домодедово через МКАД

| Дано: находимся у Аэровокзала

| Надо: оказаться в аэропорту Домодедово

начало алгоритма

| повернуть направо на центральный проезд

| Ленинградского проспекта в сторону центра;

| проехать до второго светофора;

| выполнить разворот на перекрестке

| проехать по Ленинградскому проспекту из центра

| до пересечения с Московской кольцевой дорогой;

| переехать мост над кольцевой дорогой и

| повернуть направо на внешнюю часть кольцевой дороги;

| двигаться по кольцевой дороге в направлении против

| часовой стрелки до Каширского шоссе;

| повернуть направо на Каширское шоссе в сторону из города;

| двигаться, никуда не сворачивая, до

| аэропорта Домодедово;

конец алгоритма

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

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

алгоритм Оптимальный путь от Аэровокзала до Домодедово

| Дано: находимся у Аэровокзала

| Надо: оказаться в аэропорту Домодедово

начало алгоритма

| если нет пробки на Ленинградском проспекте

| | в направлении из центра

| | то

| | // ...выполняем предыдущий алгоритм...

| | Проезд от Аэровокзала до Домодедово через МКАД

| | иначе

| | повернуть направо на боковой проезд

| | Ленинградского проспекта в сторону центра;

| | доехать до пересечения с Беговой улицей;

| | повернуть направо на Третье транспортное кольцо;

| | ехать по Третьему транспортному кольцу против

| | часовой стрелки до пересечения с Варшавским шоссе;

| | повернуть направо на Варшавское шоссе

| | в сторону из центра;

| | ехать прямо до развилки с Каширским шоссе;

| | на развилке с Каширским шоссе проехать прямо в сторону

| | Каширского шоссе; // Варшавское уходит направо

| | двигаться, никуда не сворачивая, до

| | аэропорта Домодедово;

| конец если

конец алгоритма

Здесь исполнитель алгоритма сначала должен проверить условие

нет пробки на Ленинградском проспекте

в направлении из центра

Если это условие истинно, то выполняется первый алгоритм "Проезд от Аэровокзала до Домодедово через МКАД"; если ложно - часть алгоритма между строками "иначе" и "конец если". Следует отметить, что

1) здесь выполняется алгоритм "Проезд от Аэровокзала до Домодедово через МКАД", описанный ранее. Возможность использования (вызова) описанных ранее алгоритмов является важной чертой любого алгоритмического языка, позволяющей строить более сложные алгоритмы из имеющихся заготовок;

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

Второй важнейшей конструкцией алгоритмического языка является конструкция "цикл пока". Заголовок цикла состоит из ключевых слов "цикл пока", за которыми следует некоторое условие. Дальше записывается тело цикла, завершаемое строкой "конец цикла". При выполнении цикла исполнитель сначала проверяет условие в заголовке тела цикла. Если условие истинно, то выполняется тело цикла. Затем вновь проверяется условие в заголовке цикла, опять выполняется тело цикла, если условие истинно, и так до бесконечности. Если же условие ложно с самого начала или становится ложным в результате предыдущего выполнения тела цикла, то тело цикла не выполняется и цикл завершается. Таким образом, по выходу из цикла условие, записанное в его заголовке, всегда ложно. Если условие ложно перед началом цикла, то цикл не выполняется ни разу! Программисты иногда называют "цикл пока" циклом с предусловием, поскольку условие продолжения цикла проверяется перед выполнением тела цикла, а не после него. Иногда используют циклы с постусловием (do... while), когда тело цикла всегда выполняется хотя бы один раз, а условие продолжения проверяется после каждой итерации. Всегда предпочтительнее использовать цикл с предусловием, это помогает избежать многих ошибок.

Для иллюстрации конструкции "цикл пока" можно привести следующую модификацию алгоритма проезда.

алгоритм Добраться из Аэровокзала до Домодедово

| Дано: находимся у Аэровокзала

| Надо: оказаться в аэропорту Домодедово

начало алгоритма

|

| цикл пока пробка на Ленинградском проспекте

| | выпить чашку кофе в кафе Аэровокзала

| | ждать полчаса

| конец цикла

|

| Проезд от аэровокзала до Домодедово через МКАД

конец алгоритма

Здесь снова использован определенный ранее алгоритм "Проезд от аэровокзала до Домодедово". Условие продолжения цикла проверяется перед выполнением тела цикла, но не в процессе его выполнения! Так, если пробка рассосалась после чашки кофе, то все равно нужно ждать полчаса.

Теперь можно подвести итоги.

Запись алгоритма на неформальном языке представляет собой последовательность команд исполнителю алгоритма. Запись может также включать управляющие конструкции: ветвление, или условный оператор, и цикл "пока". Условный оператор выглядит следующим образом:

если условие

| то

| последовательность действий 1

| иначе

| последовательность действий 2

конец если

Последовательность действий 1 выполняется, когда условие истинно; в противном случае выполняется последовательность действий 2. Ключевое слово "иначе" и последовательность действий 2 могут отсутствовать; в этом случае, когда условие ложно, исполнитель ничего не делает.

Цикл "пока", или цикл с предусловием выглядит следующим образом:

цикл пока условие

| последовательность действий

конец цикла

Сначала проверяется условие в заголовке цикла. Если оно истинно, то выполняется последовательность действий, составляющая тело цикла. Это повторяется неограниченное число раз, пока условие истинно. Цикл заканчивается, когда условие при очередной проверке оказывается ложным. Важно отметить, что условие проверяется перед каждым выполнением тела цикла, но не в процессе его выполнения.

Помимо элементарных действий, в записи алгоритма можно использовать другие алгоритмы. Для вызова другого алгоритма нужно просто указать его название. (В некоторых языках, например, в Фортране, для вызова алгоритма используется ключевое слово CALL.) Также в записи алгоритма могут присутствовать комментарии, которые игнорируются исполнителем алгоритма. Для отделения комментария будут использоваться знаки // (двойная косая черта) в соответствии с синтаксисом языка C++.

Понятие переменной

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

Запись алгоритма для универсального исполнителя может включать команды, адресованные ему непосредственно, а также команды, которые нужно передать подчиненным исполнителям. В чем разница между универсальным и простейшими подчиненными исполнителями?

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

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

Значение каждого параметра хранится в определенном участке памяти компьютера и может меняться в процессе выполнения алгоритма. Такой участок памяти компьютера называется переменной. Понятие переменной - важнейшее понятие алгоритмического языка. Переменные встроены в конструкцию универсального исполнителя.

Каждой переменной присваивается имя. В рассмотренном примере используются переменные "скорость", "обороты двигателя", "передача", "нагрузка", "температура", "обогащенность смеси", "угол опережения зажигания" и другие. С каждой переменной связан ее тип, т.е. множество значений, которое она может принимать. Например, "передача" принимает целые значения от 1 до 5 (обратная и первая передачи не различаются), тогда как "скорость", а также "обогащенность смеси" принимают вещественные значения (скорость измеряется в м/сек, обогащенность смеси может измеряться либо соотношением кислорода и паров бензина в единице объема, либо в процентах относительно стехиометрической смеси 14/1, соответствующей полному сгоранию паров бензина).

С переменной можно выполнять два действия:

прочитать текущее значение переменной;

записать новое значение в переменную или, как говорят программисты, присвоить новое значение переменной.

В алгоритмическом языке чтение значения переменной выполняется в результате использования ее имени в любом выражении. Запись нового значения переменной выполняется с помощью так называемого оператора присваивания. Он выглядит следующим образом:

имя переменной := выражение;

Знак := читается как присвоить значение. Во многих языках вместо него используется просто знак равенства:

имя переменной = выражение;

При выполнении оператора присваивания сначала вычисляется значение выражения в правой части, затем оно записывается в переменную, имя которой указано в левой части. Старое значение переменной при этом стирается. Например, скорость автомобиля вычисляется по количеству импульсов от датчика скорости в единицу времени: датчик скорости посылает 6 импульсов на каждый пройденный метр.

скорость := число импульсов от датчика скорости /

(6 * интервал времени);

Переменная "число импульсов от датчика скорости" в течение каждого интервала времени суммирует число импульсов. В начале каждого интервала она обнуляется. Полученная в результате скорость выражается в м/с. Если нужно получить скорость в км/час, то дополнительно выполняется следующее действие:

скорость := скорость * 3600 / 1000;

Здесь переменная "скорость" входит как в правую, так и в левую части оператора присваивания. В правой части используется старое значение этой переменной, вычисленное в м/сек. Поскольку час содержит 3600 секунд, то при домножении на 3600 получается расстояние в метрах, проходимое за 1 час; после деления на 1000 получается расстояние в километрах. Вычисленное значение затем присваивается переменной "скорость".

Суммируем сказанное выше:

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

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

переменная - это область памяти универсального исполнителя, хранящая порцию информации. Любая переменная имеет имя и тип. Тип переменной определяется множеством всех значений, которые она может принимать. Память универсального исполнителя можно рассматривать как набор переменных;

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

имя переменной := выражение;

При его выполнении сначала вычисляется значение выражения справа от знака присваивания :=, затем оно записывается в переменную. Выражение в правой части может включать имя переменной в левой части. В этом случае при вычислении выражения используется старое значение переменной.

Типы переменных

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

Целочисленные переменные

Тип целое число является основным для любого алгоритмического языка. Связано это с тем, что содержимое ячейки памяти или регистра процессора можно рассматривать как целое число. Адреса элементов памяти также представляют собой целые числа, с их помощью записываются машинные команды и т.д. Символы представляются в компьютере целыми числами - их кодами в некоторой кодировке. Изображения также задаются массивами целых чисел: для каждой точки цветного изображения хранятся интенсивности ее красной, зеленой и синей составляющей (в большинстве случаев - в диапазоне от 0 до 255). Как говорят математики, целые числа даны свыше, все остальное сконструировал из них человек.

Общепринятый в программировании термин целое число или целочисленная переменная, строго говоря, не вполне корректен. Целых чисел бесконечно много, десятичная или двоичная запись целого числа может быть сколь угодно длинной и не помещаться в области памяти, отведенной под одну переменную. Целая переменная в компьютере может хранить лишь ограниченное множество целых чисел в некотором интервале. В современных компьютерах под целую переменную отводится 4 байта, т.е. 32 двоичных разряда. Она может хранить числа от нуля до 2 в 32-й степени минус 1. Таким образом, максимальное целое число, которое может храниться в целочисленной переменной, равно

232 - 1 = 4294967295

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

a+b = b+a, ab = ba

(a+b) + c = a+(b+c), (ab)c = a(bc)

a(b+c) = ab+ac

Кольцо вычетов по модулю m

Целочисленный тип компьютера в точности соответствует важнейшему понятию математики - понятию кольца вычетов по модулю m. В качестве m выступает число 232 = 4294967296. В математике кольцо Zm определяется следующим образом. Все множество целых чисел Z разбивается на m классов, которые называются классами эквивалентности. Каждый класс содержит числа, попарная разность которых делится на m. Первый класс содержит числа

{...,-2m,-m,0,m,2m, ...}

второй

{..., -2m+1, -m+1, 1, m+1, 2m+1, ...}

последний

{..., -m-1, -1, m-1, 2m-1, 3m-1, ...}

Элементами кольца Zm являются классы эквивалентности. Их ровно m, так что, в отличие от множества целых чисел Z, кольцо Zm содержит конечное число элементов. Операции с классами выполняются следующим образом: надо взять по одному представителю из каждого класса, произвести операцию и определить, в какой класс попадает результат. Этот класс и будет результатом операции. Легко показать, что он не зависит от выбора представителей.

Все числа, принадлежащие одному классу эквивалентности, имеют один и тот же остаток при делении на m. Таким образом, класс эквивалентности однозначно определяется остатком от деления на m. Традиционно остаток выбирается неотрицательным, в диапазоне от 0 до m -1. Остатки используют для обозначения классов, при этом используются квадратные скобки. Так, выражение [5] обозначает класс эквивалентности, состоящий из всех чисел, остатки которых при делении на m равны пяти. Все кольцо Zm состоит из элементов

[0],[1],[2], ...,[m-1],

например, кольцо Z5 состоит из элементов

[0],[1],[2],[3],[4].

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

3%5 = 3,

17%5 = 2,

(-3)%5 = 2,

(-17)%5 = 3.

Отсюда видно, что в школьной математике не выполняется равенство

(-a)%b = -(a%b),

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

3%5 = 3,

17%5 = 2,

(-3)%5 = -3,

(-17)%5 = -2.

При делении на положительное число знак остатка совпадает со знаком делимого. При таком определении тождество

(-a)%b = a%(-b) = -(a%b)

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

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

0,1,2,3, ...m-1.

Очень удобна также симметричная система остатков, состоящая из отрицательных и неотрицательных чисел, не превосходящих m/2 по абсолютной величине. Пусть

k = целая часть(m/2)

тогда симметричная система остатков при нечетном m состоит из элементов

-k, -k+1, ..., -1, 0, 1, ..., k-1, k,

а при четном m - из элементов

-k, -k+1, ..., -1, 0, 1, ..., k-1.

Например, при m = 5 симметричная система остатков состоит из элементов

-2, -1, 0, 1, 2.

Кольцо Zm можно представлять состоящим из элементов, принадлежащих выбранной системе остатков. Арифметические операции определяются следующим образом: надо взять два остатка, произвести над ними операцию как над обычными целыми числами и выбрать тот остаток, которой лежит в том же классе эквивалентности, что и результат операции. Например, для симметричной системы остатков множества Z5 имеем:

1+1 = 2, 1+2 = -2,

1+(-2) = -1, 1+(-1) = 0,

(-2)+2 = 0, (-2)+(-2) = 1.

Интерпретация положительных и отрицательных чисел

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

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

Следует также отметить, что симметричная система остатков кольца Zm в случае четного m (а m для компьютера равно 232, т.е. четно) не вполне симметрична. Поскольку ноль не имеет знака, то число положительных остатков не может равняться числу отрицательных.

Какой остаток выбрать в классе эквивалентности числа k = m/2? Для этого элемента выполняется непривычное с точки зрения школьной математики равенство

k+k 0 (mod m),

т.е.

k -k (mod m)

Как отрицательный остаток -k, так и положительный k в равной мере подходят для представления этого класса эквивалентности. По традиции выбирается отрицательный остаток. Таким образом, в компьютере количество отрицательных целых чисел на единицу больше, чем количество положительных. Так как m = 232 = 4294967296, то k = 231 = 2147483648, и симметричная система остатков состоит из элементов

-2147483648, -2147483647, ..., -2, -1, 0, 1, 2, ..., 2147483647.

В двоичном представлении старший разряд у отрицательных целых чисел равен единице, у положительных - нулю. Двоичные разряды представления целого числа в программировании нумеруют от 0 до 31 справа налево. Старший разряд имеет номер 31 и часто называется знаковым разрядом. Таким образом, знаковый разряд равен единице у всех отрицательных чисел и нулю у неотрицательных. Двоичное представление максимального по абсолютной величине отрицательного числа k состоит из единицы и тридцати одного нуля:

-214748364810 = 100000000000000000000000000000002

Двоичное представление числа -1 состоит из тридцати двух единиц:

-110 = 111111111111111111111111111111112

Двоичное представление максимального положительного числа состоит из нуля в знаковом разряде и тридцати одной единицы:

214748364710 = 011111111111111111111111111111112

Следует отметить, что в программировании часто используют также короткие целые числа, двоичная запись которых занимает восемь разрядов, т.е. один байт, или шестнадцать разрядов, т.е. два байта. Работа с такими короткими целыми числами поддерживается на аппаратном уровне. В языке Си однобайтовым целым числам соответствует тип char (тип char в Си - это именно целые числа, символы представляются их целочисленными кодами), двухбайтовым - тип short. Однобайтовые целые числа - это элементы кольца вычетов Zm, где m = 28 = 256. Симметричная система остатков в этом случае состоит из элементов

-128, -127, ..., -2, -1, 0, 1, 2, ..., 127.

В случае двухбайтовых целых чисел (тип short) m = 216 = 65536, а симметричная система остатков состоит из элементов

-32768, -32767, ..., -2, -1, 0, 1, 2, ..., 32767.

Вещественные переменные

Вещественные числа представляются в компьютере в так называемой экспоненциальной, или плавающей, форме. Вещественное число r имеет вид

r = ±2e* m

Представление числа состоит из трех элементов:

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

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

мантисса m представляет собой фиксированное количество разрядов двоичной записи вещественного числа в диапазоне от 1 до 2:

1 m<2

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

В языке Си вещественным числам соответствуют типы float и double. Элемент типа float занимает 4 байта, в которых один бит отводится под знак, восемь - под порядок, остальные 23 - под мантиссу (на самом деле, в мантиссе 24 разряда, но старший разряд всегда равен единице, поэтому хранить его не нужно). Тип double занимает 8 байтов, в них один разряд отводится под знак, 11 - под порядок, остальные 52 - под мантиссу. На самом деле в мантиссе 53 разряда, но старший всегда равен единице и поэтому не хранится. Поскольку порядок может быть положительным и отрицательным, в двоичном коде он хранится в смещенном виде: к нему прибавляется константа, равная абсолютной величине максимального по модулю отрицательного порядка. В случае типа float она равна 127, в случае double - 1023. Таким образом, максимальный по модулю отрицательный порядок представляется нулевым кодом.

Основным типом является тип double, именно он наиболее естественен для компьютера. В программировании следует по возможности избегать типа float, так как его точность недостаточна, а процессор все равно при выполнении операций преобразует его в тип double. (Один из немногих случаев, где применение типа float оправдано, - трехмерная компьютерная графика.)

Несколько примеров представления вещественных чисел в плавающей форме:

1.0 = +20*1.0

Здесь порядок равен 0, мантисса - 1. В двоичном коде мантисса состоит из одних нулей, так как старший разряд мантиссы (всегда единичный) в коде отсутствует. Порядок хранится в двоичном коде в смещенном виде, он равен 127 в случае float и 1023 в случае double;

3.5 = +21*1.75

Порядок равен единице, мантисса состоит из трех единиц, из которых в двоичном коде хранятся две: 1100...0; смещенный порядок равен 128 для float и 1024 для double;

0.625 = +2-1*1.25

Порядок отрицательный и равен -1, дробная часть мантиссы равна 0100...0; смещенный порядок равен 126 для float и 1022 для double;

100.0 = +26*1.5625

Порядок равен шести, дробная часть мантиссы равна 100100...0; смещенный порядок равен 133 для float и 1029 для double.

При выполнении сложения двух положительных плавающих чисел происходят следующие действия:

выравнивание порядков. Определяется число с меньшим порядком. Затем последовательно его порядок увеличивается на единицу, а мантисса делится на 2, пока порядки двух чисел не сравняются. Аппаратно деление на 2 соответствует сдвигу двоичного кода мантиссы вправо, так что эта операция выполняется быстро. При сдвигах правые разряды теряются, из-за этого может произойти потеря точности (в случае, когда правые разряды ненулевые);

сложение мантисс;

нормализация: если мантисса результата стала равна или превысила двойку, то порядок увеличивается на единицу, а мантисса делится на 2. В результате этого мантисса попадает в интервал 1 m<2. При этом возможна потеря точности, а также переполнение, когда порядок превышает максимально возможную величину.

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

Машинный эпсилон

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

a+b = a при b 0

Более того, для сложения не выполняется закон ассоциативности:

a+(b+c) (a+b)+c

Действительно, пусть ε - максимальное плавающее число среди чисел, удовлетворяющих условию

1.0+ε = 1.0

(приведенные выше рассуждения показывают, что такие числа существуют). Тогда

(1.0+ε)+ε 1.0+(ε+ε)

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

Число ε часто называют машинным эпсилоном или, чуть менее корректно, машинным нулем, поскольку при прибавлении к единице оно ведет себя как ноль. Величина машинного эпсилона характеризует точность операций компьютера. Она примерно одинакова для всех современных компьютеров: большинство процессоров работают с восьмибайтовыми плавающими числами (тип double в Си), а арифметика плавающих чисел подчиняется строгим международным стандартам.

Оценим величину машинного эпсилона для типа double. Число 1.0 записывается в плавающей форме как

1.0 = +20*1.0.

Порядок плавающего числа 1.0 равен нулю. При сложении 1.0 с числом ε производится выравнивание порядка путем многократного сдвига мантиссы числа ε вправо и увеличения его порядка на 1. Поскольку все разряды числа ε должны в результате выйти за пределы разрядной сетки, должно быть выполнено 53 сдвига. Порядок числа ε после этого должен стать равным порядку числа 1.0, т.е. нулю. Следовательно, изначально порядок числа ε должен быть равным -53:

ε = 2-53*m

где m - число в диапазоне от единицы до двух. Таким образом, величина машинного эпсилона составляет примерно

2-53 10-16

Приблизительно точность вычислений составляет 16 десятичных цифр. (Это также можно оценить следующим образом: 53 двоичных разряда составляют примерно 15.95 десятичных, поскольку 53/log210 53/3.321928 15.95.)

В случае четырехбайтовых плавающих чисел (тип float языка Си) точность вычислений составляет примерно 7 десятичных цифр. Это очень мало, поэтому тип float чрезвычайно редко применяется на практике. К тому же процессор сконструирован для работы с восьмибайтовыми вещественными числами, а при работе с четырехбайтовыми он все равно сначала приводит их к восьмибайтовому типу. В программировании следует избегать типа float и всегда пользоваться типом double.

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

Кроме потери точности, при операциях с вещественными числами могут происходить и другие неприятности:

переполнение - когда порядок результата больше максимально возможного значения. Эта ошибка часто возникает при умножении больших чисел;

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

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

бесконечно большое число - это плавающее число с очень большим положительным порядком и, таким образом, очень большое по абсолютной величине. Оно может иметь знак плюс или минус;

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

Not a Number, или NaN - двоичный код, который не является корректным представлением какого-либо вещественного числа.

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

Запись вещественных констант

Вещественные константы записываются в двух формах - с фиксированной десятичной точкой или в экспоненциальном виде. В первом случае точка используется для разделения целой и дробной частей константы. Как целая, так и дробная части могут отсутствовать. Примеры:

1.2, 0.725, 1., .35, 0.

В трех последних случаях отсутствует либо дробная, либо целая часть. Десятичная точка должна обязательно присутствовать, иначе константа считается целой. Отметим, что в программировании именно точка, а не запятая, используется для отделении дробной части; запятая обычно служит для разделения элементов списка.

Экспоненциальная форма записи вещественной константы содержит знак, мантиссу и десятичный порядок (экспоненту). Мантисса - это любая положительная вещественная константа в форме с фиксированной точкой или целая константа. Порядок указывает степень числа 10, на которую домножается мантисса. Порядок отделяется от мантиссы буквой "e" (от слова exponent), она может быть прописной или строчной. Порядок может иметь знак плюс или минус, в случае положительного порядка знак плюс можно опускать. Примеры:

1.5e+6 константа эквивалентна 1500000.0

1e-4 константа эквивалентна 0.0001

-.75E3 константа эквивалентна -750.0

Символьные переменные

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

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

диапазоном значений кодов. Например, самая распространенная в мире кодировка ASCII (от слов American Standard Code of Information Interchange - Американский стандартный код обмена информацией) имеет диапазон значений кодов от 0 до 127, т.е. требует семь бит на символ. Большинство современных кодировок имеют диапазон кодов от 0 до 255, т.е. один байт на символ. Наконец, сейчас во всем мире осуществляется переход на кодировку Unicode, которая использует коды в диапазоне от 0 до 65535, т.е. 2 байта на символ;

множеством изображаемых символов. Например, кодировка ASCII содержит буквы латинского алфавита, в западноевропейской кодировке к символам ASCII добавлены буквы с умлаутами и акцентами, дополнительные знаки препинания, в частности, испанские перевернутые вопросительные и восклицательные знаки, и другие символы европейских языков, основанных на латинской графике. Любая из русских кодировок содержит кириллицу;

отображением множества кодов на множество символов. Например, русские кодировки КОИ-8 (Код обмена информацией восьмибитовый) и "Windows CP-1251", традиционно используемые в операционных системах Unix и MS Windows, имеют один и тот же диапазон кодов и один и тот же набор символов, но отображения их различны (одни и те же символы имеют разные коды в кодировках КОИ-8 и Windows).

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

кодировка КОИ-8 (это наиболее старый стандарт, принятый еще в конце 70-х годов XX века). КОИ-8 в основном используется в системе Unix и до недавнего времени была стандартом де-факто для русскоязычной электронной почты. Последнее время, однако, все чаще в электронной почте используют кодировку Windows;

так называемая альтернативная кодировка CP-866, которая используется в системе MS DOS. Она не удовлетворяет некоторым требованиям международных стандартов - например, ряд русских букв совпадает с кодами символов, используемых для управления передачей по линии. Альтернативная кодировка постепенно уходит в прошлое вместе с системой DOS;

кодировка Windows CP-1251, которая появилась значительно позже кодировки КОИ-8, но создатели русской версии Windows не захотели воспользоваться КОИ-8 (по-видимому, из-за того, что коды русских букв в КОИ-8 не упорядочены в соответствии с алфавитом; в CP-1251 коды русских букв упорядочены, за исключением буквы е). В связи с распространением операционной системы Windows, кодировка Windows получает все большее распространение;

кодировка, используемая в компьютерах Apple Macintosh.

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

С повсеместным переходом на кодировку Unicode все проблемы такого рода должны исчезнуть. Кодировка Unicode включает символы алфавитов всех европейских стран и кириллицу. К сожалению, большинство существующих компьютерных программ приспособлено к представлению одного символа в виде одного байта. Поэтому в настоящее время часто используется промежуточное решение: компьютерные программы работают с внутренним представлением символов в кодировке Unicode (такое решение принято в языках Java и C#). При записи в файл символы Unicode приводятся к однобайтовой кодировке в соответствии с текущей языковой установкой. При этом, конечно, часть символов теряется - например, в кодировке Windows невозможно одновременно записать русские буквы и немецкие умлауты, поскольку умлауты в западно-европейской кодировке имеют те же коды, что и русские буквы в русской кодировке.

Логические переменные и выражения

Логические переменные принимают два значения: истина и ложь. Логические, или условные, выражения используются в качестве условия в конструкциях ветвления "если ... то ... иначе ... конец если" и цикла "пока". В первом случае в зависимости от истинности условия выполняется либо ветвь программы после ключевого слова "то", либо после "иначе"; во втором случае цикл выполняется до тех пор, пока условие продолжает оставаться истинным.

В качестве элементарных условных выражений используются операции сравнения: можно проверить равенство двух выражений или определить, какое из них больше. Любая операция сравнения имеет два аргумента и вырабатывает логическое значение "истина" или "ложь" (true и false в языке C++). Мы будем обозначать операции сравнения так, как это принято в языке Си:

операция проверки равенства двух выражений обозначается двойным знаком равенства == (мы не используем обычный знак равенства во избежание путаницы, поскольку часто знак равенства применяется для обозначения операции присваивания);

неравенство обозначается != (в Си восклицательный знак используется для отрицания);

для сравнения величин выражений применяются четыре операции больше >, больше или равно `>=, меньше <, меньше или равно <=.

Несколько примеров логических выражений:

x == 0 - выражение истинно, если значение переменной x равно нулю, и ложно в противном случае;

0!= 0 - выражение ложно;

3>= 2 - выражение истинно.

Из элементарных логических выражений и логических переменных можно составлять более сложные выражения, используя три логические операции "и", "или", "не":

результат логической операции "и" истинен, когда истинны оба ее аргумента. Например, логическое выражение

0 <= x и x <= 1

истинно, когда значение переменной x принадлежит отрезку [0, 1]. Логическую операцию "и" называют также логическим умножением или конъюнкцией; в языке Си логическое умножение обозначается двойным амперсандом &&;

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

x != 0 или y != 0

ложно в том и только том случае, когда значения обеих переменных x и y равны нулю. Логическую операцию "или" называют также логическим сложением или дизъюнкцией; в Си логическое сложение обозначается двойной вертикальной чертой ||;

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

не x == 0

истинно, когда значение переменной x отлично от нуля. Логическая операция "не" называется логическим отрицанием (иногда негацией); в Си логическое отрицание обозначается восклицательным знаком "!".

В сложных логических выражениях можно использовать круглые скобки для указания порядка операций. При отсутствии скобок считается, что наивысший приоритет имеет логическое отрицание; затем идет логическое умножение, а низший приоритет у логического сложения.

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

x != 0 и y/x > 1

При вычислении значения этого выражения сначала вычисляется первый аргумент конъюнкции "x != 0". Если значение переменной x равно нулю, то первый аргумент ложен и значение второго аргумента "y/x > 1" уже не вычисляется. Это очень хорошо, поскольку при попытке его вычислить произошло бы аппаратное прерывание из-за деления на ноль.

То же самое относится и к логическому сложению. Сначала всегда вычисляется первый аргумент логической операции "или". Если он истинен, то значение выражения полагается истинным, а второй аргумент не вычисляется вообще. Таким образом, операции логического сложения и умножения, строго говоря, не коммутативны. Может так случиться, что выражение "a и b" корректно, а выражение "b и a" - нет. Программисты очень часто сознательно используют эту особенность реализации логических операций.

Массивы

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

Все элементы массива имеют один и тот же тип. Элементы массива обычно нумеруются индексами от 0 до n-1, где n - число элементов массива. В некоторых языках можно задавать границы изменения индексов, в других нижняя граница значения индекса равна единице, а не нулю. Мы, тем не менее, будем придерживаться языка Си (а также C++, Java, C#), в котором нижней границей индекса всегда является ноль. Это очень удобно, т.к. индекс элемента массива в этом случае равен его смещению относительно начала массива. Длина массива задается при его описании и не может быть изменена в процессе работы программы.

При описании массива указывается тип и число его элементов. Тип записывается перед именем массива, размер массива указывается в квадратных скобках после его имени. Примеры:

цел a[100]; описан массив целых чисел размера 100

(индекс меняется от 0 до 99)

вещ r[1000]; описан вещ. массив из 1000 элементов.

В языке Си соответствующие описания выглядят следующим образом:

int a[100];

double r[1000];

Для доступа к элементу массива указывается его имя и в квадратных скобках - индекс нужного элемента. С элементом массива можно работать как с обычной переменной, т.е. можно прочитать его значение или записать в него новое значение. Примеры:

a[3] := 0; элементу массива a с индексом 3

присваивается значение 0;

a[10] := a[10]*2; элемент массива a с индексом

10 удваивается.

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

Текстовые строки

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

строка заканчивается символом с нулевым кодом, т.е. либо нулевым байтом в случае однобайтового представления символов, либо двумя нулевыми байтами в случае двухбайтового представления. Такой способ принят в языке Си. Отметим, что нулевой байт - это вовсе не символ '0'! Символ '0' имеет код 48 в кодировках ASCII и UNICODE, а изображаемых символов с нулевым кодом не существует;

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

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

Впрочем, существуют и другие способы представления строк, которые используются в объектно-ориентированных языках. Строка рассматривается как объект, внутреннее устройство которого скрыто от пользователя, хотя, как правило, он содержит массив или адрес массива символов и длину строки. Обычно в случае представления строк в виде объектов ограничения на длину строки отсутствуют.

Вычисление функций на последовательностях

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

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

Рассмотрим пример: дана последовательность вещественных чисел, требуется вычислить сумму ее элементов. Запишем алгоритм на неформальном языке в самом общем виде.

вещ алгоритм сумма последовательности

| дано: последовательность вещественных чисел

| надо: вернуть сумму ее элементов

начало алгоритма

| вещ s, x;

| s := 0.0;

| встать в начало последовательности

| цикл пока есть непрочитанные элементы

| | прочесть очередной элемент последовательности в (вых:x)

| | s := s + x;

| конец цикла

| ответ := s;

конец алгоритма

Здесь перед словом "алгоритм" записывается тип возвращаемого значения, т.е. "вещ" для вещественного числа. Это означает, что алгоритм можно использовать как функцию. Например, для функции "sin" можно записать выражение

y = sin(x)

При вычислении выражения сначала вызывается алгоритм (функция), вычисляющий sin, затем значение, которое возвращается этим алгоритмом, присваивается переменной y. В нашем случае можно использовать выражение

y := сумма последовательности;

для вызова алгоритма и записи возвращаемого значения в переменную y.

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

вещ алгоритм сумма последовательности(вх: цел n, вещ a[n])

| дано: n -- число элементов последовательности,

| a[n] -- массив элементов последовательности

| надо: вернуть сумму элементов последовательности

начало алгоритма

| вещ s; цел i;

| s := 0.0; // Инициализация значения ф-ции

| i := 0

| цикл пока i < n

| | s := s + a[i]; // Вычисление нового значения по старому

| | // значению и очередному элементу

| | i := i + 1; // Переходим к следующему элементу

| конец цикла

| ответ := s;

конец алгоритма

Здесь целочисленная переменная i используется в качестве индекса элемента массива. Она последовательно принимает значения от 0 до n-1. Очередной элемент последовательности записывается как a[i].

Отметим следующие составные части алгоритма, вычисляющего функцию на последовательности элементов:

инициализация значения функции для пустой последовательности - в данном случае

s : = 0.0;

вычисление нового значения функции по прочтении очередного элемента последовательности. Новое значение вычисляется по старому значению и очередному прочитанному элементу. В данном случае это суммирование

s : = s+a[i].

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

Рассмотрим еще один важный пример: вычисление максимального элемента последовательности. В отличие от суммы элементов, здесь не вполне ясно, каким значением надо инициализировать максимум, то есть чему равен максимум пустой последовательности. Для того, чтобы максимум одноэлементной последовательности вычислялся правильно, надо, чтобы максимум пустой последовательности был меньше любого числа. Поэтому максимум пустой последовательности не может быть обычным числом. В математике и в программировании очень полезен следующий прием: к обычным элементам добавляется специальный воображаемый элемент с заданными свойствами. Так были изобретены ноль, отрицательные числа, иррациональные и комплексные числа и т.п. В данном случае, таким воображаемым элементом является "минус бесконечность".

вещ алгоритм максимум последовательности(вх: цел n, вещ a[n])

| дано: n -- число элементов последовательности,

| a[n] -- массив элементов последовательности

| надо: вернуть максимум элементов последовательности

начало алгоритма

| вещ m; цел i;

| m := минус бесконечность; // Инициализация значения ф-ции

| i := 0;

| цикл пока i < n

| | если a[i] > m // Вычисление нового значения по

| | | то m := a[i]; // старому значению и очередному эл-ту

| | конец если

| | i := i + 1;

| конец цикла

| ответ := m;

конец алгоритма

Здесь переменная m на любом шаге содержит максимальное значение для просмотренного начального отрезка последовательности, т.е. кандидата на максимум. Если очередной элемент больше, чем m, то он запоминается в переменной m и становится новым кандидатом на максимум.

Значение "минус бесконечность" в случае операции взятия максимума двух чисел обладает следующим замечательным свойством: для всякого числа x выполняется равенство

max(минус бесконечность,x) = x

Можно сравнить с операцией сложения:

0+x = x

Таким образом, значение "минус бесконечность" играет роль нуля для операции взятия максимума двух чисел. Ноль - это нейтральный элемент для операции сложения: будучи прибавленным слева к произвольному числу x, он не изменяет числа x. Точно так же значение "минус бесконечность" является нейтральным для операции взятия максимума.

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

вещ алгоритм минимум последовательности(вх: цел n, вещ a[n])

| дано: n -- число элементов последовательности,

| a[n] -- массив элементов последовательности

| надо: вычислить минимум элементов последовательности

начало алгоритма

| вещ m; цел i;

| m := плюс бесконечность; // Инициализация значения ф-ции

| i := 0;

| цикл пока i < n

| | если a[i] < m // Вычисление нового знач. по старому

| | | то m := a[i]; // значению и очередному элементу

| | конец если

| | i := i + 1;

| конец цикла

| ответ := m;

конец алгоритма

Значения "минус" и "плюс бесконечность"

Как реализовать воображаемые элементы "минус бесконечность" и "плюс бесконечность" при программировании на конкретных алгоритмических языках, а не на псевдокоде? Вспомним, что компьютер может представлять не все возможные числа, а только их ограниченное подмножество. Поэтому для компьютера существует минимальное и максимальное целое и вещественное числа. В языке Си эти константы записаны в стандартных заголовочных файлах "limits.h" для целочисленных типов и "float.h" для вещественных типов. Для типа int эти константы называются INT_MIN и INT_MAX.

INT_MIN = (-2147483647 - 1)

INT_MAX = 2147483647

Для вещественных типов максимальное и минимальное числа равны по абсолютной величине и отличаются лишь знаками, поэтому специального названия для максимальной по абсолютной величине отрицательной константы не существует. Максимальное число типа float называется FLT_MAX, типа double - DBL_MAX.

FLT_MAX = 3.402823466e+38

DBL_MAX = 1.7976931348623158e+308

Стоит отметить, что через FLT_MIN и DBL_MIN обозначены минимальные положительные числа, а вовсе не максимальные по абсолютной величине отрицательные!

FLT_MIN = 1.175494351e-38

DBL_MIN = 2.2250738585072014e-308

Константа DBL_MAX является нормальным числом, она не равна

специальному бесконечно большому значению, см. с. 1.4.2.

Использовать бесконечно большое значение опасно,

т.к. операции с ним могут приводить к ошибкам.

Итак, в качестве значений "минус бесконечность" и "плюс бесконечность" можно использовать константы INT_MIN и INT_MAX для типа int. Для типа double в качестве значений "минус бесконечность" и "плюс бесконечность" можно использовать выражения (-DBL_MAX) и DBL_MAX. Не забудьте только при программировании на Си подключить стандартные заголовочные файлы:

#include

для целых типов и

#include

для вещественных. Впрочем, вовсе не обязательно помнить названия этих констант и имена стандартных заголовочных файлов. В качестве значения "минус бесконечность" всегда можно использовать произвольное значение, заведомо меньшее, чем любое конкретное число, которое может встретиться в программе. Например, если известно, что программа работает только с неотрицательными числами, то в качестве значения "минус бесконечность" можно использовать произвольное отрицательное число, например, минус единицу. Аналогично, в качестве значения "плюс бесконечность" можно применять любое достаточно большое число. Оно должно быть заведомо больше, чем все конкретные числа, которые могут встретиться в алгоритме. Пусть, например, известно, что в программе могут встретиться вещественные числа не больше миллиона. Тогда в качестве значения "плюс бесконечность" можно использовать константу

1.0e+30

т.е. десять в тридцатой степени. (Можно даже использовать 1.0e+7, т.е. десять миллионов, но не стоит мелочиться.)

Схема Горнера

Рассмотрим еще один важный пример функции на последовательности. Пусть дана последовательность коэффициентов многочлена p(x) по убыванию степеней:

p(x) = a0xn +a 1xn-1 + ... + an

Нужно вычислить значение многочлена в точке x = t. Алгоритм, основанный на просмотре последовательности коэффициентов в направлении от старшего к младшему, называется схемой Горнера. Проиллюстрируем его идею на примере многочлена третьей степени:

p(x) = ax3+bx2+cx+d

Его можно представить в виде

p(x) = ((ax+b)x+c)x+d

Для вычисления значения многочлена достаточно трех умножений и трех сложений. В общем случае, многочлен представляется в следующем виде:

p(x) = (...((a0x+a1)x+a2)x+...+an-1)x+an.

Обозначим через pk(x) многочлен k-ой степени, вычисленный по коэффициентам a0, a1, ..., ak:

pk(x) = a0xk + a1xk-1 + ... + ak.

Тогда

pk+1(x) = pk(x)x + ak+1

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

Выпишем алгоритм:

вещ алгоритм схема Горнера(вх: цел n, вещ a[n+1], вещ t)

| дано: n -- степень многочлена

| a[n+1] -- массив коэффициентов многочлена по

| убыванию степеней

| надо: вычислить значение многочлена в точке t

начало алгоритма

| вещ p; цел i;

| p := 0.0; // Инициализация значения многочлена

| i := 0;

| цикл пока i <= n

| | p := p * t + a[i]; // Вычисление нового значения по

| | // старому значению и добавленному коэффициенту

| | i := i + 1;

| конец цикла

| ответ := p;

конец алгоритма

Арифметический цикл

В рассмотренных выше программах в цикле перебираются элементы массива с индексом i, где i пробегает значения от 0 до n-1 (в последней программе - от 0 до n, поскольку многочлен n-й степени имеет n+1 коэффициент). Для удобства записи таких циклов большинство языков программирования предоставляет конструкцию арифметического цикла. В нем используется так называемая переменная цикла, т.е. целочисленная переменная, которая последовательно принимает значения в указанных пределах. Для каждого значения переменной цикла выполняется тело цикла, в котором эта переменная может использоваться.

цикл для i от a до b

| . . .

| тело цикла

| . . .

конец цикла

Здесь переменная цикла i последовательно принимает значения от a до b с шагом 1, где a и b - некоторые целочисленные выражения. Таким образом, всего тело цикла выполняется b-a+1 раз. Если b меньше, чем a, то цикл не выполняется ни разу. Возможна также конструкция арифметического цикла с шагом s, отличным от единицы:

цикл для i от a до b шаг s

| . . .

| тело цикла

| . . .

конец цикла

Переменная цикла последовательно принимает значения a, a+s, a+2s, ... до тех пор, пока ее значение содержится в отрезке [a,b]. Для каждого значения переменной цикла выполняется тело цикла. Шаг может быть и отрицательным, в этом случае b должно быть не больше, чем a, иначе цикл не выполняется ни разу.

В принципе, без конструкции арифметического цикла можно обойтись, поскольку ее можно смоделировать с помощью цикла "пока". А именно, конструкция

цикл для i от a до b

| . . .

| тело цикла

| . . .

конец цикла

эквивалентна конструкции

i := a

цикл пока i <= b

| . . .

| тело цикла

| . . .

| i := i + 1

конец цикла

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

вещ алгоритм схема Горнера(вх: цел n, вещ a[n+1], вещ t)

| дано: n -- степень многочлена

| a[n+1] -- массив коэффициентов многочлена по

| убыванию степеней

| надо: вычислить значение многочлена в точке t

начало алгоритма

| вещ p; цел i;

| p := 0.0; // Инициализация значения многочлена

| цикл для i от 0 до n

| | p := p * t + a[i]; // Вычисление нового значения

| | // при добавлении коэффициента

| конец цикла

| ответ := p;

конец алгоритма

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

вещ алгоритм схема Горнера2(вх: цел n, вещ b[n+1], вещ t)

| дано: n -- степень многочлена

| b[n+1] -- массив коэффициентов многочлена по

| убыванию степеней

| надо: вычислить значение многочлена в точке t

начало алгоритма

| вещ p; цел i;

| p := 0.0; // Инициализация значения многочлена

| цикл для i от n до 0 шаг -1

| | p := p * t + b[i]; // Вычисление нового значения

| | // при добавлении коэффициента

| конец цикла

| ответ := p

конец алгоритма

Индуктивные функции на последовательностях и индуктивные расширения

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

Sn = {a0, a1, ..., an-1}

длины n. С помощью знака & обозначим операцию приписывания нового элемента справа к последовательности (ее называют также конкатенацией):

Sn+1 = Sn&an = {a0, a1, ..., an-1, an}

Пусть f(S) - некоторая функция на множестве последовательностей, например, сумма элементов последовательности. Функция называется индуктивной, если при добавлении нового элемента к последовательности новое значение функции можно вычислить, зная только старое значение функции и добавленный элемент. На математическом языке функция

f:W Y

где W - множество всех последовательностей, составленных из элементов некоторого множества X, индуктивна, если существует функция G от двух аргументов

G:Y*X Y

такая, что для любой последовательности S из W и любого элемента a из X значение функции f на последовательности S, к которой добавлен элемент a, вычисляется с помощью функции G:

f(S&a) = G(f(S), a).

Функция G по паре (y, a), где y - старое значение функции f на последовательности S и a - элемент, добавленный к последовательности, вычисляет новое значение y, равное значению функции f на новой последовательности.

В примере с суммой элементов последовательности функция G равна сумме элементов y и a:

G(y, a) = y+a.

В примере с максимальным элементом последовательности функция G равна максимуму:

G(y, a) = max(y,a).

В примере со схемой Горнера вычисления значения многочлена в точке t, где коэффициенты многочлена заданы в последовательности по убыванию степеней, функция G равна

G(y, a) = yt+a.

Во всех трех случаях рассматриваемая функция на последовательности индуктивна.

Общая схема вычисления значения индуктивной функции на последовательности выглядит следующим образом:.

алгоритм значение индуктивной функции(

вх: последовательность S

)

| дано: последовательность S

| надо: вычислить функцию y = f(S)

начало алгоритма

| y := значение функции f на пустой последовательности;

| встать в начало последовательности S;

| цикл пока в последовательности S есть

| | непрочитанные элементы

| | прочесть очередной элемент

| | последовательности S в (вых:x);

| | y := G(y, x);

| конец цикла

| ответ := y;

конец алгоритма

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

Однако не все функции на последовательностях являются индуктивными. Рассмотрим следующий пример. Пусть коэффициенты многочлена заданы в последовательности по убыванию степеней. Надо вычислить значение производной многочлена в точке x = 2. Обозначим через

S = {a0, a1, ..., an}

последовательность коэффициентов многочлена

p(x) = a0xn+a1xn-1+...+an

и через f(S) значение производной многочлена p'(x) в точке x =2:

f(S) = p'(2)

Покажем, что функция f не индуктивна. Достаточно указать две последовательности S1 и S2, такие, что значения функции f на них совпадают, но при добавлении к последовательностям S1 и S2 одного и того же элемента a новые значения функции уже не равны:

f(S1) = f(S2),

f(S1&a) f(S2&a)

Возьмем последовательности

S1 = {1},

S2 = {1, -4,1}.

Им соответствуют многочлены

p1(x) = 1,

p2(x) = x2-4x+1

Производные многочленов равны

p'(x) = 0,

p'2(x)= 2x-4

Значения обеих производных в точке x=2 равны нулю, т.е.

f(S1) = p'1(2) = 0,

f(S2) = p'2(2) = 2*2-4 = 0

Припишем теперь к обеим последовательностям элемент a = 1:

S1&1 = {1,1},

S2&1 = {1, -4,1,1}.

Новым последовательностям соответствуют многочлены

g1(x) = x+1,

g2(x) = x3-4x2+x+1

Их производные равны

g1(x) = 1,

g2(x) = 3x2-8x+1

Значения производных в точке x=2 равны соответственно

f(S1&1) = g'1(2) = 1

f(S2&1) = g'2(2) = 12-16+1 = -3

Мы видим, что значения f(S1) и f(S2) совпадают, но значения f(S1&1) и f(S2&1) не совпадают. Следовательно, функция f не индуктивна.

Как поступать в случае, когда функция f не индуктивна? Общий рецепт следующий: надо придумать индуктивную функцию F, такую, что, зная значение F, легко можно вычислить исходную функцию f. Функция F называется индуктивным расширением функции f.

Приведем формальные определения. Пусть исходная функция на множестве W всех последовательностей

f:W Y

не индуктивна. Индуктивная функция

F:W Z

называется индуктивным расширением функции f, если существует отображение

P:Z Y

такое, что для всякой последовательности S, принадлежащей W, выполняется равенство

f(S) = P(F(S))

(т.е. функция f равна композиции отображений F и P, f = PºF.) Отображение P обычно называют проекцией множества Z на Y.

Как построить индуктивное расширение функции f? Это творческий момент, готового рецепта на все случаи не существует. Неформальный рецепт следующий: надо понять, какой информации не хватает для того, чтобы уметь вычислять новое значение функции на последовательности при добавлении к последовательности нового элемента. Эту информацию надо хранить дополнительно к значению функции. Отсюда и появился термин расширение: вычисляется более сложная, расширенная, функция, чтобы по ней затем восстановить исходную. Как правило, значением индуктивного расширения F является пара (y, h), где y - значение исходной функции f, а h - некоторая дополнительная информация, позволяющая перевычислять значение y при добавлении нового элемента к последовательности. Таким образом, множество Z значений индуктивного расширения

F:W Z

чаще всего является множеством пар (y, h), т.е. декартовым произведением:

Z = Y*H

Отображение P на практике должно легко вычисляться. Так оно и есть в случае декартово произведения - это просто проекция на первый аргумент.

P(y, h) = y

Рассмотрим пример с вычислением производной многочлена в точке; коэффициенты многочлена заданы в последовательности по убыванию степеней. При добавлении к последовательности

Sk = {a0, a1, ...,ak}

нового коэффициента ak+1 получаем последовательность

Sk+1 = S&ak+1 = {a0, a1, ...,ak, ak+1}

Пусть этим двум последовательностям соответствуют многочлены pk(x) и pk+1(x). Тогда

pk+1(x) = pk(x)*x + ak+1.

Дифференцируя это равенство, получим:

p'k+1(x) = p'k(x)*x + pk(x).

Мы видим, что для вычисления нового значения производной нужно знать старое значение производной, а также старое значение многочлена. Следовательно, дополнительно к значению производной многочлена надо хранить еще значение самого многочлена. Таким образом, индуктивным расширением функции, равной производной многочлена в точке t, является пара (значение производной, значение многочлена):

F:S (p'(t), p(t))

Новое значение производной вычисляется по приведенной выше формуле через старое значение производной и старое значение многочлена. После этого вычисляется новое значение многочлена по схеме Горнера.

Выпишем алгоритм вычисления производной многочлена.

вещ алг. значение производной(вх: цел n, вещ a[n+1], вещ t)

| дано: n -- степень многочлена

| a[n+1] -- массив коэффициентов многочлена по

| возрастанию степеней

| надо: найти значение производной многочлена в точке t

начало алгоритма

| вещ p, dp; цел i;

| p := 0.0; // Инициализация значения многочлена

| dp := 0.0; // Инициализация значения производной

| цикл для i от 0 до n

| | dp := dp * x + p; // Новое значение производной

| | p := p * t + a[i]; // Новое значение многочлена

| конец цикла

| ответ := dp;

конец алгоритма

Другой пример неиндуктивной функции - это среднее арифметическое значение элементов последовательности. Индуктивным расширением является пара (сумма элементов последовательности, длина последовательности):

F(S) = (сумма(S), длина(S)).

Легко видеть, что функция F индуктивна. При известном значении функции F не составляет труда вычислить исходную функцию:

среднее арифметическое(S) = сумма(S)/длина(S).

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

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

Построение цикла с помощью инварианта

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

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

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

Завершение цикла, как правило, связано с ограниченной величиной, которая монотонно возрастает или монотонно убывает при каждом выполнении тела цикла. Цикл "пока" завершается, когда условие после слова "пока" в заголовке цикла становится ложным. Следовательно, это условие должно прямо или косвенно зависеть от величины, монотонно убывающей или возрастающей в процессе выполнения цикла. По достижению ее определенного значения условие должно становиться ложным. Условием завершения цикла называют отрицание условия, стоящего после слова "пока" в заголовке цикла.

Выполнение инварианта цикла и одновременно условия завершения должно обеспечивать решение требуемой задачи.

Общая схема

Обозначим через X множество всевозможных наборов значений всех переменных, меняющихся в ходе выполнения цикла. Множество X иногда называют фазовым, или конфигурационным, пространством задачи. Инвариант - это некоторое условие I(x), зависящее от точки x из множества X и принимающее значение "истина" или "ложь". (Математики называют такие условия предикатами.) В процессе инициализации точке x присваивается такое значение x0, что условие I(x0) истинно.

Обозначим условие завершения цикла через Q(x). Условия I(x) и Q(x) должны быть подобраны таким образом, чтобы одновременная истинность I(x) и Q(x) обеспечивала решение требуемой задачи: нахождение точки x с требуемыми свойствами.

Тело цикла можно трактовать как отображение точки x в новую точку T(x) из того же множества X:

T:X X

Условие I(x) является инвариантом для отображения T: если I(x), то I(T(x)) также истинно.

Общая схема построения цикла с помощью инварианта выглядит следующим образом:

x := x0; // x0 выбирается так, чтобы условие

// I(x0) было истинным

утверждение: I(x);

цикл пока не Q(x)

| инвариант: I(x);

| x := T(x); // точка x преобразуется в T(x)

конец цикла

утверждение: Q(x) и I(x);

ответ := x;

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

Алгоритм Евклида вычисления наибольшего общего делителя

Пусть даны два целых числа m и n, хотя бы одно из которых не равно нулю. Требуется найти их наибольший общий делитель. Напомним, что наибольшим общим делителем двух чисел m и n называется такой их общий делитель d, который делится на любые другие общие делители d'. Такое определение НОД подходит не только для чисел, но и для многочленов, поскольку в нем не используется сравнение по величине. Наибольший общий делитель определен с точностью до обратимого множителя; в частности, поскольку в кольце чисел обратимы только элементы ±1, НОД целых чисел определен с точностью до знака.

В качестве пространства X рассматривается множество пар целых чисел

X = {(a,b) | a, b Z, a 0 или b 0}

Надо вычислить НОД для заданной пары чисел (m,n). В качестве инварианта используем утверждение, что НОД текущей пары чисел равен НОД исходной пары:

I(a,b): НОД(a,b) = НОД(m,n).

Следовательно, цикл надо строить таким образом, чтобы при изменении переменных a, b наибольший общий делитель пары (a,b) оставался неизменным. В качестве начальной точки x0 используется пара (m,n).

Обозначим через r остаток от деления a на b:

a = gb+r, где |r| < |b|.

Тогда нетрудно доказать, что НОД(b,r) = НОД(a,b). Достаточно показать, что множества общих делителей пары (b,r) и пары (a,b) совпадают. Пусть d делит b и r. Тогда из равенства a = gb+r вытекает, что d делит a. Обратно, пусть d делит a и b. Из определения остатка имеем:

r = a-gb.

Так как правая часть равенства делится на d, то r тоже делится на d.

Итак, при замене пары (a,b) на пару (b,r) НОД не меняется. Обозначим через T отображение

T:(a,b) (b,r)

Условие I(a,b) является инвариантным для отображения T.

Осталось только определить условие завершения цикла Q(a,b). Выполнение этого условия должно обеспечивать решение задачи, т.е. нахождение HOД чисел a, b. Для какой пары чисел их НОД можно сразу вычислить? Проще всего, когда одно из чисел равно нулю. В этом случае

НОД(a,0) = a

Итак, в качестве условия завершения цикла используем условие, что вторая компонента пары (a, b) нулевая:

Q(a,b): b = 0

Теперь можно выписать алгоритм нахождения наибольшего общего делителя:

цел алгоритм НОД(вх: цел m, цел n)

| дано: целые числа m, n, хотя бы одно отлично от нуля

| надо: вычислить наибольший общий делитель пары (m, n)

начало алгоритма

| цел a, b, r;

| // инициализация

| a := m; b := n;

| утверждение: НОД(a, b) == НОД(m, n);

|

| цикл пока b != 0

| | инвариант: НОД(a, b) == НОД(m, n)

| | r := a % b; // находим остаток от деления a на b

| | a := b; b := r; // заменяем пару (a, b) на (b, r)

| конец цикла

|

| утверждение: b == 0 и НОД(a, b) == НОД(m, n);

| ответ := a;

конец алгоритма

Алгоритм Евклида - один из самых замечательных алгоритмов теории чисел и программирования. Работает он исключительно быстро, за время, линейно зависящее от длины записи входных чисел. (Действительно, легко показать, что за два выполнения тела цикла число b уменьшается не менее, чем в четыре раза. Следовательно, число выполнений тела цикла в худшем случае равно длине двоичной записи максимального из чисел a, b.) Это позволяет применять алгоритм Евклида к очень большим целым числам - например, к двухсотзначным десятичным. Алгоритм Евклида (более точно, расширенный алгоритм Евклида, который будет рассмотрен ниже) применяется для таких больших чисел в схеме кодирования с открытым ключом RSA, которая в настоящее время широко используется на практике для защиты информации.

Быстрое возведение в степень

Второй важнейший алгоритм элементарной теории чисел - это алгоритм быстрого возведения в степень. Наряду с алгоритмом Евклида, он встречается буквально на каждом шагу, когда речь идет о применении теории чисел в программировании, - например, в теории кодирования.

Пусть требуется возвести элемент a в целую неотрицательную степень n. В качестве a может фигурировать целое или вещественное число, квадратная матрица, элемент кольца вычетов по модулю m и т.п. - требуется только, чтобы элемент a принадлежал алгебраической структуре, в которой определена ассоциативная операция умножения (т.е. в общем случае, a - элемент полугруппы).

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

В качестве фазового пространства X этой задачи рассмотрим множество троек

X = {(b,k,p)}.

Здесь b выступает в роли текущего основания степени, k - в роли текущего показателя степени, p - это уже вычисленная часть степени. Ключевым моментом всегда является формулировка инварианта цикла:

I(b,k,p): bk*p = an = const,

т.е. величина bk*p постоянна и равна an. Легко подобрать начальные значения так, чтобы инвариант выполнялся:

b0 = a; k0 = n; p0 = 1.

I(b0,k0,p0) = I(a,n,1): an*1 = an

Условие завершения совместно с выполнением инварианта должно обеспечить легкое решение требуемой задачи, т.е. вычисление an. Действительно, если k = 0, то из инварианта следует, что

b0*p = p = an,

т.е. искомая величина содержится в переменной p. Итак, условие завершения состоит в равенстве нулю числа k:

Q(b,k,p): k = 0

Осталось написать преобразование T точки x = (b,k,p), которое сохраняет инвариант и одновременно уменьшает k. Определим преобразование T следующим образом:

T(b,k,p) = (b*b, k/2, p), если k четное

T(b,k,p) = (b, k-1, p*b), если k нечетное

Легко видеть, что инвариант сохраняется и k монотонно убывает. Итак, выпишем алгоритм быстрого возведения в степень для случая вещественного основания:

вещ алг. быстрое возведение в степень(вх: вещ a, цел n)

| дано: основание a и показатель степени n >= 0

| надо: вычислить a в степени n

начало алгоритма

| вещ b, p; цел k;

|

| // инициализация

| b := a; p := 1.0; k := n;

| утверждение: b^k * p == a^n;

|

| цикл пока k > 0

| | инвариант: b^k * p == a^n;

| | если k четное

| | | то

| | | k := k / 2;

| | | b := b * b;

| | | иначе

| | | k := k - 1;

| | | p := p * b;

| | конец если

| конец цикла

|

| утверждение: k == 0 и b^k * p == a^n;

| ответ := p;

конец алгоритма

Вычисление логарифма без использования разложения в ряд

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

Пусть задано вещественное число x. Требуется вычислить логарифм числа x по основанию a c точностью ε, где ε - некоторое положительное очень маленькое число. Для определенности, пусть a>1 (для a<1 можно воспользоваться тождеством log1/ax = -logax).

Из определения логарифма следует, что надо найти число y такое, что

ay = x.

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

ayzt = x = const.

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

(y,z,t),

и инвариант записывается в виде

I(y,z,t): ayzt = x

Начальные значения переменных y, z, t выбираются так, чтобы выполнялся инвариант:

y0 = 0, z0 = x, t0 = 1.

Определим условие завершения цикла Q(y,z,t). Необходимо, чтобы искомая величина по окончанию цикла содержалась в переменной y. Следовательно, величина zt должна быть близка к единице: тогда приблизительно выполняется равенство

ay ayzt = x

т.е. y приближенно равен искомому логарифму. Для того, чтобы величина zt была близка к единице, нужно, чтобы показатель степени t был близок к нулю, а основание z было не очень велико и не очень мало. Для этого достаточно выполнения трех неравенств

|t| < ε, 1/a < z < a

Можно доказать строго, что при выполнении этих неравенств, а также условия ayzt = x, величина y отличается от logax не больше чем на ε.

Выполнение этих трех неравенств и являются условием завершения цикла:

Q(y,z,t): |t| < ε и 1/a < z и z < a

Наконец, тело цикла должно преобразовывать переменные (y,z,t) так, чтобы абсолютная величина t монотонно убывала, а переменная z рано или поздно попадала бы в интервал (1/a,a), и при этом сохранялся инвариант. Такое преобразование T легко выписывается по инварианту цикла:

T(y,z,t) = (y+t, z/a, t), если z a

T(y,z,t) = (y-t, z*a, t), если z 1/a

T(y,z,t) = (y, z*z, t/2), если 1/a < z < a

Заметим, что при применении преобразования T некоторая величина как бы перетекает из одних переменных в другие, при этом равенство ayzt = x остается неизменным.

Теперь можно выписать алгоритм вычисления логарифма:

вещ алгоритм логарифм(вх: вещ x, вещ a, вещ eps)

| дано: x > 0, a > 1, eps > 0

| надо: вычислить log_a x с точностью eps

начало алгоритма

| вещ y, z, t;

|

| // инициализация

| y := 0.0; z := x; t := 1.0;

| утверждение: a^y * z^t == x;

|

| цикл пока |t| >= eps или z <= 1.0/a или z >= a

| | инвариант: a^y * z^t == x;

| | если z >= a

| | | то

| | | z := z/a; y := y + t;

| | иначе если z <= 1.0/a

| | | то

| | | z := z*a; y := y - t;

| | иначе

| | | z := z*z; t := t/2.0;

| | конец если

| конец цикла

|

| утверждение: |t| < eps и

| z > 1.0/a и z < a и

| a^y * z^t == x;

| ответ := y;

конец алгоритма

Расширенный алгоритм Евклида

Один из важнейших результатов элементарной теории чисел утверждает, что наибольший общий делитель двух целых чисел выражается в виде их линейной комбинации с целыми коэффициентами. Пусть m и n - два целых числа, хотя бы одно из которых не равно нулю. Тогда их наибольший общий делитель d = НОД(m,n) выражается в виде

d = um+vn,

где u и v - некоторые целые числа. Результат этот очень важен для практики, т.к. позволяет вычислить обратный элемент к n в кольце вычетов по модулю m. Действительно, пусть числа m и n взаимно просты, т.е. НОД(m,n) = 1. Тогда

1 = um+vn,

откуда следует

vn = 1-um

vn 1(mod m)

Нахождение обратного элемента в кольце вычетов Zm применяется во многих дискретных алгоритмах, например, в схеме кодирования с открытым ключом.

Для вычисления наибольшего общего делителя d и одновременно чисел u и v используется так называемый расширенный алгоритм Евклида. В обычном алгоритме Евклида пара чисел (a,b) в цикле заменяется на пару (b,r), где r - остаток от деления a на b, при этом наибольший общий делитель у обеих пар одинаковый. Начальные значения переменных a и b равны m и n соответственно. Алгоритм заканчивается, когда b становится равным нулю, при этом a будет содержать наибольший общий делитель.

Идея расширенного алгоритма Евклида заключается в том, что на любом шаге алгоритма хранятся коэффициенты, выражающие текущие числа a и b через исходные числа m и n. При замене пары (a,b) на пару (b,r) эти коэффициенты перевычисляются.

Итак, в алгоритме участвуют переменные a, b, u1, v1, u2, v2, для которых выполняется следующий инвариант цикла:

I(a, b, u1, v1, u2, v2): НОД(a,b) = НОД(m,n)

a = u1m+v1n

b = u2m+v2n

Начальные значения этих переменных обеспечивают выполнение инварианта:

a = m, b = n,

u1 = 1, v1 = 0,

u2 = 0, v2 = 1.

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

Q(a, b, u1, v1, u2, v2): b = 0.

Осталось написать тело цикла, сохраняющее инвариант и уменьшающее абсолютную величину переменной b. Это нетрудно сделать, исходя из инварианта цикла. В обычном алгоритме Евклида пара (a,b) заменяется на (b,r), где r - остаток от деления a на b.

a = gb+r, |r| < |b|.

Здесь g равняется целой части частного от деления a на b. Заметим, что в программировании, в отличие от школьной математики, операция взятия целой части перестановочна с операцией изменения знака:

целая часть(-x) = - целая часть(x)

Например, целая часть(-3.7) = -3. Это позволяет работать с отрицательными числами так же, как и с положительными, т.е. вообще не следить за знаком! Отметим также, что в большинстве языков программирования считается, что результат любой операции с целыми числами является целым числом, например, 8/3 = 2.

Переменная g вычисляется как целая часть частного от деления a на b:

g = целая часть (a/b)

Выразим остаток r в виде линейной комбинации a и b:

r = a-gb

Используя инвариант цикла, можно выразить r через исходные числа m и n:

r = a-gb = (u1m+v1n)-g(u2m+v2n) =

= (u1-gu2)m+(v1-gv2)n.

Через u'1, v'1, u'2, v'2 обозначаются новые значения переменных u1, v1, u2, v2. При замене (a,b) (b,r) они вычисляются следующим образом:

u'1 = u2, v'1 = v2

u'2 = u1-gu2, v'2 = v1-gv2

По завершению цикла ответ будет находиться в переменных a (НОД исходных чисел m и n), u1, v1 (коэффициенты выражения НОД через m и n).

Выпишем алгоритм:

алгоритм Расширенный алгоритм Евклида(

вх: цел m, цел n,

вых: цел d, цел u, цел v

)

| дано: целые числа m, n, хотя бы одно отлично от нуля;

| надо: вычислить d = НОД(m, n) и найти u, v такие, что

| d = u * m + v * n;

начало алгоритма

| цел a, b, q, r, u1, v1, u2, v2;

| цел t; // вспомогательная переменная

| // инициализация

| a := m; b := n;

| u1 := 1; v1 := 0;

| u2 := 0; v2 := 1;

| утверждение: НОД(a, b) == НОД(m, n) и

| a == u1 * m + v1 * n и

| b == u2 * m + v2 * n;

|

| цикл пока b != 0

| | инвариант: НОД(a, b) == НОД(m, n) и

| | a == u1 * m + v1 * n и

| | b == u2 * m + v2 * n;

| | q := a / b; // целая часть частного от деления a на b

| | r := a % b; // остаток от деления a на b

| | a := b; b := r; // заменяем пару (a, b) на (b, r)

| |

| | // Вычисляем новые значения переменных u1, u2

| | t := u2; // запоминаем старое значение u2

| | u2 := u1 - q * u2; // вычисляем новое значение u2

| | u1 := t; // новое значение u1 := старое

| | // значение u2

| | // Аналогично находим новые значения переменных v1, v2

| | t := v2;

| | v2 := v1 - q * v2;

| | v1 := t;

| конец цикла

|

| утверждение: b == 0 и

| НОД(a, b) == НОД(m, n) и

| a == u1 * m + v1 * n;

| // Выдаем ответ

| d := a;

| u := u1; v := v1;

конец алгоритма

Нахождение корня функции методом деления отрезка пополам

Рассмотрим еще один пример использования схемы построения цикла с помощью инварианта, часто встречающийся в реальных программах. Пусть y = f(x) - непрерывная функция от вещественного аргумента, принимающая вещественные значения. Пусть известно, что на заданном отрезке [a,b] она принимает значения разных знаков. Из непрерывности функции f следует, что она имеет по крайней мере один корень на этом отрезке. Требуется вычислить корень функции f с заданной точностью ε.

Идея алгоритма состоит в том, чтобы поделить отрезок пополам и выбрать ту половину отрезка, на которой функция принимает значения разных знаков. Эта операция повторяется до тех пор, пока длина отрезка не станет меньше, чем ε.

Пусть концы текущего отрезка хранятся в переменных x0, x1. Инвариантом цикла является утверждение о том, что функция принимает значения разных знаков в точках x0, x1:

I(x0, x1): f(x0)*f(x1) 0

Начальные значения:

x0 = a, x1 = b

Условием завершения цикла является утверждение о том, что длина отрезка меньше ε:

Q(x0, x1): |x1-x0| < ε

(знак модуля используется потому, что в условии задачи не требуется выполнения неравенства a < b).

Выпишем алгоритм вычисления корня функции с заданной точностью:

вещ корень функции на отрезке(вх: вещ a, вещ b, вещ eps)

| дано: f(a) * f(b) <= 0,

| eps > 0 - очень маленькое число;

| надо: вычислить корень функции f на отрезке [a, b] с

| точностью eps;

начало алгоритма

| вещ x0, x1, c;

|

| // инициализация

| x0 := a; x1 := b;

| утверждение: f(x0) * f (x1) <= 0;

|

| цикл пока |x1 - x0| >= eps

| | инвариант: f(x0) * f (x1) <= 0;

| | c := (x0 + x1) / 2; // Середина отрезка [x0, x1]

| | если f(x0) * f(c) <= 0

| | | то

| | | x1 := c

| | | иначе

| | | утверждение: f(c) * f(x1) <= 0

| | | x0 := c

| | конец если

| конец цикла

|

| утверждение: |x1 - x0| < eps и

| f(x0) * f (x1) <= 0;

| ответ := (x0 + x1) / 2;

конец алгоритма

Г. Механика материалов

  1. Сопротивление материалов: деформации упругие и пластические; закон Гука,

  2. Сопротивление материалов: испытание на растяжение и сжатие; диаграмма растяжения

  3. Детали машин: общие сведения о передачах зубчатых, фрикционных, червячных

  4. Детали машин: общие сведения о передачах ременных, цепных, о передаче винт–гайка;

  5. Детали машин: общие сведения о соединениях шпоночных, в муфтах;

  6. Классификация подшипников;

ПОДШИПНИК, конструктивный узел машин и механизмов, поддерживающий или направляющий вращающийся вал или ось. Если шейка вала в подшипнике скользит непосредственно по опорной поверхности, то он называется подшипником скольжения. Если же между шейкой вала и опорной поверхностью имеются шарики или ролики, то такой подшипник называется подшипником качения. Назначение подшипника – уменьшать трение между движущейся и неподвижной частями машины, так как с трением связаны потери энергии, нагрев и износ.

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

Смазка. Для смазки подшипника скольжения можно использовать любую достаточно вязкую жидкость – масло, воду, бензин и керосин, водные и масляные эмульсии, а в некоторых случаях даже газы (например, нагретый воздух и продукты сгорания в реактивных двигателях) и жидкие металлы. Применяются также пластичные и твердые («консистентные») смазки, но их смазывающие свойства отличны от свойств жидкостей и газов. В тех случаях, когда естественной циркуляции смазки в подшипнике недостаточно для его охлаждения, предусматривают систему принудительной циркуляции с теплоизлучающими радиаторами и теплопоглотителями.

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

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

Подшипники качения. В подшипнике качения трение скольжения заменяется трением качения, благодаря чему снижаются потери энергии на трение и уменьшается износ.

Шарикоподшипники. Наиболее распространенным подшипником качения является шарикоподшипник. Форму канавок (беговых дорожек) внутреннего и наружного колец подшипника качения необходимо очень точно контролировать при изготовлении, чтобы, с одной стороны, не было проскальзывания шариков относительно кольца, а с другой – они имели достаточно большую площадь опоры. Сепаратор задает точное положение шариков и предотвращает их взаимное трение. Кроме однорядных шариковых подшипников выпускаются подшипники с двумя и несколькими рядами шариков (двухрядные, многорядные), а также подшипники других конструкций.

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

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

Подшипниковые материалы. Подшипники скольжения изготавливаются из различных металлов, сплавов, пластмасс, композитов и других материалов. Длительное время основным подшипниковым материалом был баббит, запатентованный А.Баббитом в 1839. Этот сплав на основе олова или свинца с небольшими добавками сурьмы, меди, никеля и др. допускает ряд вариантов состава, различающихся относительным содержанием компонентов. Сплавы баббита стали как бы эталоном для оценки других подшипниковых материалов, среди которых – сочетания материалов, хорошо зарекомендовавших себя по отдельности: баббит и сталь; баббит, сталь и бронза; свинец с индием; серебро и сталь; графит и бронза. Среди пластмассовых материалов для подшипников скольжения выделяются найлон и тефлон, не требующие смазки. В качестве материалов втулок подшипников скольжения применяются также углеграфиты, металлокерамики и композиты.

  1. Методы расчета и проектирования узлов машин и механизмов.

Д. Материаловедение

  1. Классификация межатомных сил связи.

Ван-дер-Ваальса связь возникает в результате индукционного взаимодействия атомов, в инертных газах. Ионная связь возникает в результате взаимодействия разноимённых зарядов (положительного и отрицательного), ненаправленная, ненасыщенная, локализованная. Ковалентная связь возникает обобщением нескольких электронов (по правилу 8-n, где n – число электронов), имеет высокую энергию, является направленной, насыщенной и локализованной. Металлическая связь возникает в результате обобществления всех электронов. Эта связь ненасыщенная, ненаправленная, не локализованная.

  1. Периодическая таблица Д.И. Менделеева.

Фундаментальный закон природы имеет следующую формулировку:

«Свойства элементов и образуемых ими соединений находятся в периодической зависимости от зарядов ядер их атомов».

Основные закономерности, лежащие в основе построения периодической системы элементов Д. И. Менделеева

1. Заряд ядра атома, обозначается буквой «Z», является основной характеристикой, определяющей индивидуальность данного элемента.

2. Заряд ядра атома совпадает с порядковым номером элемента в системе Д. И. Менделеева.

3. Заряд ядра атома представляет собой суммарный заряд образующих его протонов и нейтронов и численно равен их количеству. Изменение числа протонов в ядре приводит к изменению химической природы элемента, причем и порядковый номер становится соответственно иным.

4. Изменение числа нейтронов в ядре изменяет его массу, но не приводит к изменению химических свойств, но радиоактивные свойства элементов при этом могут резко меняться.

5. Число электронов в электронейтральном атоме равно зарядовому числу элемента, т. е. величине «Z». Изменение числа электронов в атоме при данной величине «Z» не изменяет химической природы элемента, но изменяет зарядовое состояние атома.

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

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

8. Номер группы, к которой принадлежит данный элемент, как правило, определяется общим числом валентных электронов. При этом, к числу последних относятся электроны, наименее прочно связанные с ядром атома.

  1. Строение поверхности материалов.

  2. Фрикционные и антифрикционные материалы.

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

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

  1. Механические свойства материалов.

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



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

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

Основными характеристиками деформативных свойств строительного материала являются: относительная деформация, модуль упругости Юнга и коэффициент Пуассона.

Внешние силы, приложенные к телу, вызывают изменение межатомных расстояний, отчего происходит изменение размеров деформируемого тела на величину dl в направлении действия силы.

Относительная деформация равна отношению абсолютной деформации dl к первоначальному линейному размеру l тела.

Формула расчета: є = dl / l,

где є - относительная деформация.



Модуль упругости (модуль Юнга) связывает упругую деформацию є и одноосное напряжение s линейным соотношением, выражающим закон Гука.

Формула расчета: є = s / E ,

где E - модуль Юнга.

При одноосном растяжении (сжатии) напряжение определяется по формуле:

s = Р / F,

где Р - действующая сила; F - площадь первоначального поперечного сечения элемента.

Примеры строительных материалов по данному свойству:

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

Зависимость модуля упругости Е ряда материалов от температуры плавления ( tпл. ) смотри в таблице.

Модуль упругости Е связан с другими упругими характеристиками материала посредством коэффициента Пуассона. Одноосное растяжение (сжатие) sz вызовет деформацию по этой оси - єz и сжатие по боковым направлениям - єx и - єy, которые у изотропного материала равны между собой.

Коэффициент Пуассона, или коэффициент поперечного сжатия µ равен отношению:

µ = - єx / єz.

Примеры строительных материалов по данному свойству:

Коэффициент Пуассона бетона - 0,17 - 0,2, полиэтилена - 0,4.



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

Прочность материала оценивают пределом прочности (временным сопротивлением) R, определенным при данном виде деформации.

Схема диаграмм деформаций.

Для хрупких материалов (природных каменных материалов, бетонов, строительных растворов, кирпича и др.) основной прочностной характеристикой является предел прочности при сжатии.

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

Формула расчета: Rсж = Рразр / F,

где Rсж - предел прочности при осевом сжатии; Рразр - разрушающая сила; F - первоначальная площадь поперечного сечения образца.



Предел прочности при осевом растяжении Rр используется в качестве прочностной характеристики стали, бетона, волокнистых и других материалов.

В зависимости от соотношения Rр / Rсж можно условно разделить материалы на три группы:

1) материалы, у которых Rр > Rсж (волокнистые - древесина и др.) ;
2) Rр = Rсж (сталь);
3) Rр < Rсж (хрупкие материалы - природные камни, бетон, кирпич).

Размерность: (Мпа).

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

Твердость минералов оценивают шкалой Мооса, представленной десятью минералами, из которых каждый последующий своим острым концом царапает все предыдущие. Эта шкала включает минералы в порядке возрастающей твердости от 1 до 10.

1. Тальк, Mg3[Si4O10][OH]2 - легко царапается ногтем.
2. Гипс, CaSO4 • 2H3O - царапается ногтем.
3. Кальцит, CaCO3 - легко царапается стальным ножом.
4. Флюорит (плавиковый шпат), CaF - царапается стальным ножом под небольшим нажимом.
5. Апатит, Ca5 [PO4]3 F - царапается ножом под сильным нажимом.
6. Ортоклаз, К2О.Al2О3.6SiO2 - царапает стекло.
7. Кварц, SiO2; топаз, Al2 [SiO4] (F, OH)2; корунд, Al2 О3; алмаз, С - легко царапают стекло, применяются в качестве абразивных (истирающих и шлифующих) материалов.

Твердость древесины, маталлов, бетона и некоторых других строительных материалов определяют, вдавливая в них стальной шарик или твердый наконечник (в виде конуса или пирамиды). В результате испытания вычисляют число твердости
HB = P / F,

где F - площадь поверхности отпечатка.

От твердости материалов зависит их истираемость: чем выше твердость, тем меньше истираемость.



Истираемость оценивают потерей первоначальной массы образца материала, отнесенной к площади поверхности истирания F.

Формула расчета: И = ( m1 - m2 ) / F,

где m1 и m2 - масса образца до и после истирания.

Размерность: (г/кв.см).
Это свойство важно для эксплуатации дорог, полов, ступеней лестниц, и т. п.



Износом называют свойство материалов сопротивляться одновременному воздействию истирания и ударов.



Сопротивление удару - способность материала сопротивляться действию удара падающего груза. Для определения прочности материалов при ударе применяются специальные копры.

  1. Шероховатость поверхности и средства её измерения.

Шероховатость поверхности, совокупность неровностей, образующих микрорельеф поверхности детали. Возникает главным образом вследствие пластической деформации поверхностного слоя заготовки при её обработке из-за неровностей режущих кромок инструмента, трения, вырывания частиц материала с поверхности заготовки, вибрации заготовки и инструмента и т.п. Ш. п. - важный показатель в технической характеристике изделия, влияющий на эксплуатационные свойства деталей и узлов машин - износостойкость трущихся поверхностей, усталостную прочность, коррозионную устойчивость, сохранение натяга при неподвижных посадках и т.п. Требования к Ш. п. устанавливают, исходя из функционального назначения поверхностей деталей и их конструктивных особенностей. В сов. производстве длительное время применяли систему, характеризующую чистоту поверхности с соответствующими ей классами; новая система (введена с 1 января 1975) отменяет использовавшиеся ранее классы чистоты.

Расширенный комплекс параметров новой системы способствует установлению обоснованных требований для поверхностей различного эксплуатационного назначения. При определении числовых значений Ш. п. отсчёт производят от единой базы, за которую принята средняя линия профиля т (рис.). Измерения производят в пределах базовой длины l, т. е. длины участка поверхности, выбранного для измерения Ш. п. без учёта других видов неровностей (например, волнистости), имеющих шаг более l. Числовые значения базовой длины выбирают из ряда: 0,01; 0,03; 0,08; 0,25; 0,8; 2,5; 8; 25 мм. Количественно Ш. п. оценивают следующими основными параметрами (одним или несколькими): средним арифметическим отклонением профиля Ra,высотой неровностей профиля по 10 точкам Rz, наибольшей высотой неровностей профиля Rтах, средним шагом неровностей Sm, средним шагом неровностей по вершинам S, относительной опорной длиной профиля tp. Числовые значения параметров шероховатости, типы направлений неровностей поверхностей (параллельное, перпендикулярное, кругообразное и др.) установлены стандартом. Выбор параметров Ш. п. зависит от конструкции деталей и функционального назначения их поверхностей. Например, для трущихся поверхностей ответственных деталей устанавливают допустимые значения Ra (или Rz), Rтах, tp и направление неровностей; для поверхностей циклически нагруженных ответственных деталей - Rтах, Sm и S и т.п. Требования к Ш. п. указывают числовым значением (или диапазоном значений) одного или нескольких параметров и базовой длиной. Для неответственных поверхностей Ш. п. определяется требованиями технической эстетики, коррозионной стойкости и технологией изготовления.

В СССР стандартом установлены 14 классов Ш. п. (табл.): 1-3-й классы обеспечивают обдирочной обработкой (точением, фрезерованием, строганием); 4-6-й классы - получистовой обработкой; 7-9-й классы - чистовой обработкой (шлифованием, тонким точением, протягиванием, развёртыванием и т.п.); 10-14-й классы - доводочной обработкой (такие, как притирка) суперфиниш, хонингование и др.). Классы шероховатости с 6-го по 14-й разделяются на разряды а, б, в. В классах 1-5, 13 и 14-й не применяют параметр Ra, а в классах 6-12 - параметр Rz, что вызвано необходимостью однозначного определения класса Ш. п. при различных методах контроля. В отличие от применявшихся до 1975 обозначений классов чистоты на чертежах (равносторонний треугольник с добавлением к нему номера класса, например Ñ3 или Ñ7), Ш. п. обозначают знаком Öс указанием над ним числового значения (в мкм) одного из выбранных параметров шероховатости. Значение Ra указывают только числом, а др. параметры - с символом, например Rz3,2. Указанное числовое значение ограничивает наибольшую Ш. п. по параметрам Ra или Rz. Поверхности в состоянии поставки или обработанные без снятия стружки обозначают символом , а при обработке со снятием стружки - .

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

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

СПИСОК ЛИТЕРАТУРЫ.

1. Крагельский И.В., Добычин М.Н., Комбалов В.С. Основы расчетов на трениеи износ. М.: Машиностроение, 1977. 526 с.
2. Блехман И.И., Джанелидзе Г.И. Вибрационное перемещение. М.: Наука, 1964.
313 с.
3. Волосов В.М., Моргунов Б.И. Метод осреднения в теории нелинейных колебательных систем. М.: Изд-во МГУ, 1971. 507 с.
4. Первозванский А.А. Курс теории автоматического управления. М.: Наука,
1986. 615 с.
5. Беркович И.И., Громаковский Д.Г. Трибология. Физические основы,механика и технические приложения. Учебник для вузов. Самар. гос. техн. ун-т. Самара, 2000. 268 с.

1 Основы трибологии (трение, износ, смазка)/ А. В. Чичинадзе, Э. Д. Браун, Н. А. Буше и др.; Под общ. ред. А. В. Чичинадзе: Учебник для технических вузов. – 2- изд., переработ. и доп. – М.: Машиностроение, 2001.

 2 Гаркунов Д. Н. Триботехника (износ и безызносность): Учебник. – 4-е изд., переработ. и доп. – М.: «Издательство МСХА», 2001.

 

3 Трибология: Исследования и приложения: опыт США и стран СНГ/ Под ред. А. В. Белого, К. Лудемы, Н. К. Мышкина. – М.:Машиностроение; Нью-Йорк: Аллертон Пресс, 1993.

 

4 Силин А. А. Трение и его роль в развитии техники. – М.: Наука, 1983.

 

5 Голего Н. Л., Будя А. П., Коценко А.В., Натансон М. Э. Особенности построения и реализации банка данных по трибологии // Проблемы трения и изнашивания. – 1989, вып. 36.

 

6. Сорокин Г. М. Проблемы технического обновления различных отраслей машиностроения// Трение и износ. – 2001, том 22, № 3.

 

7.Захаров С. М. Задачи компьютерной трибологии// Трение и износ. – 2002, том 23, № 3.

1

Смотреть полностью


Похожие документы:

  1. Психологические тесты специального экзамена для абитуриентов, поступающих на педагогические специальности Назначение психологического комплексного теста-опросника

    Тесты
    ... ___ 20__г. Психологические тесты специального экзамена для абитуриентов, поступающих на педагогические специальности Назначение психологического комплексного теста ...
  2. Программа вступительного творческого экзамена для абитуриентогв, поступающих на профессионально-образовательные профили

    Программа
    ... ТВОРЧЕСКОГО ЭКЗАМЕНА ДЛЯ АБИТУРИЕНТОГВ, ПОСТУПАЮЩИХ НА ПРОФЕССИОНАЛЬНО-ОБРАЗОВАТЕЛЬНЫЕ ... на вопросы комиссии по выполняемым заданиям. 1.3. Теоретическая и практическая подготовка для ... выявление у абитуриента комплекса общих и специальных способностей, ...
  3. Программа вступительных испытаний по физике для лиц, поступающих на базе среднего (полного) общего образования Абакан 2011

    Программа
    ... по физике для лиц, поступающих на базе среднего ... внимание обращается на понимание абитуриентом сущности физических ... теорий. Поступающий должен проявить осведомленность в вопросах, связанных ... света. Основы специальной ТЕОРИИ ОТНОСИТЕЛЬНОСТИ ...
  4. Вопросы к вступительным испытаниям для поступающих на обучение по программам подготовки научно-педагогических кадров в аспирантуре РИИИ

    Программа
    ... - ответ одного вопроса по билетам. Для поступающих на профиль «Музыкальное искусство ... ответа на выбранный самим абитуриентом вопрос. Поступающие выбирают вопрос из ... Для письменного перевода предлагается оригинальный текст по избранной специальности ...
  5. Учебное пособие для абитуриентов вузов Москва. 2006 удк 373. 167. 1: 3 ббк 60 С48

    Документ
    ... В. Ломоносова. Книга рекомендована абитуриентам, поступающим на гуманитарные факультеты вузов, а также ... отвечает на вопрос «почему?», то второй — на вопрос «для чего, ... ), ведомственные (распространяются на специальные сферы общественных отношений). ...

Другие похожие документы..