12345 — напишите программу на с# пожалуйста


Содержание

Первая программа на языке Си шарп

Язык Си шарп является основным языком программирования в большинстве пакетов Microsoft Visual Studio. Удобнее всего использовать интегрированную среду разработки, содержащую полный пакет программных средств для написания и отладки программ.

Для установки среды разработки вы можете выбрать один из нескольких вариантов пакетов и установить его, хотя разницу между Visual C# 2010 Express и Visual Studio 2020 Community (пакет «Разработка классических приложений .Net ) начинающий программист практически не заметит.

Традиционно начнем с создания консольного приложения.

После запуска пакета открывается начальная страница, на которой можем заметить две строки: 1) Создать проект… и 2) Открыть проект… (если ранее проекты уже создавались). Выберем первую позицию меню и перейдем в окно «Создать проект». Выберем тип проекта – «Консольное приложение», укажем имя вашего проекта «Первая_программа» и нажмем кнопку «Ok». Откроется окно с файлом Program.cs:

Ваша первая программа создана. Запустите ее на выполнение: Позиция меню – Отладка/Начать отладку, или клавиша F5, или графическая кнопка . Вы можете не заметить возникшее синее окно, которое менее через секунду закроется, зачем же нам этот бесполезный пример? Но все же, сохраните проект (Файл/Сохранить_все или Ctrl+Shift+S, выбрав папку для сохранения проекта c именем «Первая_программа»). Удалим строки 2,3,4 и вставим две новых строки, тогда получим:

Запустим программу и получим следующий результат:

Ваша программа уже проявила себя (с вами бодро поздоровалась).

Обратимся к тексту программы. Слова using, namespace, class, static, void – это ключевые слова, зарезервированные идентификаторы в любой части программы C#.

Строка using System; (далее будем говорить – оператор) задает подключение библиотеки System (часть библиотеки Net.Framework), используемой практически в каждой программе (постепенно будем узнавать, что в нее входит).

Строка namespace Первая_программа задает пространство имен проекта, объединяемое внешними фигурными скобками < >.

Строка class Program объявляет пока единственный (как нам кажется) класс в нашем пространстве имен Первая_программа, а содержимое класса также заключено во вторые фигурные скобки < >. И, наконец, внутри класса Program объявляется метод static void Main(string[] args), внутри которого (третьи фигурные скобки < >) объявлены два оператора.

Обратите внимание на расположение фигурных скобок, обозначающих начало и конец блоков, их положение автоматически задается редактором кода. Постарайтесь и далее их позиции относительно левого края окна не изменять. Смысл слов static и void будет пояснен позже. Вы уже догадались, для чего необходим оператор Console.WriteLine(«Привет, программист!»);. Последний оператор Console.ReadKey(); — вспомогательный, он не дает закрыть приложение до тех пор, пока не будет нажата любая клавиша.

Важнейшие понятия ООП — это класс (class) и объект (object). Слово class появляется у нас в тексте любого приложения (программы). Удалим первый оператор программы using System; (точнее, удобнее не удалять строку, а ее закомментировать, поставив перед оператором два символа «//»). Запустим программу на выполнение. Получим сообщение о двух одинаковых ошибках: Элемент «Console» не существует в текущем контексте.

Интересно, как связано слово Console c нашим консольным приложением? В эпоху больших ЭВМ консолью называлось аппаратура для ввода/вывода данных, например, клавиатура-дисплей или телетайп. Наше консольное приложение также отображает результат выполнения программы на мониторе (в «синем окне»), а исходные данные мы также будем вводить с клавиатуры.

Но в тексте программы слово Console указывает имя класса из библиотеки System. Делаем вывод: мы используем методы класса Console, которые выводят строку текста и обрабатывают нажатие на клавиши. Мы можем исправить ошибки, указав впереди через точку имя библиотеки: System.Console.WriteLine(«Привет, программист!»); System.Console.ReadKey(); Говорят, что метод конкретизируется указанием класса, а сам класс определен в библиотеке, подключаемой через оператор using имя_библиотеки.

В IDE консольного приложения создается файл Program.cs. Заметим, что в пространстве имен namespace объявляется класс Program, а в нем статический (static) метод Main() — «главная точка входа в приложение». В теле метода между двумя фигурными скобками записывается программный код приложения. Кроме «главного» метода в класс часто добавляются поля данных и другие методы, вызов которых начинается в Main(). В Main() записывается алгоритм обработки данных. При записи алгоритма придерживайтесь структурной методологии Э. Дейкстры. Она основана на том, что любая программа строится из трёх базовых управляющих структур: последовательность, ветвление, цикл; оператор goto запрещен. Она имеет один вход — один выход. В программе часто выделяются подпрограммы (в C# — это функции-члены классов, к которым относятся методы). Разработка ведётся пошагово, методом «сверху вниз».

Заметим, что в нашей простейшей программе появилось понятие «класс» — базовое понятие объектно-ориентированного программирования (ООП).

Кроме консольных приложений (нам они удобны на первом этапе изучения основ C#) мы будем создавать стандартные «оконные» приложения (Windows Forms). Краткую заметку о них смотрите здесь.

А мы продолжим нашу тему заметкой о комментариях.

Как совместить 2 языка С++ и C#?

Хотелось бы написать интерфейс на С#, а вот вычисления программы на С++.
Читал про разные методы того, как это сделать типа, но в итоге только больше запутался.
Как я понял есть такие способы:
1. Создать отдельный проект Win32 DLL. для С++ и еще проект для С#, и используя функции
Dllimport/Dllexport передавать значения.

2. Писать на С++/CLI. Только тут я не понимаю, как их совместить.
Ну написал я код на С++/CLI, а как мне его в проект , написанный на С# вставить ?

3. Еще можно использовать COM, но я не понимаю, что пожарищи этим подразумевается.
Это имеется ввиду использовать создать проект С++ MFC и там уже без С# справиться?

Вот такая вот у меня неразбериха.
Какой на ваше мнение самый удобный и корректный способ совмещения двух языков?
И как это осуществляется ( опишите, пожалуйста , это подробно )

Помогите, пожалуйста, написать программу на с++

Помогите написать программу которая вычисляет значение а (n- возведение в степень).
Число а и число n вводит пользователь . (Использовать pow запрещено).

Если использовать pow запрещено, значит нужно придумать что-то свое.
Допустим, для целых чисел это может выглядеть так:

beginner, а если показатель степени отрицательный?

А шаблонную функцию для возведения в степень написать слабО? ;)

Фтьiкай, объясните, пожалуйста, зачем для натуральных и вещественных чисел, которые нужно возвести в целую отрицательную или положительную степень, нужна шаблонная функция ;)


Vova_vb, а вы 0 в -1 степени пытались ввести?

Фтьiкай, думаю, что это можно организовать без шаблона.

beginner, Ну тогда:

Vova_vb, значение 0 в -1 степени не может быть 0, т.к. значение выражения 0 ^ -1 вычисляется по формуле 1 / 0 ^ 1, а единицу на нуль делить нельзя.

beginner, после предложения написать шаблонную функцию смйлик стоит. Это была в общем-то шутка ;) Хотя в результате ты таки поменял тип аргумента и тип возвращаемого значения твоей функции.

Второй вариант fPower() выглядит гораздо лучше первого. Только как-то нехорошо выглядит поведение функции при возведении 0 в отрицательную степень. Так сразу «А-а-ах. » и всему приложению пи. в смысле, exit(EXIT_FAILURE) . Программе надо все-таки оставить шанс на обработку ошибочной ситуации.

Кстати, а ты уверен, что тип второго аргумента твоей функции должен быть int ? Может быть все-таки double ? А?

Кстати, а ты уверен, что тип второго аргумента твоей функции должен
быть int? Может быть все-таки double? А?

:))) Фтьiкай, я же функцию писал для натуральных и вещественных чисел, которые нужно возвести в целую отрицательную или положительную степень.

А вот если тип аргумента pow сделать double , то здесь впору писать шаблонную функцию ;)))

beginner, мне кажется, что Фтьiкай намекает на то, что показатель степени может быть не только целым, но и рациональным ))

Шаблонную функцию опять-таки делать совершенно необязательно, поскольку при вызове функции с целым аргументом (вторым) он будет неявно преобразован к double .

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

Как мне кажется, исходная задача подразумевала тривиальное решение

Ну в общем-то, да ;)

Зато тривиальная задачка породила неслабую «разминку для мозгов». И пока что до финала еще далеко.

PS. Ладно, ладно. про комплексные числа я уже грузить не буду )) Тут хотя бы с рациональными до конца разобраться.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Примеры программ на языке C#

Здесь, со временем, будет много примеров программ на языке программирования C#…

Лабиринт 1.0

Всем привет, сегодня немного поиграем, я такой лабиринт делал когда то для жены, только он был побольше, я спрятал от нее подарок, а место его нахождения записал на финише. Весь прикол в том, что как только курсор касается стенки лабиринта его перекидывает в начальную точку. В общем, погнали! Вот проект для тех кому лень читать: […]

Делаем крутой парсер HTML страниц и парсим пару сайтов

Всем привет, На просторах интернета я обнаружил один интересный парсер, я добавил описание и немного доработав решил презентовать вам. Проект объемный поэтому запаситесь терпением. Лень читать статью вот готовый проект: Поехали, 1) Создаем проект WinForm, назовем его «SuperParser». 2) Сразу заходим в свойства формы и меняем св-ву Text значение на «SuperParser», size выставляем width 800 […]

Пример работы С#+Json

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

Делаем «однорукого бандита».

Всем привет, сегодня мы будем делать игровой автомат. Суть, у нас будет форма с 3 барабанами, каждый барабан будет содержать только цифры от 0 до 9. Игроку при старте игры будет даваться стартовые $100, он может делать ставки 5-10-15 и т.д до $50, после нажатия рычага, у игрока 5 попыток, выигрыш зависит от количества совпадений […]

Игра «Печатная машинка» на С#

Всем привет, сегодня мы напишем игрушку, суть следующая: В форме будут появляться случайные буквы. Если игрок вводит буквы правильно, они исчезают — уровень растет и буквы появляются все чаще. Если вся форма заполнена буквами игра окончена. Кому лень читать(ниже), могут сразу скачать проект Итак, начнем… 20+

Графическая «доска» на C# за 10 минут.


Всем привет, сегодня мы сделаем простую графическую программу. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем WinForms проект, обзываем его «WinFormsApp_Paint» 2) Меняем для формы значение св-ва Text = «MyPaint» 3) Кидаем на форму 3 элемента Label, 1 элемент NumericUpDown, 1 кнопку. 4) Для label1 св-во Text = «Выбрать цвет». Расположить в […]

Создаем элемент управления для панели элементов(Toolbox) Visual Studio

Всем привет, Сегодня мы будем делать элемент управления(Control) для масштабирования изображений, мне на текущий момент известно 2 способа, один из них мы сегодня используем. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем проект WinForm, называем его WinFormsApp_UserControls 2) Теперь добавляем элемент UserControl. 3) У нас открывается UserControl1.cs[Конструктор], переходим в свойства этого объекта, […]

Программа для просмотра изображений на C#

Всем привет, Сегодня сделаем софтину для просмотра картинок и гифок, программка будет короткой, но рабочей). Кому лень читать(ниже), могут сразу скачать готовый проект Поехали, 1) Cоздаем проект WinForms, даем название проекту WinFormsApp_ViewPicture 2) Свойству Text присваиваем значение «View Picture». 3) Кидаем на форму элемент PictureBox растягиваем его по краям, но оставляем снизу место для кнопки. […]

Делаем простой редактор txt

Всем привет, Сегодня мы будем делать редактор текстовых файлов, который будет уметь открывать уже существующие файлы и создать новые txt-файлы. Кому читать дальше лень, могут скачать готовый проект Поехали! 1)Создаем WinForms проект называем его, например, WinFormsApp_SimpleTextEditor 2) Кидаем на форму textBox и 2 кнопки, св-во name 1 кнопки = buttonOpen, 2-ой кнопки name = buttonSave. […]

Работает с картами в WinForms без использования JS! или Библиотека GMAP.net

Всем привет, Не давно был на одном из совещаний и там, один бизнес-аналитик показал, так называемую «тепловую» карту, на карту Москвы он вывел все торговые точки наших клиентов, в итоге можно было визуально оценить какие зоны у нас сильно загружены, средне и слабо. Однако, сделал он это с использованием JS+браузер. НО у меня с JS […]

Hello World — создаем первую программу Hello World — Your first program

В этой статье вы будете использовать Visual Studio для создания традиционной программы «Hello World!» In this article, you’ll use Visual Studio to create the traditional «Hello World!» в C#. program. Visual Studio — это профессиональная интегрированная среда разработки (IDE) с множеством функций, предназначенных для разработки в среде .NET. Visual Studio is a professional Integrated Development Environment (IDE) with many features designed for .NET development. Для создания этой программы вы будете использовать лишь некоторые функции Visual Studio. You’ll use only a few of the features in Visual Studio to create this program. Дополнительные сведения о Visual Studio см. в разделе Начало работы с Visual C# и Visual Basic. To learn more about Visual Studio, see Getting Started with Visual C# and Visual Basic.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. The Visual Studio edition that you have and the settings that you use determine these elements. Дополнительные сведения см. в разделе Персонализация среды IDE. For more information, see Personalizing the IDE.

Создание приложения Create a new application

Запустите Visual Studio. Start Visual Studio. В Windows вы увидите следующее изображение: You’ll see the following image on Windows:

