🗊Презентация Высокоуровневые методы информатики и программирования

Нажмите для полного просмотра!
Высокоуровневые методы информатики и программирования, слайд №1Высокоуровневые методы информатики и программирования, слайд №2Высокоуровневые методы информатики и программирования, слайд №3Высокоуровневые методы информатики и программирования, слайд №4Высокоуровневые методы информатики и программирования, слайд №5Высокоуровневые методы информатики и программирования, слайд №6Высокоуровневые методы информатики и программирования, слайд №7Высокоуровневые методы информатики и программирования, слайд №8Высокоуровневые методы информатики и программирования, слайд №9Высокоуровневые методы информатики и программирования, слайд №10Высокоуровневые методы информатики и программирования, слайд №11Высокоуровневые методы информатики и программирования, слайд №12Высокоуровневые методы информатики и программирования, слайд №13Высокоуровневые методы информатики и программирования, слайд №14Высокоуровневые методы информатики и программирования, слайд №15Высокоуровневые методы информатики и программирования, слайд №16Высокоуровневые методы информатики и программирования, слайд №17Высокоуровневые методы информатики и программирования, слайд №18Высокоуровневые методы информатики и программирования, слайд №19Высокоуровневые методы информатики и программирования, слайд №20Высокоуровневые методы информатики и программирования, слайд №21Высокоуровневые методы информатики и программирования, слайд №22Высокоуровневые методы информатики и программирования, слайд №23Высокоуровневые методы информатики и программирования, слайд №24Высокоуровневые методы информатики и программирования, слайд №25Высокоуровневые методы информатики и программирования, слайд №26Высокоуровневые методы информатики и программирования, слайд №27Высокоуровневые методы информатики и программирования, слайд №28Высокоуровневые методы информатики и программирования, слайд №29Высокоуровневые методы информатики и программирования, слайд №30Высокоуровневые методы информатики и программирования, слайд №31Высокоуровневые методы информатики и программирования, слайд №32Высокоуровневые методы информатики и программирования, слайд №33Высокоуровневые методы информатики и программирования, слайд №34Высокоуровневые методы информатики и программирования, слайд №35Высокоуровневые методы информатики и программирования, слайд №36Высокоуровневые методы информатики и программирования, слайд №37Высокоуровневые методы информатики и программирования, слайд №38Высокоуровневые методы информатики и программирования, слайд №39Высокоуровневые методы информатики и программирования, слайд №40Высокоуровневые методы информатики и программирования, слайд №41Высокоуровневые методы информатики и программирования, слайд №42Высокоуровневые методы информатики и программирования, слайд №43Высокоуровневые методы информатики и программирования, слайд №44Высокоуровневые методы информатики и программирования, слайд №45Высокоуровневые методы информатики и программирования, слайд №46Высокоуровневые методы информатики и программирования, слайд №47Высокоуровневые методы информатики и программирования, слайд №48Высокоуровневые методы информатики и программирования, слайд №49Высокоуровневые методы информатики и программирования, слайд №50Высокоуровневые методы информатики и программирования, слайд №51Высокоуровневые методы информатики и программирования, слайд №52Высокоуровневые методы информатики и программирования, слайд №53Высокоуровневые методы информатики и программирования, слайд №54Высокоуровневые методы информатики и программирования, слайд №55Высокоуровневые методы информатики и программирования, слайд №56Высокоуровневые методы информатики и программирования, слайд №57Высокоуровневые методы информатики и программирования, слайд №58Высокоуровневые методы информатики и программирования, слайд №59Высокоуровневые методы информатики и программирования, слайд №60Высокоуровневые методы информатики и программирования, слайд №61Высокоуровневые методы информатики и программирования, слайд №62Высокоуровневые методы информатики и программирования, слайд №63Высокоуровневые методы информатики и программирования, слайд №64Высокоуровневые методы информатики и программирования, слайд №65Высокоуровневые методы информатики и программирования, слайд №66Высокоуровневые методы информатики и программирования, слайд №67Высокоуровневые методы информатики и программирования, слайд №68Высокоуровневые методы информатики и программирования, слайд №69Высокоуровневые методы информатики и программирования, слайд №70Высокоуровневые методы информатики и программирования, слайд №71Высокоуровневые методы информатики и программирования, слайд №72Высокоуровневые методы информатики и программирования, слайд №73Высокоуровневые методы информатики и программирования, слайд №74Высокоуровневые методы информатики и программирования, слайд №75Высокоуровневые методы информатики и программирования, слайд №76Высокоуровневые методы информатики и программирования, слайд №77Высокоуровневые методы информатики и программирования, слайд №78Высокоуровневые методы информатики и программирования, слайд №79Высокоуровневые методы информатики и программирования, слайд №80Высокоуровневые методы информатики и программирования, слайд №81Высокоуровневые методы информатики и программирования, слайд №82Высокоуровневые методы информатики и программирования, слайд №83Высокоуровневые методы информатики и программирования, слайд №84Высокоуровневые методы информатики и программирования, слайд №85Высокоуровневые методы информатики и программирования, слайд №86Высокоуровневые методы информатики и программирования, слайд №87Высокоуровневые методы информатики и программирования, слайд №88Высокоуровневые методы информатики и программирования, слайд №89Высокоуровневые методы информатики и программирования, слайд №90Высокоуровневые методы информатики и программирования, слайд №91Высокоуровневые методы информатики и программирования, слайд №92Высокоуровневые методы информатики и программирования, слайд №93Высокоуровневые методы информатики и программирования, слайд №94Высокоуровневые методы информатики и программирования, слайд №95Высокоуровневые методы информатики и программирования, слайд №96Высокоуровневые методы информатики и программирования, слайд №97Высокоуровневые методы информатики и программирования, слайд №98

Содержание

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

Слайды и текст этой презентации


Слайд 1





Высокоуровневые методы информатики и программирования

Лекция 3
Описание слайда:
Высокоуровневые методы информатики и программирования Лекция 3

Слайд 2





План лекции
Переменные программы 
Операции
Выражения
Операторы
Описание слайда:
План лекции Переменные программы Операции Выражения Операторы

Слайд 3





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

Слайд 4





Логика рассмотрения языка C#
Описание слайда:
Логика рассмотрения языка C#

Слайд 5





1. Переменные и типы
Описание слайда:
1. Переменные и типы

Слайд 6





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

Слайд 7





Виды переменных по области видимости
Уровня класса (статические переменные класса)
Доступ с помощью имени класса
Время жизни – время работы программы
Доступ из всех классов (если public)
Уровня объекта класса (поля)
Доступ с помощью ссылки на объект
Время жизни – от new до удаления ссылок
Доступ в методах класса (если public то из других классов)
Уровня метода (локальные переменные)
Доступ по имени
Время жизни – выполнения метода
Доступны только в методе после объявления
Описание слайда:
Виды переменных по области видимости Уровня класса (статические переменные класса) Доступ с помощью имени класса Время жизни – время работы программы Доступ из всех классов (если public) Уровня объекта класса (поля) Доступ с помощью ссылки на объект Время жизни – от new до удаления ссылок Доступ в методах класса (если public то из других классов) Уровня метода (локальные переменные) Доступ по имени Время жизни – выполнения метода Доступны только в методе после объявления

Слайд 8





Объявление переменных
Прежде, чем переменная может быть использована, она должна быть объявлена. Объявление переменных можно делать в любом месте программы.
При объявлении переменных задается:
имя (идентификаторы) 
Должно начинаться с буквы или подчерка (_).
Буква может быть из любого алфавита (unicode)
Количество символов не ограничено.
тип (встроенный или пользовательский)
могут быть заданы модификаторы 
режим доступа, 
возможность изменения, 
сохранность значений.
Формат объявление переменных:
<тип> <имя>;
<тип> <имя> [= <значение>]
[<модификаторы>] <тип> <имя> [= <значение>];
 где [<модификаторы>] = {<режим доступа>, static, const}.
Например:
public int x = 5;
public static const int n=10;
Описание слайда:
Объявление переменных Прежде, чем переменная может быть использована, она должна быть объявлена. Объявление переменных можно делать в любом месте программы. При объявлении переменных задается: имя (идентификаторы) Должно начинаться с буквы или подчерка (_). Буква может быть из любого алфавита (unicode) Количество символов не ограничено. тип (встроенный или пользовательский) могут быть заданы модификаторы режим доступа, возможность изменения, сохранность значений. Формат объявление переменных: <тип> <имя>; <тип> <имя> [= <значение>] [<модификаторы>] <тип> <имя> [= <значение>]; где [<модификаторы>] = {<режим доступа>, static, const}. Например: public int x = 5; public static const int n=10;

Слайд 9





Константы 
В C# константы могут задаваться в виде 
литералов (набора символов) или 
именованных констант. 
Например:
	y = 7.7;
В этом примере значение константы "7.7" является одновременно ее именем, она имеет и тип. Константы с дробной частью по умолчанию имеют тип double. 
Для точного указания некоторых типов можно задавать символ, стоящий после литерала (в верхнем или нижнем регистре). Такими символами могут быть: f – тип float; d – тип double; m – тип decimal.
Также можно объявить именованную константу. Для этого в объявление переменной добавляется модификатор const, инициализация констант обязательна и не может быть отложена. 
Например:
	const float с = 0.1f;
