Зависимость константы равновесия. Смещение химического равновесия

Химическим равновесием называется такое состояние обратимой химической реакции

aA + b B = c C + d D,

при котором с течением времени не происходит изменения концентраций реагирующих веществ в реакционной смеси. Состояние химического равновесия характеризуется константой химического равновесия :

где C i – концентрации компонентов в равновесной идеальной смеси.

Константа равновесия может быть выражена также через равновесные мольные доли X i компонентов:

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

Для идеальных газов P i = C i RT и P i = X i P , где P – общее давление, поэтому K P , K C и K X связаны следующим соотношением:

K P = K C (RT) c+d–a–b = K X P c+d–a–b . (9.4)

Константа равновесия связана с r G o химической реакции:

(9.5)

(9.6)

Изменение r G или r F в химической реакции при заданных (не обязательно равновесных) парциальных давлениях P i или концентрациях C i компонентов можно рассчитать по уравнению изотермы химической реакции (изотермы Вант-Гоффа ):

. (9.7)

. (9.8)

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

Количественно зависимость константы равновесия от температуры описывается уравнением изобары химической реакции (изобары Вант-Гоффа )

(9.9)

и изохоры химической реакции (изохоры Вант-Гоффа )

. (9.10)

Интегрирование уравнения (9.9) в предположении, что r H реакции не зависит от температуры (что справедливо в узких интервалах температур), дает:

(9.11)

(9.12)

где C – константа интегрирования. Таким образом, зависимость ln K P от 1 должна быть линейной, а наклон прямой равен – r H /R .

Интегрирование в пределах K 1 , K 2 , и T 1, T 2 дает:

(9.13)

(9.14)

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

ПРИМЕРЫ

CO(г) + 2H 2 (г) = CH 3 OH(г)

при 500 K. f G o для CO(г) и CH 3 OH(г) при 500 К равны –155.41 кДж. моль –1 и –134.20 кДж. моль –1 соответственно.

Решение. G o реакции:

r G o = f G o (CH 3 OH) – f G o (CO) = –134.20 – (–155.41) = 21.21 кДж. моль –1 .

= 6.09 10 –3 .

Пример 9-2. Константа равновесия реакции

равна K P = 1.64 10 –4 при 400 o C. Какое общее давление необходимо приложить к эквимолярной смеси N 2 и H 2 , чтобы 10% N 2 превратилось в NH 3 ? Газы считать идеальными.

Решение. Пусть прореагировало моль N 2 . Тогда

N 2 (г) + 3H 2 (г) = 2NH 3 (г)
Исходное количество 1 1
Равновесное количество 1– 1–3 2 (Всего: 2–2)
Равновесная мольная доля:

Следовательно, K X = и K P = K X . P –2 = .

Подставляя = 0.1 в полученную формулу, имеем

1.64 10 –4 =, откуда P = 51.2 атм.

Пример 9-3. Константа равновесия реакции

CO(г) + 2H 2 (г) = CH 3 OH(г)

при 500 K равна K P = 6.09 10 –3 . Реакционная смесь, состоящая из 1 моль CO, 2 моль H 2 и 1 моль инертного газа (N 2) нагрета до 500 K и общего давления 100 атм. Рассчитать состав равновесной смеси.

Решение. Пусть прореагировало моль CO. Тогда

CO(г) + 2H 2 (г) = CH 3 OH(г)
Исходное количество: 1 2 0
Равновесное количество: 1– 2–2
Всего в равновесной смеси: 3–2 моль компонентов + 1 моль N 2 = 4–2 моль
Равновесная мольная доля

Следовательно, K X = и K P = K X . P –2 = .

Таким образом, 6.09 10 –3 = .

Решая это уравнение, получаем = 0.732. Соответственно, мольные доли веществ в равновесной смеси равны: = 0.288, = 0.106, = 0.212 и = 0.394.

Пример 9-4. Для реакции

N 2 (г) + 3H 2 (г) = 2NH 3 (г)

при 298 К K P = 6.0 10 5 , а f H o (NH 3) = –46.1 кДж. моль –1 . Оценить значение константы равновесия при 500 К.

