Читайте также:
|
|
4. Типы данных
В этом разделе вводится концепция типа данных и рассматриваются свойства основных типов. В частности, описывается устройство перечислимых и ограниченных типов, исследуются структурные типы данных. Особое внимание уделяется массивам, записям и объединениям. В заключение рассматриваются множественные и ссылочные типы.
На структуру типов значительное влияние оказывают методы их реализации. По этой причине в раздел включена еще одна часть, касающаяся реализации типов данных, в частности, массивов.
4.1. Введение в типы
Компьютерные программы обрабатывают данные и получают результаты. Эффективность этого процесса зависит от того, насколько типы данных соответствуют реальным задачам. Важно, чтобы в языке была предусмотрена поддержка соответствующего разнообразия типов и структур данных.
Концепции типов развиваются на протяжении последних 50 лет. В ранних языках программирования данные моделировались небольшим количеством основных структур, поддерживаемых этими языками. Например, в ранних версиях языка FORTRAN связные списки и двоичные деревья обычно реализовывались с помощью массивов.
Первый шаг в сторону от такой модели был сделан разработчиками структур данных в языке COBOL. Программистам было позволено устанавливать точность десятичных чисел и использовать структурные типы данных. В языке PL/I возможность устанавливать точность целочисленных величин и чисел с плавающей точкой была расширена. Позднее аналогичные средства были включены в языки Ada и FORTRAN 90.
Разработчики PL/I определили в языке много различных типов данных. В языке ALGOL 68, напротив, было представлено небольшое количество основных типов. Однако были реализованы операторы, обеспечивающие гибкое описание структур, что позволило создавать определяемые пользователем типы данных, приспосабливая их к поставленной задаче. Это было одним из самых значительных достижений в области разработки типов.
Определяемые пользователем типы улучшают читабельность программ, поскольку для них можно использовать осмысленные имена. Они допускают проверку типов переменных. Кроме того, эти типы облегчают модификацию программ: программист может модифицировать тип некоторой категории переменных, изменив оператор объявления типов.
Появившиеся в конце 1970-х годов концепции типов, определяемых пользователем, были обобщены и реализованы в языке Ada 83 как абстрактные типы данных. Согласно этой методологии, программисту позволяется создавать отдельный тип для каждого класса переменных, определяемых предметной областью задачи. Более того, язык должен обеспечивать уникальность типов, фактически являющихся абстракциями переменных из предметной области. Идея, лежащая в основе абстрактного типа данных, заключается в отделении использования типа от способа представления переменных этого типа. Все типы данных, предусмотренные в высокоуровневых языках программирования, являются абстрактными.
Наиболее распространенными структурными типами данных являются массивы и записи. Они, как и некоторые другие типы данных, задаются операторами типов или конструкторами. В качестве примера операторов типа можно назвать существующие в языке C круглые и квадратные скобки, а также звездочки, используемые для задания массивов, функций и указателей.
О переменных часто говорят в терминах дескрипторов. Дескриптором называется совокупность атрибутов переменной, реализуемая в виде набора содержащих эти атрибуты ячеек памяти. Если все переменные являются статическими, то дескрипторы нужны только во время компиляции. Статические дескрипторы обычно создаются компилятором в виде части таблицы идентификаторов и используются во время компиляции. Динамические атрибуты, в свою очередь, нуждаются в динамическом дескрипторе (или его части) во время выполнения программы. В этом случае дескриптор используется системой поддержки выполнения программ. И статические, и динамические дескрипторы используются для проверки типов, а также в операциях размещения переменных в памяти и удаления из нее.
Со значением переменной и занимаемой ею памятью в литературе часто ассоциируется термин «объект». В данном курсе под словом «объект» подразумеваются экземпляры абстрактных типов данных, определяемых пользователем. В объектно-ориентированных языках программирования объектом называется любой экземпляр любого встроенного или определенного пользователем класса.
В последующих разделах рассмотрены широко распространенные типы данных. Для всех типов основным является вопрос о том, какие операции предусмотрены с переменными данного типа и как они задаются.
4.2. Элементарные типы данных
Типы данных, не определяемые в терминах других типов, называются элементарными. Большинство языков имеют определенный набор элементарных типов данных. Некоторые из них являются отображением особенностей аппаратного обеспечения – например, целые числа. Реализация других типов требует незначительной программной поддержки.
4.2.1. Числовые типы
Во многих ранних языках программирования существовали только числовые элементарные типы. В современных языках эти типы по-прежнему играют существенную роль.
4.2.1.1. Целые числа
Наиболее распространенным элементарным числовым типом является целое число. Многие компьютеры поддерживают несколько размеров целых чисел, и эти возможности нашли отражение в языках программирования. В реализациях языка Ada, например, может содержаться до трех размеров целых чисел: SHORT INTEGER, INTEGER и LONG INTEGER. Некоторые языки, например C, содержат целые числа без знаков.
Целые числа представляются в компьютере в виде строки битов, причем один из битов (как правило, крайний слева) часто представляет знак. Целые типы поддерживаются непосредственно аппаратным обеспечением.
В большинстве современных компьютеров для хранения отрицательных целых чисел используется дополнительный код числа, удобный для выполнения операций сложения и вычитания. Дополнительный код отрицательного целого числа в двоичной системе образуется путем логического дополнения положительного числа и прибавления к нему единицы. В некоторых компьютерах все еще используется другое представление, а именно: обратный код числа в двоичной системе. При такой записи отрицательное значение целого числа хранится как логическое дополнение к его абсолютному значению. Недостатком представления в виде обратного кода является наличие двух форм записи числа 0.
4.2.1.2. Числа с плавающей точкой
Действительные числа моделируются в компьютере типами чисел с плавающей точкой, однако представление большинства этих чисел является лишь аппроксимацией. Например, фундаментальные числа π и e не могут точно представляться числами с плавающей точкой. В большинстве компьютеров числа с плавающей точкой хранятся в двоичных кодах, что еще усугубляет проблему их записи. Например, даже десятичную величину 0.1 нельзя представить конечным набором двоичных чисел. Другой проблемой использования чисел с плавающей точкой является потеря точности при арифметических операциях.
Числа с плавающей точкой кодируются в форме мантиссы и порядка, перенятой из научной записи. Ранее компьютеры использовали различные представления величин с плавающей точкой, но в наше время в большинстве случаев используется формат IEEE Floating-Point Standard 754. Разработчики языков программирования используют любое представление, поддерживаемое аппаратным обеспечением. Большинство языков содержит два типа чисел с плавающей точкой, часто называемых float и double. Переменные типа float имеют стандартный размер, равный, как правило, четырем байтам памяти. Тип double используется в ситуациях, требующих большей по размеру мантиссы. Относящиеся к этому типу переменные с удвоенной точностью записи обычно занимают вдвое больше памяти, чем обычные переменные, и имеют как минимум вдвое больше битов в мантиссе.
Множество величин, которые можно представить с помощью чисел с плавающей точкой, определяется их точностью и диапазоном. Точность числа – это точность его мантиссы, измеряемая числом битов, а в понятие диапазона входит диапазон изменения мантиссы и, что более важно, диапазон изменения порядка.
Аппаратное обеспечение некоторых небольших компьютеров не поддерживает операции с плавающей точкой. На таких машинах эти операции моделируются с помощью программного обеспечения, что может замедлять их выполнение в 10–100 раз по сравнению с аналогичными аппаратными операциями.
4.2.1.3. Десятичные числа
Компьютеры, предназначенные для финансовых приложений, часто поддерживают типы десятичных чисел (decimal). К этим типам относятся числа с фиксированным количеством десятичных знаков и десятичной точкой в установленном месте. Такие типы в финансовых приложениях являются основными. Они играют существенную роль в языке COBOL.
Достоинством десятичных чисел является способность (в отличие от типов с плавающей точкой) содержать точные значения десятичных величин, по крайней мере, из ограниченного диапазона. Недостатками десятичных типов является ограниченный диапазон изменения переменных вследствие отсутствия показателей степени и неэкономного представления в памяти.
Десятичные числа, как и строки символов, записываются в памяти с помощью двоичных кодов десятичных цифр. Такие представления называются двоично-кодированными десятичными числами (BCD). В некоторых случаях десятичные величины запоминаются в виде одной цифры на байт, а в других байт содержит две цифры. В любом случае памяти для запоминания числа требуется больше, чем при двоичных представлениях.
Рассмотрим пример. Кодировка десятичной цифры требует не менее 4 бит. Следовательно, для запоминания шестиразрядного десятичного числа потребуется 24 бит памяти. В то же время запоминание этого же числа в двоичном представлении требует всего 20 бит. Операции над десятичными величинами производятся аппаратным обеспечением машин, имеющих такие возможности, либо моделируются программным обеспечением.
4.2.2. Булевские типы
Булевские (boolean) типы являются одними из простейших. Диапазон их значений содержит всего два элемента, один для обозначения истинности, другой – ложности. Впервые эти типы появились в языке ALGOL 60 и с 1960 года были включены в большинство универсальных языков программирования. Исключением является язык C, в котором в качестве условных выражений могут использоваться числовые выражения. В таких выражениях все операнды с ненулевыми значениями считаются истинными, тогда как нуль считается ложным значением. Несмотря на то, что в языке C++ булевский тип предусмотрен, в этом языке также можно использовать числовые выражения вместо булевских.
Булевские типы часто применяются для представления переключателей или признаков. Хотя для этих целей могут использоваться и другие типы (например, целый), булевские типы повышают читабельность программы.
Булевские значения могут представляться единственным битом, но, поскольку на многих машинах к отдельному биту памяти обращение неэффективно, эти значения часто содержатся в минимальной ячейке памяти, имеющей эффективно доступный адрес, которой обычно является байт.
4.2.3. Символьные типы
Символьные данные запоминаются в компьютерах с помощью цифрового кодирования. Наиболее распространенной системой кодировки является система ASCII (American Standard Code for Information Interchange – Американский стандартный код обмена информацией), в которой для кодировки 128 различных символов используется диапазон значений 0–127. В качестве средства обработки кодов отдельных символов многие языки программирования предусматривают для них отдельный основной тип.
Вследствие глобализации коммерции и необходимости связи между компьютерами во всем мире набор символов ASCII стал недостаточным. Поэтому в 1991 году был разработан альтернативный 16-битовый набор символов, получивший название Unicode. В этом наборе содержатся символы большинства естественных языков мира. Например, в нем есть символы кириллицы и тайские цифры. Первым широко распространенным языком, использующим набор символов Unicode, явился язык Java. Впоследствии этот набор нашел применение и в других популярных языках, например, C#.
4.3. Символьные строки
Символьные строки представляют собой последовательности символов. Константные строки символов сопровождают вывод результатов. Также ввод и вывод всех типов данных часто производится посредством строк. Строки символов играют существенную роль во всех программах, работающих с символьными данными. Два важнейших вопроса разработки, связанных с символьными строками, таковы.
· Должны ли строки быть разновидностью массива, состоящего из
символов, или элементарным типом (без индексации, характерной для массивов)?
· Должны ли строки иметь статическую или динамическую длину?
4.3.1. Строки и действия над ними
Если в языке строка не определена как элементарный тип, то строковые данные обычно хранятся в массивах отдельных символов, и ссылаться на них можно, лишь как на элементы массивов. Такой подход принят в языках Pascal, С, C++ и Ada. В классическом языке Pascal, где строки не являются основным типом, значения могут присваиваться массивам char, имеющим атрибут packed, и такие массивы могут сравниваться между собой с помощью операторов отношений. В более поздних диалектах Pascal (Delphi) строка уже является стандартным типом.
В языке Ada тип STRING является встроенным и определяет одномерные массивы элементов, принадлежащих к типу CHARACTER. Для типов STRING предусмотрены операции обращения к подстрокам, конкатенация, операторы отношений и присваивания. Обращение к подстрокам позволяет интерпретировать любую подстроку данной строки как величину, на которую можно ссылаться, или переменную, которая может входить в оператор присваивания. Обращение к подстроке обозначается целочисленным диапазоном, взятым в круглые скобки и указывающим расположение требуемых символов. Например, команда
NAME1(2:4)
задает подстроку, состоящую из второго, третьего и четвертого символа строки, являющейся значением переменной NAME1.
Конкатенация строк символов в языке Ada является операцией, обозначаемой символом &. Следующий оператор выполняет присоединение переменной NAME2 к правому концу строки, являющейся значением переменной NAME1:
NAME1:= NAME1 & NAME2;
В языках C и C++ для хранения строк используются массивы char, а набор операций со строками предусмотрен в стандартной библиотеке с заголовочным файлом string.h. В большинстве операций со строками и в большинстве библиотечных функций подразумевается, что строки символов завершаются специальным символом – нулевым байтом. Это соглашение является альтернативой хранению длины строковых переменных. Библиотечные функции выполняют свои операции, пока не дойдут в обрабатываемой строке до нулевого байта. Библиотечные функции, создающие строки, сами вносят в них нулевой байт. Литералы символьных строк, создаваемые компилятором, также содержат нулевой байт. Рассмотрим следующее объявление:
char *str = "apples";
В этом примере str – указатель типа char, адресующий строку символов apples с нулевым байтом в конце. Инициализация указателя str разрешена, поскольку литералы символьных строк представляются указателями типа char, а не собственно строкой.
В языках FORTRAN 77, FORTRAN 90 и BASIC строки интерпретируются как основные типы, и для них предусмотрены операции присваивания, конкатенации, ссылки на подстроки, а также операторы отношения.
В языке Java строки поддерживаются классом string как встроенные типы, значения которых являются константными строками, и классом StringBuffer, значения которого могут изменяться, и более всего похожи на массивы отдельных символов. Использование подстрок разрешено для переменных класса StringBuffer. Язык C# поддерживает обладающий широкой функциональностью встроенный тип string.
Операции присваивания и сравнения символьных строк усложнены возможностью использования операндов различных длин. Что произойдет, например, при присвоении более длинной строки более короткой строке или наоборот? Обычно в таких ситуациях принимаются простые и целесообразные решения, хотя пользователи часто сталкиваются с проблемами при их запоминании.
Еще одной базовой операцией со строками символов является сопоставление с образцом. Часто она обеспечивается библиотечной функцией, а не операцией языка. Одним из исключений является язык SNOBOL4, содержащий встроенную операцию сопоставления с образцом. Этот язык предоставляет максимально полные возможности для работы со строками. Образцами строк в языке SNOBOL4 являются выражения, которые могут присваиваться переменным. Рассмотрим следующий фрагмент:
LETTER = 'abcdefghijklmnopqrstuvwxyz'
WORDPAT = BREAK(LETTER) SPAN(LETTER).WORD
LETTER – это переменная, значением которой является строка из всех строчных букв латинского алфавита. WORDPAT – образец, следующим образом описывающий слова: вначале пропускаются все символы, пока не будет найдена буква, затем буквы перебираются, пока не будет найден символ, не являющийся буквой. Образец также содержит оператор «.». Он указывает, что строка, совпавшая с образцом, присваивается переменной WORD. Указанный образец может использоваться, например, в операторе
TEXT WORDPAT
Этот оператор пытается найти строку подряд расположенных букв в значении переменной TEXT.
Вторым важным языком, содержащим встроенные операции сопоставления с образцом, является язык Perl. В этом случае выражения сопоставления с образцом напоминают математические регулярные выражения. Они произошли от раннего строчного редактора ed операционной системы UNIX и стали частью языков оболочек системы UNIX. В итоге самой сложной формой этих языков стал язык Perl. Объяснение этих выражений довольно громоздко и занимает отдельную главу в книге по языку Perl. Уже существуют книги, посвященные выражениям сопоставления с образцом. Мы рассмотрим лишь два простых примера. Пусть имеется следующее выражение-образец:
/[A-Za-z][A-Za-z\d]+/
Он соответствует типичной форме имен в языках программирования. В квадратных скобках заключены классы символов. Первый класс задает все буквы; второй – все буквы и цифры (цифра задается сокращением \d). Если оставить только второй класс, то не удастся запретить имена, начинающиеся с цифр. Следующий за второй категорией знак «+» устанавливает, что в имени должно содержаться не менее одного символа, входящего в данную категорию. Таким образом, рассматриваемый эталон соответствует строке, начинающейся с буквы, за которой следует не менее одной буквы или цифры. Рассмотрим следующее выражение-образец:
/\d+\.?\d* | \.\d+/
Этот образец соответствует числовым константам. Символы \. задают точку в десятичной записи числа. Вопросительный знак определяет количество (0 или 1) появлений того, что следует перед ним. Вертикальная черта (|) разделяет два альтернативных варианта всего образца. Первый вариант соответствует строкам с несколькими цифрами, за которыми, возможно, следует десятичная точка и цифры; вторая альтернатива соответствует строкам, начинающимся с десятичной точки, за которой следует не менее одной цифры.
Растворимость веществ и состав растворов.
План лекции:
1) Характеристика растворов.
2) Способы выражения концентрации растворов.
3) Природа процесса растворения.
4) Растворимость веществ в воде.
Самопроизвольный процесс распределения одного вещества в другом называется растворением.
Растворы – это гомогенные (однофазные) системы переменного состава, состоящие из 2-х или более составных частей (компонентов). Такие системы называют истинными растворами. Компонентами раствора (как и любой системы) называют вещества, которые могут быть выделены из него и существовать самостоятельно. Их называют растворителем и растворенным веществом.
Растворителем является компонент, агрегатное состояние которого совпадает с агрегатным состоянием раствора. Если оба компонента до растворения находятся в одном агрегатном состоянии, растворителем считается тот, которого больше. Частицы растворенного вещества раздроблены до размера атомов, ионов, молекул (порядка 10-9 см).
По закону сохранения массы масса раствора складывается из массы растворенного вещества и массы растворителя.
Классифицируют растворы по следующим признакам:
o агрегатному состоянию (твердые (сплавы металлов), газообразные (воздух), жидкие растворы);
o природе растворителя (водные, неводные растворы);
o природе растворенного вещества (растворы электролитов и неэлектролитов).
Если выделяющаяся из жидкого расплава твердая фаза состоит из равномерно распределяющихся в одном кристалле обоих компонентов, такие образования называются твердыми растворами.
Процесс растворения – это физико-химический процесс. Размельчение вещества, диффузия частиц одного вещества в другом – это физический процесс. Взаимодействие молекул растворителя с частицами растворенного вещества – это химическая реакция образования их соединений (сольватов).
Если растворитель – вода, реакция гидратации приводит к образованию гидратов. Большинство гидратов существуют только в растворах и неустойчивы. Вещества, которые удерживают воду в твердом состоянии, так как она химически связана и входит в кристаллическую решетку, называются кристаллогидратами. Примерами кристаллогидратов являются природные соли: медный купорос CuSO4 × 5H2O, сода Na2CO3× 10H2O, глауберова соль Na2SO4 × 10H2O, гипс CaSO4 × 2H2O. При прокаливании кристаллизационная вода из них может быть удалена.
Важной характеристикой раствора, определяющей его свойства, является концентрация – содержание растворенного вещества в единице массы или объема раствора (или растворителя). Некоторые виды концентраций представлены в таблице 1.
Растворимостью называется способность вещества растворяться в том или ином растворителе. Мерой растворимости при данных условиях служит концентрация насыщенного раствора этого вещества. Насыщенным называется раствор, находящийся в равновесии с растворенным веществом. Численно растворимость может выражаться в тех же единицах, что и концентрация (см. табл. 12). Иногда растворимость выражают числом единиц массы растворенного вещества, насыщающего при данных условиях 100 единиц массы растворителя. Выраженную таким образом растворимость называют коэффициентом растворимости.
Таблица 12
Виды концентраций растворов
Наименование концентрации | Формула расчета | Единицы измерения | Физический смысл |
Массовая доля растворенного вещества (процентная концентрация) | w = m р.в./ m р-ра ∙ 100% m р-ра = m р.в. + m р-ля m р-ра = ρ р-ра ∙ Vр-ра | доли, % (масс.) | Масса растворенного вещества (г), содержащаяся в 100 г раствора |
Молярная концентрация | СМ = nр.в./ Vр-ра, где nр.в. – количество растворенного вещества (моль), Vр-ра – объем раствора (л); n р.в. = m р.в. M р.в. | моль / л, (М) | Число моль растворенного вещества в 1 л раствора |
Нормальная концентрация (молярная концентрация эквивалентов) | СН = nэ р.в. / Vр-ра, где nэ р.в. – количество эквивалентов (моль экв.) растворенного вещества, V р-ра– объем раствора (л); nэр.в. = m р.в. Mэ р.в. | моль экв./ л, (Н) | Число моль эквивалентов растворенного вещества в 1 л раствора; nэ 1 = nэ 2 СН1 ∙ V1 = СН2 ∙ V2 |
Титр | Т = СН ∙ Мэ р.в. | г / мл | Масса растворенного вещества в 1 мл раствора |
Моляльная концентрация | СМл = n р.в./ m р-ля где n р.в. - количество (моль) растворенного вещества, m р-ля – масса растворителя (кг) | моль / кг, (Мл) | Число моль растворенного вещества в 1 кг растворителя |
Мольная доля растворенного вещества | χ = nр.в nр.в.+ nр-ля | доли, % (мол.) | Отношение числа моль вещества к сумме числа моль вещества и растворителя |
Растворимость зависит от природы вещества: полярные вещества и ионные соединения хорошо растворяются в полярных растворителях (воде, жидком аммиаке), а неполярные вещества – в неполярных растворителях (бензоле, хлороформе и других). Большинство твердых веществ растворяется с поглощением тепла, так как значительная энергия затрачивается на разрушение кристаллической решетки. Последняя не компенсируется энергией, выделяющейся при образовании сольватов (гидратов). Поэтому, как правило, растворимость твердых веществ увеличивается при нагревании. Графическая зависимость растворимости твердых веществ с температурой называется кривой растворимости. Ее можно найти в справочной литературе. При растворении твердых веществ объем системы изменяется мало, поэтому их растворимость мало зависит от давления.
Жидкости растворяются в жидкостях по-разному. Некоторые неограниченно растворимы одна в другой и смешиваются в любых соотношениях (спирт – вода), другие – взаимно растворимы до некоторого предела (фенол – вода) и разделяются на два слоя. В таких случаях с повышением температуры увеличивается и взаимная растворимость этих жидкостей. Температура, при которой наступает неограниченная растворимость жидкостей называется верхней критической температурой растворения (ВКТР). Как и в случае твердых веществ, объем системы при смешении меняется мало, поэтому взаимная растворимость жидкостей незначительно зависит от давления.
Если в систему, состоящую из двух несмешивающихся жидкостей, ввести третье вещество, способное растворяться в каждой из них, то вещество будет распределяться между обеими жидкостями пропорционально своей растворимости так, что отношение концентраций его в этих растворителях при постоянной температуре остается постоянным, независимо от общего количества растворенного вещества:
С1/С2 = К
Это правило носит название закона распределения. В приведенном выражении закона С1 и С2 − концентрации растворенного вещества в первом и втором растворителях, К − коэффициент распределения. Сопособ извлечения растворенного вещества из раствора с помощью второго растворителя, несмешивающегося с первым, называется экстракцией и широко применяется в промышленности.
Растворение газов в воде представляет собой экзотермический процесс, поэтому растворимость газов с повышением температуры уменьшается. Так, кипячением можно удалить из воды весь растворенный воздух. Однако растворение газов в органических растворителях может сопровождаться и поглощением теплоты.
При растворении газа в жидкости устанавливается равновесие:
газ + жидкость ↔ насыщенный раствор газа в жидкости.
При этом объем системы сильно меняется. Следовательно, повышение давления будет смещать равновесие вправо, то есть увеличивать растворимость газа. Растворимость газа в жидкости подчиняется закону Генри: масса газа, растворяющегося при данной температуре в определенном объеме жидкости, прямо пропорциональна парциальному давлению газа. Математически закон Генри выражается уравнением:
С = κ ∙ Р,
где С – массовая концентрация газа в насыщенном растворе;
Р – парциальное давление газа;
κ – константа Генри.
Из закона Генри вытекает важное следствие: объем газа, растворяющегося при постоянной температуре в данном объеме жидкости, не зависит от его парциального давления. Поэтому растворимость газов выражают не в граммах, в единицах объема (мл, л), растворяющегося в 100 мл (1л) жидкости. Если над жидкостью находится несколько газов, каждый растворяется соответственно своему парциальному давлению.
Выводы:
1. Процесс растворения одного вещества в другом протекает самопроизвольно и является физико-химическим процессом.
2. Важной характеристикой растворов является содержание растворенного вещества в растворе, которое может выражаться в различных единицах.
3. По своей природе растворенные вещества делятся на электролиты и неэлектролиты. Электролиты при растворении в воде диссоциируют (распадаются) на ионы.
4. В зависимости от количества образующихся ионов различают сильные и слабые электролиты.
Контрольные вопросы:
1. Какие физико-химические системы называют растворами?
2. По каким признакам классифицируют растворы?
3. Назовите виды концентраций растворов. В каких единицах они измеряются?
4. Какие вещества называются электролитами? Чем отличаются сильные электролиты от слабых?
Литература:
1. Глинка, Н.Л. Общая химия: учеб. пособие для вузов / Н.Л. Глинка. – М.: Интеграл-Пресс, 2002. – гл. VII, с. 205 – 219.
2. Коровин, Н.В. Общая химия: учеб. для технич. направл. и спец. вузов / Н.В. Коровин. – М.: Высшая школа, 2006. – §§ 8.1 – 8.4, с. 204 –219.
3. Фролов В.В. Химия / В.В. Фролов. – М.: Высш. шк., 1979. –
7.1 – 7.4, с. 176 – 194.
Дата добавления: 2014-11-24; просмотров: 215 | Поможем написать вашу работу | Нарушение авторских прав |
<== предыдущая лекция | | | следующая лекция ==> |
Лекция 14 | | | Роль и значение экономического равновесия |