Алгоритмитизация. 1. Алгоритмизация. Самостоятельная работа к лекции 2. "Технология объектноориентированного программирования. Состав языка. Типы данных. Переменные, именованные константы. Вводвывод данных. Форматирование данных."
Скачать 2.89 Mb.
|
Самостоятельная работа к лекции №2. "Технология объектно-ориентированного программирования. Состав языка. Типы данных. Переменные, именованные константы. Ввод-вывод данных. Форматирование данных." 1. Чем отличается метод Console.WriteLine() от метода Console.Write()? Консоль (Console)- характерная особенность ранних операционных систем (например, MS DOS), использующих интерфейс командной строки для интерактивного обмена информацией с пользователем. Консольные приложения используются и сейчас. По сравнению с графическим интерфейсом, интерфейс командной строки требует меньше системных ресурсов и предоставляет инструменты автоматизации для повторяющихся задач (Источник: https://medium.com/remflot) Для вывода информации на консоль применяются 2 ключевых метода класса Console — Console.WriteLine и Console.Write, отличие которых заключается в том, что WriteLine самостоятельно добавляет терминатор строки (разделитель строки)ко всему, что вы записали. Использование метода Write предполагает ручное разбиение строки на несколько путем добавления в запись вывода терминатора строки, где это необходимо. Метод Console.WriteLine Записывает указанные данные с текущим признаком конца строки в стандартный выходной поток. Console.WriteLine(“Hello, World!”); Console.WriteLine(“=Second Line=”); Результатом вывода будет две строки. Метод Console.Write Записывает текстовое представление заданного значения или значений в стандартный выходной поток без признака конца строки. Console.Write(“Hello,”); Console.Write(“ “); Console.Write(“World!”); Console.Write(Environment.NewLine); Console.Write(“=Second Line=”); Результат вывода этого примера идентичен. Hello, World! =Second Line= Во втором примере для разделения строки используется в качестве терминатора свойство Environment.NewLine - это обеспечивает эффективный способ выбора комбинации символов конца строки, которая зависит от используемой вами платформы. Так, большинство Unix-систем применяет специальную комбинацию “\n” в качестве терминатора строки, тогда как Windows-системы “\r\n”. Источник: https://medium.com/remflot 2. Чем отличается метод Console.ReadLine() от метода Console.Read()? Как и запись в вывод, класс Console предоставляет различные методы для чтения ввода от пользователя. Метод Read возвращает числовой код последнего введенного символа во входном потоке, если символ введен не был, то будет возвращен код -1. Для завершения работы метода, после ввода символа необходимо нажать клавишу “Enter”. Рассмотрим работу с методом Read на примере: Console.WriteLine("Нажмите любую клавишу, а затем Enter"); int key1 = Console.Read(); Console.WriteLine($"Код нажатой клавиши: {key1}"); Console.WriteLine("Символьное представление: " + Convert.ToChar(key1)); Если после надписи “Нажмите любую клавишу, а затем Enter” будет введено более одного символа, то Read вернет только первый. Для представления кода в виде символа необходимо переменную key1 привести к типу Char, для этого можно воспользоваться методом Convert.ToChar(). Метод Console.ReadLine Считывает набор символов до тех пор, пока не найдет признак окончания или новой строки, и возвращает все, что он считает, как строковое значение. Console.WriteLine("Введите ваше имя, а затем нажмите Enter"); string name = Console.ReadLine(); Console.WriteLine($"Привет, {name}!"); Если необходимо получить с консоли численные данные, то следует воспользоваться методами из класса Convert для приведения типа String к соответствующему числовому типу: Console.WriteLine("Сколько вам лет?"); int age = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ваш рост в см?"); int height = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Привет {0}, вам уже {1} полных лет и ваш рост {2} см", name, age, height); Метод ReadKey. ReadKey возвращает объект класса ConsoleKeyInfo, в который помещается информация о нажатой клавише. Этот метод, как правило, используют для остановки выполнения программы или чтобы получить ответ от пользователя. Console.WriteLine("Нажмите любую клавишу:"); var key2 = Console.ReadKey(); Console.WriteLine(key2.Key); Console.WriteLine(key2.KeyChar); Источник: https://devpractice.ru/c-sharp-lesson-3-console-io/ 3. Какой тип имеет литеральная константа 3.2? Отличительной особенностью переменных является то, что мы можем изменить их значение в процессе работы программы. Но, кроме того, в C# есть константы. Константа должна быть обязательно инициализирована при определении, и после определения значение константы не может быть изменено Константы предназначены для описания таких значений, которые не должны изменяться в программе. Для определения констант используется ключевое слово const, которое указывается перед типом константы:
Так, в данном случае определена константа NAME, которая хранит строку "Tom". Нередко для название констант используется верхний регистр, но это не более чем условность. При использовании констант надо помнить, что объявить мы их можем только один раз и что к моменту компиляции они должны быть определены. (Источник: https://metanit.com/sharp/tutorial/2.25.php) Литералы представляют неизменяемые значения (иногда их еще называют константами). Литералы можно передавать переменным в качестве значения. Литералы бывают логическими, целочисленными, вещественными, символьными и строчными. И отдельный литерал представляет ключевое слово null. Целочисленные литералы представляют положительные и отрицательные целые числа, например, 1, 2, 3, 4, -7, -109. Целочисленные литералы могут быть выражены в десятичной, шестнадцатеричной и двоичной форме:
Числа в двоичной форме предваряются символами 0b, после которых идет набор из нулей и единиц:
Для записи числа в шестнадцатеричной форме применяются символы 0x, после которых идет набор символов от 0 до 9 и от A до F, которые собственно представляют число:
Вещественные литералы представляют дробные числа. Этот тип литералов имеет две формы. Первая форма - вещественные числа с фиксированной запятой, при которой дробную часть отделяется от целой части точкой. Например:
Также вещественные литералы могут определяться в экспоненциальной форме MEp, где M — мантисса, E - экспонента, которая фактически означает "*10^" (умножить на десять в степени), а p — порядок. Например:
Символьные литералы представляют одиночные символы. Символы заключаются в одинарные кавычки. Символьные литералы бывают нескольких видов. Прежде всего это обычные символы:
Также мы можем передать их вывести на консоль с помощью Console.WriteLine:
Специальную группу представляют управляющие последовательности Управляющая последовательность представляет символ, перед которым ставится слеш. И данная последовательность интерпретируется определенным образом. Наиболее часто используемые последовательности: '\n' - перевод строки '\t' - табуляция '\' - слеш И если компилятор встретит в тексте последовательность \t, то он будет воспринимать эту последовательность не как слеш и букву t, а как табуляцию - то есть длинный отступ. Еще один способ определения символов представляет использования шестнадцатеричных кодов ASCII. Для этого в одинарных кавычках указываются символы '\x', после которых идет шестнадцатеричный код символа из таблицы ASCII. Строковые литералы представляют строки. Строки заключаются в двойные кавычки:
null представляет ссылку, которая не указывает ни на какой объект. То есть по сути отсутствие значения. Таким образом, литеральная константа 3.2 имеет тип «вещественные литералы», т.к они представляют дробные числа. Этот тип литералов имеет две формы. Первая форма - вещественные числа с фиксированной запятой, при которой дробную часть отделяется от целой части точкой. Также вещественные литералы могут определяться в экспоненциальной форме MEp Данный литерал относится к 1 форме - вещественные числа с фиксированной запятой 4. Как явным образом уточнить тип литеральной константы? Если не устраивает используемый по умолчанию тип литерала, то можно явно указать другой его тип с помощью суффикса. Так, для указания типа long к литералу присоединяется суффикс l или L. Например, 12 — это литерал типа int, a 12L — литерал типа long. Для указания целочисленного типа без знака к литералу присоединяется суффикс u или U. Следовательно, 100 — это литерал типа int, a 100U — литерал типа uint. А для указания длинного целочисленного типа без знака к литералу присоединяется суффикс ul или UL. Например, 984375UL — это литерал типа ulong. Кроме того, для указания типа float к литералу присоединяется суффикс F или f. Например, 10.19F — это литерал типа float. Можно даже указать тип double, присоединив к литералу суффикс d или D, хотя это излишне. Ведь по умолчанию литералы с плавающей точкой относятся к типу double. И наконец, для указания типа decimal к литералу присоединяется суффикс m или М. Например, 9.95М — это десятичный литерал типа decimal. Несмотря на то что целочисленные литералы образуют по умолчанию значения типа int, uint, long или ulong, их можно присваивать переменным типа byte, sbyte, short или ushort, при условии, что присваиваемое значение может быть представлено целевым типом. Источник: https://professorweb.ru/my/csharp/charp_theory/level1/index.php 5. Что обозначается константой NaN? И в каких случаях компилятором используется данная константа? Некоторые математические операции дают результаты, которые не являются действительными числами. Ответы могут быть мнимыми числами или неопределенными значениями, любое из которых не могут быть представлены в число с плавающей точкой. В этих случаях результирующее значение будет NaN (Not-a-Number, «не число»). "Не Число" C # и .NET framework не обеспечивают способ представления некоторых числовых значений. Например, не существует стандартного способа для хранения переменной в виде мнимого или комплексного чисел. Некоторыми из математических методов математического класса библиотеки можно вычислить такие значения или возвращать такие значения, которые не являются действительными числами. Вместо этого, выбрасывая исключение в этих случаях функции возвращают специальное значение с именем NaN, которое является сокращением от "не число". Значение NaN можно получить из постоянного поля на float или Double структур. Это поле является статическим членом структуры. Оно не может быть использовано в целях сравнения, два значения NaN могут быть логически разными, поэтому тесты на равенство всегда возвращают false. Следующий пример генерирует результат NaN, пытаясь получить квадратный корень из отрицательного числа. Затем идет сравнение с константой. double nanPr = Math.Sqrt(-4); Console.WriteLine(nanPr); // На выходе: "NaN" Console.WriteLine(nanPr == double.NaN); // На выходе: "False" Проверка на NaN Хотя стандартные операторы сравнения не позволяют проверить, является значение числом или нет, все же есть способ: float и double. Метод IsNaN возвращает логическое значение, указывающее, является параметр числом или нет. double nanPr = Math.Sqrt(-4); Console.WriteLine(double.IsNaN(nanPr)); //На выходе: "True" Источник: https://upread.ru/art.php?id=176 Самостоятельная работа к лекции №3. "Основные операции С#. Выражения. Преобразование типов." Используя Интернет и дополнительную литературу изучить следующие операции: сдвиг влево (<<), сдвиг вправо (>>); поразрядные операции И (&), исключающее ИЛИ (^) и ИЛИ (|); сложные операции присваивания: <<=, >>=, &=, ^=, |=. Рассмотреть, для какого класса задач применимы указанные операции. В C# используется большинство операций, которые применяются и в других языках программирования. Операции представляют определенные действия над операндами - участниками операции. В качестве операнда может выступать переменной или какое-либо значение (например, число). Операции бывают унарными (выполняются над одним операндом), бинарными - над двумя операндами и тернарными - выполняются над тремя операндами. (источник: https://metanit.com/sharp/tutorial/2.3.php) 1. Операции сдвиг влево (<<), сдвиг вправо (>>) Операции сдвига также производятся над разрядами чисел. Сдвиг может происходить вправо и влево. x< x>>y - сдвигает число x вправо на y разрядов. Например, 16>>1 сдвигает число 16 (которое в двоичном представлении 10000) на один разряд вправо, то есть в итоге получается 1000 или число 8 в десятичном представлении. Таким образом, если исходное число, которое надо сдвинуть в ту или другую строну, делится на два, то фактически получается умножение или деление на два. Поэтому подобную операцию можно использовать вместо непосредственного умножения или деления на два. Например: int a = 16; // в двоичной форме 10000 int b = 2; // в двоичной форме int c = a << b; // Сдвиг числа 10000 влево на 2 разряда, равно 1000000 или 64 в десятичной системе Console.WriteLine($"Зашифрованное число: {c}") ; // 64 int d = a >> b; // Сдвиг числа 10000 вправо на 2 разряда, равно 100 или 4 в десятичной системе Console.WriteLine($"Зашифрованное число: {d}"); // 4 При этом числа, которые участвую в операциях, необязательно должны быть кратны 2: int a = 22; // в двоичной форме 10110 int b = 2; // в двоичной форме int c = a << b; // Сдвиг числа 10110 влево на 2 разряда, равно 1011000 или 88 в десятичной системе Console.WriteLine($"Зашифрованное число: {c}") ; // 88 int d = a >> b; // Сдвиг числа 10110 вправо на 2 разряда, равно 101 или 5 в десятичной системе Console.WriteLine($"Зашифрованное число: {d}"); // 5 2. Поразрядные операции И (&), исключающее ИЛИ (^) и ИЛИ (|) Особый класс операций представляют поразрядные операции. Они выполняются над отдельными разрядами числа. В этом плане числа рассматриваются в двоичном представлении, например, 2 в двоичном представлении 10 и имеет два разряда, число 7 - 111 и имеет три разряда. & (логическое умножение) Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например: int x1 = 2; //010 int y1 = 5;//101 Console.WriteLine(x1&y1); // выведет 0 int x2 = 4; //100 int y2 = 5; //101 Console.WriteLine(x2 & y2); // выведет 4 1> |