Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

695_Poletajkin_A.N._Uchebno-metodicheskoe_posobie_Realizatsija_zhiznennogo_ch.1_

.pdf
Скачиваний:
10
Добавлен:
12.11.2022
Размер:
1.76 Mб
Скачать

Теоретические положения

5.1. Инструментальное средство Microsoft Visual Studio .NET

Концепция Microsoft .NET – целостный взгляд на новую эпоху в развитии информационных систем и Интернета, когда самые разнообразные программные приложения доставляются пользователям как сервисы, взаимодействуют между собой в соответствии с конкретными потребностями бизнеса, доступны на самых разных устройствах от высокопроизводительного кластера до мобильного телефона, имеют понятный и полностью адаптирующийся к потребностям каждого пользователя интерфейс.

Вчисле прочего Microsoft .NET включает в себя систему .NET Framework

иинструментальные средства Visual Studio .NET – средства, инструменты, спецификации и информационные материалы для построения и сопровождения гибких, надежных и масштабируемых деловых приложений, использующих интернет/интранет/экстранет для взаимодействия с коллегами, клиентами и партнерами, обладающих привычными и понятными интерфейсами, способных работать с самыми различными устройствами. Используя Visual Studio.NET и Visual Studio for Applications, опираясь на .NET Framework и Windows .NET,

можно самые сложные задачи решать быстрее, надежнее и эффективнее, чем когда-либо в прошлом.

Также Microsoft .NET включает семейство корпоративных .NET серверов

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

.NET Framework – это часть Microsoft .NET, с помощью которой осуществляется разработка программного обеспечения. .NET Framework состоит из Common Language Runtime (CLR) и набора библиотек классов .NET Framework, который также называют Base Class Library (BCL). CLR – это не зависящая от языка среда исполнения программ. Данная система исполняет программу, обеспечивает переносимость, поддерживает программирование с использованием нескольких языков, обеспечивает безопасность. Библиотека классов содержит в себе все необходимые средства для работы с современными технологиями. Все языки .NET могут обращаться к функциям .NET Framework. Любая программа, использующая библиотеку классов .NET может быть запущена только там, где поддерживается среда исполнения .NET. С# — это родной язык для платформы .NET, поэтому именно в нем реализованы все идеи

.NET.

5.2.Создание проекта в Microsoft Visual Studio 2010.

Запустить Microsoft Visual Studio 2010 и выполнить команду «Создать проект…», как показано на рисунок 9, или выполнить команду меню «Файл Создать Проект…», или нажать комбинацию клавиш <Ctrl+Shift+N>.

41

Рис. 9. Стартовое окно Microsoft Visual Studio 2010

На экране появится диалоговое окно «New Project» (рис. 10), где следует задать необходимые параметры проекта: тип проекта (Project types), шаблон (Templates), имя проекта (Name), расположение во внешней памяти (Location) и имя решения (Solution Name). Флажок Создать каталог для решения (Create directory for solution) оставить включенным.

В результате выполненных действий в окне проводника Solution Explorer появится структура созданного проекта и откроется модуль Program.cs (рис. 11). Теперь можно приступать к программированию.

Листинг 1. Простейшая программа на языке C# выглядит следующим образом:

using System; namespace Lab_4

{

class Program

{

static void Main(string[] args)

{

System.Console.WriteLine("Привет, C#!\n"); Console.ReadKey();

}

}

}

42

Рис. 10. Диалоговое окно задания параметров нового проекта

Рис. 11. Созданный проект в развернутом виде

43

5.3. Анатомия программы.

Рассмотрим листинг 1 (см. выше) более подробно.

Пространство имен в С# представляет собой совокупность связанных типов. Некоторые пространства имен, например, System, очень велики и могут включать более 100 разного рода типов; другие пространства имен, например, System.Timers, содержат всего по несколько типов. Типы DateTime и Math входят в пространство имен System.