Решение. Стандартная мольная энтальпия реакции равна

r H o = 2 f H o (NH 3) = –92.2 кДж. моль –1 .

Согласно уравнению (9.14), =

Ln (6.0 10 5) + = –1.73, откуда K 2 = 0.18.

Отметим, что константа равновесия экзотермической реакции уменьшается с ростом температуры, что соответствует принципу Ле Шателье.

ЗАДАЧИ

  1. При 1273 К и общем давлении 30 атм в равновесной смеси
  2. CO 2 (г) + C(тв) = 2CO(г)

    содержится 17% (по объему) CO 2 . Сколько процентов CO 2 будет содержаться в газе при общем давлении 20 атм? При каком давлении в газе будет содержаться 25% CO 2 ?

  3. При 2000 o C и общем давлении 1 атм 2% воды диссоциировано на водород и кислород. Рассчитать константу равновесия реакции
  4. H 2 O(г) = H 2 (г) + 1/2O 2 (г) при этих условиях.

  5. Константа равновесия реакции
  6. CO(г) + H 2 O(г) = CO 2 (г) + H 2 (г)

    при 500 o C равна K p = 5.5. Смесь, состоящая из 1 моль CO и 5 моль H 2 O, нагрели до этой температуры. Рассчитать мольную долю H 2 O в равновесной смеси.

  7. Константа равновесия реакции
  8. N 2 O 4 (г) = 2NO 2 (г)

    при 25 o C равна K p = 0.143. Рассчитать давление, которое установится в сосуде объемом 1 л, в который поместили 1 г N 2 O 4 при этой температуре.

  9. Сосуд объемом 3 л, содержащий 1.79 10 –2 моль I 2 , нагрели до 973 K. Давление в сосуде при равновесии оказалось равно 0.49 атм. Считая газы идеальными, рассчитать константу равновесия при 973 K для реакции
  10. I 2 (г) = 2I (г).

  11. Для реакции
  12. при 250 o C r G o = –2508 Дж. моль –1 . При каком общем давлении степень превращения PCl 5 в PCl 3 и Cl 2 при 250 o C составит 30%?

  13. Для реакции
  14. 2HI(г) = H 2 (г) + I 2 (г)

    константа равновесия K P = 1.83 10 –2 при 698.6 К. Сколько граммов HI образуется при нагревании до этой температуры 10 г I 2 и 0.2 г H 2 в трехлитровом сосуде? Чему равны парциальные давления H 2 , I 2 и HI?

  15. Сосуд объемом 1 л, содержащий 0.341 моль PCl 5 и 0.233 моль N 2 , нагрели до 250 o C. Общее давление в сосуде при равновесии оказалось равно 29.33 атм. Считая все газы идеальными, рассчитать константу равновесия при 250 o C для протекающей в сосуде реакции
  16. PCl 5 (г) = PCl 3 (г) + Cl 2 (г)

  17. Константа равновесия реакции
  18. CO(г) + 2H 2 (г) = CH 3 OH(г)

    при 500 K равна K P = 6.09 10 –3 . Рассчитать общее давление, необходимое для получения метанола с 90% выходом, если CO и H 2 взяты в соотношении 1: 2.

  19. При 25 o C f G o (NH 3) = –16.5 кДж. моль –1 . Рассчитать r G реакции образования NH 3 при парциальных давлениях N 2 , H 2 и NH 3 , равных 3 атм, 1 атм и 4 атм соответственно. В какую сторону реакция будет идти самопроизвольно при этих условиях?
  20. Экзотермическая реакция
  21. CO(г) + 2H 2 (г) = CH 3 OH(г)

    находится в равновесии при 500 K и 10 бар. Если газы идеальные, как повлияют на выход метанола следующие факторы: а) повышение T ; б) повышение P ; в) добавление инертного газа при V = const; г) добавление инертного газа при P = const; д) добавление H 2 при P = const?

  22. Константа равновесия газофазной реакции изомеризации борнеола (C 10 H 17 OH) в изоборнеол равна 0.106 при 503 K. Смесь 7.5 г борнеола и 14.0 г изоборнеола поместили в сосуд объемом 5 л и выдерживали при 503 K до достижения равновесия. Рассчитать мольные доли и массы борнеола и изоборнеола в равновесной смеси.
  23. Равновесие в реакции
  24. 2NOCl(г) = 2NO(г) + Cl 2 (г)

    устанавливается при 227 o C и общем давлении 1.0 бар, когда парциальное давление NOCl равно 0.64 бар (изначально присутствовал только NOCl). Рассчитать r G o для реакции. При каком общем давлении парциальное давление Cl 2 будет равно 0.10 бар?

  25. Рассчитать общее давление, которое необходимо приложить к смеси 3 частей H 2 и 1 части N 2 , чтобы получить равновесную смесь, содержащую 10% NH 3 по объему при 400 o C. Константа равновесия для реакции
  26. N 2 (г) + 3H 2 (г) = 2NH 3 (г)

    при 400 o C равна K = 1.60 10 –4 .

  27. При 250 o C и общем давлении 1 атм PCl 5 диссоциирован на 80% по реакции
  28. PCl 5 (г) = PCl 3 (г) + Cl 2 (г).

    Чему будет равна степень диссоциации PCl 5 , если в систему добавить N 2 , чтобы парциальное давление азота было равно 0.9 атм? Общее давление поддерживается равным 1 атм.

  29. При 2000 o C для реакции
  30. N 2 (г) + O 2 (г) = 2NO(г)

    K p = 2.5 10 –3 . В равновесной смеси N 2 , O 2 , NO и инертного газа при общем давлении 1 бар содержится 80% (по объему) N 2 и 16% O 2 . Сколько процентов по объему составляет NO? Чему равно парциальное давление инертного газа?

  31. Рассчитать стандартную энтальпию реакции, для которой константа равновесия
    а) увеличивается в 2 раза, б) уменьшается в 2 раза при изменении температуры от 298 К до 308 К.
  32. Зависимость константы равновесия реакции 2C 3 H 6 (г) = C 2 H 4 (г) + C 4 H 8 (г) от температуры между 300 К и 600 К описывается уравнением

