public void Инициализация() { колВыполненРейсов = 0; срДальностьПоездкиКм = 0; срДальностьПоездкиОст = 0; коэфИспользВместим = 0; срКолПасВАвтоНаПерегон = 0; максКолПасВАвтоНаПерегон = new ХаракПерегона(0, 0); времяОкончПоследРейса = 0; срДлинаПерегона = 0; срКолПеревезПасВЧас = 0; сумКолПеревезПассаж = 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) { срКолПеревезПасВЧас = сумКолПеревезПассаж / колЧасовСПоложПеревозкой; } }
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 / (КолЧасов * маршВладец.ЧислоТСнаМаршруте)); } }