🗊Презентация Краткое руководство по синтаксису C#. Часть I. Основы

Нажмите для полного просмотра!
Краткое руководство по синтаксису C#. Часть I. Основы, слайд №1Краткое руководство по синтаксису C#. Часть I. Основы, слайд №2Краткое руководство по синтаксису C#. Часть I. Основы, слайд №3Краткое руководство по синтаксису C#. Часть I. Основы, слайд №4Краткое руководство по синтаксису C#. Часть I. Основы, слайд №5Краткое руководство по синтаксису C#. Часть I. Основы, слайд №6Краткое руководство по синтаксису C#. Часть I. Основы, слайд №7Краткое руководство по синтаксису C#. Часть I. Основы, слайд №8Краткое руководство по синтаксису C#. Часть I. Основы, слайд №9Краткое руководство по синтаксису C#. Часть I. Основы, слайд №10Краткое руководство по синтаксису C#. Часть I. Основы, слайд №11Краткое руководство по синтаксису C#. Часть I. Основы, слайд №12Краткое руководство по синтаксису C#. Часть I. Основы, слайд №13Краткое руководство по синтаксису C#. Часть I. Основы, слайд №14Краткое руководство по синтаксису C#. Часть I. Основы, слайд №15Краткое руководство по синтаксису C#. Часть I. Основы, слайд №16Краткое руководство по синтаксису C#. Часть I. Основы, слайд №17Краткое руководство по синтаксису C#. Часть I. Основы, слайд №18Краткое руководство по синтаксису C#. Часть I. Основы, слайд №19Краткое руководство по синтаксису C#. Часть I. Основы, слайд №20Краткое руководство по синтаксису C#. Часть I. Основы, слайд №21Краткое руководство по синтаксису C#. Часть I. Основы, слайд №22Краткое руководство по синтаксису C#. Часть I. Основы, слайд №23Краткое руководство по синтаксису C#. Часть I. Основы, слайд №24Краткое руководство по синтаксису C#. Часть I. Основы, слайд №25Краткое руководство по синтаксису C#. Часть I. Основы, слайд №26Краткое руководство по синтаксису C#. Часть I. Основы, слайд №27Краткое руководство по синтаксису C#. Часть I. Основы, слайд №28Краткое руководство по синтаксису C#. Часть I. Основы, слайд №29Краткое руководство по синтаксису C#. Часть I. Основы, слайд №30Краткое руководство по синтаксису C#. Часть I. Основы, слайд №31Краткое руководство по синтаксису C#. Часть I. Основы, слайд №32Краткое руководство по синтаксису C#. Часть I. Основы, слайд №33Краткое руководство по синтаксису C#. Часть I. Основы, слайд №34Краткое руководство по синтаксису C#. Часть I. Основы, слайд №35Краткое руководство по синтаксису C#. Часть I. Основы, слайд №36Краткое руководство по синтаксису C#. Часть I. Основы, слайд №37Краткое руководство по синтаксису C#. Часть I. Основы, слайд №38Краткое руководство по синтаксису C#. Часть I. Основы, слайд №39Краткое руководство по синтаксису C#. Часть I. Основы, слайд №40Краткое руководство по синтаксису C#. Часть I. Основы, слайд №41Краткое руководство по синтаксису C#. Часть I. Основы, слайд №42Краткое руководство по синтаксису C#. Часть I. Основы, слайд №43Краткое руководство по синтаксису C#. Часть I. Основы, слайд №44Краткое руководство по синтаксису C#. Часть I. Основы, слайд №45Краткое руководство по синтаксису C#. Часть I. Основы, слайд №46Краткое руководство по синтаксису C#. Часть I. Основы, слайд №47Краткое руководство по синтаксису C#. Часть I. Основы, слайд №48Краткое руководство по синтаксису C#. Часть I. Основы, слайд №49Краткое руководство по синтаксису C#. Часть I. Основы, слайд №50Краткое руководство по синтаксису C#. Часть I. Основы, слайд №51Краткое руководство по синтаксису C#. Часть I. Основы, слайд №52Краткое руководство по синтаксису C#. Часть I. Основы, слайд №53Краткое руководство по синтаксису C#. Часть I. Основы, слайд №54Краткое руководство по синтаксису C#. Часть I. Основы, слайд №55Краткое руководство по синтаксису C#. Часть I. Основы, слайд №56Краткое руководство по синтаксису C#. Часть I. Основы, слайд №57Краткое руководство по синтаксису C#. Часть I. Основы, слайд №58Краткое руководство по синтаксису C#. Часть I. Основы, слайд №59Краткое руководство по синтаксису C#. Часть I. Основы, слайд №60Краткое руководство по синтаксису C#. Часть I. Основы, слайд №61Краткое руководство по синтаксису C#. Часть I. Основы, слайд №62Краткое руководство по синтаксису C#. Часть I. Основы, слайд №63Краткое руководство по синтаксису C#. Часть I. Основы, слайд №64Краткое руководство по синтаксису C#. Часть I. Основы, слайд №65Краткое руководство по синтаксису C#. Часть I. Основы, слайд №66Краткое руководство по синтаксису C#. Часть I. Основы, слайд №67Краткое руководство по синтаксису C#. Часть I. Основы, слайд №68Краткое руководство по синтаксису C#. Часть I. Основы, слайд №69Краткое руководство по синтаксису C#. Часть I. Основы, слайд №70Краткое руководство по синтаксису C#. Часть I. Основы, слайд №71Краткое руководство по синтаксису C#. Часть I. Основы, слайд №72Краткое руководство по синтаксису C#. Часть I. Основы, слайд №73Краткое руководство по синтаксису C#. Часть I. Основы, слайд №74Краткое руководство по синтаксису C#. Часть I. Основы, слайд №75

Содержание

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

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


Слайд 1





Краткое руководство по синтаксису C#
Часть I. Основы
Автор презентации: Бабин К.А., Архангельская область, город Новодвинск, учитель информатики и ИКТ в МОУ «СОШ №4» города Новодвинска
При создании данной презентации использовалась следующая печатная литература:
Г.Щилдт. C# 4.0: полное руководство. : Пер. с англ. - М.: ООО «И.Д. Вильямс», 2014. - 1056 с.: ил. - Парал. тит. англ.
Д.Албахари, Б.Албахари C# 7.0 “Справочник. Полное описание языка”, 7-е изд. : Пер. с англ. - СПб.: ООО «Диалектика», 2019. – 1024 с. : ил. – Парал. тит англ.
 Э.Троелсен, Ф.Джепикс Язык программирования C# 7 и платформы .NET и NET.Core, 8-е изд. : Пер. с англ. — СПБ. : ООО «Диалектика», 2019 — 1328 с. : ил. — Парал. тит. Англ.
Использованные интегрированные среды разработки (IDE): Microsoft Visual C# 2010.
Новые средства C# 5.0-7.0 не рассматриваются в данной презентации (за некоторым исключением), т.к. не поддерживаются системой Yandex Contest при проверке олимпиадных заданий (На момент написания в Yandex Contest использовался компилятор Mono C# 5.2).
Описание слайда:
Краткое руководство по синтаксису C# Часть I. Основы Автор презентации: Бабин К.А., Архангельская область, город Новодвинск, учитель информатики и ИКТ в МОУ «СОШ №4» города Новодвинска При создании данной презентации использовалась следующая печатная литература: Г.Щилдт. C# 4.0: полное руководство. : Пер. с англ. - М.: ООО «И.Д. Вильямс», 2014. - 1056 с.: ил. - Парал. тит. англ. Д.Албахари, Б.Албахари C# 7.0 “Справочник. Полное описание языка”, 7-е изд. : Пер. с англ. - СПб.: ООО «Диалектика», 2019. – 1024 с. : ил. – Парал. тит англ. Э.Троелсен, Ф.Джепикс Язык программирования C# 7 и платформы .NET и NET.Core, 8-е изд. : Пер. с англ. — СПБ. : ООО «Диалектика», 2019 — 1328 с. : ил. — Парал. тит. Англ. Использованные интегрированные среды разработки (IDE): Microsoft Visual C# 2010. Новые средства C# 5.0-7.0 не рассматриваются в данной презентации (за некоторым исключением), т.к. не поддерживаются системой Yandex Contest при проверке олимпиадных заданий (На момент написания в Yandex Contest использовался компилятор Mono C# 5.2).

Слайд 2





1. Общие сведения
Краткая информация
Основные правила языка C#
Шаблон для написания консольных программ
Альтернативный шаблон для написания консольных программ
Описание слайда:
1. Общие сведения Краткая информация Основные правила языка C# Шаблон для написания консольных программ Альтернативный шаблон для написания консольных программ

Слайд 3





