# Типы данных и переменные

## **Введение**

В искусстве программирования язык C# является неотъемлемым инструментом, открывающим перед разработчиком широкие горизонты для творчества и решения сложных задач. Однако перед тем как взлететь в высокие сферы программирования, необходимо тщательно изучить его фундаментальные составляющие, среди которых ключевое место занимают **типы данных и переменные**.

Типы данных служат строительными блоками программы, определяя, как информация будет представлена и обрабатываться внутри кода. От целочисленных значений до символов и текста, типы данных обеспечивают языку C# гибкость в работе с разнообразными данными. С другой стороны, переменные являются контейнерами, призванными хранить и управлять этой информацией в ходе выполнения программы.

На страницах этой главы мы погрузимся в увлекательный мир типов данных и переменных языка C#. Разберем разнообразие типов, научимся правильно объявлять и использовать переменные, и поймем, как эти фундаментальные концепции служат основой для создания более сложных и эффективных программных решений. Приготовьтесь к увлекательному и плодотворному путешествию в основы программирования на C#.

Язык программирования C# предлагает богатый набор встроенных типов данных, каждый из которых предназначен для работы с определенным видом информации. Эта разнообразная палитра типов обеспечивает гибкость и точность при работе с данными. Давайте рассмотрим основные категории типов данных в C#:

## Основные типы данных в C\#

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

#### **Целочисленные типы данных**

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

* `sbyte`: 8-битное знаковое целое число (-128 до 127).
* `byte`: 8-битное беззнаковое целое число (0 до 255).
* `short`: 16-битное знаковое целое число (-32,768 до 32,767).
* `ushort`: 16-битное беззнаковое целое число (0 до 65,535).
* `int`: 32-битное знаковое целое число (-2,147,483,648 до 2,147,483,647).
* `uint`: 32-битное беззнаковое целое число (0 до 4,294,967,295).
* `long`: 64-битное знаковое целое число (-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807).
* `ulong`: 64-битное беззнаковое целое число (0 до 18,446,744,073,709,551,615).

**Применение**: Используются для хранения и обработки целых чисел в программе.

Примеры:

```csharp
csharpCopy codesbyte mySByte = -10;
ushort myUShort = 500;
int myInt = 10000;
long myLong = 1234567890123456789;
```

#### **Вещественные типы данных**

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

* `float`: 32-битное число с плавающей точкой одинарной точности.
* `double`: 64-битное число с плавающей точкой двойной точности.

**Применение**: Используются для представления дробных чисел и точных вычислений.

Примеры:

```csharp
csharpCopy codefloat myFloat = 3.14f;
double myDouble = 3.14;
```

**Символьные и строковые типы данных**

Символьные типы данных предназначены для хранения отдельных символов, в то время как строковые – для работы с последовательностями символов (текстом). Они являются неотъемлемой частью обработки информации, связанной с символами и текстовыми данными.

* `char`: Одиночный символ Unicode.
* `string`: Строка символов Unicode.

**Применение**: Используются для работы с символами и текстовой информацией в программах.

`char`: Одиночный символ Unicode, объявляется с использованием одинарных кавычек.

```csharp
csharpCopy codechar myChar = 'A';
```

`string`: Строка символов Unicode, объявляется с использованием двойных кавычек.

```csharp
csharpCopy codestring myString = "Hello, World!";
```

#### **Логический тип данных**

Логический тип данных принимает только два значения: `true` или `false`. Это необходимо для представления условий и принятия решений в программе.

* `bool`: Логический тип данных.

**Применение**: Используется для организации условных операторов и логических проверок.

`bool`: Логический тип данных, принимает значения `true` или `false`.

```csharp
csharpCopy codebool isTrue = true;
bool isFalse = false;
```

#### **Константы**

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

**Применение**: Константы обеспечивают стабильность значений в программе и облегчают понимание кода.

```csharp
csharpCopy codeconst double PI = 3.14159265359;
const int DAYS_IN_WEEK = 7;
```

#### **Прочие типы данных**

В дополнение к основным типам данных в C# существуют и другие, такие как:

* `byte`: 8-битное беззнаковое целое число.
* `decimal`: 128-битное число с фиксированной точкой для работы с финансовыми данными.

**Применение**: Используются для специфических задач, например, хранения малых беззнаковых чисел или финансовых величин.

```csharp
csharpCopy codebyte smallNumber = 200;
decimal financialValue = 1234.5678m;
```

Знание различных типов данных в C# помогает программисту эффективно выбирать подходящие инструменты для представления и обработки данных в зависимости от конкретной задачи. В этой главе мы рассмотрели основные типы данных и научились их применению в реальных сценариях программирования.

## Объявление и использование переменных

В мире программирования переменные играют ключевую роль, предоставляя средство для хранения и управления данными. Объявление переменной в C# включает в себя указание ее типа и, при необходимости, инициализацию. Давайте рассмотрим основы объявления и использования переменных:

#### **Объявление переменных**

Для объявления переменной в C# используется следующий синтаксис:

```
тип_данных имя_переменной;
```

где `тип_данных` - это тип переменной, а `имя_переменной` - это уникальное имя, которое вы выбираете. Например:

```csharp
int age;            // Объявление целочисленной переменной
double salary;      // Объявление переменной с плавающей точкой
string name;        // Объявление строковой переменной
```

#### **Инициализация переменных**

Инициализация переменных предполагает присвоение начального значения при их объявлении. Это может быть выполнено следующим образом:

```csharp
int quantity = 10;          // Объявление и инициализация целочисленной переменной
double temperature = 25.5;  // Объявление и инициализация переменной с плавающей точкой
string greeting = "Привет"; // Объявление и инициализация строковой переменной
```