ln K = –1.04 –1088 /T +1.51 10 5 /T 2 .

Уравнения изобары, изохоры, реакции Вант-Гоффа и уравнение Планка

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

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

Получаем выражение

разделив все члены этого уравнения на Т, выразим член через d∆G/dT. Подставим его в дифференцированное выражение изотермы

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

где ∆Н и ∆U - термодинамические тепловые эффекты.

Для того чтобы получить зависимость константы равновесия от дав­ления, используют несколько иной подход. к Р и к с не зависят от давления. Из связи констант равновесия, выраженных различными способами (6), видно, что от давления зависит константа k n: k n = к Р ∙ Р -∆ n

Прологарифмируем это выражение, а затем продифференцируем его по Р:

Отметим, что d ln к р /d P = 0 по условию; d ln P/d P = 1/P откуда получим d ln к N /d P = - ∆n/P; Δn отыскиваем из уравнения Клапейрона-Менделеева, за­писав его для двух состояний в виде PΔV = ΔnRT. Выразим отсюда ΔV, подставим его в дифференцированное выражение константы равновесия
k n , получим уравнение Планка, выражающего зависимость константы рав­новесия от давления

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



Проиллюстрируем предсказательную значимость выведенных урав­нений как количественную характеристику, принципа смещения равновесия на примере синтеза аммиака: N 2 + 3H 2 ↔ 2NH 3 - ∆H

Запишем уравнение изобары

Допустим, что данную систему нагревают ΔН<0. Правая часть урав­нения изотермы уменьшится (∆Н/RT 2)<0, значит левая часть тоже уменьшится: (d ln к р /d P)<0 (она может уменьшиться за счет уменьшения к р).

Константа равновесия синтеза аммиака имеет вид Она

мо­жет уменьшиться за счет снижения давления продуктов реакции и увели­чения давления исходных веществ. Это означает, что при нагревании данная экзотермическая реакция смещается а сторону эндотермического про­цесса разложения аммиака. Этот результат получен на основании анализа изобары Вант-Гоффа. Нетрудно показать, что он согласуется с предсказа­нием принципа Ле-Шателье. Аналогичный результат можно получить, применив к анализу данной реакции уравнения Планка, учитывая, что дав­ление Р обратно 1/V объему. Эти действия предлагается сделать студентам самостоятельно.