Краткая информация
Язык программирования C# Разработан корпорацией Microsoft в конце 1990-х годов как часть общей стратегии .NET, т.е. у него имеется особая взаимосвязь со средой выполнения .NET Framework, предназначенной для разработки программ, в первую очередь, для операционной системы Windows;
Главный разработчик - Андерс Хейльсберг;
Является непосредственным наследником языков C и C++, используется так называемый «си-подобный» синтаксис.
Общеязыковая среда выполнения (CLR) как составная часть .NET Framework поддерживает многоязыковое программирование, а также обеспечивает переносимость и безопасное выполнение программ.
Наличие библиотеки классов. Эта библиотека предоставляет программе доступ к среде выполнения.
Любой создаваемый объект (как и в Java) - это класс, что подчеркивает объектно-ориентированную концепцию разработки программ.
Описание слайда:
Краткая информация Язык программирования C# Разработан корпорацией Microsoft в конце 1990-х годов как часть общей стратегии .NET, т.е. у него имеется особая взаимосвязь со средой выполнения .NET Framework, предназначенной для разработки программ, в первую очередь, для операционной системы Windows; Главный разработчик - Андерс Хейльсберг; Является непосредственным наследником языков C и C++, используется так называемый «си-подобный» синтаксис. Общеязыковая среда выполнения (CLR) как составная часть .NET Framework поддерживает многоязыковое программирование, а также обеспечивает переносимость и безопасное выполнение программ. Наличие библиотеки классов. Эта библиотека предоставляет программе доступ к среде выполнения. Любой создаваемый объект (как и в Java) - это класс, что подчеркивает объектно-ориентированную концепцию разработки программ.

Слайд 4





Основные правила языка С#
1) Регистрозависимый. Например, нельзя использовать ключевые слова в регистре, в котором они не предусмотрены (например, INT или Int вместо int)
2) После каждой операции, кроме операций препроцессора и некоторых других необходимо ставить точку с запятой ; Точка с запятой означает конец оператора.
3) Для декорирования можно использовать сколько угодно табуляций и пробелов в коде, кроме целостных операций типа ==;
4) Переменная или функция может начинаться только с буквы, т.е. 1MyVar – недопустимо. Также не рекомендуется начинать переменную с нижнего подчеркивания (типа _MyVar), это обычно зарезервировано для специфических нужд среды или используются стандартной библиотекой. В качестве имен нельзя использовать ключевые слова языка; Однако применение @ перед именем снимает это ограничение, например, @var или @for (это отличие от других си-подобных языков), хотя это не рекомендуется.
5) Десятичные числа типа 0,54 записываются только через точку, т.е. 0.54 или .54
6) Константы в языке по общему соглашению принято писать заглавными буквами (const int MAX = 10);
7) Строго типизированный язык (не считая тип dynamic).
Описание слайда:
Основные правила языка С# 1) Регистрозависимый. Например, нельзя использовать ключевые слова в регистре, в котором они не предусмотрены (например, INT или Int вместо int) 2) После каждой операции, кроме операций препроцессора и некоторых других необходимо ставить точку с запятой ; Точка с запятой означает конец оператора. 3) Для декорирования можно использовать сколько угодно табуляций и пробелов в коде, кроме целостных операций типа ==; 4) Переменная или функция может начинаться только с буквы, т.е. 1MyVar – недопустимо. Также не рекомендуется начинать переменную с нижнего подчеркивания (типа _MyVar), это обычно зарезервировано для специфических нужд среды или используются стандартной библиотекой. В качестве имен нельзя использовать ключевые слова языка; Однако применение @ перед именем снимает это ограничение, например, @var или @for (это отличие от других си-подобных языков), хотя это не рекомендуется. 5) Десятичные числа типа 0,54 записываются только через точку, т.е. 0.54 или .54 6) Константы в языке по общему соглашению принято писать заглавными буквами (const int MAX = 10); 7) Строго типизированный язык (не считая тип dynamic).

Слайд 5





Шаблон для написания консольных программ
using System;
class Example
{
   static void Main() 
   {
      // код программы
      Console.ReadLine();
   }
}
Описание слайда:
Шаблон для написания консольных программ using System; class Example { static void Main() { // код программы Console.ReadLine(); } }

Слайд 6





Альтернативный шаблон для написания консольных программ
using System;
class Example
{
   static void Main() 
   {
      // код программы
                      	System.Console.Read();
   }
}
Описание слайда:
Альтернативный шаблон для написания консольных программ using System; class Example { static void Main() { // код программы System.Console.Read(); } }

Слайд 7





2. Стандартные операции
Арифметические операции и операции сравнения
Другие операции
Сокращенные записи
Вывод на консоль
Описание слайда:
2. Стандартные операции Арифметические операции и операции сравнения Другие операции Сокращенные записи Вывод на консоль

Слайд 8





Арифметические операции и операции сравнения
Описание слайда:
Арифметические операции и операции сравнения

Слайд 9





Другие операции
Описание слайда:
Другие операции

Слайд 10


Краткое руководство по синтаксису C#. Часть I. Основы, слайд №10
Описание слайда:

Слайд 11





Вывод на консоль
Описание слайда:
Вывод на консоль

Слайд 12





3. Типы данных
Типы целочисленных переменных
Типы для представления чисел с плавающей точкой и десятичный тип данных
Символы и логический тип данных
Правила объявления переменных и область видимости
Формат записи при выводе
Суффиксы для обозначения типов констант
Коды управляющих последовательностей
Правила преобразования типов
Преобразование и приведение типов
Необходимое приведение типов
Математические функции (класс System.Math)
Использование математических функций (пример)
Описание слайда:
3. Типы данных Типы целочисленных переменных Типы для представления чисел с плавающей точкой и десятичный тип данных Символы и логический тип данных Правила объявления переменных и область видимости Формат записи при выводе Суффиксы для обозначения типов констант Коды управляющих последовательностей Правила преобразования типов Преобразование и приведение типов Необходимое приведение типов Математические функции (класс System.Math) Использование математических функций (пример)

Слайд 13





Типы целочисленных переменных
Описание слайда:
Типы целочисленных переменных

Слайд 14





Типы для представления чисел с плавающей точкой и десятичный тип данных
Описание слайда:
Типы для представления чисел с плавающей точкой и десятичный тип данных

Слайд 15





Символы и логический тип данных
В С# символы представлены не 8-разрядным кодом (как в некоторых других языках программирования), а 16-разрядным кодом, который называет Unicode.
Объявление символьной переменной:
char ch;
ch = ‘X’;
ch = 88; //это ошибка, так делать нельзя
ch = (char) 88; //А так можно, будет храниться номер символа из таблицы UTF под номером 88 (Это «Х»)
Логический тип данных представляет два логических значения: true (“Истина”) и false (“Ложь”). Причем, в отличие от С++, присваивать переменным 1 или 0 вместо этих ключевых слов нельзя.
Объявление переменной логического типа:
bool b;
b = true;
b = a > b; (при известных значениях переменных)
Описание слайда:
Символы и логический тип данных В С# символы представлены не 8-разрядным кодом (как в некоторых других языках программирования), а 16-разрядным кодом, который называет Unicode. Объявление символьной переменной: char ch; ch = ‘X’; ch = 88; //это ошибка, так делать нельзя ch = (char) 88; //А так можно, будет храниться номер символа из таблицы UTF под номером 88 (Это «Х») Логический тип данных представляет два логических значения: true (“Истина”) и false (“Ложь”). Причем, в отличие от С++, присваивать переменным 1 или 0 вместо этих ключевых слов нельзя. Объявление переменной логического типа: bool b; b = true; b = a > b; (при известных значениях переменных)

Слайд 16





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

Слайд 17





Формат записи при выводе
Метод WriteLine() для отображения строк, значений переменных и т.д. может использоваться в двух вариантах:
1) Между выводящимися частями ставится «+», и тогда получается нечто следующее:
Console.WriteLine(“Его возраст: ” + age + “ лет.”);
Его возраст 25 лет.
2) Между выводящимися частями ставится «,», и тогда всё меняется: первым аргументом передаётся форматирующая строка в двойных кавычках, а через запятую передаются остальные аргументы. Данный вывод чем-то похож на си-подобный подобный вывод printf, но использовать printf немного сложнее.
Пример форматированного вывода C# № 1:
Console.WriteLine(“В феврале {0} или {1} дней.”, 28, 29);
В феврале 28 или 29 дней.
Здесь аргументы вставляются вместо индексов в фигурной скобке.
Следующий пример задаёт ширину полей.
Пример форматированного вывода C# № 2:
Console.WriteLine(“В феврале {0,10} или {1,5} дней.”, 28, 29);
В феврале         28 или    29 дней.
Здесь вторая цифра в фигурных скобках как раз и задаёт формат полей, поэтому если число занимает 2 символа, то спереди будут добавлены ещё 8 символов в первом случае и 3 символа во втором случае примера № 2.
Описание слайда:
Формат записи при выводе Метод WriteLine() для отображения строк, значений переменных и т.д. может использоваться в двух вариантах: 1) Между выводящимися частями ставится «+», и тогда получается нечто следующее: Console.WriteLine(“Его возраст: ” + age + “ лет.”); Его возраст 25 лет. 2) Между выводящимися частями ставится «,», и тогда всё меняется: первым аргументом передаётся форматирующая строка в двойных кавычках, а через запятую передаются остальные аргументы. Данный вывод чем-то похож на си-подобный подобный вывод printf, но использовать printf немного сложнее. Пример форматированного вывода C# № 1: Console.WriteLine(“В феврале {0} или {1} дней.”, 28, 29); В феврале 28 или 29 дней. Здесь аргументы вставляются вместо индексов в фигурной скобке. Следующий пример задаёт ширину полей. Пример форматированного вывода C# № 2: Console.WriteLine(“В феврале {0,10} или {1,5} дней.”, 28, 29); В феврале 28 или 29 дней. Здесь вторая цифра в фигурных скобках как раз и задаёт формат полей, поэтому если число занимает 2 символа, то спереди будут добавлены ещё 8 символов в первом случае и 3 символа во втором случае примера № 2.

Слайд 18