#### **Использование переменных**

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

```
int a = 5;
int b = 10;
int sum = a + b; // Использование переменных для вычисления суммы
Console.WriteLine(sum); // Вывод результата
```

## Приведение типов

Приведение типов представляет собой процесс изменения типа переменной от одного к другому. В C# существует два вида приведения типов: явное и неявное.

#### **Явное приведение типов**

Явное приведение типов осуществляется с использованием оператора приведения. Например:

```csharp
csharpCopy codedouble d = 123.45;
int i = (int)d; // Явное приведение double к int
```

#### **Неявное приведение типов**

Неявное приведение типов автоматически выполняется компилятором. Например:

```csharp
csharpCopy codeint x = 5;
double y = x; // Неявное приведение int к double
```

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

С этими инструментами – объявлением переменных и приведением типов – вы можете более гибко управлять данными в вашей программе, что является ключевым моментом в разработке на C#. Они позволяют создавать более сложные и эффективные программы, а также обеспечивают точное управление данными в различных сценариях.

***

{% embed url="<https://www.youtube.com/watch?v=dDqvqWwAfW0>" fullWidth="true" %}

***

## Упражнения

#### **Упражнение 1: Практика объявления переменных**

Вам предстоит создать программу, которая будет сохранять информацию о студенте. Используйте разные типы данных для различных характеристик:

```csharp
csharpCopy code// Объявление переменных для хранения информации о студенте
string studentName;
int studentAge;
char gender;
double averageGrade;

// Заполнение переменных данными
studentName = "Иванов Иван";
studentAge = 20;
gender = 'M';
averageGrade = 4.5;

// Вывод информации на экран
Console.WriteLine("Имя студента: " + studentName);
Console.WriteLine("Возраст студента: " + studentAge);
Console.WriteLine("Пол студента: " + gender);
Console.WriteLine("Средний балл: " + averageGrade);
```

Ваша задача: Добавьте дополнительные характеристики студента и объявите переменные для их хранения. Используйте разные типы данных в соответствии с характером информации (например, дата рождения, адрес).

<details>

<summary>Решение</summary>

```csharp
// Объявление переменных для хранения информации о студенте
string studentName;
int studentAge;
char gender;
double averageGrade;
DateTime dateOfBirth;
string address;

// Заполнение переменных данными
studentName = "Иванов Иван";
studentAge = 20;
gender = 'M';
averageGrade = 4.5;
dateOfBirth = new DateTime(2002, 5, 15); // Пример даты рождения
address = "ул. Примерная, д. 123";

// Вывод информации на экран
Console.WriteLine("Имя студента: " + studentName);
Console.WriteLine("Возраст студента: " + studentAge);
Console.WriteLine("Пол студента: " + gender);
Console.WriteLine("Средний балл: " + averageGrade);
Console.WriteLine("Дата рождения: " + dateOfBirth.ToShortDateString());
Console.WriteLine("Адрес: " + address);
```

</details>

#### **Упражнение 2: Приведение типов и операции с переменными**

Представьте, что у вас есть следующая информация:

```csharp
csharpCopy codedouble pricePerItem = 19.99;
int quantity = 3;
```

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

Ваша задача:

1. Создайте переменную `totalCost` и рассчитайте общую стоимость покупки, умножив цену за единицу товара на количество товаров.
2. Выведите результат на экран в виде строки, например: "Общая стоимость покупки: $59.97".
3. После этого измените тип данных переменной `totalCost` на целочисленный (`int`) и повторите расчет. Выведите новый результат на экран.
4. Объясните, почему произошли изменения в результатах при изменении типа данных переменной `totalCost`.

<details>

<summary>Решение</summary>

```csharp
using System;

class Program
{
    static void Main()
    {
        // Исходные данные
        double pricePerItem = 19.99;
        int quantity = 3;

        // Расчет общей стоимости с использованием типа данных double
        double totalCostDouble = pricePerItem * quantity;

        // Вывод результата с использованием типа данных double
        Console.WriteLine("Общая стоимость покупки (double): $" + totalCostDouble);

        // Изменение типа данных переменной totalCost на int
        int totalCostInt = (int)(pricePerItem * quantity);

        // Вывод нового результата с использованием типа данных int
        Console.WriteLine("Общая стоимость покупки (int): $" + totalCostInt);

        // Объяснение изменений в результатах при изменении типа данных
        Console.WriteLine("При приведении к целочисленному типу (int), дробная часть была отброшена.");
    }
}
```

</details>

***

## Вопросы

#### **Основные типы данных в C#**

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

#### **Объявление и использование переменных**

* Как объявить переменную в C#? Приведите пример объявления переменной и присвоения ей значения.
* Что такое область видимости переменной, и как она определяет доступ к переменной в различных частях кода?

#### **Раздел: Приведение типов**

* Что представляет собой приведение типов в C#? Приведите пример неявного и явного приведения типов.
* Как избежать потери данных при приведении типов? Какие могут возникнуть проблемы при неудачном приведении типов?

#### **Основные типы данных в C# (повторение)**

* Какова роль типа данных `string` в C#? Приведите примеры использования строковых переменных.
* Как определить, сколько байт занимает переменная определенного типа данных в C#? Как это влияет на использование памяти в программе?

***

## Тесты

{% embed url="<https://docs.google.com/forms/d/e/1FAIpQLSdpZ_TMT-bw3qcX8moMtdV0XKz6ljnlG1tt1w116JuDbFgjdg/viewform?usp=sf_link>" fullWidth="true" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://axideli.gitbook.io/osnovy-programmirovaniya-na-yazyke-c/tipy-dannykh-i-peremennye.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
