Авторизируйтесь,
чтобы продолжить
Некоторые функции доступны только зарегистрированным пользователям
Неправильный логин или пароль




  str0ri

 личные данные


друзья:
Большая медведица


07.12.2015
 
22:37 Арифметические и логические операции в C#
Запись открыта: всем
Теги: Coding
В этом уроке мы поговорим об арифметических и логических операциях, без которых сложно представить любую программу.

Все операции делятся на два типа: унарные и бинарные. К унарным относятся операции, в которых участвует один операнд. В бинарных операциях – два операнда. Операнд – это данные, которые принимают участие в операции. Например, оператор сложения «+» – бинарный 2+3, здесь операндами являются числа 2 и 3. Список бинарных арифметических операций приведен в таблице:

(смотри прикреплённый рисунок)


При делении двух целых чисел результатом также будет целое число. Например при делении 9/5 результатом будет число 1. Чтобы получить точный результат с десятичной точкой, нужно чтобы делимое и/или делитель были типа float или double. Например, при делении 9 / 5f (суффикс f указывает, что данная константа типа float) результатом будет 1.8.

Оператор «%» возвращает остаток от деления. Результатом операции 9 % 5 будет 4. Примером применения оператора «%» может быть процесс проверки числа на четность. Для этого мы ищем остаток от деления числа на 2. Если число четное, результатом будет 0, если нечетное – 1.

Чтобы повысить приоритет операции, используются скобки, как и в обычной арифметике.

2+2*2=6
(2+2)*2=8

При использовании оператора «+» для строк, он выполняет операцию конкатенации. Конкатенация – объединение нескольких объектов (например строк) в один.


static void Main(string[] args)
{
string str1 = "Hello", str2 = "World";
Console.WriteLine(str1 + ", " + str2); //выводит на экран "Hello, World"
}


Унарные операторы в Си-шарп

Унарных арифметических операторов в Си-шарп есть всего два: инкрементация «++» и декрементация «--»;

Инкрементация увеличивает операнд на единицу, а декрементация - уменьшает на единицу.


static void Main(string[] args)
{
int a = 0, b = 5;
a++; // a=1;
b--; // b=4
}


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


static void Main(string[] args)
{
int a = 2, b = 3, c, d = 3;
c = a + ++b; // c = 6, сначала инкремент, потом сложение
с = a + d++; // c = 5, сначала сложение, потом инкремент
}


Везде где можно использовать инкрементацию/декрементацию стоит это делать, так как она работает быстрее оператора сложения/вычитания.

В Си-шарп также есть возможность использования краткой формы выражения:


static void Main(string[] args)
{
int a = 2, b = 3;
a += b; // равноценно выражению a = a + b;
a -= b; // равноценно выражению a = a - b;
a *= b; // равноценно выражению a = a * b;
a /= b; // равноценно выражению a = a / b;
a %= b; // равноценно выражению a = a % b;
}


Класс Math

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

Для возведения числа в степень, используется функция Pow([число], [степень]);


static void Main(string[] args)
{
float a, b = 9;
a = (float) Math.Pow(b, 2); // возводим переменную b в степень 2. Pow() возвращает результат в типе данных double, поэтому мы тут применили явное преобразование. Конечно, можно было обойтись без преобразования, объявив переменную a типа double
Console.WriteLine(a); // выводит на экран число 81
Console.ReadKey();
}


Для нахождения квадратного корня служит функция Sqrt([число]); возвращаемый результат также в типе данных double


static void Main(string[] args)
{
double a, b = 9;
a = Math.Sqrt(b);
Console.WriteLine(a); // выводит на экран число 3
Console.ReadKey();
}


Для нахождения косинуса и синуса используются cos([угол в радианах]) и sin([угол в радианах]) соответственно.

180 [градусов] = пи [радиан].

Чтобы перевести градусы в радианы, необходимо значение в градусах умножить на Пи и разделить на 180. Число Пи объявлено константой в классе Math.


static void Main(string[] args)
{
double a;
a = Math.Cos(60 * Math.PI / 180); // переводим 60 градусов в радианы
Console.WriteLine(a); // выводит на экран 0.5
a = Math.Sin(60 * Math.PI / 180);
Console.WriteLine(a); // выводит на экран 0.866…
Console.ReadKey();
}


Логические операторы в Си-шарп

Логические операторы в Си-шарп служат для работы с логическим типом данных (bool), который может принимать только два значения – true или false. Их можно разделить на две категории: простые логические операторы и операторы сравнения.

В Си-шарп есть следующие логические операторы:

! – оператор «НЕ» является унарным и возвращает противоположное значение операнда.


static void Main(string[] args)
{
bool a, b = true, c = false;
a = !b; // a = false
a = !c; // a = true
}


|| - оператор «ИЛИ» является бинарным и возвращает false только тогда, когда оба операнда равны false, в остальных случаях результат будет true;