Формат записи при выводе
В следующем примере спецификатор формата использует управляющие последовательности, в данном случае горизонтальную табуляцию \t (Об управляющих символах будет подробнее рассказано позже).
Пример форматированного вывода C# № 3:
Console.WriteLine(“Число \t Квадрат \t Куб”);
for(i = 1; i < 10; i++)
	Console.WriteLine(“{0} \t {1} \t {2}”, i, i*i, i*i*i);
Результат выполнения выглядит следующим образом:
Число	Квадрат  Куб
1	1	1
2	4	8
3	9	27
4	16	64
5	25	125
6	36	216
7	49	343
8	64	512
9	81	729
Описание слайда:
Формат записи при выводе В следующем примере спецификатор формата использует управляющие последовательности, в данном случае горизонтальную табуляцию \t (Об управляющих символах будет подробнее рассказано позже). Пример форматированного вывода C# № 3: Console.WriteLine(“Число \t Квадрат \t Куб”); for(i = 1; i < 10; i++) Console.WriteLine(“{0} \t {1} \t {2}”, i, i*i, i*i*i); Результат выполнения выглядит следующим образом: Число Квадрат Куб 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729

Слайд 19





Формат записи при выводе
Следующий пример устанавливает количество знаков после запятой.
Пример форматированного вывода C# № 4:
Console.WriteLine(“Деление 10/3 даёт: {0:#.##}”, 10.0 / 3.0);
Деление 10/3 даёт: 3.33
Ноль в фигурных скобках – это первый и единственный аргумент (результат деления), а через двоеточие методу указывается отобразить два десятичных разряда в дробной части числа.
Следующий пример задаёт разделители целой части, например, запятую.
Пример форматированного вывода C# № 5:
Console.WriteLine(“ {0:###,###.##}”, 123456.56);
123,456.56
Для вывода денежных сумм, например, рекомендуется использовать спецификатор формата C.
decimal balance;
balance = 12323.09M;
Console.WriteLine(“Текущий баланс равен {0:C}”, balance);
Результат выполнения этого фрагмента кода выводится в формате денежных сумм, указываемых в долларах США (для иностранных версий Windows) и рублях (например, для русскоязычных, если системой это предопределено).
Текущий баланс равен $12,323.09
Описание слайда:
Формат записи при выводе Следующий пример устанавливает количество знаков после запятой. Пример форматированного вывода C# № 4: Console.WriteLine(“Деление 10/3 даёт: {0:#.##}”, 10.0 / 3.0); Деление 10/3 даёт: 3.33 Ноль в фигурных скобках – это первый и единственный аргумент (результат деления), а через двоеточие методу указывается отобразить два десятичных разряда в дробной части числа. Следующий пример задаёт разделители целой части, например, запятую. Пример форматированного вывода C# № 5: Console.WriteLine(“ {0:###,###.##}”, 123456.56); 123,456.56 Для вывода денежных сумм, например, рекомендуется использовать спецификатор формата C. decimal balance; balance = 12323.09M; Console.WriteLine(“Текущий баланс равен {0:C}”, balance); Результат выполнения этого фрагмента кода выводится в формате денежных сумм, указываемых в долларах США (для иностранных версий Windows) и рублях (например, для русскоязычных, если системой это предопределено). Текущий баланс равен $12,323.09

Слайд 20





Суффиксы для обозначения типов констант
Число 22022 может быть сохранено в типе int, но если добавить суффикс 22022L или 22022l, то число будет типа long.
Суффиксы:
22022u и 22022U - тип uint;
22022UL и 22022ul – тип ulong;
22022L и 22022l – тип long;
1.234f и 1.234F - тип float
1.234D и 1.234d - тип double (избыточно, т.к. по умолчанию)
1.234m и 1.234M - тип Decimal (обязательно для указывания)
Шестнадцатеричные литералы:
count = 0xFF; //255 в десятичной системе
incr = 0x1a; //26 в десятичной системе
Описание слайда:
Суффиксы для обозначения типов констант Число 22022 может быть сохранено в типе int, но если добавить суффикс 22022L или 22022l, то число будет типа long. Суффиксы: 22022u и 22022U - тип uint; 22022UL и 22022ul – тип ulong; 22022L и 22022l – тип long; 1.234f и 1.234F - тип float 1.234D и 1.234d - тип double (избыточно, т.к. по умолчанию) 1.234m и 1.234M - тип Decimal (обязательно для указывания) Шестнадцатеричные литералы: count = 0xFF; //255 в десятичной системе incr = 0x1a; //26 в десятичной системе

Слайд 21





Коды управляющих последовательностей
Описание слайда:
Коды управляющих последовательностей

Слайд 22





Правила преобразования типов
(по «рангу» операнда сверху вниз)
Описание слайда:
Правила преобразования типов (по «рангу» операнда сверху вниз)

Слайд 23





Преобразование и приведение типов
Описание слайда:
Преобразование и приведение типов

Слайд 24





Необходимое приведение типов
Из 25 слайда (последней строки) следует, что некоторые операнды будут приведены в int, даже если будут изначально иметь другой тип, например bool или char, а также все типы, «меньшие» int.
Пример № 1:
bool b, bb=true;
b = bb * bb; - это ошибка! Произойдёт преобразование в int.
b = (byte) (bb  * bb); - а здесь ошибки нет. Необходимо явное приведение.
Пример № 2:
char ch1 = ‘a’, ch2 = ‘b’;
ch1 = (char) (ch1 + ch2); //Только так
Описание слайда:
Необходимое приведение типов Из 25 слайда (последней строки) следует, что некоторые операнды будут приведены в int, даже если будут изначально иметь другой тип, например bool или char, а также все типы, «меньшие» int. Пример № 1: bool b, bb=true; b = bb * bb; - это ошибка! Произойдёт преобразование в int. b = (byte) (bb * bb); - а здесь ошибки нет. Необходимо явное приведение. Пример № 2: char ch1 = ‘a’, ch2 = ‘b’; ch1 = (char) (ch1 + ch2); //Только так

Слайд 25





Математические функции (класс System.Math)
Описание слайда:
Математические функции (класс System.Math)

Слайд 26





Математические функции (класс System.Math)
Описание слайда:
Математические функции (класс System.Math)

Слайд 27





Использование математических функции в C# (на примере)
Описание слайда:
Использование математических функции в C# (на примере)

Слайд 28





4. Условный оператор if и оператор выбора switch
1) Условный оператор if
2) Распространённые условия проверки
3) Оператор выбора switch
Описание слайда:
4. Условный оператор if и оператор выбора switch 1) Условный оператор if 2) Распространённые условия проверки 3) Оператор выбора switch

Слайд 29





Условный оператор if
Описание слайда:
Условный оператор if

Слайд 30





Распространённые условия проверки
Описание слайда:
Распространённые условия проверки

Слайд 31





Оператор выбора switch
Описание слайда:
Оператор выбора switch

Слайд 32





5. Циклы for, while, do while
Циклы
Цикл foreach
Оператор goto
Описание слайда:
5. Циклы for, while, do while Циклы Цикл foreach Оператор goto

Слайд 33





Циклы
Описание слайда:
Циклы

Слайд 34





Цикл foreach
Для удобства обработки «коллекций» (например, массивов) создан цикл foreach, основанный на диапазоне:
short [] seasons = new short[] {1,2,3,4}; //про массивы будет сказано позже
foreach (double x in seasons)	Console.Writeline(x);
Здесь цикл выведет каждый элемент массива один за другим.
Следует, однако, иметь в виду, что в отличие от С++, переменная цикла (в контексте это double x) в операторе foreach языка C# служит только для чтения. Это означает, что, присваивая этой переменной новое значение, нельзя изменить содержимое массива.
Оператор foreach можно использовать только для типов, наследующих интерфейс перечисления IEnumerable<T> (Данная тема выходит за рамки данной презентации)
Описание слайда:
Цикл foreach Для удобства обработки «коллекций» (например, массивов) создан цикл foreach, основанный на диапазоне: short [] seasons = new short[] {1,2,3,4}; //про массивы будет сказано позже foreach (double x in seasons) Console.Writeline(x); Здесь цикл выведет каждый элемент массива один за другим. Следует, однако, иметь в виду, что в отличие от С++, переменная цикла (в контексте это double x) в операторе foreach языка C# служит только для чтения. Это означает, что, присваивая этой переменной новое значение, нельзя изменить содержимое массива. Оператор foreach можно использовать только для типов, наследующих интерфейс перечисления IEnumerable<T> (Данная тема выходит за рамки данной презентации)

Слайд 35





Оператор goto
Нелюбимый программистами оператор безусловного перехода goto также имеется в С#. Данный оператор используется очень редко, т.к. способствует созданию т.н. «макаронного кода», т.к. благодаря ему в большой программе очень тяжело разобраться, что за чем выполняется, если данный оператор находится в неумелых руках.
Когда в программе встречается оператор goto, её выполнение переходит непосредственно к тому месту, на которое указывает этот оператор. Для этого в программе создаётся метка перехода:
Единственное оправданное применение goto – это более быстрый выход из большого количества вложенных циклов или при использовании рекурсивных функций (хотя в большинстве случаев можно обойтись и без этого оператора).
Описание слайда:
Оператор goto Нелюбимый программистами оператор безусловного перехода goto также имеется в С#. Данный оператор используется очень редко, т.к. способствует созданию т.н. «макаронного кода», т.к. благодаря ему в большой программе очень тяжело разобраться, что за чем выполняется, если данный оператор находится в неумелых руках. Когда в программе встречается оператор goto, её выполнение переходит непосредственно к тому месту, на которое указывает этот оператор. Для этого в программе создаётся метка перехода: Единственное оправданное применение goto – это более быстрый выход из большого количества вложенных циклов или при использовании рекурсивных функций (хотя в большинстве случаев можно обойтись и без этого оператора).