Выберите Создать проект в правом нижнем углу изображения. Select Create a new project in the lower right corner of the image. В Visual Studio отображается диалоговое окно Новый проект: Visual Studio displays the New Project dialog:

Если вы запустили Visual Studio впервые, список Последние шаблоны проектов будет пустым. If this is the first time you’ve started Visual Studio, the Recent project templates list is empty.

В диалоговом окне «Новый проект» выберите «Консольное приложение (.NET Core)» и нажмите кнопку Далее. On the new project dialog, choose «Console App (.NET Core)» and then press Next. Присвойте проекту имя, например «HelloWorld», а затем нажмите кнопку Создать. Give your project a name, such as «HelloWorld», then press Create.

Проект открывается в Visual Studio. Visual Studio opens your project. Он уже является базовым примером It’s already a basic «Hello World!» Hello, World! example. Нажмите клавиши Ctrl + F5 для запуска проекта. Press Ctrl + F5 to run your project. Visual Studio выполняет сборку проекта, преобразуя исходный код в исполняемый файл. Visual Studio builds your project, converting the source code into an executable. Затем запускается командное окно, запускающее новое приложение. Then, it launches a command window that runs your new application. В окне должен отображаться следующий текст: You should see the following text in the window:

Нажмите любую клавишу, чтобы закрыть окно. Press a key to close the window.

Запустите Visual Studio для Mac. Start Visual Studio for Mac. В Mac вы увидите следующее изображение: You’ll see the following image on Mac:

Если вы запустили Visual Studio для Mac впервые, список Последние проекты будет пустым. If this is the first time you’ve started Visual Studio for Mac, the Recent projects list is empty.

Выберите Создать в правом верхнем углу изображения. Select New in the upper right corner of the image. В Visual Studio для Mac отображается диалоговое окно Новый проект: Visual Studio for Mac displays the New Project dialog:

В диалоговом окне «Новый проект» выберите «.NET Core» и «Консольное приложение» и затем нажмите кнопку Далее. On the new project dialog, choose «.NET Core», and «Console App» and then press Next. Вам потребуется выбрать целевую платформу. You’ll need to select the target framework. Значение по умолчанию подходит, поэтому нажмите кнопку «Далее». The default is fine, so press next. Присвойте проекту имя, например «HelloWorld», а затем нажмите кнопку Создать. Give your project a name, such as «HelloWorld», then press Create. Вы можете использовать расположение проекта по умолчанию. You can use the default project location. Не добавляйте этот проект в систему управления версиями. Don’t add this project to source control.

Проект открывается в Visual Studio для Mac. Visual Studio for Mac opens your project. Он уже является базовым примером It’s already a basic «Hello World!» Hello, World! example. Нажмите клавиши Ctrl + Fn + F5 для запуска проекта. Press Ctrl + Fn + F5 to run your project. Visual Studio для Mac выполняет сборку проекта, преобразуя исходный код в исполняемый файл. Visual Studio for Mac builds your project, converting the source code into an executable. Затем запускается командное окно, запускающее новое приложение. Then, it launches a command window that runs your new application. В окне должен отображаться следующий текст: You should see the following text in the window:

Нажмите клавишу, чтобы завершить сеанс. Press a key to end the session.

Элементы программы C# Elements of a C# program

Давайте рассмотрим важные части этой программы. Let’s examine the important parts of this program. Первая строка содержит комментарий. The first line contains a comment. Символы // преобразуют остальную часть строки в комментарий. The characters // convert the rest of the line to a comment.

Вы можете также закомментировать блок текста, заключив его между символами /* и */ . You can also comment out a block of text by enclosing it between the /* and */ characters. Эти действия показаны в следующем примере. This is shown in the following example.

Консольное приложение C# должно содержать метод Main , в котором начинается и заканчивается управление. A C# console application must contain a Main method, in which control starts and ends. В методе Main создаются объекты и выполняются другие методы. The Main method is where you create objects and execute other methods.

Метод Main является статическим методом, расположенным внутри класса или структуры. The Main method is a static method that resides inside a class or a struct. В предыдущем примере «Hello World!» In the previous «Hello World!» он размещается в классе с именем Hello . example, it resides in a class named Hello . Вы можете объявить метод Main одним из следующих способов. You can declare the Main method in one of the following ways:

  • Он может возвращать значение void . It can return void . Это означает, что программа не возвращает значение. That means your program doesn’t return a value.


  • Он также может возвращать целое число. It can also return an integer. Данное целое число — это код выхода для приложения. The integer is the exit code for your application.
  • С любым из типов возвращаемых значений он может принимать аргументы. With either of the return types, it can take arguments.

Параметр args метода Main является массивом значений типа string , который содержит аргументы командной строки, используемые для вызова программы. The parameter of the Main method, args , is a string array that contains the command-line arguments used to invoke the program.

Дополнительные сведения об использовании аргументов командной строки см. в примерах в разделе Main() и аргументы командной строки. For more information about how to use command-line arguments, see the examples in Main() and Command-Line Arguments.

Начинающим C# программистам: 5 полезных советов, которые сделают ваш код чище

Рассказывает Мош Хамедани, автор курсов по C# и AngularJS на udemy

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

Многие студенты моего базового курса по С# присылают мне свой код, и, когда у меня есть возможность, я его просматриваю и даю полезные советы для улучшения их навыков программирования. При этом я заметил несколько часто встречающихся ошибок. В данной статье я пролью свет на подобные моменты и расскажу, как сделать ваш код более чистым и упростить жизнь людям, которые будут его поддерживать.

Проверяйте входные данные в первую очередь

Обратите внимание на данный отрезок кода:

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

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

Оператор else нужен далеко не всегда

Продолжая с кодом из предыдущего примера, если аргумент shape будет равен null, будет выброшено исключение, и тогда остаток метода точно не будет выполнен. Поэтому нет никакого смысла в добавлении else, который, кроме того, добавляет отступов к бо́льшей части кода. Такой код выглядит чище:

Обратите внимание на то, что код после оператора if не имеет дополнительных отступов.

Фигурные скобки?

Этот пункт является полностью субъективным. Одни разработчики любят фигурные скобки, другие нет. Я лично прошел через разные стадии. Тут нет однозначного мнения о том, как поступать правильно. Вы должны сами для себя решать, ставить фигурные скобки или опустить их. Давайте уберем фигурные скобки в нашем примере, и посмотрим как это выглядит:

Мне кажется, теперь код стал чище. А что вы думаете по этому поводу?

Обращайте внимание на названия идентификаторов

Названия идентификаторов в вашем коде важны так же, как и то, как вы назовете своих детей. Я не шучу. Никто не захочет читать чужой код с подобными названиями:

  • od: Что значит od? Очередной день? Оператор доставки? Опция доступа?
  • Button1_Click(): Что за Button1? И чем она отличается от Button2?
  • thisAs: А это что вообще такое?!

Используйте названия, которые будут без искажений передавать ваши идеи в коде.

Избегайте ненужных переменных

В 80-х годах прошлого века книги по программированию учили нас объявлять переменную по любому поводу. Посмотрите на этот кусок кода, который читает два числа с консоли и выводит максимальное из них:

У меня буквально глаза на лоб вылезли, когда я объявлял все эти переменные! В чем основная цель этого кода? Правильно — найти максимум двух чисел. Поэтому firstInput и secondInput, которые являются строками со считанным вводом пользователя, не являются полезными или нужными в этом коде. Всё, что нам надо — два числа. Временная строка, которую мы получаем из консоли в процессе, не является важной. Поэтому эти две переменные никак не улучшают данный код в плане читабельности, а только лишь добавляют лишнего шума. Мы можем считать ввод с консоли и преобразовать его в число одной строкой кода:


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

Если советы в данной статье показались вам слишком тривиальными, обратите внимание на статью с 10 полезными особенностями языка C#.

Также советуем вам ознакомиться со списком из 20 других программистов, которые дают полезные советы о программировании на C#.

Передать параметры программе и получить результат

Есть консольная программа которая принимает на вход несколько параметров. login и password. Как с помощью c# передать параметры?

3 ответа 3

Обновил по результатам обсуждения:

аргументы командной строки, при условии запуска программы из консоли так:

Если Ваш вопрос о том, как написать такую пограмму, то см. ответ @iksuy. Я бы к нему добавил, что метод Main должен быть либо без возвращаемого значения ( void ), либо возвращать int — код возврата, который Вы передаёте системе после выполнения программы.

Если же Вам нужно вызвать готовую программу, передав ей логин и пароль, то Вам нужно использовать System.Diagnostics.Process.Start(string fileName, string arguments) . Этот метод запустит процесс через fileName , передав запущенной программе параметры через arguments . Он вернёт экземпляр класса Process , у которого есть метод WaitForExit и свойство ExitCode . Дождитесь завершения программы и прочитайте ExitCode .

вот так можно передать параметры и скрыть

передача параметров через пробел

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# или задайте свой вопрос.

Связанные

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.13.35425

ОСНОВЫ ПРОГРАММИРОВАНИЯ НА C#. КОНСОЛЬНЫЕ ПРИЛОЖЕНИЯ

    Зоя Мясоедова 2 лет назад Просмотров:

1 Министерство образования и науки Российской Федерации Псковский государственный университет Кабаченко В.В., Хмылко О.Н. ОСНОВЫ ПРОГРАММИРОВАНИЯ НА C#. КОНСОЛЬНЫЕ ПРИЛОЖЕНИЯ Учебно-методическое пособие Печатается по решению кафедры прикладной информатики в образовании Псковского государственного университета ПСКОВ Издательство ПсковГУ 2015

Цукерберг рекомендует:  Аналоговые часы на CSS3 без JavaScript

2 УДК ББК я73 К12 Печатается по решению кафедры прикладной информатики в образовании Псковского государственного университета Рецензенты: — Моркин Сергей Александрович, доцент кафедры информационных технологий Новгородского государственного университета им. Ярослава Мудрого — В.Г. Соловьев, профессор кафедры физики ПсковГУ, д. ф.- м. наук Кабаченко В.В, Хмылко О.Н. К12 Основы программирования на C#. Консольные приложения: Учебно-методическое пособие. Псков: Издательство ПсковГУ, с. Учебно-методическое пособие предназначено для студентов физико-математического факультета и служит методической поддержкой курсов: «Программирование», «Технологии программирования и работы на ЭВМ», «Информатика и программирование». В пособии рассмотренны теоретические основы програмированния и представленны 10 лабораторных работ по созданию консольных приложений на языке программирования C#. УДК ББК я73 Кабаченко В.В., Хмылко О.Н. Псковский государственный университет 2

3 Содержание Лабораторная работа 1 Самостоятельная работа Лабораторная работа 2 Самостоятельная работа Лабораторная работа 3 Самостоятельная работа Лабораторная работа 4 Самостоятельная работа Лабораторная работа 5 Самостоятельная работа Лабораторная работа 6 Самостоятельная работа Лабораторная работа 7 Самостоятельная работа Лабораторная работа 8 Самостоятельная работа Лабораторная работа 9 Самостоятельная работа Лабораторная работа 10 Самостоятельная работа Стр Приложение 173 3

4 Лабораторная работа 1 Краткое описание: знакомство с Microsoft Visual C# создание консольного приложения ввод и вывод на Консоль Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение. Рис.1 Рисунок 1. Начало работы. Основные компоненты стандартного запуска Рисунок 2. Автоматически сгенерированный стартовый код 4

5 Ввод данных с Консоли, необходимых для работы программы: Console.ReadLine(); Одновременно с вводом данные присваиваются переменной: n = Console.ReadLine(); Все данные, получаемые с Консоли строкового типа string n = Console.ReadLine(); Вывод данных на Консоль: Вывод одной переменной: Console.WriteLine(n); Вывод текстовой строки: Console.WriteLine( Текст ); Вывод текстовой строки и переменной n: Console.WriteLine( Переменная n= +n); Задание 1: Введите код программы, комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, изменяя переменные и строки вывода. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Проект — Приветствие /// 5

6 class Program /// /// Точка входа. ///Запрашивает имя пользователя и выдает приветствие /// ///

static vo + name); ///Ожидание дополнительного ввода Console.ReadLine(); Если мы вводим с Консоли число, то необходима конвертация string n = Console.ReadLine(); 6

7 конвертируем введенное n в целое 32-битное число int n1=convert.toint32(n); конвертируем введенное n в действительное число типа double double n2 = Convert.ToDouble(n); Задание 2: Рассмотрим простую задачу, записать трехзначное число в обратном порядке. Например: число 345, записать как 543 Создайте новый проект, наберите код программы (комментарии не обязательно), запустите на выполнение, используя различные исходные данные. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 class Program /// /// Пример простейшей программы с решением «напрямую», без классов /// Ввести число до 1000 и вывести число с цифрами наоборот: 345 -> 543 /// ///

8 int n = Convert.ToInt32(s); /*с1 присваиваем значение последней цифры исходного числа n, вычисляя остаток от деления на 10*/ int c1 = n % 10; /*с3 присваиваем значение первой цифры исходного числа n, выполняя целочисленное деление на 100 */ int c3 = n / 100; /*с2 сначала делим n на 10, а затем вычисляем остаток от деления с2 на 10, получая среднюю цифру числа*/ int c2 = n / 10; c2 = c2 % 10; // получаем новое число n n = c1 * c2 * 10 + c3; Console.WriteLine(«Перевернутое 0», n); Console.Read(); число Другой вариант вывода на консоль. Console.WriteLine(«Перевернутое число 0», n); В фигурных скобках перечисляются переменные, которые нужно вывести, по очереди, начиная с 0, после запитой перечисляются все нужные переменные Console.WriteLine(«Перевернутое 0,1,2,3», n, c1, c2, c3); число 8


