Описание входных данных и результат вычислений
Содержание
1. Задание. 6
2. Описание переменных. 7
3. Блок схема. 10
4. Описание алгоритма. 17
5. Листинг программы.. 18
6. Описание входных данных и результат вычислений. 23
7. Список использованной литературы.. 26
Задание
Молокозавод в течение 3 месяцев упаковывал молоко в пакеты емкостью 0,5 литров и 1 литр и поставлял свою продукцию в 5 различных магазинов. Цена на пакет молока устанавливалась в начале каждого месяца и не менялась.
Написать программу на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран: исходные данные в виде таблицы, где указаны наименование магазинов, количество пакетов молока емкостью 0,5 и 1 литр соответственно, ежемесячно поставляемых в каждый магазин, цены на продукцию в текущем месяце;
· общее количество литров молока, поставленных заводом в магазины за все время;
· общее количество пакетов молока, поставленных заводом в магазины в каждом месяце;
· доход завода за 3 месяца за молоко, упакованное в пакеты емкостью 0,5 литров;
· наименование магазина, в который было поставлено наибольшее количество пакетов молока
Описание переменных
Исходные данные находятся на листе «Нач_д» (рис. 1) и содержат следующую информацию:
1) Количество пакетов молока емкостью 0,5 и 1 литр, ежемесячно поставляемых в каждый магазин.
2) Цены на продукцию в текущем месяце.
Результаты работы программы оформляются на листе «Результат» (рис. 2).
Рис.1. Лист с начальными данными
Рис.2. Полученные результаты
В программе переменные описаны следующим образом:
1) kol_paketov(4, 5) - двумерный массив, предназначенный для хранения значений о количестве пакетов молока поставленных в магазины.
Dim kol_paketov(4, 5) As Integer
2) kol_lit(5) - массив, предназначенный для хранения количества литров молока поставленного заводом каждому магазину.
Dim kol_lit(5) As Single
3) obch_kol_litr - переменная для хранения общего количества литров молока поставленного заводом.
Dim obch_kol_litr As Single
4) kol_pak(2) - массив для хранения количество пакетов поставляемых заводом в каждом месяце.
Dim kol_pak(2) As Integer
5) obch_kol_paketov - переменная для хранения общего количества пакетов молока поставленного заводом за 3 месяца.
Dim obch_kol_paketov As Integer
6) kol_pak05 - переменная для хранения количества пакетов по 0,5 л.
Dim kol_pak05 As Integer
7) cena(4, 5) - массив для хранения цен на молоко упакованное в пакеты по 0,5 л.
Dim cena(4, 5) As Single
8) dohod - переменная для хранения дохода завода от проданных за 3 месяца пакетов молока по 0,5 л.
Dim dohod As Single
9) mag_kol_pak(4) - массив для хранения количества пакетов молока поставленных заводом каждому магазину.
Dim mag_kol_pak(4) As Integer
10) name - массив для хранения названий магазинов.
Dim name
11) ind() - массив для хранения индексов массива mag_kol_pak которые хранят нибольшие значения.
Dim ind() As Integer
В программе также были использованы вспомогательные переменные, счетчики циклов, i и j, являющиеся целыми числами. Были также использованы переменные max, col, r-целого типа, для определения количества чисел и максимального числа.
Dim i, j, max, col, r As Integer
Промежуточные переменные c и d –вещественного типа.
Dim c, d As Single
Массивы kol_paketov(4, 5), kol_pak(2), mag_kol_pak(4) и переменные obch_kol_paketov, kol_pak05 имеют целый тип т.к. количество пакетов измеряется в единицах.
Массивы kol_lit(5), cena(4, 5) и переменные obch_kol_litr, dohod имеют вещественный тип, т. к. литры и цена могут иметь как целую так и дробную часть значения.
Блок схема
|
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (продолжение)
Рис.3. Блок-схема (окончание)
Описание алгоритма
Начало программы.
Ввод начальных (нулевых) значений для расчетных величин (количество пакетов молока емкостью 0,5 и 1 литр, ежемесячно поставляемых в каждый магазин и цены на продукцию в текущем месяце).
Открытие листа с начальными данными («Нач_д») и получение этих данных в рабочие переменные (массивы kol_paketov(i, j) и cena(i, j) ).
Находим количество литров молока поставляемого заводом в каждый магазин.
Определяем общее количество литров молока поставляемого заводом, количество пакетов поставляемых заводом в каждом месяце, общее количество пакетов молока поставленных заводом за 3 месяца, доход завода за 3 месяца за молоко, упакованное в пакеты по 0,5 л., кол-во пакетов поставленных каждому магазину.
Для определения этих значений используется одномерные и вложенные циклы, условные переходы, в некоторых случаях и безусловные переходы, встроенная функция листа Excel (Sum) и динамический массив ind.
Заполняем массив name названиями магазинов.
Определяем магазин с наибольшим кол-вом поставленных заводом пакетов молока. Используется алгоритм сравнения, при равенстве двух и более значений (количества пакетов молока), выведены будут оба названия магазина.
Открытие листа с результатами, вывод в его ячейки текстовой информации (названия столбцов, наименования магазинов) и вывод всех найденных значений.
Листинг программы
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
Описание входных данных и результат вычислений
Проверка программы на всех единицах:
Проверка на всех нулях:
Проверка на произвольных данных:
Исходные данные представлены на Рис.№1., решение – на Рис.№2.
Список использованной литературы
1. MS Office XP, 2003 Word, Excel, Access, Outlook, PowerPoint, FrontPage, MS Project/ А. К. Гультяев: Корона-Век, 2006
2. VBA. Практическое программирование/ Туркин Олег: Солон-пресс,2007
3. VBA/ Кузьменко В.Г.: Бином,2008.
4. Измерение, управление и регулирование с помощью макросов VBA в Word и Excel/ Берндт Г.-Й.: КОРОНА-Век, 2008
5. Информатика. Методические указания по выполнению практических работ в компьютерном классе (Access, Internet) / Гришин М.П., Юрасов А.Б. М.: МГИУ, 2003.
6. Информатика. Методическое пособие по выполнению практических работ в компьютерном классе (Word, Excel) / Гришин М.П. М.: МГИУ, 2005.
7. Информатика. Часть 1. Введение в информатику: учебное пособие / Гришин М.П., Иванов М.Н., Носова Т.К., Суворов С.В. М.: МГИУ, 2008.
8. Информатика. Часть 2. Программирование: Учебно-методическое пособие / Иванов М.Н., Суворов С.В. М.: МГИУ. 2006.
9. Моделирование с помощью Microsoft Excel и VBA. Разработка систем поддержки принятия решений/ Кристиан Олбрайт: Вильямс, 2005
10. Профессиональная разработка приложений Excel/ Стивен Буллен, Роб Боуви, Джон Грин: Вильямс, 2005
11. Самоучитель VBA/ Андрей Гарнаев: БХВ-Петербург,2004
12. Самоучитель программирования на VBA в Microsoft Office/В. Д. Хореев: Юниор, 2001
13. Электронные таблицы Microsoft Excel. Проблемы и решения/ Лори Анн Ульрих: Эком, 2002