
4.Описание алгоритма
Начало программы.
После объявления и обнуления необходимых переменных, программа вычисляет и заносит данные о доходе по каждому блюду за каждый месяц в двумернный массив doh_po_blud(12,12) и в таблицу «Результат».
Вычисление производится двумя вложенными циклами: внешний по блюдам, внутренний по месяцам.
Инкриминация переменной k, используется для правильной индексации ячеек таблицы «Начальные данные», так как в таблице исходных данных на каждый месяц отведено по две колонки, в которых указана стоимость и количество проданных блюд.
Далее программа формирует таблицу «Результат».
Вычисление доходов.
Вычисление организованны вложенными циклами: внешний по блюдам, внутренний по месяцам. Вычисление общего дохода за год производится путем суммирования всех ячеек двумерного массива doh_po_blud(12,12), с сохранением результата в переменную obw_doh_za_god, значение которой заносится в таблицу «результат», после выхода из вложенных циклов.
Вычисление дохода по каждому блюду за год путем суммирования каждой строки яйчеек двумерного массива doh_po_blud(12,12) с сохранением результата в переменную doh. При чем после суммирования шестой яйчейки текущей строки, соответствующей доходу за шестой месяц, программа заносит в таблицу «результат» текущее значение дохода по текущему блюду, в соответствующую ячейку. Таким образом получается доход по каждому блюду за полгода.
Вычисление и занесение в таблицу «результат» названия блюда, принесшего наименьший доход производится в тех же вложенных циклах что и вычисление дохода.
Вычисление происходит путем сравнения дополнительной переменной doh1, хранящей текущее наименьшее численное значение дохода по каждому из блюд, и переменной doh, хранящей численное значение дохода по текущему( в соответствии переменной счетчика цикла i) блюду (текущей строке двумерного массива doh_po_blud(12,12)). Далее соответствующее название блюда заносится в таблицу «результат».
Также в программе есть фрагмент кода, отвечающий за очистку листа «результат», и принудительное открытие листа «начальные данные» при запуске файла.
Очистка производится в двух вложенных циклах (внешний по строкам, внутренний по столбцам), путем заполнения используемого программой диапазона ячеек таблицы «результат» пустыми строками.
5.Листинг программы
Sub Кнопка2_Щелчок()
'Объявление необходимых переменных
Dim doh_po_blud(12, 12) As Integer 'Доход по каждому блюду за каждый месяц
Dim obw_doh_za_god As Long 'Доход по всем блюдам за год
Dim doh, doh1 As Long 'Доход по одному блюду за год
Dim k, i, j As Byte 'Вспомогательные переменные и счетчики циклов
'Обнуление переменных
obw_doh_za_god = 0
doh = 0
'Работа с верхней частью таблицы "Начальные данные"
For i = 1 To 12
k = 1
For j = 1 To 6
'Вычисление и занесение данных о доходе по каждому блюду за каждый месяц
'в двумерный массив doh_po_blud(12,12)
doh_po_blud(i, j) = Cells(3 + i, k + j) * Cells(3 + i, k + 1 + j)
'Занесение полученного результата в таблицу "Результат"
Sheets("Результат").Cells(3 + i, 1 + j) = doh_po_blud(i, j)
'Инкриминация переменной k, используемой для правильной индексации
'ячеек таблицы "Начальные данные"
k = k + 1
Next j
Next i
'Работа с нижней частью таблицы "Начальные данные"
For i = 1 To 12
k = 1
For j = 1 To 6
'Вычисление и занесение данных о доходе по каждому блюду за каждый месяц
'в двумерный массив doh_po_blud(12,12)
doh_po_blud(i, j + 6) = Cells(20 + i, k + j) * Cells(20 + i, k + 1 + j)
'Занесение полученного результата в таблицу "Результат"
Sheets("Результат").Cells(3 + i, 7 + j) = doh_po_blud(i, j + 6)
'Инкриминация переменной k, используемой для правильной индексации
'ячеек таблицы "Начальные данные"
k = k + 1
Next j
Next i
'Заполнение названий полей таблицы "Результат"
Sheets("Результат").Select
Sheets("Результат").Cells(3, 1) = "Наименование блюд"
Sheets("Результат").Cells(3, 2) = "Доход за Январь"
Sheets("Результат").Cells(3, 3) = "Доход за Февраль"
Sheets("Результат").Cells(3, 4) = "Доход за Март"
Sheets("Результат").Cells(3, 5) = "Доход за Апрель"
Sheets("Результат").Cells(3, 6) = "Доход за Май"
Sheets("Результат").Cells(3, 7) = "Доход за Июнь"
Sheets("Результат").Cells(3, 8) = "Доход за Июль"
Sheets("Результат").Cells(3, 9) = "Доход за Август"
Sheets("Результат").Cells(3, 10) = "Доход за Сентябрь"
Sheets("Результат").Cells(3, 11) = "Доход за Октябрь"
Sheets("Результат").Cells(3, 12) = "Доход за Ноябрь"
Sheets("Результат").Cells(3, 13) = "Доход за Декабрь"
Sheets("Результат").Cells(3, 14) = "Доход за полгода"
Sheets("Результат").Cells(4, 1) = "Драгон"
Sheets("Результат").Cells(5, 1) = "Унаги бокс - суси"
Sheets("Результат").Cells(6, 1) = "Маруяки сякэ маки"
Sheets("Результат").Cells(7, 1) = "Парадайз рору"
Sheets("Результат").Cells(8, 1) = "Сякэ тидзу рору"
Sheets("Результат").Cells(9, 1) = "О рицу маки"
Sheets("Результат").Cells(10, 1) = "Саамон скин рору"
Sheets("Результат").Cells(11, 1) = "Гейша рору"
Sheets("Результат").Cells(12, 1) = "Ана-куи маки"
Sheets("Результат").Cells(13, 1) = "Якитория"
Sheets("Результат").Cells(14, 1) = "Фурикакэ рору"
Sheets("Результат").Cells(15, 1) = "Цезарь"
Sheets("Результат").Cells(17, 1) = "Итого:"
Sheets("Результат").Cells(18, 1) = "Общий доход за год -"
Sheets("Результат").Cells(19, 1) = "Наименьший доход с -"
'Вычисление дохода
For i = 1 To 12
For j = 1 To 12
'Вычисление общего дохода за год путем циклического суммирования
'всех яйчеек двумерного массива doh_po_blud(12,12)
'с сохранением результата в переменную obw_doh_za_god
obw_doh_za_god = obw_doh_za_god + doh_po_blud(j, i)
'Вычисление дохода по каждому блюду за год путем суммирования
'каждой строки яйчеек двумерного массива doh_po_blud(12,12)
'с сохранением результата в переменную doh
doh = doh + doh_po_blud(i, j)
'Занесение в таблицу "результат" дохода по каждому блюду за полгода
If j = 6 Then
Sheets("Результат").Cells(3 + i, 14) = doh
End If
'Вычисление и занесение в таблицу "результат"
'названия блюда, принесшего наименьший доход.
'Вычисление происходит путем сравнения дополнительной переменной doh1,
'хранящей текущее наименьшее численное значание дохода по каждому из блюд,
'и переменной doh, хранящей числинное значение дохода по текущему
'(в соответствии переменной счетчика цикла i) блюду
'(текущей строке дывумерного массива doh_po_blud(12,12)).
'Далее соответствующее название блюда заносится в таблицу "Результат"
If j = 12 Then
If i = 1 Then
doh1 = doh
Sheets("Результат").Cells(19, 2) = Sheets("Результат").Cells(3 + i, 1)
Else
If doh < doh1 Then
doh1 = doh
Sheets("Результат").Cells(19, 2) = Sheets("Результат").Cells(3 + i, 1)
End If
doh = 0
End If
End If
Next j
Next i
Private Sub Workbook_Open()
'Переключение фокуса на таблицу "Начальные данные"
Sheets("Начальные данные").Select
'Очистка ячеек таблицы "Результат"
For i = 3 To 19
For j = 1 To 14
Sheets("Результат").Cells(i, j) = ""
Next j
Next i
End Sub