9 Внутри текстового блока переменные можно выстраивать в нужном порядке Console.WriteLine («Перевернутое число 0, цифры числа 1,2,3, из них получается число 0», n, c1, c2, c3); Данный вывод можно было осуществить и так: Console.WriteLine(«Перевернутое число «+ n +», цифры числа «+ c1 +», «+ c2 + «, «+ c3 + «, из них получается число «+ n); Задание 3. Самостоятельная работа — написать программу, которая спрашивает у пользователя Имя и сколько ему лет и выводит на экран сообщение «Здравствуй, Петя. Тебе 100 лет!))» Вместо Петя и 100 соответствующие введенные данные. Предусмотреть вариант, когда пользователь не вводит имя и возраст. Задание 4. Самостоятельная работа — написать программу, которая по введеному значению, выводит само значение, значение увеличенное на 1, значение увеличенное на 2, и сумму всех трех значений. Написать отчет по лабораторной работе. Образец отчета см. Приложение.1 9

10 Лабораторная работа 2 Краткое описание: основные типы данных основные операторы математические операторы операторы условия Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение Основные типы данных Таблица 1. Типы данных Логический тип Имя Системный Значения Размер типа тип Bool System.Boolean true, false 8 бит Арифметические целочисленные типы Имя Системный Диапазон Размер типа тип Sbyte System.SByte Знаковое, 8 Бит Byte System.Byte Беззнаковое, 8 Бит Short System.Short Знаковое, 16 Бит Ushort System.UShort Беззнаковое, 16 Бит Int System.Int32 (-2*10^9 Знаковое, 32 2*10^9) Бит Uint System.UInt32 (0 4*10^9) Беззнаковое, 32 Бит Long System.Int64 (-9*10^18 9*10^18) Знаковое, 64 Бит Ulong System.UInt64 (0 18*10^18) Беззнаковое, 64 Бит Арифметический тип с плавающей точкой Имя Системный Диапазон Точность типа тип Float System.Single +1.5*10^-45-7 цифр +3.4*10^38 Double System.Double +5.0*10^ цифр 10

11 +1.7*10^308 Арифметический тип с фиксированной точкой Имя Системный Диапазон Точность типа тип Decimal System.Decimal +1.0*10^ значащих +7.9*10^28 цифр Символьные типы Имя типа Системный тип Диапазон Точность Char System.Char U U+ffff 16 бит String System.String Строка из символов Unicode Unicode символ Объектный тип Имя Системный Примечание типа тип Object System.Object Прародитель всех встроенных и пользовательских типов Основные арифметические операции Оператор Действие + Сложение Вычитание, — минус * Умножение унарный / Деление % Деление по модулю — Декремент ++ Инкремент = *= /= %= += -= >= &= ^= = Присваивание 11

12 Использование математических функций Math — математические функции Класс Math из пространства имен System содержит статические методы для работы с тригонометрическими, логарифмическими и другими математическими функциями. Практически все функции перегружены и принимают различные типы параметров, например: double, float, int и т.д. Рассмотри наиболее часто используемые: Abs Метод возвращает модуль переданного в параметр числа Acos Возвращает косинус угла Asin Возвращает синус угла Ceiling() Возвращает наименьшее целое число больше переданного в параметре. Например при передачи 2.1 будет возвращено 3 Exp Возвращает число E в степени (Степень передается в качестве параметра) Log Возвращает логарифм. Можно указать основание логарифма. Log10 Возвращает 10-ный логарифм Max Возвращает максимум между двумя переданными параметрами Min Возвращает минимум между двумя переданными параметрами Pow Возвращает степень числа. Первый параметр число, второй — степень. Round Округляет число. Sqrt Возвращает корень числа переданного в качестве параметра. В классе также есть два свойства возвращающие константы для числа E и числа PI double x, y, z; x=-10.2; z=0.75; 12

13 y=math.abs(x); //Возвращает модуль числа значение Console.WriteLine(«Модуль числа = 0,10:f3»,y); y=math.acos(z); // Возвращает косинус угла Console.WriteLine(«Косинус угла в радианах = 0,10:f3 «, y); y=math.asin(z); // Возвращает синус угла Console.WriteLine(«Синус угла в радианах = 0,10:f3», y); y=math.ceiling(x); //Возвращает наименьшее целое число больше переданного в параметре Console.WriteLine(«Наименьшее, больше заданного = 0,10:f3»,y); y=math.exp(x); // Возвращает число E в степени (Степень передается в качествепараметра) Console.WriteLine(«е в степени х = 0,10:f3», y); y=math.log(z); //Возвращает логарифм. Можно указать основание логарифма Console.WriteLine(«Логарифм Z = 0,10:f3»,y); y=math.log10(z); // Возвращает 10-ный логарифм Console.WriteLine(«Десятичный логарифм Z = 0,10:f3»,y); y=math.max(x,z); // Возвращает максимум между двумя переданными параметрами Console.WriteLine(«Максимальное из двух чисел = 0,10:f3 «, y); y=math.min(x,z); // Возвращает минимум между двумя переданными параметрами Console.WriteLine(«Минимальное из двух чисел = 0,10:f3», y); y=math.pow(x,3); // Возвращает степень числа. Первый параметр число, второй степень. Console.WriteLine(«x в кубе = 0,10:f3», y); y=math.round(x); // Округляет число 13

14 Console.WriteLine(«Округлить до целого = 0,10:f3», y); y=math.sqrt(z); // Возвращает корень числа переданного в качестве параметра. Console.WriteLine(«Корень числа =0,10:f3″,y); Алгоритмы ветвления 1. Одиночный выбор: Если дождь, то взять зонт и надеть сапоги if (x==»дождь») Console.Write(«берем зонт «); Console.WriteLine(«и обуваем сапоги, т.к. на улице 0», x); 2. Двойной выбор. Если переменная больше 5, то увеличить ее в 10 раз, иначе уменьшить втрое. if (y > 5) y *= 10; else y /= 3; 3. Множественный выбор В зависимости от введенного знака операции, выполнить сложение, вычитание, умножение или деление switch (k) case «*»: z = x * y; Console.WriteLine(«Умножение — Ответ: «+z); break; case «/»: z = x / y; 14

15 Console.WriteLine(«деление — Ответ: «+z); break; case «-«: z = x — y; Console.WriteLine(«вычитание- Ответ: «+z); break; case «+»: z = x + y; Console.WriteLine(«Сложение — Ответ: «+z); break; default: Console.WriteLine(«Ошибка»); break; Проверка условий, условные операторы. Таблица 2. Условные операторы Оператонитор Значе- Опера- Значение = = Равно & И = Больше или равно Больше Исключающее ИЛИ Укороченное И Укороченное ИЛИ 15

16 Задание 5. Решение квадратного уравнения (a 0) без применения Классов. Создайте новый проект, введите код программы, запустите на выполнения и проверьте работу программы для разных входных данных. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 > 0) Console.WriteLine(«2 корня»); double d = Math.Sqrt(D); double x1 = (-b + d) / 2 / a; double x2 = (-b — d) / 2 / a; Console.WriteLine(«x1 = » + x1.tostring() + » x2 = » + x2.tostring()); else if (D == 0) 16

17 Console.WriteLine(«1 корень»); Console.WriteLine(«x = » + (-b / 2 / a).tostring()); else Console.WriteLine(«нет корней»); Console.ReadLine(); Самостоятельная работа Задачи по теме: Условия 1. Решить линейное уравнение ax + b =0. Рассмотреть все возможные случаи: 1) a#0 2) a=0, b=0 3) a=0, b#0 2. Решить квадратное уравнение (a может быть равно 0, b#0) 3. Решить квадратное уравнение (рассмотреть все возможные случаи) 4. Даны координаты точки на плоскости (x,y). Определить, в каком квадранте находится точка 5. Дано натуральное число n 18 10. Даны стороны треугольника a, b, c. Определить вид треугольника: а) остроугольный б) прямоугольный в) тупоугольный. Указание: Первоначально необходимо найти максимальную из сторон. Затем проверить для нее выполнение соотношения c2 > a2 + b2. Если оно выполняется, то треугольник тупоугольный. Если это равенство, прямоугольный. В ином случае — остроугольный. 11. Дано натуральное число n B>=C. И заменить их абсолютными значениями если это не так. 15. Даны х и у. Если х 19 Лабораторная работа 3 Краткое описание: Понятие цикла Виды циклов Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение Цикл многократное повторение однотипных действий, событий или состояний. Циклы могут повторяться фиксированное число раз, или завершаться при выполнении определенного условия. 1. Циклы с предусловием Цикл с предусловием цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while, отсюда его второе название while-цикл. while (Условие) Тело цикла while (x 20 2. Циклы с постусловием Цикл с постусловием цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. do Тело цикла while (Условие); do y *= 4; z += 10; x += 10; while (x 21 for (int i = 25; i 22 //Посчитать факториал числа n Console.WriteLine(«Введите число для определения факториала»); Int n=convert.toint32 (Console.ReadLine()); f = 1; x = 1; while (x 23 //Cумма чисел от 25 до 125 кратных 5, и сумма квадратов этих чисел s = 0; skv = 0; for (int i = 25; i 0) v=u%10; s=s+v; u = u / 10; if(s==m) Console.WriteLine(«Число 0, сумма цифр равна 1»,i, m); Console.ReadLine(); 23

24 Рисунок 3. Вариант вывода результата на Консоль Циклы с предусловием Самостоятельная работа 1. Найти сумму цифр числа. 2. Приписать по 1 в начало и в конец записи числа n. Например, было n=3456, стало n= Поменять местами первую и последнюю цифры числа. 4. Поменять порядок цифр числа на обратный. Например, было 12345, стало Найти количество чётных цифр целого положительного числа. 6. Найти самую большую цифру целого числа. 7. Найти сумму цифр целого числа, больших Сколько раз данная цифра встречается в целом числе? 9. Составить программу, проверяющую, является ли последовательность из 10 целых чисел, вводимых с клавиатуры, возрастающей. 10. Составить программу, проверяющую, является ли заданное натуральное число палиндромом, то есть 24

25 таким, десятичная запись которого читается одинаково слева направо и справа налево. Циклы с постусловием 1. Произведение максимального количества N первых нечетных чисел не больше p. Вывести последний сомножитель, общее количество сомножителей и произведение. 2. Числа Фибоначчи (f n ) определяется формулами: f 0 = f 1 = 1; f n = f n = f n-1 + f n-2 при n=2, 3. Составить программу определения f — 40-е число Фибоначчи. 3. Числа Фибоначчи (f n ) определяется формулами: f 0 = f 1 = 1; f n = f n = f n-1 + f n-2 при n=2, 3. Составить программу поиска f — первого числа Фибоначчи, большего m (m>1). 4. Числа Фибоначчи (f n ) определяется формулами: f 0 = f 1 = 1; f n = f n = f n-1 + f n-2 при n=2, 3. Составить программу вычисления s — суммы всех чисел Фибоначчи, которые не превосходят Составить программу, проверяющую, является ли заданное натуральное число совершенным, то есть равным сумме своих положительных делителей, кроме самого этого числа. 6. Дана непустая последовательность натуральных чисел, за которой следует 0. Вычислить сумму положительных элементов последовательности, порядковые номера которых нечетны. 7. Составить программу, проверяющую, является ли заданное натуральное число палиндромом, то есть таким, десятичная запись которого читается одинаково слева направо и справа налево. 8. Найти количество нечётных цифр целого положительного числа. 9. Найти первую цифру числа. 10. Подсчитать сумму квадратов первых нечетных чисел меньших заданного Z. 25

26 Циклы со счетчиком 1. Составить программу возведения натурального числа в квадрат, используя следующую закономерность: 1 2 = = = = n 2 = n-1 2. Определить количество трехзначных натуральных чисел, сумма цифр которых равна заданному числу N. 3. Составить программу вычисления суммы кубов чисел от 25 до Среди двузначных чисел найти те, сумма квадратов цифр которых делится на 13. Ответ:. 5. Написать программу поиска двузначных чисел, таких, что если к сумме цифр этого числа прибавить квадрат этой суммы, то получится это число. 6. Квадрат трехзначного числа оканчивается тремя цифрами, которые как раз и составляют это число. 7. Написать программу поиска четырехзначного числа, которое при делении на 133 дает в остатке 125, а при делении на 134 дает в остатке 111. Ответ: Найти сумму положительных нечетных чисел, меньших Найти сумму целых положительных чисел из промежутка от A до B, кратных 4 (значения переменных A и B вводятся с клавиатуры). 10. Найти сумму целых положительных чисел, больших 20, меньших 100, кратных 3 и заканчивающихся на 2, 4 или 8. Вложенные циклы 1. Исходное данное — натуральное число q, выражающее площадь. Написать программу для нахождения всех таких прямоугольников, площадь ко- 26

27 торых равна q и стороны выражены натуральными числами. 2. Составить программу для графического изображения делимости чисел от 1 до n (n — исходное данное). В каждой строке надо печатать число и сколько плюсов, сколько делителей у этого числа. Например, если исходное данное — число 4, то на экране должно быть напечатано: Составить программу получения всех совершенных чисел, меньших заданного числа n. Число называется совершенным, если равно сумме всех своих положительных делителей, кроме самого этого числа. Например, 28 — совершенно, так как 28= Из истории. Грекам были известны первые четыре совершенных числа: 6, 28, 496, Эти числа высоко ценились. Даже в XII веке церковь утверждала, что для спасения души необходимо найти пятое совершенное число. Это число было найдено только в XV веке. До сих пор совершенные числа полностью не исследованы — не известно, имеется ли конечное число совершенных чисел или их число бесконечно, кроме того, неизвестно ни одного нечётного совершенного числа, но и не доказано, что таких чисел нет. 5. Дано натуральное число n. Можно его представить в виде суммы трёх квадратов натуральных чисел? Если можно, то: a. указать тройку x, y, z, таких натуральных чисел, что x 2 + y 2 + z 2 = n; b. указать все тройки x, y, z таких натуральных чисел, что x 2 + y 2 + z 2 = n. 6. Найти натуральное число от 1 до с максимальной суммой делителей. 27