Слайд 36





6. Массивы и строки
Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем
Одномерные массивы
Многомерные массивы с фиксированной длиной
Многомерные ступенчатые (зубчатые) массивы
Присваивание ссылок на массивы
Свойство массива Length
Свойство Length для многомерных и многомерных ступенчатых (зубчатых) массивов
Неявно типизированные массивы
Строки
Операции со строками
Примеры операций со строками
Массивы строк (на примере)
Конвертирование строк в числа и чисел в строки (на примере)
Операция «дословной» строки @
Описание слайда:
6. Массивы и строки Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем Одномерные массивы Многомерные массивы с фиксированной длиной Многомерные ступенчатые (зубчатые) массивы Присваивание ссылок на массивы Свойство массива Length Свойство Length для многомерных и многомерных ступенчатых (зубчатых) массивов Неявно типизированные массивы Строки Операции со строками Примеры операций со строками Массивы строк (на примере) Конвертирование строк в числа и чисел в строки (на примере) Операция «дословной» строки @

Слайд 37





Одномерные массивы
Общий формат (Отличается от такового в С++):
Тип[] имяМассива = new Тип[размерМассива];
Пример:
short[] seasons = new short[4]; // массив из 4 элементов типа short.
Или:
short[] seasons;
seasons = new short[4];
Или с инициализацией:
short[] seasons = new short[4] {1,2,3,4};
Или инициализация без указания размера:
short[] seasons = new short[] {1,2,3,4};
Или отдельная инициализация:
short[] seasons;
seasons = new short[] {1,2,3,4};
//не допускается
int hand[5];
hand[5] =  {32,21,88,13};
Console.Writeline(seasons[0]); //вывод на консоль 1 элемента
Console.Writeline(seasons[1]); //вывод на консоль 2 элемента
Console.Writeline(seasons); //без указания индекса в выводе будет указана информация об объекте, например, System.Int16[]
Границы массива в С# строго соблюдаются (отличие от С++). Если границы массивы не достигаются или же превышаются, то возникает ошибка при выполнении.
Описание слайда:
Одномерные массивы Общий формат (Отличается от такового в С++): Тип[] имяМассива = new Тип[размерМассива]; Пример: short[] seasons = new short[4]; // массив из 4 элементов типа short. Или: short[] seasons; seasons = new short[4]; Или с инициализацией: short[] seasons = new short[4] {1,2,3,4}; Или инициализация без указания размера: short[] seasons = new short[] {1,2,3,4}; Или отдельная инициализация: short[] seasons; seasons = new short[] {1,2,3,4}; //не допускается int hand[5]; hand[5] = {32,21,88,13}; Console.Writeline(seasons[0]); //вывод на консоль 1 элемента Console.Writeline(seasons[1]); //вывод на консоль 2 элемента Console.Writeline(seasons); //без указания индекса в выводе будет указана информация об объекте, например, System.Int16[] Границы массива в С# строго соблюдаются (отличие от С++). Если границы массивы не достигаются или же превышаются, то возникает ошибка при выполнении.

Слайд 38





Многомерные массивы с фиксированной длиной
Объявление двумерного массива:
int [,] mas = new int [4,5];
Описание слайда:
Многомерные массивы с фиксированной длиной Объявление двумерного массива: int [,] mas = new int [4,5];

Слайд 39





Многомерные ступенчатые (зубчатые) массивы
Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Такой тип массива в С++ отсутствует.
Объявление двумерного ступенчатого массива:
int [][] mas = new int [3][];
mas[0] = new int[4];
mas[1] = new int[3];
mas[2] = new int[5];
После выполнения этого фрагмента кода массив jagged выглядит так, как показано ниже.
Описание слайда:
Многомерные ступенчатые (зубчатые) массивы Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Такой тип массива в С++ отсутствует. Объявление двумерного ступенчатого массива: int [][] mas = new int [3][]; mas[0] = new int[4]; mas[1] = new int[3]; mas[2] = new int[5]; После выполнения этого фрагмента кода массив jagged выглядит так, как показано ниже.

Слайд 40





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

Слайд 41





Свойство Length
Свойство Length связано с каждым массивом и содержит число элементов, из которых может состоять массив. Ключевое слово - может - говорит о том, что на самом деле в массиве может быть задействовано меньшее количество элементов, но его «длина» всегда будет одинаковой.
Описание слайда:
Свойство Length Свойство Length связано с каждым массивом и содержит число элементов, из которых может состоять массив. Ключевое слово - может - говорит о том, что на самом деле в массиве может быть задействовано меньшее количество элементов, но его «длина» всегда будет одинаковой.

Слайд 42





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

Слайд 43





Неявно типизированные массивы
Как и в случае с неявно типизированной переменной, в C# допускается создавать неявно типизированные массивы при помощи ключевого слова var. Но в таком случае, как и с переменной, массив сразу же необходимо инициализировать значениями. Отсутствуют в С++.
//Одномерный массив
var vals = new[] {1,2,3,4,5};
//Двумерный массив
var vals = new[,] { {1,2}, {3,4}, {5,6} };
//Неявно типизированный ступенчатый массив
var vals = new[,] {
	{1,2,3,4},
	{9,8,7},
	{11,12,13,14,15}
 };
Описание слайда:
Неявно типизированные массивы Как и в случае с неявно типизированной переменной, в C# допускается создавать неявно типизированные массивы при помощи ключевого слова var. Но в таком случае, как и с переменной, массив сразу же необходимо инициализировать значениями. Отсутствуют в С++. //Одномерный массив var vals = new[] {1,2,3,4,5}; //Двумерный массив var vals = new[,] { {1,2}, {3,4}, {5,6} }; //Неявно типизированный ступенчатый массив var vals = new[,] { {1,2,3,4}, {9,8,7}, {11,12,13,14,15} };

Слайд 44





Строки
Строки в C# объявляются и инициализируются следующим образом.
1 вариант (прямая инициализация):
string str = “Строка в C#”;
2 вариант (инициализация через массив символов):
char[] charray = {‘t’, ‘e’, ‘s’, ‘t’};
string str = new string(charray);
3 вариант (инициализация пользователем):
string str;
str = Console.Read();

Вывод строки осуществляется так же, как и обычной переменной:
Console.Write(str);
Описание слайда:
Строки Строки в C# объявляются и инициализируются следующим образом. 1 вариант (прямая инициализация): string str = “Строка в C#”; 2 вариант (инициализация через массив символов): char[] charray = {‘t’, ‘e’, ‘s’, ‘t’}; string str = new string(charray); 3 вариант (инициализация пользователем): string str; str = Console.Read(); Вывод строки осуществляется так же, как и обычной переменной: Console.Write(str);

Слайд 45





Операции со строками
Описание слайда:
Операции со строками

Слайд 46





Операции со строками
Некоторые методы принимают параметр типа StringComparison. Это перечислимый тип, определяющий различные значения, которые определяют порядок сравнения символьных строк.
Как правило и за рядом исключений, для сравнения символьных строк с учетом культурной среды (т.е. языковых и региональных стандартов) применяется способ StringComparison.CurrentCulture. Если же нужно сравнить строки только на основании их символов, то лучше воспользоваться способом StringComparison.Ordinal, а для сравнения строк без учета регистра - одним из двух способов: StringComparison.CurrentCultureIgnoreCase или StringComparison.OrdinalIgnoreCase.
Описание слайда:
Операции со строками Некоторые методы принимают параметр типа StringComparison. Это перечислимый тип, определяющий различные значения, которые определяют порядок сравнения символьных строк. Как правило и за рядом исключений, для сравнения символьных строк с учетом культурной среды (т.е. языковых и региональных стандартов) применяется способ StringComparison.CurrentCulture. Если же нужно сравнить строки только на основании их символов, то лучше воспользоваться способом StringComparison.Ordinal, а для сравнения строк без учета регистра - одним из двух способов: StringComparison.CurrentCultureIgnoreCase или StringComparison.OrdinalIgnoreCase.

Слайд 47





Пример операций со строками
Описание слайда:
Пример операций со строками

Слайд 48





Массивы строк (на примере)
Описание слайда:
Массивы строк (на примере)

Слайд 49





Конвертирование строк в числа и чисел в строки (на примере)
Описание слайда:
Конвертирование строк в числа и чисел в строки (на примере)

Слайд 50





Операция «дословной» строки
Иногда удобно представлять строку дословно, особенно, когда строки содержат специальные символы. Для этого перед самой строкой (перед двойными кавычками) ставится символ «собачки» @.
Описание слайда:
Операция «дословной» строки Иногда удобно представлять строку дословно, особенно, когда строки содержат специальные символы. Для этого перед самой строкой (перед двойными кавычками) ставится символ «собачки» @.

Слайд 51





