Студопедия — Операции и выражения
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Операции и выражения






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

Операции служат для построения выражений.

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

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

Операция ":: " (два двоеточия) применяется для уточнения имени объекта программы в случае, когда в этом месте програм­мы известны два одинаковых имени, например, когда одно имя объявлено глобально, а другое - в теле функции. Если имени пред­шествуют два двоеточия, то это глобальное имя.

Результат вычисления выражения зависит от приоритетов опе­раций. В C++ реализована система приоритетов опера­ций, включающая 16 уровней. В табл.2 приведен перечень опе­раций с указанием их приоритетов, назначения и схемы запи­си

Таблица 4.2

Операции в C++

 

Знак операции Назначение Схема Приори­тет
:: Доступ к глобальному имени или имени из другой облас­ти :: идентификатор (глобаль­ный) имя области:: имя_члена_струк­туры  
–> Обращение к члену струк­туры по ука­зателю на структуру указатель -> имя_члена_структуры  
. Обращение к члену струк­туры по име­ни структуры имя_структуры имя_члена_структуры  
[ ] Обращение к элементу массива указатель [ин­декс]  
() Преобразова­ние типа данного имя_типа (выра­жение) или (тип) выражение  
() Вызов функ­ции Функция (аргу­менты)  
++ Увеличение ++L-значение или L-значение++  
-- Уменьшение --L-значение или L-значение--  
~ Битовое инвертирование ~ целое_выра­жение  
! Логическое отрицание ! выражение  
- Одноместный минус - выражение  
+ Одноместный плюс + выражение  
& Получение адреса & L-значение  
Продолжение табл. 4.2  
* Разыменова­ние указателя * указатель  
new Выделение динамиче­ской памяти new тип_данного  
delete Освобожде­ние памяти delete указатель  
delete [ ] Освобожде­ние памяти для массива delete [ ] ука­затель  
sizeof Размер дан­ного Sizeof выражение  
sizeof Размер типа данного Sizeof (имя_типа)  
* Умножение выражение1 * выражение2  
/ Деление выражение1 / выражение2  
% Остаток от целочислен­ного деления выражение1 % выражение2  
-> * Обращение к члену струк­туры по ука­зателю указатель_на_струк туру -> * имя_члена_струк­туры-указателя  
.* Обращение к члену струк­туры по име­ни структуры имя_структуры .*имя_члена_структуры-указателя  
+ Одноместный плюс выражение1 + выражение2  
- Одноместный минус выражение1 - выражение2  
< < Сдвиг влево целое_выражение1 < < целое_выра-жение2  
> > Сдвиг вправо целое_выражение1 > > целое_выра-жение2  
Окончание табл. 4.2  
< Меньше Выражение1 < выражение2  
< = Меньше или равно Выражение1 < = выражение2  
> Больше Выражение1> выражение2  
> = Больше или равно выражение1 > = выражение2  
== Равно выражение1 == выражение2  
! = Не равно выражение1! = выражение2  
& Поразрядная конъюнкция Выражение1 & выражение2  
^ Отрицание равнозначно­сти выражение1 ^ выражение2  
| Поразрядная дизъюнкция выражение! | выражение2  
& & Логическое " И" выражение1 & & выражение2  
| | Логическое " ИЛИ" выражение1 | | выражение2  
?: Условное выражение выражение? выражение1: выражение2  
= Простое при­сваивание выражение1 = выражение2  
@= Составное присваива­ние, знак @ - один из зна­ков операций * / % + - < < > > & ^ | выражение1 @= выражение2  
, Операция следования выражение1, выражение2  

Обращение к членам структуры или объединения - имя структурного данного либо указа­теля на структурное данное. В первом случае полное имя члена структуры состоит из имени самой структуры и имени члена структуры, разделенных точкой. Во втором случае за именем указателя на структуру ставится знак -> (стрелка), а за ним - имя члена структуры.

Например, пусть в программе объявлен структурный тип Аn-Struct, содержащий компоненту с именем mmb типа int, и объ­явлены такие объекты:

AnStruct st1; //Данное s1 типа AnStruct AnStruct *pst1 = Sst1; //Указатель на //данное типа AnStruct

Тогда к члену структуры mmb из st1 можно обратиться как к st1.mmb или как pst1-> mmb.