28 7. Даны натуральные числа a, b (a 29 Лабораторная работа 4 Краткое описание: понятие Класса создание простого Класса ввод и вывод на Консоль Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение Классы понятие Если программисту надо передать много взаимосвязанных частей данных функции, может быть сложным использовать только переменные. Например, каждый раз, когда нам нужно передать адрес, было бы утомительным передавать имя, улицу, дом, квартиру, город, страну и регион. Лучше задать структуру данных, которая будет содержать всю информацию вместе, а затем присваивать данным имена, такие как Address. Задание 7. Создать новый проект и набрать код программы. Для начала нужно добавить класс. Рисунок 4. Добавление нового класса 29

30 В новом окне меняем имя класса на Adress и описываем поля. ; 30

31 adr1.gorod=»псков»; adr1.ulitsa=»ленина»; adr1.dom=2; adr1.kv=101; Создадим еще один экземпляр adr2 Adress adr2; //Определяем тип переменной adr2 adr2=new Adress(); // Создаем экземпляр класса adr2.fio=»петров П.П.»; adr2.strana = «Белорусь»; adr2.region = «Ц»; adr2.gorod=»минск»; adr2.ulitsa=»ленина»; adr2.dom=2; adr2.kv=101; Обработаем событие, по набранной фамилии, выводим адрес либо Иванова, либо Петрова string name = Console.ReadLine(); if (name == «Иванов И.И.») Console.WriteLine(«Адресс Иванова И.И.: \n0, 1 регион, город 2, улица 3, д. 4, кв. 5», adr1.strana, adr1.region, adr1.gorod, adr1.ulitsa, adr1.dom, adr1.kv); else if (name == «Петров П.П.») Console.WriteLine(«Адресс Петрова П.П. \n0, 1 регион, город 2, улица 3, д. 4, кв. 5», adr2.strana, adr2.region, adr2.gorod, adr2.ulitsa, adr2.dom, adr2.kv); else Console.WriteLine(«Такого человека нет в базе»); 31

32 Рисунок 5. Пример работы программы Задание 8. Пример использования Класса без конструкторов и методов. Создать новый проект и набрать код программы, проверить программу для разных вариантов: когда тел. номер начинается на 77 или заканчивается на 5. using System; using System.Collections.Generic; using System.Linq; using System.Text; ; public int nom = 0; namespace ConsoleApplication1 class Program static void Main(string[] args) //Телефонная книга. /*Составьте программу, выдающую список абонентов, имеющих телефонный номер, начинающийся на 33.*/ Tel t1; //Определяем тип переменной t1 32

33 t1=new Tel(); // Создаем экземпляр класса t1.fio = «Иванов»; t1.nom = ; int y1 = t1.nom / 10000; if (y1 == 33) Console.WriteLine(t1.FIO + «, » + t1.nom); Tel t2; //Определяем тип переменной t2 t2 = new Tel(); // Создаем экземпляр класса t2.fio = «Петров»; t2.nom = ; int y2 = t2.nom / 10000; if (y2 == 33) Console.WriteLine(t2.FIO + «, » + t2.nom); Tel t3; //Определяем тип переменной adr1 t3 = new Tel(); // Создаем экземпляр класса t3.fio = «Сидоров»; t3.nom = ; int y3 = t3.nom / 10000; if (y3 == 33) Console.WriteLine(t3.FIO + «, » + t3.nom); Tel t4; //Определяем тип переменной adr1 t4 = new Tel(); // Создаем экземпляр класса t4.fio = «Никитин»; t4.nom = ; int y4 = t4.nom / 10000; 33

34 if (y4 == 33) Console.WriteLine(t4.FIO + «, » + t4.nom); Console.ReadLine(); Конструктор Класса Для начала кратко обсудим, что такое конструктор вообще. Конструктор — это функция (метод) класса. Раз эта функция, то описываем мы ее почти точно так же, как и любую другую функцию класса — пишем параметры в круглых скобках и т. п. Когда конструктор вызывается? В момент создания переменной. При этом у класса может быть несколько конструкторов — но при этом они должны различаться или типом параметров, или их количеством. Откройте проект, создающий Класс Adress. Добавьте конструктор: , int dom = 0, int kv = 0) 34

35 this.fio=fio; this.strana=strana; this.region=region; this.gorod=gorod; this.ulitsa = ulitsa; this.dom = dom; this.kv = kv; Обратите внимание на ряд особенностей конструктора. Во-первых, конструктор называется как класс. Раз наш класс называется Adress, значит и конструктор должен называться точно также. И во-вторых, конструктор, в отличие от других методов класса, не возвращает никакого значения (даже типа vo ; 35

36 adr1.gorod=»псков»; adr1.ulitsa=»ленина»; adr1.dom=2; adr1.kv=101; //Вызываем конструктор Adress adr2 = new Adress(«Петров П.П.»,»Белорусь»,»Ц»,»Минск»,»Ленина»,2,101); //Вывести оба экземпляра Класса Console.WriteLine(«Адресс Иванова И.И.: \n0, 1 регион, город 2, улица 3, д. 4, кв. 5», adr1.strana, adr1.region, adr1.gorod, adr1.ulitsa, adr1.dom, adr1.kv); Console.WriteLine(«Адресс Петрова П.П. \n0, 1 регион, город 2, улица 3, д. 4, кв. 5», adr2.strana, adr2.region, adr2.gorod, adr2.ulitsa, adr2.dom, adr2.kv); Console.ReadLine(); Задание 9. Создание класса для арифметических вычислений Рассмотрим Программу решения квадратного уравнения с использование класса KvUr Создать новый проект и набрать код программы, проверить программу для разных вариантов: когда тел. номер начинается на 77 или заканчивается на 5. Основная программа using System; using System.Collections.Generic; using System.Linq; using System.Text; 36

37 namespace ConsoleApplication1 /// /// Тестирование решения квадратного уравнения /// class Program /// /// Стартовая процедура /// ///

static vo , uravn.out()); Console.ReadLine(); 37

38 Класс KvUr using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Класс, решающий квадратное уравнение /// >

39 if (d > 0) return 2; соответственно 2, 1, 0 решений else if (d == 0) return 1; else return 0; //Возвращает // метод: вывод корней уравнения public string Out() int n = CountK(); //Вызов метода количества решений if (n == 0) return «Нет корней»; else if (a == 0) return «Вырожденное квадратное уравнение»; else if (n == 1) return «x = » + (-b / 2 / a).tostring(); else double d = Math.Sqrt(Discr()); double x1 = (-b + d) / 2 / a; double x2 = (-b — d) / 2 / a; return «x1 = » + x1.tostring() + » x2 = » + x2.tostring(); //Возвращает значения корней уравнения Обработка ошибок. Принимая во внимание, что.net Framework включает большое количество предопределенных классов исключений, возникает вопрос: как их использовать в коде для перехвата ошибочных условий? Для того чтобы справиться с возможными ошибочными ситуациями в коде С#, программа обычно делится на блоки трех разных типов: 39

40 Блоки try инкапсулируют код, формирующий часть нормальных действий программы, которые потенциально могут столкнуться с серьезными ошибочными ситуациями. Блоки catch инкапсулируют код, который обрабатывает ошибочные ситуации, происходящие в коде блока try. Это также удобное место для протоколирования ошибок. Блоки finally инкапсулируют код, очищающий любые ресурсы или выполняющий другие действия, которые обычно нужно выполнить в конце блоков try или catch. Важно понимать, что этот блок выполняется независимо от того, сгенерированo исключение или нет. Try и catch Основу обработки исключительных ситуаций в С# составляет пара ключевых слов try и catch. Эти ключевые слова действуют совместно и не могут быть использованы порознь. Ниже приведена общая форма определения блоков try/catch для обработки исключительных ситуаций: try // Блок кода, проверяемый на наличие ошибок. catch (Тип ошибки1) // Обработчик исключения для ошибки 1 catch (Тип ошибки 2) // Обработчик исключения для ошибки

41 Задание 10. Обработка ошибок. Задача 1. Пример программы деления двух чисел с обработкой 2 исключений: деления на ноль и если вместо числа введена буква. Создать новый проект и набрать код программы, проверить программу для разных вариантов. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 + result); // Обрабатываем исключение возникающее при делении на ноль catch (DivideByZeroException) 41

42 Console.WriteLine(«Деление на 0 запрещено. \n»); goto link1; // Обрабатываем исключение при некорректном вводе числа в консоль catch (FormatException) Console.WriteLine(«Это НЕ число. \n»); goto link1; Console.ReadLine(); Рисунок 6. Пример работы программы Все определяемые на уровне пользователя и системы исключения в конечном итоге всегда наследуются от базового класса System.Exception, который, в свою очередь, наследуется от класса System.Object. Обработка ошибок. Задача 2. Пример программы обработки ошибок форматов введенных данных: Создать новый проект и набрать код программы, проверить программу для разных вариантов Основная программа using System; using System.Collections.Generic; 42

43 using System.Linq; using System.Text; namespace ConsoleApplication1 > /// Класс «Человек». /// Конструктор — иллюстрация методов класса Convert и обработки ошибок /// class Person // поля класса (закрытые) private string fam; // Фамилия private string im; // Имя 43

44 private System.DateTime dr; // Дата рождения Системная операция преобраования данных private double rost; // рост, м private int ves; // Вес, кг // Конструктор по умолчанию. Ввод полей с контролем правильности public Person() Console.Write(«Фамилия «); fam = Console.ReadLine(); Console.Write(«Имя «); im = Console.ReadLine(); Console.Write(«Дата рождения «); //Если Дата введена не в формате даты дд.мм.гг, то обработчик исключений выводит дату 01/01/2001 try string s = Console.ReadLine(); dr = Convert.ToDateTime(s); catch (FormatException) dr = Convert.ToDateTime(«01/01/2001»); Console.Write(«Рост, м «); try string s = Console.ReadLine(); // надо вводить десятичную запятую! rost = Convert.ToDouble(s); catch (FormatException) 44

45 rost = 1.6; // если введена буква или символ, выводится средний рост 1 м 60 см. Console.Write(«Вес, кг «); try string s = Console.ReadLine(); ves = Convert.ToInt32(s); catch (FormatException) ves = 50; // если введена буква или символ, выводится средний вес 50 кг // Метод — вывод данных на экран public void Vyvod() Console.Clear(); // очистить экран // для нетекстовых переменных автоматически вызывается метод ToString Console.WriteLine(«Фамилия » + this.fam); Console.WriteLine(«Имя » + this.im); Console.WriteLine(«Дата рождения » + this.dr); Console.WriteLine(«Рост » + this.rost); Console.WriteLine(«Вес » + this.ves); 45


46 Самостоятельная работа Простые классы. 1. Опишите, используя Класс, каталог книг в библиотеке. Составьте программу, выдающую список книг А. Дюма, хранящихся в библиотеке. 2. Опишите, используя Класс, таблицу дат и событий русской истории. Составьте программу, выдающую список событий XIX века. 3. Опишите, используя Класс, школьный класс (Фамилия и инициалы, дата рождения, месяц рождения, год рождения). Составьте программу, выдающую список учеников, рожденных в мае месяце. 4. Опишите, используя Класс, записную книжку. Составьте программу, выдающую список друзей, кому в этом году исполняется 20 лет. (Фамилия и инициалы, год рождения, день рождения, месяц рождения). 5. Опишите, используя Класс, школьный класс (Фамилия и инициалы, день рождения, месяц рождения, год рождения). Составьте программу, выдающую день рождения класса (среднее арифметическое дней и месяцев). 6. Опишите, используя Класс, школьную нагрузку (фамилия преподавателя, класс, часы). Определить у какого преподавателя самая большая нагрузка и кого самая низкая. 7. При сдаче норм ГТО, были получены результаты забега на 100 метров и прыжков в длину, задайте нормы ГТО по этим видам, определите списки учеников, не выполнивших нормативы, количество учеников сдавших нормативы, а также списки 3 лучших. 8. Опишите, используя Класс, вступительные экзамены. Абитуриенты сдавали три экзамена, для поступления необходимо набрать 12 баллов. Определите списки абитуриентов, зачис- 46

47 ленных в институт, количество не сдавших экзамены, списки абитуриентов сдавших три экзамена на Опишите, используя Класс, данные на учеников (фамилия, улица, дом, квартира). Составьте программу, определяющую сколько учеников живет на улице Свердлова, списки учеников, живущих в доме номер Опишите, используя Класс, почтовую сортировку (город, улица, дом, квартира, кому, ценность). Составьте программу, определяющую: 1) сколько посылок отправлено в г. Москву; 2) сколько и куда (список городов) отправленно посылок ценностью выше 10 рублей; 3) есть ли адреса, куда отправлено более 1 посылки, если есть то сколько и кому. 11. В экзаменационной ведомости можно выделить сведения о ведомости (предмет, номер группы, дата экзамена), сведения о человеке (фамилия, номер зачетной книжки, оценка за экзамен). Определите, сколько человек не сдали информатику, выдать их списки: фамилия, номер группы. 12. Опишите, используя Класс, товар (наименование товара, старая цена, новая цена). Составьте программу, определяющую на какие товары повысятся цены и на сколько процентов. 13. Опишите, используя Класс, время (часы, минуты, секунды). Определите какое время t1 или t2 меньше, увеличьте время T на 1 секунду, вычислите интервал времени, прошедший от времени t1 до времени t2 (t1>t2). 14. В анкетных данных обозначены фамилия, пол, рост. Определите средний рост женщин, фамилию самого высокого мужчины. 15. Дана анкета фамилия, пол, число, месяц, год рождения. Выберите самого старшего мужчину, напечатайте все фамилии, начинающиеся с буквы «Б», и даты рождения этих людей 47

