3. Блок схема
Рис.3. Блок-схема
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (окончание)
4. Описание алгоритма
Начало программы.
Ввод начальных (нулевых) значений для расчетных величин (количество пакетов молока емкостью 0,5 и 1 литр, ежемесячно поставляемых в каждый магазин и цены на продукцию в текущем месяце).
Открытие листа с начальными данными («Нач_д») и получение этих данных в рабочие переменные (массивы kol_paketov(i, j) и cena(i, j) ).
Находим количество литров молока поставляемого заводом в каждый магазин.
Определяем общее количество литров молока поставляемого заводом, количество пакетов поставляемых заводом в каждом месяце, общее количество пакетов молока поставленных заводом за 3 месяца, доход завода за 3 месяца за молоко, упакованное в пакеты по 0,5 л., кол-во пакетов поставленных каждому магазину.
Для определения этих значений используется одномерные и вложенные циклы, условные переходы, в некоторых случаях и безусловные переходы, встроенная функция листа Excel (Sum) и динамический массив ind.
Заполняем массив name названиями магазинов.
Определяем магазин с наибольшим кол-вом поставленных заводом пакетов молока. Используется алгоритм сравнения, при равенстве двух и более значений (количества пакетов молока), выведены будут оба названия магазина.
Открытие листа с результатами, вывод в его ячейки текстовой информации (названия столбцов, наименования магазинов) и вывод всех найденных значений.
5. Листинг программы
Option Explicit
Private Sub CB1_Click()
'массив для хранения количества пакетов поставленных в магазины
Dim kol_paketov(4, 5) As Integer
'массив для хранения кол-ва литров молока поставленного каждому магазину(1-5)
'c и d -переменные для хранения промежуточных значений
Dim kol_lit(5), c, d As Single
'переменная для хранения общего количества литров молока поставляемого заводом
Dim obch_kol_litr As Single
'массив для хранения количество пакетов поставляемых заводом в каждом месяце
Dim kol_pak(2) As Integer
'переменная для хранения общего количества пакетов молока поставленного заводом за 3 месяца
Dim obch_kol_paketov As Integer
'переменная для хранения кол-ва пакетов по 0,5 л
Dim kol_pak05 As Integer
'массив для хранения цен на молоко упакованное в пакеты по 0,5 л
Dim cena(4, 5) As Single
'переменная для хранения дохода завода от проданных за 3 месяца пакетов молока по 0,5 л
Dim dohod As Single
'массив для хранения кол-ва пакетов поставленных заводом каждому магазину
Dim mag_kol_pak(4) As Integer
'массив для хранения названий магазинов
Dim name
'переменные i,j для организации циклов, max-макс. значение пакетов поставленных в магазин и промеж. переменные-col и r
Dim i, j, max, col, r As Integer
'массив для хранения индексов массива mag_kol_pak которые хранят наибольшие значения
Dim ind() As Integer
'обнуление ячеек предназначенных для вывода наименования магазина(ов) с максимальным значением
For i = 0 To 4
Worksheets(2).Cells(13 + i, 2).Clear
Next i
'считывание начальных данных
Sheets("Нач_д").Select
'считывание кол-ва поставляемых пакетов в матрицу
For i = 0 To 4
For j = 0 To 5
kol_paketov(i, j) = Worksheets(1).Cells(i + 4, j + 2)
Next j
Next i
'находим количество литров молока поставляемого заводом в (1-5) магазины
For i = 0 To 4
For j = 0 To 5 Step 2
c = kol_paketov(i, j) * 0.5 + kol_paketov(i, j + 1) * 1
d = d + c
Next j
kol_lit(i) = d
c = 0
d = 0
Next i
'определяем общее количество литров молока поставляемого заводом
obch_kol_litr = WorksheetFunction.Sum(kol_lit)
'определяем количество пакетов поставляемых заводом в каждом месяце
c = 0
For j = 0 To 5
For i = 0 To 4
c = c + kol_paketov(i, j)
Next i
If (j = 1) Then
kol_pak(0) = c
c = 0
End If
If (j = 3) Then
kol_pak(1) = c
c = 0
End If
If (j = 5) Then
kol_pak(2) = c
c = 0
End If
Next j
'определение общего количества пакетов молока поставленных заводом за 3 месяца
obch_kol_paketov = WorksheetFunction.Sum(kol_pak)
'определение дохода завода за 3 месяца, за молоко упакованное в пакеты по 0,5 л
'кладём значения цен в массив cena
For i = 0 To 4
For j = 0 To 5
cena(i, j) = Worksheets(1).Cells(i + 4, j + 8)
Next j
Next i
'перемножаем количество пакетов по 0,5 л определённого магазина и месяца с соответствующей ценой на это молоко
For i = 0 To 4
For j = 0 To 5 Step 2
dohod = dohod + kol_paketov(i, j) * cena(i, j)
Next j
Next i
'определение кол-ва пакетов поставленных каждому магазину(1-5)
For i = 0 To 4
For j = 0 To 5
mag_kol_pak(i) = mag_kol_pak(i) + kol_paketov(i, j)
Next j
Next i
'заполнение массива name названиями магазинов
name = Array("Пятёрочка", "Перекрёсток", "Копейка", "Каравай", "Никольский")
'определяем магазин с наибольшим кол-вом поставленных пакетов молока
max = mag_kol_pak(0)
For i = 0 To 4
If (max < mag_kol_pak(i)) Then
max = mag_kol_pak(i)
End If
Next i
'подсчёт кол-ва магазинов с максимальным кол-вом пакетов
col = 0
For i = 0 To 4
If (max = mag_kol_pak(i)) Then col = col + 1
Next i
'определяем размерность массива
ReDim ind(col - 1)
'определяем индексы массива с максимальными значениями
c = 0
For i = 0 To 4
If ((max = mag_kol_pak(i))) Then
ind(c) = i
c = c + 1
End If
Next i
'определение магазина в который было поставлено наибольшее кол-во пакетов
c = 0
r = 0
For i = 0 To 4
If (ind(c) = i) Then
Worksheets(2).Cells(12 + r, 2) = name(i)
r = r + 1
c = c + 1
If (col = c) Then GoTo m2
End If
Next i
m2: Sheets("Результат").Select
'вывод наименования магазинов
For i = 0 To 4
Worksheets(2).Cells(13 + i, 10) = name(i)
Next i
'вывод кол-ва поставленных пакетов в каждый магазин
For i = 0 To 4
Worksheets(2).Cells(13 + i, 11) = mag_kol_pak(i)
Next i
'на листе "Результат" создаются ячейки с определенными названиями
Worksheets(2).Cells(3, 1) = "Наименование магазина"
Worksheets(2).Cells(4, 1) = "Пятёрочка"
Worksheets(2).Cells(5, 1) = "Перекрёсток"
Worksheets(2).Cells(6, 1) = "Копейка"
Worksheets(2).Cells(7, 1) = "Каравай"
Worksheets(2).Cells(8, 1) = "Никольский"
Worksheets(2).Cells(1, 3) = "Количество поставляемых пакетов молока"
Worksheets(2).Cells(2, 2) = "1-ый месяц"
Worksheets(2).Cells(2, 4) = "2-ой месяц"
Worksheets(2).Cells(2, 6) = "3-ий месяц"
Worksheets(2).Cells(3, 2) = "0,5 л"
Worksheets(2).Cells(3, 3) = "1 л"
Worksheets(2).Cells(3, 4) = "0,5 л"
Worksheets(2).Cells(3, 5) = "1 л"
Worksheets(2).Cells(3, 6) = "0,5 л"
Worksheets(2).Cells(3, 7) = "1 л"
Worksheets(2).Cells(1, 8) = "Цена на продукцию в каждом месяце"
Worksheets(2).Cells(2, 8) = "1-ый месяц"
Worksheets(2).Cells(2, 10) = "2-ой месяц"
Worksheets(2).Cells(2, 12) = "3-ий месяц"
Worksheets(2).Cells(3, 8) = "0,5 л"
Worksheets(2).Cells(3, 9) = "1 л"
Worksheets(2).Cells(3, 10) = "0,5 л"
Worksheets(2).Cells(3, 11) = "1 л"
Worksheets(2).Cells(3, 12) = "0,5 л"
Worksheets(2).Cells(3, 13) = "1 л"
Worksheets(2).Cells(9, 1) = "Количество поставленных пакетов молока в месяц:"
Worksheets(2).Cells(10, 1) = "Общее количество пакетов:"
Worksheets(2).Cells(3, 14) = "Объём поставленного молока"
Worksheets(2).Cells(9, 11) = "Итого общее кол-во литров:"
Worksheets(2).Cells(11, 1) = "Доход завода за 3 месяца за молоко в 0,5 пакетах:"
Worksheets(2).Cells(12, 1) = "Магазин(ы) с максимальным кол-вом пакетов молока:"
Worksheets(2).Cells(12, 10) = "Наименование"
Worksheets(2).Cells(12, 11) = "Кол-во поставленных пакетов"
'заполняем созданную таблицу значениями
'кол-вом пакетов
For i = 0 To 4
For j = 0 To 5
Worksheets(2).Cells(i + 4, j + 2) = kol_paketov(i, j)
Next j
Next i
'ценами на пакеты
For i = 0 To 4
For j = 0 To 5
Worksheets(2).Cells(i + 4, j + 8) = cena(i, j)
Next j
Next i
'вывод на лист "Результат" рассчитанных данных
c = 2
For i = 0 To 2
Worksheets(2).Cells(9, i + c) = kol_pak(i)
c = c + 1
Next i
'вывод общего количества пакетов
Worksheets(2).Cells(10, 2) = obch_kol_paketov
'вывод количества литров поставленных заводом каждому магазину
For i = 0 To 4
Worksheets(2).Cells(i + 4, 14) = kol_lit(i)
Next i
'вывод общего количества литров поставленных заводом
Worksheets(2).Cells(9, 14) = obch_kol_litr
'вывод общего дохода завода за 0,5 пакеты
Worksheets(2).Cells(11, 2) = dohod
End Sub