Поскольку членом структуры может быть указатель, в C++ имеются специальные операции разыменования такого указателя, операции.* и ->. Пусть одним из членов структуры AnStruct является указатель pp1на данное типа int.Тогда выражения st1. *pp1 и pst1-> *pp1обеспечат доступ к значению данного, на которое указывает pp1 из st1.

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

Если в программе объявлен массив int NewArray [10];

то выражение *NewArray=0присвоит нулевое значение первому элементу массива. Для обращения к произвольному элементу массива указывается индекс элемента, например NewAr­ray [3], что эквивалентно выражению * (NewAr­ray + 3), т.е. сначала увеличивается указатель NewArray на 3 единицы, а затем разыменовыается полученный указатель. При сложении указателя на объект некоторого типа Т с целым числом N значение указателя увеличивается на N, умноженное на длину данного типа Т.

Индекс - любое выражение со зна­чением целого типа.

Индекс можно задавать не только для имен мас­сивов, но и для любого типа указателя, кроме указателя на тип void:

int *pint = & Array[4]; pint [2] =1;

 

Указатель pintинициализирован адресом 5-го элемента массива Array, а 7-му элементу массива присвоено значение 1.

C++ является типизированным языком и в нем опре­делены явные и неявные преобразования типов данных.

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

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

Стандартные преобразования для целочисленных осуществляются при необходимости обработки целого. Для этого можно использовать char, short int, элемент перечисления или битовое поле, при­чем в знаковом и беззнаковом вариантах. Если intпред­ставляет все значения исходного типа, значение преобразуется к int, иначе оно преобразуется к unsigned int.

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

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

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

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

Для большинства операций преобразования операндов тип ре­зультата определяется одними и теми же правилами:

· если один из операндов - long double, другой операнд также преобразуется в long double;

· если один из операндов - double, другой операнд также преобразуется в double;

· если один из операндов - float, другой операнд преоб­разуется в float.

Стандартные целочисленные преобразования могут происхо­дить над обоими операндами. Если один из операндов unsigned long, другой операнд преобразуется в unsigned long;

· если один из операндов long int, а другой - un­signed int, то при условии, что long int представляет все возможные значения unsigned int, последний преобразуется в long int, в противном случае оба операнда преобразуются в un­signed long int;

· если один из операндов - long, другой операнд также преобразуется в long;

· если один из операндов - unsigned, другой операнд преобразуется в unsigned.

При инициализации, сравнении или использо­вании указателей иным образом происходят следующие преобразования:

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

· указатель на функцию можно преобразовать в void* при условии, что для void* отводится достаточно памяти, чтобы хранить этот указатель;

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

· указатель на объект любого типа, не являющегося const или volatile, можно преобразовать в void*;

Базовый класс считается доступным, если доступны его общие члены; результатом преобразования будет указатель на объект типа базового класса;

· пустой указатель (0) преобразуется сам в себя;

· выражение типа " массив А" может преобразовываться в указатель на начальный элемент массива;

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

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

Явное преобразование типов задается в двух фор­мах.

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

Вторая форма преобразования типа записывается как вызов функции, при этом имя типа должно задаваться иденти­фикатором, например int (x). Результат явного преобразования не является L - значением.

Операции увеличения и уменьшения(++ и -) являются пре­фиксными и постфиксными, вызывая увеличение (уменьшение) своего операнда на единицу, т.е. выражение ++хr эквивалентно xr = хr + 1, а - хr эквивалентно хr = хr - 1. Префикс­ная операция выполняется до того, как ее операнд будет использо­ван в вычислении выражения, а постфиксная операция выполняет­ся после того, как ее операнд будет использован в выражении, например, в результате вычисления выражения

++ xr * 2 + yr-- *3;

переменная xr увеличивается на 1, затем умножается на 2; переменная уrумножается на 3, затем уменьшает­ся на 1. Если перед вычислением этого выражения хr и уrбыли равны 1, то результат выражения равен 5; кроме того, пе­ременная получит значение 2, а переменная уr - значение 0. Та­ким образом, операции увеличения и уменьшения всегда дают побочный эффект, изменяя значения своих операндов. Операнды этих операций должны быть L-значениями.

Операция ~ (тильда) применяется только к целому значению и заменяет все биты своего операнда со значением 0 на 1, а биты со значением 1 на 0.

Логическое отрицание (операция!) возвращает значение 0 це­лого типа, если операнд не равен нулю, или значение 1, если опе­ранд равен нулю.