Использование пространств имен (также называемых пакетами, библиотеками или интерфейсами прикладного программирования, API от Application Programming Interface) — это практическая реализация концепции повторного использования, принципа, чрезвычайно поощряемого в современной программной инженерии.

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

Программа в примере начинается с заявления, что она собирается использовать пространство имен System, в частности, класс System.Console, содержащий методы для работы с консолью.

Внутри пространства имен Lab_4 объявляется класс Program вместе с его содержимым вслед за открывающей фигурной скобкой. Имена файла и программы (т. е. имя класса) не обязательно должны совпадать, хотя обычно они или одинаковы, или схожи. В языке C# отсутствуют глобальные переменные и функции, поэтому все объявления переменных и функций должны находиться внутри объявления класса (количество классов неограниченно).

Вструктуре класса прежде всего вводится метод Main, являющийся стартовой точкой (точкой входа) в приложение. Функция должна быть объявлена как статическая, так как в этом случае для вызова функции не требуется создавать объект класса.

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

спомощью метода Console.WriteLine(); для ожидания нажатия клавиши используется метод Console.ReadKey().

Вязыке C# нет заголовочных файлов. Все методы для работы с консолью содержатся в классе Console пространства имен System. Метод вызывается оператором принадлежности (.). Иными словами, чтобы вызвать WriteLine() объекта Console, следует написать Corsole.WriteLine(…), поставив вместо многоточия выводимую строку.

Запуск программы осуществляется выполнением команды меню Debug Start Debugging, или нажатием клавиши F5. Если компилятор не обнаружил ошибок, то на экран выводится консольное окно с результатом работы программы (рис. 12).

44

Рис. 12. Консоль с результатами выполнения программы с листинга 1

Структурные операторы языка C#

Операторы условия.

ВC# поддерживаются многие операторы условий и циклов, применяемых

вC++, поэтому рассмотрим только отличия.

Оператор условия if-else внешне выглядит, как в C++: if ( условие )

{

...

}

else if ( условие )

{

...

}

...

else

{

...

}

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

условие ? выражение /*условие истинно*/ : выражение /*условие ложно*/

Циклы Цикл с предусловием:

while ( условие )

{

...

}

45

Цикл с постусловием: do

{

...

}while ( условие );

Параметрический цикл:

for ( инициализация; условие; приращение )

{

...

}

Во всех циклах, как и в операторе if, условие должно иметь тип bool.

Алгоритмизация обработки одномерных массивов

Массив – это индексированный набор объектов одного типа. Массив может хранить элементы любого типа, но для всех элементов массива тип должен быть одним и тем же.

Объявление массивов Объявление массивов имеет следующий синтаксис:

Тип[] имя-массива.

Например:

int[] myIntArray;

Квадратные скобки ([ ]) сообщают компилятору С#, что определяется массив, а тип указывает тип элементов этого массива. В примере, приведенном выше, myIntArray является целочисленным массивом.

Экземпляр массива создается ключевым словом new. Например: myIntArrsy = new int[5];

Это объявление отводит память для массива, состоящего из пяти целых чисел.

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

Значения по умолчанию Когда создается массив элементов, имеющих тип значения, каждый

элемент первоначально содержит значение, устанавливаемое по умолчанию для данного типа (см. таблице 3). Вышеуказанное объявление создает массив из пяти целых, причем каждому элементу присваивается нулевое значение, устанавливаемое по умолчанию для переменных типа int.

46

Таблица 3 Базовые типы и их значения по умолчанию

Типы

Значения по умолчанию

Числовые (int, long и т. д.)

0

bool

false

char

‘\0’, (null)

string

""

enum

0

Ссылочные

null

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

Обращение к элементам массива Программист обращается к элементам любого массива с помощью

операции индексирования ([ ]). Нумерация элементов массива начинается с нуля, иными словами, индекс первого элемента массива всегда имеет нулевое значение.

Инициализация элементов массива Содержимое массива можно инициализировать в момент создания

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

