Цикл с конечным числом повторений FOR…NEXT, страница 2

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

Алгоритм решения:

1.  Объявим переменные: Р – произведение чисел; k – количество чисел, удовлетворяющих условию, i – номер строки, в которой находится ячейка.

2.  Переменной Р присваиваем значение , равное 1, чтобы в цикле можно было наращивать произведение. Переменной k присваиваем 0

3.  Проанализируем каждую ячейку в цикле. Значения ячеек, удовлетворяющих условию, добавляем в произведение и подсчитываем.

4.  Если имеются числа, удовлетворяющие условию, находим среднее геометрическое.


Блок-схема:

Программа:

2.3. 

Подпись: Sub Сред_Геом()
Dim P As Long 'произведение
Dim k As Integer 'количество чисел
Dim i As Byte 'номер строки
  P = 1: k = 0
'Проходим по строкам
 For i = 1 To 25
   'если число отрицательное и четное
   If Cells(i, 2).Value < 0 And Cells(i, 2) Mod 2 = 0 Then
        P = P * Cells(i, 2)
        k = k + 1
   End If
 Next i

 If k > 0 Then
    MsgBox "Среднее геометрическое отрицательных и " & Chr(13) _
    & "четных чисел равно " & P / k
   Else: MsgBox "чисел, удовлетворяющих условию нет"
 End If
End Sub

Сортировка чисел

Сортировкой чисел назовем процесс перестановок чисел, в результате которого числа будут расположены по возрастанию или убыванию.

На данный момент существует множество разнообразных видов сортировок, в той или иной степени рациональных. Рациональность метода сортировки определяется временем, которое затрачивается на упорядочение чисел.

Все сортировки, известные на данный момент, являются модификацией или комбинацией трех базовых методов сортировок: сортировки обменом (пузырек), сортировки выбором, сортировки вставками.

Рассмотрим два метода сортировок: обменом и выбором.

2.3.1.  Сортировка методом обмена (пузырьком)

Задача. Отсортировать 15 случайных чисел, расположенных в столбце А, по возрастанию методом обмена.

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

Чтобы полностью отсортировать числа, в самом худшем случае потребуется 15 проходов по столбику чисел.

Алгоритм решения:

1.  Объявим переменные: j – номер числа, с которым будет сравниваться предыдущее число; pr – промежуточная переменная, необходимая для того, чтобы удобней было производить обмен чисел, k – число проходом по столбцу чисел.

2.  Организуем два вложенных цикла FOR.

Внутренний цикл будет отвечать за единичный проход по столбцу, при котором будут сравниваться каждые два рядом расположенные числа. Т.к. сравнение ведем снизу вверх, и число сравнивается с предыдущим, то цикл организуем от 15 до 2 с шагом –1.

Внешний цикл будет подсчитывать число проходов по столбику.

Блок-схема:

Подпись: Sub Bubble_Sort()
 Dim j As Integer 'номер строки
 Dim k As Byte 'количество проходов по столбцу
 Randomize
 
 For k = 1 To 15
  For j = 15 To 2 Step -1
    If Cells(j, 1) < Cells(j - 1, 1) Then
     pr = Cells(j, 1)
     Cells(j, 1) = Cells(j - 1, 1)
     Cells(j - 1, 1) = pr
    End If
   Next j
Next k
    
End Sub

Сортировку можно совершенствовать, если на каждом проходе по столбику чисел следить за тем, делались ли какие-либо перестановки. Если нет, то процесс сортировки можно остановить.

2.3.2.  Сортировка методом выбора.

Задача. Отсортировать 15 случайных чисел, расположенных в первой строке, начиная с ячейки А1, по возрастанию методом выбора.

Это самая интуитивно понятная сортировка.

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

На втором проходе из оставшихся 14 чисел опять выбирается минимальный элемент и ставится на второе место и т.д., т.е. на каждом проходе из оставшихся неупорядоченных чисел выбирается минимальный элемент и переставляется к началу.

Алгоритм решения:

1.  Объявим переменные: min – для хранения минимального на каждом проходе числа; m –номер минимального элемента; j – номер числа, с которым будет сравниваться min; k – счетчик проходов по строке чисел; pr – промежуточная переменная, необходимая для удобства обмена минимального элемента и элемента, стоящего в начале строки.

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

Овал: конец

m=k

 

min=k-ое число

 
Блок-схема: подготовка: k=1 to 14Овал: начало

Блок-схема:

m-ое число=pr

 

k-ое число=min

 

pr=k-ое число

 

m=j

 

нет

 

да

 

min=j-ое число

 
Блок-схема: решение: min>j-ое числоБлок-схема: подготовка: j=k+1 to 15Программа:

Sub Sort_Select()

Dim min As Integer 'переменная для хранения минимума

Dim m As Byte 'индекс минимального числа

Dim k As Byte 'счетчик проходов по строке

Dim j  As Byte 'номер столбца

Dim pr As Integer 'вспомогательная переменная для обмена

Range("A1").Select

For k = 1 To 14 Step 1

'Выбираем начальное значение для минимума

min = Cells(1, k).Value

m = k

'ищем минимум

For j = k + 1 To 15

If min > Cells(1, j).Value Then

min = Cells(1, j).Value

m = j

End If

Next j

‘переставляем минимум к началу строки

pr = Cells(1, k).Value

Cells(1, k).Value = min

Cells(1, m).Value = pr

Next k

End Sub