Зависимость константы равновесия реакции от температуры может быть описана уравнением изобары химической реакции (изобары Вант-Гоффа):

и изохоры химической реакции (изохоры Вант-Гоффа):

Здесь ΔH и ΔU - тепловой эффект реакции, протекающей, соответственно, при постоянном давлении или при постоянном объёме. Если ΔH > 0 (тепловой эффект положителен, реакция эндотермическая), то температурный коэффициент константы

равновесия тоже положителен, то есть с ростом температуры константа равновесия эндотермической реакции увеличивается, равновесие сдвигается вправо (что вполне согласуется с принципом Ле Шателье).

Константа равновесия и константа скорости реакции

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

легко показать, что:

где k 1 - константа скорости прямой реакции, а k 2 - обратной. Это важное соотношение даёт одну из «точек соприкосновения» химической кинетики и химической термодинамики.

Методы расчета константы равновесия

Расчётные методы определения константы равновесия реакции обычно сводятся к вычислению тем или иным способом стандартного изменения энергии Гиббса в ходе реакции (ΔG 0 ), а затем использованию формулы:

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

Энтропийный расчёт изменения энергии Гиббса и константы равновесия реакции

Энтропийный метод расчёта ΔG реакции является одним из самых распространённых и удобных . Он основан на соотношении:

или, соответственно, для стандартного изменения энергии Гиббса:

Здесь ΔH 0 при постоянных давлении и температуре равно тепловому эффекту реакции, методы расчёта и экспериментального определения которого известны - см., например, уравнение Кирхгофа:

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

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

где S 0 = 0 (постулат Планка) и тогда, соответственно,

.

(здесь индекс sol - от англ. solid). При некоторой заданной температуре T:

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

Для идеальных газов - методами квантовой статистики.

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

где A и B - табличные константы, зависящие от типа рассматриваемого соединения, M - молекулярная масса.

Итак, если извеcтны , и температурные зависимости теплоёмкости, может быть рассчитано по формуле:

Несколько упрощённый вариант этой формулы получают, считая сумму теплоёмкостей веществ не зависящей от температуры и равной сумме теплоёмкостей при 298 K:

И еще более упрощённый расчёт проводят, приравнивая сумму теплоёмкостей к нулю:

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

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

Анри Ле Шателье (Франция) сформулировал этот термодинамический принцип подвижного равновесия, позже обобщённый Карлом Брауном

Рассмотрим обратную реакцию общего вида

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

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

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

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

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

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

Из этого уравнения следует

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

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

Уравнение указанной реакции имеет вид

Следовательно, константа равновесия этой реакции определяется выражением

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

Единицы измерения для константы равновесия

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

Какова размерность константы равновесия для следующей реакции?

Следовательно, она имеет размерность (моль-дм-3)

Итак, размерность рассматриваемой константы равновесия или дм3/моль.

Какую размерность имеет константа равновесия для следующей реакции?

Константа равновесия указанной реакции определяется выражением

Следовательно, она имеет размерность

Итак, размерность данной константы равновесия: атм или Па.

Гетерогенные равновесия

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

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

Константа равновесия этой реакции определяется выражением

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

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

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

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

Давайте рассмотрим синтаксис, а потом я приведу наглядный пример.

В Си константа определялась директивой # define

#define PI 3.14 // PI будет содержать теперь 3.14

Эту директиву можно встретить и во многих нынешних программах, однако это устаревший подход. В С++ был введен новый модификатор const.

Const float PI=3.14;\