Цукерберг рекомендует:  Первичный анализ данных в Python

48 Лабораторная работа 5 Краткое описание: Класс Random случайное число одномерные массивы двумерные массивы Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение Класс Random имеет конструктор класса: для того, чтобы вызывать методы класса, нужно вначале создавать экземпляр класса. Этим Random отличается от класса Math, у которого все поля и методы — статические, что позволяет обойтись без создания экземпляров класса Math. Перегруженный метод public int Next() при каждом вызове возвращает положительное целое, равномерно распределенное в некотором диапазоне. Диапазон задается параметрами метода. Три реализации метода отличаются набором параметров: public int Next () — метод без параметров выдает целые положительные числа во всем положительном диапазоне типа int; public int Next (int max) — выдает целые положительные числа в диапазоне [0,max]; public int Next (int min, int max) — выдает целые положительные числа в диапазоне [min,max]. Задание 11. Программа, содержащая 4 метода: создание и вывод случайного числа до 10, нахождение максимума, минимума и суммы 3 чисел. Введите код программы, комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. 48

49 Модифицируйте программу, добавив метод нахождения суммы квадратов трех целых чисел. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 + chisla.summa()); Console.ReadLine(); Класс Random using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Класс: 3 целых числа и разные действия с ними /// class ThreeInt // поля класса private int d1, d2, d3; 49

50 /// /// Конструктор без параметров: создаются 3 случайных числа до 10 /// public ThreeInt() // демонстрация класса Random const int maxd = 10; // первоначально создается объект случ величины Random rnd = new Random(); d1 = rnd.next(maxd); d2 = rnd.next(maxd); d3 = rnd.next(maxd); /// /// Вывод всех чисел на экран /// public void Vyvod() /*При использовании в качестве типа возвращаемого значения для метода, void указывает, что метод не возвращает значение*/ Console.WriteLine(«Первое число 0»,d1); Console.WriteLine(«Второе число 0»,d2); Console.WriteLine(«Третье число 0»,d3); /// /// Поиск максимального из чисел /// /// возвращает максимум public int MaxDig() 50

51 int dmax; if (d1 > d2) dmax = d1; else dmax = d2; if (d3 > dmax) dmax = d3; return dmax; /// /// Поиск минимального из чисел /// /// возвращает минимум public int MinDig() int dmin; dmin = (d1 > d2)? d2 : d1; dmin = (d3 > dmin)? dmin : d3; return dmin; /// /// Расчет суммы чисел /// /// возвращает сумму public int Summa() return d1 + d2 + d3; Задание 12. Введите код программы «Решения треугольников по 3 сторонам», комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, добавив код, проверяющий, является ли треугольник прямоугольным. Обратите внимание на генерацию исключений. 51

52 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Тема: операторы языка /// ); Класс Треугольник using System; using System.Collections.Generic; using System.Linq; using System.Text; 52

53 namespace ConsoleApplication1 /// /// Треугольник по трем сторонам /// class Treug // поля — стороны треугольника private double a, b, c; /// /// Конструктор /// ///

public Treug(double a, double b, double c) if (a b) double t = a; a = b; b = t; if (a > c) double t = a; a = c; c = t; if (b > c) double t = b; b = c; c = t; // проверить соблюдения основного соотношения сторон if (a + b 54 this.a = a; this.b = b; this.c = c; /// /// Вывод данных /// public vo , this.c); /// /// Расчет периметра /// /// public double Perimetr() return this.a + this.b + this.c; /// /// Расчет площади по формуле Герона /// /// public double Ploshad() double p = Perimetr() / 2; return Math.Sqrt(p * (p — this.a) * (p — this.b)*(p — this.c)); 54

55 Массивы. Массивом называют упорядоченную совокупность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов. Число индексов характеризует размерность массива. 1. Одномерные массивы Объявление одномерных массивов [] ; Например: int[] k; // k- одномерный массив, состоящих из целых чисел int[] a,b,c; //одновременное объявление 3 массивов целых чисел После объявления, так как массив представляет ссылочный объект, то для создания массива необходима инициализация k=new int [3]; //создание массива из 3 чисел Очень часто инициализация совпадает с объявлением. В первом случае инициализация является явной и задается константным массивом. double[] x= 5.5, 6.6, 7.7; // константный массив Следуя синтаксису, элементы константного массива следует заключать в фигурные скобки. Во втором случае создание и инициализация массива выполняется в объектном стиле с вызовом конструктора массива. И это наиболее распространенная практика объявления массивов. 55

56 int[] d= new int[5] В C# нумерация элементов массива идет с нуля d[0], d[1], d[2], d[3], d[4]. Элемента d[5] в данном массиве не существует. Задание 13. Введите код программы, комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, добавив массивы v3=v1+v2; v4=a+c+u. Вывести напечать все массивы. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 */; i++) a[i] = rnd.next(1, 100); //Заполняем массив b случайными числами 56

57 for (int i = 0; i 58 Класс Arr для вывода на печать using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 , i, T[i]); Console.WriteLine(); 2. Двумерные массивы Одномерные массивы позволяют задавать такие математические структуры как векторы, двумерные — матрицы, трехмерные — кубы данных, массивы большей размерности — многомерные кубы данных. Так задается двумерный массив: int[,] v = new int [2,3]; Обратите внимание, что пара квадратных скобок только одна. Естественно, что в нашем примере у массива 6 (=2*3) элементов (v[0,0] — первый, v[1,2] — последний). Аналогично мы можем задавать многомерные массивы. 58

59 Пример трехмерного массива: int[,,] a = new int [2,10,7]; А вот так можно сразу инициализировать двумерные массивы: int[,] b = 2,-2,3,-22,0,4; //константный массив Задание 14. Пример программы умножения элементов матрицы на 7. Введите код программы, комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, добавив умножение элементов главной диагонали на 3. Вывести новую матрицу. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 ); int size2 = 59

60 int.parse(console.readline()); int[,] v = new int[size1, size2]; //Заполнение матрицы случайными числами Random rnd = new Random(); for (int i = 0; i 61 for (int j = 0; j /// Тема: одномерные массивы 61

62 /// class Program /// /// Стартовая процедура /// ///

static vo ,uravn.k); if (uravn.k > 0) Console.WriteLine(«Корни уравнения:»); for (int i = 0; i 63 using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Класс, решающий квадратное уравнение для любого случая /// >

64 double d = Discr(); if (d > 0) this.k = 2; else if (d == 0) this.k = 1; else this.k = 0; // метод: вычисление корней уравнения private vo >

65 /// /// Тема: двумерные массивы /// ); Matrica y = Matrica.Transpon(x); //метод транспонирования y.vyvod(); //Метод выовда для матрицы Y 65

66 Класс Матрица using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Класс: двумерная матрица /// class Matrica // поля public double[,] a; // двумерный массив действительных чисел /// /// Конструктор /// ///

public Matrica(int m, int n) if (m /// Вывод матрицы по строкам /// public void Vyvod() 66

67 for (int i = 0; i /// Транспонирование матрицы /// ///

mass — транспонируемая матрица

/// public static Matrica Transpon(Matrica mass) int m = mass.a.getlength(0); int n = mass.a.getlength(1); Matrica b = new Matrica(n, m); // число строк = числу столбцов исх массива. И наоборот for (int i = 0; i 68 Самостоятельная работа. Одномерные массивы. 1. Элементы массива А записать в виде массивов В и С, причем в массив В записать элементы, стоящие на нечетных местах в массиве А, а в массив С записать элементы, стоящие на четных местах в массиве А. 2. В данном массиве целых чисел найти минимальное значение и все номера элементов массива, равных ему. 3. Элементы линейного вещественного массива X[n] вычисляются следующим образом: X[1] = 1, X[2] = 2. X[k] = X[k-1] * X[k-2], k= 3,4. n. Написать программу вычисления элементов массива X. 4. Написать программу замены положительных элементов линейного вещественного массива Y[n] на Вычислить произведение сумм положительных и отрицательных элементов массива A[n]. 6. Требуется ввести последовательность целых чисел и проверить, есть ли среди них отрицательные. Если они есть, вывести новую последовательность, состоящую из отрицательных членов исходной последовательности, записанных в том же порядке, в каком они встречались в исходной. Если их нет, сообщить об этом. 7. В одномерном массиве переставьте максимальный и минимальный элементы местами. 8. В одномерном массиве требуется найти наибольший элемент и номер второго такого элемента, если их несколько. 9. Написать программу замены элементов линейного вещественного массива Y[n], имею- 68

69 щих нечетные порядковые номера, на число Написать программу, с помощью которого первые k элементов массива A[n], kєn, заполняются последовательностью 1,3,1,3, В данной последовательности чисел найти минимальное значение среди положительных элементов и все номера членов последовательности, равных ему. 12. «Сожмите массив», «выбросив» каждый второй его элемент (дополнительные массивы использовать не разрешается). 13. Задан одномерный массив A[n], состоящий только из нулей и единиц. Проверьте, строго ли они чередуются. 14. Составить программу, увеличивающую ненулевые элементы линейного вещественного массива Y[n] на Для линейного массива A[n] найти сумму всех элементов: а) равных заданному числу D; б) не равных заданному числу D; в) больше заданного числа D; г) не больше заданного числа D; д) меньше заданного числа D; e) не меньше заданного числа D. 16. Написать программу, увеличивающий на 2 все элементы вещественного массива Y[n], которые больше Заменить максимальный элемент массива А[n] его индексом. 18. Осуществите циклическую перестановку элементов массива: первый элемент должен стать вторым, второй — третьим и т.д., последний — первым. Нового массива не заводить. 19. Для линейного целого массива A[n] найти сумму всех: а) четных элементов; б) нечетных элементов; в) элементов, кратных Определить, имеются ли в целочисленном массиве С [10], два подряд идущих нулевых элемента. 69

70 21. Дан массив А[n] и число Х. Написать программу, который печатает «ДА», если Х совпадает с одним из элементов данного массива, и «НЕТ» — в противном случае. 22. Дан массив А с N элементами. Написать программу, которая изменяет значения элементов массива по правилу: А[i] равно сумме элементов А[k] для к=1. i. Дополнительный массив не использовать. 23. Написать программу, при выполнении которой элементы массива заменяются на сумму предыдущего и последующего элементов, если такие существуют. 24. Написать программу нахождения номеров наибольшего неположительного и наименьшего неотрицательного элемента массива A[n]. Двумерные массивы. 1. Дан двумерный массив A[m, n]. Написать программу построения одномерного массива B[m], элементы которого соответственно равны: а) суммам элементов строк, б) произведениям элементов строк, в) наименьшим элементам строк. 2. Массив А[m,n] содержит два (и только два) одинаковых числа. Требуется напечатать их индексы. Обратите внимание на то, чтобы никакой элемент массива не сравнивался сам с собой! 3. Массив А[m,n] содержит вещественные числа. Требуется ввести целое число K и вычислить сумму элементов А[i,j], для которых i+j=к. Прежде, однако следует убедиться, что значение К позволяет найти решение, в противном случае нужно использовать обработчик ошибок. 70

71 4. Элемент двумерного массива называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером NxN. 5. Дан массив A[n,n]. Составить программу, которая прибавила бы каждому элементу данной строки элемент, принадлежащий этой строке и главной диагонали. 6. Сформируйте двумерный массив NxN по следующему правилу: элементы главной диагонали равны 1, ниже главной диагонали — 0, а выше — сумме индексов. 7. Транспонируйте произвольный двухмерный массив. Дополнительные массивы не используйте. 8. Вычислить след заданной квадратной матрицы A[N,N]. След квадратной матрицы — это число, равное сумме элементов главной диагонали. 9. Из массива A[n,n] сформируйте массив B[n*n], «развернув» его по столбцам (вариант: по строкам). 10. Из предложенного одномерного массива длины N сформируйте двумерный массив так, чтобы первая строка нового массива содержала четные по номеру элементы исходного массива, а вторая — нечетные (варианты: четное или нечетное N). 11. Напишите программу, находящую в двумерном массиве номера строк с наибольшей суммой элементов и записывающую эти номера в одномерный массив 12. Определите, имеются ли в массиве А[4,4] строки, равные первой строке. Если имеются, выведите ДА, если отсутствуют — НЕТ. 13. Найти сумму тех элементов двумерного массива, которые делятся на Написать программу для перестановки максимальных элементов строк двумерного массива 71

