Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ ΡΡΠ΅Π΄Ρ WWW
Π ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅Ρ Netscape Fast Track Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° NSAPI. ΠΠΎΡ ΠΎΠΆΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈ Π² ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Microsoft (IIS — Internet Information Server ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΠΉ Web-ΡΠ΅ΡΠ²Π΅Ρ) — ISAPI. Π‘ΠΌΡΡΠ» ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ (Π² Π²ΠΈΠ΄Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ) Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ CGI, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ ΡΡΠ΅Π΄Ρ WWW (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² Internet: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ (ΡΠ°ΡΡΠΎ ΡΡΠΈ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡΡΡΡ). ΠΠ±Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ. ΠΡΠ½ΠΎΠ²Π½ΡΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΠ°ΡΡΡ.
Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ·ΡΠΊΠΎΠ² Java, JavaScript ΠΈΠ»ΠΈ Visual Basic (ActiveX). ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ Internet Explorer ΡΠΈΡΠΌΡ Microsoft. JavaScript Π² Π²Π΅ΡΡΠΈΠΈ 1.2 Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Communicator ΡΠΈΡΠΌΡ Netscape (Π²Π΅ΡΡΠΈΡ 1.1 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ), Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Java 1.1 Ρ ΠΎΡΡ ΠΈ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΡΠ΅Ρ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡ, Π½ΠΎ ΡΠΈΡΠΌΡ-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Microsoft) ΡΡΡΠ΅ΠΌΡΡΡΡ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠ· Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡΡ — Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΠΠ°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ .
Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ·Π±Π°Π²Π»Π΅Π½Ρ ΠΎΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ. ΠΠ»Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ°ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ° HTML v.3, Π° ΡΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈ ΡΠΎΡΡΠΈΠΉΡΠΊΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ariadna).
Π‘ΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ UNIX-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ Π²ΡΠ±ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ CGI (Common Gateway Interface), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΈΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π° ΡΠ·ΡΠΊΠ΅ C (ΠΈΠ»ΠΈ C++) ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΡΠΈΠΏΠ° Perl. ΠΠ° ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°Π±ΠΎΡΠΈΡ ΡΡΠ°Π½ΡΠΈΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΡΠ·ΡΠΊ Java.
Π ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅Ρ Netscape Fast Track Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° NSAPI. ΠΠΎΡ ΠΎΠΆΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈ Π² ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Microsoft (IIS — Internet Information Server ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΠΉ Web-ΡΠ΅ΡΠ²Π΅Ρ) — ISAPI. Π‘ΠΌΡΡΠ» ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ (Π² Π²ΠΈΠ΄Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ) Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ CGI, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΡΡΠ΅Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ CGI ΠΏΠΈΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡΠ΅ΠΌ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΠΎΠ½ΠΈ Π²ΡΠ²ΠΎΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π³ΠΈΠΏΠ΅ΡΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Java-Π°ΠΏΠΏΠ»Π΅Ρ, ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΌΠΎΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡΡΠΈΡ ΡΡ ΠΊΠ°ΡΡ ΠΠΎΡ ΠΎΠ½Π΅Π½Π°. ΠΠΏΠΏΠ»Π΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ΅ΡΠΈ ΠΠΎΡ ΠΎΠ½Π΅Π½Π° ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ) ΠΎΠ±ΡΠ°Π·ΠΎΠ². Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ 3-Ρ ΠΌΠ΅ΡΠ½ΠΎΠ΅ ΡΠ²Π΅ΡΠ½ΠΎΠ΅ RGB ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 2-Ρ ΠΌΠ΅ΡΠ½ΡΡ ΡΠ΅ΡΠΊΡ.
ΠΠ° ΡΠΈΡ. 1 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΎΠΊΠ½ΠΎ Π±ΡΠΎΡΠ·Π΅ΡΠ° ΠΏΠΎΡΠ»Π΅ Π²Ρ ΠΎΠ΄Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Ρ Π°ΠΏΠΏΠ»Π΅ΡΠΎΠΌ.
Π ΠΈΡ. 1. ΠΠΏΠΏΠ»Π΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΌΠΎΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡΡΠΈΡ ΡΡ ΠΊΠ°ΡΡ ΠΠΎΡ ΠΎΠ½Π΅Π½Π°.
ΠΠ΄Π΅ΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ΅ΠΉΠΊΠ° ΡΠ΅ΡΠΊΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ (Π½Π΅ΠΉΡΠΎΠ½) Π½Π΅ΠΉΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΡΠΈ. ΠΡΡΠ³ ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ Π½Π΅ΠΉΡΠΎΠ½Ρ-" ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»ΠΈ". Π¦Π²Π΅Ρ (ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΡΡΠ΅Ρ ΠΎΡΡΠ΅Π½ΠΊΠΎΠ²: ΠΊΡΠ°ΡΠ½ΡΠΉ, Π·Π΅Π»Π΅Π½ΡΠΉ, ΡΠΈΠ½ΠΈΠΉ) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ°. ΠΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠΈ ΡΠ²Π΅Ρ ΡΡΠ΅Π΅ΠΊ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ — ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ³ΠΌΠΎΠΈΠ΄Π°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΡ ΠΠΎΡ ΠΎΠ½Π΅Π½Π° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ΄ΠΎΠΌ ΠΈ ΠΏΠΎΠ΄ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π²Π΅ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π°ΠΏΠΏΠ»Π΅Ρ Π΄Π΅ΠΌΠΎΡΡΡΠΈΡΡΠ΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠ°ΡΡΡ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ Π°ΠΏΠΏΠ»Π΅ΡΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΠΎΡ ΠΎΠ½Π΅Π½Π°.
ΠΠ°ΠΆΠ°ΡΠΈΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Start Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠ°ΡΡ. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Stop. ΠΠ½ΠΎΠΏΠΊΠ° Reset ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠ±ΡΠΎΡΠ° Π²ΡΠ΅Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ ΡΠ΅ΡΠΈ ΠΈ Π·Π°Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠΈ (ΡΠΈΡ. 1).
ΠΠΏΠΏΠ»Π΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ΅ΡΠΈ ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Radius Π·Π°Π΄Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΠΈ ΡΠΎΡΠ΅Π΄ΡΡΠ²Π° ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ: ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²-ΠΊΠ»Π΅ΡΠΎΠΊ Π²ΠΎΠΊΡΡΠ³ Π½Π΅ΠΉΡΠΎΠ½Π°-" ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Ρ" Π±ΡΠ΄ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ (Ρ. Π΅. ΠΏΠΎΠ΄ΡΡΡΠΎΠ΅Π½Ρ ΠΈΡ Π²Π΅ΡΠ°). ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° ΡΡΠ΅Π΅ΠΊ ΡΠ΅ΡΠΊΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ «Π²Π΅ΡΠΎΠ²» ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΡ ΡΠΎΡΠ΅Π΄ΡΡΠ²Π°, Π²ΡΠ±ΡΠ°Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ°Π΄ΠΈΡΡ Π² ΠΎΠΊΠ½Π΅ Radius, ΡΠ΅ΠΌ ΠΎΠ½ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ. Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠΈ, ΠΏΡΠΈ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Slow ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ½Π°Π±Π»ΡΠ΄Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ, ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Fast ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠΈ ΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ. ΠΡΠ΅ ΡΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠΈ, Π½Π΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π²Π΅ΡΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΈ ΡΠ½ΠΎΠ²Π° Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Start.
ΠΠ° ΡΠΈΡ. 2 Π²ΠΈΠ΄Π½ΠΎ ΠΊΠ°ΠΊ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΡ ΠΏΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΡΠ°Π΄ΠΈΡΡΠ° ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΠΈ.
Π ΠΈΡ. 2. Π‘Π΅ΡΠΈ ΠΠΎΡ ΠΎΠ½Π΅Π½Π° Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°ΠΌΠΈ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ Π°ΠΏΠΏΠ»Π΅ΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ Π°ΠΏΠΏΠ»Π΅ΡΠ° sofm.java.
import java.awt.*;
import java.applet.*;
import java.util.*;
class synapse {.
// this class models a weighted connection to a cell.
double weight;
static double sharpness = 2.0; // higher values give sharper cutoff.
cell c;
public static double sigmoid (double x) {.
return 1.0 / (1.0 + Math. exp (-x));
}.
public synapse (cell c, double dist) {.
weight = 0.2 * sigmoid ((sofm.limit — sharpness*dist)/sharpness);
// weight = 0.2 / (1.0 + dist); // use simple function.
this.c = c;
}.
public void update (double[] v, Graphics g) {.
c.update (v, map. rate*weight, g);
}.
}.
class cell {.
// has three basic properties: a grid position (gridv).
// an input space position (ipv).
// and a set of neighbours.
double[] gridv;
double[] ipv;
int d;
static int neighboursEstimate = 30; // a rough estimate of number of neighbours — will grow automatically if needed to.
Vector neighbours;
public cell (int d, int x, int y) {.
// construct a cell with a d-dimensional randomly initialised vector at.
// point x, y on the grid.
ipv = new double[d];
gridv = new double[2];
gridv[0] = (double) x;
gridv[1] = (double) y;
this.d = d;
randCell ();
neighbours = new Vector (neighboursEstimate);
}.
public void randCell () {.
for (int i=0; i.
ipv[i] = Math. random ();
}.
public void addNeighbour (cell c) {.
neighbours.addElement (new synapse (c, dist (gridv, c. gridv)));
}.
public void removeNeighbours () {.
neighbours.removeAllElements ();
}.
public void updateNeighbours (double[] v, Graphics g) {.
// iterate over set of neighbours updating them.
// in proportion to the connection weight.
// now clearly identify the winner i.e. this cell.
g.setColor (map.v2c (v));
g.fillOval ((int)gridv[0]*map.size, (int)gridv[1]*map.size, map. size, map. size);
g.setColor (Color.black);
g.drawOval (1+(int)gridv[0]*map.size, 1+(int)gridv[1]*map.size, map. size-2, map. size-2);
try {Thread.sleep (100); }.
catch (Exception e) {}.
for (Enumeration e = neighbours. elements (); e. hasMoreElements ();).
((synapse) e. nextElement ()).update (v, g);
}.
public void update (double[] v, double w, Graphics g) {.
// updates the vector of this cell using a weighted average.
// of the current cell vector (ipv) and v.
for (int i=0; i.
ipv[i] = (1.0 — w) * ipv[i] + w * v[i];
g.setColor (map.v2c (ipv));
g.fillRect ((int)gridv[0]*map.size, (int)gridv[1]*map.size, map. size, map. size);
}.
}.
public static double sqr (double x) {.
return x * x;
}.
public static double dist (double[] x, double[] y) {.
double dis = 0.0;
for (int i=0; i.
dis += sqr (x[i] - y[i]);
return Math. sqrt (dis);
}.
public double dist (double[] v) {.
return dist (ipv, v);
}.
}.
class map {.
// this class is to model the 2-d map with the underlying vectors.
// can be set up to be a grid, each with a random neuron.
// then each time, update it according to the chosen input vector.
// this follows the cycle of pick winner, update neighbours.
// (each cell includes itself in its set of neighbours).
int d; // the number of dimensions in input.
int n; // the number of points on the grid.
// cell[][] points;
static int size = 40; // number of pixels to use for each cell when drawing it.
static double rate;
static double decayFac = 0.99; // no weight decay at present.
Vector cells;
public map (int d, int n) {.
this.n = n;
this.d = d;
cells = new Vector (n*n);
rate = 1.0;
makeMap ();
setNeighbours ();
}.
public void makeMap () {.
for (int i=0; i.
for (int j=0; j.
cells.addElement (new cell (d, i, j));
}.
public void reset () {.
rate = 1.0;
for (Enumeration e = cells. elements (); e. hasMoreElements ();).
((cell) e. nextElement ()).randCell ();
}.
public void setNeighbours () {.
for (Enumeration e = cells. elements (); e. hasMoreElements ();).
cellNeighbours ((cell) e. nextElement ());
}.
public void cellNeighbours (cell c) {.
c.removeNeighbours ();
for (Enumeration e = cells. elements (); e. hasMoreElements ();) {.
cell cand = (cell) e. nextElement (); // cand is current candidate.
if (cell.dist (c.gridv, cand. gridv) < sofm. limit).
c.addNeighbour (cand);
}.
}.
public cell getWinner (double[] v) {.
double minDist = 100 000.0; // choose this to be much bigger than a feasible distance.
cell choice = null;
for (Enumeration e = cells. elements (); e. hasMoreElements ();) {.
cell cand = (cell) e. nextElement (); // cand is current candidate.
double curDist = cand. dist (v);
if (curDist < minDist) {.
choice = cand;
minDist = curDist;
}.
}.
return choice;
}.
public void updateMap (Color c, Graphics g) {.
update (c2v©, g); // convert the colour to a vector.
}.
public void update (double[] v, Graphics g) {.
cell winner = getWinner (v);
winner.updateNeighbours (v, g); // query this.
rate *= decayFac;
}.
public static double[] c2v (Color c) {.
double[] v = new double[3];
v[0] = (double) c. getRed () / 255.0;
v[1] = (double) c. getGreen () / 255.0;
v[2] = (double) c. getBlue () / 255.0;
return v;
}.
public static Color v2c (double[] v) {.
return new Color ((float) v[0], (float) v[1], (float) v[2]);
}.
public void paint (Graphics g) {.
for (Enumeration e = cells. elements (); e. hasMoreElements ();) {.
cell c = (cell) e. nextElement ();
g.setColor (v2c (c.ipv));
g.fillRect ((int)c.gridv[0]*size, (int)c.gridv[1]*size, size, size);
}.
}.
}.
public class sofm extends Applet implements Runnable {.
map sorg;
Thread animator;
int nCols = 8;
Color[] cols = new Color[8];
static double limit=5.0;
int sleepTime = 10;
Button start, stop, reset;
Choice neighbourhood, decay, speed; // decay not used.
Panel buttons;
public void init () {.
setControlPanel ();
initColors ();
sorg = new map (3,10);
animator = new Thread (this);
animator.start ();
}.
public void setControlPanel () {.
setLayout (new BorderLayout ());
buttons = new Panel ();
start = new Button («start»);
stop = new Button («stop»);
reset = new Button («reset»);
neighbourhood = new Choice ();
neighbourhood.addItem («1.0»);
neighbourhood.addItem («2.0»);
neighbourhood.addItem («3.0»);
neighbourhood.addItem («5.0»);
neighbourhood.addItem («7.0»);
neighbourhood.addItem («10.0»);
neighbourhood.select («5.0»);
speed = new Choice ();
speed.addItem («fast»);
speed.addItem («slow»);
speed.select («fast»);
buttons.add (new Label («Radius»));
buttons.add (neighbourhood);
buttons.add (start);
buttons.add (stop);
buttons.add (reset);
buttons.add (speed);
add («South», buttons);
}.
public void initColors () {.
cols[0] = Color. red;
cols[1] = Color. blue;
cols[2] = Color. green;
cols[3] = Color. white;
cols[4] = Color. black;
cols[5] = Color. magenta;
cols[6] = Color. pink;
cols[7] = Color. yellow;
}.
public static int randInt (int range) {.
return (int) (Math.random () * (double) range);
}.
public void paint (Graphics g) {.
validate ();
sorg.paint (g);
}.
public boolean handleEvent (Event event) {.
// use 1.0 event model for maxmimum browser compatibilty.
if (event.id == Event. ACTION_EVENT) {.
if (event.target == start) {.
// System.out.println («start»);
animator.resume ();
return true;
}.
if (event.target == stop) {.
animator.suspend ();
return true;
}.
if (event.target == reset) {.
sorg.reset ();
repaint ();
return true;
}.
if (event.target == speed) {.
String s = speed. getSelectedItem ();
if (s.equals («slow»)).
sleepTime = 1000;
else.
sleepTime = 10;
return true;
}.
if (event.target == neighbourhood) {.
limit = new Double (neighbourhood.getSelectedItem ()).doubleValue ();
// System.out.println (limit);
sorg.setNeighbours ();
return true;
}.
}.
return super. handleEvent (event);
}.
public void run () {.
sorg.paint (getGraphics ());
while (true) {.
Color current = cols[randInt (nCols)];
Graphics g = getGraphics ();
g.setColor (current);
g.fillRect (180, 410, 40, 30);
sorg.updateMap (current, g);
try { Thread. sleep (sleepTime); }.
catch (Exception e) {.
System.out.println (e);
}.
}.
}.
}.
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π½Π°Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° CGI ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² ΡΡΠ΅Π΄Π΅ Delphi, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΈ ΠΊΠΎΡΡΠΎΠ»ΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΊΡΡΡΠΎΠ² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΅Π΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΠ°Π±ΠΎΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http:158.250.47.76index.html.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π ΠΈΡ. 3. Π‘Ρ Π΅ΠΌΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.