# Лабораторная работа №1 (тема №4) ## Знакомство со средой программирования и структурой проекта. 1. Установите [JetBrains Rider](https://www.jetbrains.com/ru-ru/rider/) Программа платная, но в гугле легко ищутся ключи активации (они действуют год, поэтому сюда я рабочий не привожу) > Можно сначала установить **JetBrains Toolbox** 1. Запустите *Rider* и выберите пункт *New Solution* ("новое решение", решение - это группа програм для одного проекта) ![](../img/rider02.png) 1. Найдите шаблон проекта *Консольное приложение (.NET)* ![](../img/rider03.png) В Настройках нового проекта введите название и запомните/поменяйте, если нужно, расположение проекта >У вас будет один репозиторий на все лабораторные работы в рамках этого курса, поэтому номер лабораторной в названии не нужен. Переключаться между лабораторными работами мы будем с помощью *веток* GIT-а На основном экране проекта у нас расположен код программы, который система сгенерировала для нас автоматически: ![](../img/rider01.png) ```cs Console.WriteLine("Hello, World!"); ``` Переключитесь в режим "Файловая система" (по-умолчанию отображается режим "Solution"): ![](../img/rider04.png) В каталоге проекта есть директории **bin**, **obj** и **.idea**, которые содержат скомпилированную программу и настройки *Rider* и значит сохранять эти каталоги в репозитории не нужно (добавить в `.gitignore`). ## Создание репозитория с ветками. Сначала создайте новый репозиторий и инициализируйте его в верхнем каталоге **oap_labs** Затем создайте в корне репозитория файл **.gitignore**, в который добавьте каталоги, которые не нужно сохранять в репозитории: ``` */bin/ */obj/ .idea ``` Знак "*" перед названиями каталогов **bin** и **obj** обозначает "любой каталог", т.е. этот фильтр будет работать не зависимо от названия вашего проекта. После того, как мы сохраним файл, будет видно, что перечисленные каталоги больше не отслеживаются GIT-ом: ![](../img/04017.png) Создайте файл `readme.md` (в корне "решения") с описанием проекта и ФИО исполнителя. Сохраните текущее состояние проекта в репозитории Теперь создайте ветку *lab1* и переключитесь на неё: ``` git checkout -b lab4_1 ``` Таким образом, у вас в главной ветке будет пустой шаблон приложения с описанием, а в ветках реализации для отдельных лабораторных. ## Составление программ линейной структуры. Например, вычислить периметр и площадь прямоугольного треугольника по длинам двух катетов (получить из консоли) Мы ещё не проходили команды работы с консолью, поэтому приведу кусок кода с комментариями: ```cs // команда Console.Write выводит текст в консоль Console.Write("Input katet1: "); // команда Console.ReadLine читает СТРОКУ из консоли var katet1 = Console.ReadLine(); Console.Write("Input katet2: "); var katet2 = Console.ReadLine(); // команда Math.Sqrt - квадратный корень // Math.Pow - возведение в степень // Convert.ToDouble - преобразует строку в число var gipotenuza = Math.Sqrt( Math.Pow( Convert.ToDouble(katet1), 2) + Math.Pow( Convert.ToDouble(katet2), 2)); // выводим результат // знак $ перед строкой указывает, // что внутри строки в фигурных скобках названия переменных Console.WriteLine( $"Gipotenuza = {gipotenuza}"); // читаем строку, чтобы консольное окно сразу не закрылось Console.Write("Press ENTER to continue..."); Console.ReadLine(); ``` В некоторых заданиях требуется ввести числа в одной строке (например, "2 2"), но т.к. функция **ReadLine** возвращает **строку**, то такая строка будет не валидным числом. Для разбиения строки на подстроки можно воспользоваться методом **Split**: ```cs var numbers = Console.ReadLine(); var numberList = numbers.Split(' '); var number1 = Convert.ToInt32(numberList[0]); var number2 = Convert.ToInt32(numberList[1]); ``` --- ## Задание 1. Выполните задание, выданное преподавателем Задания берите с сайта [Школа программиста](https://acmp.ru/index.asp?main=tasks), из темы "Задачи для начинающих" Чем больше решите, тем лучше, но желательно от 3 заданий (на "троечку") 1. Опубликуйте результаты в удаленном репозитории и скиньте ссылку преподавателю. **Ожидаемый результат:** > Задача: [A+B](https://acmp.ru/index.asp?main=task&id_task=1) > > Требуется сложить два целых числа А и В. > > Решение: > >```cs >Console.Write("Введите два целых числа через пробел: "); >var inputString = Console.ReadLine(); >var stringParts = inputString.Split(' '); >Console.WriteLine(Convert.ToInt32(stringParts[0]) + Convert.ToInt32(stringParts[1])); >``` > >Результат работы: >``` >/home/kei/RiderProjects/ConsoleApp1/ConsoleApp1/bin/Debug/net6.0/ConsoleApp1 >Введите два целых числа через пробел: 2 3 >5 > >Process finished with exit code 0. >``` ## Примечания Народ спрашивает как в Rider-е создавать файлы (`.gitignore` и `readme.md`) и где делать репозиторий. Вообще это не относится к программированию и находится "методом научного тыка", поэтому в рамках лекций я и не описывал... 1. Создание файлов: В контекстном меню "решения" (правая кнопка мыши) выберите *`Add -> File`* ![](../img/rider026.png) и введите имя нового файла: ![](../img/rider08.png) Причём Rider достаточно продвинут, понимает формат MarkDown и может даже показать как будет выглядеть его содержимое в браузере: ![](../img/rider09.png) 1. Выполнение консольных команд: Прямо в IDE можно открыть окно терминала ![](../img/rider10.png) И в нём выполнять команды: ![](../img/rider11.png)