7. Функции
Иногда на протяжении всей программы приходится выполнять однотипные действия. При этом код этого действия может состоять как из одной строки, так и из нескольких. Во избежание дублирования кода и для повышения удобочитаемости кода используются функции.
1) Главная функция программы Main()
2) Общее представление о функциях
3) Передача параметров в функцию
4) Возврат значения функцией
5) Перегрузка функций
6) Перегрузка функций (пример)
7) Шаблонные функции
8) Что делать, если функция должна уметь изменять передаваемые ей параметры? Передача параметров по ссылке с модификатором ref
9) Что, если от функции требуется возврат более чем одного значения? Использование модификатора out
10) Что если количество аргументов, которые нужно передать функции, заранее не известно? Использование переменного числа аргументов. Модификатор params[]
11) Рекурсивные функции
Описание слайда:
7. Функции Иногда на протяжении всей программы приходится выполнять однотипные действия. При этом код этого действия может состоять как из одной строки, так и из нескольких. Во избежание дублирования кода и для повышения удобочитаемости кода используются функции. 1) Главная функция программы Main() 2) Общее представление о функциях 3) Передача параметров в функцию 4) Возврат значения функцией 5) Перегрузка функций 6) Перегрузка функций (пример) 7) Шаблонные функции 8) Что делать, если функция должна уметь изменять передаваемые ей параметры? Передача параметров по ссылке с модификатором ref 9) Что, если от функции требуется возврат более чем одного значения? Использование модификатора out 10) Что если количество аргументов, которые нужно передать функции, заранее не известно? Использование переменного числа аргументов. Модификатор params[] 11) Рекурсивные функции

Слайд 52





Главная функция программы Main()
Как вы уже заметили, любая программа на языке C# имеет функцию Main(). С этой функции программа начинает работать. Рассмотрим её подробнее:
class Program
{
	static void Main (string[] args)
	{
		//Код программы
	}
}
Ключевое слово static указывает на то, что данная функция является статичной, т.е. она принадлежит собственно типу (или классу, в котором она находится), а не конкретному объекту. В данном случае она принадлежит классу Program и может быть вызвана только так: Program.Main(), без создания экземпляра класса (о классах речь пойдёт позже). Да и, в принципе, это невозможно.
Ключевое слово void указывает на то, что данная функция не возвращает никакого значения по завершению программы. Хотя это и возможно (а в С++ такое даже более правильно).
Функция принимает массив параметров string[] args, что позволяет из консоли при запуске программы передавать параметры для их дальнейшего использования. Эта тема рассмотрена не будет, более того, можно использовать вариант без параметров:
static void Main ()
Обратите внимание, что функция Main() должна быть написана именно с заглавной буквы, а не main(), как это делается в некоторых других языках программирования.
Модификаторы доступа public / private и т.д. пока рассматриваться не будут, т.к. мы не выходим за рамки одного всего лишь класса и одного консольного выражения. По умолчанию, и класс Program, и функция Main() являются открытыми (public).
С пользовательскими функциями (методами) дело обстоит похожим образом, о чем будет рассказано далее.
Описание слайда:
Главная функция программы Main() Как вы уже заметили, любая программа на языке C# имеет функцию Main(). С этой функции программа начинает работать. Рассмотрим её подробнее: class Program { static void Main (string[] args) { //Код программы } } Ключевое слово static указывает на то, что данная функция является статичной, т.е. она принадлежит собственно типу (или классу, в котором она находится), а не конкретному объекту. В данном случае она принадлежит классу Program и может быть вызвана только так: Program.Main(), без создания экземпляра класса (о классах речь пойдёт позже). Да и, в принципе, это невозможно. Ключевое слово void указывает на то, что данная функция не возвращает никакого значения по завершению программы. Хотя это и возможно (а в С++ такое даже более правильно). Функция принимает массив параметров string[] args, что позволяет из консоли при запуске программы передавать параметры для их дальнейшего использования. Эта тема рассмотрена не будет, более того, можно использовать вариант без параметров: static void Main () Обратите внимание, что функция Main() должна быть написана именно с заглавной буквы, а не main(), как это делается в некоторых других языках программирования. Модификаторы доступа public / private и т.д. пока рассматриваться не будут, т.к. мы не выходим за рамки одного всего лишь класса и одного консольного выражения. По умолчанию, и класс Program, и функция Main() являются открытыми (public). С пользовательскими функциями (методами) дело обстоит похожим образом, о чем будет рассказано далее.

Слайд 53





Общее представление о функциях
Давайте представим, что внутри программы нам несколько раз необходимо выводить на консоль линию из звёздочек (*), для чего будет написан следующий код:
Console.WriteLine(“*****************************************************************”);
Или так:
for(int i = 0; i < 50; i++)
{
	Console.Write(“*”);
}
Console.WriteLine();
И этот код необходимо будет вставлять всегда, когда нам это будет нужно. Вместо этого можно написать функцию и вызвать её по имени, чтобы она занимала всего одну строку в коде:
printline();
Для этого предварительно необходимо будет описать данную функцию следующим образом:
static void printline()
{
	for (int i = 0; i < 50; i++)
	{
		Console.Write('*');
	}
	Console.WriteLine();
}
Обратите внимание, что данная функция обязательно должна быть статической static. Также в данном случае функция не принимает никаких параметров printline(), а также не возвращает никакого значения, или же, как говорят, возвращает void.
Дальше – больше.
Описание слайда:
Общее представление о функциях Давайте представим, что внутри программы нам несколько раз необходимо выводить на консоль линию из звёздочек (*), для чего будет написан следующий код: Console.WriteLine(“*****************************************************************”); Или так: for(int i = 0; i < 50; i++) { Console.Write(“*”); } Console.WriteLine(); И этот код необходимо будет вставлять всегда, когда нам это будет нужно. Вместо этого можно написать функцию и вызвать её по имени, чтобы она занимала всего одну строку в коде: printline(); Для этого предварительно необходимо будет описать данную функцию следующим образом: static void printline() { for (int i = 0; i < 50; i++) { Console.Write('*'); } Console.WriteLine(); } Обратите внимание, что данная функция обязательно должна быть статической static. Также в данном случае функция не принимает никаких параметров printline(), а также не возвращает никакого значения, или же, как говорят, возвращает void. Дальше – больше.

Слайд 54





Передача параметров в функцию
Теперь намного удобнее вызывать эту функцию, всего лишь используя одну строку.
printline();
А теперь давайте представим, что мы захотели слегка приукрасить наше приложение и выводить каждый раз разные символы в виде линии. Например, не звёздочку, а символ нижнего подчёркивания (_). Можно, конечно, написать ещё одну такую же функцию и назвать её как-нибудь в духе printline_(), а ту функцию переименовать в printline_star(), но с таким же успехом можно было бы и не писать функцию вовсе. Гораздо проще сделать так, чтобы все наши излишества обрабатывала всего лишь одна функция printline, но при этом бы она принимала в качестве параметра символ, используя который, она должна бы была вывести линию. Это можно сделать, добавив возможность передавать функции параметры, как показано ниже:
printline(‘_’); или printline(‘*’) и т.д.
Но для этого потребуется переписать функцию следующим образом:
static void printline(char ch)
{
	for (int i = 0; i < 50; i++)
	{
		Console.Write(ch);
	}
	Console.WriteLine();
}
Теперь наша функция выводит строку из любых переданных ей символов типа char в количестве 50 штук.
Дальше – больше.
Описание слайда:
Передача параметров в функцию Теперь намного удобнее вызывать эту функцию, всего лишь используя одну строку. printline(); А теперь давайте представим, что мы захотели слегка приукрасить наше приложение и выводить каждый раз разные символы в виде линии. Например, не звёздочку, а символ нижнего подчёркивания (_). Можно, конечно, написать ещё одну такую же функцию и назвать её как-нибудь в духе printline_(), а ту функцию переименовать в printline_star(), но с таким же успехом можно было бы и не писать функцию вовсе. Гораздо проще сделать так, чтобы все наши излишества обрабатывала всего лишь одна функция printline, но при этом бы она принимала в качестве параметра символ, используя который, она должна бы была вывести линию. Это можно сделать, добавив возможность передавать функции параметры, как показано ниже: printline(‘_’); или printline(‘*’) и т.д. Но для этого потребуется переписать функцию следующим образом: static void printline(char ch) { for (int i = 0; i < 50; i++) { Console.Write(ch); } Console.WriteLine(); } Теперь наша функция выводит строку из любых переданных ей символов типа char в количестве 50 штук. Дальше – больше.

Слайд 55





Передача параметров в функцию
А что если нам каждый раз будет необходимо выводить линию разной длины, т.е. не фиксировано 50, а то 20, то 100, а то и 1000. Для этого потребуется добавить второй параметр в нашу функцию, который будет указывать целое число как количество необходимых нам для вывода символов:
static void printline(char ch, int q)
{
	for (int i = 0; i < q; i++)
	{
		Console.Write(ch);
	}
	Console.WriteLine();
}
Теперь мы каждый раз должны дополнительно передавать в функцию ещё один параметр – требуемое количество выводимых символов:
printline(‘+’, 100); или printline(‘-’, 20);
Тем самым мы упростили себе работу и увеличили функциональность нашей программы.
Но на данном этапе мы задействовали только передачу параметров функции. Функция внутри что-то выполняет, но мы так и не использовали возможность функции возвращать какое-либо значение. Для этого лучше будем использовать другую по функционалу версию функции.
Описание слайда:
Передача параметров в функцию А что если нам каждый раз будет необходимо выводить линию разной длины, т.е. не фиксировано 50, а то 20, то 100, а то и 1000. Для этого потребуется добавить второй параметр в нашу функцию, который будет указывать целое число как количество необходимых нам для вывода символов: static void printline(char ch, int q) { for (int i = 0; i < q; i++) { Console.Write(ch); } Console.WriteLine(); } Теперь мы каждый раз должны дополнительно передавать в функцию ещё один параметр – требуемое количество выводимых символов: printline(‘+’, 100); или printline(‘-’, 20); Тем самым мы упростили себе работу и увеличили функциональность нашей программы. Но на данном этапе мы задействовали только передачу параметров функции. Функция внутри что-то выполняет, но мы так и не использовали возможность функции возвращать какое-либо значение. Для этого лучше будем использовать другую по функционалу версию функции.