static void Main(string[] args)
{
bool a, bTrue = true, bFalse = false;
a = bFalse || bFalse; // a = false
a = bFalse || bTrue; // a = true
a = bTrue || bFalse; // a = true
a = bTrue || bTrue; // a = true
}


&& - оператор «И» является бинарным и возвращает true только тогда, когда оба операнда равны true, в остальных случаях результат будет false;


static void Main(string[] args)
{
bool a, bTrue = true, bFalse = false;
a = bFalse && bFalse; // a = false
a = bFalse && bTrue; // a = false
a = bTrue && bFalse; // a = false
a = bTrue && bTrue; // a = true
}


К операторам сравнения относятся:

(смотри прикреплённый рисунок)

static void Main(string[] args)

{
bool a;
int b = 2, c = 3, d = 2;
a = b > c; // a = false
a = b < c; // a = true
a = b >= c; // a = false
a = b >= d; // a = true
a = b == c; // a = false
a = b == d; // a = true
a = b != c; // a = true
}

Логические операторы в первую очередь используются в условных операторах, о которых мы поговорим в следующем уроке.

Домашнее задание

Есть прямоугольный треугольник с катетами а=5, b=7. Найдите площадь треугольника, s=?. Используя теорему Пифагора, найдите длину гипотенузы, с=?. Кроме этого, найдите длину гипотенузы еще и с помощью теоремы косинусов. Угол между катетами, думаю и так понятен, 90 градусов :) Не помните формулу - ищите в поисковике.

[ комментарии (0) ] [ комментировать ]
22:15 Переменные,типы данных, константы в C#
Запись открыта: всем
Теги: Coding
Переменная – это именованная область памяти. В переменную можно записывать данные и считывать. Данные, записанные в переменной, называются значением переменной.

Си-шарп – язык жесткой типизации. Каждая переменная должна быть определенного типа данных. Ниже, в таблице наведены встроенные типы данных языка Си-шарп:

(см. прикреплённый рисунок)

*Здесь нет ошибки. Оперативная память - массив байтов, где каждый байт имеет уникальный адрес. Для bool достаточно одного бита: 0 - false, 1 - true, но минимальная адресуемая сущность - байт, поэтому ненулевой байт считается за истину, нулевой - ложью.

Для того, чтобы использовать переменную, ее сначала нужно объявить:

static void Main(string[] args)
{
int a; // объявляем переменную a типа int
a = 5; // записываем в переменную a число 5
int b, c; // объявить можно сразу несколько переменных через запятую
bool d; // объявляем переменную d типа bool
d = true; // записываем в переменную d значение true (истина)
long e = 10; // при объявлении переменной можно сразу же задавать ей значение, это называется инициализацией
float f = 5.5f; // чтобы записать число с плавающей точкой типа float, нужно после значения добавлять суффикс f.
char g = 'g'; // объявление символьной переменой g с ее инициализацией значением символа 'g'
}


При использовании переменной, в которую не было записано значение, компилятор выдаст ошибку "Use of unassigned local variable [variableName]".

static void Main(string[] args)
{
int a;
Console.WriteLine(a); //ошибка
}


Язык Си-шарп чувствительный к регистру символов. Переменные max и Max это не одно и то же. Не забывайте этого, чтобы не иметь лишних проблем.

Имя переменной должно отображать суть данных, которые она отображает. Не стоит называть переменные ни о чем не говорящими именами типа a, b, c. Используйте английские слова. Высота – height, возраст – age и т. д.

НИКОГДА не используйте кириллические символы в именах переменных.

Преобразование встроенных типов данных

Переменные одного типа можно преобразовывать в переменные другого типа. Преобразование бывает явным и неявным. Неявное преобразование выполняет компилятор.

Пример неявного преобразования:

static void Main(string[] args)
{
int a = 35;
short b = 10;
a = b; // неявное преобразование. Так как int большего размера, чем short – утери данных не будет
b = a; // ошибка компиляции, нельзя тип большего размера неявно преобразовать в тип меньшего размера
}
При явном преобразовании необходимо непосредственно перед переменной, которую вы хотите преобразовать, указать в скобках тип, к которому приводится переменная.

Пример явного преобразования:

static void Main(string[] args)
{
int a = 35000;
short b = 10;
b = (short) a; // в этом случае уже ошибки не будет. Так как максимальное значение типа short 32767, здесь будет утеря данных.
}


Константы

Константа – это переменная, значение которой нельзя изменить. Константы используются для гарантирования того, что данные в этой переменной не изменятся.
Для того, чтобы объявить константу, перед обычным объявлением переменной нужно добавить ключевое слово const:

static void Main(string[] args)
{
const int months = 12; // объявление константы
months = 13; // ошибка компиляции
}


При объявлении константы она должна обязательно быть проинициализирована значением.
Константы также делают ваш код более красивым, читаемым.

static void Main(string[] args)
{
const int months = 12;
const int monthSalary = 1024;
int yearSalary = monthSalary * months;
}


