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

Страницы работы

Фрагмент текста работы

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

34. Перевод из десятичной в двоичную систему счисления

Для перевода необходимо делить число с остатком на основание счисления до тех пор, пока частное больше основания счисления.

Пример:

4410 переведём в двоичную систему

44 делим на 2. частное 22, остаток 0

22 делим на 2. частное 11, остаток 0

11 делим на 2. частное  5, остаток 1

 5 делим на 2. частное  2, остаток 1

 2 делим на 2. частное  1, остаток 0

 1 делим на 2. частное  0, остаток 1

Частное равно нулю, деление закончено. Теперь записав все остатки слева направо получим число 1011002

35. Для перевода из двоичной системы в десятичную удобно пользоваться суммированием по степеням двойки. Например: (10100)2 = 1х24 + 0х23 + 1х22 + 0х21 + 0х20 = 16+4 = (20)10

36. перевод числа из двоичной системы в восьмеричную. Для этого двоичное число разбивают на триады относительно крайнего правого разряда (или двоичной запятой) и, используя таблицу 7, каждой триаде ставят в соответствие восьмеричную цифру. (000 – 0     001- 1      010-2     011-3   100-4   101-5   110-6    111-7)перевод числа из восьмеричной системы в шестнадцатеричную через другие

37. Для перевода восьмеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания восьмеричной системы счисления на соответствующие цифры в разрядах восьмеричного числа: 4728=4*82+7*81+2*80=256+56+2=314

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

Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:

5A316=5·162+10·161+3·160=5·256+10·16+3·1=1280+160+3=144310

.Сортировка списков в динамической памяти

Существует два типа организации совокупностей данных в динамической памяти:линейные либо однонаправленные списки и                                  двунаправленные списки;

Линейным списком называется – динамическая структура хранения данных, в которой каждый элемент имеет ссылку на следующий элемент списка.

В двунаправленных же списках существует два адресных поля: одно из них ссылается на последующий элемент списка, другое же – на предыдущий, т.е. элемент списка хранит адреса двух соседних элементов.

Графически эти типы данных можно представить в виде следующих схем:  а) Линейные списки:

   нач.

               С1                   С2                С3                            

где     нач. – адрес первого элемента списка;

Сi     – адреса элементов списка в динамической памяти.

б)  Двунаправленные списки:    

  нач.

где     нач. – адрес первого элемента списка;

Сi     – адреса элементов списка в динамической памяти.

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

Для сортировки элементов в динамической памяти применимы те же методы, что и для  элементов находящихся в статической памяти за исключением нескольких нюансов: во-первых, сортировка в динамической памяти происходит при помощи ссылок, что было сказано выше; во-вторых,  в линейных списках также имеется особенность для перестановки первой пары списка, т.к. нужно знать адрес начала; в двунаправленных же списках эту особенность имеют две пары – первая и последняя.

Наиболее предпочтительным является сортировка двунаправленных списков, рассмотрим её алгоритм.

Алгоритм сортировки двунаправленных списков:

ProgramSortirovka;

Type Srecord=^Lib_rec;

     Lib_rec=record

       Data:LongInt;                         {Дата исторического события}

       Event:String[60];                   {Историческое событие}

       Next,Pred:Srecord

     end;

Var File_event:file of Lib_rec;       {Файловая переменная}

    Dvar:Lib_rec;                {Дополнительная файловая переменная}

    Start,Vsp1,Vsp2,Dinelem,A,A1,B,B1:Srecord; {Star-адр нач мас-ва Vsp1,Vsp2,Dinelem,A,A1,B,B1-вспомог. динамич перем}

    Nomber,I,J,K:Integer;

    Place,Splace:String[25];    {Place-файл, в кот будут запис первонач данные; Splace-файл, в кот будут запис отсортир дан}

    Temp1,Temp2:LongInt; {}

    Flag:Boolean;        {Flag-переменная, признак конца данных}

    SortFlag:Char;       {SortFlag-перем, призн конца ввода данных}

{Ввод  элементов в динамическую память}

  {Сортировка данных в динамической памяти по первому полю}

For I:=1 to Nomber-1 do

    begin

Temp1:=Start^.Data;          

      Temp2:=Start^.Next^.Data;

      Vsp1:=Start;

      For J:=1 to Nomber-I do

        begin

          If Temp1>Temp2 then           {Перестановка}

              begin

Vsp2:=Vsp1^.Next;

                A:=Vsp1^.Pred;

                B:=Vsp1^.Next;

                A1:=Vsp2^.Pred;

                B1:=Vsp2^.next;

                Vsp1^.Pred:=B;

                Vsp1^.Next:=B1;

                Vsp2^.Pred:=A;

                Vsp2^.Next:=A1;

                If A<>Nil then

Vsp2^.Pred^.Next:=Vsp2;   {Перестан ссыл нач и кон}

                {end If}

                If B1<>Nil then

Vsp1^.Next^.Pred:=Vsp1;

                {end If}

                If J=1 then

                  Start:=Vsp2

                {end If}

              end

            else

              begin

Temp1:=Temp2;

                Vsp1:=Vsp1^.next

              end;

          {end If}

          If Vsp1^.Next<>Nil then

            Temp2:=Vsp1^.Next^.Data

          {end If}

        end

      {end For J}

end;

26. ссылочный тип данных Данные в динамической памяти размещают

Похожие материалы

Информация о работе