Example #1
0
 public void Инициализация()
 {
     колВыполненРейсов        = 0;
     срДальностьПоездкиКм     = 0;
     срДальностьПоездкиОст    = 0;
     коэфИспользВместим       = 0;
     срКолПасВАвтоНаПерегон   = 0;
     максКолПасВАвтоНаПерегон = new ХаракПерегона(0, 0);
     времяОкончПоследРейса    = 0;
     срДлинаПерегона          = 0;
     срКолПеревезПасВЧас      = 0;
     сумКолПеревезПассаж      = 0;
 }
Example #2
0
        public void  асчетПоказателей(Маршрут[] масМарш, Остановка[] масОст, List <Авто> масАвто, int колЧасРаботы)
        {
            int колЧасовСПоложПеревозкой = 0;
            ПоказателиРаботыМаршрута показРаботыМарш;

            суммЧислоРейсов            = 0;
            колВошедПоВремени          = new int[колЧасРаботы];
            пассажирокмПоВремени       = new double[колЧасРаботы];
            срКолПасВАвтоВЧасПоВремени = new double[колЧасРаботы];
            максКолПасВАвтоПоВремени   = new ХаракПерегона[колЧасРаботы];
            for (int i = 0; i < колЧасРаботы; i++)
            {
                максКолПасВАвтоПоВремени[i] = new ХаракПерегона();
            }

            int колМарш = масМарш.Length;

            for (int i = 0; i < колЧасРаботы; i++)
            {
                for (int j = 0; j < колМарш; j++)
                {
                    показРаботыМарш                = масМарш[j].ПоказателиРаботы;
                    колВошедПоВремени[i]          += показРаботыМарш.КолВошедПоВремени(i);
                    пассажирокмПоВремени[i]       += показРаботыМарш.ПассажирокмПоВремени(i);
                    срКолПасВАвтоВЧасПоВремени[i] += показРаботыМарш.СрКолПасВАвтоВЧасПоВремени(i);
                    //максимальное количество пассажиров в автобусе на 1 перегон по времени
                    if (максКолПасВАвтоПоВремени[i].значение < показРаботыМарш.МаксКолПасВАвтоПоВремени(i).значение)
                    {
                        максКолПасВАвтоПоВремени[i] = показРаботыМарш.МаксКолПасВАвтоПоВремени(i);
                    }
                }
                if (колВошедПоВремени[i] > 0)
                {
                    колЧасовСПоложПеревозкой++;
                }
            }

            //цикл по маршрутам
            Выручка = 0;
            for (int i = 0; i < колМарш; i++)
            {
                показРаботыМарш        = масМарш[i].ПоказателиРаботы;
                суммЧислоРейсов       += показРаботыМарш.колВыполненРейсов;
                сумКолПеревезПассаж   += показРаботыМарш.сумКолПеревезПассаж;
                срДальностьПоездкиКм  += показРаботыМарш.срДальностьПоездкиКм;
                срДальностьПоездкиОст += показРаботыМарш.срДальностьПоездкиОст;
                коэфИспользВместим    += показРаботыМарш.коэфИспользВместим;
                Выручка += показРаботыМарш.Выручка;
            }
            срДальностьПоездкиКм  /= колМарш;
            срДальностьПоездкиОст /= колМарш;
            коэфИспользВместим    /= колМарш;

            //цикл по остановкам
            int[] mascode  = new int[МАКСПассажирообрОстановок + 1];
            int[] mascrit  = new int[МАКСПассажирообрОстановок + 1];
            int[] mascode2 = new int[МАКСПассажирообрОстановок + 1];
            int[] mascrit2 = new int[МАКСПассажирообрОстановок + 1];
            int   t;

            СуммКолНедождПассажиров    = 0;
            СуммКолПересадочПассажиров = 0;
            for (int i = 0; i < масОст.Length; i++)
            {
                суммКолПоявившПассажиров   += масОст[i].показателиРаботы.СуммКолПоявившПассажиров;
                СуммКолНедождПассажиров    += масОст[i].показателиРаботы.СуммКолНедождПассажиров;
                СуммКолПересадочПассажиров += масОст[i].показателиРаботы.СуммКолПересадочПассажиров;
                СуммКолПасОставшНаОст      += масОст[i].показателиРаботы.СуммКолПасОставшНаОст;
                СуммКолОтпрПассажиров      += масОст[i].показателиРаботы.СуммКолОтпрПассажиров;
                //отбор первых пассажирообразующих остановок по отправлено+прибыло пассажирам
                mascode[МАКСПассажирообрОстановок] = i;
                mascrit[МАКСПассажирообрОстановок] = масОст[i].показателиРаботы.СуммКолОтпрПассажиров + масОст[i].показателиРаботы.СуммКолПрибПассажиров;
                for (int j = МАКСПассажирообрОстановок; j > 0; j--)
                {
                    if (mascrit[j] > mascrit[j - 1])
                    {
                        t = mascrit[j]; mascrit[j] = mascrit[j - 1]; mascrit[j - 1] = t;
                        t = mascode[j]; mascode[j] = mascode[j - 1]; mascode[j - 1] = t;
                    }
                    else
                    {
                        break;
                    }
                }
                //отбор первых пассажиронедождавшихся остановок по недождавш пассажирам
                mascode2[МАКСПассажирообрОстановок] = i;
                mascrit2[МАКСПассажирообрОстановок] = масОст[i].показателиРаботы.СуммКолНедождПассажиров;
                for (int j = МАКСПассажирообрОстановок; j > 0; j--)
                {
                    if (mascrit2[j] > mascrit2[j - 1])
                    {
                        t = mascrit2[j]; mascrit2[j] = mascrit2[j - 1]; mascrit2[j - 1] = t;
                        t = mascode2[j]; mascode2[j] = mascode2[j - 1]; mascode2[j - 1] = t;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            //сформировать список пассажирообразующих остановок
            пассажирообрОстановки = new Остановка[МАКСПассажирообрОстановок];
            for (int i = 0; i < МАКСПассажирообрОстановок; i++)
            {
                пассажирообрОстановки[i] = масОст[mascode[i]];
            }
            //сформировать список пассажиронедождавшихся остановок
            пассажироНедождОстановки = new Остановка[МАКСПассажирообрОстановок];
            for (int i = 0; i < МАКСПассажирообрОстановок; i++)
            {
                пассажироНедождОстановки[i] = масОст[mascode2[i]];
            }

            //цикл по авто в пути
            СуммКолПасОставшВАвто   = 0;
            суммЧислоНезавершРейсов = масАвто.Count;
            for (int i = 0; i < масАвто.Count; i++)
            {
                СуммКолПасОставшВАвто += масАвто[i].КолПас;
                сумКолПеревезПассаж   += масАвто[i].показателиРаботы.сумКолПеревезПассаж;
                Выручка += масАвто[i].показателиРаботы.Выручка;
            }
            if (колЧасовСПоложПеревозкой > 0)
            {
                срКолПеревезПасВЧас = сумКолПеревезПассаж / колЧасовСПоложПеревозкой;
            }
        }
Example #3
0
        public void  асчетПоказателей(int колЧасРаботы)
        {
            int i, j, dt;
            int номерЧаса;

            int[] sumDT = new int[колЧасРаботы];
            int   колЧасовСПоложПеревозкой = 0;

            //инициализация массивов
            колВыполненРейсов = маршВладец.архивАвто.Count;
            КолЧасов          = колЧасРаботы;
            КолОстановок      = маршВладец.КоличОстановок;
            колВошедПоВремени = new int[колЧасРаботы];
            if (колВыполненРейсов > 0)
            {
                колВошедПоРейсам = new int[колВыполненРейсов];
            }
            колВошедПоОстановкам       = new int[КолОстановок];
            пассажирокмПоВремени       = new double[колЧасРаботы];
            срКолПасВАвтоВЧасПоВремени = new double[колЧасРаботы];
            срКолПасВАвтоПоПерегонам   = new double[КолОстановок - 1];
            максКолПасВАвтоПоВремени   = new ХаракПерегона[колЧасРаботы];
            for (i = 0; i < колЧасРаботы; i++)
            {
                максКолПасВАвтоПоВремени[i] = new ХаракПерегона();
            }

            if (колВыполненРейсов == 0)
            {
                //нет ни одного авто, нечего расчитывать
                //обнулить массивы????????
                return;
            }

            //*** цикл по авто (рейсам)
            Выручка = 0;
            for (i = 0; i < колВыполненРейсов; i++)
            {
                ПоказателиРаботыАвто показатРаботыАвто = маршВладец.архивАвто[i].показателиРаботы;
                Выручка += показатРаботыАвто.Выручка;
                // количество вошедших по рейсам
                колВошедПоРейсам[i] = показатРаботыАвто.сумКолПеревезПассаж;
                //суммарное количество перевезенных пассажиров
                сумКолПеревезПассаж += показатРаботыАвто.сумКолПеревезПассаж;
                //коэффициент использования вместимости_1
                коэфИспользВместим += показатРаботыАвто.коэфИспользВместим;
                if (МаксКоэфИсполВмесЗа1Рейс < показатРаботыАвто.коэфИспользВместим)
                {
                    МаксКоэфИсполВмесЗа1Рейс = показатРаботыАвто.коэфИспользВместим;
                }
                //время окончания последнего рейса
                if (времяОкончПоследРейса < показатРаботыАвто.времяОкончРейса)
                {
                    времяОкончПоследРейса = показатРаботыАвто.времяОкончРейса;
                }
                //цикл по остановкам
                for (j = 0; j < КолОстановок; j++)
                {
                    //количество вошедших по остановкам
                    колВошедПоОстановкам[j] += показатРаботыАвто.колВошедПоОст[j];
                    //количество вошедших по времени
                    номерЧаса = показатРаботыАвто.времяПриездаНаОст[j] / 60;
                    колВошедПоВремени[номерЧаса] += показатРаботыАвто.колВошедПоОст[j];
                }
                //цикл по перегонам
                for (j = 0; j < КолОстановок - 1; j++)
                {
                    //среднее количество пассажиров в автобусе по перегонам _1
                    срКолПасВАвтоПоПерегонам[j] += показатРаботыАвто.колПасПоПерегонам[j];
                    //среднее количество пассажиров в авто в час по времени_1
                    номерЧаса         = показатРаботыАвто.времяПриездаНаОст[j] / 60;
                    dt                = показатРаботыАвто.времяПриездаНаОст[j + 1] - показатРаботыАвто.времяПриездаНаОст[j];
                    sumDT[номерЧаса] += dt;
                    срКолПасВАвтоВЧасПоВремени[номерЧаса] += показатРаботыАвто.колПасПоПерегонам[j] * dt;
                    //пассажирокилометры по времени
                    пассажирокмПоВремени[номерЧаса] += показатРаботыАвто.колПасПоПерегонам[j] * маршВладец.ДлинаПерегона(j + 1);
                    //максимальное количество пассажиров в автобусе на 1 перегон по времени
                    if (максКолПасВАвтоПоВремени[номерЧаса].значение < показатРаботыАвто.колПасПоПерегонам[j])
                    {
                        максКолПасВАвтоПоВремени[номерЧаса].значение      = показатРаботыАвто.колПасПоПерегонам[j];
                        максКолПасВАвтоПоВремени[номерЧаса].номерПерегона = j;
                    }
                }
            }

            //цикл по перегонам
            for (i = 0; i < КолОстановок - 1; i++)
            {//средняя дальность поездки в остановках_1
                срДальностьПоездкиОст += срКолПасВАвтоПоПерегонам[i];
                //среднее количество пассажиров в автобусе по перегонам _2
                срКолПасВАвтоПоПерегонам[i] /= колВыполненРейсов;
                //среднее количество пассажиров в автобусе на 1 перегон_1
                срКолПасВАвтоНаПерегон += срКолПасВАвтоПоПерегонам[i];
                //средняя длина перегона_1
                срДлинаПерегона += маршВладец.ДлинаПерегона(i + 1);
            }
            //среднее количество пассажиров в автобусе на 1 перегон_2
            срКолПасВАвтоНаПерегон /= (маршВладец.КоличОстановок - 1);
            //средняя дальность поездки в становках_2
            if (сумКолПеревезПассаж > 0)
            {
                срДальностьПоездкиОст /= сумКолПеревезПассаж;
            }
            //средняя длина перегона_2
            срДлинаПерегона /= (маршВладец.КоличОстановок - 1);

            //цикл по времени
            for (i = 0; i < колЧасРаботы; i++)
            { //среднее количество пассажиров в авто в час по времени_2
                if (sumDT[i] > 0)
                {
                    срКолПасВАвтоВЧасПоВремени[i] /= sumDT[i];
                }
                ////максимальное количество пассажиров в автобусе на 1 перегон
                if (максКолПасВАвтоНаПерегон.значение < максКолПасВАвтоПоВремени[i].значение)
                {
                    максКолПасВАвтоНаПерегон.значение      = максКолПасВАвтоПоВремени[i].значение;
                    максКолПасВАвтоНаПерегон.номерПерегона = i;
                }
                //средняя дальность поездки пассажиров в километрах_1
                срДальностьПоездкиКм += пассажирокмПоВремени[i];
                if (колВошедПоВремени[i] > 0)
                {
                    колЧасовСПоложПеревозкой++;
                }
            }
            //средняя дальность поездки пассажиров в километрах_2
            if (сумКолПеревезПассаж > 0)
            {
                срДальностьПоездкиКм /= сумКолПеревезПассаж;
            }
            //коэффициент использования вместимости_2
            коэфИспользВместим /= колВыполненРейсов;
            //средний размер перевозки в час
            if (колЧасовСПоложПеревозкой > 0)
            {
                срКолПеревезПасВЧас = сумКолПеревезПассаж * 1.0 / колЧасовСПоложПеревозкой;
            }
            if (маршВладец.ЧислоТСнаМаршруте > 0)
            {
                срчасКолПеревезПасНа1ТС = сумКолПеревезПассаж / (КолЧасов * маршВладец.ЧислоТСнаМаршруте);
                доходНа1ТСвЧас          = (int)Math.Round(Выручка * 1.0 / (КолЧасов * маршВладец.ЧислоТСнаМаршруте));
            }
        }