1_Презентация Базовые понятия C# (1)

Содержание

Слайд 2

Класс содержит данные, задающие свойства объектов класса, и функции (методы), определяющие их

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

C# — объектно-ориентированный язык программирования от компании Microsoft для работы на платформе .NET (Windows Forms, WPF, ASP.NET, Xamarin, Unity). 

ЯЗЫК ПРОГРАММИРОВАНИЯ C#

Фреймворк .NET представляет мощную платформу для создания приложений. Среди достоинств:
Поддержка нескольких языков.
Кроссплатформенность.
Мощная библиотека классов.
Разнообразие технологий.

Слайд 3

ДЛЯ СОЗДАНИЯ ПРОЕКТА СЛЕДУЕТ ПОСЛЕ ЗАПУСКА VISUAL STUDIO.NET В ГЛАВНОМ МЕНЮ ВЫБРАТЬ

ДЛЯ СОЗДАНИЯ ПРОЕКТА СЛЕДУЕТ ПОСЛЕ ЗАПУСКА VISUAL STUDIO.NET В ГЛАВНОМ МЕНЮ ВЫБРАТЬ КОМАНДУ FILE? NEW PROJECT….
КОМАНДУ  FILE?   NEW   PROJECT….

Слайд 4

F5 

После запуска приложения его можете найти на жестком диске в папке проекта

F5 После запуска приложения его можете найти на жестком диске в папке
в каталоге bin\Debug\net6.0. Оно будет называться по имени проекта и иметь расширение exe. Этот файл можно будет запускать без Visual Studio, а также переносить его на другие компьютеры, где установлен .NET 6.

Слайд 5

СОСТАВ ЯЗЫКА

Символы:
буквы: A-Z, a-z, _, буквы нац. алфавитов
цифры: 0-9, A-F
спец. символы: +,

