Материал: posobie_po_informatike_Chast1_Word

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

После заполнения и вывода массива чисел выполняется собственно поиск номера элемента массива с минимальным значением (переменная j min). Предварительно номеру присваивается значение1 (это рабочая гипотеза – первый элемент может иметь минимальное значение). Затем организуется цикл сравнения элементов массива, начиная со второго элемента, с элементом, имеющим минимальное значение. При нахождении элемента, имеющего меньшее значение, номер этого элемента запоминается и дальнейшее сравнение выполняется относительно этого элемента. В итоге переменная j min получает значение номера искомого элемента массива.

В конце программы номер элемента массива, имеющего минимальное значение, и это значение выводится в соответствующие поля формы.

Пример 3. Задача сортировки массива чисел по возрастанию методом перестановки.

Private Sub Поиск_мин_элем( _

ByRef b() As Single, _

ByVal jn As Integer, ByVal jk As Integer, _

ByRef jmin As Integer)

Dim j As Integer

jmin = jn

For j = jn + 1 To jk

If b(j) < b(jmin) Then jmin = j

Next

End Sub

Private Sub Перестановка(ByRef x As Single, _

ByRef y As Single)

Dim z As Single

z = x

x = y

y = z

End Sub

Private Sub CmdРешение_Click()

Dim n As Integer, imin As Integer, _

k As Integer, a(1 To 10) As Single

n = CInt(Text1.Text)

Randomize

For k = 1 To n

a(k) = Int(100 * Rnd)

Next

List1.List = a

For k = 1 To n - 1

Поиск_мин_элем a, k, n, imin

Перестановка a(k), a(imin)

Next

List2.List = a

End Sub

В примере 3 реализовано решение задачи сортировки массива чисел по возрастанию методом перестановки. В этой задаче выделяются две подзадачи: поиск минимального по значению элемента (его номера) и перестановка (обмен значениями) начального элемента в очередном сортируемом подмассиве и элемента с минимальным значением, номер которого определен. Номер начального элемента меняется в цикле от первого до предпоследнего в исходном неупорядоченном массиве.

Сортировка выполняется структурированной программой. В ее структуру входят две вспомогательные подпрограммы с именами «Поиск_мин_элем» и «Перестановка». В них дано описание выполнения выделенных двух подзадач. В подпрограмме «Поиск_мин_элем» формализована суть предыдущего примера (см. файл Пример2.xls).

Особенностью передачи в эту вспомогательную подпрограмму массива чисел (при вызове подпрограммы на выполнение – это фактический параметр с именем «a»), как показала практика, является необходимость описывать в заголовке этой подпрограммы соответствующий формальный параметр с именем «b» как динамический массив (не указывать в скобках диапазон номеров элементов, хотя фактический массив явно задан с фиксированным количеством элементов) и придавать этому параметру “b” статус именно ByRef (передача посредством ссылки на адрес (зону) в памяти, где размещен фактический массив “a”).

В данном примере в главной подпрограмме сортируемый массив объявлен в инструкции Dim состоящим из 10-ти элементов с номерами от 1 до 10. В программе предусмотрен ввод конкретного количества элементов в этих пределах. Далее подобно предыдущему примеру заполняется случайными числами из интервала [0,100] и выводится в списковое поле формы неупорядоченный массив чисел. После этого выполняется цикл сортировки. В этом цикле вызываются на выполнение две названные выше вспомогательные подпрограммы. В итоге получается упорядоченный по возрастанию массив чисел. Он выводится в соответствующее списковое поле формы.

Недостатком использования массива с фиксированным количеством элементов является вывод массива полностью даже в том случае, когда он заполнялся частично (незаполненные элементы имеют значение ноль).

Пример 4. Задача сортировки для динамического массива чисел.

Private Sub Поиск_мин_элем( _

ByRef b() As Single, _

ByVal jn As Integer, ByVal jk As Integer, _

ByRef jmin As Integer)

Dim j As Integer

jmin = jn

For j = jn + 1 To jk

If b(j) < b(jmin) Then jmin = j

Next

End Sub

Private Sub Перестановка(ByRef x As Single, _

ByRef y As Single)

Dim z As Single

z = x

x = y

y = z

End Sub

Private Sub CmdРешение_Click()

Dim n As Integer, imin As Integer, _

k As Integer, a() As Single

n = CInt(Text1.Text)

Randomize

For k = 1 To n

ReDim Preserve a(1 To k)

a(k) = Int(100 * Rnd)

Next

List1.List = a

For k = 1 To n - 1

Поиск_мин_элем a, k, n, imin

Перестановка a(k), a(imin)

Next

List2.List = a

End Sub

