Алгоритмы и программы Методические указания для подготовительных курсов Ростов-на-Дону
Вид материала | Методические указания |
СодержаниеПример П6. Sub Обмен() Dim |
- Методические указания для подготовительных курсов Ростов-на-Дону, 445.48kb.
- Методические указания для студентов заочной формы обучения Финансового факультета Ростов-на-Дону, 342.26kb.
- Методические указания для студентов заочной формы обучения Финансового факультета Ростов-на-Дону, 168.33kb.
- Методические указания для студентов заочной формы обучения Финансового факультета Ростов-на-Дону, 205.36kb.
- Методические указания курса «культурология» Для студентов биологического факультета, 331.04kb.
- Бюджетное планирование и прогнозирование методические указания для студентов заочной, 174.2kb.
- Методические указания к изучению курса «История зарубежной литературы 19 века» для, 569.78kb.
- Методические указания по выполнению курсовых работ и подготовки к экзамену для студентов, 320.85kb.
- Методические указания по выполнению курсовых работ и подготовки к экзамену для студентов, 359.09kb.
- Методические указания по организации и проведению учебной практики студентов Ростов-на-Дону, 102.61kb.
Next
MsgBox max
End Sub
Аналогично решаются задачи на поиск минимума, нужно только заменить знак неравенства на < и переобозначить переменную (для ясности): вместо max взять, например, min.
Пример П6. Обменять значения двух переменных.
Решение. Пусть имена переменных х и у. Задача состоит в том, чтобы переменная х получила значение переменной у и наоборот: у получил значение переменной х. Типичное неправильное решение задач с обменом значений:
x = y 'неверно!
y = x
В этом случае переменная х получит значение у, но переменная у в присваивании y = x получит уже новое значение х, приобретенное в результате первого оператора x =y. Таким образом, у приобретет свое прежнее значение. Необходимо помнить, что в любых операциях обмена значений переменных требуется посредник – дополнительная переменная для хранения промежуточного результата (старого значения одной из исходных переменных). Пусть такой переменной-посредником будет rab. Тогда правильное решение задачи:
rab = x
x = y
y = rab
Программа целиком:
Sub Обмен()
Dim x As Integer, y As Integer, rab As Integer
x = 10
y = 7
rab = x
x = y
y = rab
MsgBox x
MsgBox y
End Sub
Пример П7. Для каждого числа b из 20 чисел, вводимых с клавиатуры, определить наименьшее неотрицательное целое k такое, что b < 2k.
Решение. Алгоритм составляет цикл из 20 шагов, на каждом из которых: вводится очередное число; проверяется, какую (наименьшую) степень двойки оно не превышает; выводится показатель этой степени. Как получить нужную степень двойки? Пусть число b введено. Начинаем процесс проверки с 20, т.е. b < 20? Если да, процесс окончен, ответ k = 0. Если нет, проверяем 21, т.е. b < 21? Если да, процесс окончен, ответ k = 1. Если нет, проверяем 22, b < 22? И так до тех пор, пока не найдем нужное k. Таким образом, на каждом шаге внешнего цикла (ввод очередного числа) работает внутренний цикл, перечисляющий степени k двойки. Условие выхода из этого внутреннего цикла – число b больше или равно 2k. Программа:
Sub MinK ( )
Dim b As Integer, k As Integer
For i = 1 To 20 'внешний цикл вводит очередное b и печатает результат
b = InputBox(''Введите целое число'')
k = 0 'для каждого b начинаем поиск k с нуля!
While b >= 2 k 'условие цикла на каждом его шаге пересчитывается
k = k + 1
Wend
MsgBox "Для b =" & CStr(b) & " k=" & CStr(k)
Next
End Sub
Здесь операция & склейки строк при выводе текста потребовала преобразования типов CStr из целого в строковый, т.к. она определена для аргументов-строк.
5.2. Задачи с данными-массивами
Пример П8. Ввод и вывод одномерного и двумерного массивов.
Ввод массива фиксированной длины можно осуществить с клавиатуры или, в VBA, также с листа Excel. Для ввода проще всего использовать цикл For с числом шагов, равным длине (количеству элементов) массива. Пусть, например, требуется ввести массив М из 10 целых чисел.
Ввод одномерного массива с клавиатуры:
For i = 1 To 10
М(i) = InputBox(''Введите элемент массива'')
Next
Ввод одномерного массива с листа Excel (массив расположен на листе в диапазоне, например, A1:A10):
For i = 1 To 10
М(i) = Cells(i,1) 'номер строки меняется в цикле, столбец первый (А)
Next
Вывод одномерного массива в VBA нагляднее всего реализовать непосредственно на лист Excel, например, в диапазон B1:B10:
For i = 1 To 10
Cells(i,2) = М(i) 'номер строки меняется в цикле, столбец второй (В)
Next
Двумерные массивы вводятся и выводятся с помощью вложенных циклов: один перебирает строки, другой – столбцы массива. Какой из циклов внешний – неважно, главное – вложенные циклы позволяют перечислить все сочетания номеров строк и столбцов, т.е. учесть все элементы массива. Пусть, например, требуется ввести двумерный массив М размера 57.
Ввод двумерного массива с клавиатуры:
For i = 1 To 5 'перебираем строки
For j = 1 To 7 'перебираем столбцы
М(i,j) = InputBox(''Введите элемент массива'')
Next
Next
Ввод двумерного массива с листа Excel (двумерный массив расположен на листе в диапазоне, например, A1:G5):
For i = 1 To 5 'перебираем строки
For j = 1 To 7 'перебираем столбцы от A до G
М(i,j) = Cells(i,j)
Next
Next
Работает вложенный цикл следующим образом. Счетчик строк i получает очередное значение (здесь вначале это 1), затем полностью выполняется цикл со счетчиком j, т.е. перебираются все элементы i строки. После этого значение счетчика строк увеличивается на единицу (i = i +1) и вновь полностью выполняется цикл по j, перебирающий столбцы двумерного массива. Процедура завершается после перебора последней строки.
Если i и j поменять местами в заголовках циклов, т.е.:
For j = 1 To 7
For i = 1 To 5
A(i, j) = Cells(i, j)
Next