Слайд 56





Возврат значения функцией
Теперь, когда мы знаем, как передавать значения в функцию, давайте реализуем функцию, которая находит квадрат двух чисел. Данная функция показательная, она отсутствует в стандартном классе Math языка C#, хотя имеется, например, в языке Pascal.
Итак, нам необходимо получить результат в таком виде:
int num = sqr(10);
где в переменную num будет заноситься квадрат передаваемого значения (в данном случае квадрат 10, т.е. 100). Для этого необходимо, чтобы функция принимала параметром целое число и возвращала квадрат целого числа:
static int printline(int num)
{
	return num * num;
}
Вместо возвращаемого void (т.е. ничего не возвращаемого) мы используем тип int, значение которого вычисляется в функции и возвращается с использованием оператора return. Обратите внимание, что параметр с именем num совпадает с именем переменной num, что не обязательно. В любом случае, это не вызовет конфликта имён, т.к. за пределами функции данный параметр «не виден», хотя мы и могли дать другое имя параметру, а также, например, не сразу выводить ответ, а использовать ещё одну локальную переменную внутри функции, хотя в данном случае это будет избыточным:
static int printline(int n)
{
	int num = n;
	return n * n;
}
Когда функция небольшая, такое использование не приветствуется, но если код функции достаточно громоздкий, то создание внутренних локальных переменных (с любым именем) облегчит восприятие кода.
Дальше – больше.
Описание слайда:
Возврат значения функцией Теперь, когда мы знаем, как передавать значения в функцию, давайте реализуем функцию, которая находит квадрат двух чисел. Данная функция показательная, она отсутствует в стандартном классе Math языка C#, хотя имеется, например, в языке Pascal. Итак, нам необходимо получить результат в таком виде: int num = sqr(10); где в переменную num будет заноситься квадрат передаваемого значения (в данном случае квадрат 10, т.е. 100). Для этого необходимо, чтобы функция принимала параметром целое число и возвращала квадрат целого числа: static int printline(int num) { return num * num; } Вместо возвращаемого void (т.е. ничего не возвращаемого) мы используем тип int, значение которого вычисляется в функции и возвращается с использованием оператора return. Обратите внимание, что параметр с именем num совпадает с именем переменной num, что не обязательно. В любом случае, это не вызовет конфликта имён, т.к. за пределами функции данный параметр «не виден», хотя мы и могли дать другое имя параметру, а также, например, не сразу выводить ответ, а использовать ещё одну локальную переменную внутри функции, хотя в данном случае это будет избыточным: static int printline(int n) { int num = n; return n * n; } Когда функция небольшая, такое использование не приветствуется, но если код функции достаточно громоздкий, то создание внутренних локальных переменных (с любым именем) облегчит восприятие кода. Дальше – больше.

Слайд 57





Перегрузка функций
Возврат квадрата целого числа – это хорошо. Но как быть, если нам нужен будет квадрат не только типа int, но и типа double, decimal и т.д.
Для этого выше написанная функция не подойдёт, т.к. она не универсальная, т.е. не шаблонная (разговор о шаблонных функциях пойдёт чуть позже).
Напишем ещё одну функцию, поменяв принимаемый и возвращаемый параметры на double. Это называется перегрузкой функции, поэтому две функции с одинаковым именем sqr вполне могут совместно существовать. Однако для этого необходимо помнить правила перегрузки функций:
Перегружаемая функция должна либо иметь разный ТИП ПРИНИМАЕМЫХ параметров, либо разное КОЛИЧЕСТВО принимаемых параметров. Одного лишь изменения выходного параметра недостаточно!
Ниже приведён код трёх функций, одна из которых вызовет проблему:
//Параметр типа int
static int sqr(int n)
{
       return n * n;
}
//Параметр типа double 
static double sqr(double n)
{
       return n * n;
}
А вот создание такой функции «рядом» с предыдущими вызовет проблему, т.к. только по возвращаемому параметру перегружать функции нельзя. 
static double sqr(int n)
{
       return n * n;
}
И это легко объяснить: как компилятор определит, какая функция должна быть использована при передаче параметров одного типа? Никак.
Описание слайда:
Перегрузка функций Возврат квадрата целого числа – это хорошо. Но как быть, если нам нужен будет квадрат не только типа int, но и типа double, decimal и т.д. Для этого выше написанная функция не подойдёт, т.к. она не универсальная, т.е. не шаблонная (разговор о шаблонных функциях пойдёт чуть позже). Напишем ещё одну функцию, поменяв принимаемый и возвращаемый параметры на double. Это называется перегрузкой функции, поэтому две функции с одинаковым именем sqr вполне могут совместно существовать. Однако для этого необходимо помнить правила перегрузки функций: Перегружаемая функция должна либо иметь разный ТИП ПРИНИМАЕМЫХ параметров, либо разное КОЛИЧЕСТВО принимаемых параметров. Одного лишь изменения выходного параметра недостаточно! Ниже приведён код трёх функций, одна из которых вызовет проблему: //Параметр типа int static int sqr(int n) { return n * n; } //Параметр типа double static double sqr(double n) { return n * n; } А вот создание такой функции «рядом» с предыдущими вызовет проблему, т.к. только по возвращаемому параметру перегружать функции нельзя. static double sqr(int n) { return n * n; } И это легко объяснить: как компилятор определит, какая функция должна быть использована при передаче параметров одного типа? Никак.

Слайд 58





Перегрузка функций (пример)
Ниже представлен пример программы, использующей перегрузку функций:
Описание слайда:
Перегрузка функций (пример) Ниже представлен пример программы, использующей перегрузку функций:

Слайд 59





Шаблонные функции
Всё бы неплохо, но было бы гораздо лучше, чтобы существовала всего одна функция на все случаи жизни. Конечно, так бывает не всегда, но это возможно. И для этого существуют шаблонные функции. Справа представлен пример рабочей программы, в которой одна шаблонная функция возводит в квадрат числа разного типа. 
Дело в том, что до запуска программы компилятору неизвестно, переменная какого типа будет передана в функцию. Поэтому условно тип указывается как «Т» (имя «псевдотипа» может быть любым), а также внутри блока функции используется специальная переменная типа dynamic, т.к. во время выполнения программы происходит динамическое присваивание разных типов данных.
Примечание: Шаблонные функции работают медленнее обычных перегруженных функций, поэтому использование их оправдано только в действительно важных случаях.
Описание слайда:
Шаблонные функции Всё бы неплохо, но было бы гораздо лучше, чтобы существовала всего одна функция на все случаи жизни. Конечно, так бывает не всегда, но это возможно. И для этого существуют шаблонные функции. Справа представлен пример рабочей программы, в которой одна шаблонная функция возводит в квадрат числа разного типа. Дело в том, что до запуска программы компилятору неизвестно, переменная какого типа будет передана в функцию. Поэтому условно тип указывается как «Т» (имя «псевдотипа» может быть любым), а также внутри блока функции используется специальная переменная типа dynamic, т.к. во время выполнения программы происходит динамическое присваивание разных типов данных. Примечание: Шаблонные функции работают медленнее обычных перегруженных функций, поэтому использование их оправдано только в действительно важных случаях.

Слайд 60





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

Слайд 61





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

Слайд 62





Использование переменного числа аргументов. Модификатор params[]
Иногда в ходе выполнения программы количество аргументов может быть различно (1,2,3 и т.д.). Для такого случая используется модификатор params, указывается тип аргумента как массив с конкретным именем. Обращение же к каждому из передаваемых параметров осуществляется так же, как и к массиву, т.е. по индексу.
Необходимо обратить внимание, что все аргументы обязательно должны иметь тип массива, указанного в функции;
Вместе с переменным кол-вом параметров можно использовать обычные параметры, но массив с модификатором params всегда должен быть указан последним в списке параметров данного метода:
public void ShowArgs(string msg, params int[] nums) {…}
Описание слайда:
Использование переменного числа аргументов. Модификатор params[] Иногда в ходе выполнения программы количество аргументов может быть различно (1,2,3 и т.д.). Для такого случая используется модификатор params, указывается тип аргумента как массив с конкретным именем. Обращение же к каждому из передаваемых параметров осуществляется так же, как и к массиву, т.е. по индексу. Необходимо обратить внимание, что все аргументы обязательно должны иметь тип массива, указанного в функции; Вместе с переменным кол-вом параметров можно использовать обычные параметры, но массив с модификатором params всегда должен быть указан последним в списке параметров данного метода: public void ShowArgs(string msg, params int[] nums) {…}

Слайд 63





Рекурсивные функции
Рекурсивными функциями называются функции, вызывающими сами себя в процессе выполнения блока кода функции. Наглядным примером использования рекурсии может служить программа, находящая факториал числа. Факториалом числа n является произведение всех целых чисел от 1 до числа n включительно. Записывается это так:
6! = 1 · 2 · 3 · 4 · 5 · 6 = 720
Справа представлена рекурсивная функция, находящая максимально возможный факториал числа (т.е. максимально возможное представление числа типа decimal). Такое число = 27.
Описание слайда:
Рекурсивные функции Рекурсивными функциями называются функции, вызывающими сами себя в процессе выполнения блока кода функции. Наглядным примером использования рекурсии может служить программа, находящая факториал числа. Факториалом числа n является произведение всех целых чисел от 1 до числа n включительно. Записывается это так: 6! = 1 · 2 · 3 · 4 · 5 · 6 = 720 Справа представлена рекурсивная функция, находящая максимально возможный факториал числа (т.е. максимально возможное представление числа типа decimal). Такое число = 27.

