Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Блок 1 Программирование.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
295.81 Кб
Скачать
  1. Поиск данных в массивах и в файлах. Примеры алгоритмов.

Поиск - процесс нахожд-я в задан-м множ-ве объекта, обладающ св-ми или кач-ми задаваемого эталона (шаблона). Поиск значения 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; }

  1. Общеязыковые конструкции языков 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"));}

  1. Классы и абстрагирование данных. Отношения между классами. Примеры на С++ или 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; }