Операции " одноместный +" и " одноместный -" имеют обыч­ный математический смысл, знак " +" не изменяет значения опе­ранда, " -" - меняет знак операнда на противоположный.

Для получения адреса операнда, являющегося L - значением, применяется операция & (амперсанд). Результатом этой операции будет указатель на соответствующий тип данного. Разыменование указателя, т.е. получение значения данного по указателю на него обеспечивается операцией *. Результат операции ра­зыменования является L-значением.

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

New – операция, требующая в качестве операнда имя типа и предна­значенная для размещения данного указанного типа в динамической памяти.

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

Примеры применения операции new:

int * intptr1 = new int; / * создание объекта //типа int и получение указателя на него

int *intptr2 - new int(2); //то же с // установкой начального значения 2

inr *intArray - new int [10]; // массив из //10 элементов типа int

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

После освобождения памяти использовать этот указатель для обращения к данному нельзя.

Данное, размещенное в динамической памяти операцией new, удаляется из памяти delete с операндом-указателем, значение которого получено операцией new, например:

delete intArray; delete ip2;

Sizeof - операция получения размера данного или типа данного в байтах.

Операнд может быть любого типа, кроме функции и битового поля. Если операндом является имя типа, оно должно заключаться в скобки. Возвращаемое значение имеет пре­допределенный тип size_t; это целый тип, размер которого определяется реализацией компилятора (обычно size_t соответствует unsigned int ). Размер массива равен числубайт, занимаемых массивом в памяти; размер строкового литерала - это число знаков в литерале +1, т.е. завершающий нулевой байт, учи­тывающийся при определении длины литерала.

Значение, возвращае­мое sizeof, является константой.

Двухместные арифметические операции умножения (*), де­ления (/), получения остатка от деления нацело (%), сложения (+) и вычитания (-) имеют обычный смысл и обычный относи­тельный приоритет. Если операнды арифметической операции имеют разные типы, то предварительно выполняются стандартные арифметические преобразования и тип результата операции опре­деляется общим типом операндов после стандартных преобразо­ваний. Следовательно, выражение 7/2 будет иметь значение 3 типа int, т.к. оба операнда имеют тип int, а выражение 7.0/2 даст результат 3.5 типа double, поскольку этот тип имеет первый операнд.

Отношение двух выражений (<, < =, >, > =) операция, требующая операндов арифметического типа или, чтобы операнды были указателями на одинаковый тип. В случае операндов ариф­метического типа вычисляются значения операндов, выполняются стандартные арифметические преобразования и возвращается 1 типа int, если отношение выполняется (истинно) или 0, если отношение не выполняется (ложно). При сравнении ука­зателей результат зависит от относительного размещения в памяти объектов, на которые ссылаются указатели.

Операции сравнения (== и! =) выполняются подобным образом, но имеют мень­ший приоритет.

Выражения отношений соединяются логическими связ­ками & & и | |.

Конъюнкция, логическое умножение (& &) - операция, дающая результат, равный 1 типа int, если оба операнда имеют ненуле­вые значения.

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

В общем случае операндами логических связок могут быть любые скалярные значения. Применяется сокращенная форма вычисления значения логических связок: если в операции & & пер­вый операнд равен нулю, то второй операнд не вычисляется и возвращается 0; если в операции | | первый операнд не равен нулю, то второй операнд не вычисляется и возвращается зна­чение 1.

Присваивание (=) – операция, возвращающая значение, присвоенное левому операнду.

Операция присваивания вычисляется справа налево, т.е. сначала вычисляется присваиваемое значение, затем выполняется присваивание. Это позволяет записывать выражения вида х=у=z=1 для установки одинаковых значений не­скольким переменным. Строятся выражения и с побочным эффектом вида (х = 2)*(у = 3)+(z - 4). Результатом этого выраже­ния будет 24, но одновременно переменные х, у и z получат но­вые значения.

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

Для целых операндов определены операции сдвига влево и вправо. При выполнении операции r1«r2 биты первого опе­ранда сдвигаются влево на r1 разрядов и результат имеет тип первого операнда. Освобождающиеся правые разряды заполняют­ся нулями. В свою очередь, при сдвиге вправо (r1> > r2), если r1 имеет тип unsigned, освобождающиеся левые разряды за­полняются нулями, а при r1 типа signedв освобождающихся левых разрядах повторяется знаковый разряд.

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