Описание слайда:
Константы В C# константы могут задаваться в виде литералов (набора символов) или именованных констант. Например: y = 7.7; В этом примере значение константы "7.7" является одновременно ее именем, она имеет и тип. Константы с дробной частью по умолчанию имеют тип double. Для точного указания некоторых типов можно задавать символ, стоящий после литерала (в верхнем или нижнем регистре). Такими символами могут быть: f – тип float; d – тип double; m – тип decimal. Также можно объявить именованную константу. Для этого в объявление переменной добавляется модификатор const, инициализация констант обязательна и не может быть отложена. Например: const float с = 0.1f;

Слайд 10





Строковые константы
Под строковыми константами понимается последовательность символов заключенных в двойные кавычки. 
Например: “Петров С.А.”
В C# существуют два вида строковых констант:
обычные константы, которые представляют строку символов, заключенную в двойные кавычки – "ssss"; 
@-константы, заданные обычной константой c предшествующим знаком @.
В обычных константах некоторые символы интерпретируются особым образом. Это требуется, для задания в строке специальных управляющих символов, в виде escape-последовательностей. 
Например: 
"\n"  -  символ перехода на новую строку;
"\t" - символ табуляции (отступ на заданное количество символов);
"\\" - символ обратной косой черты;
"\"" - символ кавычки, вставляемый в строку, но не сигнализирующий о ее окончании.
Описание слайда:
Строковые константы Под строковыми константами понимается последовательность символов заключенных в двойные кавычки. Например: “Петров С.А.” В C# существуют два вида строковых констант: обычные константы, которые представляют строку символов, заключенную в двойные кавычки – "ssss"; @-константы, заданные обычной константой c предшествующим знаком @. В обычных константах некоторые символы интерпретируются особым образом. Это требуется, для задания в строке специальных управляющих символов, в виде escape-последовательностей. Например: "\n" - символ перехода на новую строку; "\t" - символ табуляции (отступ на заданное количество символов); "\\" - символ обратной косой черты; "\"" - символ кавычки, вставляемый в строку, но не сигнализирующий о ее окончании.

Слайд 11





Строковые константы
Часто при задании констант, определяющих путь к файлу, приходится каждый раз удваивать символ обратной косой черты: “C:\\test.txt”, что не совсем удобно. 
В этом случае и используются @-константы, в которых все символы понимаются в полном соответствии с их изображением. 
Например, две следующие строки будут аналогичными:
		s1 = "c:\\c#book\\ch5\\chapter5.doc";
		s2 = @"c:\c#book\ch5\chapter5.doc";
Описание слайда:
Строковые константы Часто при задании констант, определяющих путь к файлу, приходится каждый раз удваивать символ обратной косой черты: “C:\\test.txt”, что не совсем удобно. В этом случае и используются @-константы, в которых все символы понимаются в полном соответствии с их изображением. Например, две следующие строки будут аналогичными: s1 = "c:\\c#book\\ch5\\chapter5.doc"; s2 = @"c:\c#book\ch5\chapter5.doc";

Слайд 12





Время жизни переменных
Переменные появляются (рождаются)
не статические
переменные методов появляются в результате их объявления.
переменные классов (поля) появляются в результате создания объекта класса.
статические переменные создаются при запуске программы. 
Переменные исчезают (умирают)
не статические
Переменные методов после закрытия блока в котором они объявлены (}).
Переменные класса после уничтожения объекта
статические уничтожаются после завершения программы.
Описание слайда:
Время жизни переменных Переменные появляются (рождаются) не статические переменные методов появляются в результате их объявления. переменные классов (поля) появляются в результате создания объекта класса. статические переменные создаются при запуске программы. Переменные исчезают (умирают) не статические Переменные методов после закрытия блока в котором они объявлены (}). Переменные класса после уничтожения объекта статические уничтожаются после завершения программы.

Слайд 13