Слайд 64





8. Работа с папками и файлами
(+ обработка исключений)
Обработка исключений. Блок try-catch-finally
Директории (папки)
— Проверка на существование, получение списка подпапок и создание папок;
— Переименование и удаление папок.
Файлы
— Проверка на существование, переименование, удаление файла, а также получение списка файлов в папке (на примере);
— Чтение из файла в консоль;
— Запись в файл и удаление файла;
Решение олимпиадного задания «Недопалиндромы» с использованием чтения и записи в файл.
Описание слайда:
8. Работа с папками и файлами (+ обработка исключений) Обработка исключений. Блок try-catch-finally Директории (папки) — Проверка на существование, получение списка подпапок и создание папок; — Переименование и удаление папок. Файлы — Проверка на существование, переименование, удаление файла, а также получение списка файлов в папке (на примере); — Чтение из файла в консоль; — Запись в файл и удаление файла; Решение олимпиадного задания «Недопалиндромы» с использованием чтения и записи в файл.

Слайд 65





Обработка исключений. Блок try-catch-finally
Очень часто приходится выполнять такие действия в коде программы, которые могут выполниться, а могут и завершить программу с ошибкой.
Чтобы ошибка не вызвала аварийное завершение программы, используется конструкция try-catch, которая дополнительно может быть оснащена блоком finally.
При этом, если имеется блок try, то обязательно должен существовать хотя бы один блок catch (или несколько блоков catch, если необходимо отлавливать исключения (ошибки) разных типов).
Блок finally необходимо включать в код программы в том случае, если, независимо от того, было ли перехвачено исключение в блоке try, требуется выполнение определенных действий по завершении кода из блока try.
Примеры использования блоков try-catch-finally:
— При создании / удаления / переименования директории (папки);
— Чтение / удаление / запись в файл;
— Получение информации из сети Интернет и т.д.
Слева приведён код программы, использующий простую конструкцию try-catch при удалении файла. Подробнее речь о работе с файлами пойдёт далее.
Блок try предпринимает попытку удаления каталога MyDirectory на диске C, но каталог преднамеренно не создан, поэтому перехвачивается первое исключение. Если не нужно конкретизировать причину «неудаления» файла, можно использовать конструкцию catch(Exception ex) с возможностью просмотра информации об ошибке или конструкцию catch без параметров и, соответственно, без возможности просмотра ошибки. В приведённом коде последняя конструкция catch является недостижимой, т.к. предыдущая конструкция и так перехватывает все исключения.
Конструкции catch необходимо располагать от более специфичных в отношении ошибок (перехватывающим конкретные исключения) к менее специфичным. Но, как минимум, ОДНА конструкция catch обязательно должна присутствовать.
Описание слайда:
Обработка исключений. Блок try-catch-finally Очень часто приходится выполнять такие действия в коде программы, которые могут выполниться, а могут и завершить программу с ошибкой. Чтобы ошибка не вызвала аварийное завершение программы, используется конструкция try-catch, которая дополнительно может быть оснащена блоком finally. При этом, если имеется блок try, то обязательно должен существовать хотя бы один блок catch (или несколько блоков catch, если необходимо отлавливать исключения (ошибки) разных типов). Блок finally необходимо включать в код программы в том случае, если, независимо от того, было ли перехвачено исключение в блоке try, требуется выполнение определенных действий по завершении кода из блока try. Примеры использования блоков try-catch-finally: — При создании / удаления / переименования директории (папки); — Чтение / удаление / запись в файл; — Получение информации из сети Интернет и т.д. Слева приведён код программы, использующий простую конструкцию try-catch при удалении файла. Подробнее речь о работе с файлами пойдёт далее. Блок try предпринимает попытку удаления каталога MyDirectory на диске C, но каталог преднамеренно не создан, поэтому перехвачивается первое исключение. Если не нужно конкретизировать причину «неудаления» файла, можно использовать конструкцию catch(Exception ex) с возможностью просмотра информации об ошибке или конструкцию catch без параметров и, соответственно, без возможности просмотра ошибки. В приведённом коде последняя конструкция catch является недостижимой, т.к. предыдущая конструкция и так перехватывает все исключения. Конструкции catch необходимо располагать от более специфичных в отношении ошибок (перехватывающим конкретные исключения) к менее специфичным. Но, как минимум, ОДНА конструкция catch обязательно должна присутствовать.

Слайд 66





Директории (папки)
Для работы с папками необходимо подключить пространство имён input-output (IO):
using System.IO;
Статический класс Directory имеет множество методов для работы с каталогами.
— Для проверки существования папки используется метод Exists(), который принимает параметром либо полный путь к папке, либо относительный (когда папка расположена в директории с исполняемым файлом программы .exe) и возвращает true, если папка существует, и false, если папка отсутствует, тем самым позволяя использовать метод внутри блока if для проверки.
— Для получения списка подпапок в определённой папке используется метод GetDitrctories(), принимающий параметром также путь к целевой папке, и возвращающий массив типа string [], позволяя получить все ссылки на подпапки в цикле foreach.
— Для создания папки используется метод CreateDirectory(), принимающий параметром путь к папке, в которой нужно создать подпапку. Однако создание подпапки может вызвать ошибку, и программа завершится аварийно, если системой или пользователем указан атрибут «Только чтение», именно поэтому в реальных программах необходимо использовать блоки try-catch, внутрь которых и помещать код с созданием папки.
Описание слайда:
Директории (папки) Для работы с папками необходимо подключить пространство имён input-output (IO): using System.IO; Статический класс Directory имеет множество методов для работы с каталогами. — Для проверки существования папки используется метод Exists(), который принимает параметром либо полный путь к папке, либо относительный (когда папка расположена в директории с исполняемым файлом программы .exe) и возвращает true, если папка существует, и false, если папка отсутствует, тем самым позволяя использовать метод внутри блока if для проверки. — Для получения списка подпапок в определённой папке используется метод GetDitrctories(), принимающий параметром также путь к целевой папке, и возвращающий массив типа string [], позволяя получить все ссылки на подпапки в цикле foreach. — Для создания папки используется метод CreateDirectory(), принимающий параметром путь к папке, в которой нужно создать подпапку. Однако создание подпапки может вызвать ошибку, и программа завершится аварийно, если системой или пользователем указан атрибут «Только чтение», именно поэтому в реальных программах необходимо использовать блоки try-catch, внутрь которых и помещать код с созданием папки.

Слайд 67





Проверка на существование папок, получение списка подпапок и создание папок
Слева приведён пример программы, в которой проверяется наличие каталога. Если каталог отсутствует, то он создаётся. 
Конструкции try-catch-finally не используются, т.к. работают намного медленнее, чем проверка условным оператором if. Хотя создание каталога в реальном коде должно быть в блоке Try, чтобы программа не закончилась аварийно в случае неуспешного создания папки.
Описание слайда:
Проверка на существование папок, получение списка подпапок и создание папок Слева приведён пример программы, в которой проверяется наличие каталога. Если каталог отсутствует, то он создаётся. Конструкции try-catch-finally не используются, т.к. работают намного медленнее, чем проверка условным оператором if. Хотя создание каталога в реальном коде должно быть в блоке Try, чтобы программа не закончилась аварийно в случае неуспешного создания папки.

Слайд 68





Переименование и удаление папок
Для переименования папок используется метод Move(), а для удаления — метод Delete().
В приведённом слева коде существующая папка «MyDirectory» сначала переименовывается в «Моя папка», а затем удаляется.
Первым параметром в методе Move() указывается путь к файлу, который нужно переименовать, а вторым — путь с именем, которое необходимо применить к папке. При этом не стоит беспокоиться о внутри лежащих файлах, т.к. с ними (в конечном счёте) предприниматься какие-либо действия не будут.
Метод Delete() принимает всего лишь один параметр – это путь к файлу. 
ВНИМАНИЕ: папка не будет удалена, если внутри имеются подпапки или файлы! Для удаления подпапок или фалов внутри папки необходимо использовать другой алгоритм, который удаляет сначала все файлы в подпапках и в самой папке, а потом уже пустые подпапки и саму папку.
Описание слайда:
Переименование и удаление папок Для переименования папок используется метод Move(), а для удаления — метод Delete(). В приведённом слева коде существующая папка «MyDirectory» сначала переименовывается в «Моя папка», а затем удаляется. Первым параметром в методе Move() указывается путь к файлу, который нужно переименовать, а вторым — путь с именем, которое необходимо применить к папке. При этом не стоит беспокоиться о внутри лежащих файлах, т.к. с ними (в конечном счёте) предприниматься какие-либо действия не будут. Метод Delete() принимает всего лишь один параметр – это путь к файлу. ВНИМАНИЕ: папка не будет удалена, если внутри имеются подпапки или файлы! Для удаления подпапок или фалов внутри папки необходимо использовать другой алгоритм, который удаляет сначала все файлы в подпапках и в самой папке, а потом уже пустые подпапки и саму папку.

Слайд 69





