
- •Структуры данных. Стек. Очередь. Список.
- •Методы сортировки. Примеры алгоритмов.
- •Поиск данных в массивах и в файлах. Примеры алгоритмов.
- •Доступ к бд средс-ми php
- •1. Поддержка баз данных в рнр.
- •Технология Microsoft .Net. Особенности, основные положения и характеристики.
- •2. Основные функциональные средства управления сеансом.
- •5. Получение и обработка результатов запроса
- •6.Отсоединение от бд
- •7. Освобождение ресурсов
- •Объектно-ориентированное программирование средствами с#.
- •Создание Windows-приложений средствами с##.
- •Виртуальные функции и полиморфизм. Реализация на с#. Примеры.
- •Элементы контроля в c#. Примеры.
- •Технология ole-db и ado для работы с базами данных.
- •Правила целостности реляционной модели баз данных. Основные операции реляционной алгебры.
- •Нормализация таблиц.1-я, 2-я, 3-я нормальные формы.
- •Общая концепция языка sql. Особенности построения sql-запросов
- •3.3.2. Целостность сущностей
- •3.3.3. Ссылочная целостность
- •3.3.4. Корпоративные ограничения целостности
- •Языки доступа к данным в реляционной субд,основные возможности; их отличия. Примеры.
- •Основные возможности языка sql при выборе данных из бд
- •Основные команды компонента ddl языка sql. Примеры создания, удаления таблиц и модификации структуры таблицы.
- •Хранимые процедуры. Разработка хранимых процедур на ms sql Server
- •Понятие транзакции. Управление параллельностью.
- •Распределенные бд и системы управления распределенными бд.
- •13.Понятие интерфейса. Интерфейс и его реализация. Примеры на диаграмме классов.
Поиск данных в массивах и в файлах. Примеры алгоритмов.
Поиск - процесс нахожд-я в задан-м множ-ве объекта, обладающ св-ми или кач-ми задаваемого эталона (шаблона). Поиск значения 35 в массиве arr
static void Main()
{ int[] arr = { 35, 698, 74, 81, 67, 11, 184, 89 };
Console.WriteLine("Cортированый масив");
foreach (int num in arr)
{ if(num==35) Console.WriteLine(num);}}
Проверить усл на массиве. Для этого необх-мо последовательно проверять выполнимость усл для каждого эл-та массива.{}
Ассоциативный поиск полезен при исп ассоц памяти, сост из 2 или неск массивов одинак размера. В 1-ом массиве содержатся дескрипторы (указатели), а во 2-ом данные. Поиск ведется по дескрипторам, найдя нужный дескриптор можно получить соответст данные из 2-го массива. Пример: дескрипторы – фамилии, данные – адреса, телефоны и др. Ассоциативный массив с точки зрения интерфейса удобно рассматривать как обычный массив, в котором в качестве индексов можно использовать не только целые числа, но и значения других типов, например, строки.
Hashtable ht = new Hashtable();
ht.Add("key", "Иван");
ht.Add("fgh", "петров");
ht.Add(1, 88);
Console.WriteLine(ht.ContainsKey(1));
Бинарный поиск состоит в том, что ключ V сравнивается со средним элементом списка. Если эти значения окажутся равными, то искомый элемент найден, в противном случае поиск продолжается в одной из половин списка.Нахождение элемента бинарным поиском осуществляется очень быстро.Недостаток бинарного поиска заключается в необходимости последовательного хранения списка, что усложняет операции добавления и исключения элементов. Пусть, например, во входном потоке задано 101 число, К1,К2,...,К100, V - элементы списка и ключ. Известно, что список упорядочен по возрастанию, и элемент V в списке имеется. Составим программу для ввода данных и осуществления бинарного поиска ключа V в списке К1,К2,...,К100.
static void Main()
{ int[] arr = new int[] { 0, 1, 2, 3, 5, 8, 13 };
Console.WriteLine( Array.BinarySearch(arr, 3) >= 0);}
описание только алгоритма. элемента x массива A, отсортированного в возрастающем порядке, применяется следующий алгоритм:
i = 1; // индекс первого элемента массива
j = n; // индекс последнего элемента массива (0, если массив пуст)
for (i = 1; i <= j; i++)
{ k = i + (j - i)/2;
if (x > A[k])
{ i = k + 1; }
else if (x < A[k])
{ j = k - 1; }
else
break; }
Общеязыковые конструкции языков C++ и C#. Циклы, условные операторы. Операторы if и switch
Операторы if и switch
If служит для разветвления программы на два направления. Если некоторое условие выполняется, то программа идет в одну сторону, если не выполняется - то в другую.
int x = 0;
if (x<5)
{
Console.WriteLine("x < 5");
}
else
{
Console.WriteLine("x >= 5");
}
Оператор switch примеряется тогда, когда программа должна разделиться более чем на два направления (т. е. будем двигаться или сюда, или сюда, или сюда).
switch (k){
case 1:
case 2:
Console.WriteLine("Неудовлетворительно"); break;
default:
Console.WriteLine("Ошибка");
break;}
Циклы for и foreach
Начнем сразу с примера цикла for:
for(int i=1; i<=k; i++){ sum+=i;}
Этот пример подсчитывает сумму чисел от 1 до введенного пользователем числа k. Сумма записывается в переменную sum и выводится на экран.
Очень часто циклы используются для некоторых действий с массивами. Так как нумерация элементов массива идет с нуля, то типичный цикл будет выглядеть так:
int[] a = {-5, 4, 55};
int sum=0;
for(int i=0; i<3; i++){ sum+=a[i];}
пример цикла foreach:
int[] m = {-5, 4, 10};
int sum=0;
foreach(int i in m){ sum+=i;}
Т. е. мы пишем именно тип элементов массива. На самом деле foreach используется не только для массивов, но и для других объектов (например, для хэш-таблиц).
Циклы while бывают двух видов - while и do-while. Оба эти цикла используются, как правило, тогда, когда точно не известно, сколько раз цикл должен выполнится. Например, при вводе пользователем пароля или при подсчете чего-либо с определенной точностью. Оба эти цикла будут выполняться до тех пор, пока условие в круглых скобках после слова while будет истинно. Как только условие станет равным false, выполнение цикла прекращается. while может не выполниться ни одного раза, тогда как do-while по крайней мере один раз выполнится.
Пример Цикла while (c предусловием)
int i=0;
while (i < 10) { Console.WriteLine(i); ++i; };
Пример Цикла do-while (с постусловием)
int i=0;
do
{
Console.WriteLine(i);
++i;
} while (i < 10);
алгоритм выше останавливается в двух случаях:
1) либо i > j и элемент не был найден,
2) либо i <= k <= j и A[k] = искомый элемент.
Метод Contains. Возвращает значение, указывающее, равен ли данный экземпляр заданному объекту или значению типа String. Этот метод выполняет сравнение по порядковым номерам (с учетом регистра и без учета языка и региональных параметров). Поиск начинается с первой позиции знака в данной строке и продолжается до последней позиции знака.
using System.Linq;
int[]array = new int[] { 0, 1, 2, 3, 5, 8, 13 };
Console.WriteLine(array.Contains(4)); // False
Файлы классифиц в соответствии с доступом к ним. Файлы с последоват-ым доступом. При таком доступе приходится просматр все записи, предшеств искомой. Файлы с прямым доступом. Записи имеют порядк-ый номер, кот-у ставится в соотв адрес, где хранятся данные этой записи. Доступ к этому адресу прямой.Файлы с доступом по ключу. Поиск производ-ся по содерж 1 из полей записи, назыв-ое ключом записи.
Поиск данных в файле:
using (StreamReader sr = new StreamReader(@"D:\TestFile.txt"))
{ string line;
while ((line = sr.ReadLine()) != null)
{Console.WriteLine(line.Contains("5"));}
Классы и абстрагирование данных. Отношения между классами. Примеры на С++ или C#. Сопоставление с UML-представлением на диаграмме классов.
Классы — сердце каждого объектно-ориентированного языка. Класс представляет собой инкапсуляцию данных и методов для их обработки. Это справедливо для любого объектно-ориентированного языка. Языки отличаются в этом плане лишь типами данных, хранимых в виде членов, а также возможностями классов
ОПРЕДЕЛЕНИЕ КЛАССОВ.Поместив перед именем вашего класса ключевое слово class, вставьте члены класса, заключенные в фигурные скобки, например: class MySimpleClass { private long myClassID; } Этот простейший класс с именем MySimpleClass содержит единственный член — myClassID.
НАЗНАЧЕНИЕ КЛАССОВ. Например, работник на некой фирме. У него есть такие свойства, как фамилия, возраст, стаж и т. п. Так вот, в этом случае удобно каждого работника описывать не рядом независимых переменных (строкового типа для фамилии, целого типа для возраста и стажа), а одной переменной типа Worker, внутри которой и содержатся переменные для фамилии, возраста и стажа. Здесь самое важное то, что в переменной типа Worker содержатся другие переменные. пример класса.
class Worker { public int age = 0; public string name; } class Test { static void Main(string[] args) { Worker wrkl = new Worker(); wrkl.age = 30; wrkl.name = "Петров Иван Сергеевич"; Console.WriteLine(wrkl.name + " - " + wrkl.age + " года"); } } } Определяем класс Worker. Внутри этого класса существуют две переменные — целая age и name. (т. е. она будет для «внутреннего использования»). Далее в строчке Worker wrkl = new Worker();мы заводим экземпляр класса в куче (heap) и возвращаем на него ссылку. Затем в строчках wrkl.age = 30; wrkl.name = "Петров Иван Сергеевич"; Console.WriteLine(wrkl.name + " - " + wrkl.age + " года"); //мы используем наш класс, //присваивая некоторые значения для возраста и имени и выводя их потом на экран.
Модификатор доступа
public Член доступен вне определения класса и иерархии производных классов
protected Член невидим за пределами класса, к нему могут обращаться только производные классы
private Член недоступен за пределами области видимости определяющего его класса. Поэтому доступа к этим членам нет даже у производных классов
internal Член видим только в пределах текущей единицы компиляции. Модификатор доступа internal в плане ограни чения доступа является гибридом public и protected, зависимым от местоположения кода
конструкторы . специальные методы, вызываемые всякий раз при создании экземпляра класса.Значений конструкторы не возвращают.:
Worker wrkl = new Worker(); Поэтому, объявляя объект, создайте где-нибудь в программе его экземпляр с помощью ключевого слова new:
Constructor App =new ConstructorApp() ;
Объекты объявляются перед использованием или созданием их экземпляров с помощью new, если вы объявляете один класс внутри другого. Такая вложенность классов называется включение (containment) или агрегирование (aggregation)
ВЛОЖЕННЫЕ КЛАССЫ
Иногда некоторый класс играет чисто вспомогательную роль для другого класса и используется только внутри него. В этом случае логично описать его внутри существующего класса
class ClassA
{
prvate class ClassB
{ public int z; }