Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Виды методов сортировки. Сортировка обменом.

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

         
         
         
         
         

 

         
         

 

30.Методы. Функции. Подпрограммы (процедуры и функции) позволяют решать задачу повторного использования программного входа. Разработанная или имеющие в языке подпрограммы дают возможность существенно расширить возможность языка программирования. Важным шагом в автоматизации программирования является появление библиотек подпрограмм. Подпрограммы в C# включаются в классы и называются методом класса. На платформе.Net стандартной библиотекой является FCL (Framework Class Library). Синтаксис объявления метода позволяет однозначно определить, чем является метод: функцией или процедурой. Отличия функции: - ф-я должна возвращать хотя бы одно значение - ф-я м.б. вызвана в выражениях. Отличия процедуры: - может не возвращать значения - вызывается как отдельный оператор. Обычно метод предпочтительно реализовать в виде ф-и, когда имеется один выходной аргумент и он может рассматриваться как результат вычисления зн-я ф-и. Возможность вызова ф-й в выражениях также влияет на выбор реализации метода в пользу ф-и. В других случаях метод реализуется в процедурах.     36.Функции с побочным эффектом. Функция называется функцией с побочным эффектом, если помимо результата, вычисляемого функцией и возвращаемого ей в оператореreturn, она имеет выходные аргументы с ключевыми словамиref иout. Хороший стиль объектно-ориентированного программирования не рекомендует использование таких функций. Выражения, использующие функции с побочным эффектом, могут потерять свойства, присущие им в математике. Еслиf(a) - функция с побочным эффектом, тоa + f(a) может быть не равноf(a) + a. Пример class Program { static int f(ref int a) { return (a++); } static void Main(string[] args) { int a = 0, b=0, c=0;   a =1; b = a + f(ref a);   a =1; c = f(ref a)+ a;   Console.WriteLine(" a={0}, b={1}, c={2}", a, b, c); Console.ReadKey(); }} 31.Методы. Процедуры. Синтаксис объявления процедуры и функции совпадает: // Заголовок подпрограммы атрибуты модификаторы тип_возвр_знач имя(формальные_параметры) { // Тело подпрограммы // состоящее из объявлений переменных и операторов } Атрибуты и модификаторы м.б. пропущены при описании метода. Все создаваемые методы будут статическими (объявляются с модификатором static). Обязательно при описании заголовка является указание типа результата, имени метода, их групп и круглых скобок. Если подпрограмма является процедурой, то вместо возвращаемого типа данных указывается ключевое слово void. Список формальных аргументов метода м.б. пустым или содержать фиксированное число аргументов, разделяемых запятой. Синтаксис объявления формального аргумента:   тип_аргумента тип_данных имя_аргумента где тип_аргумента – это out, ref или params Обязательным является указание типа данных и имени аргумента. Все аргументы метода м.б. разделены на 3 группы: 1)входные 2)выходные 3)обновляемые Аргументы 1 группы передают данные в метод и их значения в теле метода только считываются. Аргументы 2 группы хранят результаты метода. Они получают значения в ходе выполнения метода. Аргументы 3 группы выполняют обе функции. Тип выходного аргумента задается ключевым словом out, обновляемого задается ref, входной аргумент без ключевого слова. Если аргумент объявлен как выходной с ключевым словом out, то в теле метода обязательно должен присутствовать оператор присваивания задающий значение этого аргумента, иначе возникнет ошибка на этапе компиляции. Имеется возможность при вызове метода передавать ему произвольное число фактических эл-ов. Для реализации этой возможности необходимо задать тип аргумента params. Он задается 1 раз и указывается только для последнего аргумента списка. Этот последний аргумент в данном случае является массивом произвольного размера. Тело метода является блоком, к-й представляет собой посл-ть операторов и описаний переменных. Если метод является ф-й, то в блоке д.б. хотя бы один оператор return, возвращающий значение ф-и: return (выражение); Данный оператор прерывает ф-ю и возвращает значение подпрограммы. Оператор return может присутствовать и в процедуре, но без выражения. Примеры static void test() { Console.WriteLine(" Test\n"); } static int fmax(int a, int b) { if (a > b) return (a); else return (b); } static int fmin(int a, int b) { return (a < b? a: b); } static void pmax(out int res, int a, int b) { res = a > b? a: b; } static void pmin(ref int a, int b) { a = a < b? a: b; } static void pow_matr(int st, params int[] m) { foreach (int i in m) Console.Write(" \t" + Math.Pow(Convert.ToDouble(i), Convert.ToDouble(st))); }  
32.Методы. Типы аргументов. Передача параметров в метод. Вызов метода м.б. вызван из любого метода класса. Другие методы м.б. вызваны в выражениях или как операторы. В качестве оператора м.б. использоваться любой метод, как процедура, так и функция. Формат вызова метода: имя_метода(список_фактических_аргументов) Если это оператор, то вызов совершается «;». Формальный аргумент задаваемый при объявлении метода это всегда некоторая переменная. Фактический аргумент – выражение, переменная, константа или конкретное значение тип к-го должен соответствовать типу данных соответствующего формального аргумента метода. Синтаксис фактического аргумента: тип_аргумента выражение где тип_аргумента может принимать значение ref или out При вызове метода конкретные значения фактического аргумента передаются в соответствующие им (находящиеся на той же позиции) формальный аргумент. В соответствии фактического и формльного аргумента имена могут не совпадать. Передача параметров в метод. М/у списком формальных и списком фактических аргументов должно выполняться соответствие по числу, порядку следования, типу и статусу аргумента. Если формальный аргумент является обновляемым или выходным (ref или out), то соответствующий фактический аргумент не может являться выражением, поскольку используются в левой части оператором присваивания. Этот фактический аргумент может являться только ячейкой памяти, в к-ю можно занести значения, т.е. является переменной. В момент вызова метода вначале вычисляются фактические аргументы, к-е могут являться выражениями.   33.Видимость и время жизни переменных. Если данные (переменная, константа, массив и др.) в классе вне всех методов, то они будут доступные в любом из методов и будут находиться в памяти и хранить значения пока существуют классы. Эти данные называются полями класса. Для класса Program (консольное приложение) эти данные будут храниться, пока работает программа. Данные, к-е объявлены внутри метода класса или в каком-л. блоке метода (например внутри оператора for) называются локальными. Эти данные будут находиться в памяти только в том моменте, когда выполняется оператор for. Если в программе имя локальных данных совпадает с именем поля, то указание только имени этих данных приведет к обращению локальных данных. Для доступа к полю класса перед именем данных необходимо указать имя класса. Если совпадение полей класса и локальных данных нет, то обращение к локальным данным и полям м.б. выполнена только по их имени. Переменная всегда доступна только внутри блока, в к-м она описана. Пример: class Program { static int p1; static void test(int x) { Console.WriteLine(" test x: " + x); Console.WriteLine(" test p1: " + p1); } static void Main(string[] args) { const int x = 7, p1 = 5; test(x); Console.WriteLine(" Main x: " + x); Console.WriteLine(" Main p1: " + p1); Console.WriteLine(" Program p1: " + Program.p1); Program.p1 = 10; Console.WriteLine(" Program p1: " + Program.p1); Console.ReadKey(); } }   34.Перегрузка методов. Существование в классе метода с одним и тем же именем называется перегрузкой, а сами методы называются перегруженными. Перегрузка метода полезна, когда требуется решать схожие по смыслу задачи с разным набором аргументов. Типичный пример - это нахождение площади треугольника. Площадь можно вычислить по трем сторонам, по двум углам и стороне, по двум сторонам и углу между ними и при многих других наборах аргументов. Считается удобным во всех случаях иметь для метода одно имя, напримерSquare, и всегда, когда нужно вычислить площадь, не задумываясь, вызывать методSquare, передавая ему известные в данный момент аргументы. Перегрузка характерна и для знаков операций. В зависимости от типов аргументов, один и тот же знак может выполнять фактически разные операции. Классическим примером является знак операции сложения «+», который играет роль операции сложения не только для арифметических данных разных типов, но и выполняет конкатенацию строк. Перегрузка требует уточнения семантики вызова метода. Когда встречается вызов неперегруженного метода, то имя метода в вызове однозначно определяет, тело какого метода должно выполняться в точке вызова. Когда же метод перегружен, то знания имени недостаточно - оно не уникально. Уникальной характеристикой перегруженных методов является их сигнатура. Перегруженные методы имея одинаковое имя должны отличаться или числом аргумента, или их типами. Уникальность объявления заголовка метода позволяет вызвать требуемый перегруженный метод. Пример: class Program { static void A(out long p2, int p1) { p2 = (long)Math.Pow(p1, 3); Console.WriteLine(" Метод A-1"); } static void A(out long p2, params int[] p) { p2 = 0; for (int i = 0; i < p.Length; i++) p2 += (long)Math.Pow(p[i], 3); Console.WriteLine(" Метод A-2"); } static void A(out double p2, double p1) { p2 = Math.Pow(p1, 3); Console.WriteLine(" Метод A-3"); } static void A(out double p2, params double[] p) { p2 = 0; for (int i = 0; i < p.Length; i++) p2 += Math.Pow(p[i], 3); Console.WriteLine(" Метод A-4"); } static void Main(string[] args) { long u = 0; double v = 0; A(out u, 7); A(out v, 7.5); Console.WriteLine(" u= {0}, v= {1}", u, v); A(out v, 7); Console.WriteLine(" v= {0}", v); A(out u, 7, 11, 13); A(out v, 7.5, Math.Sin(11.5) + Math.Cos(13.5), 15.5); Console.WriteLine(" u= {0}, v= {1}", u, v);   Console.ReadKey(); } }   35.Передача в метод массива и возврат его в виде результата. В C# массивы м.б. переданы в метод в качестве параметров и возвращены методом в качестве результата. При передаче массива в метод достаточно передать только сам объект указав его имя. Все его характеристики можно определять использовав св-во или метод этого объекта. В метод передается только ссылка на массивы. Поэтому все изменения массива в методе влекут изменения этого массива в вызывающем методе. class Program { static void PrintAr(string[] Fath, string[][] Child) { for(int i = 0; i < Fath.Length; i++) { Console.WriteLine(" Отец: {0}; Его дети: ", Fath[i]); for(int j = 0; j < Child[i].Length; j++) Console.Write(Child[i][j] + " "); Console.WriteLine(); } } static void Main(string[] args) { //массив массивов -" Отцы и дети" int Fcount = 3; string[] Fathers = new string[Fcount]; Fathers[0] = " Николай"; Fathers[1] = " Сергей"; Fathers[2] = " Петр"; string[][] Children = new string[Fcount][]; Children[0] = new string[] {" Ольга", " Федор”}; Children[1] = new string[] {" Сергей", " Валентина", " Дарья", " Дмитрий”}; Children[2] = new string[] {" Мария", " Екатерина", " Надежда”}; PrintAr(Fathers, Children); Console.ReadKey(); } }  
  40.Символы и строки. Класс string. Основным типом при работе со строками является типstring, задающий строки переменной длины. КлассString в языке C# относится к ссылочным типам. Над строками - объектами этого класса - определен широкий набор операций, соответствующий современному представлению о том, как должен быть устроен строковый тип. Объекты классаString объявляются как все прочие объекты простых типов - с явной или отложенной инициализацией, с явным или неявным вызовом конструктора класса. Чаще всего, при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковой константой. Но у классаStringдостаточно много конструкторов. Они позволяют сконструировать строку из: - символа, повторенного заданное число раз; - массива символовchar[ ]; - части массива символов. В C# существуют два вида строковых констант: - обычные константы, которые представляют строку символов, заключенную в кавычки; - @-константы, заданные обычной константой с предшествующим знаком @. В обычных константах некоторые символы интерпретируются особым образом. Связано это прежде всего с тем, что необходимо уметь задавать в строке непечатаемые символы, такие, как, например, символ табуляции. Возникает необходимость задавать символы их кодом - в виде escape- последовательностей. Для всех этих целей используется комбинация символов, начинающаяся символом" \" - обратная косая черта. Так, пары символов: " \n", " \t", " \\", " \" " задают соответственно символ перехода на новую строку, символ табуляции, сам символ обратной косой черты, символ кавычки, вставляемый в строку, но не сигнализирующий о ее окончании. Над строками определены следующие операции: · присваивание (=); · две операции проверки эквивалентности (==) и (! =); · конкатенация или сцепление строк (+); · взятие индекса ([]). Начну с присваивания, имеющего важную особенность. Поскольку string - это ссылочный тип, то в результате присваивания создается ссылка на константную строку, хранимую в " куче". С одной и той же строковой константой в " куче" может быть связано несколько переменных строкового типа. Но эти переменные не являются псевдонимами - разными именами одного и того же объекта. Дело в том, что строковые константы в " куче" не изменяются (о неизменяемости строкового типа будем далее говорить подробно), поэтому когда одна из переменных получает новое значение, она связывается с новым константным объектом в " куче". Остальные переменные сохраняют свои связи. Для программиста это означает, что семантика присваивания строк аналогична семантике значимого присваивания. В отличие от других ссылочных типов операции, проверяющие эквивалентность, сравнивают значения строк, а не ссылки. Эти операции выполняются как над значимыми типами. Бинарная операция " + " сцепляет две строки, приписывая вторую строку к хвосту первой. Возможность взятия индекса при работе со строками отражает тот приятный факт, что строку можно рассматривать как массив и получать без труда каждый ее символ. Каждый символ строки имеет тип char, доступный только для чтения, но не для записи. Вот пример, в котором над строками выполняются данные операции: public void TestOpers() { //операции над строками string s1 = " ABC", s2 = " CDE"; string s3 = s1 + s2; bool b1 = (s1 == s2); char ch1 = s1[0], ch2 = s2[0]; Console.WriteLine(" s1={0}, s2={1}, b1={2}, " + " ch1={3}, ch2={4}", s1, s2, b1, ch1, ch2); s2 = s1; b1 = (s1! = s2); ch2 = s2[0]; Console.WriteLine(" s1={0}, s2={1}, b1={2}, " + " ch1={3}, ch2={4}", s1, s2, b1, ch1, ch2); //Неизменяемые значения s1 = " Zenon"; //s1[0]='L'; } Статические методы класса String 1) Empty - Возвращается пустая строка. Свойство со статусом read only 2) Compare - Сравнение двух строк. Метод перегружен. Реализации метода позволяют сравнивать как строки, так и подстроки. При этом можно учитывать или не учитывать регистр, особенности национального форматирования дат, чисел и т.д. 3) CompareOrdinal - Сравнение двух строк. Метод перегружен. Реализации метода позволяют сравнивать как строки, так и подстроки. Сравниваются коды символов 4) Concat - Конкатенация строк. Метод перегружен, допускает сцепление произвольного числа строк 5) Copy - Создается копия строки 6) Format - Выполняет форматирование в соответствии с заданными спецификациями формата. Ниже приведено более полное описание метода 7) Intern, Islntern - Отыскивается и возвращается ссылка на строку, если таковая уже хранится во внутреннем пуле данных. Если же строки нет, то первый из методов добавляет строку во внутренний пул, второй - возвращает null. Методы применяются обычно тогда, когда строка создается с использованием построителя строк - класса StringBuilder 8) Join - Конкатенация массива строк в единую строку. При конкатенации между элементами массива вставляются разделители. Операция, заданная методом Join, является обратной к операции, заданной методом Split. Последний является динамическим методом и, используя разделители, осуществляет разделение строки на элементы   Динамические методы класса String 1) Insert - Вставляет подстроку в заданную позицию 2) Remove - Удаляет подстроку в заданной позиции 3) Replace - Заменяет подстроку в заданной позиции на новую подстроку 4) Substring - Выделяет подстроку в заданной позиции 5) IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny - Определяются индексы первого и последнего вхождения заданной подстроки или любого символа из заданного набора 6) StartsWith, EndsWith - Возвращается true или false, в зависимости от того, начинается или заканчивается строка заданной подстрокой 7) PadLeft, PadRight - Выполняет набивку нужным числом пробелов в начале и в конце строки 8) Trim, TrimStart, TrimEnd - Обратные операции к методам Pad. Удаляются пробелы в начале и в конце строки, или только с одного ее конца 9) ToCharArray - Преобразование строки в массив символов   43.Обмен данными между формами. Часто возникает необходимость передать значения м/у формами в 1-ом положении. Например, значения каких-л. переменных или необходимо запустить какую-л. процедуру или ф-ю в другую форму. В главной форме запуск новой производим так: Form2 frm = new Form2(); frm.Owner = this; //this – это текущая форма (Form1) frm.Show(); Для обращения к переменным Form1 из Form2 необходимо записать: Form1 frm = (Form1) this.Owner; frm.label1.Text = “Test”; // label1 находится на Form1. 37.Рекурсия. Рекурсия является одним из наиболее мощных средств в арсенале программиста. Рекурсивные структуры данных и рекурсивные методы широко используются при построении программных систем. Рекурсивные методы, как правило, наиболее всего удобны при работе с рекурсивными структурами данных - списками, деревьями. Рекурсивные методы обхода деревьев служат классическим примером. МетодP называется рекурсивным, если при выполнении тела метода происходит вызов методаP. Рекурсия может быть прямой, если вызовP происходит непосредственно в теле методаP. Рекурсия может быть косвенной, если в телеP вызывается методQ (эта цепочка может быть продолжена), в теле которого вызывается методP. Для того чтобы рекурсия не приводила к зацикливанию, в тело нормального рекурсивного метода всегда встраивается оператор выбора, одна из ветвей которого не содержит рекурсивных вызовов. Если в теле рекурсивного метода рекурсивный вызов встречается только один раз, значит, что рекурсию можно заменить обычным циклом, что приводит к более эффективной программе, поскольку реализация рекурсии требует временных затрат и работы со стековой памятью. Приведем вначале простейший пример рекурсивного определения функции, вычисляющей факториал целого числа: public long factorial(int n) { if (n < = 1) return 1; else return n * factorial(n - 1); } //factorial Функцияfactorial является примером прямого рекурсивного определения - в ее теле она сама себя вызывает. Здесь, как и положено, есть нерекурсивная ветвь, завершающая вычисления, когдаn становится равным единице. Это пример так называемой «хвостовой» рекурсии, когда в теле встречается ровно один рекурсивный вызов, стоящий в конце соответствующего выражения. Хвостовую рекурсию намного проще записать в виде обычного цикла. Вот циклическое определение той же функции: public long fact(int n) { long res = 1; for (int i = 2; i < = n; i++) res *= i; return (res); } //fact Конечно, циклическое определение проще, понятнее и эффективнее, и применять рекурсию в подобных ситуациях не следует. Интересно сравнить время вычислений, дающее некоторое представление о том, насколько эффективно реализуется рекурсия. Вот соответствующий тест, решающий эту задачу: public void TestTailRec() { long time1, time2; long f = 0; time1 = getTimeInMilliseconds(); for (int i = 1; i < 1000000; i++) f = fact(15); time2 = getTimeInMilliseconds(); Console.WriteLine(" f= {0}, " + " Время работы циклической процедуры: {1}", f, time2 -time1); time1 = getTimeInMilliseconds(); for (int i = 1; i < 1000000; i++) f = factorial(15); time2 = getTimeInMilliseconds(); Console.WriteLine(" f= {0}, " + " Время работы рекурсивной процедуры: {1}", f, time2 -time1); } Каждая из функций вызывается в цикле, работающем 1000000 раз. До начала цикла и после его окончания вычисляется текущее время. Разность этих времен и дает оценку времени работы функций. Обе функции вычисляют факториал числа 15. Проводить сравнение эффективности работы различных вариантов - это частый прием, используемый при разработке программ. Встроенный тип DateTime обеспечивает необходимую поддержку для получения текущего времени. Он совершенно необходим, когда приходится работать с датами. Статический методNow классаDateTimeвозвращает объект этого класса, соответствующий дате и времени в момент создания объекта. Многочисленные свойства этого объекта позволяют извлечь требуемые характеристики. 41.Визуальное программирование. Компоненты. Свойства. События. Методы. Визуальное программирование является одним из наиболее перспективных направлений в программировании. Оно предусматривает создание приложений с помощью наглядных средств. В процессе создания программы программист показывает, что должно получиться в результате, а код программы создается в полуавтоматическом режиме. В программировании визуализировать можно различные процессы: построение интерфейсов, создание структуры БД, проектирование логики программы, работа по сети и др. Для визуализации интерфейсов сущ-ют визуальные компоненты. Стандартные компоненты. Все компоненты среды являются отдельными классами. Компоненты разделяются на видимые (визуальные) и невидимые (не визуальные). Визуальные компоненты появляются во время выполнения программы, отображаясь также во время проектирования формы. Button – кнопка с текстом или рисунком. CheckBox – компонент с двумя состояниями. Позволяет задать значения истины для выбранного параметра, если компонент отмечен флажком, или значение ложь. CheckedListBox – список из элементов CheckBox. ComboBox. Label – выводит текст на форму. LinkLabel – выводит гиперссылку на форму. ListBox – отображает список строк. ListView – отображает объекты в виде иконков. PictureBox – позволяет добавить на форму картинку. RadioButton – позволяет сделать выбор 1-го варианта из нескольких. RichTextBox – служит для отображения и редактирования текста в форматах.txt и.rtf. TextBox – ввод/вывод 1-ой или нескольких строк текста. TreeView – отображает структуру дерева GroupBox – группирует компоненты формы Panel – компонент контейнера TabControl – позволяет добавить на форму закладки на каждой из к-х могут находиться различные компоненты ImageList – служит для хранения изображения в программе (не визуальный компонент) Timer – служит для задания счетчика MenuStrip – добавляет главное меню на форму ContextMenuStrip – позволяет добавить на форму контекстное меню, вызываемое нажатием ПКМ PrintDialog – позволяет отобразить стандартный диалог OpenFileDialog – стандартный диалог открытия файлов SaveFileDialog – стандартный диалог сохранения файлов FontDialog – для работы со шрифтом. Каждому компоненту соответствует 3 разновидности хар-ки: свойства, события, методы. Свойства компонентов. Свойства являются атрибутами любого компонента. Они определяют внешний вид и поведение компонентов. Многие свойства компонентов имеют св-ва установленные по умолчанию. Редактирование свойств компонентов в процессе создания программы выполняется на панеле Свойства. Name – задает имя ч/з к-е возможно обращение из программы данному компоненту Enabled – делает компонент доступным для использования (true) или недоступным (false) Text – определяет текст надписи на компоненте BackColor – задает цвет фона для компонента BackGrauntImage – задает фоновый рисунок компонента Cursor – определяет вид курсора мыши подведении его компонента Font – задает параметры шрифта для отображения надписи на компоненте FontColor – задает цвет надписи на компоненте FormBordeStyle – задает вид обрамления для окна AutoScroll – позволяет задать для формы автоматическое появление полос прокрутки в случае, если содержимое формы полностью не м.б. размещено на форме AutoSize – задает автоматический размер для формы, если установлено значение true Location – задает позицию компонента Size – задает размер (ширину и высоту) Visible – позволяет задать видимость или невидимость компонента для формы Aicron – позволяет задать пиктограмму для окна. Методы. С каждым компонентом (классом компонента) связан свой набор методов (подпрограмм, к-е организуют дополнительные ф-и, связанные с этим компонентом) Пример. У компонента ListBox имеются методы Add – добавить эл-т в список RemoveAt – удаляет эл-т списка с заданным номером. Вызов метода для компонента выполняется указанием имени компонента «точка» - «имя метода» Событие. При наступлении какого-л. программного или аппаратного события (перемещение линии, срабатывание таймера) формулируется соответствующее сообщение, к-е поступает в ОС, далее ОС принимает решение какому приложению это сообщение передать. После поступившего сообщения в программу выполняется поиск обработчика этого сообщения и если обработчик имеется, то запускается соответствующая подпрограмма. Click – выполняется в случае нажатия мыши на компоненте или клавишей Enter на клавиатуре, когда он активен. DoubleClick – выполняется в случае двойного щелчка KeyPress – наступает при нажатии клавиши клавиатуры MouseMove – происходит при перемещении мыши над компонентом MouseHover – наступает когда мышь MouseLaave заходит на компонент и покидает MouseDown, MouseUp – происходит в момент нажатия и в момент опускания Activated – наступает, когда компонент находится активным Load – происходит в момент загрузки компонента в память Shown – происходит при отображении окна FormClosed – происходит при закрытии окна FormClosing – позволяет задать вопрос «будет ли форма закрыта» Scroll – происходит при попытке изменения видимой области внутри контейнера Resize – происходит изменение размеров окна Tick – наступает при истечении заданного времени.   39.Символы и строки. Класс char. В C# есть символьный классChar, основанный на классеSystem.Char и использующий двухбайтную кодировку Unicode представления символов. Для этого типа в языке определены символьные константы - символьные литералы. Константу можно задавать: - символом, заключенным в одинарные кавычки; - escape-последовательностью, задающей код символа; - Unicode-последовательностью, задающей Unicode-код символа. Вот несколько примеров объявления символьных переменных и работы с ними: public void TestChar() { char ch1 = 'A', ch2 = '\x5A', ch3 =, \u0058'; char ch = new Char(); int code; string s; ch = ch1; //преобразование символьного типа в тип int code = ch; ch1 = (char) (code + 1); //преобразование символьного типа в строку //s = ch; s = ch1.ToString() + ch2.ToString() + ch3.ToString(); Console.WriteLine(" s= {0}, ch= {1}, code = {2}", s, ch, code); } //TestChar Три символьные переменные инициализированы константами, значения которых заданы тремя разными способами. Переменнаяch объявляется в объектном стиле, используяnew и вызов конструктора класса. Типchar, как и все типы C#, является классом. Этот класс наследует свойства и методы класса Object и имеет большое число собственных методов. Явные или неявные преобразования между классамиchar иstringотсутствуют, но, благодаря методуToString, переменные типаchar стандартным образом преобразуются в типstring. Как отмечалось выше, существуют неявные преобразования типаchar в целочисленные типы, начиная с типа ushort. Обратные преобразования целочисленных типов в типchar также существуют, но они уже явные. В результате работы процедурыTestChar строкаs, полученная сцеплением трех символов, преобразованных в строки, имеет значениеBZX, переменнаяch равнаA, а ее код - переменнаяcode -65. Не раз отмечалось, что семантика присваивания справедлива при вызове методов и замене формальных аргументов на фактические. Приведем две процедуры, выполняющие взаимно-обратные операции - получение по коду символа и получение символа по его коду: public int SayCode(char sym) { return sym; }//SayCode public char SaySym(object code) { return (char)((int)code); }// SaySym Как видите, в первой процедуре преобразование к целому типу выполняется неявно. Во второй - преобразование явное. Ради универсальности она слегка усложнена. Формальный параметр имеет типObject, что позволяет передавать ей в качестве аргумента код, заданный любым целочисленным типом. Платой за это является необходимость выполнять два явных преобразования. КлассChar, как и все классы в C#, наследует свойства и методы родительского классаObject. Но у него есть и собственные методы и свойства, и их немало. 1)GetNumericValue - Возвращает численное значение символа, если он является цифрой, и (-1) в противном случае 2) GetUnicodeCategory - Все символы разделены на категории. Метод возвращает Unicode категорию символа. 3) IsControl - Возвращает true, если символ является управляющим 4) IsDigit - Возвращает true, если символ является десятичной цифрой 5) IsLetter - Возвращает true, если символ является буквой 6) IsLetterOrDigit - Возвращает true, если символ является буквой или цифрой 7) IsLower - Возвращает true, если символ задан в нижнем регистре 8) IsNumber - Возвращает true, если символ является числом (десятичной или шестнадцатиричной цифрой) 9) IsPunctuation - Возвращает true, если символ является знаком препинания 10) IsSeparator - Возвращает true, если символ является разделителем 11) IsSurrogate - Некоторые символы Unicode с кодом в интервале [0x1000, 0x10FFF] представляются двумя 16-битными " суррогатными" символами. Метод возвращает true, если символ является суррогатным 12) IsUpper - Возвращает true, если символ задан в верхнем регистре 13) IsWhiteSpace - Возвращает true, если символ является " белым пробелом". К белым пробелам, помимо пробела, относятся и другие символы, например, символ конца строки и символ перевода каретки 14) Parse - Преобразует строку в символ. Естественно, строка должна состоять из одного символа, иначе возникнет ошибка 15) ToLower - Приводит символ к нижнему регистру 16) ToUpper - Приводит символ к верхнему регистру 17) MaxValue, MinValue - Свойства, возвращающие символы с максимальным и минимальным кодом. Возвращаемые символы не имеют видимого образа  