Файлы
Для работы с файлами необходимо также подключить пространство имён input-output (IO):
using System.IO;
Статический класс File также, как и класс Directory, имеет множество методов для работы с файлами.
— Для проверки существования файла используется метод Exists(), который принимает параметром либо полный путь к файлу (с указанием РАСШИРЕНИЯ файла), либо относительный (когда файл расположен в директории с исполняемым файлом программы .exe) и возвращает true, если файл существует, и false, если файл отсутствует, тем самым позволяя использовать метод внутри блока if для проверки.
— Для получения списка файлов в определённой папке используется метод GetFiles(), принимающий параметром также путь к целевой папке, и возвращающий массив типа string [], позволяя получить все ссылки на файлы в цикле foreach.
— Для создания файла используется метод Create(), принимающий параметром путь к папке с указанием файла и расширения.
Описание слайда:
Файлы Для работы с файлами необходимо также подключить пространство имён input-output (IO): using System.IO; Статический класс File также, как и класс Directory, имеет множество методов для работы с файлами. — Для проверки существования файла используется метод Exists(), который принимает параметром либо полный путь к файлу (с указанием РАСШИРЕНИЯ файла), либо относительный (когда файл расположен в директории с исполняемым файлом программы .exe) и возвращает true, если файл существует, и false, если файл отсутствует, тем самым позволяя использовать метод внутри блока if для проверки. — Для получения списка файлов в определённой папке используется метод GetFiles(), принимающий параметром также путь к целевой папке, и возвращающий массив типа string [], позволяя получить все ссылки на файлы в цикле foreach. — Для создания файла используется метод Create(), принимающий параметром путь к папке с указанием файла и расширения.

Слайд 70





Проверка на существование, переименование, удаление файла, а также получение списка файлов в папке (на примере)
Описание слайда:
Проверка на существование, переименование, удаление файла, а также получение списка файлов в папке (на примере)

Слайд 71





Чтение из файла в консоль
В данном случае для чтения данных из файла используется LINQ (Язык интегрированных запросов). Поэтому, помимо добавления пространства имён System.IO, необходимо подключить System.Linq;
Статический класс File вызывает метод ReadAllText(), которому в параметрах передаётся путь к файлу (в данном случае в папке с программой), и который возвращает строку, выглядящую в случае расположения данных с новой строки примерно в таком виде:
5\n13\n43\n24\n15\n100
Отсюда видно, что разделителем каждого числа (строки) является символ переноса на новую строку (\n), поэтому следующий метод Split(), который имеет любая строка типа string, разделяет строку на массив строк  string[]. Для этого в качестве разделителя в параметре метода указан символ переноса на новую строку: Split(‘\n’). Если бы данные необходимо было разделить, когда они отделены пробелом (или любым другим символом), то вместо символа переноса строки нужно бы было указать этот символ.
Следующий метод Select() является примером Linq-запросов. Данный метод сначала (в виде лямбда-выражения) получает некий объект n, а возвращает (=>) этот объект, приведённым к типу double методом double.Parse(). В конечном итоге из каждого этого объекта создаётся массив типа double с использованием метода ToArray(). В результате конечный массив double [] arr получает все значения текстового документа в иде значений double.
Продолжение – на следующем слайде.
Описание слайда:
Чтение из файла в консоль В данном случае для чтения данных из файла используется LINQ (Язык интегрированных запросов). Поэтому, помимо добавления пространства имён System.IO, необходимо подключить System.Linq; Статический класс File вызывает метод ReadAllText(), которому в параметрах передаётся путь к файлу (в данном случае в папке с программой), и который возвращает строку, выглядящую в случае расположения данных с новой строки примерно в таком виде: 5\n13\n43\n24\n15\n100 Отсюда видно, что разделителем каждого числа (строки) является символ переноса на новую строку (\n), поэтому следующий метод Split(), который имеет любая строка типа string, разделяет строку на массив строк string[]. Для этого в качестве разделителя в параметре метода указан символ переноса на новую строку: Split(‘\n’). Если бы данные необходимо было разделить, когда они отделены пробелом (или любым другим символом), то вместо символа переноса строки нужно бы было указать этот символ. Следующий метод Select() является примером Linq-запросов. Данный метод сначала (в виде лямбда-выражения) получает некий объект n, а возвращает (=>) этот объект, приведённым к типу double методом double.Parse(). В конечном итоге из каждого этого объекта создаётся массив типа double с использованием метода ToArray(). В результате конечный массив double [] arr получает все значения текстового документа в иде значений double. Продолжение – на следующем слайде.

Слайд 72





Чтение из файла в консоль
Если в первой строке текстового файла (не обязательно с расширением *.txt) указано количество последующих чисел, то сначала необходимо прочитать эту строку, а потом с использованием её значения установить длину массива для последующего считывания данных.
Во втором случае используется оператор using, параметром которому передаётся выражение:
StreamReader str = new StreamReader(“input.txt”)
Таким образом, весь дальнейший код в блоке using будет выполняться, используя созданную потоковую «переменную» str, «привязанную» к файлу с именем «input.txt». При этом нет необходимости закрывать поток, как в Pascal, типа Close(str), потому что объект автоматически разрушается после завершения блока кода.
Что происходит в блоке кода:
— считывается первая строка и переводится значение в тип int;
— устанавливается длина ранее созданного экземпляра массива arr2;
— с использованием цикла for заполняется массив.
Дальнейшие действия с использованием оператора foreach выполнены для вывода на консоль.
Обратите внимание, что метод ReadLine() используется не только с консолью, а вообще для получения данных из любого потока. В нашем случае из «потока» str.
Описание слайда:
Чтение из файла в консоль Если в первой строке текстового файла (не обязательно с расширением *.txt) указано количество последующих чисел, то сначала необходимо прочитать эту строку, а потом с использованием её значения установить длину массива для последующего считывания данных. Во втором случае используется оператор using, параметром которому передаётся выражение: StreamReader str = new StreamReader(“input.txt”) Таким образом, весь дальнейший код в блоке using будет выполняться, используя созданную потоковую «переменную» str, «привязанную» к файлу с именем «input.txt». При этом нет необходимости закрывать поток, как в Pascal, типа Close(str), потому что объект автоматически разрушается после завершения блока кода. Что происходит в блоке кода: — считывается первая строка и переводится значение в тип int; — устанавливается длина ранее созданного экземпляра массива arr2; — с использованием цикла for заполняется массив. Дальнейшие действия с использованием оператора foreach выполнены для вывода на консоль. Обратите внимание, что метод ReadLine() используется не только с консолью, а вообще для получения данных из любого потока. В нашем случае из «потока» str.

Слайд 73





Запись в файл и удаление файла
Для записи в файл необходимо подключить пространство имён System.IO;
Для записи отдельной строки можно использовать метод WriteAllText() статического класса File.
Для записи всего массива класс File не подходит, т.к. метод WriteAllText() выполняет разовую запись в файл, после чего файл закрывается. Поэтому, если бы использовался цикл foreach, то в конечном файле осталось бы только последняя строка со значением 100.
Для записи массива данных лучше, как и в случае с чтением файлов (StreamReader), использовать потоковый класс StreamWriter, который можно создать прямо внутри параметров using, по окончанию блока кода которого объект sw будет автоматически разрушен (освобождён из памяти, а поток закрыт).
В первом случае используется метод WriteLine(), который записывает каждое значение массива с новой строки.
Во втором случае используется метод Write(), который пишет в файл одной строкой. Искусственно для записи каждого значения через пробел мы привели значение типа double к типу string (d.ToString()) и дополнительно добавили после каждого числа пробел (+ ‘ ‘). Вместо пробела можно использовать любой символ.
Для удаления файла можно использовать статический класс File и его метод Delete(), принимающий в качестве параметра путь к файлу в виде строки. Данное действие аналогично действию по удалению папки (каталога), поэтому более подробно здесь не рассматривается.
Описание слайда:
Запись в файл и удаление файла Для записи в файл необходимо подключить пространство имён System.IO; Для записи отдельной строки можно использовать метод WriteAllText() статического класса File. Для записи всего массива класс File не подходит, т.к. метод WriteAllText() выполняет разовую запись в файл, после чего файл закрывается. Поэтому, если бы использовался цикл foreach, то в конечном файле осталось бы только последняя строка со значением 100. Для записи массива данных лучше, как и в случае с чтением файлов (StreamReader), использовать потоковый класс StreamWriter, который можно создать прямо внутри параметров using, по окончанию блока кода которого объект sw будет автоматически разрушен (освобождён из памяти, а поток закрыт). В первом случае используется метод WriteLine(), который записывает каждое значение массива с новой строки. Во втором случае используется метод Write(), который пишет в файл одной строкой. Искусственно для записи каждого значения через пробел мы привели значение типа double к типу string (d.ToString()) и дополнительно добавили после каждого числа пробел (+ ‘ ‘). Вместо пробела можно использовать любой символ. Для удаления файла можно использовать статический класс File и его метод Delete(), принимающий в качестве параметра путь к файлу в виде строки. Данное действие аналогично действию по удалению папки (каталога), поэтому более подробно здесь не рассматривается.

Слайд 74





Решение олимпиадного задания «Недопалиндромы» с использованием чтения и записи в файл
(условие задания)
Описание слайда:
Решение олимпиадного задания «Недопалиндромы» с использованием чтения и записи в файл (условие задания)

Слайд 75





Решение олимпиадного задания «Недопалиндромы» с использованием чтения и записи в файл
Описание слайда:
Решение олимпиадного задания «Недопалиндромы» с использованием чтения и записи в файл



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