72 В[L, L] на главную диагональ. Элементы главной диагонали В[i,i] ставить на место максимального элемента в этой строке. 15. Назовем максимальный элемент двумерного массива S[n,n] — главным. Написать программу, которая находит произведение чисел той строки двумерного массива, в которой расположен главный элемент. 16. Написать программу заполнения массива N*N нулями и единицами в шахматном порядке. 17. Дан массив A[n,m]. Найти номер столбца, для которого среднеарифметическое значение его элементов: a) максимально; b)минимально. 18. Написать программу, которая меняет местами значения элементов двумерного массива чисел А[n,n] симметричных относительно главной диагонали. 19. Написать программу, которая позволяет напечатать таблицу Пифагора. Таблица Пифагора — это квадратная матрица из 10 строк и 10 столбцов, каждый элемент которой определяется формулой: A[i,j] = i*j. 20. Заполнить массив А следующим образом Заполнить массив А следующим образом Получить массив B из массива А удалением n-й строки и k-го столбца. Написать отчет по лабораторной работе. 72

73 Лабораторная работа 6 Краткое описание: Методы Класса System.String Виртуальный Класс Array Посимвольный анализ Массива Разбор строки Регулярные выражения Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение Строковые типы данных Строковые константы Без констант не обойтись. В C# существуют два вида строковых констант: обычные константы, которые представляют строку символов, заключенную в заданные обычной константой c предшествующим В обычных константах некоторые символы интерпретируются особым образом. Связано это прежде всего с тем, что необходимо уметь задавать в строке непечатаемые символы, такие, как, например, символ табуляции. Возникает необходимость задавать символы их кодом — в виде escape-последовательностей. Для всех этих целей используется комбинация символов, начинающаяся символом «\» — обратная косая черта. Так, пары символов: «\n», «\t», «\\», «\»» задают соответственно символ перехода на новую строку, символ табуляции, сам символ обратной косой черты, символ кавычки, вставляемый в строку, но не сигнализирующий о ее окончании. Комбинация «\xnnnn» задает символ, определяемый шестнадцатеричным кодом NNNN. Хотя такое решение возникающих проблем совершенно естественно, иногда возникают неудобства: например, при задании констант, определяющих путь к файлу, приходится каждый раз удваивать символ обратной 73

74 косой черты. Это одна из причин, по которой все символы трактуются в полном соответствии с их изображением. Поэтому путь к файлу лучше Единственная проблема в таких случаях: как задать символ кавычки, чтобы он не воспринимался как конец самой константы. Решением является удвоение символа. Строки в C# — это экземпляры класса System.String. В C# есть тип string, но класс System.String является более продвинутым, так что его использование часто оказывается более оправданным и простым. Этот класс имеет множество методов и свойств, некоторые из которых перечислены ниже: Свойство Length. Возвращает длину строки. Пример использования: String s=»здравствуй, Мир!»; int k=s.length; //в k запишется 16 Метод Compare. Статический метод, сравнивающий две строки. Возвращает 0, есть строки равны, отрицательное значение, если первая строка меньше второй и положительное значение, если первая строки больше второй (больше и меньше в алфавитном смысле, разумеется). namespace ConsoleApplication1 . 74

75 Console.WriteLine(String.Compare(s1, s2)); //Выдаст 1, т. к. «Молоко» больше «Масло». «о» позже «а» Console.WriteLine(String.Compare(s1, s3)); //Выдаст -1, т. к. «Молоко» меньше «Сливки». «м» раньше «с» Console.ReadLine(); Метод Equals. Метод, возвращает true, если строки равны, false — если не равны. Может быть как статическим, так и не статическим. String t1=»дом», t2=»дым»; //Статический метод Console.WriteLine(String.Equals(t1, t2).tostring()); //Не статический метод Console.WriteLine(t1.Equals(t2).ToString ()); Метод Substring. Поволяет извлечь из строки подстроку. Пример использования: String a1 = «Смирно!», a2; a2 = a1.substring(1, 3); //записывает в строку а2 3 символа строки а1 начиная со второго, нумерация символов в строке начинается с 0, Console.WriteLine(a2); //Напечатается «мир» Метод Insert. Вставляет в строку другую строку. String y1 = «Графа», y2; y2 = y1.insert(4, «ик»); Console.WriteLine(y2); 75

76 Первый параметр тут — это куда вставляем (нумерация, как всегда, с нуля), второй — что за строчку вставляем. Метод IndexOf. Позволяет найти в строке подстроку. String x1 = «Природа», x2 = «род», x3 = «дар»; Console.WriteLine(x1.IndexOf(x2)); //Напечатается 3 — начальная позиция подстроки Console.WriteLine(x1.IndexOf(x3)); //Напечатается -1 Этот метод возвращает номер позиции, на котором в строке находится передаваемая в качестве параметра подстрока. Если такой подстроки нет, то возвращается -1. Метод Replace. Производит замену в строке. String r1 = «Малоко», r2 = «а», r3; r3 = r1.replace(r2, «о»); // В строке 1 меняем подстроку 2 на «о» Console.WriteLine(r3); Методы EndsWith и StartsWith. Проверяют, не завершается ли строка на заданную строку, или не начинается ли строка с заданной строки соответственно. String b1 = «Палиндром»; if (b1.startswith(«пал»)) Console.WriteLine(«Строка начинается на \»Пал\»»); else Console.WriteLine(«Строка не начинается на \»Пал\»»); if (b1.endswith(«дом»)) Console.WriteLine(«Строка заканчивается на \»дом\»»); else Console.WriteLine(«Строка не заканчиваетсяна \»дом\»»); Console.ReadLine(); 76


77 Методы ToUpper и ToLower переводят строку в верхний или нижний регистр соответственно. Пример использования: String u1 = «фмф»; u1 = u1.toupper(); Console.WriteLine(«Наш факультет — 0!»,u1); Console.ReadLine(); Методы Trim, TrimEnds и TrimStart. Удаляют пробельные символы из начала и конца строки (Trim), только с конца строки (TrimEnds) и только с начала строки (TrimStart). String l1 = » пропуск слов «; Console.WriteLine(«Начальный вариант 0 строки»,l1); l1=l1.trim(); Console.WriteLine(«Усовершенствованный 0 строки», l1); Виртуальный класс Array Каждый создаваемый массив получает большую часть функциональности от класса System.Array. Общие члены этого класса позволяют работать с массивом с использованием полноценной объектной модели. Таким образом, методы и свойства, определенные в классе Array, можно использовать с любым массивом С#. Создание массивов Класс Array является абстрактным, поэтому создать массив с использованием какого-либо конструктора нельзя. Однако вместо применения синтаксиса С# для создания экземпляров массивов также возможно создавать их с помощью статического метода CreateInstance(). Это исключительно удобно, когда 77

78 заранее неизвестен тип элементов массива, поскольку тип можно передать методу CreateInstance() в параметре как объект Type: // Создаем массив типа string, длиной 5 Array myarr = Array.CreateInstance(typeof(string), 5); // Инициализируем первые два поля массива myarr.setvalue(«имя», 0); myarr.setvalue(«возраст», 1); // Считываем данные из массива string s1 = (string)myarr.getvalue(0); string s2 = (string)myarr.getvalue(1); Console.WriteLine(s1+», «+s2); Console.ReadLine(); Сортировка и поиск. Статические методы класса Array Статические методы класса Array позволяют решать самые разнообразные задачи: 1. Copy — позволяет копировать весь массив или его часть в другой массив. 2. IndexOf, LastIndexOf — определяют индексы первого и последнего вхождения образца в массив, возвращая — 1, если такового вхождения не обнаружено. 3. Reverse — выполняет обращение массива, переставляя элементы в обратном порядке. 4. Sort — осуществляет сортировку массива. 5. BinarySearch — определяет индекс первого вхождения образца в отсортированный массив, используя алгоритм двоичного поиска. Задание 17. Введите код программы, в которой используются все перечисленные выше методы, комментарии вводить не обязательно, запустите программу на 78

79 выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, изменяя переменные и строки вывода. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 ,search+1); 79

80 Задание 18. Введите код программы, в которой используются все перечисленные выше методы, комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, добавив еще одну переменную класса «Случайный массив» и отсортируйте новый массив по убыванию. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Тема: класс Array /// ); int n = int.parse(console.readline()); int[] p = ra.poisk(n); 80

81 if (p == null) Console.WriteLine(«В массиве такого элемента нет»); else Console.WriteLine(«Найденные индексы массива:»); for (int i = 0; i /// Класс: одномерный массив случайных целых или действительных чисел 81

82 /// class RandArr // поле класса private Array a; /// /// Конструктор /// ///

тип элементов массива: 1 — целый, 2 — действительный

количество элементов в массиве

максимальный элемент массива (минимальный = 0)

public RandArr(int t, int size, double max) // предупреждение возможных ошибок if ((t!= 1 && t!= 2) size 83 // заполнение массива случайными числами for (int i = 0; i /// Для доступа к массиву извне /// /// public Array GetArr() return this.a; /// /// Вывод массива на экран /// public void Vyvod() foreach (object elem in this.a) Console.Write(«0 «, elem.tostring()); Console.WriteLine(); /// /// Ищет номера (индексы) вхождения элемента s в массив a 83

искомый элемент (типа int или double)

/// public int[] Poisk(object s) int[] ind = new int[this.a.length]; // массив для записи номеров элементов. Размер — с запасом int[] indexes = null; // выводимый массив. Если элемент не будет найден, ф-ция возвратит null int i=0,n = 0; while (n!= -1) n = Array.IndexOf(this.a, s, n); // статический метод if (n!= -1) ind[i++] = n++; if (i > 0) indexes = new int[i]; // выделение памяти для выводимого массива Array.Copy(ind, indexes, i); // копирование индексов в новый массив return indexes; // по окончании функции сборщик мусора автомат. удаляет массив ind из кучи 84

85 Задание 19. Введите код программы «Разбор строки (массив символов). Стандартные классы Array, Char», в которой используются все перечисленные выше методы, комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, изменяя переменные и строки вывода. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Тема: символы, массивы символов /// >

86 RazborStroki.PrintArr(«Буквы «, b); RazborStroki.PrintArr(«Цифры», c); RazborStroki.PrintArr(«Знаки препинания «,d); RazborStroki.PrintArr(«Прочие символы»,e); using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Класс: разбор строки на массивы символов, цифр, знаков препинания, прочих символов /// class RazborStroki // поле: разбираемая строка private string s; /// /// Конструктор /// ///

public RazborStroki(string s) this.s = s; /// /// Добавляет символ в конец массива, если его еще нет /// 86

индекс последнего элемента массива

/// private static vo > /// Создание массива символов /// ///

вид символа; 1-буква, 2- цифра, 3-препинание, 4 прочие

/// private char[] MakeArr(int v >

88 case 1: if (Char.IsLetter(c)) AddChar(c,temp, ref n); break; case 2: if (Char.IsDigit(c)) AddChar(c,temp, ref n); break; case 3: if (Char.IsPunctuation(c)) AddChar(c,temp, ref n); break; case 4: if (!Char.IsLetter(c) &&!Char.IsDigit(c) &&!Char.IsPunctuation(c)) AddChar(c,temp, ref n); break; // скопировать temp в новый массив с реальными размерами if (n > 0) symb = new char[n]; Array.Copy(temp, symb, n); Array.Sort(symb); return symb; /// /// Возвращает массив букв /// /// public char[] Letters() return MakeArr(1); /// /// Возвращает массив букв /// /// public char[] Digits() return MakeArr(2); 88

89 /// /// Возвращает массив букв /// /// public char[] Punct() return MakeArr(3); /// /// Возвращает массив букв /// /// public char[] Others() return MakeArr(4); //Метод выводы массивов public static vo , a[i]); Console.WriteLine(); 89

90 Задание 20. Введите код программы «Класс слова. Стандартный класс String», комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Модифицируйте программу, изменяя переменные и строки вывода Класс слова. Стандартный класс String. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 , s); Console.WriteLine(); Console.ReadLine(); Класс Слова using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 90

91 /// /// Операции со строками /// class Slova private string s; // поля класса /// /// Конструктор. /// ///

не должна быть пустая

public Slova(string s) if (s == null s.length == 0) throw new ArgumentNullException(); // приводим строку к набору слов, убирая пунктуацию и лишние пробелы this.s = DelPunct(s); /// /// Вывод строки /// /// public string Out() return this.s; /// /// Отсортированный список слов в строке /// /// public string[] SpisokSlov() string[] spis = this.s.split(new char[] ‘ ‘ ); 91

92 Array.Sort(spis, Sravn); return spis; /// /// Сравнение двух строк по длине. /// Используется при сортировке массива слов /// ///

/// private int Sravn(string s1, string s2) // Используется метод CompareTo прародителя Object int n = s1.length.compareto(s2.length); if (n!= 0) return n; else return s1.compareto(s2); // если длины строк равны, сравниваются сами строки /// /// получить в строке s слова, разделенные пробелом /// ///

/// private string DelPunct(string s) string se = new string(‘ ‘, s.length); // получить строку из пробелов StringBuilder st = new StringBuilder(se); 92