Конструкция, называемая условным вы­ражением, строится по схеме: условие? выражение1: выражение2.

В качестве условия может выступать любое скалярное выра­жение. Если результат вычисления условия ненулевой, то значе­нием всего выражения будет выражение1, при нулевом значении условия значение всего выражения определяется выражением2. Второй и третий операнды условного выражения должны быть оба: арифметического типа либо однотипными структурами или объединениями, либо указателями одинакового типа, либо один из них - указатель на какой-либо тип, а другой операнд - null или имеет тип void*. Выражение х > 0? 1: 0 возвращает 1, если хбольше 0, и 0 в противном случае

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

Например, в результате вычисления выраже­ния

x = 2, е* 3, х + 1;

будет получено значение 3 и попутно х получит значение 2. Результат умножения е*3 никак не может быть использован.

 

4.4. Операторы C++

 

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

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

Oпepaтop-выражение - наиболее простой оператор, представляющий собой полное выражение, заканчи­вающееся точкой с запятой, например:

х = 3;

у = (х + 1) * t;

i++;

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

Операторы выбора в C++ представлены условным оператором и переключателем.

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

if (выражение-условие) оператор

if (выражение-условие) оператор1 else

оператор2

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

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

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

switch (целое выражение) оператор

Оператор в этом случае представляет собой тело переключа­теля, всегда является составным и имеет такой вид:

{ case константа1: операторы

case константа2: операторы

default: операторы }

Выполнение переключателя состоит в вычислении управляю­щего выражения и переходе к группе операторов, помеченных case-меткой, равной управляющему выражению; если такой case-Метки нет, выполняются операторы по метке default.Пункт defaultможет отсутствовать, и тогда, если управляющему вы­ражению не соответствует ни одна case-метка, весь переключатель эквивалентен пустому оператору. Следует учитывать, что при выполнении переключателя происходит переход на оператор с выбранной case-меткой, и дальше операторы выполняются в есте­ственном порядке.

Например, в переключателе

switch (count) {

case 1: xr = 1;

case 2: xr = 2;

case 3: xr = 3;

default: xr = 4;

}

если значение countравно 1, то после перехода на case 1будут выполнены все операторы, в результате хr станет равным 4. Что­бы разделить ветви переключателя, в конце каждой ветви нужно записать оператор break.По этому оператору происходит выход из переключателя к следующему оператору программы:

switch (count) {

case 1: х = 1; break;

case 2: x = 2; break;

case 3: x = 3; break;

default: x =4;

}

Теперь в зависимости от значения count будет выполняться только одна ветвь переключателя и хr будет принимать одно из четырех предусмотренных значений.

Операторы цикла: цикл с предусловием, цикл с пост-

условием и цикл с парамет­ром.

Цикл с предусловием строится по схеме:

while (выражение-условие) оператор

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

Цикл с постусловием строится по схеме:

do оператор while (выражение-условие)

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

Цикл с параметром строится по схеме:

for (k1; k2; k3) оператор

где k1, k2 и k3 - выражения скалярного типа.

Цикл с пара­метром реализуется следующим образом:

1) вычисляется выражение k1, обычно это выражение выпол­няет подготовку к началу цикла;

2) вычисляется выражение k2, и, если оно равно нулю, вы­полняется переход к следующему оператору программы (выход из цикла), если к2 не равно нулю, выполняется шаг 3;

3) выполняется оператор - тело цикла;

4) вычисляется выражение k3 - выполняется подготовка к по­вторению цикла, после чего снова выполняется шаг 2.

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

int s = 0;

int i = 0;

while (i < n) s += a [i ++];

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

int s = 0;

int i = 0;

do s += a [i++]; while (i < n);

В данном случае повторениями цикла управляет па­раметр i. Эта задача решается с помощью цикла третьего типа

int i, s;

for (s = 0, i = 0; i < n; i++) s += a [i];

Объявления переменных можно внести в выражение k1 опера­тора forи все записать в виде одного оператора for с пустым телом цикла:

for (int i = 0, s = 0; i < n; s += a[i++]);

Break - оператор для прерывания повторений оператора цикла любого типа в теле цикла.

Continue - оператор для перехода к следующему повторению из любого места тела цикла.

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







Дата добавления: 2014-11-12; просмотров: 818. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

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

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

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

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

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

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

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

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия