Задания
Версия для печати и копирования в MS Word
Тип 22 № 58530
i

В ком­пью­тер­ной си­сте­ме не­об­хо­ди­мо вы­пол­нить не­ко­то­рое ко­ли­че­ство вы­чис­ли­тель­ных про­цес­сов, ко­то­рые могут вы­пол­нять­ся па­рал­лель­но или по­сле­до­ва­тель­но. Для за­пус­ка не­ко­то­рых про­цес­сов не­об­хо­ди­мы дан­ные, ко­то­рые по­лу­ча­ют­ся как ре­зуль­та­ты вы­пол­не­ния од­но­го или двух дру­гих про­цес­сов  — по­став­щи­ков дан­ных. Все не­за­ви­си­мые про­цес­сы (не име­ю­щие по­став­щи­ков дан­ных) за­пус­ка­ют­ся в на­чаль­ный мо­мент вре­ме­ни. Если за­ви­си­мый про­цесс по­лу­ча­ет дан­ные от од­но­го или не­сколь­ких дру­гих про­цес­сов (по­став­щи­ков дан­ных), то вы­пол­не­ние за­ви­си­мо­го про­цес­са на­чи­на­ет­ся сразу же после за­вер­ше­ния по­след­не­го из про­цес­сов-⁠по­став­щи­ков. Ко­ли­че­ство од­но­вре­мен­но вы­пол­ня­е­мых про­цес­сов может быть любым, дли­тель­ность про­цес­са не за­ви­сит от дру­гих па­рал­лель­но вы­пол­ня­е­мых про­цес­сов.

В таб­ли­це пред­став­ле­ны иден­ти­фи­ка­тор (ID) каж­до­го про­цес­са, его дли­тель­ность и ID по­став­щи­ков дан­ных для за­ви­си­мых про­цес­сов.

Опре­де­ли­те ко­ли­че­ство про­цес­сов, вы­пол­не­ние ко­то­рых начнётся не ранее, чем через 100 мс после за­пус­ка пер­во­го про­цес­са.

Вы­пол­ни­те за­да­ния, ис­поль­зуя дан­ные из файла ниже:

За­да­ние 22

Спрятать решение

Ре­ше­ние.

Вы­пол­ним сор­ти­ров­ку дан­ных по столб­цу С.

Надо раз­де­лить дан­ные в столб­це «ID по­став­щи­ков дан­ных» для тех про­цес­сов, где есть за­ви­си­мость от двух про­цес­сов. Для этого вы­де­лим стол­бец С, далее меню «Дан­ные  — Текст» по столб­цам. В меню ма­сте­ра раз­де­ле­ния тек­ста по столб­цам по­сле­до­ва­тель­но вы­бе­рем «Фор­мат дан­ных с раз­де­ли­те­ля­ми», далее «Сим­вол раз­де­ли­тель: точка с за­пя­той». Фор­мат дан­ных столб­ца «Общий».

 

В столб­це G будем счи­тать общее время вы­пол­не­ния про­цес­са. Для всех ячеек, у ко­то­рых ячей­ка в столб­це С равна нулю, это зна­че­ние будет равно зна­че­нию в ячей­ке столб­ца В. За­пи­шем в ячей­ку G2 фор­му­лу =B2 и ско­пи­ру­ем её на диа­па­зон G2:G40.

По­лу­ча­ем таб­ли­цу:

 

ABC
1ID про­цес­саВремя вы­пол­не­ния про­цес­са (мс)ID по­став­щи­ков дан­ных
21006823023
31009527027
41015867067
51039717017
61046528028
71053338038
810646202
91093475075
101105414014
111143390090
121154954054
131188597097
1412003303
1512071909
161221598098
171225438038
181226243043

 

В ячей­ку E41 за­пи­шем фор­му­лу =ВПР(C41;A:G;7;0) и ско­пи­ру­ем ее на диа­па­зон E41:E101. Дан­ная фор­му­ла вы­ве­дет время про­цес­са, от ко­то­ро­го за­ви­сит те­ку­щий. В ячей­ку G41 за­пи­шем фор­му­лу =E41+B41, чтобы по­счи­тать общее время вы­пол­не­ния про­цес­са. Ско­пи­ру­ем фор­му­лу на диа­па­зон G41:G77.

По­лу­ча­ем таб­ли­цу:

 

381471017017
3914791820   82
401487646046
411010958100682381
4212031381006823    61
4314308891006823112
441055914100952741
4510894221009527   49
461136656100952783
4710324711010981152
48130668410255084
491082311103971728
501296218104652846
51125524810486048
5211794621055338100
53132522105533840
54113075510746055
55116444810746048
5610951311093475106
57112299410951106200
58117414311025043

 

В ячей­ку F78 за­пи­шем фор­му­лу =ВПР(D78;A:G;7;0) и ско­пи­ру­ем ее на диа­па­зон F78:F101. Дан­ная фор­му­ла вы­ве­дет время вто­ро­го про­цес­са, от ко­то­ро­го за­ви­сит те­ку­щий. В ячей­ку G78 за­пи­шем фор­му­лу =МАКС(E78:F78)+B78, чтобы по­счи­тать общее время вы­пол­не­ния про­цес­са. Ско­пи­ру­ем фор­му­лу на диа­па­зон G78:G101.

По­лу­ча­ем таб­ли­цу:

 

7715211411459481122
7810746321006810095232759
79110259310095108942749142
801025551010910158816786
81104861510109102558186101
821117661010910553813887
831121811101091114881143154
841114811048611025101142143
851209932107461114859143175
861257024109341174175185209
87128385110251188514297147
881270844110541223614167211
8911521571122911307200114257
90124363112291236720074203
91133774611433133519068136
921280081164412116107180188
9313885861174112116185180271
94139008612071129679183269
951502357121161325618019237

 

В столб­це H будем вы­пи­сы­вать время на­ча­ла про­цес­са, для этого в ячей­ку H2 вве­дем фор­му­лу =G2-B2 и ско­пи­ру­ем ее на диа­па­зон H2:H101. Окон­ча­тель­но, вос­поль­зо­вав­шись фор­му­лой =СЧЁТЕСЛИ(H:H;">100"), по­лу­чим ответ  — 30.

 

Ответ: 30.

 

При­ве­дем ре­ше­ние на языке Python.

f = list(map(lambda x: list(map(int, x.replace(';',' ').split())), open('22.txt').readlines()))

sl = {x[0]: x[1:] for x in f}

y = lambda x: sl[x][0] + max(y(i) for i in sl[x][1:]) if sl[x][-1] else sl[x][0]

print(len([1 for i in sl if y(i) - sl[i][0] >= 100]))

 

При­ме­ча­ние.

При­ве­ден­ный файл тре­бу­ет­ся со­хра­нить в фор­ма­те txt и по­ме­стить в ка­та­лог с про­грам­мой.