93 for (int i = 0; i 94 Методика применения 1. Подключить пространство имен System.Text.RegularExpressions 2. Создать экземпляр класса RegEx, задающий поисковую строку RegEx p = new Regex( ^(a b)* ); 3. Вызвать метод Match, возвращающий результат поиска Match m = p.match(str); // str строка, в кот. ищем 4. Проанализировать, был ли успешным поиск if (m.success) 5. Вывести первую найденную строку, удовлетворяющую условию m.value или индекс найденной подстроки m.index Условные обозначения классы символов () Круглые скобки группа символов [] Квадратные скобки один из множества символов [A-Z] Один из диапазона символов (a b c) Один из символов. Аналогично [abc] /w Множество символов: знаки латиницы и цифры /s Пробелы /d Цифры Условные обозначения модификаторы. Точка любой символ ^ Начало строки $ Конец строки * 0 или более соответствий + 1 или более соответствий? 0 или 1 соответствие n Ровно n соответствий (вместо n подставить число) Более подробно метасимволы можно узнать по ссылке: 94

95 Задание 21. Введите код программы, использующей методику поиска подстроки в строке., в которой используются перечисленные выше методы, комментарии вводить не обязательно, запустите программу на выполнение, проверьте различные варианты выполнения программы. Задание: придумать несколько примеров для поиска одного элемента и несколько примеров для поиска подстроки из нескольких элементов. Модифицируйте программу. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 ; 95

Цукерберг рекомендует:  Отслеживание и контроль мультитач событий на веб-страницах

96 obrazec // \w — англ буквы и цифры // + — одно или более соответствий // поисковая строка: буква а и за ней одна или более букв или цифр na ; //. — любой символ, кроме конца строки na >


97 s Files\Microsoft Visual Studio 10.0\Samples\text.txt»; obrazec A-Z]\:»; // ^ — в начале строки na ; na >

98 s Files\Microsoft Visual Studio 10.0\Samples\text.txt»; obrazec А-Я \w \.]+(\\)»; // список папок в пути na ; obrazec // выражения в скобках нумеруются na >

99 /// /// Найти первое соответствие /// ///

/// static public string[] FindMatch(string stroka, string poisk) Regex pat = new Regex(poisk); // регулярное выражение для поиска подстроки Match match = pat.match(stroka); // создан объект, в кот. результаты поиска string found = «»; if (match.success) // если что-нибудь найдено found = match.value; // в свойстве Value — первая найденная строка string[] s = found; return s; // если не найдено, возвращается пустая строка /// /// Найти все соответствия /// ///

/// static public string[] FindMatches(string stroka, string poisk) 99

100 Regex pat = new Regex(poisk); // регулярное выражение для поиска подстроки MatchCollection matches = pat.matches(stroka); // создан объект, в кот. результаты поиска string[] temp = new string[matches.count]; int i=0; foreach (Match match in matches) if (match.length>0) // берем только непустые строки temp[i++] = match.value; string[] found = new string[i]; Array.Copy(temp, 0, found, 0, i); return found; static public void Print(string stroka, string poisk, string[] found) Console.WriteLine(«\nИсходная строка 0», stroka); Console.WriteLine(«Cтрока для поиска 0», poisk); foreach(string s in found) Console.WriteLine(«Найденная строка 0», s); 100

101 Самостоятельная работа Посимвольный анализ и преобразование строк. Строки и числа. 1. Дана строка. Подсчитать количество содержащихся в ней цифр. 2. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв. 3. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв. 4. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные. 5. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные. 6. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные в строчные. 7. Дана строка. Если она представляет собой запись целого числа, то вывести 1, если вещественного (с дробной частью) вывести 2; если строку нельзя преобразовать в число, то вывести 0. Считать, что дробная часть вещественного числа отделяется от его целой части десятичной точкой «.». 8. Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке слева направо). 9. Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке справа налево). 101

102 10. Дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. 11. Дана строка, изображающая арифметическое выражение вида « ± ± ± », где на месте знака операции «±» находится символ «+» или (например, « »). Вывести значение данного выражения (целое число). 12. Дана строка, изображающая двоичную запись целого положительного числа. Вывести строку, изображающую десятичную запись этого же числа. 13. Дана строка, изображающая десятичную запись целого положительного числа. Вывести строку, изображающую двоичную запись этого же числа. Обработка строк с помощью стандартных функций. Поиск и замена. 1. Дано целое число N (> 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы «.» (точка). 2. Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк новую строку, содержащую первые N1 символов строки S1 и последние N2 символов строки S2 (в указанном порядке). 3. Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. 4. Дан символ C и строки S, S0. Перед каждым вхождением символа C в строку S вставить строку S0. 102

103 5. Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0. 6. Даны строки S и S0. Проверить, содержится ли строка S0 в строке S. Если содержится, то вывести True, если не содержится, то вывести False. 7. Даны строки S и S0. Найти количество вхождений строки S0 в строку S. 8. Даны строки S и S0. Удалить из строки S первую подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. 9. Даны строки S и S0. Удалить из строки S последнюю подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. 10. Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. 11. Даны строки S, S1 и S2. Заменить в строке S первое вхождение строки S1 на строку S Даны строки S, S1 и S2. Заменить в строке S последнее вхождение строки S1 на строку S Даны строки S, S1 и S2. Заменить в строке S все вхождения строки S1 на строку S Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и вторым пробелом исходной строки. Если строка содержит только один пробел, то вывести пустую строку. 15. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом исходной строки. Если строка содержит только один пробел, то вывести пустую строку. Разные задачи по теме строки. 103

104 1. Замените каждую встреченную в строке X букву «к» сочетанием букв «ken». 2. Вычеркните из строки Y все буквы, стоящие на нечетных местах. 3. Выясните, есть ли в слове X хотя бы одна из букв «к» или «м». 4. Подсчитать, сколько раз цифра 4 встречается в десятичной записи трехзначного натурального числа M. 5. Подсчитайте, сколько раз первая буква строки X встречается в этой строке. 6. Выясните, какая из букв (первая или последняя) встречается в строке X чаще. 7. Определите наибольшую из цифр, используемых в десятичной записи двузначного натурального числа N. 8. Составьте алгоритм подсчета числа одинаковых букв в строках X и Y равной длины, стоящих на одних и тех же местах. 9. Выясните, является ли данная строка «перевертышем». 10. Вычеркните i-ю букву строки. 11. Выясните, какая из букв «а» или «б» встречается в строке X чаще. 12. Из слов «микромир», «мировоззрение», «миротворец» получить слово «мир». 13. Подсчитать, сколько раз встречается сочетание «ал» в строке: ‘КАШАЛОТ КАЛОШУ КУШАЛ’. 14. Утройте каждую букву заданной строки. Написать отчет по лабораторной работе. Лабораторная работа 7 Краткое описание: 104

105 Способы преобразования типов Коллекции Множества Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение Преобразование типов. Существует явное и неявное преобразование типов. Автоматическое преобразование типов Когда данные одного типа присваиваются переменной другого типа, неявное преобразование типов происходит автоматически при следующих условиях: оба типа совместимы диапазон представления чисел целевого типа шире, чем у исходного типа Если оба эти условия удовлетворяются, то происходит расширяющее преобразование. Например, тип int достаточно крупный, чтобы вмещать в себя все действительные значения типа byte, а кроме того, оба типа, int и byte, являются совместимыми целочисленными типами, и поэтому для них вполне возможно неявное преобразование. Приведение несовместимых типов Несмотря на всю полезность неявных преобразований типов, они неспособны удовлетворить все потребности в программировании, поскольку допускают лишь расширяющие преобразования совместимых типов. А во всех остальных случаях приходится обращаться к приведению типов. Приведение это команда компилятору преобразовать результат вычисления выражения в указанный тип. А для этого требуется явное преобразование типов. Ниже приведена общая форма приведения типов: (целевой_тип) выражение Здесь целевой_тип обозначает тот тип, в который желательно преобразовать указанное выражение. 105

106 Конвертация типов. Роль класса System.Convert В пространстве имен System имеется класс Convert, который тоже может применяться для расширения и сужения данных: byte sum = Convert.ToByte(var1 + var2); Одно из преимуществ подхода с применением класса System.Convert связано с тем, что он позволяет выполнять преобразования между типами данных нейтральным к языку образом. Однако, поскольку в С# есть операция явного преобразования, использование класса Convert для преобразования типов данных обычно является делом вкуса. char ch1=’a’; // символом, заключенным в одинарные кавычки char ch2 =’\x5a’; // escape-последовательностью, задающей код символа; char ch3=’\u0058′; //Unicodeпоследовательностью, задающей Unicode-код символа. char ch = new Char(); //Массив символов int kod; string s; ch = ch1; ch = ch + ch2; //неявное преобразование символьного типа в тип int kod = ch1; //явное преобразование числа в символ ch1=(char)(kod + 1); //преобразование символьного типа в строку //s = ch неявное преобразование невозможно; s = ch1.tostring() + ch2.tostring()+ ch3.tostring(); 106

107 //Использование возможностей класса System.Convert Console.WriteLine(«s= 0, ch= 1, ch1= 2,ch2= 3,ch3= 4, kod = 5», s, ch, ch1, ch2,ch3, kod); Console.ReadLine(); Коллекции в C#. Множества коллекции. В С# коллекция представляет собой совокупность объектов. В среде.net Framework имеется немало интерфейсов и классов, в которых определяются и реализуются различные типы коллекций. Коллекции упрощают решение многих задач программирования благодаря тому, что предлагают готовые решения для создания целого ряда типичных, но порой трудоемких для разработки структур данных. Например, в среду.net Framework встроены коллекции, предназначенные для поддержки динамических массивов, связных списков, стеков, очередей и хеш-таблиц. Краткий обзор коллекций Главное преимущество коллекций заключается в том, что они стандартизируют обработку групп объектов в программе. Все коллекции разработаны на основе набора четко определенных интерфейсов. Некоторые встроенные реализации таких интерфейсов, в том числе ArrayList, Hashtable, Stack и Queue, могут применяться в исходном виде и без каких-либо изменений. Имеется также возможность реализовать собственную коллекцию, хотя потребность в этом возникает крайне редко. В среде.net Framework поддерживаются пять типов коллекций: необобщенные, специальные, с поразрядной организацией, обобщенные и параллельные. Необобщенные коллекции Реализуют ряд основных структур данных, включая динамический массив, стек, очередь, а также словари, в которых можно хранить пары «ключ-значение». В отношении необобщенных коллекций важно иметь в виду следующее: они оперируют данными типа object. Таким образом, необобщенные коллекции могут служить 107

108 для хранения данных любого типа, причем в одной коллекции допускается наличие разнотипных данных. Очевидно, что такие коллекции не типизированы, поскольку в них хранятся ссылки на данные типа object. Классы и интерфейсы необобщенных коллекций находятся в пространстве имен System.Collections. Специальные коллекции Оперируют данными конкретного типа или же делают это каким-то особым образом. Например, имеются специальные коллекции для символьных строк, а также специальные коллекции, в которых используется однонаправленный список. Специальные коллекции объявляются в пространстве имен System.Collections.Specialized. Поразрядная коллекция В прикладном интерфейсе Collections API определена одна коллекция с поразрядной организацией это BitArray. Коллекция типа BitArray поддерживает поразрядные операции, т.е. операции над отдельными двоичными разрядами, например И, ИЛИ, исключающее ИЛИ, а следовательно, она существенно отличается своими возможностями от остальных типов коллекций. Коллекция типа BitArray объявляется в пространстве имен System.Collections. Обобщенные коллекции Обеспечивают обобщенную реализацию нескольких стандартных структур данных, включая связные списки, стеки, очереди и словари. Такие коллекции являются типизированными в силу их обобщенного характера. Это означает, что в обобщенной коллекции могут храниться только такие элементы данных, которые совместимы по типу с данной коллекцией. Благодаря этому исключается случайное несовпадение типов. Обобщенные коллекции объявляются в пространстве имен System.Collections.Generic. Параллельные коллекции 108

109 Поддерживают многопоточный доступ к коллекции. Это обобщенные коллекции, определенные в пространстве имен System.Collections.Concurrent. Коллекция, содержащаяся только отличающиеся элементы, называется множеством (set). В составе.net 4 имеются два множества HashSet и SortedSet . Оба они реализуют интерфейс ISet . Класс HashSet содержит неупорядоченный список различающихся элементов, а в SortedSet элементы упорядочены. Имя Описание Add Добавляет указанный элемент в набор. Clear Удаляет все элементы из объекта HashSet . Contains Определяет, содержит ли объект HashSet указанный элемент. CopyTo(T[]) Копирует элементы объекта HashSet в массив. Equals(Object) Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.) Overlaps Определяет, имеются ли общие элементы в текущем объекте HashSet и в заданной коллекции. Remove Удаляет указанный элемент из объекта HashSet . Задание 22. Программа, реализующая основные действия над множествами с помощью SortedSet using System; using System.Collections.Generic; using System.Collections; using System.Linq; using System.Text; namespace ConsoleApplication1 109

110 class Program static void Main(string[] args) // Создадим два множества символьных элементов SortedSet ss = new SortedSet (); SortedSet ss1 = new SortedSet (); //добавлеям элементы 1 множества ss.add(‘a’); ss.add(‘b’); ss.add(‘c’); ss.add(‘z’); ShowColl(ss, «Первая коллекция: «); //добавлеям элементы 2 множества ss1.add(‘a’); ss1.add(‘b’); ss1.add(‘c’); ShowColl(ss1, «Вторая коллекция»); if (ss.setequals(ss1)) Console.WriteLine(«Равны»); else Console.WriteLine(«не равны»); Console.WriteLine(); ss.symmetricexceptwith(ss1); ShowColl(ss,»Исключили разноименность двух множеств: «); ss.unionwith(ss1); ShowColl(ss,»Объединение множеств:»); ss.exceptwith(ss1); ShowColl(ss, «Вычитание множеств»); 110

111 Console.ReadLine(); static void ShowColl(SortedSet ss, string s) // Метод посимвольного вывода на консоль Console.WriteLine(s); //вывод на консоль, используя цикл со счетчиком «До конца массива» foreach (char ch in ss) Console.Write(ch + » «); Console.WriteLine(«\n»); Задание: в предыдущей программе заменить SortedSet на HashSet . Проверить особенности HashSet на примере неупорядоченных множеств чисел. Для получения дополнительной информации перейдите по ссылке _ руководство по программированию на C# Самостоятельная работа. Множества. Для решения некоторых задач можно использовать регулярные выражения. 1. Имеются три множества символьного типа, которые заданы своими конструкторами: Y1=[‘A’,’B’,’D’,’R’,’H’] 111