Const float PI=3.14; int _tmain(int argc, _TCHAR* argv) { setlocale (0,""); //установим язык по-умолчанию (русский) int S,R=21; //площадь и радиус окружности S=PI*R*R; system ("pause"); //чтобы окно не закрылось return 0; }

Где бы мы не вызывали эту переменную, везде она будет равняться 3,14. Очень удобно, не так ли? Кстати, ради эксперимента попытайтесь присвоить PI какое-либо значение в программе. Посмотрите, как отреагирует компилятор.

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

Const PROIZV=23*12; // теперь у нас в константе число 276

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

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

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

Перечисления дожны объявляться вне функции main. Дело в том, что это тип, определяемый программистом. А такие типы наряду со структурами и классами должны объвляться, желательно, в отдельном модуле. Но мы все это рассмотрим значительно позже. Вот, как объявляется перечисление:

enum Month {Jan, Feb, Marth,April, May, June, Jule, August, Sept, Oct, Nov, Dec};

Начинается перечисление с ключевого слова enum, затем указывается имя перечисления (это не переменная!!!) , а в скобках указывается набор значений.

Теперь мы можем использовать объявленный тип в нашей программе:

Int main () { Month curMonth=June; // теперь в переменной curMonth хранится //июль }

Как вы думаете, что хранится в переменной curMonth? Если думаете, что June, то ошибаетесь. Перечисление это числовой тип и он неявно приводится к типу int. Нумерация начинается с 0. Зная это, мы можем предположить, что в curMonth лежит число 5. Иными словами, мы могли присвоить этой переменной вместо названия месяца его числовой аналог в трактовке перечисления и были бы правы.

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

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

Теперь давайте вернемся к нашему примеру и посмотрим еще, что можно изменить. Месяцы мы нумеруем с единицы, а не с нуля. По нашему коду видно, сто июню присвоено значение 5, а не 6. Что ж, в перечислении можно задать собственную нумерацию.

Я явно присвоил Jan значение 1. Остальным месяцам компилятор уже сам присвоит нужные значения. Конечно, можно и в ручную все поставить, да только нет в этом смысла.

Ну и напоследок. Переменную можно объявить и при задании перечисления:

Enum Month {Jan=1, Feb, Marth,April, May, June, Jule, August, Sept, Oct, Nov, Dec} thisMonth;

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

Приведение типов

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

Вот пример. Нам нужно расчитать зарплату сотрудника. Мы знаем ставку часа. Затем умножаем эту величину на количество отработанных часов и получаем нужный результат. Здесь все просто. Но представьте себе директора, который нанимает сотрудника и не знает, сколько ему нужно платить. Тогда он берет величину зарплаты по региону и делит ее на количество часов.

Int zarp, hour, vel; vel=22320; // зарплата в городе равна 22320 рублям hour=22 * 8; //количество часов равно 22 рабочих дня * 8 часовой рабочий день zarp=vel / hour; // наш час cout<<"Час работника стоит =" <

Программа нам выдаст цифру в 126 рублей. Нас это устраивает, однако несложно взять калькулятор и высчитать, что на самом деле число составляет 126, 8. И если сотрудник не обидится на эту недодачу, то вот в расчетах такие погрешности недопустимы. Что же произошло?

zarp – это целое и хранит оно только целое значение. Дробная часть будет отброшена. Иными словами, Нужно было использовать тип double, который хранил бы дробь. А вот здесь ситуация несколько интереснее. Компилятор временно присваивает переменным hour и vel тип double, как бы расширяя их значение. Мы об этом можем не догадываться, хотя это важно понимать. Компилятор, встречая тип большего размера, присвает его операнду с типом меньшего значение. Вот и все правило.

Однако представьте себе ситуацию, когда параноидально настроенный программист напрасно расходует память (вы же помните, что тип double больше int в 2 раза?) и старается везде присвоить именно этот тип. Да, он получает точное значение, жертвуя некоторой производительностью (операции с дробными типами выполняются медленнее, чем с целыми, но сейчас это уже неактуально), однако искусственно себя загоняте в угол. Давайте вернемся к нашему директору, который все не знает, сколько должен платить за работу. Допустим, что скрупулезный бухгалтер дал ему величину часа в 132,12 рублей. Вы сразу же присвоите ему значение double, начнете расчет и взвоете, когда везде появятся копейки. Ну не нужно же нам работнику их выдавать!

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

(тип приведения)выражение

(int)vel; // искусственно привели тип к целому.

В С++ Страупструп ввел новое преобразование. Вот его описание:

static _ cast <тип>(выражение)

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

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

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