Области видимости переменных
Область видимости переменной (variable scope) это участок программы, в котором переменную можно использовать. 
В общем случае областью видимости локальной переменной является участок программы, от строки, в которой она объявляется, до первой фигурной скобки, завершающей блок или метод, в котором переменная объявлена. 
Областью видимости локальных переменных, которые объявляются в операторах цикла (например, for или while), является содержание (тело) данного цикла. 
Например:
public void ScopeTest() {
   int n = 0;
   for (int i = 0; i < 10; i++) {
     Console.WriteLine(i);
   } // i выходит из области видимости и удаляется
   // можно объявить другу переменную с именем i
   {  // начало блока
      var i = ”другой цикл”; // строка
      Console.WriteLine(i);
   } // i опять выходит из области видимости
} // переменная n тоже выходит из области видимости
Описание слайда:
Области видимости переменных Область видимости переменной (variable scope) это участок программы, в котором переменную можно использовать. В общем случае областью видимости локальной переменной является участок программы, от строки, в которой она объявляется, до первой фигурной скобки, завершающей блок или метод, в котором переменная объявлена. Областью видимости локальных переменных, которые объявляются в операторах цикла (например, for или while), является содержание (тело) данного цикла. Например: public void ScopeTest() { int n = 0; for (int i = 0; i < 10; i++) { Console.WriteLine(i); } // i выходит из области видимости и удаляется // можно объявить другу переменную с именем i { // начало блока var i = ”другой цикл”; // строка Console.WriteLine(i); } // i опять выходит из области видимости } // переменная n тоже выходит из области видимости

Слайд 14





Тип данных
Язык C# является строго типизированным языком. Это означает, что все данные (константы и переменные) программы имеют явно или неявно заданный тип. 
Тип данных определяет:
количество используемой памяти (в байтах);
набор операции, в которых может участвовать данные такого типа;
способы явного и неявного преобразования в другие типы.
Описание слайда:
Тип данных Язык C# является строго типизированным языком. Это означает, что все данные (константы и переменные) программы имеют явно или неявно заданный тип. Тип данных определяет: количество используемой памяти (в байтах); набор операции, в которых может участвовать данные такого типа; способы явного и неявного преобразования в другие типы.

Слайд 15





Зачем нужны типы данных?
Описание слайда:
Зачем нужны типы данных?

Слайд 16





Основные понятия
Программа это набор типов 
P = {T1, T2, …, Tn}
Тип задает:
Количество памяти
Состояние (данные)
Поведение (методы)
Операции в которых может участвовать
Преобразования к другим типам.
Описание слайда:
Основные понятия Программа это набор типов P = {T1, T2, …, Tn} Тип задает: Количество памяти Состояние (данные) Поведение (методы) Операции в которых может участвовать Преобразования к другим типам.

Слайд 17





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

Слайд 18





Система типов данных на языке C#
Все типы языка C# можно разделить на две большие группы: 
встроенные типы и 
типы, описываемые разработчиками.
Встроенные (или фундаментальные) типы изначально принадлежат базисной системе типов, которая поддерживается средой CLR, но которые могут иметь специальные имена в конкретном языке. В соответствии со стандартом типов (Common Type Standard – CTS) в .Net имеется 15 встроенных типов (см. табл. 3.1).
Типы, описываемые разработчиками. Кроме встроенных типов, которые предоставляются в языке C#, программист может описывать и использовать свои собственные (пользовательские) типы. Имеются следующие пользовательские типы:
Классы (class)
Структуры (struct)
Перечисления (enum)
Интерфейсы (interface)
Делегаты (delegate)
Описание слайда:
Система типов данных на языке C# Все типы языка C# можно разделить на две большие группы: встроенные типы и типы, описываемые разработчиками. Встроенные (или фундаментальные) типы изначально принадлежат базисной системе типов, которая поддерживается средой CLR, но которые могут иметь специальные имена в конкретном языке. В соответствии со стандартом типов (Common Type Standard – CTS) в .Net имеется 15 встроенных типов (см. табл. 3.1). Типы, описываемые разработчиками. Кроме встроенных типов, которые предоставляются в языке C#, программист может описывать и использовать свои собственные (пользовательские) типы. Имеются следующие пользовательские типы: Классы (class) Структуры (struct) Перечисления (enum) Интерфейсы (interface) Делегаты (delegate)

Слайд 19





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

Слайд 20





Основные виды типов
Значащие типы
создаются в стеке
автоматически уничтожаются
Ссылочные типы
создаются в 2 шага
сперва объявляются – выделяется память в стеке для хранения адреса
затем выделяется память в куче с помощью оператора new
Описание слайда:
Основные виды типов Значащие типы создаются в стеке автоматически уничтожаются Ссылочные типы создаются в 2 шага сперва объявляются – выделяется память в стеке для хранения адреса затем выделяется память в куче с помощью оператора new

Слайд 21





Структура типов языка C#
Описание слайда:
Структура типов языка C#

Слайд 22





Хранение данных программы
Данные используемые программой (переменные, константы) могут храниться в в двух типах оперативной памяти:
Стек (линейная память)
Куча (динамическая память)
Описание слайда:
Хранение данных программы Данные используемые программой (переменные, константы) могут храниться в в двух типах оперативной памяти: Стек (линейная память) Куча (динамическая память)

Слайд 23





Стек (stack)
Стек – это линейный участок памяти (массив), который действует как структура данных типа «Последним пришел – первым ушел» (last-in, first-out – LIFO). 
Основной особенностью стека являются то, что данные могут добавляться только к вершине стека и удаляться из вершены. 
Добавление и удаление данных из произвольного места стека невозможно. 
Операции по добавлению и удаление элементов из стека выполняются очень быстро. 
Однако размеры стека, как правило, ограничены, и время хранения данных зависит от времени жизни переменной. 
Для всех локальных переменных методов и передаваемых методам параметров память выделяется в вершине стека. 
После того, как методы заканчивают работу вся выделенная память в стеке для их переменных автоматически освобождается.
Описание слайда:
Стек (stack) Стек – это линейный участок памяти (массив), который действует как структура данных типа «Последним пришел – первым ушел» (last-in, first-out – LIFO). Основной особенностью стека являются то, что данные могут добавляться только к вершине стека и удаляться из вершены. Добавление и удаление данных из произвольного места стека невозможно. Операции по добавлению и удаление элементов из стека выполняются очень быстро. Однако размеры стека, как правило, ограничены, и время хранения данных зависит от времени жизни переменной. Для всех локальных переменных методов и передаваемых методам параметров память выделяется в вершине стека. После того, как методы заканчивают работу вся выделенная память в стеке для их переменных автоматически освобождается.

Слайд 24





Куча (heap)
Куча (heap) – это область оперативной памяти, в разных частях которой по запросу программы, операционная система может выделять участки требуемого размера для хранения объектов классов. 
Память в куче выделяется с помощью операции new.
В отличие от стека, участки памяти в "куче" могут выделяться и освобождаться в любом порядке. 
Хотя программа может хранить элементы данных в "куче", она не может явно удалять их из нее. 
Вместо этого компонент среды CLR, называемый Garbage Collector (GC), автоматически удаляет не используемые участки "кучи", когда он определит, что код программы уже не имеет доступа к ним (не хранит их адреса). 
Автоматическая сборка мусора освобождает программиста от необходимости освобождать не используемую память вручную, что часто приводит к ошибкам работы программы.
Описание слайда:
Куча (heap) Куча (heap) – это область оперативной памяти, в разных частях которой по запросу программы, операционная система может выделять участки требуемого размера для хранения объектов классов. Память в куче выделяется с помощью операции new. В отличие от стека, участки памяти в "куче" могут выделяться и освобождаться в любом порядке. Хотя программа может хранить элементы данных в "куче", она не может явно удалять их из нее. Вместо этого компонент среды CLR, называемый Garbage Collector (GC), автоматически удаляет не используемые участки "кучи", когда он определит, что код программы уже не имеет доступа к ним (не хранит их адреса). Автоматическая сборка мусора освобождает программиста от необходимости освобождать не используемую память вручную, что часто приводит к ошибкам работы программы.

Слайд 25





Различие между значащими и ссылочными типами
int v = 123;
string s;
s = “Hello World!”;
v
s
Описание слайда:
Различие между значащими и ссылочными типами int v = 123; string s; s = “Hello World!”; v s

Слайд 26





Память программы - стек и куча
Описание слайда:
Память программы - стек и куча

Слайд 27





Системные типы данных CLR
В .Net Framework есть общие для всех языков, системные встроенные типы.

Общая системы типов Common Type System (CTS) для всех языков.
Описание этих типов выполнено специалистами компании Microsoft.
Например:
System.Int32
System.Single
System.String
….
Описание слайда:
Системные типы данных CLR В .Net Framework есть общие для всех языков, системные встроенные типы. Общая системы типов Common Type System (CTS) для всех языков. Описание этих типов выполнено специалистами компании Microsoft. Например: System.Int32 System.Single System.String ….

Слайд 28





Соответствие встроенных типов и системных типов
Описание слайда:
Соответствие встроенных типов и системных типов

Слайд 29





Типы определенные в CLR
Описание слайда:
Типы определенные в CLR

Слайд 30





Наследование типов в CLR
Описание слайда:
Наследование типов в CLR

Слайд 31





Методы класса System.Object
Equals() - виртуальный метод, возвращающий true если значения объектов совпадают (по умолчанию, если два объекта расположены в одном месте памяти). 
GetHashCode() - виртуальный метод, возвращает некоторое целое число (хэш-код), однозначно идентифицирующее экземпляр класса. 
GetType() - возвращает объект типа Type, описывающий соответствующий тип. 
ToString() - виртуальный метод, возвращающий символьное представление значения переменной (по умолчанию возвращает строку, представляющую полное имя типа объекта).
Описание слайда:
Методы класса System.Object Equals() - виртуальный метод, возвращающий true если значения объектов совпадают (по умолчанию, если два объекта расположены в одном месте памяти). GetHashCode() - виртуальный метод, возвращает некоторое целое число (хэш-код), однозначно идентифицирующее экземпляр класса. GetType() - возвращает объект типа Type, описывающий соответствующий тип. ToString() - виртуальный метод, возвращающий символьное представление значения переменной (по умолчанию возвращает строку, представляющую полное имя типа объекта).

Слайд 32






Классы-потомки при создании наследует все свойства и методы родительского класса Object. Естественно, что все встроенные типы нужным образом переопределяют методы родителя и добавляют собственные поля, свойства и методы. 
Учитывая, что и типы, создаваемые пользователем, также являются потомками класса Object, то для них необходимо переопределить методы родителя, если предполагается использование этих методов; реализация родителя, предоставляемая по умолчанию, не обеспечивает нужного эффекта.
Пример объявления переменных и присваивания им значений в языке C# показан ниже:
int x=11;
int v = new Int32();
v = 007;
string s1 = "Agent";
s1 = s1 + v.ToString() + x.ToString();
Описание слайда:
Классы-потомки при создании наследует все свойства и методы родительского класса Object. Естественно, что все встроенные типы нужным образом переопределяют методы родителя и добавляют собственные поля, свойства и методы. Учитывая, что и типы, создаваемые пользователем, также являются потомками класса Object, то для них необходимо переопределить методы родителя, если предполагается использование этих методов; реализация родителя, предоставляемая по умолчанию, не обеспечивает нужного эффекта. Пример объявления переменных и присваивания им значений в языке C# показан ниже: int x=11; int v = new Int32(); v = 007; string s1 = "Agent"; s1 = s1 + v.ToString() + x.ToString();

Слайд 33





Встроенные типы
Описание слайда:
Встроенные типы

Слайд 34





Встроенные типы (продолжение)
Описание слайда:
Встроенные типы (продолжение)

Слайд 35





Тип данных bool 
Соответствует системному типу System.Boolean
Mожет хранить только значения констант true и false (булевые константы)
Можно назначать только булевые значения или константы, а также значений логического выражения:
	bool bc = (c > 64 && c < 123);
Описание слайда:
Тип данных bool Соответствует системному типу System.Boolean Mожет хранить только значения констант true и false (булевые константы) Можно назначать только булевые значения или константы, а также значений логического выражения: bool bc = (c > 64 && c < 123);

Слайд 36





Тип данных decimal
128-битный тип данных;
имеет большую точность и меньший диапазон значений чем типы с плавающей точкой (floating-point);
Диапазон ±1.0 × 10−28 ÷ ±7.9 × 1028
Точность 28 значащих цифр
более подходит для финансовых и денежных вычислений;
Чтобы константа обрабатывалась как decimal нужно добавить суффикс m или M: 
decimal myMoney = 300.5m;
Описание слайда:
Тип данных decimal 128-битный тип данных; имеет большую точность и меньший диапазон значений чем типы с плавающей точкой (floating-point); Диапазон ±1.0 × 10−28 ÷ ±7.9 × 1028 Точность 28 значащих цифр более подходит для финансовых и денежных вычислений; Чтобы константа обрабатывалась как decimal нужно добавить суффикс m или M: decimal myMoney = 300.5m;

Слайд 37





Не определенный тип - var
Для переменной можно задать неопределенный тип (var) и присвоит некоторое значение. В этом случае компилятор автоматически определит тип присваиваемого значения и назначит его переменной. 
Например, объявление переменной:
		var name = "Петров А.В.";
аналогично следующему объявлению:
		string name = "Петров А.В.";
В этом случае обязательно нужно инициализировать переменную при ее объявлении.
Можно также использовать неявное задание типа массива. Например, следующие операторы объявляют массив типа Point:
	var points = new[] { new Point(1, 2), new Point(3, 4) };
Описание слайда:
Не определенный тип - var Для переменной можно задать неопределенный тип (var) и присвоит некоторое значение. В этом случае компилятор автоматически определит тип присваиваемого значения и назначит его переменной. Например, объявление переменной: var name = "Петров А.В."; аналогично следующему объявлению: string name = "Петров А.В."; В этом случае обязательно нужно инициализировать переменную при ее объявлении. Можно также использовать неявное задание типа массива. Например, следующие операторы объявляют массив типа Point: var points = new[] { new Point(1, 2), new Point(3, 4) };

Слайд 38





Тип константам (литералам) для задания типа
Тип целой константы определяется ее значением (количеством цифр).
Константы с дробной частью имеют тип double.
Для изменения типа констант используются приставки:
Float F: 0.23F
Double D: 2.7D
Decimal M: 12.34M
Описание слайда:
Тип константам (литералам) для задания типа Тип целой константы определяется ее значением (количеством цифр). Константы с дробной частью имеют тип double. Для изменения типа констант используются приставки: Float F: 0.23F Double D: 2.7D Decimal M: 12.34M

Слайд 39





Nullable типы данных
Nullable типы данных это такие значащие типы данных, которые кроме обычных значений могут хранить и значение null. 
Например, nullable System.Boolean может хранить значения из набора  {true, false, null}.
Это очень удобно при работе с базами данных, которые кроме значений колонок могут указывать на отсутствие значения.
Для описания nullable типа переменной нужно добавит символ вопроса (?) в конец названия типа. Это можно делать только для значащих типов. 
Например:
static void LocalNullableVariables()
{
   // Описываем некоторые локальные значащие nullable типы.
   int? nullableInt = 10;
   double? nullableDouble = 3.14;
   bool? nullableBool = null;
   char? nullableChar = 'a';
   int?[] arrayOfNullableInts = new int?[10];
   // Error! String является ссылочным типом!
   // string? s = "oops";
}
Nullable типы являются экземплярами обобщенного типа System.Nullable<T>.
Нет  неявного преобразования nullable типа в обычный тип.
Описана операция ??: если присваиваемое nullable значение = null, то присваивается значение, стоящее после ??.
Описание слайда:
Nullable типы данных Nullable типы данных это такие значащие типы данных, которые кроме обычных значений могут хранить и значение null. Например, nullable System.Boolean может хранить значения из набора {true, false, null}. Это очень удобно при работе с базами данных, которые кроме значений колонок могут указывать на отсутствие значения. Для описания nullable типа переменной нужно добавит символ вопроса (?) в конец названия типа. Это можно делать только для значащих типов. Например: static void LocalNullableVariables() { // Описываем некоторые локальные значащие nullable типы. int? nullableInt = 10; double? nullableDouble = 3.14; bool? nullableBool = null; char? nullableChar = 'a'; int?[] arrayOfNullableInts = new int?[10]; // Error! String является ссылочным типом! // string? s = "oops"; } Nullable типы являются экземплярами обобщенного типа System.Nullable<T>. Нет неявного преобразования nullable типа в обычный тип. Описана операция ??: если присваиваемое nullable значение = null, то присваивается значение, стоящее после ??.

Слайд 40





Свойства Nullable типов 
bool HasValue – есть ли значение у переменной.
<тип> Value – значение переменной (если переменная используется в не допустипой операции, то формируется исключение System.InvalidOperationException )
Пример 1:
	int? n = null;
	int m = 5 + n.Value; //формируется исключение
Пример 2:
	int? n = null;
	// можно выполнить явное преобразование
	int m = 5 + (int)n; //формируется исключение
Пример 3:
	int? n = null;
	int? m = 5 + n; // m = null
Описание слайда:
Свойства Nullable типов bool HasValue – есть ли значение у переменной. <тип> Value – значение переменной (если переменная используется в не допустипой операции, то формируется исключение System.InvalidOperationException ) Пример 1: int? n = null; int m = 5 + n.Value; //формируется исключение Пример 2: int? n = null; // можно выполнить явное преобразование int m = 5 + (int)n; //формируется исключение Пример 3: int? n = null; int? m = 5 + n; // m = null

Слайд 41





Использование nullable типов данных 
static void Main(string[] args)
{
   Console.WriteLine("***** Работа с Nullable Data *****\n");
   DatabaseReader dr = new DatabaseReader();
   // Получаем int из “базы данных”.
   int? i = dr.GetIntFromDatabase();
   if (i.HasValue) // проверка на наличие значения переменной
       Console.WriteLine("Value of 'i' is: {0}", i.Value);
   else
       Console.WriteLine("Value of 'i' is undefined.");
   // Получаем bool из “базы данных”.
   bool? b = dr.GetBoolFromDatabase();
   if (b != null)
       Console.WriteLine("Значение 'b' равно: {0}", b.Value);
   else
       Console.WriteLine(" Значение 'b' не определено.");
   Console.ReadLine();
}
Описание слайда:
Использование nullable типов данных static void Main(string[] args) { Console.WriteLine("***** Работа с Nullable Data *****\n"); DatabaseReader dr = new DatabaseReader(); // Получаем int из “базы данных”. int? i = dr.GetIntFromDatabase(); if (i.HasValue) // проверка на наличие значения переменной Console.WriteLine("Value of 'i' is: {0}", i.Value); else Console.WriteLine("Value of 'i' is undefined."); // Получаем bool из “базы данных”. bool? b = dr.GetBoolFromDatabase(); if (b != null) Console.WriteLine("Значение 'b' равно: {0}", b.Value); else Console.WriteLine(" Значение 'b' не определено."); Console.ReadLine(); }

Слайд 42





Зачем нужны типы данных?
Описание слайда:
Зачем нужны типы данных?

Слайд 43





Тип результата операции
Тип результата операции зависит от типов участвующих в операции операндов.
Типом арифметической операции является наиболее сложный тип операнда. Значение другого операнда преобразуется к более сложному типу.
Наименее сложный тип byte, наиболее сложный decimal.
int a=5;
double d=2.6;
a * d // тип результата double
a / 2 // тип результата int
Описание слайда:
Тип результата операции Тип результата операции зависит от типов участвующих в операции операндов. Типом арифметической операции является наиболее сложный тип операнда. Значение другого операнда преобразуется к более сложному типу. Наименее сложный тип byte, наиболее сложный decimal. int a=5; double d=2.6; a * d // тип результата double a / 2 // тип результата int

Слайд 44





Тип результата операции (2)
Типом результата операции присваивания является тип левого операнда (переменной, которой присваивается значение).
int n;
n = a * d // тип результата int
Тип операций отношения является bool.
a > 5 // тип результата bool
Тип логических операций является bool.
bool b = true, с = false;
b && с // тип результата bool
Описание слайда:
Тип результата операции (2) Типом результата операции присваивания является тип левого операнда (переменной, которой присваивается значение). int n; n = a * d // тип результата int Тип операций отношения является bool. a > 5 // тип результата bool Тип логических операций является bool. bool b = true, с = false; b && с // тип результата bool

Слайд 45





Преобразование типов
Неявное преобразование (implicit conversion) – выполняется автоматически.

Явное преобразование (explicit conversion) – выполняется по заданию программиста.
Описание слайда:
Преобразование типов Неявное преобразование (implicit conversion) – выполняется автоматически. Явное преобразование (explicit conversion) – выполняется по заданию программиста.

Слайд 46





Неявное преобразование типов
(implicit conversion)
К неявным относятся преобразования, результат выполнения которых всегда успешен и не приводит к потере точности данных. 
Неявные преобразования выполняются автоматически. 
Если на диаграмме есть переход из типа A в тип B то, выполняется неявное преобразование типов
Если нет неявного преобразования то выдается исключение
“Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)”
Описание слайда:
Неявное преобразование типов (implicit conversion) К неявным относятся преобразования, результат выполнения которых всегда успешен и не приводит к потере точности данных. Неявные преобразования выполняются автоматически. Если на диаграмме есть переход из типа A в тип B то, выполняется неявное преобразование типов Если нет неявного преобразования то выдается исключение “Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)”

Слайд 47





Явное преобразование типов
(explicit conversion)
К явным относятся разрешенные преобразования, выполнение которых не гарантируется или может привести к потере точности.
Способы явного преобразования:
Использование операции приведения типов (cast)
// отсечение дробной части
int i = (int) f; 
Использование стандартного класса Convert
// с округлением до ближайшего целого
int i = Convert.ToInt32(f); 
Преобразование типов из строк с помощью метода Parse(string)
Описание слайда:
Явное преобразование типов (explicit conversion) К явным относятся разрешенные преобразования, выполнение которых не гарантируется или может привести к потере точности. Способы явного преобразования: Использование операции приведения типов (cast) // отсечение дробной части int i = (int) f; Использование стандартного класса Convert // с округлением до ближайшего целого int i = Convert.ToInt32(f); Преобразование типов из строк с помощью метода Parse(string)

Слайд 48





Неявное и явное преобразование
// Error: no conversion from int to short
int x=5, y=6;
short z = x + y; 
int a = 5;
float b = 1.5F;
b = a;
// нужно явное преобразование (кастинг)
a = (int)b;
Описание слайда:
Неявное и явное преобразование // Error: no conversion from int to short int x=5, y=6; short z = x + y; int a = 5; float b = 1.5F; b = a; // нужно явное преобразование (кастинг) a = (int)b;

Слайд 49





Неявное преобразование типов на языке Java
char c='X';
int code=c;
System.out.println(code);
Ответ: 88 (ASCII code of X)
Описание слайда:
Неявное преобразование типов на языке Java char c='X'; int code=c; System.out.println(code); Ответ: 88 (ASCII code of X)

Слайд 50





Схема неявного приведение встроенных типов
Описание слайда:
Схема неявного приведение встроенных типов

Слайд 51





Схема неявного приведение встроенных типов (упрощенная)
Описание слайда:
Схема неявного приведение встроенных типов (упрощенная)

Слайд 52





Схема неявного приведение встроенных типов (упрощенная)
Описание слайда:
Схема неявного приведение встроенных типов (упрощенная)

Слайд 53





Применение диаграммы
Если на диаграмме задан путь (стрелками) от типа А к типу В, то это означает, что возможно неявно преобразовать из типа А в тип В. 
Например из short в float
Все остальные преобразования между подтипами арифметического типа существуют, но являются явными.
Например из float в int
Описание слайда:
Применение диаграммы Если на диаграмме задан путь (стрелками) от типа А к типу В, то это означает, что возможно неявно преобразовать из типа А в тип В. Например из short в float Все остальные преобразования между подтипами арифметического типа существуют, но являются явными. Например из float в int

Слайд 54





Пример приведения встроенных типов
Описание слайда:
Пример приведения встроенных типов

Слайд 55





Явное преобразование типа
Для указания явного преобразования типов используется операция приведения к типу (кастинг), которая имеет высший приоритет и следующий вид:
	(type) <выражение>
Она задает явное преобразование типа, определенного выражением, к типу, указанному в скобках. 
Например: int i  = (int) 2.99; // i  = 2;
Если описаны пользовательские типы T и P, и для типа T описано явное преобразование в тип P, то возможна следующая запись:
  T y;
  P x = new P();
  y = (T) x;
Описание слайда:
Явное преобразование типа Для указания явного преобразования типов используется операция приведения к типу (кастинг), которая имеет высший приоритет и следующий вид: (type) <выражение> Она задает явное преобразование типа, определенного выражением, к типу, указанному в скобках. Например: int i = (int) 2.99; // i = 2; Если описаны пользовательские типы T и P, и для типа T описано явное преобразование в тип P, то возможна следующая запись: T y; P x = new P(); y = (T) x;

Слайд 56





Явное преобразование типа
Существуют явные преобразования внутри арифметического типа, 
Не существует, например, явного преобразования арифметического типа в тип bool. 
Например:
double a = 5.0;
int p = (int)a;
//bool b = (bool)a; // ошибка!!!      
явное преобразование из типа double в тип int выполняется, 
явное преобразование double в тип bool приводит к ошибке, потому и закомментировано.
Описание слайда:
Явное преобразование типа Существуют явные преобразования внутри арифметического типа, Не существует, например, явного преобразования арифметического типа в тип bool. Например: double a = 5.0; int p = (int)a; //bool b = (bool)a; // ошибка!!! явное преобразование из типа double в тип int выполняется, явное преобразование double в тип bool приводит к ошибке, потому и закомментировано.

Слайд 57





Преобразование типов с помощью класса Convert
Преобразование типа с помощью методов класса System.Convert.
Класс Convert содержит 15 статических методов вида To<Type> (ToBoolean(),...ToUInt64());
		 string s1 = Console.ReadLine();
		 int ux = Convert.ToUInt32(s1);
Все методы To<Type> класса Convert перегружены и каждый из них имеет, как правило, более десятка реализаций с аргументами разного типа.
Описание слайда:
Преобразование типов с помощью класса Convert Преобразование типа с помощью методов класса System.Convert. Класс Convert содержит 15 статических методов вида To<Type> (ToBoolean(),...ToUInt64()); string s1 = Console.ReadLine(); int ux = Convert.ToUInt32(s1); Все методы To<Type> класса Convert перегружены и каждый из них имеет, как правило, более десятка реализаций с аргументами разного типа.

Слайд 58





Пример явного преобразования типов с помощью класса Convert
Преобразование вещественного к целому типу выполняется с округлением 
float  b = 1.5;
a = Convert.ToInt32(b); // a=2
Есть преобразование логического к целому типу
bool  b = true;
a = Convert.ToInt32(b); // a=1
Описание слайда:
Пример явного преобразования типов с помощью класса Convert Преобразование вещественного к целому типу выполняется с округлением float b = 1.5; a = Convert.ToInt32(b); // a=2 Есть преобразование логического к целому типу bool b = true; a = Convert.ToInt32(b); // a=1

Слайд 59





Пример преобразования типов
 System.Single f = 0.5F;
 float b = f;
 int a;
 a = (int)f; // с обрезанием дробной части
 a = Convert.ToInt32(f); // с округлением 
 string s = "123";
  // a = (int)s;
  a = Convert.ToInt32(s);
Описание слайда:
Пример преобразования типов System.Single f = 0.5F; float b = f; int a; a = (int)f; // с обрезанием дробной части a = Convert.ToInt32(f); // с округлением string s = "123"; // a = (int)s; a = Convert.ToInt32(s);

Слайд 60





Преобразование типов из строк с помощью метода Parse()
У всех типов есть статический метод Parse(), который выполняет преобразование строки текста в соответствующий формат.
Для проверки возможности преобразования использовать метод  
	bool TryParse(x), он возвращает true, если можно преобразовать иначе false
static void ParseFromStrings()
{
Console.WriteLine("=> Data type parsing:");
bool b = bool.Parse("True");
Console.WriteLine("Value of b: {0}", b);
double d = double.Parse("99.884");
Console.WriteLine("Value of d: {0}", d);
int i = int.Parse("8");
Console.WriteLine("Value of i: {0}", i);
char c = Char.Parse("w");
Console.WriteLine("Value of c: {0}", c);
Console.WriteLine();
}
Описание слайда:
Преобразование типов из строк с помощью метода Parse() У всех типов есть статический метод Parse(), который выполняет преобразование строки текста в соответствующий формат. Для проверки возможности преобразования использовать метод bool TryParse(x), он возвращает true, если можно преобразовать иначе false static void ParseFromStrings() { Console.WriteLine("=> Data type parsing:"); bool b = bool.Parse("True"); Console.WriteLine("Value of b: {0}", b); double d = double.Parse("99.884"); Console.WriteLine("Value of d: {0}", d); int i = int.Parse("8"); Console.WriteLine("Value of i: {0}", i); char c = Char.Parse("w"); Console.WriteLine("Value of c: {0}", c); Console.WriteLine(); }

Слайд 61





Операция присваивания
В C# присваивание является операцией, которая может использоваться в выражениях. В выражении, называемом множественным присваиванием, списку переменных присваивается одно и то же значение. 
Например:  x = y = z = w =(u+v+w)/(u-v-w);
При присвоении переменных разного типа выполняется преобразование типа правого операнда к типу левого операнда. 
Т.е. компилятор пытается выполнить преобразование типа переменной стоящей справа в тип переменной, стоящей слева.
Описание слайда:
Операция присваивания В C# присваивание является операцией, которая может использоваться в выражениях. В выражении, называемом множественным присваиванием, списку переменных присваивается одно и то же значение. Например: x = y = z = w =(u+v+w)/(u-v-w); При присвоении переменных разного типа выполняется преобразование типа правого операнда к типу левого операнда. Т.е. компилятор пытается выполнить преобразование типа переменной стоящей справа в тип переменной, стоящей слева.

Слайд 62






Присваивание переменной стоящей слева (тип T) значения переменной или результата вычисления выражения (типа T1) возможно, если:
типы T и T1 совпадают;
тип T является базовым (родительским) типом для типа T1 (в соответствии с наследованием типов);
в определении типа T1 описано явное или неявное преобразование в тип T.
Так как все классы в языке C# – встроенные и определенные пользователем – по определению являются потомками класса Object, то отсюда и следует, что переменным класса Object можно присваивать выражения любого типа.
Описание слайда:
Присваивание переменной стоящей слева (тип T) значения переменной или результата вычисления выражения (типа T1) возможно, если: типы T и T1 совпадают; тип T является базовым (родительским) типом для типа T1 (в соответствии с наследованием типов); в определении типа T1 описано явное или неявное преобразование в тип T. Так как все классы в языке C# – встроенные и определенные пользователем – по определению являются потомками класса Object, то отсюда и следует, что переменным класса Object можно присваивать выражения любого типа.

Слайд 63





Специальные варианты присваивания
В языке C# для двух частных случаев присваивания предложен специальный синтаксис:
для присваиваний вида x=x+1; (переменная увеличивается или уменьшается на единицу), используются специальные префиксные и постфиксные операции "++" и "--". 
для  присваивания вида: 
	X = X <operator> (выражение); например: x = x * 2;
Для таких присваиваний используется краткая форма записи: X <operator>= expression; например: x *= 2;
Описание слайда:
Специальные варианты присваивания В языке C# для двух частных случаев присваивания предложен специальный синтаксис: для присваиваний вида x=x+1; (переменная увеличивается или уменьшается на единицу), используются специальные префиксные и постфиксные операции "++" и "--". для присваивания вида: X = X <operator> (выражение); например: x = x * 2; Для таких присваиваний используется краткая форма записи: X <operator>= expression; например: x *= 2;

Слайд 64






Типы (встроенные, пользовательские – классы, структуры, интерфейсы).
Операции
Выражения
Преобразование типов
Описание слайда:
Типы (встроенные, пользовательские – классы, структуры, интерфейсы). Операции Выражения Преобразование типов

Слайд 65





2. Операции 
2. Операции
Описание слайда:
2. Операции 2. Операции

Слайд 66





Операции 
Переменные и константы могут участвовать (объединяться) с помощью операций. 
Операция – это термин или символ, получающий на вход одно или несколько операндов (переменных или констант) или выражений (переменных или констант, связанных между собой знаками операций), и возвращающий значение некоторого типа 
Например: a + b и или ++a * pi
Операции, получающие на вход один операнд, например операция приращения (++) или new, называются унарными операциями. 
Операции, получающие на вход два операнда, например, арифметические операции (+, –, *, /) называются бинарными операциями. 
Одна операция – условная (?:), получает на вход три операнда и является единственной третичной операцией в C#.
Описание слайда:
Операции Переменные и константы могут участвовать (объединяться) с помощью операций. Операция – это термин или символ, получающий на вход одно или несколько операндов (переменных или констант) или выражений (переменных или констант, связанных между собой знаками операций), и возвращающий значение некоторого типа Например: a + b и или ++a * pi Операции, получающие на вход один операнд, например операция приращения (++) или new, называются унарными операциями. Операции, получающие на вход два операнда, например, арифметические операции (+, –, *, /) называются бинарными операциями. Одна операция – условная (?:), получает на вход три операнда и является единственной третичной операцией в C#.

Слайд 67





Базовые операции
Описание слайда:
Базовые операции

Слайд 68





Унарные операции
Описание слайда:
Унарные операции

Слайд 69





Бинарные операции
Описание слайда:
Бинарные операции

Слайд 70





Бинарные операции (продолжение)
Описание слайда:
Бинарные операции (продолжение)

Слайд 71





Логические и условные операции
Описание слайда:
Логические и условные операции

Слайд 72





Приоритеты операций языка C#
Описание слайда:
Приоритеты операций языка C#

Слайд 73





Пояснение приоритета операций
Вычисление выражений начинается с выполнения операций высшего приоритета. 
Например: первым делом вычисляются выражения в круглых скобках – (expr), определяются значения полей объекта – x.y, вычисляются функции – f(x), переменные с индексами – a[i]. 
Можно заключать выражения в скобки для принудительного вычисления некоторых частей выражения раньше других. Например, выражение 2 + 3 * 2 в обычном случае будет иметь значение 8, поскольку операции умножения выполняются раньше операций сложения. А результатом вычисления выражения (2 + 3) * 2 будет число 10, поскольку компилятор C# получит данные о том, что операцию сложения (+) нужно вычислить до выполнения операции умножения (*).
Если есть несколько операций с одинаковым приоритетом, то они вычисляются в соответствии с их ассоциативностью. 
Операции с левой ассоциативностью вычисляются слева направо. Например, x * y / z вычисляется как (x * y)/z. 
Операции с правой ассоциативностью вычисляются справа налево. 
Операции присваивания и третичная операция (?:) имеют правую ассоциативность. Все другие двоичные операции имеют левую ассоциативность.
Порядок выполнения операций с объектами пользовательских классов и структур можно изменить. Такой процесс называется перегрузкой операций.
Описание слайда:
Пояснение приоритета операций Вычисление выражений начинается с выполнения операций высшего приоритета. Например: первым делом вычисляются выражения в круглых скобках – (expr), определяются значения полей объекта – x.y, вычисляются функции – f(x), переменные с индексами – a[i]. Можно заключать выражения в скобки для принудительного вычисления некоторых частей выражения раньше других. Например, выражение 2 + 3 * 2 в обычном случае будет иметь значение 8, поскольку операции умножения выполняются раньше операций сложения. А результатом вычисления выражения (2 + 3) * 2 будет число 10, поскольку компилятор C# получит данные о том, что операцию сложения (+) нужно вычислить до выполнения операции умножения (*). Если есть несколько операций с одинаковым приоритетом, то они вычисляются в соответствии с их ассоциативностью. Операции с левой ассоциативностью вычисляются слева направо. Например, x * y / z вычисляется как (x * y)/z. Операции с правой ассоциативностью вычисляются справа налево. Операции присваивания и третичная операция (?:) имеют правую ассоциативность. Все другие двоичные операции имеют левую ассоциативность. Порядок выполнения операций с объектами пользовательских классов и структур можно изменить. Такой процесс называется перегрузкой операций.

Слайд 74





Тип результата операции
Тип результата операции зависит от типов участвующих в операции операндов.
Типом арифметической операции является наиболее сложный тип операнда. Значение другого операнда преобразуется к более сложному типу.
Наименее сложный тип byte, наиболее сложный decimal.
int a=5;
double d=2.6;
a * d // тип результата double
a / 2 // тип результата int
Типом результата операции присваивания является тип левого операнда (переменной, которой присваивается значение).
int n;
n = a * d // тип результата int
Тип операций отношения является bool.
a > 5 // тип результата bool
Тип логических операций является bool.
bool b = true, с = false;
b && с // тип результата bool
Описание слайда:
Тип результата операции Тип результата операции зависит от типов участвующих в операции операндов. Типом арифметической операции является наиболее сложный тип операнда. Значение другого операнда преобразуется к более сложному типу. Наименее сложный тип byte, наиболее сложный decimal. int a=5; double d=2.6; a * d // тип результата double a / 2 // тип результата int Типом результата операции присваивания является тип левого операнда (переменной, которой присваивается значение). int n; n = a * d // тип результата int Тип операций отношения является bool. a > 5 // тип результата bool Тип логических операций является bool. bool b = true, с = false; b && с // тип результата bool

Слайд 75





Преобразование типов
Неявное преобразование (implicit conversion)
К неявным относятся те преобразования, результат выполнения которых всегда успешен и не приводит к потере точности данных. 
Неявные преобразования выполняются автоматически. 
Если на диаграмме есть переход из типа A в тип B то, выполняется неявное преобразование типов
Если нет неявного преобразования то исключение
“Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)”	
Явное преобразование (explicit conversion)
К явным относятся разрешенные преобразования, успех выполнения которых не гарантируется или может приводить к потере точности 
Использование приведения типов (cast)
int i = (int) f; // с обрезанием дробной части
Использование стандартного класса Convert
int i = Convert.ToInt32(f); // с округлением до ближайшего целого
Описание слайда:
Преобразование типов Неявное преобразование (implicit conversion) К неявным относятся те преобразования, результат выполнения которых всегда успешен и не приводит к потере точности данных. Неявные преобразования выполняются автоматически. Если на диаграмме есть переход из типа A в тип B то, выполняется неявное преобразование типов Если нет неявного преобразования то исключение “Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)” Явное преобразование (explicit conversion) К явным относятся разрешенные преобразования, успех выполнения которых не гарантируется или может приводить к потере точности Использование приведения типов (cast) int i = (int) f; // с обрезанием дробной части Использование стандартного класса Convert int i = Convert.ToInt32(f); // с округлением до ближайшего целого

Слайд 76





Неявное и явное преобразование
// Error: no conversion from int to short
int x=5, y=6;
short z = x + y; 
int a = 5;
float b = 1.5F;
b = a;
// нужно явное преобразование (кастинг)
a = (int)b;
Описание слайда:
Неявное и явное преобразование // Error: no conversion from int to short int x=5, y=6; short z = x + y; int a = 5; float b = 1.5F; b = a; // нужно явное преобразование (кастинг) a = (int)b;

Слайд 77





Неявное преобразование типов на языке Java
char c='X';
int code=c;
System.out.println(code);
Ответ: 88 (ASCII code of X)
Описание слайда:
Неявное преобразование типов на языке Java char c='X'; int code=c; System.out.println(code); Ответ: 88 (ASCII code of X)

Слайд 78





Схема неявного приведение встроенных типов
Описание слайда:
Схема неявного приведение встроенных типов

Слайд 79





Схема неявного приведение встроенных типов (упрощенная)
Описание слайда:
Схема неявного приведение встроенных типов (упрощенная)

Слайд 80





Применение диаграммы
Если на диаграмме задан путь (стрелками) от типа А к типу В, то это означает, что возможно неявно преобразовать из типа А в тип В. 
Например из short в float
Все остальные преобразования между подтипами арифметического типа существуют, но являются явными.
Например из float в int
Описание слайда:
Применение диаграммы Если на диаграмме задан путь (стрелками) от типа А к типу В, то это означает, что возможно неявно преобразовать из типа А в тип В. Например из short в float Все остальные преобразования между подтипами арифметического типа существуют, но являются явными. Например из float в int

Слайд 81





Пример приведения встроенных типов
Описание слайда:
Пример приведения встроенных типов

Слайд 82





Явное преобразование типа
Для указания явного преобразования типов используется операция приведения к типу (кастинг), которая имеет высший приоритет и следующий вид:
	(type) <выражение>
Она задает явное преобразование типа, определенного выражением, к типу, указанному в скобках. Например: int i  = (int) 2.99; // i  = 2;
Если описаны пользовательские типы T и P, и для типа T описано явное преобразование в тип P, то возможна следующая запись:
  T y;
  P x = new P();
  y = (T) x;	
Следует отметить, что существуют явные преобразования внутри арифметического типа, но не существует, например, явного преобразования арифметического типа в тип bool. Например:
double a = 5.0;
int p = (int)a;
//bool b = (bool)a; // ошибка!!!      
В данном примере явное преобразование из типа double в тип int выполняется, а преобразование double в тип bool приводит к ошибке, потому и закомментировано.
Описание слайда:
Явное преобразование типа Для указания явного преобразования типов используется операция приведения к типу (кастинг), которая имеет высший приоритет и следующий вид: (type) <выражение> Она задает явное преобразование типа, определенного выражением, к типу, указанному в скобках. Например: int i = (int) 2.99; // i = 2; Если описаны пользовательские типы T и P, и для типа T описано явное преобразование в тип P, то возможна следующая запись: T y; P x = new P(); y = (T) x; Следует отметить, что существуют явные преобразования внутри арифметического типа, но не существует, например, явного преобразования арифметического типа в тип bool. Например: double a = 5.0; int p = (int)a; //bool b = (bool)a; // ошибка!!! В данном примере явное преобразование из типа double в тип int выполняется, а преобразование double в тип bool приводит к ошибке, потому и закомментировано.

Слайд 83





Преобразование типов с помощью класса Convert
Можно задать явным образом требуемое преобразование, используя специальные методы преобразования, определенные в классе System.Convert, которые обеспечивают преобразование значения одного типа к значению другого типа (в том числе значения строкового типа к значениям встроенных типов).
Класс Convert содержит 15 статических методов вида To <Type> (ToBoolean(),...ToUInt64());
		 string s1 = Console.ReadLine();
		 int ux = Convert.ToUInt32(s1);
Все методы To <Type> класса Convert перегружены и каждый из них имеет, как правило, более десятка реализаций с аргументами разного типа. 
Преобразование вещественного к целому типу выполняется с округлением 
float  b = 1.5;
a = Convert.ToInt32(b); // a=2
Есть преобразование логического к целому типу
bool  b = true;
a = Convert.ToInt32(b); // a=1
Описание слайда:
Преобразование типов с помощью класса Convert Можно задать явным образом требуемое преобразование, используя специальные методы преобразования, определенные в классе System.Convert, которые обеспечивают преобразование значения одного типа к значению другого типа (в том числе значения строкового типа к значениям встроенных типов). Класс Convert содержит 15 статических методов вида To <Type> (ToBoolean(),...ToUInt64()); string s1 = Console.ReadLine(); int ux = Convert.ToUInt32(s1); Все методы To <Type> класса Convert перегружены и каждый из них имеет, как правило, более десятка реализаций с аргументами разного типа. Преобразование вещественного к целому типу выполняется с округлением float b = 1.5; a = Convert.ToInt32(b); // a=2 Есть преобразование логического к целому типу bool b = true; a = Convert.ToInt32(b); // a=1

Слайд 84





Пример преобразования типов
 System.Single f = 0.5F;
 float b = f;
 int a;
 a = (int)f; // с обрезанием дробной части
 a = Convert.ToInt32(f); // с округлением 
 string s = "123";
  // a = (int)s;
  a = Convert.ToInt32(s);
Описание слайда:
Пример преобразования типов System.Single f = 0.5F; float b = f; int a; a = (int)f; // с обрезанием дробной части a = Convert.ToInt32(f); // с округлением string s = "123"; // a = (int)s; a = Convert.ToInt32(s);

Слайд 85





Преобразование типов из строк с помощью метода Parse()
У всех типов есть статический метод Parse(), который выполняет преобразование строки текста в соответствующий формат.
Для проверки возможности преобразования использовать метод  
	bool TryParse(x) // true, если можно преобразовать иначе false
static void ParseFromStrings()
{
Console.WriteLine("=> Data type parsing:");
bool b = bool.Parse("True");
Console.WriteLine("Value of b: {0}", b);
double d = double.Parse("99.884");
Console.WriteLine("Value of d: {0}", d);
int i = int.Parse("8");
Console.WriteLine("Value of i: {0}", i);
char c = Char.Parse("w");
Console.WriteLine("Value of c: {0}", c);
Console.WriteLine();
}
Описание слайда:
Преобразование типов из строк с помощью метода Parse() У всех типов есть статический метод Parse(), который выполняет преобразование строки текста в соответствующий формат. Для проверки возможности преобразования использовать метод bool TryParse(x) // true, если можно преобразовать иначе false static void ParseFromStrings() { Console.WriteLine("=> Data type parsing:"); bool b = bool.Parse("True"); Console.WriteLine("Value of b: {0}", b); double d = double.Parse("99.884"); Console.WriteLine("Value of d: {0}", d); int i = int.Parse("8"); Console.WriteLine("Value of i: {0}", i); char c = Char.Parse("w"); Console.WriteLine("Value of c: {0}", c); Console.WriteLine(); }

Слайд 86





Операция присваивания
В C# присваивание является операцией, которая может использоваться в выражениях. В выражении, называемом множественным присваиванием, списку переменных присваивается одно и то же значение. 
Например:  x = y = z = w =(u+v+w)/(u-v-w);
При присвоении переменных разного типа выполняется преобразование типа правого операнда к типу левого операнда. Т.е. компилятор пытается выполнить преобразование типа переменной стоящей справа в тип переменной, стоящей слева. 
Присваивание переменной стоящей слева (тип T) значения переменной или результата вычисления выражения (типа T1) возможно только в следующих случаях:
типы T и T1 совпадают;
тип T является базовым (родительским) типом для типа T1 (в соответствии с наследованием типов);
в определении типа T1 описано явное или неявное преобразование в тип T.
Так как все классы в языке C# – встроенные и определенные пользователем – по определению являются потомками класса Object, то отсюда и следует, что переменным класса Object можно присваивать выражения любого типа.
Описание слайда:
Операция присваивания В C# присваивание является операцией, которая может использоваться в выражениях. В выражении, называемом множественным присваиванием, списку переменных присваивается одно и то же значение. Например: x = y = z = w =(u+v+w)/(u-v-w); При присвоении переменных разного типа выполняется преобразование типа правого операнда к типу левого операнда. Т.е. компилятор пытается выполнить преобразование типа переменной стоящей справа в тип переменной, стоящей слева. Присваивание переменной стоящей слева (тип T) значения переменной или результата вычисления выражения (типа T1) возможно только в следующих случаях: типы T и T1 совпадают; тип T является базовым (родительским) типом для типа T1 (в соответствии с наследованием типов); в определении типа T1 описано явное или неявное преобразование в тип T. Так как все классы в языке C# – встроенные и определенные пользователем – по определению являются потомками класса Object, то отсюда и следует, что переменным класса Object можно присваивать выражения любого типа.

Слайд 87





Специальные варианты присваивания
В языке C# для двух частных случаев присваивания предложен специальный синтаксис.
Для присваиваний вида "x=x+1", в которых переменная увеличивается или уменьшается на единицу, используются специальные префиксные и постфиксные операции "++" и "--". 
Другой важный частный случай – это краткая запись для  присваивания вида: X = X <operator> (expression); например: x = x * 2;
Для таких присваиваний используется краткая форма записи: X <operator>= expression; например: x *= 2;
В качестве операции разрешается использовать арифметические и логические (побитовые) операции языка C#. Например: x += u + v; y /= (u-v);
Описание слайда:
Специальные варианты присваивания В языке C# для двух частных случаев присваивания предложен специальный синтаксис. Для присваиваний вида "x=x+1", в которых переменная увеличивается или уменьшается на единицу, используются специальные префиксные и постфиксные операции "++" и "--". Другой важный частный случай – это краткая запись для присваивания вида: X = X <operator> (expression); например: x = x * 2; Для таких присваиваний используется краткая форма записи: X <operator>= expression; например: x *= 2; В качестве операции разрешается использовать арифметические и логические (побитовые) операции языка C#. Например: x += u + v; y /= (u-v);

Слайд 88





Арифметические операции
В языке C# имеются обычные для всех языков арифметические операции – "+, -, *, /, %". Все они перегружены. 
Операции "+" и "-" могут быть унарными и бинарными. 
Операция деления "/" над целыми типами осуществляет деление нацело, для типов с плавающей и фиксированной точкой – обычное деление. 
Операция "%" определена над всеми арифметическими типами и возвращает остаток от деления нацело.
		int a = 10;
		int e = 4;
		a %= e; // или a = a % e; - результат 2
Тип результата зависит от типов операндов выражения: самый сложный тип задает тип результата выражения.
Описание слайда:
Арифметические операции В языке C# имеются обычные для всех языков арифметические операции – "+, -, *, /, %". Все они перегружены. Операции "+" и "-" могут быть унарными и бинарными. Операция деления "/" над целыми типами осуществляет деление нацело, для типов с плавающей и фиксированной точкой – обычное деление. Операция "%" определена над всеми арифметическими типами и возвращает остаток от деления нацело. int a = 10; int e = 4; a %= e; // или a = a % e; - результат 2 Тип результата зависит от типов операндов выражения: самый сложный тип задает тип результата выражения.

Слайд 89