Гораздо понятнее чем:

static void Main(string[] args)
{
int yearSalary = 12 * 1024;
}


Константы могут быть двух типов: простые литералы и строчные:

static void Main(string[] args)
{
Console.WriteLine(100); // 100 есть 100 и этого не изменить, это константа, а точнее числовой литерал
Console.WriteLine("Hello!"); // строка “Hello!” является строчным литералом
}


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

Ключевое слово var

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

static void Main(string[] args)
{
var number = 5; // number будет типа int
var text ="some text"; // text будет типа string
var number2 = 0.5; // number2 будет типа double
}


var сохраняет принцип строгой типизации в Си-шарп. Это означает, что после того, как для переменной уже был определен тип, в нее нельзя записать данные другого типа:

static void Main(string[] args)
{
var number = 5;
number = "some text"; // ошибка, number определен как int
}


Ключевое слово var следует использовать в первую очередь с LINQ выражениями (при работе с базами данных)

static void Main(string[] args)
{
var query = from s in bdContext.Students select s;
}


О LINQ мы будем говорить позже.

Ключевое слово var имеет ограничения по его использованию - var не может быть в качестве:

- поля класса
- аргумента функции
- возвращаемого типа функции
- переменной, которой присваивается null

Нововведение var является достаточно противоречивым среди разработчиков на C#, некоторые используют его где только возможно, другие его избегают (код становится плохо читаемым).

Ссылочные типы

Все типы данных, о которых мы говорили выше, являются структурными. Также существуют ссылочные типы. Из базовых типов к ссылочным относятся object и string.
Тип object является базовым для всех остальных типов данных. Типу string соответствует строка символов Unicode.

Пример использования типа string.

static void Main(string[] args)
{
string hello = "Hello!";
Console.WriteLine(hello);
}


Структурные типы данных в Си-шарп хранятся в стеке. Для этих данных зарезервирована область в стеке.

Стек — это структура данных, которая сохраняет элементы по принципу «последним пришёл — первым вышел» . Примером из жизни служит стопка тарелок. Скорость работы со стеком гораздо выше, чем с оперативной памятью, следовательно, использование стека повышает скорость работы программы.

Ссылочные типы хранятся в куче.

Куча — это область динамической памяти, которая выделяется приложению для хранения данных (например объектов). Доступ к данным в куче осуществляется медленнее, чем к стеку. Переменные ссылочных типов хранят ссылки на данные.


К ссылочным типам относятся классы, интерфейсы, делегаты и массивы. Больше об этом читайте в уроке Ссылочные типы и типы значений в Си-шарп.

Домашнее задание

Создайте новый проект или откройте предыдущий, объявите несколько переменных различных типов, примените явное и неявное преобразование. Создайте константную переменную, попробуйте изменить ее значение.

[ комментарии (0) ] [ комментировать ]
21:54 Пишем первую программу на C#
Запись открыта: всем
Теги: Coding
В программирование есть такая традиция – изучение любого языка начинается с написания программы, которая выводит на экран сообщение «Hello, World!». Мы не будем отступать от традиций.

Запускаем Visual Studio 2015 -> Меню -> Файл -> Новый проект -> C# -> В списке выбираем Console Application (Консольное приложение) -> называем проект и жмем ОК. В итоге будет создан проект с одним файлом с расширением *.cs в котором мы и будем писать нашу программу. В этом файле уже есть несколько шаблонных строк кода.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HelloWorld
{
  class Program
  {
   static void Main(string[] args)
   {
   }
  }
}

И это уже готовая программа, только она не делает ничего.
Добавим несколько строк кода между фигурными скобками функции Main, чтобы вывести «Hello, World!» на экран.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HelloWorld
{
  class Program
  {
   static void Main(string[] args)
   {
      Console.WriteLine("Hello, World!");
       Console.ReadKey();
   }
  }
}
Чтобы скомпилировать и запустить программу жмем F5. В итоге, видим на экране наше приветствие. Поздравляю с первой написанной программой на Си-шарп!
Детально код разбирать пока не будем, скажем только, что мы имеем класс Program, внутри которого объявлена статическая функция (метод) Main, что делает его главным классом приложения, и такой класс может быть только один. Функция Main является точкой входа программы, и она должна обязательно быть в любой консольной программе. Строка Console.WriteLine("Hello, World!"); выводит сообщение на экран. После этого, чтобы программа не закрылась, и мы смогли увидеть результат, командой Console.ReadKey(); мы ожидаем нажатия клавиши пользователем. После нажатия клавиши приложение соответственно закрывается.

На этом первый урок окончен...

[ комментарии (0) ] [ комментировать ]


Страницы: 1
Редакция: (383) 347-86-84

Техподдержка:
help.sibnet.ru
Размещение рекламы:
тел: (383) 347-06-78, 347-10-50

Правила использования материалов
Наши вакансии

О проекте
Пользовательское соглашение
Политика конфиденциальности