В примере 4 реализовано решение той же задачи сортировки, но сортируемый массив чисел формируется динамически, т.е. в него можно включить любое количество элементов, а не ограниченное числом 10, как это принято в предыдущем примере сортировки. Желаемое количество элементов в динамическом массиве задается (вводится с формы проекта). В главной подпрограмме именно на это количество поэлементно в цикле формируется массив (повторно объявляется инструкцией ReDim его размерность и заполняются случайными числами из интервала [0,100] очередные элементы). При выводе неупорядоченного и упорядоченного массивов чисел в списковые поля формы в случае, когда размер этих полей по вертикале недостаточен для отображения всех элементов массивов, в этих полях автоматически создается полоса прокрутки.

Примечание. В программе (в ее главной и вспомогательной подпрограммах) задаваемое количество элементов массива и другие количественные показатели объявлены в инструкциях Dim переменными типа Integer (целый). Переменные такого типа могут принимать значения в пределах интервала [-32768,32767]. Ограничение 32767 надо учитывать при задании конкретного количества элементов сортируемого массива. При сортировке очень большого количества чисел многие из них будут иметь значение менее 0,5. После округления с помощью функции Int эти числа примут значение 0. Множество этих нолей будет выведено в начале списковых полей на форме. Чтобы увидеть дробные числа и со значениями менее 0,5, надо исключить в тексте главной подпрограммы обращение к функции Int.

3. Завершить работу щелчком ЛКМ на пункте «Завершение сеанса <имя группы>».

Содержание отчета

Отчет должен содержать:

  • номер, название и цель работы;

  • краткую теоретическую часть, включающую описание формата оператора цикла со счетчиком и описание назначения этого оператора в целом и его отдельных параметров;

  • результаты выполнения работы согласно заданию, выданному преподавателем, а именно, текст составленных программ с пояснениями к ним, структуру окна формы задачи, описание действий по выполнению программ, результаты выполнения программы;

  • заключение по работе.

Контрольные вопросы

  1. Синтаксис оператора цикла со счетчиком.

  2. Сколько раз будет выполнено тело цикла во вложенном цикле со счетчиком, если внешний цикл повторится 2 раза, а внутренний - 5 раз?

  3. С помощью какого оператора реализуется преждевременный выход из цикла?

Лабораторная работа № 20 Редактор vba. Отладка программ. Пошаговое выполнение программы

Цель работы: получить навыки отладки программ.

Теоретическая часть

Любая программа, написанная даже квалифицированным программистом, содержит ошибки, которые выявляются и исправляются в процессе отладки программы. Кроме того, при работе с отлаженной программой пользователь может создать ситуацию, которая программой не обрабатывается корректно.

Как правило, отладка — это проверка работы и исправление ошибок программистом перед передачей проекта на тестирование.

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

В набор инструментария отладки Visual Basic входят такие основные инструменты, как:

  • панель инструментов Debug (Отладка) с кнопками команд для выполнения отладки приложения;

  • окно Immediate (Непосредственное выполнение), предназначенное для непосредственного ввода команд, требующих немедленного выполнения;

  • окно Watches (Наблюдение), предназначенное для просмотра значений выражений, включенных в список просмотра;

  • окно Locals (Локальные), предназначенное для просмотра значений переменных;

  • редактор кода со встроенными возможностями просмотра переменных, констант, свойств, выражений при отладке приложения в точках останова и пошаговом выполнении приложения;

  • окно Call Stack (Стек вызовов) для просмотра вызванных, но незавершенных процедур.

Панель инструментов Debug активизируется при выборе из меню View (Вид) команды Toolbars (Панели инструментов), а затем значения Debug (Отладка).

На панели инструментов Debug находятся кнопки, обеспечивающие работу по отладке приложения. Назначение этих кнопок описано в таблице 3.6.

Таблица 3.6 .

Кнопки панели инструментов Debug

Кнопка

Название

Назначение

Start/Continue

(Продолжить)

Запускает программу или продолжает ее выполнение после прерывания

Break (Остановка)

Вызывает прерывание программы в необходимом месте (без использования точек останова)

End(Завершение)

Завершает выполнение программы

Toggle Breakpoint

(Установить точку останова)

Устанавливает точку останова на текущей строке кода

Step Into (Шаг с заходом в процедуры)

Осуществляет пошаговое выполнение процедуры, включая также вызываемые ею процедуры

Step Over (Шаг без захода в процедуры)

Осуществляет пошаговое выполнение процедуры без трассировки вызываемых ею процедур

Step Out (Шаг с выходом из процедуры)

Выполняет пошаговое выполнение текущей процедуры до выхода из нее

Locals Window (Окно Locals)

Открывает диалоговое окно Locals для контроля значений переменных

Immediate Window (Окно Immediate)

Открывает окно Immediate для ввода и выполнения команд

Watch Window (Окно Watch)

Открывает диалоговое окно Watches для просмотра выражений, включенных в список наблюдения

Quick Watch

(Быстрый просмотр)

Открывает окно Quick Watch для просмотра выражения и значения, которое оно возвращает в данный момент в точке останова программы или на определенном шаге при пошаговом запуске программы

Call Stack

(Стек вызовов)

Открывает окно Call Stack, в котором представлен список выполняемых процедур

Источник: https://files.student-it.ru/previewfile/281619