ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠœΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π»Π°

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

РазрабатываСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π»Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ приходят Π½Π° Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π», Π²ΡΡ‚Π°ΡŽΡ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠ°ΡΡΠΈΡ€ΠΎΠ², Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΡƒΠ½ΠΊΡ‚Π° назначСния, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΡ…одят, Ρ‚Π°ΠΊΠΆΠ΅ производится ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° рСйсов согласно Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ воспроизводит происходящиС события Π² Ρ‚Π΅ΠΌΠΏΠ΅ искусствСнного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя. ПослС ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠœΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π»Π° (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ
  • 2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° прилоТСния
    • 2.1 Класс «ΠœΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»
    • 2.2 ΠŸΡ€ΠΎΡ†Π΅ΡΡ модСлирования
    • 2.3 ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² модСлирования
    • 2.4 Π Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ модСлирования
  • Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ исслСдования систСм являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ модСлирования, Ρ‚. Π΅. способ тСорСтичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΡ€Π°ΠΊΡ‚ичСского дСйствия, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. Π‘ΡƒΡ‚ΡŒ модСлирования Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ-экономичСских систСм ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ экономико-матСматичСских ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ курсовом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ смодСлирована Ρ€Π°Π±ΠΎΡ‚Π° Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π»Π°.

ЦСль Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° — ΠΎΠ²Π»Π°Π΄Π΅Ρ‚ΡŒ практичСскими Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ построСния ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, для Π°Π½Π°Π»ΠΈΠ·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΎΡ†Π΅Π½ΠΊΠΈ послСдствий ΠΈΡ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡ Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

РазрабатываСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π»Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ приходят Π½Π° Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π», Π²ΡΡ‚Π°ΡŽΡ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠ°ΡΡΠΈΡ€ΠΎΠ², Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΡƒΠ½ΠΊΡ‚Π° назначСния, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΡ…одят, Ρ‚Π°ΠΊΠΆΠ΅ производится ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° рСйсов согласно Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ воспроизводит происходящиС события Π² Ρ‚Π΅ΠΌΠΏΠ΅ искусствСнного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя. ПослС ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΠ²ΠΎΠΊΠ·Π°Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ количСство обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², срСднСС врСмя обслуТивания ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ количСство обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², срСднСС врСмя обслуТивания ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ. МодСльноС врСмя продвигаСтся с ΠΏΠΎΡΡ‚оянным шагом. Π’Ρ€Π΅ΠΌΠ΅Π½Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° ΠΈ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² случайных чисСл. ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ вводятся значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ систСмы (врСмя модСлирования, частота ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²).

2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° прилоТСния

2.1 Класс «ΠœΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° гСнСрируСтся врСмя появлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСтся ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Time ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Simulation. Π’ Ρ†ΠΈΠΊΠ»Π΅ модСлирования ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ появлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ссли совпадСниС Π΅ΡΡ‚ΡŒ, гСнСрируСтся врСмя появлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π° Π² ΠΆΡƒΡ€Π½Π°Π» событий записываСтся врСмя появлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€.

Для гСнСрирования Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ появлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ°ΠΊ функция-элСмСнт класса Simulation. Ѐункция-элСмСнт Client_arrival (curr, num) этого класса Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ случайноС Ρ†Π΅Π»ΠΎΠ΅ число Π₯ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° [0, num] с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Random, послС Ρ‡Π΅Π³ΠΎ число ΠΌΠΈΠ½ΡƒΡ‚ (Π₯ + 1) прибавляСтся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ curr. Π’Π΅ΠΌ самым получаСтся врСмя появлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ прСдставлСтся ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса client, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅-элСмСнты:

Π°rrive — врСмя появлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

service_time — врСмя обслуТивания Π½Π° ΠΊΠ°ΡΡΠ΅

departure_timeврСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ рСйса

clientIDΠ½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

destination — мСсто назначСния ПослС появлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² Ρ†ΠΈΠΊΠ»Π΅ модСлирования ΠΈΠ΄Π΅Ρ‚ Π΅Π³ΠΎ инициализация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-элСмСнта класса client, которая устанавливаСт врСмя появлСния, Π½ΠΎΠΌΠ΅Ρ€, врСмя обслуТивания Π½Π° ΠΊΠ°ΡΡΠ΅ ΠΈ ΠΌΠ΅ΡΡ‚ΠΎ назначСния Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Random. ВрСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ устанавливаСтся ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ΅ Π±ΠΈΠ»Π΅Ρ‚Π°. ПослС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ помСщаСтся Π² Π½ΡƒΠΆΠ½ΡƒΡŽ кассу Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΌΠ΅ΡΡ‚Π° назначСния. Π’ ΠΊΠ»Π°ΡΡΠ΅

Simulation хранится список касс, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставлСна ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса ticket_office, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, прСдставлСнноС классом direction, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит список Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ² (класс city), Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π³ΠΎΡ€ΠΎΠ΄Π΅ имССтся список рСйсов (класс Run). Π’Π΅ΠΌ самым Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ… доступных Π² ΠžΠžΠŸ способов ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° — композиция.

ПослС помСщСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ всС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ. Если Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ, вСдСтся поиск Π±ΠΈΠ»Π΅Ρ‚Π° Π½Π° ΡΠ°ΠΌΡ‹ΠΉ Ρ€Π°Π½Π½ΠΈΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ рСйс. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ рСйс ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ 40 ΡˆΡ‚. Если Π±ΠΈΠ»Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π°Π½, Ρ‚ΠΎ Π² ΠΆΡƒΡ€Π½Π°Π» событий записываСтся врСмя ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, мСсто назначСния, Ссли Π½Π΅Ρ‚ — врСмя обслуТивания ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€.

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° модСлирования ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ врСмя оТидания всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡΡ… Π½Π° 1 ΠΌΠΈΠ½ΡƒΡ‚Ρƒ.

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° модСлирования провСряСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ рСйса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ RunDeparture (curr_time, textWritter), Ссли рСйс отправляСтся, Ρ‚ΠΎ Π² ΠΆΡƒΡ€Π½Π°Π» событий производится запись Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, направлСния рСйса ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° пассаТиров.

2.2 ΠŸΡ€ΠΎΡ†Π΅ΡΡ модСлирования

ΠŸΡ€ΠΎΡ†Π΅ΡΡ модСлирования запускаСтся ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ StartSimulation (Time b, Time sim, int num, ProgressBar bar) Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Simulation, Π³Π΄Π΅ b — врСмя Π½Π°Ρ‡Π°Π»Π° модСлирования, sim — врСмя Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ модСлирования, num — частота появлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². ВсС эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅. ΠŸΡ€ΠΈ этом открываСтся Ρ„Π°ΠΉΠ» «test» для рСгистрации событий — ΠΆΡƒΡ€Π½Π°Π» событий. Он ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ систСмы.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, функция StartSimulation (Time b, Time sim, int num, ProgressBar bar) ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

public void StartSimulation (Time b, Time sim, int num, ProgressBar bar)

{

TextWriter textWritter = new StreamWriter («test.txt»);//создаСм ΠΆΡƒΡ€Π½Π°Π» событий

Time f = new Time ();

base_time.CopyTime (b);

simul_time.CopyTime (sim);

f = simul_time — base_time;

double fbar = (double)(f.getHour () * 60 + f. getMin ())/100;//Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Time curr_time = new Time ();//Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя

Time add = new Time ();

ticket_office tmp_off;//ссылка Π½Π° ΠΊΠ°ΡΡΡƒ

client tmp_client = new client ();

client cl_service;

List tmp_list_client;//ссылка Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

int t = 0;

Init_Service ();//инициализация касс ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΠΌ, созданиС Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ², рСйсов

//——————-Ρ†ΠΈΠΊΠ» модСлирования——————//

Client_arrival (base_time, num);//устанавливаСм врСмя прибытия ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

curr_time.CopyTime (base_time);//устанавливаСм Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

for (; curr_time < simul_time; curr_time++)

{

RunDeparture (curr_time, textWritter);//ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° рСйса, Ссли ΠΎΠ½ //Π΅ΡΡ‚ΡŒ

if (next_arrival == curr_time)//Ссли ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚

{

Client_arrival (curr_time, num);//устанавливаСм врСмя //прибытия ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

CountClient++;

//устанавливаСм врСмя прибытия ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

tmp_client.setAll (CountClient, curr_time);

//запись Π² Ρ„Π°ΠΉΠ»

textWritter.WriteLine (curr_time.printTime () + «: ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β„– «

+ Convert. ToString (tmp_client.getClientId ()));

textWritter.WriteLine (««);

AddClientToLine (tmp_client);//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ

}

for (int i = 0; i < service. Count; i++)//провСряСм ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ //ΠΊΠ»ΠΈΠ΅Ρ‚Π½ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ кассС

{

tmp_off = (ticket_office)service.ToArray ().GetValue (i);

tmp_list_client = tmp_off.getLineClient ();

if (tmp_list_client.Count () ≠ 0)//Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ ΠΏΡƒΡΡ‚Π°

{

cl_service = (client)tmp_list_client.ToArray ().GetValue (0);

if (cl_service.getServiceTime ().getHour () == 0 &&

cl_service.getServiceTime ().getMin () == 0)//Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, //обслуТиваСм

{

Service (tmp_off, cl_service, curr_time);

if (cl_service.getDepartureTime ().getHour () ≠ 0

|| cl_service.getDepartureTime ().getHour () ≠ 0)//Ссли Π±ΠΈΠ»Π΅Ρ‚ //ΠΏΡ€ΠΎΠ΄Π°Π½

{

textWritter.WriteLine (curr_time.printTime () + «: ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ β„–» + Convert. ToString (cl_service.getClientId ()));

textWritter.WriteLine («ΠΏΡ€ΠΎΠ΄Π°Π½ Π±ΠΈΠ»Π΅Ρ‚ Π½Π° «+

cl_service.getDestination ());

textWritter.WriteLine («Π²Ρ€Π΅ΠΌΡ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ: «+

cl_service.getDepartureTime ().printTime ());

textWritter.WriteLine (««);

}

else

{

textWritter.WriteLine («ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ β„–» +

Convert.ToString (cl_service.getClientId ()) + «Π±ΠΈΠ»Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΠ΄Π°Π½»);

textWritter.WriteLine (««);

}

tmp_list_client.RemoveAt (0);//удаляСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

}

}

}

SetTimeAll ();//ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ врСмя оТидания всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

//—для полосы прогрСсса модСлирования—//

t++;

if (t == (int)fbar+1)

{

bar.Value += 1;

t = 0;

}

//——————————————————-//

}

bar.Value = 100;

textWritter.Close ();

}

2.3 ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² модСлирования

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ модСлирования ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Statistic (TextBox text) класса Simulation. Π’Ρ‹Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ осущСствляСтся Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ TextBox Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π’ Π½Π°Ρ‡Π°Π»Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ суммарноС количСство обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΌ кассам ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ². Π”Π°Π»Π΅Π΅ пСчатаСтся срСднСС врСмя оТидания ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, функция Statistic (TextBox text) ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

public void Statistic (TextBox text)

{

text.Lines = new string[] { «Π’сСго обслуТСно ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²: «+ Convert. ToString (CountClient) };

ticket_office t;

AverTime ();//вычислСниС срСднСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания ΠΏΠΎ Π²ΡΠ΅ΠΌ кассам

text.AppendText (Environment.NewLine + «Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя оТидания: «+ Average_time.printTime ());

for (int i = 0; i < service. Count; i++)//ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ статистики ΠΏΠΎ ΠΊΠ°ΡΡΠ°ΠΌ

{

t = (ticket_office)service.ToArray ().GetValue (i);

text.AppendText (Environment.NewLine + t. getDirectionName ());

text.AppendText (Environment.NewLine + «ΠΎΠ±ΡΠ»ΡƒΠΆΠ΅Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²: «

+ Convert. ToString (t.getCountClient ()));

text.AppendText (Environment.NewLine + «Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΄Π°Π½ΠΎ: «

+ Convert. ToString (t.getCountTicket ()));

text.AppendText (Environment.NewLine + «Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя оТидания: «

+ t. GetAverageTime ().printTime ());

}

}

ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ имитация врСмя

2.4 Π Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ модСлирования

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠΊΡ€Π°Π½Π΅:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ событий:

6:30 ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° рСйса Π² ΠžΠΌΡΠΊ

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ пассаТиров: 0

6:35: ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ № 1

6:36: ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ № 1 ΠΏΡ€ΠΎΠ΄Π°Π½ Π±ΠΈΠ»Π΅Ρ‚ Π½Π° ΠšΠ°ΠΌΠ΅Π½ΡŒ-Π½Π°-Оби

врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ: 11:30

6:40: ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ № 2

19:40: ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ № 261

19:42: ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ № 261 ΠΏΡ€ΠΎΠ΄Π°Π½ Π±ΠΈΠ»Π΅Ρ‚ Π½Π° ΠšΠ°ΠΌΠ΅Π½ΡŒ-Π½Π°-Оби

врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ: 20:30

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ № 260 Π±ΠΈΠ»Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΠ΄Π°Π½

19:45: ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ № 262

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ № 262 Π±ΠΈΠ»Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΠ΄Π°Π½

19:47: ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ № 263

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

1. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ для студСнтов 2 курса Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ отдСлСния Ρ„Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ направлСния 230 100 «Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°»

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1

Π€Π°ΠΉΠ» «Program.cs»

using System;

using System. IO;

using System.Collections.Generic;

using System. Linq;

using System.Windows.Forms;

using System. Threading;

namespace _1

{

//——-ВрСмя——-//

public class Time

{

private int hour;

private int min;

//конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

public Time ()

{

hour = min = 0;

}

//конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

public Time (int h, int m)

{

hour = (h >= 0 && h < 24)? h: 0;

min = (m >= 0 && m < 60)? m: 0;

}

//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

public void CopyTime (Time t)

{

hour = t. hour;

min = t. min;

}

//установка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

public void setTime (int h, int m)

{

hour = (h >= 0 && h < 24)? h: 0;

min = (m >= 0 && m < 60)? m: 0;

}

//ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

public string printTime ()

{

if (min < 10) return hour + «:0» + min;

else return hour + «:» + min;

}

//———ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΈΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹——-//

//ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

public static Time operator ++(Time t1)

{

t1.min++;

if (t1.min >= 60)

{

t1.min -= 60;

t1.hour++;

}

return t1;

}

//Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

public static Time operator —(Time t1)

{

t1.min—;

if (t1.min < 0)

{

t1.min += 60;

t1.hour—;

}

return t1;

}

//слоТСниС

public static Time operator +(Time t1, Time t2)

{

int h = t1. hour + t2. hour, m = t1. min + t2. min;

if (m >= 60)

{

m -= 60;

h++;

}

if (h > 23)

{

h -= 24;

}

return new Time (h, m);

}

//Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅

public static Time operator -(Time t1, Time t2)

{

int h = t1. hour — t2. hour, m = t1. min — t2. min;

if (m < 0)

{

m += 60;

h—;

}

return new Time (h, m);

}

//Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ†Π΅Π»ΠΎΠ΅ число

public static Time operator /(Time t1, int num)

{

int m, h;

m = (t1.hour * 60 + t1. min) / num;

h = m / 60;

m -= h * 60;

return new Time (h, m);

}

//сравнСниС

public static bool operator ==(Time t1, Time t2)

{

if (t1.hour == t2. hour && t1. min == t2. min) return true;

else return false;

}

public static bool operator ≠(Time t1, Time t2)

{

if (t1.hour ≠ t2. hour && t1. min ≠ t2. min) return true;

else return false;

}

public static bool operator >(Time t1, Time t2)

{

if (t1.hour > t2. hour) return true;

else if (t1.hour < t2. hour) return false;

else if (t1.min > t2. min) return true;

else if (t1.min < t2. min) return false;

else return false;

}

public static bool operator >=(Time t1, Time t2)

public static bool operator <(Time t1, Time t2)

{

if (t1.hour < t2. hour) return true;

else if (t1.hour > t2. hour) return false;

else if (t1.min < t2. min) return true;

else if (t1.min > t2. min) return false;

else return false;

}

public static bool operator <=(Time t1, Time t2)

((t1.hour == t2. hour) && (t1.min <= t2. min))) return true;

else return false;

//——————————————————————————

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ½ΡƒΡ‚, для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ появлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

public void PlusMin (int m)

{

min += m;

if (min >= 60)

{

min -= 60;

hour++;

}

}

public int getMin ()

{

return min;

}

public int getHour ()

{

return hour;

}

}

//—————————————————;

//——-ΠšΠ»ΠΈΠ΅Π½Ρ‚——-//

class client

{

private Time arrive;//врСмя появлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

private Time service_time;//врСмя обслуТивания Π½Π° ΠΊΠ°ΡΡΠ΅

private Time departure_time;//врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ рСйса

private int clientID;//Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

private string destination;//мСсто назначСния

//конструктор

public client ()

{

arrive = new Time ();

service_time = new Time ();

departure_time = new Time ();

clientID = 0;

destination = «» ;

}

//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

public void CopyClient (client t)

{

arrive.CopyTime (t.arrive);

service_time.CopyTime (t.service_time);

departure_time.CopyTime (t.departure_time);

clientID = t. clientID;

destination = t. destination;

}

//врСмя обслуТивания

public Time getServiceTime ()

{

return service_time;

}

//" идСнтификация" ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

public void setAll (int id, Time arr)

{

arrive.CopyTime (arr);

clientID = id;

Random rnd = new Random ();

Random x = new Random ();

int m = 0;

Thread.Sleep (15);

int n = rnd. Next (8) + 1;

switch (n)

{

case 1: destination = «Π’омск»; break;

case 2: destination = «ΠΡΠΈΠ½ΠΎ»; break;

case 3: destination = «Π‘Ρ‚Ρ€Π΅ΠΆΠ΅Π²ΠΎΠΉ»; break;

case 4: destination = «ΠžΠΌΡΠΊ»; break;

case 5: destination = «ΠšΠ°Π»Π°Ρ‡ΠΈΠ½ΡΠΊ»; break;

case 6: destination = «Π’Π°Ρ€Π°»; break;

case 7: destination = «Π‘Π°Ρ€Π½Π°ΡƒΠ»»; break;

case 8: destination = «ΠšΠ°ΠΌΠ΅Π½ΡŒ-Π½Π°-Оби»; break;

case 9: destination = «Π‘ийск»; break;

}

m = rnd. Next (4) + 1;

service_time.setTime (0, m);

}

//установка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ обслуТивания

public void setServiceTime (Time t)

{

service_time.CopyTime (t);

}

//ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания

public void NewServiceTime ()

{

service_time—;

}

//Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

public int getClientId ()

{

return clientID;

}

//мСсто назначСния

public string getDestination ()

{

return destination;

}

// врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ

public Time getDepartureTime ()

{

return departure_time;

}

// врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ

public void setDepartureTime (Time dt)

{

departure_time.CopyTime (dt);

}

}

//—————————————————————

//——-РСйс——-//

class Run

{

private int count_ticket;//количСство ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

private Time departure;//врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ

//конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

public Run ()

{

count_ticket = 0;

departure = new Time ();

}

//конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

public Run (int count, Time dep)

{

count_ticket = count;

departure = new Time ();

departure.CopyTime (dep);

}

//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

public void CopyRun (Run t)

{

count_ticket = t. count_ticket;

departure.CopyTime (t.departure);

}

//инициализация напрвлСния

public void setRun (int count, Time dep)

{

count_ticket = count;

departure.CopyTime (dep);

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ рСйса

public Time getDepartureTime ()

{

return departure;

}

//количСство ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

public int getCountTicket ()

{

return count_ticket;

}

//количСство ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

public int getNumClients ()

{

return (40 — count_ticket);

}

//Π±ΠΈΠ»Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π°Π½

public void setCountTicket ()

{

count_ticket—;

}

}

//————————————————————;

//——-Π“ΠΎΡ€ΠΎΠ΄——-//

class city

{

private string city_name;

private int count_ticket;//количСство ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

private List list_Run;

//конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

public city ()

{

count_ticket = 0;

city_name = «» ;

list_Run = new List ();

}

//конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

public city (string name)

{

city_name = name;

list_Run = new List ();

}

//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

public void CopyCity (city t)

{

Run tmp = new Run ();

city_name = t. city_name;

count_ticket = t. count_ticket;

//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ списка

for (int i = 0; i < t. list_Run.Count (); i++)

{

tmp.CopyRun ((Run)t.list_Run.ToArray ().GetValue (i));

list_Run.Add (tmp);

}

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСйса Π² Π³ΠΎΡ€ΠΎΠ΄

public void AddRun (Run r)

{

Run rr = new Run ();

rr.CopyRun®;

list_Run.Add (rr);

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ссылки Π½Π° ΡΠΏΠΈΡΠΎΠΊ рСйсов

public List getListRun ()

{

return list_Run;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ количСства ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

public string getNameCity ()

{

return city_name;

}

//установка количСства ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

public void setCountTicket ()

{

count_ticket++;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ количСства ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

public int getCountTicket ()

{

return count_ticket;

}

}

//————————————————————————

//——-НаправлСниС——-//

class direction

{

private string direction_name;

private List list_city;//список Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ²

//конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

public direction (string name)

{

direction_name = name;

list_city = new List ();

}

//конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

public direction ()

{

direction_name = «» ;

list_city = new List ();

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΠΎΡ€ΠΎΠ΄Π°

public void AddCity (city c)

{

city n = new city ();

n.CopyCity (c);

list_city.Add (c);

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ссылки Π½Π° ΡΠΏΠΈΡΠΎΠΊ Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ²

public List getListCity ()

{

List ptr = list_city;

return ptr;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ названия направлСния

public string getNameDirection ()

{

return direction_name;

}

//установка названия направлСния

public void setNameDirection (string name)

{

direction_name = name;

}

}

//————————————————————————

//——-Касса——-//

class ticket_office

{

private Time waiting_time;//врСмя оТидания ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

private Time average_time;//срСднСС врСмя оТидания

private direction one;//Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

private int count_client;//количСство обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

private int count_ticket;//количСство ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

private List line;//ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

//конструктор

public ticket_office (string name)

{

count_ticket = 0;

count_client = 0;

waiting_time = new Time (0, 0);

average_time = new Time (0, 0);

one = new direction (name);

line = new List ();

}

public Time GetAverageTime ()

{

return average_time;

}

//ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания Π½Π° 1 ΠΌΠΈΠ½ΡƒΡ‚Ρƒ

public void SetTime ()

{

if (waiting_time.getHour () ≠ 0 || waiting_time.getMin () ≠ 0)

{

waiting_time—;

int n = line. Count ()-1;

client t;

while (n ≠ -1)

{

t = (client)line.ToArray ().GetValue (n);

t.NewServiceTime ();

n—;

}

}

}

//ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

public void setCountClient ()

{

count_client++;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ количСства обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

public int getCountClient ()

{

return count_client;

}

//ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

public void setCountTicket ()

{

count_ticket++;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ количСства ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

public int getCountTicket ()

{

return count_ticket;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ указатСля Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

public List getLineClient ()

{

return line;

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Ρ‚Π°

public void AddToLine (client a)

{

client t = new client ();

t.CopyClient (a);

waiting_time.CopyTime (waiting_time + t. getServiceTime ());

t.setServiceTime (waiting_time);

if (t.getClientId () < 1)

{

average_time.CopyTime (average_time + waiting_time);

}

else

{

average_time.CopyTime ((average_time + waiting_time) / 2);

}

line.Add (t);

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΠΎΡ€ΠΎΠ΄Π° Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

public void InsertCity (city c)

{

one.AddCity (c);

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ названия направлСния

public string getDirectionName ()

{

return one. getNameDirection ();

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ссылки Π½Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

public direction getDirection ()

{

return one;

}

}

//——————————————————————————

class Simulation

{

private Time base_time;//Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя

private Time simul_time;//врСмя симуляции

private Time next_arrival;//врСмя прибытия ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

private int CountClient;//количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

private Time Average_time;//срСднСС врСмя оТидания

private List service;// список касс

//конструктор

public Simulation ()

{

Average_time = new Time ();

next_arrival = new Time ();

base_time = new Time ();

simul_time = new Time ();

CountClient = 0;

service = new List ();

}

//ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ статистики Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅

public void Statistic (TextBox text)

{

text.Lines = new string[] { «Π’сСго обслуТСно ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²: «+ Convert. ToString (CountClient) };

ticket_office t;

AverTime ();//вычислСниС срСднСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания ΠΏΠΎ Π²ΡΠ΅ΠΌ кассам

text.AppendText (Environment.NewLine + «Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя оТидания: «+ Average_time.printTime ());

for (int i = 0; i < service. Count; i++)//ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ статистики ΠΏΠΎ ΠΊΠ°ΡΡΠ°ΠΌ

{

t = (ticket_office)service.ToArray ().GetValue (i);

text.AppendText (Environment.NewLine + t. getDirectionName ());

text.AppendText (Environment.NewLine + «ΠΎΠ±ΡΠ»ΡƒΠΆΠ΅Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²: «

+ Convert. ToString (t.getCountClient ()));

text.AppendText (Environment.NewLine + «Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΄Π°Π½ΠΎ: «

+ Convert. ToString (t.getCountTicket ()));

text.AppendText (Environment.NewLine + «Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя оТидания: «

+ t. GetAverageTime ().printTime ());

}

}

//подсчСт срСднСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ одидания

public void AverTime ()

{

Time temp = new Time (0,0);

ticket_office t;

for (int i = 0; i < service. Count; i++)

{

t = (ticket_office)service.ToArray ().GetValue (i);

temp = temp + t. GetAverageTime ();

}

Average_time = temp / (service.Count);

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

public Time getBaseTime ()

{

return base_time;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

public Time getSimulTime ()

{

return simul_time;

}

//устанока ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

public void setSimulTime (Time sim)

{

simul_time = sim;

}

//Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ количСства обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

public int getCountClient ()

{

return CountClient;

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ кассы с ΡƒΠΆΠ΅ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ

public void AddTicketOffice (string name_direction)

{

ticket_office t = new ticket_office (name_direction);

service.Add (t);

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΠΎΡ€ΠΎΠ΄Π° ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ

public void AddCity (string name_direct, string name_city)

{

city c = new city (name_city);

direction tmp = SearchDirection (name_direct);

tmp.AddCity (c);

}

//поиск направлСния ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡŽ, возвращаСтся ссылка

public direction SearchDirection (string name_direct)

{

ticket_office tmp;

int n = service. Count () — 1;

tmp = (ticket_office)service.ToArray ().GetValue (n);

while (tmp.getDirectionName () ≠ name_direct)

{

tmp = (ticket_office)service.ToArray ().GetValue (n);

n—;

}

return tmp. getDirection ();

}

//поиск Π³ΠΎΡ€ΠΎΠ΄Π° ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡŽ, возвращаСтся ссылка Π½Π° Π³ΠΎΡ€ΠΎΠ΄

//функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для добавлСния рСйса

public city SearchCity (string name_city)

{

city c;

direction t;

ticket_office tmp;

int n = service. Count () — 1;

int k = 0;

while (true)//провСряСм всС кассы, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π³ΠΎΡ€ΠΎΠ΄

{

tmp = (ticket_office)service.ToArray ().GetValue (n);

t = tmp. getDirection ();

k = t. getListCity ().Count () — 1;

c = (city)t.getListCity ().ToArray ().GetValue (k);

while (c.getNameCity () ≠ name_city)

{

if (k == -1) break;

c = (city)t.getListCity ().ToArray ().GetValue (k);

k—;

}

if (c.getNameCity () == name_city) break;

n—;

}

return c;

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ рСйса Π² Π³ΠΎΡ€ΠΎΠ΄

public void AddRun (string name_city, Run r)

{

city c = SearchCity (name_city);

c.AddRun®;

}

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² Π½ΡƒΠΆΠ½ΡƒΡŽ кассу

public void AddClientToLine (client add)

{

city c;

direction t;

ticket_office tmp_off;

client tmp = add;

int n = service. Count () — 1;

int k = 0;

while (true)

{

tmp_off = (ticket_office)service.ToArray ().GetValue (n);

t = tmp_off.getDirection ();

k = t. getListCity ().Count () — 1;

c = (city)t.getListCity ().ToArray ().GetValue (k);

while ((c.getNameCity () ≠ tmp. getDestination ()) && k ≠ -1)

{

c = (city)t.getListCity ().ToArray ().GetValue (k);

k—;

}

if (c.getNameCity () == tmp. getDestination ()) break;

n—;

}

tmp_off.AddToLine (tmp);

}

//функция выяснСния появлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

//Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся срСднСС врСмя ΠΌΠ΅ΠΆΠ΄Ρƒ появлСниСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² (Π² ΠΌΠΈΠ½ΡƒΡ‚Π°Ρ…)

void Client_arrival (Time curr, int num)

{

Random rnd = new Random ();

int t = rnd. Next (num) + 1;

next_arrival.CopyTime (curr);

next_arrival.PlusMin (t);

}

//обслуТиваниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

public void Service (ticket_office off, client _client, Time curr)

{

city t = SearchCity (_client.getDestination ());//ΠΈΡ‰Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π³ΠΎΡ€ΠΎΠ΄

bool yes = false;//ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ° Π±ΠΈΠ»Π΅Ρ‚Π°

Run tmp_r, ttmp_r;

Time tmp_time = new Time ();

List r = t. getListRun ();

ttmp_r = (Run)r.ToArray ().GetValue (0);

Time tmp2;

tmp_time.CopyTime (ttmp_r.getDepartureTime ());

for (int i = 0; i < r. Count; i++)//поиск Π±ΠΈΠ»Π΅Ρ‚Π°

{

tmp_r = (Run)r.ToArray ().GetValue (i);

tmp2 = tmp_r.getDepartureTime ();

if (!yes)

tmp_time.CopyTime (tmp2);

if ((curr < tmp_time) && (tmp_time >= tmp2) && (tmp2 >= curr) && (tmp_r.getCountTicket () ≠ 0))

{

tmp_time.CopyTime (tmp2);

ttmp_r = (Run)r.ToArray ().GetValue (i);

yes = true;

}

}

if (!yes || tmp_time == curr)//Ссли Π½Π΅Ρ‚ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ рСйсов

{

off.setCountClient ();//ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

}

else

{

off.setCountClient ();//ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство обслуТСнных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

off.setCountTicket ();//ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ°ΡΡΠ΅ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ²

t.setCountTicket ();////ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π³ΠΎΡ€ΠΎΠ΄

ttmp_r.setCountTicket ();//ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ количСство ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ рСйс

_client.setDepartureTime (tmp_time);//устанавливаСм врСмя отправлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

}

}

//функция ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ врСмя оТидания всСх ΠΊΠ»ΠΈΠ΅Ρ‚Π½ΠΎΠ² Π½Π° 1 ΠΌΠΈΠ½ΡƒΡ‚Ρƒ

//ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ†ΠΈΠΊΠ»Π΅ модСлирования

public void SetTimeAll ()

{

ticket_office t;

for (int i = 0; i < service. Count; i++)

{

t = (ticket_office)service.ToArray ().GetValue (i);

t.SetTime ();

}

}

//инициализация касс ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΠΌ, созданиС Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ², рСйсов

public void Init_Service ()

{

Time run_time = new Time ();//врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ рСйса

Run run = new Run ();

AddTicketOffice («Π’омская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ»);

AddCity («Π’омская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ», «Π’омск»);

run_time.setTime (10, 0);

run.setRun (40, run_time);

AddRun («Π’омск», run);

run_time.setTime (12, 30);

run.setRun (40, run_time);

AddRun («Π’омск», run);

run_time.setTime (16, 50);

run.setRun (40, run_time);

AddRun («Π’омск», run);

AddCity («Π’омская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ», «ΠΡΠΈΠ½ΠΎ»);

run_time.setTime (9, 30);

run.setRun (40, run_time);

AddRun («ΠΡΠΈΠ½ΠΎ», run);

run_time.setTime (16, 10);

run.setRun (40, run_time);

AddRun («ΠΡΠΈΠ½ΠΎ», run);

run_time.setTime (18, 50);

run.setRun (40, run_time);

AddRun («ΠΡΠΈΠ½ΠΎ», run);

AddCity («Π’омская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ», «Π‘Ρ‚Ρ€Π΅ΠΆΠ΅Π²ΠΎΠΉ»);

run_time.setTime (7, 30);

run.setRun (40, run_time);

AddRun («Π‘Ρ‚Ρ€Π΅ΠΆΠ΅Π²ΠΎΠΉ», run);

run_time.setTime (12, 0);

run.setRun (40, run_time);

AddRun («Π‘Ρ‚Ρ€Π΅ΠΆΠ΅Π²ΠΎΠΉ», run);

run_time.setTime (17, 20);

run.setRun (40, run_time);

AddRun («Π‘Ρ‚Ρ€Π΅ΠΆΠ΅Π²ΠΎΠΉ», run);

AddTicketOffice («ΠžΠΌΡΠΊΠ°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ»);

AddCity («ΠžΠΌΡΠΊΠ°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ», «ΠžΠΌΡΠΊ»);

run_time.setTime (6, 30);

run.setRun (40, run_time);

AddRun («ΠžΠΌΡΠΊ», run);

run_time.setTime (11, 40);

run.setRun (40, run_time);

AddRun («ΠžΠΌΡΠΊ», run);

run_time.setTime (16, 50);

run.setRun (40, run_time);

AddRun («ΠžΠΌΡΠΊ», run);

AddCity («ΠžΠΌΡΠΊΠ°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ», «ΠšΠ°Π»Π°Ρ‡ΠΈΠ½ΡΠΊ»);

run_time.setTime (9, 10);

run.setRun (40, run_time);

AddRun («ΠšΠ°Π»Π°Ρ‡ΠΈΠ½ΡΠΊ», run);

run_time.setTime (10, 50);

run.setRun (40, run_time);

AddRun («ΠšΠ°Π»Π°Ρ‡ΠΈΠ½ΡΠΊ», run);

run_time.setTime (18, 10);

run.setRun (40, run_time);

AddRun («ΠšΠ°Π»Π°Ρ‡ΠΈΠ½ΡΠΊ», run);

AddCity («ΠžΠΌΡΠΊΠ°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ», «Π’Π°Ρ€Π°»);

run_time.setTime (8, 00);

run.setRun (40, run_time);

AddRun («Π’Π°Ρ€Π°», run);

run_time.setTime (12, 00);

run.setRun (40, run_time);

AddRun («Π’Π°Ρ€Π°», run);

run_time.setTime (16, 00);

run.setRun (40, run_time);

AddRun («Π’Π°Ρ€Π°», run);

AddTicketOffice («ΠΠ»Ρ‚айский ΠΊΡ€Π°ΠΉ»);

AddCity («ΠΠ»Ρ‚айский ΠΊΡ€Π°ΠΉ», «Π‘Π°Ρ€Π½Π°ΡƒΠ»»);

run_time.setTime (10, 30);

run.setRun (40, run_time);

AddRun («Π‘Π°Ρ€Π½Π°ΡƒΠ»», run);

run_time.setTime (13, 40);

run.setRun (40, run_time);

AddRun («Π‘Π°Ρ€Π½Π°ΡƒΠ»», run);

run_time.setTime (17, 30);

run.setRun (40, run_time);

AddRun («Π‘Π°Ρ€Π½Π°ΡƒΠ»», run);

AddCity («ΠΠ»Ρ‚айский ΠΊΡ€Π°ΠΉ», «ΠšΠ°ΠΌΠ΅Π½ΡŒ-Π½Π°-Оби»);

run_time.setTime (11, 30);

run.setRun (40, run_time);

AddRun («ΠšΠ°ΠΌΠ΅Π½ΡŒ-Π½Π°-Оби», run);

run_time.setTime (15, 40);

run.setRun (40, run_time);

AddRun («ΠšΠ°ΠΌΠ΅Π½ΡŒ-Π½Π°-Оби», run);

run_time.setTime (20, 30);

run.setRun (40, run_time);

AddRun («ΠšΠ°ΠΌΠ΅Π½ΡŒ-Π½Π°-Оби», run);

AddCity («ΠΠ»Ρ‚айский ΠΊΡ€Π°ΠΉ», «Π‘ийск»);

run_time.setTime (8, 30);

run.setRun (40, run_time);

AddRun («Π‘ийск», run);

run_time.setTime (17, 00);

run.setRun (40, run_time);

AddRun («Π‘ийск», run);

run_time.setTime (21, 50);

run.setRun (40, run_time);

AddRun («Π‘ийск», run);

}

//ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ отправлСния рСйса

public void RunDeparture (Time dep, TextWriter text)

{

ticket_office tmp_off;

List tmp_list_city;

city tmp_city;

List tmp_list_run;

Run tmp_run;

for (int i = 0; i < service. Count; i++)

{

tmp_off = (ticket_office)service.ToArray ().GetValue (i);

tmp_list_city = tmp_off.getDirection ().getListCity ();

for (int j = 0; j < tmp_list_city.Count; j++)

{

tmp_city = (city)tmp_list_city.ToArray ().GetValue (j);

tmp_list_run = tmp_city.getListRun ();

for (int k = 0; k < tmp_list_run.Count; k++)

{

tmp_run = (Run)tmp_list_run.ToArray ().GetValue (k);

if (tmp_run.getDepartureTime () == dep)//Ссли Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя отправляСтся рСйс

{

text.WriteLine (tmp_run.getDepartureTime ().printTime ()

+ «ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° рСйса Π² «+ tmp_city.getNameCity ());

text.WriteLine («ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ пассаТиров: «+

Convert.ToString (tmp_run.getNumClients ()));

text.WriteLine (««);

}

}

}

}

}

//—— ΠœΠžΠ”Π•Π›Π˜Π ΠžΠ’ΠΠΠ˜Π• ——//

public void StartSimulation (Time b, Time sim, int num, ProgressBar bar)

{

TextWriter textWritter = new StreamWriter («test.txt»);//создаСм ΠΆΡƒΡ€Π½Π°Π» событий

Time f = new Time ();

base_time.CopyTime (b);

simul_time.CopyTime (sim);

f = simul_time — base_time;

double fbar = (double)(f.getHour () * 60 + f. getMin ())/100;//Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Time curr_time = new Time ();//Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя

Time add = new Time ();

ticket_office tmp_off;//ссылка Π½Π° ΠΊΠ°ΡΡΡƒ

client tmp_client = new client ();

client cl_service;

List tmp_list_client;//ссылка Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

int t = 0;

Init_Service ();//инициализация касс ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΠΌ, созданиС Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ², рСйсов

//——————-Ρ†ΠΈΠΊΠ» модСлирования——————//

Client_arrival (base_time, num);//устанавливаСм врСмя прибытия ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

curr_time.CopyTime (base_time);//устанавливаСм Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

for (; curr_time < simul_time; curr_time++)

{

RunDeparture (curr_time, textWritter);//ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° рСйса, Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ

if (next_arrival == curr_time)//Ссли ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚

{

Client_arrival (curr_time, num);//устанавливаСм врСмя прибытия ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

CountClient++;

//устанавливаСм врСмя прибытия ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

tmp_client.setAll (CountClient, curr_time);

//запись Π² Ρ„Π°ΠΉΠ»

textWritter.WriteLine (curr_time.printTime () + «: ΠΏΡ€ΠΈΠ±Ρ‹Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β„– «

+ Convert. ToString (tmp_client.getClientId ()));

textWritter.WriteLine (««);

AddClientToLine (tmp_client);//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ

}

for (int i = 0; i < service. Count; i++)//провСряСм ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊΠ»ΠΈΠ΅Ρ‚Π½ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ кассС

{

tmp_off = (ticket_office)service.ToArray ().GetValue (i);

tmp_list_client = tmp_off.getLineClient ();

if (tmp_list_client.Count () ≠ 0)//Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ ΠΏΡƒΡΡ‚Π°

{

cl_service = (client)tmp_list_client.ToArray ().GetValue (0);

if (cl_service.getServiceTime ().getHour () == 0 &&

cl_service.getServiceTime ().getMin () == 0)//Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, обслуТиваСм

{

Service (tmp_off, cl_service, curr_time);

if (cl_service.getDepartureTime ().getHour () ≠ 0

|| cl_service.getDepartureTime ().getHour () ≠ 0)//Ссли Π±ΠΈΠ»Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π°Π½

{

textWritter.WriteLine (curr_time.printTime () + «: ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ β„–» +

Convert.ToString (cl_service.getClientId ()));

textWritter.WriteLine («ΠΏΡ€ΠΎΠ΄Π°Π½ Π±ΠΈΠ»Π΅Ρ‚ Π½Π° «+

cl_service.getDestination ());

textWritter.WriteLine («Π²Ρ€Π΅ΠΌΡ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ: «+

cl_service.getDepartureTime ().printTime ());

textWritter.WriteLine (««);

}

else

{

textWritter.WriteLine («ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ β„–» +

Convert.ToString (cl_service.getClientId ()) + «Π±ΠΈΠ»Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΠ΄Π°Π½»);

textWritter.WriteLine (««);

}

tmp_list_client.RemoveAt (0);//удаляСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

}

}

}

SetTimeAll ();//ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ врСмя оТидания всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

//—для полосы прогрСсса модСлирования—//

t++;

if (t == (int)fbar+1)

{

bar.Value += 1;

t = 0;

}

//——————————————————-//

}

bar.Value = 100;

textWritter.Close ();

}

}

static class Program

{

/// Главная Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° для прилоТСния.

[STAThread]

static void Main ()

{

Application.EnableVisualStyles ();

Application.SetCompatibleTextRenderingDefault (false);

Application.Run (new Form1());

}

}

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2

Π€Π°ΠΉΠ» «Form1.cs»

using System;

using System.Collections.Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System.Windows.Forms;

using System. Diagnostics;

namespace _1

{

public partial class Form1: Form

{

Simulation A;

Time start;

Time end;

public Form1()

{

InitializeComponent ();

}

private void Form1_Load (object sender, EventArgs e)

{

}

private void textBox1_TextChanged (object sender, EventArgs e)

{

}

private void button1_Click (object sender, EventArgs e)

{

A = new Simulation ();

start = new Time (Convert.ToInt32(StartTimeHours.Value), Convert. ToInt32(StartTimeMin.Value));

end = new Time (Convert.ToInt32(EndTimeHours.Value), Convert. ToInt32(EndTimeMin.Value));

int n = Convert. ToInt32(num.Value);

progressBar1.Value = 0;

if (start >= end) MessageBox. Show («ΠΠ΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄»);

else

{

A.StartSimulation (start, end, n, progressBar1);

A.Statistic (textBox1);

}

}

private void button2_Click (object sender, EventArgs e)

{

Close ();

}

private void button3_Click (object sender, EventArgs e)

{

Process p1 = new Process ();

p1.StartInfo.UseShellExecute = true;

p1.StartInfo.RedirectStandardOutput = false;

p1.StartInfo.FileName = «test.txt» ;

p1.Start ();

p1.WaitForExit ();

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