СОСТАВ ЯЗЫКА Символы: буквы: A-Z, a-z, _, буквы нац. алфавитов цифры: 0-9,
*, {, …
пробельные символы

Лексемы:
константы 2 0.11 “Вася”
имена Vasia a _11
ключевые слова double do if
знаки операций + - =
разделители ; [ ] ,

Выражения
выражение - правило вычисления значения: a + b
Операторы
исполняемые: c = a + b;
описания: double a, b;

Слайд 6

ИМЕНА (ИДЕНТИФИКАТОРЫ)

имя должно начинаться с буквы или _;
имя должно содержать только буквы,

ИМЕНА (ИДЕНТИФИКАТОРЫ) имя должно начинаться с буквы или _; имя должно содержать
знак подчеркивания и цифры;
прописные и строчные буквы различаются;
длина имени практически не ограничена.
имена не должны совпадать с ключевыми словами, однако допускается: @if, @float…
в именах можно использовать управляющие последовательности Unicode

Примеры правильных имен:
Vasia, Вася, _13, \u00F2\u01DD, @while.
Примеры неправильных имен:
2late, Big gig, Б#г

Слайд 7

НОТАЦИИ

Понятные и согласованные между собой имена — основа хорошего стиля. Существует несколько

НОТАЦИИ Понятные и согласованные между собой имена — основа хорошего стиля. Существует
нотаций — соглашений о правилах создания имен.
В C# для именования различных видов программных объектов чаще всего используются две нотации:
Нотация Паскаля - каждое слово начинается с прописной буквы:
MaxLength, MyFuzzyShooshpanchik
Camel notation - с прописной буквы начинается каждое слово, составляющее идентификатор, кроме первого:
maxLength, myFuzzyShooshpanchik

Слайд 8

ПЕРЕМЕННЫЕ

Переменная — это именованная область памяти, в которой хранятся данные определенного типа.

ПЕРЕМЕННЫЕ Переменная — это именованная область памяти, в которой хранятся данные определенного

Все переменные, используемые в программе, должны быть описаны.
Для каждой переменной задается ее имя и тип:
int number; float x, y; char option;
Тип переменной выбирается исходя из диапазона и требуемой точности представления данных.

Неявная типизация

var hello = "Hell to World";
var c = 20;

int a; // этот код работает
a = 20;
var c; // этот код не работает
c= 20;

Слайд 9

ТИПЫ ДАННЫХ

Тип данных определяет:
внутреннее представление данных => множество их возможных значений
допустимые действия

ТИПЫ ДАННЫХ Тип данных определяет: внутреннее представление данных => множество их возможных
над данными => операции и функции

Слайд 10

ХРАНЕНИЕ В ПАМЯТИ ВЕЛИЧИН ЗНАЧИМОГО И ССЫЛОЧНОГО ТИПА

Хранятся в стеке.
Стек-это область памяти,

ХРАНЕНИЕ В ПАМЯТИ ВЕЛИЧИН ЗНАЧИМОГО И ССЫЛОЧНОГО ТИПА Хранятся в стеке. Стек-это
которая активно используется процессором.

Хранятся в управляемой куче (области оперативной памяти).

Слайд 11

ЗНАЧИМЫЕ ТИПЫ

ЗНАЧИМЫЕ ТИПЫ

Слайд 12

ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ

При объявлении можно присвоить переменной начальное значение (инициализировать).
int number =

ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ При объявлении можно присвоить переменной начальное значение (инициализировать). int number
100; float x = 0.02; char option = ’ю’;
При инициализации можно использовать не только константы, но и выражения — главное, чтобы на момент описания они были вычислимыми, например:
int b = 1, a = 100;
int x = b * a + 25;
Инициализация локальных переменных возлагается на программиста. Рекомендуется всегда инициализировать переменные при описании.

int a, b, c;
a = b = c = 34;

Слайд 13

ЛИТЕРАЛЫ

Литералы - это явно заданные значения в коде программы — константы определенного

ЛИТЕРАЛЫ Литералы - это явно заданные значения в коде программы — константы
типа. Литералы можно передавать переменным в качестве значения.

Слайд 14

ОБЛАСТЬ ДЕЙСТВИЯ И ВРЕМЯ ЖИЗНИ ПЕРЕМЕННЫХ

Переменные описываются внутри какого-л. блока (класса, метода

ОБЛАСТЬ ДЕЙСТВИЯ И ВРЕМЯ ЖИЗНИ ПЕРЕМЕННЫХ Переменные описываются внутри какого-л. блока (класса,
или блока внутри метода)
Блок — это код, заключенный в фигурные скобки. Основное назначение блока — группировка операторов.
Переменные, описанные непосредственно внутри класса, называются полями класса.
Переменные, описанные внутри метода класса, называются локальными переменными.
Область действия переменной - область программы, где можно использовать переменную.
Область действия переменной начинается в точке ее описания и длится до конца блока, внутри которого она описана.
Время жизни: переменные создаются при входе в их область действия (блок) и уничтожаются при выходе.

Слайд 15

Вместо значений констант можно (и нужно!) использовать в программе их имена.
Это

Вместо значений констант можно (и нужно!) использовать в программе их имена. Это
облегчает читабельность программы и внесение в нее изменений:
const float weight = 61.5;
const int n = 10;
const float g = 9.8;

ИМЕНОВАННЫЕ КОНСТАНТЫ

Слайд 16

ВЫРАЖЕНИЯ

Выражение — правило вычисления значения.
В выражении участвуют операнды, объединенные знаками операций.

ВЫРАЖЕНИЯ Выражение — правило вычисления значения. В выражении участвуют операнды, объединенные знаками

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

t + Math.Sin(x)/2 * x
результат имеет вещественный тип
a <= b + 2
результат имеет логический тип
x > 0 && y < 0
результат имеет логический тип

Слайд 17

Первичные (), [], ++, --, new, …
Унарные ~, !, ++, --, -,

Первичные (), [], ++, --, new, … Унарные ~, !, ++, --,

Типа умножения (мультипликативные) *, /, %
Типа сложения (аддитивные) +, -
Сдвига <<, >>
Отношения и проверки типа <, >, is, …
Проверки на равенство ==, !=
Поразрядные логические &, ^, |
Условные логические &&, ||
Условная  ?:
Присваивания            =, *=, /=,…

ПРИОРИТЕТЫ ОПЕРАЦИЙ C#

Слайд 18

ТИП РЕЗУЛЬТАТА ВЫРАЖЕНИЯ

Если операнды, входящие в выражение, одного типа, и операция для

ТИП РЕЗУЛЬТАТА ВЫРАЖЕНИЯ Если операнды, входящие в выражение, одного типа, и операция
этого типа определена, то результат выражения будет иметь тот же тип.
Если операнды разного типа и (или) операция для этого типа не определена, перед вычислениями автоматически выполняется преобразование типа по правилам, обеспечивающим приведение более коротких типов к более длинным для сохранения значимости и точности.
Автоматическое (неявное) преобразование возможно не всегда, а только если при этом не может случиться потеря значимости.
Если неявного преобразования из одного типа в другой не существует, программист может задать явное преобразование типа с помощью операции:
(тип)x.
Convert.ToInt16(x)
Int16.Parse(строковая_переменная);

Слайд 19

НЕЯВНЫЕ АРИФМЕТИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ ТИПОВ В C#

НЕЯВНЫЕ АРИФМЕТИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ ТИПОВ В C#

Слайд 20

ВЫВОД СООБЩЕНИЯ НА ЭКРАН

Console.Write(“текст сообщения") – вывод сообщения на экран.

Console.WriteLine(“текст сообщения") –

ВЫВОД СООБЩЕНИЯ НА ЭКРАН Console.Write(“текст сообщения") – вывод сообщения на экран. Console.WriteLine(“текст
вывод сообщения на экран и перенос каретки на следующую строку.

Console.WriteLine(“текст сообщения”+ x ) – вывод на экран сообщения, заключенного в кавычки и значения переменной x и перенос каретки на следующую строку.

Console.WriteLine(“текст сообщения {0} {1}”, x,y ) – вывод на экран сообщения, заключенного в кавычки и значения переменной x и y перенос курсора на следующую строку.

using static System.Console;
int x = 6;
double y = 0.5;
Console.WriteLine("... идет работа консоли");
WriteLine("значение переменой х= " + x + ", значение переменной у=" + y);
WriteLine("значение переменой х= {0}, значение переменной у={1}", x, y);
WriteLine($"значение переменой х= {x}, значение переменной у={y}");
WriteLine($"Сумма х= {x} и у={y} равна {x+y}");

Console.WriteLine($“текст сообщения {x} {y}”) – вывод на экран сообщения, заключенного в кавычки и значения переменной x и y перенос курсора на следующую строку.

Слайд 21

Существуют две формы рассматриваемых операций:  префиксная и постфиксная.
Если операторы записаны после переменной (х++

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

ИНКРЕМЕНТ (++) И ДЕКРЕМЕНТ (--)

Слайд 22

ИНКРЕМЕНТ И ДЕКРЕМЕНТ

using System;
namespace CA1
{ class C1
{ static void Main()

ИНКРЕМЕНТ И ДЕКРЕМЕНТ using System; namespace CA1 { class C1 { static
{ int x = 3, y = 3;
Console.Write( "Значение префиксного выражения: " );
Console.WriteLine( ++x );
Console.Write( "Значение х после приращения: " );
Console.WriteLine( x );
Console.Write( "Значение постфиксного выражения: " );
Console.WriteLine( y++ );
Console.Write( "Значение у после приращения: " );
Console.WriteLine( y );
}}}

Результат работы программы:
Значение префиксного выражения: 4
Значение х после приращения: 4
Значение постфиксного выражения: 3
Значение у после приращения: 4

using System;
namespace ConsoleApplication1
{ class Program
{ static void Main(string[] args)
{
int x=1,y=1;
Console.WriteLine("x={0}, y= {1}", x, x * y + (x++)+x*y);
x = 1; y = 1;
Console.WriteLine("x={0}, y= {1}", x, x * y + (++x) + x * y);
Console.ReadLine();
}
}
}

Слайд 23

Присваивание – это замена старого значения переменной на новое. Старое значение стирается

Присваивание – это замена старого значения переменной на новое. Старое значение стирается
бесследно.
Операция может использоваться в программе как законченный оператор.
переменная = выражение
a = b + c;
x = 1;
x = x + 0.5;

ОПЕРАЦИЯ ПРИСВАИВАНИЯ

Сложное присваивание:
x += 0.5; соответствует x = x + 0.5;
x *= 0.5; соответствует x = x * 0.5;
a %= 3; соответствует a = a % 3;
a <<= 2; соответствует a = a << 2;

Слайд 24

using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
int x

using System; namespace ConsoleApplication1 { class Class1 { static void Main() {
= 11, y = 4;
float z = 4;
Console.WriteLine( z * y ); // Результат 16
Console.WriteLine( x / y ); // Результат 2 (целочисленное деление)
Console.WriteLine( x / z ); // Результат 2,75
Console.WriteLine( x % y ); // Результат 3 (остаток)
}}}

ОПЕРАЦИЯ УМНОЖЕНИЯ И ДЕЛЕНИЯ

Слайд 25

©Павловская Т.А. (СПбГУ ИТМО)

ОПЕРАЦИИ СДВИГА

Операции сдвига (<< и >>) применяются к

©Павловская Т.А. (СПбГУ ИТМО) ОПЕРАЦИИ СДВИГА Операции сдвига ( >) применяются к
целочисленным операндам. Они сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом.
При сдвиге влево (<<) освободившиеся разряды обнуляются. При сдвиге вправо (>>) освободившиеся биты заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом в противном случае.
Стандартные операции сдвига определены для типов int, uint, long и ulong.

Слайд 26

using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
byte a

using System; namespace ConsoleApplication1 { class Class1 { static void Main() {
= 3, b = 9;
sbyte c = 9, d = -9;
Console.WriteLine( a << 1 ); // Результат 6
Console.WriteLine( a << 2 ); // Результат 12
Console.WriteLine( b >> 1 ); // Результат 4
Console.WriteLine( c >> 1 ); // Результат 4
Console.WriteLine( d >> 1 ); // Результат -5
}
}
}

ПРИМЕР ОПЕРАЦИИ СДВИГА

Слайд 27

ОПЕРАЦИИ ОТНОШЕНИЯ И ПРОВЕРКИ НА РАВЕНСТВО

Операции отношения (<, <=, >, >=, ==,

ОПЕРАЦИИ ОТНОШЕНИЯ И ПРОВЕРКИ НА РАВЕНСТВО Операции отношения ( , >=, ==,
!=) сравнивают первый операнд со вторым.
Операнды должны быть арифметического типа.
Результат операции — логического типа, равен true или false.
x == y -- true, если x равно y, иначе false
x != y -- true, если x не равно y, иначе false
x < y -- true, если x меньше y, иначе false
x > y -- true, если x больше y, иначе false
x <= y -- true, если x меньше или равно y, иначе false
x >= y -- true, если x больше или равно y, иначе false

Слайд 28

УСЛОВНЫЕ ЛОГИЧЕСКИЕ ОПЕРАЦИИ

using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()

УСЛОВНЫЕ ЛОГИЧЕСКИЕ ОПЕРАЦИИ using System; namespace ConsoleApplication1 { class Class1 { static
{
Console.WriteLine( true && true ); // Результат true
Console.WriteLine( true && false ); // Результат false
Console.WriteLine( true || true ); // Результат true
Console.WriteLine( true || false ); // Результат true
}
}
}

Слайд 29

УСЛОВНАЯ ОПЕРАЦИЯ

операнд_1 ? операнд_2 : операнд_3
Первый операнд — выражение, для которого существует

УСЛОВНАЯ ОПЕРАЦИЯ операнд_1 ? операнд_2 : операнд_3 Первый операнд — выражение, для
неявное преобразование к логическому типу.
Если результат вычисления первого операнда равен true, то результатом будет значение второго операнда, иначе — третьего операнда.
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
int a = 11, b = 4;
int max = b > a ? b : a;
Console.WriteLine( max ); // Результат 11
}}}

Слайд 30

ВВОД ДАННЫХ С КОНСОЛИ

using System;
namespace A
{ class Class1
{ static void Main()

ВВОД ДАННЫХ С КОНСОЛИ using System; namespace A { class Class1 {
{
string s = Console.ReadLine(); // ввод строки
char c = (char)Console.Read(); // ввод символа
Console.ReadLine();
string buf; // буфер для ввода чисел
buf = Console.ReadLine();
int i = Convert.ToInt32( buf ); // преобразование в целое
buf = Console.ReadLine();
double x = Convert.ToDouble( buf ); // преобразование в вещ.
buf = Console.ReadLine();
double y = double.Parse( buf ); // преобразование в вещ.
}
}
}

Слайд 31

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ: КЛАСС MATH

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ: КЛАСС MATH

Слайд 33

УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ ЯЗЫКА ВЫСОКОГО УРОВНЯ

Реализуют логику выполнения программы:
следование
ветвление
цикл
передача

УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ ЯЗЫКА ВЫСОКОГО УРОВНЯ Реализуют логику выполнения программы: следование ветвление цикл передача управления
управления

Слайд 34

БЛОК (СОСТАВНОЙ ОПЕРАТОР)

Блок — это последовательность операторов, заключенная в операторные скобки:
begin end
{

БЛОК (СОСТАВНОЙ ОПЕРАТОР) Блок — это последовательность операторов, заключенная в операторные скобки:
}
Блок воспринимается компилятором как один оператор и может использоваться всюду, где синтаксис требует одного оператора, а алгоритм — нескольких.
Блок может содержать один оператор или быть пустым.

Слайд 35

ОПЕРАТОР «ВЫРАЖЕНИЕ»

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

ОПЕРАТОР «ВЫРАЖЕНИЕ» Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение
заключается в вычислении выражения.
i++; // выполняется операция инкремента
a *= b + c; // выполняется умножение с присваиванием
fun( i, k ); // выполняется вызов функции
; называют пустым оператором.

Слайд 36

Операторы ветвления:
развилка (if)
переключатель (switch)

Операторы ветвления: развилка (if) переключатель (switch)

Слайд 37

УСЛОВНЫЙ ОПЕРАТОР IF

if ( a < 0 ) b = 1;
if (

УСЛОВНЫЙ ОПЕРАТОР IF if ( a if ( a d || a
a < b && (a > d || a = = 0)) ++b; else { b *= a; a = 0; }
if ( a < b ) if ( a < c ) m = a; else m = c; else if ( b < c ) m = b; else m = c;

if ( выражение ) оператор_1; [else оператор_2;]

Слайд 38

ПРИМЕР

if ( x < -2 ) y = 0;
if ( x

ПРИМЕР if ( x if ( x >= -2 && x if
>= -2 && x < -1 ) y = -x - 2;
if ( x >= -1 && x < 1 ) y = x;
if ( x >= 1 && x < 2 ) y = -x + 2;
if ( x >= 2 ) y = 0;

if ( x <= -2 ) y = 0;
else if ( x < -1 ) y = -x - 2;
else if ( x < 1 ) y = x;
else if ( x < 2 ) y = -x + 2;
else y = 0;

y = 0;
if ( x > -2 ) y = -x - 2;
if ( x > -1 ) y = x;
if ( x > 1 ) y = -x + 2;
if ( x > 2 ) y = 0;

Слайд 39

ОПЕРАТОР ВЫБОРА SWITCH

switch ( выражение )
{
case константное_выражение_1: [ список_операторов_1 ]
case константное_выражение_2: [

ОПЕРАТОР ВЫБОРА SWITCH switch ( выражение ) { case константное_выражение_1: [ список_операторов_1
список_операторов_2 ]
..
case константное_выражение_n: [ список_операторов_n ]
[ default: операторы ]
}

Слайд 40

ПРИМЕР: КАЛЬКУЛЯТОР НА ЧЕТЫРЕ ДЕЙСТВИЯ

using System; namespace ConsoleApplication1
{ class Class1 {

ПРИМЕР: КАЛЬКУЛЯТОР НА ЧЕТЫРЕ ДЕЙСТВИЯ using System; namespace ConsoleApplication1 { class Class1
static void Main() {
string buf; double a, b, res;
Console.WriteLine( "Введите 1й операнд:" );
buf = Console.ReadLine(); a = double.Parse( buf);
Console.WriteLine( "Введите знак операции" );
char op = (char)Console.Read(); Console.ReadLine();
Console.WriteLine( "Введите 2й операнд:" );
buf = Console.ReadLine(); b = double.Parse( buf);
bool ok = true;
switch (op)
{
case '+' : res = a + b; break;
case '-' : res = a - b; break;
case '*' : res = a * b; break;
case '/' : res = a / b; break;
default : res = double.NaN; ok = false; break;
}
if (ok) Console.WriteLine( "Результат: " + res );
else Console.WriteLine( "Недопустимая операция" );
}}}

Слайд 41

СТРУКТУРА ОПЕРАТОРА ЦИКЛА

Усл-е

Начальные
значения

Тело
цикла

Модиф-я параметра

СТРУКТУРА ОПЕРАТОРА ЦИКЛА Усл-е Начальные значения Тело цикла Модиф-я параметра

Слайд 42

ЦИКЛ С ПРЕДУСЛОВИЕМ

while ( выражение ) оператор

using System;
namespace ConsoleApplication1
{ class Class1

ЦИКЛ С ПРЕДУСЛОВИЕМ while ( выражение ) оператор using System; namespace ConsoleApplication1
{ static void Main()
{
double Xn = -2, Xk = 12, dX = 2, t = 2, y;
Console.WriteLine( "| x | y |" );
double x = Xn;
while ( x <= Xk )
{
y = t * x;
Console.WriteLine( "| {0,9} | {1,9} |", x, y );
x += dX;
}
}
}
}

y = t⋅x

Слайд 43

©Павловская Т.А. (СПбГУ ИТМО)

ЦИКЛ С ПОСТУСЛОВИЕМ

do оператор while выражение;

using System;
namespace ConsoleApplication1
{

©Павловская Т.А. (СПбГУ ИТМО) ЦИКЛ С ПОСТУСЛОВИЕМ do оператор while выражение; using
class Class1
{ static void Main()
{
char answer;
do
{
Console.WriteLine( "Купи слоника, а?" );
answer = (char) Console.Read();
Console.ReadLine();
} while ( answer != 'y' );
}
}
}

Слайд 44

ЦИКЛ С ПАРАМЕТРОМ

for ( инициализация; выражение; модификации ) оператор;
int s =

ЦИКЛ С ПАРАМЕТРОМ for ( инициализация; выражение; модификации ) оператор; int s
0;
for ( int i = 1; i <= 100; i++ ) s += i;

for ([действия_до_выполнения_цикла]; [условие]; [действия_после_выполнения])
{
    // действия
}

var i = 1; 
for (WriteLine("Начало выполнения цикла"); i < 4; WriteLine($"i = {i}"))
{
    i++;
}

Слайд 45

using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
double Xn

using System; namespace ConsoleApplication1 { class Class1 { static void Main() {
= -2, Xk = 12, dX = 2, t = 2, y;
Console.WriteLine( "| x | y |";
for ( double x = Xn; x <= Xk; x += dX )
{
y = t * x;
Console.WriteLine( "| {0,9} | {1,9} |", x, y );
}
}
}
}

ПРИМЕР ЦИКЛА С ПАРАМЕТРОМ

Слайд 46

РЕКОМЕНДАЦИИ ПО НАПИСАНИЮ ЦИКЛОВ

не забывать о том, что если в теле циклов

РЕКОМЕНДАЦИИ ПО НАПИСАНИЮ ЦИКЛОВ не забывать о том, что если в теле
while и for требуется выполнить более одного оператора, нужно заключать их в блок;
убедиться, что всем переменным, встречающимся в правой части операторов присваивания в теле цикла, до этого присвоены значения, а также возможно ли выполнение других операторов;
проверить, изменяется ли в теле цикла хотя бы одна переменная, входящая в условие продолжения цикла;
предусматривать аварийный выход из итеративного цикла по достижению некоторого предельно допустимого количества итераций.

Слайд 47

ПЕРЕДАЧА УПРАВЛЕНИЯ

оператор break — завершает выполнение цикла, внутри которого записан;
оператор continue —

ПЕРЕДАЧА УПРАВЛЕНИЯ оператор break — завершает выполнение цикла, внутри которого записан; оператор
выполняет переход к следующей итерации цикла;
оператор return — выполняет выход из функции, внутри которой он записан;
оператор throw — генерирует исключительную ситуацию;
оператор goto — выполняет безусловную передачу управления.

Слайд 48

using System;
namespace ConsoleApplication43
{ class Program
{
static void Main(string[] args)
{
int

using System; namespace ConsoleApplication43 { class Program { static void Main(string[] args)
me = 8;
for (int i = 0; i < 9; i++)
{
if (me % 2 == 0)
{
Console.WriteLine(me);
me += 1;
}
else
{
me += 1;
break;
} }
Console.ReadLine();
} } }

using System;
namespace ConsoleApplication43
{ class Program
{
static void Main(string[] args)
{
int me = 8;
for (int i = 0; i < 9; i++)
{
if (me % 2 == 0)
{
Console.WriteLine(me);
me += 1;
}
else
{
me += 1;
continue;
} }
Console.ReadLine();
} } }

ОПЕРАТОР BREAK

ОПЕРАТОР CONTINUE

Слайд 49

ОПЕРАТОР GOTO

завершает выполнение функции и передает управление в точку ее вызова:
return

ОПЕРАТОР GOTO завершает выполнение функции и передает управление в точку ее вызова:
[ выражение ];

Оператор goto

goto метка;
В теле той же функции должна присутствовать ровно одна конструкция вида:
метка: оператор;
goto case константное_выражение;
goto default;

Слайд 50

using System;
namespace ConsoleApplication43
{ class Program {
static void Main(string[] args)
{
do
{

using System; namespace ConsoleApplication43 { class Program { static void Main(string[] args)
Console.WriteLine("введите слово или символ 'x' для завершения работы приложения");
str = Console.ReadLine();
Console.WriteLine("вы ввели следующую последовательность символов: {0}", str);
if (str == "x") goto Finish;
}
while (true);
Finish:
Console.WriteLine("Нажмите клавишу ENTER, чтобы завершить работу приложения");
Console.ReadLine();
}
}
}

using System;
namespace ConsoleApplication43
{ class Program {
static void Main(string[] args)
{ Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
Console.Write("Please enter your selection: ");
string s = Console.ReadLine();
int n = int.Parse(s); int cost = 0;
switch (n)
{ case 1:
cost += 25;
break;
case 2:
cost += 25;
goto case 1;
case 3:
cost += 50;
goto case 1;
default:
Console.WriteLine("Invalid selection.");
break;
}
if (cost != 0) Console.WriteLine("Please insert {0} cents.", cost);
Console.WriteLine("Thank you for your business.");
Console.WriteLine("Press any key to exit.");
Console.ReadKey(); } } }

ОПЕРАТОР GOTO: 2 ВАРИАНТА ИСПОЛЬЗОВАНИЯ

Слайд 51

ОБРАБОТКА ИСКЛЮЧЕНИЙ

Исключительная ситуация, или исключение — это возникновение непредвиденного или аварийного

ОБРАБОТКА ИСКЛЮЧЕНИЙ Исключительная ситуация, или исключение — это возникновение непредвиденного или аварийного
события, которое может порождаться некорректным использованием аппаратуры.
Например, это деление на ноль или обращение по несуществующему адресу памяти.
Исключения позволяют логически разделить вычислительный процесс на две части — обнаружение аварийной ситуации и ее обработка.

Слайд 52

ВОЗМОЖНЫЕ ДЕЙСТВИЯ ПРИ ОШИБКЕ

прервать выполнение программы;
возвратить значение, означающее «ошибка»;
вывести сообщение об ошибке

ВОЗМОЖНЫЕ ДЕЙСТВИЯ ПРИ ОШИБКЕ прервать выполнение программы; возвратить значение, означающее «ошибка»; вывести
и вернуть вызывающей программе некоторое приемлемое значение, которое позволит ей продолжать работу;
выбросить исключение
Исключения генерирует либо система выполнения, либо программист с помощью оператора throw.

Слайд 53

НЕКОТОРЫЕ СТАНДАРТНЫЕ ИСКЛЮЧЕНИЯ

НЕКОТОРЫЕ СТАНДАРТНЫЕ ИСКЛЮЧЕНИЯ

Слайд 54

ОПЕРАТОР TRY

Служит для обнаружения и обработки исключений.
Оператор содержит три части:
контролируемый блок —

ОПЕРАТОР TRY Служит для обнаружения и обработки исключений. Оператор содержит три части:
составной оператор, предваряемый ключевым словом try. В контролируемый блок включаются потенциально опасные операторы программы. Все функции, прямо или косвенно вызываемые из блока, также считаются ему принадлежащими;
один или несколько обработчиков исключений — блоков catch, в которых описывается, как обрабатываются ошибки различных типов;
блок завершения finally, выполняемый независимо от того, возникла ли ошибка в контролируемом блоке.

Синтаксис оператора try:
try блок [ catch-блоки ] [ finally-блок ]

Слайд 55

МЕХАНИЗМ ОБРАБОТКИ ИСКЛЮЧЕНИЙ

Обработка исключения начинается с появления ошибки. Функция или операция, в

МЕХАНИЗМ ОБРАБОТКИ ИСКЛЮЧЕНИЙ Обработка исключения начинается с появления ошибки. Функция или операция,
которой возникла ошибка, генерируют исключение;
Выполнение текущего блока прекращается, отыскивается соответствующий обработчик исключения, и ему передается управление.
В любом случае (была ошибка или нет) выполняется блок finally, если он присутствует.
Если обработчик не найден, вызывается стандартный обработчик исключения.

Слайд 56

using System;
namespace ConsoleApplication43
{
class Program
{
static void Main(string[] args)
{
try

using System; namespace ConsoleApplication43 { class Program { static void Main(string[] args)
{
Console.WriteLine("Введите напряжение:");
double u = double.Parse(Console.ReadLine());
Console.WriteLine("Введите сопротивление:");
double r = double.Parse(Console.ReadLine());
double i = u / r;
Console.WriteLine("Сила тока = " + i);
}
catch (FormatException)
Console.WriteLine("Неверный формат ввода!");
catch // общий случай
Console.WriteLine("Неопознанное исключение");
finally
Console.WriteLine("Нажмите любую клавишу для завершения работы программы");
Console.ReadKey();
} } }

ПРИМЕР РАБОТЫ ОПЕРАТОРА ОБРАБОТКИ ИСКЛЮЧЕНИЙ

Слайд 57

Массивы
Массив — ограниченная совокупность однотипных величин
Элементы массива имеют одно и то

Массивы Массив — ограниченная совокупность однотипных величин Элементы массива имеют одно и
же имя, а различаются по порядковому номеру (индексу)

Слайд 58

Создание массива

Массив относится к ссылочным типам данных (располагается в управляемой куче), поэтому

Создание массива Массив относится к ссылочным типам данных (располагается в управляемой куче),
создание массива начинается с выделения памяти под его элементы.
Элементами массива могут быть величины как значимых, так и ссылочных типов (в том числе массивы), например:
int[] w = new int[10]; // массив из 10 целых чисел
string[] z = new string[100]; // массив из 100 строк
Массив значимых типов хранит значения, массив ссылочных типов — ссылки на элементы.
Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимых типов и null для ссылочных.

Слайд 59

Размещение массивов в памяти

Размещение массивов в памяти

Слайд 60

Размерность массива

Количество элементов в массиве (размерность) задается при выделении памяти и не

Размерность массива Количество элементов в массиве (размерность) задается при выделении памяти и
может быть изменена впоследствии. Она может задаваться выражением:
short n = ...;
string[] z = new string[2*n + 1];
Размерность не является частью типа массива.
Элементы массива нумеруются с нуля.
Для обращения к элементу массива после имени массива указывается номер элемента в квадратных скобках, например:
w[4] z[i]
С элементом массива можно делать все, что допустимо для переменных того же типа.
При работе с массивом автоматически выполняется контроль выхода за его границы: если значение индекса выходит за границы массива, генерируется исключение IndexOutOfRangeException.

Слайд 61

Действия с массивами

Массивы одного типа можно присваивать друг другу. При этом происходит

Действия с массивами Массивы одного типа можно присваивать друг другу. При этом
присваивание ссылок, а не элементов:
int[] a = new int[10];
int[] b = a; // b и a указывают на один и тот же массив
Все массивы в C# имеют общий базовый класс Array, определенный в пространстве имен System. Некоторые элементы класса Array:
Length (Свойство) - Количество элементов массива (по всем размерностям)
BinarySearch (Статический метод) - Двоичный поиск в отсортированном массиве
IndexOf – (Статический метод) - Поиск первого вхождения элемента в одномерный массив
Sort (Статический метод) - Упорядочивание элементов одномерного массива

Слайд 62

Одномерные массивы

Варианты описания массива:
тип[] имя;
тип[] имя = new тип [ размерность

Одномерные массивы Варианты описания массива: тип[] имя; тип[] имя = new тип
];
тип[] имя = { список_инициализаторов };
тип[] имя = new тип [] { список_инициализаторов };
тип[] имя = new тип [ размерность ] { список_инициализаторов };
Примеры описаний (один пример на каждый вариант описания, соответственно):
int[] a; // элементов нет
int[] b = new int[4]; // элементы равны 0
int[] c = { 61, 2, 5, -9 }; // new подразумевается
int[] d = new int[] { 61, 2, 5, -9 }; // размерность вычисляется
int[] e = new int[4] { 61, 2, 5, -9 }; // избыточное описание

Оператор ^ позволяет задать индекс относительно конца коллекции.

int[] numbers = { 1, 2, 3, 5};  
Console.WriteLine(numbers[^1]);  // 5 - первый с конца или последний элемент
Console.WriteLine(numbers[^2]);  // 3 - второй с конца или предпоследний элемент

Слайд 63

Программа

const int n = 6;
int[] a = new int[n] { 3, 12,

Программа const int n = 6; int[] a = new int[n] {
5, -9, 8, -4 };
Console.WriteLine( "Исходный массив:" );
for ( int i = 0; i < n; ++i ) Console.Write( "\t" + a[i] );
Console.WriteLine();
long sum = 0; // cумма отрицательных элементов
int num = 0; // количество отрицательных элементов
for ( int i = 0; i < n; ++i )
if ( a[i] < 0 ) {
sum += a[i]; ++num;
}
Console.WriteLine( "Сумма отрицательных = " + sum );
Console.WriteLine( "Кол-во отрицательных = " + num );
int max = a[0]; // максимальный элемент
for ( int i = 0; i < n; ++i )
if ( a[i] > max ) max = a[i];
Console.WriteLine( "Максимальный элемент = " + max );

Для массива, состоящего из 6 целочисленных элементов, программа определяет:
сумму и количество отрицательных элементов;
максимальный элемент.

Слайд 64

Оператор foreach

Применяется для перебора элементов массива. Синтаксис:
foreach ( тип имя in имя_массива

Оператор foreach Применяется для перебора элементов массива. Синтаксис: foreach ( тип имя
) тело_цикла
Имя задает локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из массива, например:
int[] massiv = { 24, 50, 18, 3, 16, -7, 9, -1 };
foreach ( int x in massiv ) Console.WriteLine( x );

Слайд 65

Использование методов класса Array

static void Main()
{
int[] a = {

Использование методов класса Array static void Main() { int[] a = {
24, 50, 18, 3, 16, -7, 9, -1 };
Console.WriteLine( "Исходный массив:", a );
for ( int i = 0; i < a.Length; ++i )
Console.Write( "\t" + a[i] );
Console.WriteLine();
Console.WriteLine( Array.IndexOf( a, 18 ) );
Array.Sort(a); // Array.Sort(a, 1, 5);
Console.WriteLine ( "Упорядоченный массив:", a );
for ( int i = 0; i < a.Length; ++i )
Console.Write( "\t" + a[i] );
Console.WriteLine();
Console.WriteLine( Array.BinarySearch( a, 18) );
Array.Reverse(a); // Array.Reverse(a, 2, 4);
}

Слайд 66

Прямоугольные массивы

Прямоугольный массив имеет более одного измерения. Чаще всего в программах

Прямоугольные массивы Прямоугольный массив имеет более одного измерения. Чаще всего в программах
используются двумерные массивы. Варианты описания двумерного массива:
тип[,] имя;
тип[,] имя = new тип [ разм_1, разм_2 ];
тип[,] имя = { список_инициализаторов };
тип[,] имя = new тип [,] { список_инициализаторов };
тип[,] имя = new тип [ разм_1, разм_2 ] { список_инициализаторов };
Примеры описаний (один пример на каждый вариант описания):
int[,] a; // элементов нет
int[,] b = new int[2, 3]; // элементы равны 0
int[,] c = {{1, 2, 3}, {4, 5, 6}}; // new подразумевается
int[,] c = new int[,] {{1, 2, 3}, {4, 5, 6}}; // разм-сть вычисляется
int[,] d = new int[2,3] {{1, 2, 3}, {4, 5, 6}}; // избыточное описание

Слайд 67

К элементу двумерного массива обращаются, указывая номера строки и столбца, на пересечении

К элементу двумерного массива обращаются, указывая номера строки и столбца, на пересечении
которых он расположен:
a[1, 4] b[i, j] b[j, i]
Компилятор воспринимает как номер строки первый индекс, как бы он ни был обозначен в программе.

Слайд 68

const int m = 3, n = 4;
int[,] a = new int[m,

const int m = 3, n = 4; int[,] a = new
n] {
{ 2,-2, 8, 9 },
{-4,-5, 6,-2 },
{ 7, 0, 1, 1 }
};
Console.WriteLine( "Исходный массив:" );
for ( int i = 0; i < m; ++i )
{ for ( int j = 0; j < n; ++j )
Console.Write( "\t" + a[i, j] );
Console.WriteLine();
}

Слайд 69

double sum = 0;
int nPosEl;
for ( int i = 0; i <

double sum = 0; int nPosEl; for ( int i = 0;
m; ++i )
{
nPosEl = 0;
for ( int j = 0; j < n; ++j )
{
sum += a[i, j];
if ( a[i, j] > 0 ) ++nPosEl;
}
Console.WriteLine( "В строке {0} {1} положит-х эл-в", i, nPosEl);
}
Console.WriteLine( "Среднее арифметическое всех элементов: "
+ sum / m / n );

double sum = 0;
foreach ( int x in a ) sum += x; // все элементы двумерного массива!
Console.WriteLine( "Среднее арифметическое всех элементов: "
+ sum / m / n );

Слайд 70

Ступенчатые массивы

В ступенчатых массивах количество элементов в разных строках может различаться. В

Ступенчатые массивы В ступенчатых массивах количество элементов в разных строках может различаться.
памяти ступенчатый массив хранится иначе, чем прямоугольный: в виде нескольких внутренних массивов, каждый из которых имеет свой размер. Кроме того, выделяется отдельная область памяти для хранения ссылок на каждый из внутренних массивов.

Слайд 71

Описание ступенчатого массива

тип[][] имя;
Под каждый из массивов, составляющих ступенчатый массив, память требуется

Описание ступенчатого массива тип[][] имя; Под каждый из массивов, составляющих ступенчатый массив,
выделять явным образом:
int[][] a = new int[3][]; // память под ссылки на 3 строки
a[0] = new int[5]; // память под 0-ю строку (5 эл-в)
a[1] = new int[3]; // память под 1-ю строку (3 эл-та)
a[2] = new int[4]; // память под 2-ю строку (4 эл-та)
Или:
int[][] a = { new int[5], new int[3], new int[4] };
Обращение к элементу ступенчатого массива:
a[1][2] a[i][j] a[j][i]

Слайд 72

Пример

int[][] a = new int[3][];
a[0] = new int [5] { 24,

Пример int[][] a = new int[3][]; a[0] = new int [5] {
50, 18, 3, 16 };
a[1] = new int [3] { 7, 9, -1 };
a[2] = new int [4] { 6, 15, 3, 1 };
Console.WriteLine( "Исходный массив:" );
for ( int i = 0; i < a.Length; ++i )
{
for ( int j=0; j < a[i].Length; ++j)
Console.Write( "\t" + a[i][j] );
Console.WriteLine();
}
// поиск числа 18 в нулевой строке:
Console.WriteLine( Array.IndexOf( a[0], 18 ) );

foreach ( int [] mas1 in a )
{
foreach ( int x in mas1 )
Console.Write( "\t" + x );
Console.WriteLine();
}

Слайд 73

СТРОКИ В C#

string
StringBuilder
символы (тип char)

СТРОКИ В C# string StringBuilder символы (тип char)

Слайд 74

СТРОКИ ТИПА STRING

Тип string предназначен для работы со строками символов в

СТРОКИ ТИПА STRING Тип string предназначен для работы со строками символов в
кодировке Unicode. Представляет собой неизменяемую строку. Ему соответствует базовый класс System.String библиотеки .NET.
Создание строки:
string s; // инициализация отложена
string t = "qqq"; // инициализация строковым литералом
string u = new string(' ', 20); // с пом. конструктора
string v = new string( a ); // создание из массива символов
// создание массива символов: char[] a = { '0', '0', '0' };

Слайд 75

ОПЕРАЦИИ ДЛЯ СТРОК

присваивание (=);
проверка на равенство (==);
проверка на неравенство (!=);
обращение по индексу

ОПЕРАЦИИ ДЛЯ СТРОК присваивание (=); проверка на равенство (==); проверка на неравенство
([]);
сцепление (конкатенация) строк (+).
Строки равны, если имеют одинаковое количество символов и совпадают посимвольно.
Обращаться к отдельному элементу строки по индексу можно только для получения значения, но не для его изменения. Это связано с тем, что строки типа string относятся к неизменяемым типам данных.
Методы, изменяющие содержимое строки, на самом деле создают новую копию строки. Неиспользуемые «старые» копии автоматически удаляются сборщиком мусора.

Слайд 76

НЕКОТОРЫЕ ЭЛЕМЕНТЫ КЛАССА SYSTEM.STRING

НЕКОТОРЫЕ ЭЛЕМЕНТЫ КЛАССА SYSTEM.STRING

Слайд 77

НЕКОТОРЫЕ ЭЛЕМЕНТЫ КЛАССА SYSTEM.STRING

НЕКОТОРЫЕ ЭЛЕМЕНТЫ КЛАССА SYSTEM.STRING

Слайд 78

ПРИМЕР

string s = "прекрасная королева Изольда";
Console.WriteLine( s );
string sub

ПРИМЕР string s = "прекрасная королева Изольда"; Console.WriteLine( s ); string sub
= s.Substring( 3 ).Remove( 12, 2 ); // 1
Console.WriteLine( sub );
string[] mas = s.Split(' '); // 2
string joined = string.Join( "! ", mas );
Console.WriteLine( joined );

Слайд 79

ФОРМАТИРОВАНИЕ СТРОК

using static System.Console;
string s;
s = string.Format("Result is {0, 7}.", 1.2789); WriteLine(s)

ФОРМАТИРОВАНИЕ СТРОК using static System.Console; string s; s = string.Format("Result is {0,
;
s = string.Format("Result is {0, 7}.", 7.54); WriteLine(s);
s = string.Format("Result is {0, -7}.", 1.2789); WriteLine(s);
s = string.Format("Result is {0, -7}.", 7.54); WriteLine(s);

Слайд 80

ФОРМАТИРОВАНИЕ СТРОК

string name = "Tom";
int age = 23;
string output = string.Format("Имя: {0}

ФОРМАТИРОВАНИЕ СТРОК string name = "Tom"; int age = 23; string output
Возраст: {1}", name, age);
Console.WriteLine(output);

using static System.Console;
string s;
s = string.Format("{0:c}", 5.50); WriteLine(s);// "5,50 р."
s = string.Format("{0:c1}", 5.50); WriteLine(s);// "5,5 р."
s = string.Format("{0:e}", 5.50); WriteLine(s);// "5,500000е+000"
s = string.Format("{0:d}", 32); WriteLine(s);// "32"
s = string.Format("{0:d4}", 32); WriteLine(s);// "0032"
s = string.Format("{0:f5}", 0.55); WriteLine(s);// "0,55000"
s = string.Format("{0:p}", 0.55); WriteLine(s);// "55,00%"

using static System.Console;
int x = 8; int y = 7;
string s = $"{x} + {y} = {x + y}"; // 8 + 7 = 15

Интерполяция строк

Слайд 81

СТРОКИ ТИПА STRINGBUILDER

Класс StringBuilder определен в пространстве имен System.Text. Позволяет изменять

СТРОКИ ТИПА STRINGBUILDER Класс StringBuilder определен в пространстве имен System.Text. Позволяет изменять
значение своих экземпляров.
При создании экземпляра обязательно использовать операцию new и конструктор, например:
StringBuilder a = new StringBuilder(); // 1
StringBuilder b = new StringBuilder( "qwerty" ); // 2
StringBuilder c = new StringBuilder( 100 ); // 3
StringBuilder d = new StringBuilder( "qwerty", 100 ); // 4
StringBuilder e = new StringBuilder( "qwerty", 1, 3, 100 );// 5

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

Слайд 82

ОСНОВНЫЕ ЭЛЕМЕНТЫ КЛАССА SYSTEM.TEXT.STRINGBUILDER

ОСНОВНЫЕ ЭЛЕМЕНТЫ КЛАССА SYSTEM.TEXT.STRINGBUILDER

Слайд 83

Console.Write( "Введите зарплату: " );
double salary = double.Parse( Console.ReadLine());
StringBuilder a = new

Console.Write( "Введите зарплату: " ); double salary = double.Parse( Console.ReadLine()); StringBuilder a
StringBuilder();
a.Append( "зарплата " );
a.AppendFormat( "{0, 6:C} - в год {1, 6:C}", salary, salary * 12 );
Console.WriteLine( a );
a.Replace( "р.", "тыс.$" );
Console.WriteLine( "А лучше было бы: " + a );

ПРИМЕР

Слайд 84

Символьный тип char предназначен для хранения символов в кодировке Unicode. Символьный тип относится к

Символьный тип char предназначен для хранения символов в кодировке Unicode. Символьный тип
встроенным типам данных C# и соответствует стандартному классу Char библиотеки .NET из пространства имен System.

СИМВОЛЬНЫЙ ТИП ДАННЫХ - CHAR

Слайд 85

ОСНОВНЫЕ МЕТОДЫ

ОСНОВНЫЕ МЕТОДЫ