Загрузка...

Изучаем программирование и C# вместе <3

Тема в разделе C# создана пользователем Karasu_san 16 ноя 2022. 1983 просмотра

Загрузка...
  1. Karasu_san
    Karasu_san Автор темы 16 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    Всем ку..

    Изучая C# я забил на него, последнее что я помню, я остановился на циклах.

    Эту тему я создал, по больше части, для себя...
    Но было бы неплохо поделится с вами как я буду изучать C# или уже изучил :thinking:
    3-4 раза в неделю, я постараюсь оставлять комментарий с кратким описанием того, что я изучил.

    Так же я буду оставлять источники откуда я брал инфу.


    А пока краткий экскурс.
    Языку C# в феврале 2023 года будет 11 лет :smart2011:
    На сегодня C# один из мощнейших ЯП (По инфе из инета он находится на 5 месте после Python, C, Java, C++)
    На данный момент на нём пишут от небольших приложений(парсеры, чекеры) до игр на движке Unity (Rust, SuperHOT, Genshin Impact)


    Текущей версией C# на 16.11.2022 является C# 11 вместе с .NET 7

    Когда говорят C#, нередко имеют в виду технологии платформы .NET (Windows Forms, Xamarin, WPF).
    Фреймворк .NET представляет мощную платформу для создания приложений.
    Можно выделить несколько его основных черт:

    • Поддержка нескольких языков.
      Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR)
      .NET поддерживает несколько языков: C#, Visual Basic .NET, C++, F#
    • Кроссплатформенность
      Думаю тут ничего пояснять не надо, написал приложение и смог его запустить на - Windows, MacOS, Linux, Android, iOS, Tizen.
    • Мощная библиотека классов.
      .NET представляет единую для всех поддерживаемых языков библиотеку классов. И какое бы приложение мы не собирались писать на C# - текстовый редактор, чат или сложный веб-сайт - так или иначе мы задействуем библиотеку классов .NET.
    • Производительность
      Согласно ряду тестов веб-приложения на .NET 7 в ряде категорий сильно опережают веб-приложения, построенные с помощью других технологий. Приложения на .NET 7 в принципе отличаются высокой производительностью.
    Компиляция
    Так как C# компилируемый язык, и наш ПК не может его прочитать, файл формата CS, где записан наш код, проходит через компилятор и преобразуется в исполняемый файл, (это будет либо файл формата .dll или .exe) и уже после компиляции наш код на высокоуровневом языке, в нашем случае C#, преобразуется в низкоуровневый язык, например Assembler и машинный код (11010000101110101101000110000011).
    Низкоуровневые языки, проще говоря, язык cоответствующий программам процессора.
    Некоторые могут задаться вопросом - "А почему нельзя сразу учить язык Assembler".
    Я отвечу на ваш вопрос 2-мя картинками (Оба варианта деление 13 на 2)
    Язык Assembler
    [IMG]
    Язык C#
    [IMG]

    В 1 варианте 4 строчки а в C# всего 2, разница не такая уж и большая, скажите вы.
    Но представьте код в 100 строчек, и это я привёл пример с простейшей задачей.
    Я сам ещё не гуглил как выглядят условия или циклы на языке Assembler, но надеюсь суть вы уловили

    Среда разработки Visual Studio.
    Приложение Visual Studio включает в себя: редактор кода с подсветкой синтаксиса, с помощью которого мы будем писать наш код.
    И сборщик, с помощью которого мы сможешь исполнить наш код, и проверить его работоспособность.
    При изучении далее будут разобраны и другие возможности Visual Studio.

    Как установить Visual Studio - C# и .NET | Начало работы с Visual Studio.

    To be continued
    _______________________________________________________________________________________________________________________________​


    План которого я постараюсь придерживаться для достижения базового уровня.(План был взят из какого то платного курса)
    Когда я изучу ту или иную тему, рядом с ней будет стоять смайлик:PepeYes:Получится ли у меня достичь всего что ниже до весны:thinking:

    Основы программирования :PepeYes:
    • Переменные
    • Наименование переменных
    • Типы переменных
    • Арифметические операторы
    • Логические операторы
    • Конкатенация
    • Интерполяция
    • Конвертация
    • Работа с консолью
    • Инкремент и декремент

    Условные операторы и циклы :PepeYes:
    • Условный оператор If
    • Логическое И и ИЛИ
    • Условный оператор Swtich case
    • Цикл while
    • Цикл for
    Массивы
    • Одномерные массивы
    • Многомерные массивы
    • Массив - ссылочный тип
    • Расширение массива
    • Строки - массив символов
    • Перебор массива с Foreach
    Функции
    • Функции
    • Функции с возвращаемыми значениями
    • Необязательные параметры
    • ref и out
    • Перегрузки
    Коллекции
    • List
    • Queue
    • Stack
    • Dictionary


    ООП
    • Что такое ООП
    • Отношения
    • Типизация
    • Абстракция
    • Инкапсуляция
    • Полиморфизм
    • Классы и объекты
    • Поля и модификаторы доступа
    • Методы
    • Конструкторы
    • Связь Has-a
    • Наследование (Is-a)
    • Свойства
    • Проблема свойств и массивов
    • Виртуальные методы
    • Цикл обновления
    • Интерфейсы=
    • Абстрактные классы
    • Статические члены
    • Статический конструктор
    • Структуры VS Класс
    • Определение структур
    Хоть я только начал изучать C# могу посоветовать бесплатный курс - https://ulearn.me/
    И сайт METANIT.COM
    Ограничение ответов в теме:
    Автор темы разрешил отвечать в теме только этим группам (и вышестоящим): Команда форума и Кураторы.
     
    16 ноя 2022 Изменено
  2. Karasu_san
    Karasu_san Автор темы 16 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    Продолжать, или никому не интересно :animehmm:

    Комментарии к моим сообщения разрешены кста, кто не заметил
     
    16 ноя 2022 Изменено
    1. Посмотреть предыдущие комментарии (6)
    2. syrok32
      Karasu_san, это круто, я тоже изучаю с# и заставлять себя что-то изучать тяжело, но ты прикольно придумал удачи тебе :yodaluv:
    3. LVLUPer
      Так держать! Надеюсь, у тебя получится. Как раз начал ASP .NET для Бэка изучать@syrok32,
  3. Karasu_san
    Karasu_san Автор темы 16 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    День 1.
    Переменные, наименование переменных, типы переменных.
    Переменная - область в оперативной памяти, которая имеет: 1 - Тип, 2 - Имя, 3 - Значение. (Ещё адрес)
    Значение переменной может быть изменено в ходе программы.


    Объявление переменной - её создание в тексте программы.
    Инициализация - присвоение переменной начального значения.

    C#

    // Cинтаксис объявления и инициализации переменной
    // Тип Имя_Переменной = значение;
    // int ammo = 30;

    int ammo; // Это объявление переменной
    ammo = 30; // Это инициализация переменной

    /*
    Объявить и инициализировать переменную можно в одной строке
    */

    int ammo = 30; // Переменная была объявлена и инициализирована в одной строке

    /*
    Так же в 1 строке можно объявить сразу несколько переменных одного типа.
    */
    int ammo = 30, health = 100; // 2 переменных одного типа, были объявлены и инициализированы в одной строке
    Переменной не существует в памяти, пока она не будет инициализирована.

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

    CamelCase. Например EnemyHealth - первые буквы слов написаны большими буквами, но наиболее распространённым является lowerCamelCase - то есть secondPlayerHealth

    Snake case. Например enemy_health

    Например
    Правильное указание имён переменных:

    int EnemyHealth = 200;
    int _PlayerHealth = 100;


    Не правильное указание имён:

    int 1playerhealth = 100; // Ошибка.. (Переменная не может начинаться с числа) Правильно будет - int FirstPlayerHealth = 100;
    int SecondPlayer Health = 100; //Ошибка.. (Пробел не допустим в наименовании переменной) Правильно будет - int SecondPlayerHealth = 100; или int SecondPlayer_Health = 100;

    Типы данных
    C#

    //Типы данных
    //Я выделю несколько основных типов данных
    //С полным списком можете ознакомиться тут - https://metanit.com/sharp/tutorial/2.1.php

    //bool - хранит значения true или false
    bool IsAlive = true;
    bool IsDead = false;

    //int - хранит целое число
    int ammo = 30;
    int health = 100;

    //string - хранит набор символов Unicode
    string name = "Akim";

    //double - хранит число с плавающей точкой от ±5.0*10-324 до ±1.7*10308
    double MoneyOnTheCard = 685.24;

    //float хранит число с плавающей точкой от -3.4*1038 до 3.4*1038
    float MoneyOnTheCard = 685.24;
     
    1. Посмотреть предыдущие комментарии (1)
    2. Karasu_san Автор темы
      Интересно :thinking:
      Немного погуглил, да ты прав.
      А еще я выпал с названия шашлычный-регистр kebab-case :smile_laugh:
    3. dobvik
      Karasu_san, Не все переменные принято писать через lowerCamelCase, например "глобальные" переменные, константы пишут через UpperCamelCase.
    4. Karasu_san Автор темы
      Да, мне это уже объяснили, отредактировать сообщение я у же не могу
  4. Karasu_san
    Karasu_san Автор темы 19 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    День 2.
    Арифметические операторы, Логические операторы, Конкатенация.

    Арифметические операторы
    нам известны ещё с уроков математики, это: (+ - / * ).
    Сложение, вычитание, умножение - работают как мы привыкли считать на математике, а вот с делением надо кое что уточнить.
    C

    // Задам целочисленную переменную number1 и number2
    int number1 = 5, number2 = 2;

    // Выводим в консоль 5/2
    Console.WriteLine($"number1/number2");
    На выходе мы получим цифру 2, так как мы делим два целочисленных числа, и у них не может быть дробной части.
    Для того, что бы получить в ответе 2.5, нам нужен тип данных с плавающей запятой, тип double или float
    C

    //Есть 2 способа решить эту задачу

    // 1 Способ
    // Задаём переменные number1 и number2 с плавающей запятой.
    float otvet;
    int number1 = 5, number2 = 2;
    otvet = Convert.ToSingle(number1) / number2; // Здесь я в переменную типа float поместил 2 переменных типа int, одну из которых я конвертировал в float Convert.ToSingle(number1)
    Console.WriteLine(otvet); // В консоле мы получим 2,5

    //2 Способ
    float number1 = 5, number2 = 2;
    float otvet = number1 / number2/
    Console.WriteLine(otvet); // Так же получим 2,5
    Оператор деление по модулю(остаток от деления) - %
    C

    int number1 = 5, number2 = 2;
    Console.WriteLine(${number1 % number2});
    //В ответе мы получим цифру 1
    //Проще говоря 4 поделилось нацело, и вывелась цифра 1
    //% - Остаток от целого деления
    Есть ещё операторы += -= *= /= %=
    Они используются для того что бы работать с одной переменной.
    Допустим есть переменна candyNum
    int candyNum = 5;
    И мы хотим прибавить ещё 2 конфеты к переменной.
    Новичёк написал бы так: candyNum = candyNum + 2;
    А более менее знающий человек написал бы так: candyNum += 2;

    Приоритет у операторов такой же как и в математике из школы.
    Логические операторы
    Логические операторы так же могут быть известны вам со школы.
    Операторы ( ==, !=, >, <, >=, <=)
    == - Оператор сравнения
    != - Не равно
    > - Больше
    < - Меньше
    >= - Больше или равно
    <= - Меньше или равно
    Логические операторы возвращают булево true или false
    C#

    bool a;
    Console.WriteLine(a = 5 == 3); // Консоль выведет False так как 5 не равняется 3
    Console.WriteLine(a = 5 == 5); // Консоль выведет True так как 5 равняется 5[/CODE]

    Console.WriteLine(a = 5 != 3); // Консоль выведет True так как 5 не равняется 3[/CODE]
    Console.WriteLine(a = 5 != 5); // Консоль выведет False так как 5 равняется 5[/CODE]

    Console.WriteLine(a = 5 > 3); // Консоль выведет True так как 3 меньше 5[/CODE]
    Console.WriteLine(a = 5 > 5); // Консоль выведет False так как 5 и 5 раны[/CODE]
    Console.WriteLine(a = 5 < 3); // Консоль выведет False так как 5 больше 3[/CODE]

    Console.WriteLine(a = 5 >= 3); // Консоль выведет True так как 5 больше или равно 3[/CODE]
    Console.WriteLine(a = 5 <= 5); // Консоль выведет True так как 5 меньше или равно 5[/CODE]
    Console.WriteLine(a = 5 <= 3); // Консоль выведет False так как 5 больше или равно 3[/CODE]

    Конкатенация
    Конкатенация строк, это почти тоже самое что и работать с числами
    Например
    string str1 = "Привет,", str2 = "Лолстим!";
    string otvet = str1 + str2;
    Console.WriteLine(otvet); // Консоль выведет - Привет,Лолстим!

    Но допустим я хочу поставить пробел после запятой, для этого я могу написать так.
    string otvet = str1 + " " + str2;
    Console.WriteLine(otvet); // Консоль выведет - Привет, Лолстим!


    День 2 Конец
    Дз ещё крч вам, из какого то учебника
    Даны три целых числа: A, B, C. Проверить истинность высказывания: «Число B находится между числами A и C».
    Если будет не в падлу, в коментах завтра оставлю ответ.
     
    19 ноя 2022 Изменено
  5. Karasu_san
    Karasu_san Автор темы 20 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    День 3.
    Интерполяция, конвертация, работа с консолью, инкремент и декремент

    Интерполяция
    Соединять строки можно не только с помощью конкатенации, интерполяцию вы уже могли наблюдать в моём коде выше.
    Пример интерполяции
    C#

    [I]int age = 18;
    string name = Akim;[/I]

    //Только начавший изучение человек, не знающий что такое интерполяция, написал бы так
    Console.WriteLine("Ваше имя " + name + "." + " Ваш возраст " + age + ".");
    //Напишем тоже самое, но с использованием интерполяции.
    Console.WriteLine($"Ваше имя {name}. Ваш возраст {age}."); //Перед кавычками ставим доллар. Далее внутри кавычек нам нужны фигурные скобки {} внутри которых мы пишем имя переменной которую хотим вывести
    //Это куда удобнее и читабельнее чем в первом варианте


    Конвертация
    Конвертацию вы могли уже видеть в моём коде "День 2"
    Конвертация данных одна из важных тем которая нам пригодится.

    Например, c помощью конвертации мы можем из int сделать string или наоборот
    Допустим у нас есть переменная string со значением "17" и мы хотим конвертировать её в тип данных int
    C#

    string str = "17";
    int number;
    //И для того что бы конвертировать строку в число нам нужно
    number = Convert.ToInt32(str);
    Console.WriteLine(number); //Выведет в консоль число 17
    Console.WriteLine(number + 3); //Выведет в консоль число 20
    Если вы попытаетесь прибавить число к переменной с типом string, вам вылезет ошибка
    Конвертацию всех данных я разбирать не буду, подробно прочитать о конвертации вы можете тут - https://learn.microsoft.com/ru-ru/dotnet/api/system.convert?view=net-7.0
    Но я выделю ещё конвертацию в тип bool которая может иметь значения true или false.
    При конвертации будет возвращаться true, если значение f не равно нулю; в противном случае — false
    bool f = Convert.ToBoolean(0);
    Console.WriteLine(f);

    Работа с консолью
    Мы уже умеем выводить данные в консоль при помощи Console.WriteLine();
    Но если мы хотим через консоль сами задавать значения переменным?
    Для этого используют Console.ReadLine();
    C#

    string name;
    int age;
    Console.Write("Введите ваш ник");
    name = Console.ReadLine();
    Console.Write("Введите ваш возраст");
    age = Console.ReadLine(); // Если вы сделаете так, то у вас будет ошибка. Так как при чтении, Console.ReadLine(); пытается преобразовать string в int;
    age = Convert.ToInt32(Console.ReadLine()); //Для того что бы присвоить переменной age типа int значение из консоли, нужно применить Convert.ToInt32

    Console.WriteLine($"Ваш ник {name} ваш возраст {age}"); // Консоль выведет ваш ник и возраст которые вы ввели в консоль
    Инкремент и декремент
    Допустим есть переменная int a = 0; и я хочу прибавить к ней единицу
    Для этого я использую инкремент a++;
    C#

    int a = 0;
    a++;
    Console.WriteLine(a); // Консоль выведет 1;

    Но а если я хочу вычесть единицу
    Для этого я использую декремент a--;

    int a = 0;
    a--;
    Console.WriteLine(a); // Консоль выведет -1;

    Так же у инкремента и декремента существует префиксная форма, до этого я использовал постфиксную форму инкремента и декремента ++a, --a
    В чём же их различие
    Постфиксная форма прибавляет единицу после того как с переменной что то сделали
    например

    int a = 0;
    Console.WriteLine(a++); // Вывод - 0
    Console.WriteLine(a); // Вывод - 1
    В этом примере переменная была объявлена, выведена первый раз, после чего инкремент прибавил к ней единицу, второй вывод имеет значение после того, как инкремент сработал
    В префиксной форме наоборот

    int a = 0;
    Console.WriteLine(++a); // Вывод - 1
    Console.WriteLine(a); // Вывод - 1
    В этом примере префиксный инкремент сразу прибавил единицу к переменной, не ожидая пока с ней произведут какое либо действие.
    ВНИМАНИЕ
    У инкремента и декремент высший приоритет в арифметических операциях
     
    1. Diazzz16
      Karasu_san, интерполяцию кстати затрагивают в основном в платных курсах, на бесплатных не так часто говорят, еще видел у знакомого на работе... заставляли писать без нее, чтоб больше времени тратил :DD
      коды понятные пока что, очень круто! если это увидят новички, то им будет легко)
      5 дек 2022 Изменено
  6. Karasu_san
    Karasu_san Автор темы 22 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    День 4.
    Условный оператор If, Логическое И и ИЛИ, Условная конструкция Switch case


    Конструкция If - одна из базовых компонентов ЯП, который направляет работу программы по одному из путей, в зависимости от условий.
    синтаксис условной конструкции if
    if(условие выполнения)
    {
    //Блок кода, который будет выполнятся если условие == true
    }
    else
    {
    //Блок кода, который будет выполнятся если условие == false
    }
    else if(Условие)
    {
    // Блок кода, который будет выполнятся если условие конструкции if == false, проверяется условие конструкции if else
    }

    Пример
    C#
    int age;
    age = Convert.ToInt32(Console.ReadLine());

    if(age >= 18)
    {
    Console.WriteLine("Добро пожаловать");
    }
    else
    {
    Console.WriteLine($"Пшёл вон, приходи через {18 - age} лет");
    }
    Ввод: 20
    Вывод: Добро пожаловать
    Ввод: 13
    Вывод: Пшёл вон, приходи через 5 лет
    Логическое И и ИЛИ
    ИЛИ - || // Возвращает true если хотя бы одно из условий верно, в обратном случае false
    И - && // Возвращает true когда оба условия верны, в обратном случае false

    Пример с использованием логического ИЛИ и И

    C
    // Если у пользователя денег больше, чем 1000 или уровень больше 20, то открыть доступ
    // Иначе выгнать пользователя

    int money, level;
    Console.Write("Сколько у вас денег?");
    money = Convert.ToInt32(Console.ReadLine());
    Console.Write("Какой у вас уровень?");
    level = Convert.ToInt32(Console.ReadLine());

    if(money >= 1000 || level >= 20) // Вернёт true если хотя бы одно выражение верно
    {
    Console.WriteLine("Доступ открыт");
    }
    else
    {
    Console.WriteLine("Пшёл вон");
    }
    Ввод: 1263 23
    Вывод: Доступ открыт

    Ввод: 2330 5
    Вывод: Доступ открыт

    Ввод: 332 25
    Вывод: Доступ открыт

    Ввод: 332 3
    Вывод: Пшёл вон

    // Если у пользователя денег больше, чем 1000 и уровень больше 20, то открыть доступ
    // Иначе выгнать пользователя

    int money, level;
    Console.Write("Сколько у вас денег?");
    money = Convert.ToInt32(Console.ReadLine());
    Console.Write("Какой у вас уровень?");
    level = Convert.ToInt32(Console.ReadLine());

    if(money >= 1000 && level >= 20) // Вернёт true если оба выражения верны
    {
    Console.WriteLine("Доступ открыт");
    }
    else
    {
    Console.WriteLine("Пшёл вон");
    }
    Ввод: 1263 23
    Вывод: Доступ открыт

    Ввод: 2330 5
    Вывод: Пшёл вон

    Ввод: 332 25
    Вывод: Пшёл вон

    Ввод: 332 3
    Вывод: Пшёл вон


    Условный оператор swtich

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

    switch (Переменная или выражение) // Обычно здесь находиться переменная из которой берут значения и сравнивают его в дальнейшем
    {
    case Значение_1:
    // Блок кода выполняется, если Значение_1 == значению переменной
    break;
    case Значение_2:
    // Блок кода выполняется, если Значение_2 == значению переменной
    break;
    //...
    default:
    // Блок кода выполняется, если среди перечисленных значений в case нет подходящего
    break;

    }
    Пример использования swtich/case

    C#
    int weekDay;
    Console.Write("Введите день недели от 1 до 7 ");
    weekDay = Convert.ToInt32(Console.ReadLine());

    switch (weekDay)
    {
    case 1:
    Console.WriteLine("Понедельник");
    break;
    case 2:
    Console.WriteLine("Вторник");
    break;
    case 3:
    Console.WriteLine("Среда");
    break;
    case 4:
    Console.WriteLine("Четверг");
    break;
    case 5:
    Console.WriteLine("Пятница");
    break;
    case 6:
    Console.WriteLine("Суббота");
    break;
    case 7:
    Console.WriteLine("Воскресенье");
    break;

    default:
    Console.WriteLine("Введите число от 1 до 7");
    break;
    }
    Ввод: 1
    Вывод: Понедельник
    Ввод: 2
    Вывод: Вторник
    ...
    Ввод: 7
    Вывод: Воскресенье

    Ввод: 23
    Вывод: Введите число от 1 до 7
    День 4 конец
     
    22 ноя 2022 Изменено
    1. Посмотреть предыдущие комментарии (2)
    2. Karasu_san Автор темы
      Некоторые челы место свичей, if, else if юзают, их конечно можно использовать, но если вдруг понадобится расширять в будущем, if'ы очень не удобно расширять, и тупо так делать
    3. Karasu_san Автор темы
      А и в свичах низя вроде логические операторы юзать
    4. trogdor
      Karasu_san, расширение конструкций if и switch в ооп языках уже признак говнокода с нарушением принципа открытости/закрытости.
  7. Karasu_san
    Karasu_san Автор темы 24 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    День 5.
    Циклы While, For
    Циклы - конструкции, позволяющие в зависимости от условия, выполнить действие множество раз.

    Цикл While - цикл с условием, т.е цикл будет выполнятся пока условие == true
    Cинтаксис цикла While
    While(Условие)
    {
    Блок кода, который будет выполняться пока условие == true
    }
    Пример использования While

    C#

    int number = 0;
    while (number < 10) //Цикл будет выполняться пока number меньше 10;
    {
    number++; // Инкремент увеличивающий number на 1, без инкремента цикл будет длиться бесконечно, так как значение [I]переменной не изменяется
    Console.WriteLine(number);
    }
    Вывод
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Использование оператора break в цикле
    //Оператор break насильно прерывает цикл
    int number = 0;
    while (number < 10) //Цикл будет выполняться пока number меньше 10;
    {
    number++; // Инкремент увеличивающий number на 1, без инкремента цикл будет длиться бесконечно, так как значение переменной не изменяется
    Console.WriteLine(number);
    if (number == 6)
    {
    break; // Прервёт цикл, если значение number == 6
    }
    }


    //Пример использования while для повторения программы
    string exitInput;
    bool exit = false;
    int age;
    while (!exit)
    {
    Console.Write("Введите ваш возраст - ");
    age = Convert.ToInt32(Console.ReadLine());
    if (age >= 18)
    {
    Console.WriteLine("Добро пожаловать");
    }
    else
    {
    Console.WriteLine("Пшёл вон");
    }
    Console.Write("Желаете ли вы выйти из программы? - ");
    exitInput = Console.ReadLine();
    if (exitInput == "Да" || exitInput == "да")
    {
    exit = true;
    }
    else if (exitInput == "Нет" || exitInput == "нет")
    {
    exit = false;
    }

    }
    Цикл For - отличается от цикла While тем, что for это цикл с параметром.
    Синтаксис цикла For
    for (объявление переменной; условие; правило изменения переменной)
    {
    // Блок кода, который будет выполняться пока условие == true
    }

    Пример использования For
    C#

    for(int i = 0; i < 10; i++)
    {
    Console.WriteLine(i);
    }
    Вывод
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

    Если с циклом While понятно как он работает, то с циклом for нужно уточнить(Алгоритм по которому выполняется цикл For)
    1. Инициализация переменной
    2. Проверка условия
    3. Выполнение первой итерации (Итерация - повторение какого либо действия)
    4. Переход к блоку с изменением переменной (Там где стоит инкремент i++)
    5. Проверка условия
    6. Выполнение второй итерации
    7. Переход к блоку с изменением переменной
    8. Проверка условия
    9. Выполнение второй итерации
    И так далее, пока условие не будет == false (Например когда переменная i cтанет больше 10) - из примера выше

    Когда использовать цикл for, а когда while?
    for используют когда есть чёткие границы выполнения цикла и чёткий шаг. Например выводить все чётные числа до 100
    C#

    for (int i = 0, i <= 100; i+=2)
    {
    Console.WriteLine(i);
    }
    // Вывод всех чётных чисел от 0 до 100 включительно/
    while используют когда непонятно сколько раз будет выполняться цикл, например в моём коде выше, где пользователь выбирает когда выйти из программы
    Конец дня 5.
     
    24 ноя 2022 Изменено
  8. Karasu_san
    Karasu_san Автор темы 27 ноя 2022 Заблокирован(а) 5016 1 сен 2018
    День 6
    Одномерные массивы (дополнительно Random)
    Массивы - набор элементов одного типа, объединённых одним именем.


    Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер.
    Элементы в массивах нумеруются с 0, например если массив будет состоять из 5 элементов, то они будут иметь номера - 0,1,2,3,4

    Объявление одномерного массива
    1) тип[] имя_массива;
    В этом случае описывается ссылка на массив, которую можно будет использовать для адресации на уже существующий массив.
    2) тип[] имя_массива = new тип[размер];
    Тут тоже самое, но выделяется память под указанное количество элементов.

    int[] nums = new int[4];

    Объявлен массив nums, который будет хранить данные типа int.
    С помощью операции new, выделяется память для 4 элементов массива: new int[4] (Число 4 еще называют длиной массива)
    При таком определении все элементы получают значение по умолчанию, которое предусмотрено для их типа.
    Для типа int значение по умолчанию - 0.
    Элементы массива инициализируются значениями, которые приняты для того или иного типа:
    1. Числовые типы - нулями
    2. Строковый тип - пустыми строками
    3. Cимволы - пробелами
    4. Объекты ссылочных типов - null`ми
    Пример использования Одномерного массива.
    C#

    int[] nums = new int[5]; // На данный момент в массиве 5 нулей

    Console.WriteLine(nums); // Вывести в консоль весь массив таким образом не получиться
    // Можно использовать цикл for

    for (int i = 0; i < nums.Length; i++) // C помощью nums.Length можно получить длину массива.
    {
    Console.WriteLine(nums[i]);
    // C помощь nums[i] я обратился к индексу элементов, вместо i можно написать 0, и выведется первый элемент массива
    }
    // Вывод
    0
    0
    0
    0
    0
    // Так же с помощью индекса можно присвоить новое значение элементу в массиве
    int[] nums = new int[5];
    nums[2] = 5; // Третьему элементу массива присвоена цифра 5
    for (int i = 0; i < nums.Length; i++)
    {
    Console.WriteLine(nums[i]);
    }
    Вывод
    0
    0
    5
    0
    0
    Заполнение массива рандомными числами.
    Так как я забыл написать о рандоме раньше, придётся написать тут пока не поздно.
    Код

    //Создание объекта для генерации чисел
    Random randomNum = new Random();

    //Получить случайное целочисленное число
    int value = randomNum.Next(); // Рандомное число от 0 до 2147483647 хотя это и не uint, но генерирует начиная с нуля, если самому не указать диапозон
    int value2 = randomNum.Next(-2147483647, 2147483647); // Рандомное число от -2147483647 до 2147483647
    int value3 = randomNum.Next(3, 20); // Рандомное число от 3 до 20
    //Получить случайное число с плавающей запятой
    double doubleValue = randomNum.NextDouble(); // Рандомная дробная часть от 0,0 до 1,0
    //Вывод полученного числа в консоль
    double result = value3 + doubleValue;
    Console.WriteLine(value);
    Console.WriteLine(value2);
    Console.WriteLine(value3);
    Console.WriteLine(doubleValue);
    Console.WriteLine(Math.Round(result, 2)); //Math.Round(переменная, сколько цифр после запятой оставить)
    Вывод
    [IMG]
    С рандомом разобрались, теперь можно и массив заполнить.
    C#
    int[] numbers = new int[10];
    Random randomNum = new Random();

    for (int i = 0; i < numbers.Length; i++)
    {
    numbers[i] = randomNum.Next(1, 20);
    Console.Write(numbers[i]);
    }

    //Так же можно заполнить массив ручками
    int[] numbers = {1, 2, 3, 4, 5, 6, 7, 9};
    int[] numbers = new int[4] {1, 2, 3, 4};
    int[] numbers = new int[4] {1, 2, 3, 4, 5, 6, 7}; //будет ошибка, так как массив имеет размер == 4
    Вывод
    [IMG]
     
    27 ноя 2022 Изменено
    1. C_Sharp
      Karasu_san, и не стоит забывать, что массив может быть типом object и хранить любые значения. И было бы классно расписать чем оно отличается от типа var.
  9. Karasu_san
    Karasu_san Автор темы 1 дек 2022 Заблокирован(а) 5016 1 сен 2018
    День 7
    Многомерные массивы
    Многомерные массивы имеют более 1 измерения, чаще всего используют двумерные массивы, которые представляют собой таблицу(матрицу)
    Двумерные массивы имеют 2 индекса:
    1 - Номер строки
    2 - Номер столбца
    Можно сравнить с игрой "Морской бой"
    [IMG]
    Но вместо букв цифры, и счёт начинается с нуля.
    Есть ещё 3-х мерный, 4-х мерный и т.д массив
    3-х мерный массив это например куб, в котором не 2 координаты, а 3.
    1 - номер по горизонтали (Строка)
    2 - номер по вертикали (Столбец)
    3 - номер в пространстве ( Хз как тут записать )

    Объявление двухмерного массива
    1 - тип[,] имя_массива;
    2 - тип[,] имя_массива = new тип[размер1, размер2]; - размер1 - кол-во строк. размер2 - кол-во столбцов
    Сокращённая инициализация двумерного массива.
    1 - тип[,] имя_массива = {{},{},{}};
    2 - тип[,] имя_массива = new тип[размер] {{},{},{}};

    Пример создания двумерного массива
    C#

    int [,] array = {{0, 1, 2, 3},{0, 4, 5, 6},{0, 7, 8, 9}}; // Такой массив не удобно читать, можно написать немного удобней для чтения

    // Тот же самый двухмерный массив, но выстроенный как таблица
    int [,] array = { //Строки
    {0, 1, 2, 3}, //0
    {0, 4, 5, 6}, //1
    {0, 7, 8, 9}}; //2

    //Столбцы 0 1 2 3
    //В каждой строке обязательно должно быть одинаковое количество элементов/
    //Иначе будет ошибка
    Console.WriteLine(array[2, 3]); // 2 - Строка 3 - Столбец
    Вывод:9
    Console.WriteLine(array[1, 2]);
    Вывод:5
    Console.WriteLine(array[0, 1]);
    Вывод:1
    Вывод двухмерного массива в консоль
    C#

    // Вывести двухмерный массив, как я это делал с одномерным массивом, не получится
    // Console.WriteLine(array.Length); выведет количество всех элементов в массиве array
    // Но с помощью метода GetLength можно получить размер определенного измерения.
    // При работе с двухмерным массивом, метод GetLength может принять значение 0 или 1 - Столбец или строку соответственно
    int [,] array = {
    {0, 1, 2, 3},
    {0, 4, 5, 6},
    {0, 7, 8, 9}};
    Console.WriteLine(array.GetLength(0)); // - Выведет кол-во строк массива
    Console.WriteLine(array.GetLength(1)); // - Выведет кол-во столбцов массива
    for (int i = 0; i < array.GetLength(0); i++) // Этот цикл будет перебирать строки массива
    {
    for (int j = 0; j < array.GetLength(1); j++) // Этот цикл будет перебирать столбцы массива
    {
    Console.Write(array[i, j] + " "); // Выводит строки
    }
    Console.WriteLine(); // Переносит строку после выполнения вложенного цикла
    }
    Вывод: Вывод1 ниже в спойлере
    // Обратите внимание что вложенный цикл, не может иметь такое же имя переменной как и во внешнем цикле
    // И ещё расскажу как работает этот цикл со вложенным в него циклом
    // Пускай цикл с переменой i будет - A, цикл с переменной j - B
    // За 1 итерацию цикла A, проходит целый вложенный цикл B
    // Т.е цикл A выбирает строку, а цикл B перебирает столбцы этой строки
    // И пока цикл B не завершит перебор столбцов, вторая итерация цикла A не начнётся.
    [IMG]
    Заполнение двухмерного массива рандомными числами
    C#
    int [,] array = new int[5, 5];
    Random rand = new Random();
    for (int i = 0; i < array.GetLength(0); i++)
    {
    for (int j = 0; j < array.GetLength(1); j++)
    {
    array[i, j] = rand.Next(0, 9);
    Console.Write(array[i, j] + " ");
    }
    Console.WriteLine();
    }
    Вывод: Вывод2 ниже в спойлере
    [IMG]
     
    1. Diazzz16
      Karasu_san, добавил в закладки, продолжай, братик, обязательно изучу твой материал на следующей недели!
  10. Karasu_san
    Karasu_san Автор темы 8 дек 2022 Заблокирован(а) 5016 1 сен 2018
    День 8
    Массив - ссылочный тип

    Объясню что это значит на примере.
    C#

    int[] array = new int[5];
    int[] tempArray = new int[3];

    array = tempArray; // Присваивание ссылки, то есть теперь array и tempArray ccылаются на одну и ту же область памяти.
    array[0] = 3;
    Console.WriteLine(array[0]);
    Console.WriteLine(tempArray[0]);
    Вывод
    3
    3
    // Ещё проще говоря эти 2 массива работают только с одной областью памяти, а не создаётся ещё одна :finger_up:
    // Ещё дополню, область памяти на которую ссылался массив array, до присваивания к нему tempArray, стёрлась из памяти
    // Надеюсь понятно объяснил, а то 2 часа ночи щас :smart2011:
    Расширение массива
    Объясню на примере
    C#

    int[] numbers = new int[5] { 1, 3, 5, 3, 5 };
    Console.WriteLine(numbers.Length); // Вывод 5
    int[] tempNumbers = new int[numbers.Length + 5]; // Массив tempNumbers состоит из длинны масива numbers и ещё + 5
    Console.WriteLine(tempNumbers.Length); // Вывод 10
    for (int i = 0; i < numbers.Length; i++)
    {
    Console.Write($"{numbers[i]}"); // Вывод элементов массива numbers - 13535
    }
    Console.WriteLine();
    for (int i = 0; i < tempNumbers.Length; i++)
    {
    Console.Write($"{tempNumbers[i]}"); // Вывод элементов массива tempNumbers, но все элементы массива получили значение по умолчанию - 0000000000
    }
    Console.WriteLine();
    for (int i = 0; i < numbers.Length; i++)
    {
    tempNumbers[i] = numbers[i]; // Переписываем значения из массива numbers в tempNumbers
    }
    Console.WriteLine();
    for (int i = 0; i < tempNumbers.Length; i++)
    {
    Console.Write($"{tempNumbers[i]}"); // Вывод элементов массива tempNumbers - 1353500000
    }
     
    1. C_Sharp
      Karasu_san, Лучше сразу разобрать значимые типы и ссылочные. Почему массив ссылочный тип. Где хранятся ссылки и значения. Мне кажется так будет проще построить полную картину происходящего :)
    2. Karasu_san Автор темы
      День 8.1
      Строки - массив символов, Перебор массива с Foreach


      Строки - массив символов
      Cтроки или же, например, тип string - это массив символов, к его элементам можно так же обратиться по индексу.
      C#

      string str = "lolzteam";
      Console.WriteLine(str[1]); // Вывод: o
      Менять символы с помощью str[1] = 'j'; не получится так как string используется только для чтения.

      Перебор массива с Foreach
      Цикл foreach позволяет перебрать массив не используя индексы.
      Как я до этого перебирал массивы
      C#

      int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
      for (int i = 0; i < nums.Length; i++)
      {
      Console.WriteLine(nums[i]);
      }
      Разберём этот же массив но используя foreach
      Синтаксис foreach
      foreach(var item in collection)
      {
      }
      var - тип данных, с которым мы работаем
      item - переменная которую вы определяете в скобках
      collection - коллекция, то есть массив или строка(о чём я писал выше)

      C#

      int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
      foreach (int number in nums)
      {
      Console.WriteLine(number);
      }
      Из массива nums берётся элемент и записывается в переменную number и выводиться в консоль.
  11. Karasu_san
    Karasu_san Автор темы 2 янв 2023 Заблокирован(а) 5016 1 сен 2018
    Ну вот и прошла зимняя сессия, наступил новый год.
    Пора дальше учить C#
    Функции


    Набор каких то именованных данных блоков которые имеют какой то список данных на вход, и имеют что то на выход.

    Метод объявляется с использованием сигнатуры, которая состоит из:
    Модификатор доступа - откуда эту функцию можно будет вызвать
    Например
    - private - допускает доступ к функции только из содержащего её класса или структуры.
    - public - доступ в любом фрагменте кода, в рамках приложения.
    - protected - позволяет получить доступ из содержащего класса или из производных классов
    - internal - доступ из файлов внутри одной сборки
    - static - функция является статическим членом класса, а не членом экземпляра объекта


    Тип возвращаемого значения - используется для указания типа данных, возвращаемого значения.
    Если функция не возвращает значение, используйте void

    Имя функции - функция должна иметь имя, что бы можно было вызвать функцию в коде. Функции принято называть глаголом или глаголом с существительным, пример ниже

    Список аргументов - разделённый запятыми список агрументов, передаваемых в функцию.

    Пример функции
    CSHARP
    static void sayHello()
    {
    Console.WriteLine("Hello, lolzteam");
    }
    static - модификатор доступа
    void - так как функция ничего не возвращает, используется void
    sayHello - имя функции
    аргументы пусты, так как передавать в функцию нам нечего.


    CSHARP
    static void sayHello()
    {
    Console.WriteLine("Hello, lolzteam");
    }

    sayHello();
    sayHello();
    sayHello();
    sayHello();
    Console.ReadLine();

    Пример использования функции из курса который я смотрю
    *Одно из главных предназначений функции - избавление от добирающегося кода
    CSHARP
    static void Main(string[] args)
    {
    Console.WriteLine("Привет!");
    Console.WriteLine("Ты здесь?");
    writeError("Нет интернета!");
    Console.WriteLine("Cтранно...");
    writeError("Оплатите интернет!!!"); // В круглых скобках аргумент, который передаётся в функцию writeError
    }

    static void writeError(string text) // В круглых скобках указываются входные данные (параметры), в нашем случае text который задаётся программистом
    {
    ConsoleColor defaultColor = Console.ForegroundColor;
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine(text);
    Console.ForegroundColor = defaultColor;
    }
    Важно - параметр это то, что функция хочет получить. А аргумент - то, что мы передаём функции

    Без функции код бы выглядел не очень
    CSHARP

    static void Main(string[] args)
    {
    Console.WriteLine("Привет!");
    Console.WriteLine("Ты здесь?");
    ConsoleColor defaultColor = Console.ForegroundColor; // Дублирующийся код
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("Нет интернета");
    Console.ForegroundColor = defaultColor;
    Console.WriteLine("Странно...");
    ConsoleColor defaultColor = Console.ForegroundColor; // Дублирующийся код
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("Оплатите интернет!!!");
    Console.ForegroundColor = defaultColor;
    }
    Возврат значений и return
    CSHARP

    static void Main(string[] args)
    {
    int x = 3, y = 8, sum;
    sum = Sum(x, y);
    Console.WriteLine(sum);
    }
    static int Sum(int number1, int number2)
    {
    int sum;
    sum = number1 + number2;
    return sum;
    }

    Необязательные параметры
    Так же пример из курса который я смотрю

    static void Main(string[] args)
    {
    Console.WriteLine("Привет!");
    Console.WriteLine("Ты здесь?");
    writeError("Нет интернета!", ConsoleColor.Green, symbol: '@');
    Console.WriteLine("Cтранно...");
    writeError("Оплатите интернет!!!");
    }
    CSHARP

    static void writeError(string text, ConsoleColor color = ConsoleColor.Red, char symbol = '!') //
    {
    ConsoleColor defaultColor = Console.ForegroundColor;
    Console.ForegroundColor = color;
    Console.WriteLine(symbol + text);
    Console.ForegroundColor = defaultColor;
    }
    всё что идёт после string text, является необязательными параметрами, то есть если их не указывать в аргументе, они будут иметь значение по умолчанию указанное после =
     
    2 янв 2023 Изменено
    1. Senpai_Edit
      Karasu_san, такс, хотел бы задать вопрос.
      Может и глупый, и ты говорил, но все же хотел бы, чтобы ты сказал.
      Изучения языка ты проходишь на основе платного курса или же просто с того курса и метанита, что ты оставил в конце статьи ?
      Просто ты немного замотивировал меня, своими стараниями и отчетами ахах
    2. Karasu_san Автор темы
      А бля, забыл ссылку оставить
  12. Karasu_san
    Karasu_san Автор темы 3 янв 2023 Заблокирован(а) 5016 1 сен 2018
    ref и out

    Например есть такой код

    CSHARP
    internal class Program
    {
    static void Main(string[] args)
    {
    int sum = 0, x = 1, y = 5;
    Add(sum, x, y);

    Console.WriteLine(sum);
    }

    static void Add(int sum, int x, int y)
    {
    sum = x + y;
    }
    }
    Вывод - 0 хотя по логике вроде должна быть цифра 6

    Дело в том, что когда мы передаем что-то в функцию, то передаётся не переменные а из значения.(Можно сказать копируем их из места вывода в функцию)
    Если переменная хранит какое-то значение, то оно просто копируется.
    Поэтому, если мы хотим передать значение по ссылке, и менять то что нам нужно, существуют модификаторы ref и out.
    И уже с помощью них, мы передаём не значение переменной, а ссылку в памяти, где хранится значение переменной.
    ref - входные параметры
    out - выходные параметры

    CSHARP
    internal class Program
    {
    static void Main(string[] args)
    {
    int sum = 0, x = 1, y = 5;
    Add(ref sum, x, y);

    Console.WriteLine(sum);
    }

    static void Add(ref int sum, int x, int y)
    {
    sum = x + y;
    }
    }
    Перед параметром и аргументом пишем ref
    Вывод - 6
    Так как в функцию передаётся не значение, а ссылка на область в памяти где хранится значение, с которой дальше функци будет оперировать.
    Если не инициализировать переменную sum (Как я писал где то выше) она не будет храниться в памяти и не будет ссылки на область памяти.

    CSHARP
    internal class Program
    {
    static void Main(string[] args)
    {
    int sum, x = 1, y = 5
    Add(out sum, x, y);

    Console.WriteLine(sum);
    }

    static void Add(out int sum, int x, int y)
    {
    sum = x + y;
    }
    }
    Модификатор out сам инициализирует переменную и возвращает ссылку на область памяти где она храниться, Вывод так же - 6

    Так как из функции за один раз может вернуться только что то одно, но бывают (и будут) случаи когда из функции нужно вернуть 2 или более значение
    модификаторы ref и out - помогут с этим.

    Я мог тут что то плохо и не понятно написать, так что советую посмотерть это видео (Вас сразу перекинет на нужный фрагмент) -
    Там обсалютно всё тоже самое, но без моих тупых сокращений </3

    Перегрузки
    Бывают случаи, напримере с массивами ниже вы увидите, когда одна функция "не может справиться" с тем что вы от неё хотите.
    А создавать функцию с именем Name2, Name3.... и дублировать код с небольшими изминениями - ГОВНОКОД
    Для это существует перегрузки, функция может иметь точно такое же имя, но обязана иметь другие сигнатуры - Тип возвращаемого значения и параметры
    если хоть что то из этого отличается - возникает перегрузка.

    CSHARP
    class Program
    {
    static void Main(string[] args)
    {
    int[] array1 = new int[5];
    int[,] array2 = new int[5, 5];
    array1 = Resize(array1, 10); //
    array2 = Resize(array2, 10, 10); // Компилятор самостояльно понимает какую функцию здесь использовать.
    }

    static int[] Resize(int[] array, int size) // Ресайзит одномерные массивы
    {
    int[] tempArray = new int[size];

    for (int i = 0; i < array.Length; i++)
    {
    tempArray[i] = array[i];

    }

    array = tempArray;
    return array;
    }

    static int[,] Resize(int[,] array, int x, int y) // Ресайзит двумерные массивы
    {
    int[,] tempArray = new int[x, y];

    for (int i = 0;i < array.GetLength(0); i++)
    {
    for (int j = 0;j < array.GetLength(0); j++)
    {
    tempArray[i, j] = array[i, j];
    }
    }

    array = tempArray;
    return array;
    }
    }
    Вывод я показыать не буду(мне лень), скопируйте и проверьте сам :)
     
    3 янв 2023 Изменено
  13. Karasu_san
    Karasu_san Автор темы 3 янв 2023 Заблокирован(а) 5016 1 сен 2018
    Коллекции - некий программный объект, который в себе хранит набор значение одного или нескольких типов.
    В коллекцию можно что то записывать, или что то извлекать из неё


    List
    List похож чем то на массив, но в отличии от листа, массив трудне расширять
    Объявление List
    List<тип_данных> имя = new List<тип_данных>(кол-во_элементов); // Обычно количество элементов не указывается

    Работа с List
    Присваивать и считывать значения из List`а можно так же как и в массиве - с помощью index
    Но удобство листа заключается в наличии методов.

    Add - добовляет объект в конец листа
    Clear - очищает весь лист
    AddRange - добавление в List какого либо диапозона чисел
    Count - длинна List`a
    Remove - удаляет из List`а первое повашееся число, равное числу, которое было указано в скобках
    RemoveAt - удаление объекта с помощью индекса
    IndexOf - находит в List`e первое повашееся число, равное числу, которое было указано в скобках и выводит его индекс
    Insert - вставляет число в List по индексу, перенося число, которое было до этого на этой позиции вправо на 1

    CSHARP

    List<int> numbers = new List<int>();
    numbers.Add(5);
    numbers.Add(6);
    numbers.Add(7);
    numbers.Add(8);

    numbers.AddRange(new int[] {1, 2, 3, 5});

    numbers.Insert(5, 15); // Добавит в List число 15 на позицию 5 - Вывод 5 6 7 8 1 15 2 3 5

    numbers.RemoveAt(2); // Удалит 3 элемент с индексом 2, т.е цифру 7 - Вывод 5 6 8 1 15 2 3 5

    numbers.Remove(5); // Удалит цифру 5 с индеком 0 - Вывод 6 8 1 15 2 3 5

    for(int i = 0;i < numbers.Count ;i++)
    {
    Console.WriteLine(numbers[i]);
    }
    [IMG]

    Queue (В переводе с английского - Очередь)
    Определённая коллекция работающая по алгоритму - первый вошёл, первый вышел

    Объявление очереди
    Queue<тип_данных> имя = new Queue<тип_данных>();

    Работа с Queue
    Методы Queue
    Enqueue - добавляет элемент в Queue
    Dequeue - вытаскивает элемент из Queue
    Peek - получает элемент из Queue


    CSHARP

    Queue<string> users = new Queue<string>();

    users.Enqueue("Karasu");
    users.Enqueue("Mori");
    users.Enqueue("RaysMorgan");
    users.Enqueue("RedBebril");


    foreach (var connecting in users)
    {
    Console.WriteLine(connecting); // Вывод - Karasu Mori RaysMorgan RedBebril
    }

    Console.WriteLine("Первый в очереди на вход - " + users.Dequeue()); // Вывод - Первый в очереди на вход - Karasu
    Console.WriteLine("Следющий пользователь на очереди - " + users.Peek()); // Вывод - Первый в очереди на вход - Mori

    foreach (var connecting in users)
    {
    Console.WriteLine(connecting); // Вывод - Mori RaysMorgan RedBebril | Кarasu в очереди больше нет, так как Dequeue убрало его из очереди
    }
    [IMG]
    Stack
    Stack чем то похож на Queue, но есть отличие - последний вошёл, первый вышел
    Объявление Stack
    Stack<тип_данных> имя = new Stack<тип_данных>();

    Работа со Stack
    Методы Stack
    Push - добавляет числа в Stack
    Pop - извлекает и возвращает элемент
    Count - длинна Stack`a
    Peek - берёт последний элемент Stack`a

    CSHARP

    Stack<int> numbers = new Stack<int>();

    numbers.Push(0);
    numbers.Push(1);
    numbers.Push(2);
    numbers.Push(3);
    numbers.Push(4);
    numbers.Push(5);

    foreach (var number in numbers)
    {
    Console.WriteLine(number); // Вывод 5 4 3 2 1 0 - Прочитано последниее число и выведено первым
    }

    while (numbers.Count > 0)
    {
    Console.WriteLine(numbers.Pop()); // Вывод 5 4 3 2 1 0 - Прочитано последниее число и выведено первым
    }
    [IMG]
    Dictionary - словарь
    Коллекция словарь, не похожа на предидущие.
    Словарь имеет 2 параметра - 1. Тип Ключа 2. Тип значения

    Объявление Dictionary
    Dictionary<тип_ключа, тип_значения> имя = new Dictionary<тип_ключа, тип_значения>();

    Работа с Dictionary

    Методы Dictionary
    Add - добавляет элемент в словарь
    Clear - очищает словарь
    ContainsKey - проверяет наличие элемента с определённым ключем, и возвращает true если такой ключ присутствует
    ConstainsValue - проверяет наличие элемента с определнным значение, и возвращает true если такое значение присутствует
    Remove - удаляет элемент из словоря по ключу

    CSHARP

    Dictionary<string, string> countries = new Dictionary<string, string>();

    countries.Add("Россия", "Москва");

    Console.WriteLine(countries["Россия"]); // Вывод - Москва

    if (countries.ContainsKey("Росси"))
    {
    Console.WriteLine(countries["Россия"]); // Вывод - | Ничего не выведиться так как мы проверили на наличие ключа, которого нет в нашем словаре
    }
    [IMG]
    Перебор словаря
    CSHARP

    Dictionary<string, string> countries = new Dictionary<string, string>();

    countries.Add("Россия", "Москва");
    countries.Add("Беларусь", "Минск");
    countries.Add("Япония", "Токио");

    foreach (var city in countries) // Перебор по ключу и значению
    {
    Console.WriteLine($"Страна - {city.Key} Город - {city.Value}");
    }

    Console.ReadLine();
    foreach(var city in countries) // Перебор по значению
    {
    Console.WriteLine($"Город - {city.Value}");
    }
    Console.ReadLine();
    foreach (var country in countries) // Перебор по ключу
    {
    Console.WriteLine($"Город - {country.Key}");
    }
    Console.ReadLine();

    foreach (var country in countries.Keys) // Перебор по ключу Способ2
    {
    Console.WriteLine("Страна " + country);
    }
    Console.ReadLine();
    foreach (var city in countries.Values) // Перебор по значению Способ2
    {
    Console.WriteLine("Город " + city);
    }
    Console.ReadLine();

    foreach (var city in countries) // Просто перебор
    {
    Console.WriteLine(city);
    }
    Console.ReadLine();
    [IMG]
     
    3 янв 2023 Изменено
  14. Karasu_san
    Karasu_san Автор темы 31 янв 2023 Заблокирован(а) 5016 1 сен 2018
    Ооп я тут писать не хочу, слишком впадлу, чуть позже, может быть, напишу о linq и еще о всякой фигне, которая может пригодится
     
Top