45.Доступ к данным СУБД. Метод доступа БД к СУБД можно разделить на группы: 1)доступ с использованием прямого или косвенного вызова СУБД ч/з программные интерфейсы 2)использование объектного интерфейса Прямой вызов программного интерфейса СУБД Большинство СУБД предоставляется в распоряжение программиста интерфейс API, с помощью к-го программа может выполнять все необхолимые операции с БД. Программный интерфейс обычно реализуется с помощью библиотек динамических связей DLL экспортирующих ф-й доступа к СУБД. Работа с БД ч/з API часто приводит к тому, что при выходе новых версий СУБД, а также при обращении данных и другой СУБД необходимо в значительной степени изменять программные коды доступа БД. Использ. программный интерфейс ODBC Программный интерфейс ODBC также реализован в виде набора ф-й. Данный интерфейс является универсальным для доступа различной СУБД. Он позволяет приложению работать с данными СУБД всех типов. Для реализации этой возможности д.б. организован драйвер доступа к конкретной версией СУБД. Использ. ODBC работа с СУБД выполняется одинаково не зависимо от ее внутренней структуры. Т.к. драйвер ODBC полностью освобождает программиста на прямую (ч/з интерфейс API). В результате программа обращающая к БД становятся менее зависимыми от этих БД. ODBC – набор ф-й. Поэтому ограничено его применение в Web-приложениях. С развитием СУБД на смену программного интерфейса пришли объектные интерфейсы. Интерфейс RDO (удаленные объектные данные) Реализуется возможность интерфейса ODBC вместе с тем его использование не требуется вызывать какие-л. программные интерфейсы СУБД. Преимуществом подхода является доступ Web-приложений к БД. Интерфейс OLE DB Является стандартом доступа СУБД и в отличии от ODBC и RDO предоставляется возможность доступа из приложений не только к реляционной БД, но и БД имеющие другую архитектуру. Доступ ч/з поле DB реализуется ч/з провайдеры интерфейса ODBC. Интерфейс ADO На основе объектов реализованное поле DB. Данный подход доступа СУБД является самым распространенным. Работа с приложением фазы данных посредством ADO состоит из этапов: 1)установка соединений 2)подготовка параметров и команды 3)выполнение команды 4)обработка результатов выполнения команды 5)закрытие соединений 6)обработка ошибок Такие приложения открывают соединения с СУБД вначале работы программы и закрывает соединение при ее завершении. Если пользователей СУБД большое кол-во, то во время работы каждый из них занимает минимум одно соединение с СУБД, что отнимает значительные ресурсы у сервера БД и ведет к необходимой покупке большого кол-ва лицензии СУБД. Метод доступа ADO.NET С развитием приложений получили распространение многоуровневые системы. В этих системах обращаются к СУБД не напрямую, а ч/з Web-сервер. Данный поток состоит из этапов: 1)устанавливается соединение СУБД ч/з Web-сервер 2)выполняется команда к БД 3)закрывается соединение с СУБД 4)рез-ты работы команды доступа к БД возвращаются Web-сервером. Данный подпункт позволяет реализовать рассоединенную систему, что значительно сокращает ресурсы требуемые СУБД. Работа СУБД в C# Для работы с БД в среде программирования реализовано пространство имен SystemData. Основной объект для работы с данными БД объект DataSet. Данный объект позволяет создавать наборы реляционной таблицы в наборы из СУБД и оперативной памяти. Эти наборы м.б. использованы для создания приобновлении БД, а также эти данные м.б. экспортированы в формат.xml. С использованием DataSet можно создавать приложение работу с серверами БД. Для отображения содержимого таблицы с использованием графического интерфейса используется компонент DataGridView. Работа с данными объектами м.б. выполнена с использованием визуального интерфейса реализованного ч/з панель Свойства, а также с использованием метода имеющего в данном объекте.     42.Работа со стандартными компонентами. 1.CheckBox (флажок) применяется для принятия команды пользователя с двумя или тремя состояниями. Свойства: Checked – принимает значения истина, если галочка стоит и ложь, когда выключен. Если компонент должен иметь три состояния, то св-во ThreeState д.б. true, при этом значение компонента можно проверить с помощью св-ва CheckState. События: CheckedChanged – срабатывает при изменении св-ва Checked CheckStateChanged – происходит когда св-во CheeckChanges 2.RadioButton (переключатель)- выбор одного варианта из нескольких возможных. Если св-во Checked имеет значение true, то этот компонент выделен. Appearance (Button, Normal) – управляет видом данного компонента CheckedAlign – определяет, где находится ндпись по отношению к этому компоненту. 3. Panel и GroupBox — элементы управления, объединяющие другие элементы управления. Свойства AutoScroll (true, false) BorderStyle 4.PictureBox применяется для отображения графических изображений. Изображение может быть в формате BMP, JPEG, GIF, PNG, WMF, ICO. Свойства SizeMode (Normal, StretchImage, AutoSize, CenterImage) ClientSize Загрузка изображения Bitmap myJpeg = new Bitmap(" mypic.jpg"); pictureBox1.Image = (Image)myJpeg; 5. ImageList – позволяет хранить список изображений в программе. Свойства ImageList - хранит изображение. Для добавления изображения в компонент необходимо обратиться к св-ву Images и вызвать метод Add. ImageSize – задает размер ColorDepth – глубина цветов Для доступа к изображению хранящемуся ImageList необходимо использовать св-во ImageIndex, к-я задает номер изобр-я. 6. ProgressBar – индикатор хода, используется для визуального представления состояния длительного времени. Свойства: Minimum и Maximum – соответствует положению индикатора работ крайнему левому (min) и крайнему (max) положению. Step – устанавливается число, на к-е возрастает текущее зн-е при каждом вызове метода PerformStep. Можно также использовать метод Increment и изменять текущее значение компонента на переданное методу величину. Value – позволяет просмотреть и установить текущее значение компонента. Text – можно информировать пользователя о кол-ве позиции оставшихся до завершения BackgroundImage – задает фоновый рисунок для компонента. 7. TabControl позволяет группировать связанные элементы управления в серии страниц-вкладок. Каждая вкладка представляется эл-ом TabPages. Свойства Appearance (Normal, Buttons, FlatButtons) – используется для определения внешнего вида вкладок Text – задает надпись, к-я отображается в заголовке вкладки Multiline (true, false) SelectedTab – позволяет определить в программе вкладку, к-я является текущей. 8. SplitContainer - предназначен для изменения размеров элементов на форме пользователем. Компонент состоит из 2-х панелей с полоской разделителем м/у ними. Пользователь с использованием мыши может перемещать полоску изменяя размеры панели. SplitContainer может содержать любые компоненты, в т.ч. и компоненты SplitContainer. События SplitterMoving – происходит во время перемещения полоски SplitterMoved – происходит после завершения перемещения полоски.   44.Работа с файлами. Файлы предназначены для хранения и обработки большого объема данных в программе. Файл – совокупность связанных данных, хранящиеся во внешней памяти компьютера и рассматриваемое как единое целое. Работа с файлами в программе выполняется с использованием файловой переменной. Файлы в языке программирования разделяются на группы: 1)типизированные файлы – файлы, в к-м хранятся данные определенного типа 2)текстовые – файлы, в к-х содержится текст 3)не типизированные – файлы, содержащие произвольную инф-ю. При работе с файлами сущ-ет определенный порядок действий: 1)объявление файловой переменной 2)связывание этой переменной с конкретным файлом на диске 3)открытие файла (для записи инф-и и чтения) 4)выполнение операции с файлами: чтение, запись 5)закрытие файлов Классы, предназначенные для работы с файлами находятся в пространстве имен System.IO. Классы Directory и File содержат статические методы для выполнения операции с папками и файлами. Создание, удаление, проверка существования. Класс Path сод-т статический метод для работы с путями и именами файлов. Классы BinaryReader и BinaryWriter включают метод предназначенный для чтения и записи простых типов данных как бинарных значений. Классы DirectoryInfo и FileInfo предназначены для получения информации в папках и каталогах. Класс Stream предназначен для записи или чтения посл-ти байт (работа с потоком данных) Классы TextReader и TextWriter для чтения и записей посл-ти символов. Класс File Delete(string path) – удаляет существующий файл, путь к-го задан в качестве параметра Exists(string path) – проверяет существование файла по указанному пути. Если файл сущ-ет возвращает зн-е true Create (string path, int bufersize) –задает имя файла, путь к нему задается в качестве параметра. Метод Createвозвращает указатель на созданный файл, в к-ю необходимо занести файловую переменную. Тип файловой переменной м.б. задан с помощью класса FileStream. Команда using распространяет действие файловой переменной на весь блок, задаваемых с помощью {}. По завершению этого блока файл автоматически будет закрыт и файловая переменная удалена из памяти. Open(string path, FileMode mode, FileAccess acess, FileShare share): открывает существующий файл, расположенный по указанному пути (path) с режимом чтения (mode), режимом доступа (access) и режимом многопользовательского использования (share). Обязательными параметрами являются path и mode. С использованием файловой переменной FileStream и метод Length выполняет чтение файла. После выполнения команды Length возвращает кол-во считанных байтов. Указательный файл смещает далее 0 файл. Зн-е 0 возвращенное методом Length, означает, что данные из файла не считаны, т.е. достигнут конец файла. CreateText(string path) –создает текстовые файлы. Созданный файл будет открыт для записи. Метод CreateText возвращает объект типа StringWriter. OpenText(string path) –открывает текстовый файл, возвращает файловую переменную типа streamreader. Метод ReadLine класса StreamReader позволяет выполнить чтение строки из текстового файла. При выполнении каждой операции чтения указатель на файл перемещается на следующую строку. Если указатель на файл находится в конце, то метод ReadLine возвращает значение. AppendText(string path) –позволяет добавить строки к существующему текстовому файлу. Создает объект типа StreamWriter void Copy(string sourcepath, string destpath, bool overwrite) – копирует существующий файл расположенный по адресу sourcepath, в новое место destpath с возможной перезаписью overwrite. Если имена различных файлов при копировании будет переименован. Если overwrite имеет зн-е true и при копировании из source в dest он будет сущ-ть в destpath, файл будет перезаписан. void Move(string sourcepath, string destpath) –перемещает текущий файл расположенный в sourcepath в новое место destpath SetAttributes(string path, FileAttributes) –задает атрибуты для файлов. Атрибуты м.б. заданы с помощью переменной и класса FileAttributes GetAttributes(path)получение зн-е атрибута текущего файла Класс Path Класс предназначен для работы с именами и путями файлов, как со строками. GetFileName(string path) –возвращает полное имя файла, включая расширение GetExtension(string path) –возвращает расширение файла GetFullPath(string path) –возвращает полный путь к файлу Text=Path.GetFullPath(path); GetPathRoot(string path) –возвращает имя носителя на к-м находится файл GetDirectoryName(string path) –возвращает путь к файлу без указания имени файла HasExtension(string path) –метод для проверки наличия расширения файла GetTempPath()– возвращает путь к временной папке текущего пользователя в среде Windows ChangeExtension(string, string) –позволяет сменить расширение файлов Combine(string pathdir, string pathfile) –объединяет две переменные типа string.

 

<== предыдущая лекция | следующая лекция ==>
Сжатое и индексное хранение линейных списков | Введение. Государственное образовательное учреждение среднего профессионального образования




© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.