Пример вычислений с различными арифметическими типами
public void Sample() 
{
   int n = 7, m =3, p, q;
   p= n/m; q= p*m + n%m;
   if (q == n) Console.WriteLine("q = n");
   else Console.WriteLine("q!=n");
   double x=7.2 , y =3, u,v,w;
   u = x/y;     // 2.4
   v= u*y;     //  7.1999999999999993
   w= x % y; // 1.2
   if (v == x) // false
      Console.WriteLine("v = x"); 
   else 
      Console.WriteLine("v!=x");
   decimal d1=7M, d2 =3, d3,d4,d5;
   d3 = d1/d2; // 2.33333333333333333333333
   d4= d3*d2; // 6.99999999999999999999999
   d5= d1%d2; // 1.0
   if (d4 == d1) // false
      Console.WriteLine("d4 = d1");
   else 
      Console.WriteLine("d4!=d1");
}
Описание слайда:
Пример вычислений с различными арифметическими типами public void Sample() { int n = 7, m =3, p, q; p= n/m; q= p*m + n%m; if (q == n) Console.WriteLine("q = n"); else Console.WriteLine("q!=n"); double x=7.2 , y =3, u,v,w; u = x/y; // 2.4 v= u*y; // 7.1999999999999993 w= x % y; // 1.2 if (v == x) // false Console.WriteLine("v = x"); else Console.WriteLine("v!=x"); decimal d1=7M, d2 =3, d3,d4,d5; d3 = d1/d2; // 2.33333333333333333333333 d4= d3*d2; // 6.99999999999999999999999 d5= d1%d2; // 1.0 if (d4 == d1) // false Console.WriteLine("d4 = d1"); else Console.WriteLine("d4!=d1"); }

Слайд 90





Операции инкрементации и декрементации 
Операции инкрементации (увеличение на единицу) и декрементации (уменьшение на единицу) могут быть 
префиксными (стоять перед переменной) и 
постфиксными (стоять после переменной). 
К высшему приоритету относятся постфиксные операции x++ и x--. Префиксные операции имеют на единицу меньший приоритет. 
Результатом выполнения, как префиксных, так и постфиксных операций, является увеличение (++) или уменьшение (--) значения переменной на единицу. 
Для префиксных (++x, --x) операций результатом их выполнения является измененное значение x, постфиксные операции возвращают в качестве результата значение x до изменения. Например:
int n1, n2, n = 5;
n1 = n++; // n1 = 5; n = 6;
n2 = ++n; // n2 = 7; n = 7;
Описание слайда:
Операции инкрементации и декрементации Операции инкрементации (увеличение на единицу) и декрементации (уменьшение на единицу) могут быть префиксными (стоять перед переменной) и постфиксными (стоять после переменной). К высшему приоритету относятся постфиксные операции x++ и x--. Префиксные операции имеют на единицу меньший приоритет. Результатом выполнения, как префиксных, так и постфиксных операций, является увеличение (++) или уменьшение (--) значения переменной на единицу. Для префиксных (++x, --x) операций результатом их выполнения является измененное значение x, постфиксные операции возвращают в качестве результата значение x до изменения. Например: int n1, n2, n = 5; n1 = n++; // n1 = 5; n = 6; n2 = ++n; // n2 = 7; n = 7;

Слайд 91





Операции отношения
Операции отношения используются для сравнения значений переменных и констант. 
Всего имеется 6 операций отношения: ==, !=, <, >, <=, >=. 
Следует обратить внимание на запись операции "равно" –  ‘==’ (два знака присвоить =) и "не равно" – ‘!=’.
При сравнении ссылочных переменных сравниваются не сами объекты, а ссылки на объекты, если операция сравнения не переопределена.
Описание слайда:
Операции отношения Операции отношения используются для сравнения значений переменных и констант. Всего имеется 6 операций отношения: ==, !=, <, >, <=, >=. Следует обратить внимание на запись операции "равно" – ‘==’ (два знака присвоить =) и "не равно" – ‘!=’. При сравнении ссылочных переменных сравниваются не сами объекты, а ссылки на объекты, если операция сравнения не переопределена.

Слайд 92





Логические операции
В языке C# логические операции делятся на две категории: 
над логическими значениями операндов, 
над битами операндов. 
По этой причине в C# существуют две унарные операции отрицания 
логическое отрицание, заданное операцией "!", определена над операндом типа bool, 
побитовое отрицание, заданное операцией "~”, определена над операндом целочисленного типа, начиная с типа int и выше (int, uint, long, ulong). 
Результатом операции "~" является операнд, в котором каждый бит заменен его дополнением (0 на 1 и 1 на 0).
Описание слайда:
Логические операции В языке C# логические операции делятся на две категории: над логическими значениями операндов, над битами операндов. По этой причине в C# существуют две унарные операции отрицания логическое отрицание, заданное операцией "!", определена над операндом типа bool, побитовое отрицание, заданное операцией "~”, определена над операндом целочисленного типа, начиная с типа int и выше (int, uint, long, ulong). Результатом операции "~" является операнд, в котором каждый бит заменен его дополнением (0 на 1 и 1 на 0).

Слайд 93





Пример логических операций
Рассмотрим пример:
   //операции отрицания ~,!
   bool b1,b2;
   b1 = 2*2==4; b2 =!b1; // b1 = true; b2 = false;
   //b2= ~b1; // ошибка !
   uint j1 =7, j2;
   j2= ~j1; // j2 = 4294967288
   //j2 = !j1; // ошибка !
   int j4 = 7, j5;
   j5 = ~j4;  // j5 = -8
В этом фрагменте закомментированы операторы, приводящие к ошибкам. 
В первом случае была сделана попытка применения операции побитового отрицания к выражению типа bool, во втором – логическое отрицание применялось к целочисленным данным. 
Обратите внимание на разную интерпретацию побитового отрицания для беззнаковых и знаковых целочисленных типов. Для переменных j5 и j2 строка битов, задающая значение – одна и та же, но интерпретируется по-разному.
Описание слайда:
Пример логических операций Рассмотрим пример: //операции отрицания ~,! bool b1,b2; b1 = 2*2==4; b2 =!b1; // b1 = true; b2 = false; //b2= ~b1; // ошибка ! uint j1 =7, j2; j2= ~j1; // j2 = 4294967288 //j2 = !j1; // ошибка ! int j4 = 7, j5; j5 = ~j4; // j5 = -8 В этом фрагменте закомментированы операторы, приводящие к ошибкам. В первом случае была сделана попытка применения операции побитового отрицания к выражению типа bool, во втором – логическое отрицание применялось к целочисленным данным. Обратите внимание на разную интерпретацию побитового отрицания для беззнаковых и знаковых целочисленных типов. Для переменных j5 и j2 строка битов, задающая значение – одна и та же, но интерпретируется по-разному.

Слайд 94





Бинарные логические операции
Операции && и || определены только над данными типа bool:
&& – условное И (результат true, если оба операнда имеют значение true);
|| – условное ИЛИ (результат true, если хотя бы один операнд имеет значение true);
Операции && и || называются условными (или краткими), поскольку, будет ли вычисляться второй операнд, зависит от уже вычисленного значения первого операнда.
в операции &&, если первый операнд равен значению false, то второй операнд не вычисляется и результат операции равен false. 
в операции ||, если первый операнд равен значению true, то второй операнд не вычисляется и результат операции равен true. 
Такое свойство логических операций позволяет вычислить логическое выражение, имеющее смысл, но в котором второй операнд не определен.
Описание слайда:
Бинарные логические операции Операции && и || определены только над данными типа bool: && – условное И (результат true, если оба операнда имеют значение true); || – условное ИЛИ (результат true, если хотя бы один операнд имеет значение true); Операции && и || называются условными (или краткими), поскольку, будет ли вычисляться второй операнд, зависит от уже вычисленного значения первого операнда. в операции &&, если первый операнд равен значению false, то второй операнд не вычисляется и результат операции равен false. в операции ||, если первый операнд равен значению true, то второй операнд не вычисляется и результат операции равен true. Такое свойство логических операций позволяет вычислить логическое выражение, имеющее смысл, но в котором второй операнд не определен.

Слайд 95





Пример логических операций
Например, рассмотрим задачу поиска элемента массива. Заданный элемент в массиве может быть, а может и не быть.
//Условное And – &&
int[] ar= {1,2,3};
int search = 7, i=0;
// search – заданное значение
while ((i < ar.Length) && (ar[i]!= search)) i++;
if(i < ar.Length) 
   Console.WriteLine("Значение найдено");
else 
   Console.WriteLine("Значение не найдено");
Второй операнд не определен в последней проверке, поскольку индекс элемента массива выходит за допустимые пределы (в C# индексация элементов начинается с нуля). Отметим, что "нормальная" конъюнкция требует вычисления обеих операндов, поэтому ее применение в данной программе приводило бы к формированию исключения в случае, когда образца нет в массиве.
Описание слайда:
Пример логических операций Например, рассмотрим задачу поиска элемента массива. Заданный элемент в массиве может быть, а может и не быть. //Условное And – && int[] ar= {1,2,3}; int search = 7, i=0; // search – заданное значение while ((i < ar.Length) && (ar[i]!= search)) i++; if(i < ar.Length) Console.WriteLine("Значение найдено"); else Console.WriteLine("Значение не найдено"); Второй операнд не определен в последней проверке, поскольку индекс элемента массива выходит за допустимые пределы (в C# индексация элементов начинается с нуля). Отметим, что "нормальная" конъюнкция требует вычисления обеих операндов, поэтому ее применение в данной программе приводило бы к формированию исключения в случае, когда образца нет в массиве.

Слайд 96





Побитовые операции
Три бинарные побитовые операции: 
& – AND (если значения двух бит = 1, то и результирующий бит =1);
| – OR (если значения хотя бы одного бита = 1, то и результирующий бит =1); 
^ – XOR (исключа́ющее ИЛИ) могут использоваться как с целыми типами выше int, так и с булевыми типами. В первом случае они используются как побитовые операции, во втором – как обычные логические операции. 
      a  =  011001012
      b  =  001010012
тогда
a ^ b  =  010011002 

Иногда необходимо, чтобы оба операнда вычислялись в любом случае, тогда без этих операций не обойтись. Вот пример первого их использования:
//Логические побитовые операции And, Or, XOR (&,|,^)
int k2 = 7, k3 = 5, k4, k5, k6;
k4 = k2 & k3; k5 = k2 | k3; k6 = k2^k3;
Описание слайда:
Побитовые операции Три бинарные побитовые операции: & – AND (если значения двух бит = 1, то и результирующий бит =1); | – OR (если значения хотя бы одного бита = 1, то и результирующий бит =1); ^ – XOR (исключа́ющее ИЛИ) могут использоваться как с целыми типами выше int, так и с булевыми типами. В первом случае они используются как побитовые операции, во втором – как обычные логические операции. a = 011001012 b = 001010012 тогда a ^ b = 010011002 Иногда необходимо, чтобы оба операнда вычислялись в любом случае, тогда без этих операций не обойтись. Вот пример первого их использования: //Логические побитовые операции And, Or, XOR (&,|,^) int k2 = 7, k3 = 5, k4, k5, k6; k4 = k2 & k3; k5 = k2 | k3; k6 = k2^k3;

Слайд 97





Таблицы истинности
Описание слайда:
Таблицы истинности

Слайд 98





Условная операция
В C# имеется условный операция, которые начинаются с условия, заключенного в круглые скобки, после которого следует знак вопроса и пара выражений, разделенных двоеточием ‘:’. 
Условием является выражение типа bool. Если оно истинно, то из пары выражений выбирается первое, в противном случае результатом является значение второго выражения. 
Например:
int a = 7, b = 9, max;
max = (a>b) ? a:b; // max получит значение 9.
Описание слайда:
Условная операция В C# имеется условный операция, которые начинаются с условия, заключенного в круглые скобки, после которого следует знак вопроса и пара выражений, разделенных двоеточием ‘:’. Условием является выражение типа bool. Если оно истинно, то из пары выражений выбирается первое, в противном случае результатом является значение второго выражения. Например: int a = 7, b = 9, max; max = (a>b) ? a:b; // max получит значение 9.



Похожие презентации
Mypresentation.ru
Загрузить презентацию