public Авто() { показателиРаботы = new ПоказателиРаботыАвто(); }
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 / (КолЧасов * маршВладец.ЧислоТСнаМаршруте)); } }