int[] myIntArray = new int[5] {2, 4, 6, 8, 10}; int[] myIntArray = {2, 4, 6, 8, 10};

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

//создание массива из 10 элементов типа int

//все элементы массива инициализируются нулями int [] intArray = new int [10];

Цикл foreach

Данный оператор позволяет перебрать все значения в массиве или в классе-коллекции. Например, если arr - массив, а N - его длина, то вывести на экран значения элементов массива можно следующими способами (рассматриваются циклы for и foreach):

for(int i = 0; i < N; i++) Console.WriteLine("{0} ", arr[i]);

и

foreach(int i in arr) // знать длину массива не

// обязательно

Console.WriteLine("{0} ", i);

47

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

foreach(int i in arr) // знать длину массива не

// обязательно

i++; // Ошибка

Инициализация одномерных массивов

// создание + инициализация

int [] arr1 = new int[] {0, 3, 7, 17, 25};

//создание + инициализация (укороченный вариант) int [] arr2 = {0, 3, 7, 17, 25};

//Можно объявить массив без инициализации

int [] arr3;

//Но его нельзя использовать, пока он не создан

//с помощью оператора new

/*

arr3[0] = 0; // Ошибка

arr3 = {0, 3, 7, 17, 25}; // тоже ошибка */

arr3 = new int [] {0, 3, 7, 17, 25}; // правильно arr3[0] = 10; // правильно

//Инициализация массива длины N случайными числами в

//диапазоне [a,b] с использованием параметрического

//цикла for

int N = Convert.ToUInt32(Console.ReadLine()); int [] arr4 = new int[n];

// Инициализация генератора случайных чисел: Random rand = new Random();

for(int i = 0; i < N; i++)

arr4[i] = a + rand.Next(b - a); // инициализация

// массива

Console.Write("{0,8}", arr4[i]); // и вывод на

// консоль

Пример 2. Одномерный массив.

Программа подсчитываем количество четных и нечетных элементов в массиве. Все элементы массива задаются случайным образом в диапазоне от 0 до 999. Длина массива вводится с клавиатуры. В случае возникновения исключительной ситуации длина массива определяется равной 10. Листинг программы представлен ниже, результаты выполнения представлен на рис. 13.

48

Листинг 2. Реализация алгоритма обработки массива (см. пример 2) using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

namespace Lab_4

{

class Program

{

static void Main(string[] args)

{

// Количество элементов uint n = 0;

Console.Write("Введите кол-во элементов

массива: ");

// ОБРАБОТКА ИСКЛЮЧИТЕЛЬНОЙ СИТУАЦИИ try

{

// Ввод количества элементов с клавиатуры n = Convert.ToUInt32(Console.ReadLine());

}

catch (OverflowException ex)

{

// В случае переполнения

Console.WriteLine(ex.Message + " Default

size (=10)");

}

catch (FormatException ex)

{

// В случае ошибочного ввода

Console.WriteLine(ex.Message + " Default

size (=10)");

}

// Если n = 0, то создадим массив из 10

элементов

if (n == 0) n = 10;

//Создание массива int[] ar = new int[n];

//Инициализация генератора случайных чисел

Random rand = new Random();

49

for (int i = 0; i < n; i++)

{

// Инициализация массива случайными числами

// от 0 до 999

ar[i] = rand.Next(1000);

// Вывод i-го элемента на консоль

Console.Write("{0,8}", ar[i]);

}

Console.WriteLine();

//Счетчики четных и нечетных чисел int odd = 0, even = 0;

//Бежим по массиву

foreach (int i in ar)

{

if (i % 2 == 0) ++even;

else

++odd;

}

// Вывод результатов подсчета

Console.WriteLine("Четных чисел: {0}\nНечетных: {1}", even, odd);

Console.ReadKey();

}

}

}

Рис. 13. Консоль с результатами выполнения программы с листинга 2

50