# Лабораторная работа №1 (тема №4) ## Знакомство со средой программирования и структурой проекта. >Ссылка на скачивание и компоненты для устрановки описаны в [лекции](./t2l1#интегрированная-среда-программирования) 1. Запустите **Visual Stidio 2022** и выберите пункт _Создание проекта_ ![](../img/04013.png) 1. Установите фильтры и найдите шаблон проекта _Консольное приложение (Макрософт)_ >Обратите внимание, не .NET Framework, а просто .NET ![](../img/04014.png) В Настройках нового проекта введите название и запомните/поменяйте, если нужно, расположение проекта ![](../img/04015.png) >У вас будет один репозиторий на все лабораторные работы в рамках этого курса, поэтому номер лабораторной в названии не нужен. Переключаться между лабораторными работами мы будем с помощью *веток* GIT-а На основном экране проекта у нас расположен код программы, который система сгенерировала для нас автоматически: ![](../img/lab4_01.png) >В **Visual Studio** можно открыть окно консоли (на скриншоте оно снизу-слева). Открыть можно через меню _Вид - Консоль_ или комбинацией клавишь Ctrl+\` В каталоге проекта есть директории `.vs`, `bin` и `obj`, которые содержат скомпилированную программу и настройки и, значит, сохранять эти каталоги в репозитории не нужно (добавить в `.gitignore`). ## Создание репозитория с ветками. Сначала создайте новый репозиторий и инициализируйте его в верхнем каталоге **oap_labs** (в котором находится файл `*.sln`). В **Visual Studio** есть каталог **решения** и в нём одноименный каталог **проекта** (в одном решении может быть несколько проектов) Затем создайте в корне репозитория файл `.gitignore`, в который добавьте каталоги, которые не нужно сохранять в репозитории: ```.gitignore */bin/ */obj/ .vs ``` Знак "*" перед названиями каталогов `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(); // numbers = "2 2" var numberList = numbers.Split(' '); // numberList = ["2","2"] var katet1 = Convert.ToInt32(numberList[0]); var katet2 = 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])); >``` > >Результат работы: > >``` >Введите два целых числа через пробел: 2 3 >5 > >Process finished with exit code 0. >```