Наименование
продукции
|
Всего
по плану за 4 недели
|
Всего
факт. за 4 недели
|
Разница
между факт. и по плану
|
продукт
№1
|
460
|
495
|
35
|
продукт
№2
|
910
|
945
|
35
|
продукт
№3
|
1260
|
1300
|
40
|
продукт
№4
|
1600
|
1635
|
35
|
2210
|
2180
|
-30
|
продукт
№6
|
2460
|
2530
|
70
|
продукт
№7
|
2860
|
2895
|
35
|
продукт
№8
|
3209
|
3244
|
35
|
продукт
№9
|
3625
|
3445
|
-180
|
продукт
№10
|
4060
|
4275
|
215
|
продукт
№11
|
4350
|
4375
|
25
|
продукт
№12
|
4910
|
4985
|
75
|
Данная разница позволяет оценить, как быстро
производится продукция. На Рисунке 3 изображен график, позволяющий пронаблюдать
результативность производства в первом месяце.
Если полученное число положительно значит,
фактически произведено предприятие больше чем было запланировано. Если
отрицательно, значит фактически произвели меньше, чем было необходимо. Что
говорит о низкой скорости производства. Для анализа всего рассматриваемого
промежутка ниже находятся Рисунок 4 и 5, отражающие ситуацию во 2 и 3 месяце
соответственно.
Чтобы рассмотреть задачу со всех сторон
пригодились общие и средние итоги. Для подведения данных итогов удачно подходит
консолидация. Консолидация данных - это процесс объединения данных из разных
источников в виде итоговых значений, размещаемых в диапазоне назначения.
Консолидация данных в MSExcel предлагает нам
различные варианты действий над данными, которые сводятся вместе в одну ячейку
новой таблицы (нового листа). Сумма, количество, среднее, максимум, минимум,
произведение, количество чисел, смещенное отклонение, несмещенное отклонение,
смещенная дипресия, несмещенная дипресия - перечень предлагаемых MSExcel
функций. Для решения поставленной передо мной задачи понадобились только две:
сумма для подведения общих итогов и среднее соответсвенно для подведения
средних итогов. Конечно не стоит забывать, что необходимо использовать
консолидацию со связью. Это необходимо чтобы при изменениях данных в исходных
таблицах менялись и значения в итогах. Таким образом автоматизируется процесс
подведения итогов и вычисления необходимых значений. На Рисунке 6 представлены
общие итоги.
Как видно на Рисунке 6 помимо просуммированных
данных, так же получена сумма произведенного фактически и запланированного по
всем 12 продуктам. Эта сумма произведена с помощью формул подобных этой:
=СУММ(B29;B54;B79;B104;B129;B154;B179;B204;B229;B254;B279;B304)
Данная формула вычисляет количество
запланированной всей запланированной продукции. Для получения оставшихся пяти
значени й достаточно растянуть ячейку. В результате появстся в
соответствующих ячейках подобные формулы. Поскольку если потянуть ячейку вправо
за правый нижний угол в формуле меняется только имя столбца. При использовании
функции СУММ нельзя выделять диапазон, выделяя область таблицы. Потому что при
консолидации создаются дополнительные строки в которых хранятся данные, которые
были просуммированы. Выделяя видимые значения в функции суммируются и строки
которые скрыты.
На Рисунке 6 также вычислены коэффициенты
ритмичности для каждого месяца, а так же среднее значение коэффициента за весь
период. Для нахождения искомого значения для первого месяца первого продукта
используется формула:
=СУММ(ЕСЛИ(C9>=B5;B5;C9);ЕСЛИ(C10>=B6;B6;C10);ЕСЛИ(C11>=B7;B7;C11);ЕСЛИ(C12>=B8;B8;C12))/(СУММ(B5:B8))
В данной формуле производится суммирование
значений по плану и сумирование данных с учетом поставленных условий. Условия
обусловлены формулой вычисления коэффициента ритмичности. Данную формулу нельзя
растянуть на остальные клетки. Поскольку номера строк, которые необходимы для
вычисления значения для следующего продукта находятся не после последнего в
предыдущей продукции а через определенный промежуток.
Формула для вычисления среднего значения
коэффициента ритмичности для продукта №1 выглядит так:
=СРЗНАЧ(I29:K29)
Для остальных средних значений необходимо лишь
поменять номер строки.
На Рисунке 7 показана ритмичность производства
всех продуктов в каждом месяце отдельно. Для наглядности полученные в ходе
вычислений точки соединены линиями.
Следующий лист занят данными, которые отражают
средние итоги, которые, как и общие итоги получены с помощью консолидации
данных. На Рисунке 8 представлены итоги, полученные мною.
В итоговой ведомости собраны все данные
полученные мною в ходе решения поставленной задачи средствами MS Excel. Данный
лист отличается от предыдущих итогов тем, что здесь формулы для вычисления не
нужны. На данном листе показаны все итоги вместе с необходимыми графиками.
Итоговая ведомость необходима для реализации комплексного анализа исходных и
полученных данных. На Рисунке 9 представлена итоговая ведомость.
В данном листе собраны итоги общие и средние, а
так же представлено три диаграммы. На Рисунке 10 изображена диаграмма,
показывающая соотношение количества запланированной продукции и продукции
произведенной фактически.
Рисунок 11 посвящен среднему значению
производимой продукции фактически, что необходимо для подробного анализа
сложившейся ситуации на производстве. На графике можно пронаблюдать изменение
производимой продукции по факту, т.е. динамику производства.
Последний график итоговой ведомости отображает
Изменение коэффициента римичности. Так же на Рисунке 12 есть линия среднего
значения, что позволяет проанализировать на сколько каждый месяц отклоняется от
среднего значения.
В результате решения поставленной задачи
средствами MSExcel получилось автоматизировать процесс расчета коэффициента
ритмичности и сопутствующих значений, которые тоже имеют значение при оценки
ритмичности производства. Имеющиеся графики и диаграммы наглядно показывают
динамику производства.
3. РЕШЕНИЕ ЗАДАЧИ СРЕДСТВАМИ ЯЗЫКА
ПРОГРАММИРОВАНИЯ С++
.1 Общая характеристика языка С++
Язык программирования - формальная знаковая
система, предназначенная для записи компьютерных программ. Язык
программирования определяет набор лексических, синтаксических и семантических
правил, задающих внешний вид программы и действия, которые выполнит исполнитель
(компьютер) под её управлением.
Язык Си представляет собой удачный компромисс
между желанием располагать теми возможностями, которые обычно предоставляют
программисту столь понятные и удобные языки высокого уровня, и стремлением
эффективно использовать особенности компьютера. Кроме набора средств, присущих
современным языкам программирования высокого уровня (структурность,
модульность, определяемые типы данных) в него включены средства для
программирования «почти» на уровне ассемблера (использование указателей,
побитовые операции, операции сдвига). Большой набор операторов позволяет писать
компактные и эффективные программы. Однако, такие мощные средства требуют от
программиста осторожности, аккуратности и хорошего знания языка со всеми его
преимуществами и недостатками.
Язык Си - компилирующего типа. Текст программы
на Си, подготовленный с помощью текстового редактора, для получения объектного
модуля обрабатывается компилятором, причем компиляция выполняется в два
прохода. При первом проходе (претрансляции) обрабатываются строки-директивы,
начинающиеся со знака #, при втором - транслируется текст программы и создается
объектный (машинный) код. Для получения загрузочного (исполняемого) модуля
необходимо отредактировать внешние связи объектного модуля - подсоединить к
нему соответствующие библиотечные модули.
Си - язык программирования, разработанный в
1969-1973 годах сотрудниками BellLabs Кеном Томпсоном и ДеннисомРитчи.
Первоначально был разработан для реализации операционной системы UNIX, но в
следствии, был перенесен на множество других платформ. Благодаря близости по
скорости выполнения программ, написанных на СИ, к языку ассемблера, этот язык
получил широкое применение при создании системного программного обеспечения и
прикладного обеспечения для решения широкого круга задач.
На основе языка программирования С++ были
разработаны 2 визуальные среды программирования в операционной системе Windows:
это VisualC++ и C++ Builder.
В настоящее время имеется большое количество
систем программирования на Си для разных типов компьютеров. Разработано много
библиотек модулей, инструментальных средств разработки и отладки, облегчающих
создание новых программ. Программы на Си обладают высокой мобильностью, без
каких-либо изменений они переносятся, транслируются и выполняются на машинах
различных типов.
В начале программы всегда обозначается
библиотека языка С++, на которой мы будем работать, например
«#include<iostream/h>» (ввод/вывод программы с помощью cin, cout, или
«#include<stdio.h>» (ввод/вывод программы с помощью scanf/printf), или
«include<math/h>» (означает что мы будем использовать математические
действия) () - имя функции (в переводе с английского main - «главная»). Любая
программа, написанная на языке Си, состоит из одной или более «функций»,
являющихся модулями, из которых она собирается. Данная программа состоит из
одной функции main. Круглые скобки указывают именно на то, что main() - имя
функции. Программа, написанная на языке Си всегда начинает выполняться с
функции, называемой main().
Буквы русского алфавита в алфавит С++ не входят,
а могут использоваться в комментариях и строках символов.
Из символов алфавита по правилам синтаксиса
строят различные языковые конструкции. Простейшей из них является идентификатор
(слово)
.2 Решение задачи с использованием языка
программирования С++
В процессе решения данной задачи будем
использовать различные библиотеки, такие как:
- #include<iostream.h - стандартная
библиотека С++, в которой реализована возможность потокового ввода и вывода
данных. (cout - для вывода, cin- для ввода).
- #include<stdio.h> - стандартная
библиотека С++, в которой реализована возможность форматного ввода и вывода
данных. (printf - для вывода, scanf- для ввода).
#include<windows.h>- библиотека, при
помощи которой возможно выводить русский текст на экран, но при этом необходимо
использовать функцию CharToOem.
Также в программе использовалась такая функции
как #defineN12 и #defineM 8 - это необходимо для организации массива данных
размерностью 12 на 8.
Главой функцией любой программы на С++ является
intMain(), с которой и начинается начало запуска самой программы.
Для упрощения задачи, в данной работе были
использованы циклы 2х вариантов:
- for (i=1; i<=N; i++)for (j=0;j<M;j++) -
эта команда использовалась в программе, чтобы не повторялись действия.
- for (i=1; i<80; i++) - эта команда
необходима для реализации возможности организовать занесение массива данных в
таблицу.
.2 Программная реализация алгоритма
Для реализации алгоритма необходимо создать
блок-схему, показывающую основные действия полученной в итоге программы. Работа
главной функции int main( ) и представлена на блок-схеме ниже:
Так же в программе используются пользовательские
функции Vivod(inta[N][M]) и koeff(inta[N][M]). Функция Vivod(inta[N][M]) дает
возможность выводить данные массивы в виде таблицы. Функция koeff(inta[N][M])
позволяет вычислять коэффициенты ритмичности для каждого вида продукции в
конкретном месяце. С каким месяцем будут происходить операции, что зависит от
введенной цифры - id. Для удобства пользователя организуется меню. Функция
Vivod(a[N]M]):
Была создана функция koeff(a[N][M]) для
вычисления коэффициента ритмичности. Блок-схема данной функции представлена
ниже:
В функции koeff(a[N][M]) присутствуют такие же
блоки, что и в предыдущей функции Vivod(a[N][M]). Блок условия в функции
реализует возможность управления необходимыми элементами массива. Первый блок
условия предназначен для отбора четных и нечетных столбцов массива. Второй же
сравнивает два значения, что необходимо для выполнения условия, заданного
условиями задачи.
.3 Тестирование разработанного программного
обеспечения
Для написания программы на языке
программирования С++ была выбрана среда программирования C++ Builder. На основе
вышеописанной блок-схемы была создана программа. Результаты программы
представлены ниже в виде рисунков.
Как было сказано ранее, для удобства было
организовано меню, которое изображено на Рисунке 13.
Дальнейшие действия программы зависят от
выбранного пользователем пункта. В меню так же предусмотрен выход из программы.
Пока не будет введена цифра «4» выйти из программы не возможно. Следовательно,
пользователь имеет возможность просмотреть любой набор результата программы. То
есть возможность увидеть данные и вычисления за любой из месяцев в любом
порядке и количестве.
Пользователь, введя в программе цифру «1» увидит
на экране таблицу с исходными данными и вычисленные коэффициенты ритмичности
каждого продукта. Вводить все исходные значения не целесообразно, поскольку в
сумме три таблицы имеют 216 чисел. Для более автоматизированного получения
исходных значений (массива данных), было использована функция rand(). То есть в
таблицу попадают значения, полученные случайным образом при помощи данной
функции. В своей программе я реализовала возможность этой функции так, что
случайные числа получились в результате первого запуска программы, а при
последующих запусках используются такие же значения. В данной работе
организовывать случайность чисел при каждом запуске не имеет смысла, т.к. целью
является автоматизация расчета коэффициента ритмичности, а не ввод данных для
вычисления его.
На Рисунке 14 представлен результат действий
программы, если пользователь выбрал цифру «1».
Проанализировав полученные значения коэффициента
ритмичности, можно сделать вывод, что производство не ритмично, т.е. в месяц
фактически производится меньше чем необходимо по плану. Рисунок 15 показывает
результаты уже за второй месяц производства продукции.
По вычислениям на Рисунке 15 видно, что ритмично
производство только при выпуске продукта №12. Для полного анализа квартала
необходимо увидеть результаты за 3-й месяц. Соответственно внешнее оформление
остается таким же, как и в предыдущих двух рисунках. В данном случае меняются
только значения элементов массива и коэффициенты ритмичности. Рассмотрение
таблиц и результатов вычислений необходимы для оценки ритмичности производства
за более длительный период, т.е. за 3 месяца (квартал). Поэтому следует
обратить внимание и на третий месяц, результат за этот месяц и представлен на
Рисунке 16
Рассмотрев результаты за три месяца, можно
оценить данное предприятие. А так же сделать вывод, что производство не
ритмично на протяжении всего квартала. За весь промежуток предприятие ритмично
было только в производстве продукта №12 и только во втором месяце. В сумме за
все время предприятие производило меньшее количество продукции, чем было
необходимо для рентабельности. В ходе работы реализовалась возможность
автоматизировать расчет коэффициента ритмичности, что важно для предприятия,
для оценки его ритмичности и рентабельности и получении предприятием
возможности корректировки плана производства для получения прибыльного
использования собственных ресурсов.
Заключение
Целью данного курсовой работы являлась
разработка и реализация алгоритма на языке программирования С++ задачи на тему:
«Программная реализация задачи расчета коэффициента ритмичности продукции»
Ввиду высокой эффективности языком реализации
программного продукта был выбран высокоуровневый язык Си, визуальная среда
программирования C++ Builder.
В курсовой работе были достигнуты некоторые
задачи:
поставленная задача была решена с помощью
программного продукта MSExcel и языка программирования С++, в ходе чего
получился программный продукт для реализации необходимых вычислений
рассмотрен теоритический аспект, необходимый для
выполнения поставленной задачи;
проведен анализ полученных результатов;
автоматизировано вычисление коэффициента
ритмичности
Список использованных источников
Ворожков
А.В. Алгоритмы: построение, анализ и реализация на языке программирования Си. /
Ворожков А.В., Винокуров Н.А.; -М., 2007.-452с.
Джелен
Билл Сводные таблицы в Microsoft Excel. / Джелен Билл, Александер Майкл.; -Пер.
с англ. -М.: ООО "И.Д. Вильямс", 2007. -320 с.
Елизаров,
Ю. Ф. Экономика организаций (предприятий): учебник / Ю. Ф. Елизаров. - Москва:
Экзамен, 2008. - 495 с.
Кондратьева,
М. Н. Экономика предприятия: учебное пособие / М. Н. Кондратьева, Е. В.
Баландина. - Ульяновск: УлГТУ, 2011. - 174 с.
Могилев
А.В. Информатика: Учеб. Пособие для студ. Пед. Вузов / А.В.Могилев, Н.И.Пак,
Е.К.Хеннер; под ред. Е.К.Хеннера. 3-е изд., перераб. И доп. - М.: Издательский
центр «Академия»б 2004. - 848с
Павловская
Т.А. C/C++. Программирование на языке высокого уровня. - CПб.: Питер,
2001-2010. - 461 с.
Подбельский
В.В.Программирование на языке Си: Учеб. Пособие. / Подбельский В.В., Фомин С.С.
; - М.: Финансы и статистика, 2005.-600с.
Рудикова
Л.В. Microsoft Excel для студента. -СПб.: БХВ-Петербург, 2005. -368 с.
Приложение 1. Программа, реализующая расчет
коэффициента ритмичности
#include<windows.h> // подключение
необходимых библиотек
#include <iostream.h>
#include <stdio.h>
#defineN 12 // задание константы N=12
#defineM 8 // задание константы M=8
void vivod(int a[N][M]); //
прототипфункции
Vivodkoeff(int a[N][M]); // прототипфункции
koeffmain(int argc, char* argv[])
{int i, id, j, d[N][M],s[N][M],
a[N][M], c, b; float K[N];
charstr[50], x, y; //объявление типов
переменных
for (i=0;i<N;i++)(j=0;j<M;j++)
{a[i][j]=100+rand()%900; // цикл
получения случайных чисел
d[i][j]=100+rand()%900;[i][j]=100+rand()%900;}(1) //
организацияменю
{cout<<endl;CharToOem("1.
Данныео
1-ммесяце",
str); cout<<str<<endl;<<endl;CharToOem("2. Данныео
2-ммесяце",
str); cout<<str<<endl;
cout<<endl;CharToOem("3. Данныео
3-ьеммесяце",
str); cout<<str<<endl;
cout<<endl;CharToOem("4. Конецработыпрограммы",
str); cout<<str<<endl;
CharToOem(" Выберите
1, 2, 3 или
4: ",str);cout<<str;
cin>>id;(id) // переключатель для
выбора необходимых функций
{case 1: vivod(a); cout<<endl;
koeff(a); cout<<endl; break;
case 2: vivod(d); cout<<endl;
koeff(d); cout<<endl;break;
case 3: vivod(s); koeff(s);
cout<<endl;break;
case 4: return 0;
}
}("pause"); // задержкаэкрана0;
{int i, j, b, c; float K[12]; char
str[50];(i=0;i<N;i++)
{b=0;c=0;
for(j=0;j<M;j++) //
вычислениекоэффициентаритмичности
{if((j%2)!=1) b+=a[i][j];
else(a[i][j]>=a[i][j-1]) c+=a[i][j-1]; else c+=a[i][j];
K[i]=(float)c/b;
}
i++;
CharToOem("Коэффициентритмичности
",str); // печать на экран
cout<<str<<i<<"
";i--;cout<<K[i]<<endl;
}
}vivod(int a[N][M]) //
заглавиефункции
{inti, j; charstr[50], x, y; //
объявление переменных(i=1;i<=80;i++) cout<<"-"; //
цикл для печати линии
printf("|", x);("Наименование",str);cout<<str<<"
";("|%20c", y);("Выпускпродукции",
str);cout<<str;("%21c|",y);("|продукции",str);cout<<str<<"
|";(i=1;i<=57;i++)
cout<<"-";cout<<"|";("|%20c|",x);("%2c",y);CharToOem("1-янеделя",
str);cout<<str;printf("%2c|",y);("%2c",y);CharToOem("2-янеделя",
str);cout<<str;printf("%2c|",y);("%2c",y);CharToOem("3-янеделя",
str);cout<<str;printf("%1c|",y);("%2c",y);CharToOem("4-янеделя",
str);cout<<str;printf("%1c|",y);("|%20c|",x);(i=1;i<=57;i++)
cout<<"-";cout<<"|";("|%20c|",x);("По
|", str);cout<<str;(" Факт.
|", str);cout<<str;("По
|", str);cout<<str;(" Факт.
|", str);cout<<str;("По
|", str);cout<<str;("Факт.
|", str);cout<<str;("По
|", str);cout<<str;("Факт.
|", str);cout<<str;("|%20c|",x);("плану
|", str);cout<<str;<<" |";("плану
|", str);cout<<str;<<" |";("плану
|", str);cout<<str;<<" |";("плану
|", str);cout<<str;<<" |";(i=1;i<=80;i++)
cout<<"-"; // конецпечатишапкитаблицы
for(i=0;i<N;i++) // цикл для
внесения данных в таблицу
{printf("|%5c",x);i++;("Продукт
№", str);cout<<str<<i;if (i<10) printf("%5c|",x);
else("%4c|",x); i--;(j=0;j<M;j++)
{if((j!=1)&&(j!=3))printf("%6d|",a[i][j]);
else printf("%7d|",a[i][j]);
}
}(i=1;i<=80;i++)
cout<<"-";
}