112 Y2=[‘R’,’A’,’H’,’D’] Y3=[‘A’,’R’] Сформировать новое множество X=(Y1 Y2) U (Y1 Y2) Вывести на печать полученное множество. Далее проверить, включено ли множество Y3 во множество X. 2. Из множества целых чисел выделить: а) множество чисел, делящихся на 6 без остатка; b) множество чисел, делящихся без остатка или на 2 или на Напишите программу, переводящую школьные отметки в школьные оценки. 4. Определить количество гласных букв латинского алфавита в некотором тексте. 5. В заданной строке, состоящей из букв латинского алфавита и оканчивающейся точкой, определить общее число вхождений в нее букв ‘a’,’e’,’c’,’h’. 6. Из первой сотни натуральных чисел найти все простые с помощью решета Эратосфена. Для представления решета используйте множество! 7. Переменной S присвоить: а) пустое множество; б) множество из строчных гласных латинских букв (a, e, i, o, u); г) множество из всех цифр. 8. Вычислить значения отношений: а) [2]<>[2,2,2]; б) [‘a’,’b’]=[‘b’,’a’]; в) [4,5,6]=[4..6]; г) [‘c’,’b’]=[‘c’..’b’]; д) [2,3,5,7] 113 10. Месяц=1..12; Написать программу, определяющую количество дней в месяце m невисокосного года. 11. letters= множество от ‘a’..’z’; Написать программу, печатающую в алфавитном порядке все элементы множества А, имеющего тип letters. 12. Вычислить значения выражений: а) [1,3,5]+[2,4]; б) [1,3,5]*[2,4]; в) [1,3,5]-[2,4]; г) [1..6]+[3..8]; д) [1..6]*[3..8]; и) [2,4]-[1..5]; к) []+[4]; л) []*[4]; м) []-[4]; 13. M = 0..99; Написать программу, подсчитывающую количество элементов в множестве A типа M. Например, для множества [5,8,23] должно быть выведено 3 Написать отчет по лабораторной работе. Лабораторная работа 8 Краткое описание: Описание Классов Варианты доступа к полям и методам Класса Процедуры и функции Запустить Microsoft Visual Studio, выбрав приложение Microsoft Visual C# Начать новый проект Консольное приложение Классы. Описание и структура. Синтаксис класса Синтаксис описания класса: [атрибуты][модификаторы]class имя_класса[:список_родителей] тело_класса Возможными модификаторами в объявлении класса могут быть модификаторы new, abstract, sealed, о кото- 113

114 рых подробно будет говориться при рассмотрении наследования, и четыре модификатора доступа, два из которых — private и protected — могут быть заданы только для вложенных классов. Обычно класс имеет атрибут доступа public, являющийся значением по умолчанию. Так что в простых случаях объявление класса выглядит так: public class Rational тело_класса В теле класса могут быть объявлены: константы; поля; конструкторы и деструкторы; методы; события; делегаты; классы (структуры, интерфейсы, перечисления). Поля класса Поля класса синтаксически являются обычными переменными (объектами) языка. Их описание удовлетворяет обычным правилам объявления переменных. Содержательно поля задают представление той самой абстракции данных, которую реализует класс. Поля характеризуют свойства объектов класса. Когда создается новый объект класса (в динамической памяти или в стеке), то этот объект представляет собой набор полей класса. Два объекта одного класса имеют один и тот же набор полей, но разнятся значениями, хранимыми в этих полях. Доступ к полям Каждое поле имеет модификатор доступа, принимающий одно из четырех значений: public, private, protected, internal. Атрибутом доступа по умолчанию является атрибут private. Методы класса Методы класса синтаксически являются обычными процедурами и функциями языка. Их описание удовле- 114

115 творяет обычным правилам объявления процедур и функций. Методы-свойства Методы, называемые свойствами (Properties), представляют специальную синтаксическую конструкцию, предназначенную для обеспечения эффективной работы со свойствами. При работе со свойствами объекта (полями) часто нужно решить, какой модификатор доступа использовать, чтобы реализовать нужную стратегию доступа к полю класса. Перечислю пять наиболее употребительных стратегий: чтение, запись (Read, Write); чтение, запись при первом обращении (Read, Writeonce); только чтение (Read-only); только запись (Write-only); ни чтения, ни записи (Not Read, Not Write). Общий синтаксис методов-свойств. Пусть name — это закрытое свойство. Тогда для него можно определить открытый метод-свойство (функцию), возвращающую тот же тип, что и поле name. Имя метода обычно близко к имени поля (например, Name). Тело свойства содержит два метода — get и set, один из которых может быть опущен. Метод get возвращает значение закрытого поля, метод set — устанавливает значение, используя передаваемое ему значение в момент вызова хранящееся в служебной переменной со стандартным именем value. Поскольку get и set — это обычные процедуры языка, то программно можно реализовать сколь угодно сложные стратегии доступа. Индексаторы Свойства являются частным случаем метода класса с особым синтаксисом. Еще одним частным случаем является индексатор. Метод-индексатор является обобщением метода-свойства. Он обеспечивает доступ к закрытому полю, представляющему массив. Объекты класса индексируются по этому полю. 115

116 Синтаксически объявление индексатора — такое же, как и в случае свойств, но методы get и set приобретают аргументы по числу размерности массива, задающего индексы элемента, значение которого читается или обновляется. Важным ограничением является то, что у класса может быть только один индексатор и у этого индексатора стандартное имя this. Так что если среди полей класса есть несколько массивов, то индексация объектов может быть выполнена только по одному из них. Задание 23. Методы-свойства. Индексаторы. (Класс Person) Пример программы, использующей различные стратегии доступа к данным. Задание: добавить вторую персону по фамилии Иванов, статус пенсионер, имеющий 3 детей: служащего, студента и школьника. using System; using System.Collections.Generic; using System.Linq; using System.Text; //демонстрация методов-свойств и индексатора namespace ConsoleApplication1 ; 116

117 pers1.vozr = 42; pers1.zarpl = 10000; // Вывод значений методов-свойств Console.WriteLine(«Фамилия 0 Возраст 1 Статус 2», pers1.fam, pers1.vozr, pers1.status); // Дети pers2.fam = «Петров»; pers2.vozr = 21; pers3.fam = «Петрова»; pers3.vozr = 5; pers1[0] = pers2; pers1[1] = pers3; // вывод данных детей Console.WriteLine(«Сведения о детях»); for (int i=0;i

/// Класс Персона /// class Person 117

118 // поля (закрытые). Начальные значения полей при задании конструктора без параметров private string fam = «», status = «»; private int vozr = 0, zarpl = 0, kol_det = 0; private Person[] deti = new Person[10]; // массив Дети, выделена память под макс. число детей /// /// Метод-свойство Read, Write-once /// public string Fam set if (fam == «») fam = value; get return fam; /// /// Метод-свойство: Только Read /// public string Status get return status; /// /// Метод-свойство: Чтение/Запись. Можно изменять и другие поля /// public int Vozr set vozr = value; if (vozr 119 else if (vozr /// Метод-свойство: Только запись /// public int Zarpl set zarpl = value; /// /// Метод-свойство: только чтение /// public int Kol_det get return kol_det; /// /// Индексатор. Массив Дети /// ///

/// public Person this[int i] // индексатор всегда имеет имя this get 119

122 Console.ReadLine(); Примерный результат выполнения программы: Рисунок 8. Пример работы программы Задание 25: Перегрузка операций. Программа вычисления простых дробей. Набрать исходный код программы, проанализировать ее работу для разных исходных данных. Изменить код программы добавить умножение дробей. using System; using System.Collections.Generic; using System.Linq; using System.Text; // тема: перегрузка операций namespace ConsoleApplication1 class Program static void Main(string[] args) 122

123 Rational a = new Rational(2, 6); Rational b = new Rational(-12, -16); Rational c = new Rational(2, 12); a.print(«a «); b.print(«b «); c.print(«c «); Rational d = a + b; Rational e = d — c; Rational f = d * e; Rational k = (d + e — f)/(a — b); d.print(«d = a + b «); e.print(«e = d — c «); k.print(«k = (d + e — f)/(a — b) «); Console.ReadLine(); Класс Rational using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 /// /// Класс рациональных чисел. /// Рациональное число представляет собой несократимую дробь вида m/n /// где m и n — целые числа /// class Rational 123

124 // поля класса (закрытые) int m, n; /// /// Конструктор. Создает несократимую дробь. /// Если b=0, то создается число 0 (числитель 0, ///знаменатель 1) /// иначе сокращается /// ///

public Rational(int a, int b) if (b == 0) this.m = 0; this.n = 1; else // приведение знака if (b /// Вычисление наибольшего общего делителя ///целых чисел a и b /// по алгоритму Евклида /// ///

/// static private int nod(int a, int b) int c = 0; // Вспомогательная переменная. Инициализация обязательна по нормам языка a = Math.Abs(a); b = Math.Abs(b); 124

125 // приводим к числам без знака if (b > a) c = a; a = b; b = c; // приводим к виду a>b do // цикл поиска НОД c = a % b; a = b; b = c; while (b!= 0); return a; /// /// Вывод рационального числа /// ///


C# с нуля

Просьба людям, которые хоть как-то знакомы с программированием пройти мимо этого поста.

Данный пост не сделает из вас профессионального программиста, он просто подскажет вам с чего начать.

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

В конце каждой строки должен стоять знак ;

Каждая кавычка и скобка должна быть закрыта.

И начнем мы обучение сразу с переменных. Что такое переменная? Это область памяти в которой хранится какое-то значение. Сегодня я расскажу только о 4 типах переменных.

Переменная Int может хранить любое (на самом деле нет) число без дробной части.

Переменная string хранит любой текст. Он обязательно должен быть указан в двойных кавычках.

Переменная char может хранить в себе любой символ, но только один. Должен быть указан в одинарных кавычках.

И переменная bool может хранить в себе только значения true или false.

Любую строку написанную ниже можно условно разделить на 3 части:

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

Все строки подчеркнуты зеленым, из-за того, что у нас они нигде не используются.

Переменная может быть инициализирована (ей может быть присвоено значение) сразу (как на изображении выше) или уже после ее создания (смотрим ниже).

В первой строчке мы создаем переменную (объявляем ее). Пока что она не несет в себе никакой информации. Во второй и последующих мы меняем ее значения.

Чем отличается = от ==? = — это знак присвоения, а == — знак сравнения.

В первом случае мы присваиваем переменной num значение 5 (если переменная была равна 40, то теперь она равняется 5), а во втором случае мы проверяем не равна ли переменная num 5 (если до этого она была равна 40, то она и останется такой же).

Условные операторы (if else)

text = «Переменная равна 2»;

text = «Переменная не равна 2»;

Т.е на русском конструкция с if else имеет вид

Если выполняется (какое-то условие)<

то происходит что-то

если не выполняется <

то происходит что-то другое

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

if(num!=4) если num не равно 4(равно чему угодно кроме 4).

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

Сейчас мы сделаем первое приложение — счетчик нажатий (ничего проще я придумать не смог)

Вновь возвращаемся в первую вкладку. Про окно №3 можете забыть, оно вам на первое время не пригодится. Окно 5 разделено на 2 части. Слева названия, справа значения. Нажав на название, мы можем увидеть в окне 6 описание свойства. Если мы хотим запустить наше приложение, нажимаем кнопку 4. Сейчас нужно открыть панель инструментов (2).

Добавляем кнопку (button) и надпись (label) (просто перетягиваем их). В окне свойств находим название этих элементов (название и текст — это не одно и то же (но в нашем случае они совпадают)). Итак, нам нужно детально продумать, то будет делать наше приложение. Оно должно менять текст надписи на число нажатий по кнопке. Для этого нам нужно как-то обработать нажатие на кнопку. Представим, что мы не знаем, как это сделать. Идем в гугл. Пишем вопрос «c# как обработать нажатие на кнопку», нажимаем на первую же ссылку и.

Дважды наживаем на кнопку и видим, что у нас появился новый метод. Нам нужно получить количество нажатий. Количество — это число, значит нам нужно создать новую переменную int. Если мы ее создадим в методе button1_click, то у нас она будет создаваться каждый раз заново при клике на кнопку. Значит нужно создать переменную за пределами методов (если мы создадим ее в любом другом методе, то она будет доступна только в нем) и сразу присвоить значение 0, потому что при запуске программы, сразу пользователем не будет сделано ни одного клика. При клике на кнопку значение должно увеличиваться на 1, значит этот код нужно написать в методе button1_click, и значение должно сразу выводиться в label1. Как это сделать? Используем гугл. Для вывода текста мы можем использовать только тип переменной string. Но так, как у нас тип int нам нужно его преобразовать. Опять обращаемся к гуглу. Еще раз повторяю , что цель этого поста не обучить вас программированию, а указать вам, с чего начать.

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

Помогите перевести программу с Паскаль на С#, пожалуйста.

namespace ConApp
<
class Program
<
static void Main(string[] args)
<
int i, y, kod, succ = 0;
StringBuilder t;
char op;
long s, r, m;
string input;

Write(«Введите число: «);
input = ReadLine();
if (!Int64.TryParse(input, out m))
<
WriteLine(«Это негодное число!»);
ReadKey(true);
return;
>
t = new StringBuilder();
// полный перебор вариантов
for (y = 0; y Похожие вопросы

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