Главная страница
Навигация по странице:

  • Сортировка бинарными включениями

  • Шейкер

  • 3. ПОРЯДОК ВЫПОЛНЕНИЯ 1. Получить задание у преподавателя. 2. Выполнить задание в соответствии с вариантом. 3. Ответить на контрольные вопросы. 4. ЗАДАНИЕ

  • Лабораторная работа № 9 Работа со строками 1. ЦЕЛЬ РАБОТЫ

  • 2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Общие положения

  • Строковый тип данных String

  • информатика. Игнатьева Елена Александровна, Измайлова Елена Ивановна. Информатика. Электронный ресурс методические указания


    Скачать 4.32 Mb.
    НазваниеИгнатьева Елена Александровна, Измайлова Елена Ивановна. Информатика. Электронный ресурс методические указания
    Дата20.06.2022
    Размер4.32 Mb.
    Формат файлаpdf
    Имя файлаинформатика.pdf
    ТипМетодические указания
    #604814
    страница12 из 15
    1   ...   7   8   9   10   11   12   13   14   15
    Сортировка методом прямого обмена
    Оба разбиравшихся выше метода можно тоже рассматри- вать как "обменные" сортировки.
    Для рассматриваемого ниже метода обмен местами двух элементов представляет собой характерную особенность процес- са.
    Изложенный ниже алгоритм прямого обмена основан на сравнении и смене мест для пары соседних элементов и продол- жении этого процесса до тех пор, пока не будут упорядочены все элементы.
    Как и в методе прямого выбора, мы повторяем проходы по массиву, сдвигая каждый раз наименьший элемент "оставшейся" части последовательности к левому концу массива.
    Если мы будем рассматривать массивы как вертикальные, а не горизонтальные построения, то элементы можно интерпрети- ровать как пузырьки в чане с водой, причем вес каждого пузырь- ка соответствует значению элемента. В этом случае при каждом проходе один пузырек как бы поднимается до уровня, соответст- вующего его весу. Такой метод широко известен под именем "пу- зырьковая сортировка".
    Текстовый алгоритм:
    1. Начало.
    2. Выполнить цикл, пока i имеет значения от 2 до N, шаг = +1: а) выполнить цикл, пока j имеет значения от N до i, шаг = -1: тело цикла: если А(j-1) > А(j), то меняем местами эти два элемента.
    3. Конец.
    На рисунке 5 представлена блок-схема сортировки методом прямого обмена.

    153
    Рис. 5. Блок-схема сортировки методом прямого обмена
    Если сравнивать свойства алгоритмов первых двух методов, то оказывается, что при сортировке прямым выбором число про- изводимых сравнений больше, а число перемещений элементов – меньше, чем при сортировке прямым включением. В целом же большой разницы в эффективности этих методов нет.
    Сортировка методом прямого обмена имеет меньшую эф- фективность. Число шагов просмотра с обменом ≤ (n – 2), и из-за того, что "легкие" элементы "всплывают" по несколько сразу, то кажется, что сортировка происходит быстро. Но с другой сторо- ны, "тяжелые" элементы, если они находятся наверху, переме- щаются вниз на одну позицию при каждом шаге, что увеличивает время сортировки. Число обменов элементов оказывается до- вольно большим.
    На рисунке 6 приведен пример сортировки методом прямого обмена. i = 2, N, 1
    A(j-1) >
    A(j) ет j = N, i, -1
    X = A(j-1)
    A(j-1) = A(j) а
    A(j) = X

    154
    Исходн ая последовате
    I
    = 1
    I
    = 2
    I
    = 3
    I
    = 4
    I
    = 5
    I
    = 6
    I
    = 7
    I
    = 8 44 0
    6 0
    6 0
    6 0
    6 0
    6 0
    6 0
    6 0
    6 55 4
    4 1
    2 1
    2 1
    2 1
    2 1
    2 1
    2 1
    2 12 5
    5 4
    4 1
    8 1
    8 1
    8 1
    8 1
    8 1
    8 42 1
    2 5
    5 4
    4 4
    2 4
    2 4
    2 4
    2 4
    2 94 4
    1 8
    5 5
    4 4
    4 4
    4 4
    4 4
    4 4
    18 9
    4 4
    2 4
    2 5
    5 5
    5 5
    5 5
    5 5
    5 06 1
    8 9
    4 6
    7 6
    7 6
    7 6
    7 6
    7 6
    7 67 6
    7 6
    7 9
    4 9
    4 9
    4 9
    4 9
    4 9
    4
    Рис. 6. Пример сортировки методом прямого обмена
    Сортировка бинарными включениями
    Идея метода сходна с сортировкой прямыми включениями.
    Так же из неотсортированной части на i-ом шаге извлекается i-ый элемент, которому ищется место в уже "готовой" части последо- вательности. Однако процесс поиска места включения протекает в несколько раз быстрее.
    Суть метода заключается в следующем:
    Часть последовательности до испытуемого (i-ого) элемента
    ("готовая" часть) делится пополам и i-ый элемент сравнивается с элементом, стоящим на середине, после чего границы поиска уменьшаются в два раза. Получившийся полуинтервал делится пополам, и процесс повторяется до тех пор, пока не будет опре- делено место включения i-ого элемента. Затем происходит сдвиг вправо на одну позицию тех элементов, которые расположены от места включения до i-ого элемента, освобождая таким образом позицию для i-ого элемента.
    Текстовый алгоритм:
    1. Начало.
    2. Выполнить цикл, пока I имеет значение от 2 до N с ша- гом = 1 а) X = A(i), l = 1, r = i-1 б) Если l > r, то:

    155 1) выполнить цикл, пока j имеет значение от (i-1) до l с ша- гом = -1 тело цикла: A(j + 1) = A(j)
    2) присвоить A(l) = X иначе:
    1) присвоить m = (l + r) \ 2 2) если X < A(m), то r = m – 1 иначе l = m + 1 3) перейти к пункту б).
    3. Конец.
    На рисунке 7 приведен пример выполнения сортировки би- нарными включениями.
    Исходн ая последовате
    4 4
    5 5
    1 2
    4 2
    9 4
    1 8
    0 6
    6 7
    I = 2 4
    4 5
    5 1
    2 4
    2 9
    4 1
    8 0
    6 6
    7
    I = 3 1
    2 4
    4 5
    5 4
    2 9
    4 1
    8 0
    6 6
    7
    I = 4 1
    2 4
    2 4
    4 5
    5 9
    4 1
    8 0
    6 6
    7
    I = 5 1
    2 4
    2 4
    4 5
    5 9
    4 1
    8 0
    6 6
    7
    I = 6 1
    2 1
    8 4
    2 4
    4 5
    5 9
    4 0
    6 6
    7
    I = 7 0
    6 1
    2 1
    8 4
    2 4
    4 5
    5 9
    4 6
    7
    I = 8 0
    6 1
    2 1
    8 4
    2 4
    4 5
    5 6
    7 9
    4
    Резуль- тат
    0 6
    1 2
    1 8
    4 2
    4 4
    5 5
    6 7
    9 4
    Рис. 7. Пример выполнения сортировки бинарными включениями
    На рисунке 8 представлена блок-схема сортировки бинар- ными включениями.

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

    157
    На первом этапе наименьший элемент неотсортированной части последовательности сдвигается к левому краю этой части, а наибольший элемент из оставшейся неотсортированной части сдвигается к правому краю этой части массива. После выполне- ния данных этапов неотсортированная часть массива уменьшает- ся на два элемента. Шаги выполняются, пока не будет отсортиро- ван весь массив.
    Текстовый алгоритм:
    1. Начало.
    2. Присвоить переменной t (слева массива) значение 2, пе- ременной r (справа массива) и переменной k – значение количе- ства элементов массива.
    3. Выполнить цикл, пока i имеет значение от r до t с ша- гом = -1: а) если A(i-1) > A(i), то меняем местами эти два элемента и переменной k присваиваем значение = i.
    4. Присвоить переменной t значение = k + 1.
    5. Выполнить цикл, пока i имеет значение от t до r с ша- гом = 1: а) если A(i-1) > A(i), то меняем местами эти два элемента и переменной k присваиваем значение = i.
    6. Присвоить переменной r значение = k – 1.
    7. Если t > r, то идти к пункту 8, иначе идти к пункту 3.
    8. Конец.
    На рисунке 9 представлен пример выполнения шейкер – сортировки по шагам.
    Исходн ая последовател
    4 4
    5 5
    1 2
    4 2
    9 4
    1 8
    0 6
    6 7
    1-й этап
    06 44 55 12 42 94 18 67 1-й шаг
    2-й этап
    06 44 12 42 55 18 67 94 1-й этап
    06 12 44 18 42 55 67 94 2-й шаг
    2-й этап
    06 12 18 42 44 55 67 94 3-й шаг
    1-й этап
    06 12 18 42 44 55 67 94
    Резуль- тат
    0 6
    1 2
    1 8
    4 2
    4 4
    5 5
    6 7
    9 4
    Рис. 9. Пример выполнения шейкер – сортировки

    158
    На рис. 10 приведена блок-схема шейкер – сортировки.
    Рис. 10. Блок-схема шейкер – сортировки

    159
    Из примера, приведенного на рисунке 9 видно, что после первого шага длина неотсортированной части уменьшилась на два элемента, а после второго шага длина неотсортированной части вместо двух уменьшилась сразу на 4 элемента. Это допол- нительное уменьшение обеспечивает переменная k, показываю- щая при каком значении i был совершен последний обмен места- ми двух элементов. Благодаря переменной k быстрее увеличива- ется и быстрее уменьшается левая (t = k + 1) и правая (r = k – 1) границы неотсортированной части.
    3. ПОРЯДОК ВЫПОЛНЕНИЯ
    1. Получить задание у преподавателя.
    2. Выполнить задание в соответствии с вариантом.
    3. Ответить на контрольные вопросы.
    4.
    ЗАДАНИЕ
    Выполнить сортировку одномерного массива, на языке про- граммирования, указанного преподавателем в соответствии с за- данным вариантом.
    1. Известен список фамилий и рост учеников класса. Напе- чатать в порядке возрастания роста список детей, используя ме- тод шейкер – сортировки.
    2. Известен список спортсменов и результат их прыжков в длину. Напечатать общий список в порядке возрастания резуль- тата, используя метод сортировки бинарными включениями.
    3. Известен список биатлонистов и результаты их стрельбы на двух огневых рубежах (попадания). На каждом рубеже пять мишеней. Напечатать общий список биатлонистов в порядке убывания результата на втором огневом рубеже, используя метод прямого выбора.
    4. Известен список студентов группы и количество пропу- щенных часов каждым из студентов. Напечатать список студен- тов в порядке возрастания количества пропущенных часов (если пропуски имеют место), используя сортировку прямыми включе- ниями.

    160 5. Известен список рабочих и их месячный заработок. На- печатать список рабочих в порядке убывания зарплаты, исполь- зуя метод сортировки прямыми включениями.
    6. Задан числовой массив, состоящий из J элементов. На- печатать отрицательные числа в порядке возрастания по модулю, используя шейкер – сортировку.
    7. Задан числовой массив, состоящий из J элементов. На- печатать положительные числа в порядке убывания, используя метод прямого выбора.
    8. Известен список фамилий и вес студентов вашей груп- пы.
    Напечатать в порядке возрастания список студентов, вес ко- торых не меньше среднего веса всей группы. Для этого использо- вать метод сортировки бинарными включениями.
    9. Дан одномерный массив из I целых чисел. Напечатать отрицательные числа в порядке возрастания по модулю, а поло- жительные числа в порядке убывания, используя метод прямого обмена.
    10. Известен список студентов группы и количество пропу- щенных часов каждым из студентов. Напечатать в порядке воз- растания тех, кто пропустил более 10 часов, используя метод сор- тировки прямыми включениями.
    11. Известен список спортсменов и результат их прыжков в длину. Напечатать в порядке убывания тех, чей результат меньше
    3 метров, используя сортировку прямого выбора.
    12. Известен список спортсменов и результат их прыжков в длину. Напечатать в порядке возрастания тех, чей результат больше 3 метров, используя шейкер – сортировку.
    13. Известен список фамилий и рост учеников класса. Напе- чатать в порядке убывания тех, чей рост меньше 160 см, исполь- зуя сортировку бинарными включениями.
    14. Известен список фамилий и рост учеников класса. На- печатать в порядке возрастания тех, чей рост больше 160 см, ис- пользуя сортировку прямого обмена.

    161
    5.
    КОНТРОЛЬНЫЕ ВОПРОСЫ
    1. Что такое сортировка?
    2. Объясните суть метода сортировки методом прямого включения.
    3. Объясните суть метода сортировки методом прямого вы- бора.
    4. Объясните суть сортировки методом прямого обмена.
    5. Объясните суть сортировки бинарными включениями.
    6. Объясните суть шейкер – сортировки.
    7. Что обеспечивает дополнительное уменьшение неотсор- тированной части в шейкер – сортировки?

    162
    Лабораторная работа №
    9
    Работа со строками
    1. ЦЕЛЬ РАБОТЫ
    Изучение синтаксиса стандартных строковых процедур и функций, встроенных в язык программирования высокого уровня
    Visual Basic for Applications (VBA), получение навыков примене- ния строковых процедур и функций в программах пользователя при работе с данными строкового типа.
    2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
    Общие положения
    VBA – великолепное сочетание одного из самых простых языков программирования BASIC со специальным механизмом, позволяющим программам, написанным на этом языке, обра- щаться к объектам всех основных приложений Microsoft Office —
    Excel, Word, Power Point, Access и прочих.
    VBA – мощное средство разработки настоящих полнофунк- циональных программ, работающих в среде приложений
    Microsoft Office.
    VBA поддерживает важнейшие современные концепции разработки программных систем — объектно-ориентированное и событийно-управляемое программирование, а также важнейшие технологии – поддержку элементов управления на базе ActiveX, интеграцию с базами данных, системами электронной почты и
    Интернетом.
    VBA содержит все средства, характерные для современных средств разработки программного обеспечения: интегрирован- ную среду разработки, конструктор форм, мощный отладчик, не уступающий по возможностям отладчикам некоторых современ- ных компиляторов.
    Данные в VBA характеризуются своими типами, которые определяют:
    формат представления данных в памяти компьютера;
     область возможных значений;
     множество допустимых операций, применимых к данным.

    163
    В свою очередь типы данных делятся на простые (встроен- ные и определяемые) и на структурные.
    Переменную можно объявлять или не объявлять, и тогда тип ей будет присвоен по умолчанию, или по первой букве име- ни, или по специальному символу объявления типа, которым мо- жет заканчиваться имя. Явно объявить переменную можно как в начале блока, так и в том произвольном месте, где возникла не- обходимость использовать новую переменную.
    Соображения повышения надежности программ рекомен- дуют использовать методику, при которой все переменные объ- являются явно и, как правило, в начале блока. При включении в начало модуля оператора Option Explicit (опция "Явно") предва- рительное объявление переменных становится обязательным.
    При объявлении переменной определяется ее тип и область видимости – область, где имя переменной видимо и, значит, воз- можен доступ к её значению. Переменные можно объявлять на двух уровнях – уровне процедуры и уровне модуля. Для объявле- ния переменных используются операторы Dim, Public, Private и
    Static. Первый можно использовать на обоих уровнях, Public и
    Private – на уровне модуля, Static – только на уровне процедуры.
    Переменные, объявленные на уровне процедуры, называют- ся локальными по отношению к данной процедуре. Их областью видимости является только та процедура, в которой они объявле- ны. Локальные переменные можно объявлять в любом месте процедуры, но до выполняемых операторов, использующих эти переменные.
    Переменные уровня модуля являются глобальными. Они объявляются в разделе Declarations, который есть у каждого мо- дуля. Область видимости глобальных переменных может распро- страняться:
     на все процедуры одного модуля, в котором они объяв- лены; такие глобальные переменные, называемые закрытыми
    (Private), должны быть объявлены на уровне модуля либо опера- тором Private либо оператором Dim;
     на все приложение – все процедуры всех модулей дан- ного приложения, такие глобальные переменные, называемые от- крытыми, должны быть объявлены оператором Public.

    164
    Локальные переменные уровня процедуры могут быть объ- явлены оператором Static, что делает их статическими.
    Для локальных переменных, объявленных таким образом, изменяется механизм хранения их (переменных) в оперативной памяти и время существования соответствует времени с момента первого запуска процедуры/функции, в которой определена ста- тическая переменная, до окончания работы программы. Обычные локальные переменные создаются и инициализируются (им при- сваивается значение) в "своей" процедуре/функции, видимы только в ней и удаляются при завершении этой процеду- ры/функции (память под переменные отводится при входе в про- цедуру/функцию, а при выходе она освобождается). Область ви- димости статической переменной такая же, но время существова- ния иное, так как статическая переменная не удаляется из памяти при завершении процедуры/функции, просто переменная стано- вится временно недоступной. Поэтому при повторном вызове процедуры/функции статические переменные восстанавливают те значения, которые они имели при завершении работы процеду- ры/функции при предыдущем вызове. Статические переменные – это хранители информации между многократными вызовами од- ной и той же процедуры/функции. Чтобы статические перемен- ные имели смысл, необходима первоначальная инициализация переменных – они должны иметь хоть какие-то значения уже при первом вхождении в процедуру/функцию. Вот как VBA инициа- лизирует переменные в момент их объявления:

    0 – для числовых значений;
     пустая строка («») – для строк переменной длины;
     строка, содержащая нули, – для строк фиксированной длины;

    Empty (значение, указывающее на отсутствие инициа- лизации) - для статических переменных типа Variant;
     для массивов каждый элемент инициализируется в со- ответствии с указанными правилами.
    Объявление простых переменных имеет следующий синтак- сис: {Dim | Private | Public | Static }<имя переменной> [ As <имя типа>] [, <имя переменной> [ As <имя типа>]];

    165
    Вначале идет имя оператора, а потом список объявлений переменных, где роль разделителя играет запятая. Объявление связывает имя переменной с ее типом, заданным конструкцией
    As. Когда она опущена, переменная получает тип Variant. Одним оператором Dim можно объявить произвольное число перемен- ных, но конструкция As должна быть указана для каждой из них, иначе переменным без As будет присвоен тип Variant.
    Строковый тип данных
    String
    Строкой называется не только последовательность симво- лов, заключённых в кавычки, но и переменная строкового типа, объявленная с помощью ключевого слова String.
    Строка как переменная может иметь переменную или по- стоянную длину.
    Строка переменной длины характеризуется тем, что зани- маемый ею объём оперативной памяти может меняться в процес- се выполнения программы.
    Строка постоянной длины занимает фиксированный объём оперативной памяти. При её объявлении после ключевого слова
    String ставится значок * (звёздочка) и указывается объём памяти
    (в байтах), выделяемый этой строке.
    Пример:
    Dim A As String
    Dim B As String*15
    A = "Информатика"
    В = "Информатика"
    В примере переменная А – строка переменной длины, пере- менная В – строка постоянной длины. После выполнения опера- тора А = "Информатика" строка А занимает 21 байт, так как раз- мер строки переменной длины равен 10 байт плюс 1 байт на сим- вол. После выполнения оператора В = "Информатика" строка В будет занимать 15 байт, так как объём оперативной памяти, за- нимаемый строкой постоянной длины не зависит от количества содержащихся в ней символов.
    Значение, присваиваемое строке постоянной длины, может содержать количество символов как меньшее указанного в опи- сании, так и большее. В первом случае в конце строки вместо не-

    166 достающих символов автоматически будут добавлены пробелы, а во втором случае лишние символы будут автоматически удалены.
    1   ...   7   8   9   10   11   12   13   14   15


    написать администратору сайта