home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / m296.doc / m2jpi.2 < prev    next >
Encoding:
Text File  |  1990-02-23  |  53.3 KB  |  1,240 lines

  1.  
  2.                             â ï Ç é Ç  2
  3.                             ============
  4.  
  5.          ééàäàìêà é æêæÆàîô ÅÉÄâÉÇîîêÉÄéÇìꃠJPI Modula-2
  6.          ================================================
  7.  
  8.          Modula-2 - φΓ« ß«óαѼѡ¡δ⌐ ∩ºδ¬ »α«úαá¼¼¿α«óá¡¿∩ «íΘÑú« ¡áº¡áτÑ¡¿∩. Ä¡ íδ½ ß«ºñᡠ쿬-
  9.     ½áπß«¼ é¿αΓ«¼ ¿ ∩ó½∩ÑΓß∩ »α∩¼δ¼ ¡áß½Ññ¡¿¬«¼ ∩ºδ¬á Pascal, ¬«Γ«αδ⌐ ΓᬪѠíδ½ αáºαáí«Γá¡ é¿α-
  10.     Γ«¼. éδ ¼«ªÑΓÑ ñπ¼áΓ∞ « ∩ºδ¬Ñ Modula-2, τΓ« «¡ "½πτΦÑ", τѼ Pascal. é¿αΓ ß«ºñáóá½ ∩ºδ¬, ¬«-
  11.     Γ«αδ⌐ ¼«ª¡« í佫 íδ ¿ß»«½∞º«óáΓ∞ ñ½∩ »α«úαá¼¼¿α«óá¡¿∩ Σπ¡¬µ¿⌐ «τÑ¡∞ ¡¿º¬«ú«  πα«ó¡∩ (ñ«ßΓπ»
  12.     ¬ ñ¿ß¬á¼,  óó«ñ/óδó«ñ τÑαѺ »«αΓδ ¿ Γ.».),  ¡áα∩ñπ ß óδß«¬«πα«ó¡Ñóδ¼ »α«úαá¼¼¿α«ó᡿Ѽ, Γá-
  13.     ¬¿¼, ¬á¬ íáºδ ñá¡¡δσ, ¬«¼»¿½∩Γ«αδ, »α«µÑßß«αδ ß½«ó ¿ αáßτÑΓ¡δÑ ß¿ßΓѼδ. (æ¿ßΓѼᠻα«úαá¼¼¿-
  14.     α«óá¡¿∩ JPI Modula-2 ó ¡áßΓ«∩ΘÑÑ óαѼ∩ ¡á»¿ßá¡á ¡á ∩ºδ¬Ñ Modula-2 Σ¿α¼δ JPI).
  15.          äá¡¡á∩ ú½áóá ß«ñÑαª¿Γ ¬αáΓ¬«Ñ «»¿ßá¡¿Ñ ¡Ñ¬«Γ«αδσ «ß¡«ó¡δσ «ß«íÑ¡¡«ßΓÑ⌐ JPI Modula-2. é
  16.     ß½ÑñπεΘ¿σ αáºñѽáσ óδ ß¼«ªÑΓÑ ¡á⌐Γ¿ í«½ÑÑ »«½¡«Ñ «»¿ßá¡¿Ñ ¿¡ΓÑαÑßπεΘ¿σ óáß óÑΘÑ⌐.
  17.  
  18.                               î«ñπ½¿
  19.                               ------
  20.          Åα«úαἼᠡá Modulá-2 «íδτ¡« ß«ñÑαª¿Γ ¡áí«α ¼«ñπ½Ñ⌐.  èáªñδ⌐ ¼«ñπ½∞ »αÑñßΓáó½∩ÑΓ ß«í«⌐
  21.     ¡áí«α ß««ΓóÑΓßΓóπεΘ¿σ »α«µÑñπα ¿ ñá¡¡δσ,  »αÑñßΓáó½∩εΘ¿σ ¿º«½¿α«óá¡¡πε ßѬµ¿ε óßÑ⌐ »α«úαá¼-
  22.     ¼δ.  î«ñπ½∞ ß«ßΓ«¿Γ ¿º ñóπσ τáßΓÑ⌐:  ¼«ñπ½∩ «»¿ßá¡¿⌐ (definition module), «»¿ßδóáεΘÑú«, τΓ«
  23.     ñá¡¡δ⌐ ¼«ñπ½∞ ¼«ªÑΓ ñѽáΓ∞,  ¿ ¼«ñπ½∩ αÑ὿ºáµ¿⌐ (implementation module), ¬«Γ«αδ⌐ «»¿ßδóáÑΓ
  24.     ß»«ß«í «ßπΘÑßΓó½Ñ¡¿∩ ñá¡¡δσ Σπ¡¬µ¿⌐.
  25.          î«ñπ½∞ «»¿ßá¡¿⌐ ß«ñÑαª¿Γ ß»¿ß«¬ óßÑσ »α«µÑñπα ¿ ñá¡¡δσ,  ¬ ¬«Γ«αδ¼ óδ  ¿¼ÑÑΓÑ  ñ«ßΓπ».
  26.     éßÑ »α«µÑñπαδ ¿ ñá¡¡δÑ,  ¡Ñ ó¬½ετÑ¡¡δѠ󠼫ñπ½∞ «»¿ßá¡¿⌐, «ßΓáεΓß∩ ½«¬á½∞¡δ¼¿ ó ¼«ñπ½Ñ αÑá-
  27.     ½¿ºáµ¿⌐ ¿,  ß½Ññ«óáΓѽ∞¡«,  ¡Ñ "ó¿ñ¿¼δ" ¿º «ßΓá½∞¡δσ τáßΓÑ⌐ »α«úαá¼¼δ. î«ñπ½∞, ¿ß»«½∞ºπεΘ¿⌐
  28.     ñαπú«⌐ ¼«ñπ½∞, ¡áºδóáÑΓß∩ "¬½¿Ñ¡Γ". î«ñπ½∞, »αÑñ«ßΓáó½∩εΘ¿⌐ Σπ¡¬µ¿¿ ñαπú«¼π ¼«ñπ½ε, ¡áºδóá-
  29.     ÑΓß∩ "ßÑαóÑα". î«ñπ½∞ ¼«ªÑΓ «ñ¡«óαѼѡ¡« íδΓ∞ ¿ ¬½¿Ñ¡Γ«¼, ¿ ßÑαóÑα«¼.
  30.          Æ«τ¡« ΓᬠªÑ, ¬á¬ »α«µÑñπαá ∩ó½∩ÑΓß∩ áíßΓαᬵ¿Ñ⌐ ñ½∩ ß¬αδΓ¿∩ ñÑΓá½Ñ⌐, Γᬠ¿ ¼«ñπ½∞ ¼«-
  31.     ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩ ß¬αδΓ¿∩ ñÑΓá½Ñ⌐ µÑ½«ú« α∩ñá ßó∩ºá¡¡δσ ß ¡¿¼ »α«µÑñπα ¿  ½εíδσ  «íΘ¿σ
  32.     ßΓαπ¬Γπα ñá¡¡δσ.
  33.  
  34.                        Éáºñѽ∞¡á∩ ¬«¼»¿½∩µ¿∩
  35.                        ---------------------
  36.  
  37.          î«ñπ½¿ ¼«úπΓ Γαá¡ß½¿α«óáΓ∞ß∩ ¡Ñºáó¿ß¿¼« ¿ ß«σαá¡∩Γ∞ß∩ ó ó¿ñÑ «íΩÑ¬Γ¡«ú«  ¬«ñá, ¬«Γ«αδ⌐
  38.     »«ºñ¡ÑÑ  ¼«ªÑΓ ßΓáΓ∞ τáßΓ∞ε »«½¡«⌐ »α«úαá¼¼δ.  æ¿ßΓѼá JPI Modula-2 »«ßΓáó½∩ÑΓß∩ ß αáºó¿Γδ¼
  39.     ¡áí«α«¼ ¼«ñπ½Ñ⌐ ñ½∩ óó«ñá/óδó«ñá,  π»αáó½Ñ¡¿∩  «¬¡á¼¿,  π»αáó½Ñ¡¿∩  »α«µÑßßἿ,  «íαáí«Γ¬«⌐
  40.     ßΓ᫬ ¿ Γ.ñ.
  41.  
  42.                      ÇóΓ«¼áΓ¿τÑ߬¿Ñ í¿í½¿«ΓѬ¿
  43.                      -------------------------
  44.  
  45.          Modula-2 ¿¼ÑÑΓ óßΓα«Ñ¡¡δÑ ßαÑñßΓóá π»αáó½Ñ¡¿∩ áóΓ«¼áΓ¿τÑ߬¿¼¿ í¿í½¿«ΓѬἿ. è«¼»¿½∩Γ«α
  46.     ó σ«ñÑ ¬«¼»¿½∩µ¿¿ ¼«ñπ½∩ úÑ¡Ñα¿απÑΓ í¿í½¿«ΓÑτ¡δ⌐ Σá⌐½.  Æá¬«⌐ »«ñσ«ñ ñѽáÑΓ ó«º¼«ª¡δ¼ ó¬½ε-
  47.     τÑ¡¿Ñ ß¿ßΓѼ«⌐ Γ«½∞¬« ΓÑσ »α«µÑñπα ¿ ßΓαπ¬Γπα ñá¡¡δσ,  ¬«Γ«αδÑ ñÑ⌐ßΓó¿Γѽ∞¡« ¿ß»«½∞ºπεΓß∩ ó
  48.     ¬«¡Ñτ¡«⌐ »α«úαá¼¼Ñ.
  49.  
  50.                 ÇóΓ«¼áΓ¿τÑ߬¿⌐ »«¿ß¬ ó í¿í½¿«ΓѬáσ
  51.                 ----------------------------------
  52.  
  53.          Å«ß¬«½∞¬π ¬áªñδ⌐ ¼«ñπ½∞ ß«ñÑαª¿Γ ß»Ñµ¿Σ¿¬áµ¿¿ αÑßπαß«ó,  ¿ß»«½∞ºπѼδσ ¿¼ ¿º ñαπú¿σ ¼«-
  54.     ñπ½Ñ⌐,  Γ«  »α«úαá¼¼á-¬«¼»«¡«óΘ¿¬ (linker) ΓαÑíπÑΓ Γ«½∞¬« π¬áºá¡¿∩ ¿¼Ñ¡¿ ú½áó¡«⌐ main »α«ú-
  55.     αá¼¼δ. àß½¿ αẽ¿τ¡δÑ í¿í½¿«ΓÑτ¡δÑ ¼«ñπ½¿ ¿¼ÑεΓ «ñ¿¡á¬«ó«Ñ ¡áº¡áτÑ¡¿Ñ, Γ« ß¿ßΓѼᠻ«ºó«½∩ÑΓ
  56.     óá¼ π¬áºáΓ∞ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞, ó ¬«Γ«α«⌐ í¿í½¿«ΓѬ¿ íπñπΓ »α«ß¼áΓα¿óáΓ∞ß∩.
  57.  
  58.          Ä»αÑñѽѡ¿Ñ (π¬áºá¡¿Ñ)  ¼«ñπ½Ñ⌐,  ¬«Γ«αδÑ óßÑúñá íπñπΓ
  59.          ------------------------------------------------------
  60.                         »ÑαѬ«¼»¿½¿α«óáΓ∞ß∩
  61.                         -------------------
  62.  
  63.          Å«ß¬«½∞¬π ¬«¼»¿½∩Γ«α JPI Modula-2 óÑß∞¼á óδß«¬«ß¬«α«ßΓ¡«⌐ (í«½ÑÑ 20000 ßΓ᫬  ó  ¼¿¡π-
  64.     Γπ), Γ« óßÑ ó¿ñ¿¼δÑ ¼«ñπ½¿ «»αÑñѽѡ¿⌐, ¿ß»«½∞ºπѼδÑ ó »α«úαá¼¼Ñ, óßÑúñá »ÑαѬ«¼»¿½¿απεΓß∩.
  65.     Æá¬«⌐ »«ñσ«ñ ¿¼ÑÑΓ ß½ÑñπεΘ¿Ñ »αÑ¿¼πΘÑßΓóá:
  66.          - »«ºó«½∩ÑΓ »ÑαѬ«¼»¿½∩µ¿ε ¼«ñπ½Ñ⌐ αÑ὿ºáµ¿¿ ó ½εí«¼ »«α∩ñ¬Ñ;
  67.          - »«ºó«½∩ÑΓ ¿ºíѪáΓ∞ »α«í½Ñ¼,  ßó∩ºá¡¡δσ ß π»αáó½Ñ¡¿Ñ¼ óÑαß¿∩¼¿,  ßó∩ºá¡¡δσ ß ¼«ñπ½∩¼¿
  68.     «»αÑñѽѡ¿⌐. éδ ¼«ú½¿ ßΓὬ¿óáΓ∞ß∩ ß Γᬿ¼¿ »α«í½Ñ¼á¼¿, Ñß½¿ αá¡ÑÑ ¿ß»«½∞º«ó὿ ñαπú¿Ñ ¬«¼-
  69.     »¿½∩Γ«αδ Modula-2;
  70.          - π¼Ñ¡∞ΦáÑΓ  τ¿ß½« ¡Ñ«íσ«ñ¿¼δσ Σá⌐½«ó ºá ßτÑΓ Γ«ú«,  τΓ« ßΓá¡«ó∩Γß∩ ¡Ñ ¡πª¡δ "ß¿¼ó«½∞-
  71.     ¡δÑ" Σá⌐½δ (symbol files) ñ½∩ ¼«ñπ½Ñ⌐ «»αÑñѽѡ¿⌐.
  72.  
  73.                  é«º¼«ª¡«ßΓ∞ áóΓ«¼áΓ¿τÑ߬«ú« MAKE
  74.                  --------------------------------
  75.  
  76.          é í«½∞Φ¿σ  »α«úαá¼¼áσ  ºáó¿ß¿¼«ßΓ¿ ¼Ñªñπ ¼«ñπ½∩¼¿ ¼«úπΓ ßΓáΓ∞ óÑß∞¼á ºá»πΓá¡¡δ¼¿;  JPI
  77.     Modula-2 «íÑß»Ñτ¿óáÑΓ ó«º¼«ª¡«ßΓ∞ áóΓ«¼áΓ¿τÑ߬«ú« MAKE (»«ßΓα«Ñ¡¿∩ »α«úαá¼¼), τΓ« »«ºó«½∩ÑΓ
  78.     »α«ó«ñ¿Γ∞  óδß«¬«ß¬«α«ßΓ¡«⌐ á¡á½¿º óßÑσ ºáó¿ß¿¼«ßΓÑ⌐ ¼Ñªñπ ¼«ñπ½∩¼¿ ¿ »α«óÑα¬π óαѼѡ¿ ß«º-
  79.     ñá¡¿∩ ¼«ñπ½Ñ⌐.  Å«ß½Ñ φΓ«ú« ß¿ßΓѼᠻÑαѬ«¼»¿½¿απÑΓ Γ«½∞¬« ¼«ñπ½¿,  ¿ßσ«ñ¡δÑ ΓѬßΓδ ¬«Γ«αδσ
  80.     »αÑΓÑα»Ñ½¿ ¿º¼Ñ¡Ñ¡¿∩ »«ß½Ñ »«ß½Ññ¡Ñ⌐ ¬«¼»¿½∩µ¿¿.
  81.  
  82.  
  83.                    ÉáßΦ¿αÑ¡¡δÑ ßΓαπ¬Γπαδ ñá¡¡δσ
  84.                    ----------------------------
  85.  
  86.          Å«ññÑনóáεΓß∩ »«½¡«ßΓ∞ε óßÑ ßΓαπ¬Γπαδ ñá¡¡δσ,  ß ¬«Γ«α묨 óδ ¼«ú½¿ »«º¡á¬«¼¿Γ∞ß∩, ¿ß-
  87.     »«½∞ºπ∩ ∩ºδ¬¿ æ ¿½¿ Pascal.  é τ¿ß½« ¿σ óσ«ñ∩Γ: º¡á¬«óδÑ ¿ íѺº¡á¬«óδÑ µÑ½δÑ αẽ¿τ¡δσ αáº-
  88.     ¼Ñα«ó,  τ¿ß½á ß »½áóáεΘÑ⌐ Γ«τ¬«⌐,  ¼¡«ú«αẼÑα¡δÑ ¼áßß¿óδ, ºá»¿ß¿ ß óáα¿á¡ΓἿ, 64-èíá⌐Γ¡δÑ
  89.     ¼¡«ªÑßΓóá, ¬«α«Γ¬¿Ñ ¿ ñ½¿¡¡δÑ π¬áºáΓѽ¿, »ÑαѼѡ¡δÑ »α«µÑñπα ¿ »α«τ¿Ñ.
  90.  
  91.                    Å«½¡«Ñ π»αáó½Ñ¡¿Ñ ßÑú¼Ñ¡ΓἿ
  92.                    ----------------------------
  93.  
  94.          JPI Modula-2 αáß»«½áúáÑΓ π¡¿¬á½∞¡«⌐ «ß«íÑ¡¡«ßΓ∞ε, »«ºó«½∩εΘÑ⌐ óá¼ ¿ß»«½∞º«óáΓ∞ ßÑú¼Ñ¡-
  95.     Γ¿α«óá¡¡πε »á¼∩Γ∞ »α«µÑßß«α«ó 80x86.  éáΦ¿ »α«úαἼᠿ ñá¡¡δÑ ¼«úπΓ ñ«ßΓ¿úáΓ∞ αẼÑαá  ó  1
  96.     îíá⌐Γ ¿ ó Γ« ªÑ óαѼ∩ ¿ß»«½∞º«óáΓ∞ "¬«α«Γ¬¿Ñ ó맮óδ" ñ½∩ óδíαá¡¡δσ »α«µÑñπα ¬á¬ ó¡πΓα¿, Γá¬
  97.     ¿ ºá »αÑñѽἿ ¼«ñπ½Ñ⌐.  éδ ¼«ªÑΓÑ ΓᬪѠ¿ß»«½∞º«óáΓ∞ "¬«α«Γ¬¿Ñ  π¬áºáΓѽ¿"  ñ½∩  »«óδΦÑ¡¿∩
  98.     ß¬«α«ßΓ¿  óδ»«½¡Ñ¡¿∩.  é  «Γ½¿τ¿Ñ «Γ α∩ñá ñαπú¿σ ∩ºδ¬«ó,  »«ºó«½∩εΘ¿σ ¿ß»«½∞º«óáΓ∞ ¬«α«Γ¬¿Ñ
  99.     π¬áºáΓѽ¿ Γ«½∞¬« ó óδíαá¡¡δσ ßÑú¼Ñ¡Γáσ,  JPI Modula-2 »«ºó«½∩ÑΓ  «ñ¡«óαѼѡ¡«  ¿ß»«½∞º«óáΓ∞
  100.     ¬«α«Γ¬¿Ñ  π¬áºáΓѽ¿ ó ½εíδσ óδíαá¡¡δσ óἿ ßÑú¼Ñ¡Γáσ.  éδ ¼«ªÑΓÑ ñáªÑ µ¿¬½¿τÑ߬¿ »ÑαѼÑΘáΓ∞
  101.     ßÑú¼Ñ¡Γδ ó σ«ñÑ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ,  τΓ«íδ ñ«í¿Γ∞ß∩ «»Γ¿¼á½∞¡«ú« ¿ß»«½∞º«óá¡¿∩  ñ«ßΓπ»¡«⌐
  102.     »á¼∩Γ¿ (ß¼. âïÇéô 6 ñ½∩ »«½πτÑ¡¿∩ ñ«»«½¡¿Γѽ∞¡«⌐ ¿¡Σ«α¼áµ¿¿).
  103.  
  104.                           è«¡Γα«½∞ Γ¿»«ó
  105.                           --------------
  106.  
  107.          ä½∩ Γ«ú«,  τΓ«íδ «íÑß»Ñτ¿Γ∞ »«óδΦÑ¡¡πε ¡áñѪ¡«ßΓ∞ ó »α«úαá¼¼¿α«óá¡¿¿,  Modula-2  ¿¼ÑÑΓ
  108.     ñáªÑ í«½ÑÑ ßΓα«ú¿⌐ ¬«¡Γα«½∞ Γ¿»«ó,  τѼ ÑÑ »αÑñΦÑßΓóÑ¡¡¿¬ Pascal.  é Γ« ªÑ óαѼ∩,  Modula-2
  109.     ñáÑΓ ó«º¼«ª¡«ßΓ∞ «í«⌐Γ¿ »α¿ ¡Ñ«íσ«ñ¿¼«ßΓ¿ ¬«¡Γα«½∞ Γ¿»«ó.  ¥Γ« ñáÑΓ ó«º¼«ª¡«ßΓ∞ αÑ὿º«óáΓ∞
  110.     ½εíδÑ "σ¿Γα«ßΓ¿", ¬«Γ«αδÑ óδ ºáσ«Γ¿ΓÑ, τΓ«íδ ñ«ßΓ¿ú¡πΓ∞ ßó«¿σ µÑ½Ñ⌐ ¡á¿½πτΦ¿¼ »πΓѼ.
  111.  
  112.                              Åα«µÑñπαδ
  113.                              ---------
  114.  
  115.          Æ¿» "Åα«µÑñπαδ" »«ºó«½∩ÑΓ »α«¿ºó«ñ¿Γ∞  ñ¿¡á¼¿τÑ߬«Ñ  ¡áº¡áτÑ¡¿Ñ  »α«µÑñπα  »ÑαѼѡ¡δ¼.
  116.     Modula-2 αáß»«½áúáÑΓ ó«º¼«ª¡«ßΓ∩¼¿ αáßΦ¿αÑ¡¡«⌐ «íαáí«Γ¬¿ »áαá¼ÑΓα«ó »α«µÑñπα. éδ ¼«ªÑΓÑ »Ñ-
  117.     αÑñáΓ∞ ¼áßß¿ó ½εí«ú« αẼÑαá ó «ñ¡π ¿ Γπ ªÑ »α«µÑñπαπ ½¿í« ñáªÑ »ÑαÑñáΓ∞  »α«µÑñπαπ  ó  ¬á-
  118.     τÑßΓóÑ »áαá¼ÑΓαá. JPI Modula-2 ΓᬪѠαáß»«½áúáÑΓ ßαÑñßΓóἿ, »«ºó«½∩εΘ¿¼¿ »α«ßΓ« αÑ὿º«óδ-
  119.     óáΓ∞ »α«µÑñπαδ «íαáí«Γ¬¿ »αÑαδóá¡¿⌐.
  120.  
  121.  
  122.                  ÉáßΦ¿αÑ¡¡δÑ «»ÑαáΓ«αδ π»αáó½Ñ¡¿∩
  123.                  --------------------------------
  124.  
  125.          Modula-2 ß«ñÑαª¿Γ óßÑ «»ÑαáΓ«αδ π»αáó½Ñ¡¿∩,  αÑ὿º«óá¡¡δÑ ó Pascal. éñ«íá󫬠Modula-2
  126.     ß«ñÑনΓ, »«¼¿¼« »α«τ¿σ óÑΘÑ⌐, ¬«¡ßΓαπ¬µ¿ε Γ¿»á LOOP...END, óδ⌐Γ¿ ¿º ¬«Γ«α«⌐ óδ ¼«ªÑΓÑ, ¿ß-
  127.     »«½∞ºπ∩ Γᬠ¼¡«ú« Γ«τѬ óδσ«ñá, ¬á¬ óá¼ íπñÑΓ ¡Ñ«íσ«ñ¿¼« (ß¼. âïÇéô 6 ñ½∩ »«½πτÑ¡¿∩ »«½¡«ú«
  128.     ¼¡«ªÑßΓóá «»ÑαáΓ«α«ó π»αáó½Ñ¡¿∩).  Å«ß¬«½∞¬π óδτ¿ß½Ñ¡¿Ñ ½«ú¿τÑ߬¿σ πß½«ó¿⌐ ºáóÑαΦáÑΓß∩, ¬á¬
  129.     Γ«½∞¬« º¡áτÑ¡¿Ñ πß½«ó¿∩ ßΓá¡«ó¿Γß∩ «»αÑñѽѡ«,  Γ« ¿ß»«½∞º«óá¡¿Ñ  «»ÑαáΓ«α«ó  π»αáó½Ñ¡¿∩  ó
  130.     Modula-2 ßΓá¡«ó¿Γß∩ í«½ÑÑ »α«ßΓδ¼ ¿ í«½ÑÑ φΣΣÑ¬Γ¿ó¡δ¼, τѼ ó ∩ºδ¬áσ, ¡Ñ «íÑß»Ñτ¿óáεΘ¿σ φΓ«⌐
  131.     ó«º¼«ª¡«ßΓ¿.
  132.  
  133.  
  134.  
  135.                           î¡«ú«ºáñáτ¡«ßΓ∞
  136.                           ---------------
  137.  
  138.          Modula-2 ¿¼ÑÑΓ óßΓα«Ñ¡¡πε »«ññÑαª¬π ¼¡«ú«ºáñáτ¡«ßΓ¿.  ü¿í½¿«ΓѬá JPI Modula-2 ó¬½ετáÑΓ
  139.     »α«úαá¼¼π-»½á¡¿α«óΘ¿¬,  ¿ß»«½∞ºπεΘπε óαѼѡ¡«Ñ ¬óá¡Γ«óá¡¿Ñ, ¿ «í½ÑúτáεΘπε αÑ὿ºáµ¿ε »áαá½-
  140.     ½Ñ½∞¡δσ »α«µÑßß«ó ó ß¿ßΓѼÑ.
  141.  
  142.                        ô»αáó½Ñ¡¿Ñ »α«úαá¼¼«⌐
  143.                        ---------------------
  144.  
  145.          éδ ¿¼ÑÑΓѠ󫺼«ª¡«ßΓ∞ »«½¡«ßΓ∞ε π»αáó½∩Γ∞ óßѼ¿ á߻ѬΓἿ ßó«Ñ⌐  »α«úαá¼¼δ.  ¥Γ«  «ßπ-
  146.     ΘÑßΓó½∩ÑΓß∩ ¡Ñí«½∞Φ¿¼ ¬«½¿τÑßΓó«¼ "óßΓα«Ñ¡¡δσ" »α«µÑñπα, á ΓᬪѠ«ΓßπΓßΓó¿Ñ¼ ß¬αδΓδσ »αÑ«í-
  147.     αẫóá¡¿⌐ Γ¿»«ó, τΓ« ¡Ñ »«ºó«½∩ÑΓ óá¼ ºá»πΓáΓ∞ß∩.
  148.          JPI Modula-2  »«ññÑনóáÑΓ Γ«½∞¬« »«½¡δ⌐ ¿ßσ«ñ¡δ⌐ ΓѬßΓ
  149.     ó í¿í½¿«ΓѬѠ¿ ß¿ßΓѼѠóαѼѡ¿ ¿ß»«½¡Ñ¡¿∩.
  150.  
  151.                      æαÑñá αáºαáí«Γ¬¿ »α«úαá¼¼
  152.                      -------------------------
  153.  
  154.          æ¿ßΓѼá JPI  Modula-2  - φΓ« ß¿ßΓѼá αáºαáí«Γ¬¿ »α«úαá¼¼,  ¬«Γ«απε óδ ¼«ªÑΓÑ ¡áßΓα«¿Γ∞
  155.     »«ñ ßó«¿ ß«íßΓóÑ¡¡δÑ ΓαÑí«óá¡¿∩.
  156.  
  157.                               ÄΓ½áñ¬á
  158.                               -------
  159.  
  160.          é ß¿½π  Γ«ú«,  τΓ« Modula-2 - φΓ« ß¿½∞¡« Γ¿»¿º¿α«óá¡¡δ⌐ ∩ºδ¬,  ¼¡«ªÑßΓó« »«ΓÑ¡µ¿á½∞¡δσ
  161.     «Φ¿í«¬ «í¡áαπª¿óáÑΓß∩ ¡á φΓá»Ñ ¬«¼»¿½∩µ¿¿.  éßÑ  "ßΓá¡ñáαΓ¡δÑ"  «Φ¿í¬¿  óαѼѡ¿  óδ»«½¡Ñ¡¿∩
  162.     (»αÑóδΦÑ¡¿Ñ αẼÑαá ¼áßß¿óá, ¿ß»«½∞º«óá¡¿Ñ »πßΓ«ú« (NIL) π¬áºáΓѽ∩ ¿ Γ.ñ.) ¼«úπΓ íδΓ∞ »αÑα-
  163.     óá¡δ ß¿ßΓѼ«⌐.  Åα¿ ºá»π߬Ѡ»α«úαá¼¼δ ¿º ßαÑñδ,  ß¿ßΓѼá πßΓá¡«ó¿Γ ¬παß«α ó »«º¿µ¿¿  óáΦÑú«
  164.     ¿ßσ«ñ¡«ú« ΓѬßΓá,  ß««ΓóÑΓßΓóπεΘÑ⌐ »«½«ªÑ¡¿ε «Φ¿í¬¿.  ¥Γ« »α«¿ßσ«ñ¿Γ »αá¬Γ¿τÑ߬¿ ¼ú¡«óÑ¡¡«,
  165.     íѺ αѬ«¼»¿½∩µ¿¿ óáΦÑ⌐ »α«úαá¼¼δ.
  166.  
  167.                                * * *
  168.  
  169.          äá¡¡á∩ ú½áóá ß«ñÑαª¿Γ Γ«½∞¬« ταѺóδτá⌐¡« ßªáΓ«Ñ «»¿ßá¡¿Ñ ∩ºδ¬á Modula-2;  âïÇéÇ 4  ß«-
  170.     ñÑαª¿Γ  «»¿ßá¡¿Ñ α∩ñá ó«º¼«ª¡«ßΓÑ⌐ »πΓѼ »α¿óÑñÑ¡¿∩ ¡Ñ߬«½∞¬¿σ ¿¡ΓÑαÑß¡δσ »α¿¼Ñα«ó,  á Ñß½¿
  171.     óδ ¡πªñáÑΓÑß∞ ó í«½ÑÑ »«½¡«⌐ ¿ Γ«τ¡«⌐ ¿¡Σ«α¼áµ¿¿, âïÇ颠6 ¿ 7 «»¿ßδóáεΓ ∩ºδ¬ Modula-2 ó ñÑ-
  172.     Γá½∩σ.
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.                             â ï Ç é Ç  3
  188.                             ============
  189.  
  190.                               ìÇùÇïÄ
  191.                               ======
  192.  
  193.                   æ«ñÑন¼«Ñ ñ¿ßΓα¿íπΓ¿ó¡δσ ñ¿ß¬«ó
  194.                   --------------------------------
  195.  
  196.          éδ »«½πτ¿½¿ Γα¿ ñ¿ß¬ÑΓδ. Äñ¡á ¿º ¡¿σ »«¼ÑτÑ¡á JPI Modula-2 System, ñαπúá∩ - JPI Modula
  197.     -2 Library Objects («íΩÑ¬Γ¡δÑ ¬«ñδ í¿í½¿«ΓѬ) ¿ ΓαÑΓ∞∩ - JPI Modula-2 Library  Source  (¿ß-
  198.     σ«ñ¡δÑ ΓѬßΓδ í¿í½¿«ΓѬ).
  199.          ä¿ß¬, »«¼ÑτÑ¡¡δ⌐ System, ß«ñÑαª¿Γ ß½ÑñπεΘ¿Ñ Σá⌐½δ:
  200.          M2.EXE      â½áó¡á∩ »α«úαá¼¼á;
  201.          M2.OVL      ÄóÑα½Ñ⌐¡δ⌐ Σá⌐½ ú½áó¡«⌐ »α«úαá¼¼δ;
  202.          M2.ERR      æ««íΘÑ¡¿∩ ¬«¼»¿½∩Γ«αá «í «Φ¿í¬áσ;
  203.          M2.MNU      ÅÑαѬ«¡Σ¿úπα¿α«óá¡¡«Ñ «»¿ßá¡¿Ñ ¼Ñ¡ε;
  204.          M2.HLP      ÆÑ¬ßΓ αѪ¿¼á "Å«¼«Θ∞";
  205.          î2.XXX      êß»«½∞ºπÑΓß∩ ó ß¿ßΓѼѠíѺ ªÑßΓ¬«ú« ñ¿ß¬á
  206.                      (ß¼. »«ºñ¡ÑÑ).
  207.          Æ«½∞¬« Γα¿ »Ñαóδσ Σá⌐½á ∩ó½∩εΓß∩ ¡Ñ«íσ«ñ¿¼δ¼¿ »α¿ ºá»π߬ѠJPI Modula-2.
  208.          ä¿ß¬, »«¼ÑτÑ¡¡δ⌐ Library Objects, ß«ñÑনΓ:
  209.          *.DEF       î«ñπ½¿ «»αÑñѽѡ¿⌐;
  210.          *.OBJ       ÄíΩÑ¬Γ¡δÑ ¬«ñδ í¿í½¿«ΓÑτ¡δσ ¼«ñπ½Ñ⌐;
  211.          DEMO.MOD    è«α«Γ¬á∩ ñѼ«¡ßΓαᵿ«¡¡á∩ »α«úαá¼¼á;
  212.          PROG*.MOD   Åα¿¼Ñαδ;
  213.          PROG*.DEF   Åα¿¼Ñαδ.
  214.          ä½∩ ¿ß»«½∞º«óá¡¿∩ JPI Modula-2 í¿í½¿«ΓѬ¿ ¡Ñ«íσ«ñ¿¼δ Γ«½∞¬« Σá⌐½δ *.DEF ¿ *.OBJ.
  215.          ä¿ß¬, »«¼ÑτÑ¡¡δ⌐ Library Source ß«ñÑαª¿Γ ¿ßσ«ñ¡δ⌐ ΓѬßΓ í¿í½¿«ΓѬ¿.
  216.          ¥Γ«Γ ñ¿ß¬ ¡Ñ ¡πªÑ¡ ñ½∩ ºá»π߬á ß¿ßΓѼδ!
  217.  
  218.                      æ¿ßΓѼᠡᠪÑßΓ¬«¼ ñ¿ß¬Ñ
  219.                      ------------------------
  220.  
  221.          æ¿ßΓѼᠡᠪÑßΓ¬«¼ ñ¿ß¬Ñ ßΓáαΓπÑΓß∩ τÑΓδα∞¼∩ »α«ßΓ묨 ΦáúἿ:
  222.          1. æ«ºñá⌐ΓÑ ¬áΓὫú ¡á ßó«Ñ¼ ªÑßΓ¬«¼ ñ¿ß¬Ñ, ¡á»α¿¼Ñα, C:\JPIM2;
  223.          2. æ¬«»¿απ⌐ΓÑ ß«ñÑন¼«Ñ ñ¿ß¬«ó "SYSTEM" ¿ "LIBRARY OBJECTS" ó ß«ºñá¡¡δ⌐ ¬áΓὫú;
  224.          3. é«⌐ñ¿ΓÑ ó ß«ºñá¡¡δ⌐ ¬áΓὫú ¿ ºá»πßΓ¿ΓÑ ß¿ßΓѼπ, óóÑñ∩ î2 ó «ΓóÑΓ ¡á »«ñ߬Ậπ äÄæ;
  225.          4. ì᪼¿ΓÑ <äÄÅ+R> (Alt+R) ¿ «ΓóÑΓ∞ΓÑ DEMO,  ¬«úñá  JPI
  226.     Modula-2 ºá»α«ß¿Γ ¿¼∩ ú½áó¡«ú« (îain) Σá⌐½á.  ì᪼¿ΓÑ <ééÄä> (Enter) ¿ »α«¡áí½εñá⌐ΓÑ ¬«¼»¿-
  227.     ½∩µ¿ε, ßó∩ºδóá¡¿Ñ ¿ óδ»«½¡Ñ¡¿Ñ ñѼ«¡ßΓαᵿ«¡¡«⌐ »α«úαá¼¼δ.
  228.  
  229.  
  230.  
  231.  
  232.                    æ¿ßΓѼᠡá ñóπσ Σ½«»»¿-ñ¿ß¬áσ
  233.                    -----------------------------
  234.  
  235.          ö½«»»¿-ñ¿ß¬«óá∩ ß¿ßΓѼá πßΓá¡áó½¿óáÑΓß∩ ¿ ºá»π߬áÑΓß∩ »∩Γ∞ε »α«ßΓ묨 ΦáúἿ:
  236.          1. æ«ºñáεΓß∩ ¬«»¿¿ ñ¿ß¬«ó, »«¼ÑτÑ¡¡δσ "SYSTEM" ¿ "LIBRARY OBJECTS".
  237.          2. è«»¿∩ ñ¿ß¬á "SYSTEM" »«¼ÑΘáÑΓß∩ ¡á ñ¿ß¬«ó«ñ Ç:,  á ¬«»¿∩ ñ¿ß¬á "LIBRARY OBJECTS"  -
  238.     ¡á ñ¿ß¬«ó«ñ é:.
  239.          3. ÅÑαÑ¿¼Ñ¡«óδóáÑΓß∩ Σá⌐½ Ç:î2.XXX ó A:M2.RED.
  240.          4. é«⌐ñ¿ΓÑ ¡á ñ¿ß¬ Ç: ¿ ßΓáαΓπ⌐ΓÑ ß¿ßΓѼπ óó«ñ«¼ î2 ó «ΓóÑΓ ¡á »«ñ߬Ậπ äÄæ.
  241.          5. ì᪼¿ΓÑ <äÄÅ+R> (Alt+R) ¿ «ΓóÑΓ∞ΓÑ DEMO ¡á ºá»α«ß  JPI  Modula  -2  ¿¼Ñ¡¿  ú½áó¡«ú«
  242.     (Main) Σá⌐½á.  ì᪼¿ΓÑ <ééÄä> (Enter) ¿ »α«ß½Ññ¿ΓÑ ¬«¼»¿½∩µ¿ε,  ßó∩ºδóá¡¿Ñ ¿ óδ»«½¡Ñ¡¿Ñ ñÑ-
  243.     ¼«¡ßΓαᵿ«¡¡«⌐ »α«úαá¼¼δ.
  244.          æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞ ó᪡«ßΓ∞ ¬«ααÑ¬Γ¡«ú« óδ»«½¡Ñ¡¿∩ Φáúá 3, ó »α«Γ¿ó¡«¼ ß½πτáÑ ß¿ßΓѼᠡÑ
  245.     íπñÑΓ º¡áΓ∞, úñÑ ¡áσ«ñ¿Γß∩ í¿í½¿«ΓѬá.
  246.  
  247.                             ÅÉÄäÄïåàìêà
  248.                             ===========
  249.  
  250.                          àß½¿ óδ ΓÑα»Ñ½¿óδ
  251.                          -----------------
  252.  
  253.          àß½¿ óδ «í½áñáÑΓÑ ñ«ßΓáΓ«τ¡δ¼ ΓÑα»Ñ¡¿Ñ¼,  Γ« »«º¡á¬«¼∞ΓÑß∞ ß âïÇéÄë 4, ß«ñÑαªáΘÑ⌐ »α¿-
  254.     ¼Ñαδ. ÅÑαÑñ ñá½∞¡Ñ⌐Φ¿¼ ¿ß»«½∞º«ó᡿Ѽ ßαÑñδ ¡ÑíÑß»«½Ñº¡« íπñÑΓ »α«ß¼«ΓαÑΓ∞ âïÇéô 5.
  255.  
  256.                 àß½¿ óδ ¡Ñ ½εí¿ΓÑ τ¿ΓáΓ∞ απ¬«ó«ñßΓóá
  257.                 ------------------------------------
  258.  
  259.          é Γᬫ¼ ß½πτáÑ ¼δ ñπ¼áѼ, τΓ« óδ ¡á⌐ñÑΓÑ »«½Ñº¡«⌐ ñ½∩ ßÑí∩ ¬½áó¿Φπ <F1>.
  260.          ì᪼¿ΓÑ <F1>  ¿  ßἫßΓ«∩Γѽ∞¡«  αáºíÑα¿ΓÑß∞,  ¬á¬  ¬«¼»¿½¿α«óáΓ∞ ¿ óδ»«½¡∩Γ∞ »α«úαá¼-
  261.     ¼δ-»α¿¼Ñαδ, ¡áºóá¡¡δÑ PROG*.MOD.
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.                             â ï Ç é Ç  4
  283.                             ============
  284.  
  285.                    é¢üÄÉÄùìÄà êçôùàìêà Modula-2
  286.                    ============================
  287.  
  288.          ¥Γá ú½áóá  ß«ñÑαª¿Γ  α∩ñ »α«úαá¼¼ óδí«α«τ¡«ú« «íπτÑ¡¿∩,  ¬«Γ«αδÑ ∩ó½∩εΓß∩ ¡ÑΣ«α¼á½∞¡δ¼
  289.     óóÑñÑ¡¿Ñ¼ ó ∩ºδ¬ Modula-2. Å«½¡«Ñ »«¡¿¼á¡¿Ñ Γ«ú«, ¬á¬ αáí«ΓáεΓ »α«úαá¼¼δ, ¡Ñ ∩ó½∩ÑΓß∩ ¡Ñ«í-
  290.     σ«ñ¿¼δ¼; ¬áªñδ⌐ »α¿¼Ñα ∩ó½∩ÑΓß∩ ¿½½εßΓαᵿÑ⌐ «Γñѽ∞¡δσ áß»Ñ¬Γ«ó ∩ºδ¬á, á ¡Ñ ¬«¡ßΓαπ¿α«óá¡¿∩
  291.     ß½«ª¡δσ á½ú«α¿Γ¼«ó.  ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, ¼δ »«»δΓ὿ß∞ ßñѽáΓ∞ »α¿¼Ñαδ ¿¡ΓÑαÑß¡δ¼¿. æ½ÑñπÑΓ ΓᬪÑ
  292.     «Γ¼ÑΓ¿Γ∞,  τΓ« πα«óÑ¡∞ º¡á¡¿∩ « »α«úαá¼¼¿α«óá¡¿¿, ¬á¬ ¡á¼ ¬áªÑΓß∩, αѺ¬« ó«ºαáßΓáÑΓ «Γ »α¿-
  293.     ¼Ñαá ¬ »α¿¼Ñαπ.
  294.          ì¿ªÑ »αÑñßΓáó½Ñ¡á »Ñαóá∩ »α«úαá¼¼á.
  295.  
  296.                                Hello
  297.                                -----
  298.  
  299.          MODULE prog1;
  300.          (* ¥Γá »α«úαἼᠻ¿ΦÑΓ "hello" ¡á φ¬αá¡Ñ. *)
  301.          FROM IO IMPORT WrStr;
  302.          BEGIN
  303.             WrStr('hello');
  304.          END prog1.
  305.  
  306.          X«Γ∩ φΓ« óÑß∞¼á »α«ßΓá∩ »α«úαá¼¼á,  «¡á ß«ñÑαª¿Γ α∩ñ ¿¡ΓÑαÑß¡δσ ¼«¼Ñ¡Γ«ó, ¬«Γ«αδÑ ß½Ñ-
  307.     ñπÑΓ »«¡∩Γ∞, »αѪñÑ τѼ ñó¿úáΓ∞ß∩ ñá½ÑÑ.
  308.          üπ¬óδ óÑασ¡Ñú« ¿ ¡¿ª¡Ñú« αÑú¿ßΓα«ó ¡Ñ φ¬ó¿óá½Ñ¡Γ¡δ.  æ½«óá, ¿¼ÑεΘ¿Ñ ß»Ñµ¿á½∞¡«Ñ º¡áτÑ-
  309.     ¡¿Ñ ó ¬«¼»¿½∩Γ«αÑ, óßÑúñᠺỿßδóáεΓß∩ ó óÑασ¡Ñ¼ αÑú¿ßΓαÑ (»α«»¿ß¡δÑ íπ¬óδ).
  310.          MODULE prog1 ß««íΘáÑΓ, τΓ« »α«úαἼᠡáºδóáÑΓß∩ prog1. öá⌐½, ó ¬«Γ«α«¼ ΓѬßΓ »α«úαá¼¼δ
  311.     ºá»«¼¿¡áÑΓß∩, ñ«½ªÑ¡ ¿¼ÑΓ∞ ¿¼∩ prog1.mod, τΓ«íδ ß«ó»áñáΓ∞ ß ¿¼Ñ¡Ñ¼ ¼«ñπ½∩.
  312.          è«¼¼Ñ¡Γáα¿¿ ¡áτ¿¡áεΓß∩ ß (* ¿ ºá¬á¡τ¿óáεΓß∩ *). Ä¡¿ ¡Ñ ó½¿∩εΓ ¡á ß«ñÑন¼«Ñ »α«úαá¼¼δ,
  313.     á ß«ñÑαªáΓ »«ñ߬Ậ¿,  »αÑñ¡áº¡áτÑ¡¡δÑ τѽ«óѬπ-τ¿ΓáΓѽε. (Äñ¡á¬« ¬«¼¼Ñ¡Γáα¿¿, ¡áτ¿¡áεΘ¿Ñß∩
  314.     ß« º¡á¬á (*$, ¿¡ΓÑα»αÑΓ¿απεΓß∩ ¬á¬ ¿¡ßΓαπ¬µ¿¿ ¬«¼»¿½∩Γ«απ).
  315.          FROM IO IMPORT WrStr «αúá¡¿ºπÑΓ ñ«ßΓπ» ¬ »α«µÑñπαÑ WrStr ó í¿í½¿«ΓÑτ¡«¼ ¼«ñπ½Ñ IO, τΓ«
  316.     ñѽáÑΓ  φΓπ  »α«µÑñπαπ  ñ«ßΓπ»¡«⌐  ñ½∩ ¿ß»«½∞º«óá¡¿∩ ó «ßΓá½∞¡«⌐ τáßΓ¿ »α«úαá¼¼δ.  IO - φΓ«
  317.     ßΓá¡ñáαΓ¡δ⌐ í¿í½¿«ΓÑτ¡δ⌐ ¼«ñπ½∞, »«ßΓáó½∩Ѽδ⌐ ó¼ÑßΓÑ ß ß¿ßΓѼ«⌐ JPI Modula-2.
  318.          BEGIN »«¼ÑτáÑΓ  ¡áτὫ  óδ»«½¡∩Ѽδσ «»ÑαáΓ«α«ó.  Ä»ÑαáΓ«αδ ∩ó½∩εΓß∩ τáßΓ∩¼¿ »α«úαá¼¼δ,
  319.     ¬«Γ«αδÑ óδ»«½¡∩εΓ ñÑ⌐ßΓó¿∩ »α¿ ºá»π߬Ѡ»α«úαá¼¼δ.
  320.          Ä»ÑαáΓ«α WrStr('hello')  óδó«ñ¿Γ  ßΓ᫬π 'hello' ¡á πßΓα«⌐ßΓó« óδó«ñá.  é Modula-2 ¡ÑΓ
  321.     óßΓα«Ñ¡¡«ú« «»ÑαáΓ«αá 'print',  ó¼ÑßΓ« φΓ«ú« óó«ñ/óδó«ñ «αúá¡¿ºπÑΓß∩ ó맮óἿ  í¿í½¿«ΓÑτ¡δσ
  322.     »α«µÑñπα.
  323.          END prog1. »«¼ÑτáÑΓ ¬«¡Ñµ »α«úαá¼¼δ («íΩ∩ó½Ñ¡¿Ñ »«½¡«ú« ºáóÑαΦÑ¡¿∩).
  324.          è«¡Ñτ¡« ªÑ,  φΓá »Ñαóá∩ »α«úαἼᠡѠ∩ó½∩ÑΓß∩ »«½Ñº¡«⌐.
  325.     æ φΓ«⌐ Γ«τ¬¿ ºαÑ¡¿∩ ñαπú¿Ñ »α¿¼Ñαδ í«½ÑÑ »«½Ñº¡δ.
  326.  
  327.                       Å¿Σáú«α«ó߬¿Ñ óδτ¿ß½Ñ¡¿∩
  328.                       ------------------------
  329.  
  330.          MODULE prog2;
  331.          (* ¥Γá »α«úαá¼¼á óδó«ñ¿Γ Å¿Σáú«α«óδ Γα«⌐¬¿. *)
  332.          FROM IO IMPORT WrStr, WrLngCard, WrLn;
  333.          VAR a,b,c:LONGCARD;
  334.          BEGIN
  335.            FOR c := 1 TO 100 DO
  336.              FOR b := 1 TO c DO
  337.                FOR a := 1 TO b DO
  338.                  IF a*a + b*b = c*c THEN
  339.                    WrLngCard(a,1);
  340.                    WrStr(', ');
  341.                    WrLngCard(b,1);
  342.                    WrStr(', ');
  343.                    WrLngCard(c,1);
  344.                    WrLn;
  345.                  END;
  346.                END;
  347.              END;
  348.            END;
  349.          END prog2.
  350.  
  351.          Åα«úαἼᠡáσ«ñ¿Γ »«½«ª¿Γѽ∞¡δÑ τ¿ß½á á,  ó,  ß,  πñ«ó½ÑΓó«α∩εΘ¿Ñ Σ«α¼π½Ñ á*á + ó*ó  =
  352.     ß*ß.  ìá»α¿¼Ñα, 3*3 + 4*4 = 9+16 = 25 = 5*5, ΓᬠτΓ« αÑΦÑ¡¿Ñ¼ ∩ó½∩ÑΓß∩: á=3, ó=4, ß=5. àß½¿
  353.     ßΓ«α«¡δ ΓαÑπú«½∞¡¿¬á ¿¼ÑεΓ ΓᬿѠº¡áτÑ¡¿∩,  Γ« ΓαÑπú«½∞¡¿¬ ∩ó½∩ÑΓß∩ »α∩¼«πú«½∞¡δ¼. æ«ú½áß¡«
  354.     ½ÑúÑ¡ñÑ (󫺼«ª¡«,  ¿ ¡ÑóÑα¡«⌐),  ñαÑó¡¿Ñ Ñú¿»Γ∩¡Ñ ¿ß»«½∞º«ó὿ φëàΣá¬Γ »α¿ ßΓα«¿Γѽ∞ßΓóÑ
  355.     »¿αἿñ.
  356.          îÑΓ«ñ, ¿ß»«½∞ºπѼδ⌐ »α«úαá¼¼«⌐,  - φΓ« »«ñσ«ñ "úαπí«⌐ ß¿½δ" - íÑαπΓß∩ τ¿ß½á á, ó ¿ ß ¿
  357.     »α«óÑα∩ÑΓß∩,  πñ«ó½ÑΓó«α∩ÑΓß∩ ½¿ ºáñá¡¡«Ñ πß½«ó¿Ñ.  á, ó ¿ ß ñ«½ª¡δ íδΓ∞ »αÑñßΓáó½Ñ¡δ »ÑαÑ-
  358.     ¼Ñ¡¡δ¼¿:  φΓ« «íΩѬΓδ,  »α¿¡¿¼áεΘ¿Ñ αẽ¿τ¡δÑ º¡áτÑ¡¿∩ ó σ«ñÑ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ.  èáªñá∩
  359.     »ÑαѼѡ¡á∩ ñ«½ª¡á íδΓ∞ «íΩ∩ó½Ñ¡á, »αѪñÑ τѼ «¡á íπñÑΓ ¿ß»«½∞º«óáΓ∞ß∩.
  360.          ÅαÑñ½«ªÑ¡¿Ñ
  361.          VAR a,b,c:LONGCARD
  362.     «íΩ∩ó½∩ÑΓ »ÑαѼѡ¡δÑ á,  ó, ß, ¿ ¿ºóÑΘáÑΓ, τΓ« «¡¿ ¼«úπΓ »α¿¡¿¼áΓ∞ ½εíδÑ τ¿ß½«óδÑ º¡áτÑ¡¿∩:
  363.     0,1,2,3...
  364.          Ä»ÑαáΓ«α FOR c := 1 TO 100 DO ...  END óδºδóáÑΓ »«óΓ«α∩εΘÑÑß∩ (µ¿¬½¿τÑ߬«Ñ) óδ»«½¡Ñ¡¿Ñ
  365.     «»ÑαáΓ«α«ó, ºá¬½ετÑ¡¡δσ ¼Ñªñπ DO ¿ END ß »ÑαѼѡ¡«⌐ ß, »α¿¡¿¼áεΘÑ⌐ »«ß½Ññ«óáΓѽ∞¡« º¡áτÑ¡¿∩
  366.     1,2,...,100.
  367.          Åα«τ¿Ñ «»ÑαáΓ«αδ FOR »«ñ«í¡δ »Ñαó«¼π ¿, »«ß¬«½∞¬π «¡¿ "󽫪ѡδ", Γ« »ÑαѼѡ¡δÑ »«½πτá-
  368.     εΓ óßÑ󫺼«ª¡δÑ ß«τÑΓá¡¿∩
  369.                              ( a<=b<=c ).
  370.     ùΓ«íδ ßñѽáΓ∞  í«½ÑÑ  ½Ñú¬¿¼ »«¡¿¼á¡¿Ñ,  ¬á¬«⌐ END ß««ΓóÑΓßΓóπÑΓ ¬á¬«¼π FOR,  ¼δ ¿ß»«½∞ºπѼ
  371.     ß«ú½áΦÑ¡¿Ñ,  τΓ« END ºá»¿ßδóáÑΓß∩ »α∩¼« »«ñ ß««ΓóÑΓßΓóπεΘ¿¼ FOR,  ¿  «»ÑαáΓ«αδ  ¼Ñªñπ  ¡¿¼¿
  372.     ßñó¿úáεΓß∩. Æá¬«Ñ ß«ú½áΦÑ¡¿Ñ »α¿¼Ñ¡¿¼« ¿ ¬ ñαπú¿¼ «»ÑαáΓ«αá¼, ΓαÑíπεΘ¿¼ END.
  373.          Ä»ÑαáΓ«α IF a*a+b*b=c*c THEN ...END «íΩ∩ó½∩ÑΓ, τΓ« «»ÑαáΓ«αδ ¼Ñªñπ THEN ¿ END óδ»«½¡∩-
  374.     εΓß∩ Γ«½∞¬« ó Γ«¼ ß½πτáÑ,  Ñß½¿ ΓѬπΘ¿Ñ º¡áτÑ¡¿∩ á, ó, ß πñ«ó½ÑΓó«α∩εΓ αáóÑ¡ßΓóπ. Æá¬¿¼ «í-
  375.     αẫ¼, ¡á óδó«ñ¡«Ñ πßΓα«⌐ßΓó« »«»áñáεΓ Γ«½∞¬« ¿¡ΓÑαÑßπεΘ¿Ñ ¡áß Γα«⌐¬¿.
  376.          é »«α∩ñ¬Ñ  π»α᪡ѡ¿∩ óδ ¼«ªÑΓÑ »«»δΓáΓ∞ß∩ ¡á⌐Γ¿ αÑΦÑ¡¿∩ ñ½∩ παáó¡Ñ¡¿∩ á*á*á + ó*ó*ó +
  377.     ß*ß*ß = d*d*d.
  378.  
  379.                               îπºδ¬á
  380.                               ------
  381.  
  382.          MODULE prog3;
  383.          (* ¥Γá »α«úαἼᠿ߻«½¡∩ÑΓ ¼πºδ¬á½∞¡δÑ α∩ñδ (úá¼¼δ). *)
  384.          FROM Lib IMPORT Sound, NoSound, Delay;
  385.          FROM MATHLIB IMPORT Exp, Log;
  386.  
  387.          CONST MiddleC = 131.0;
  388.          TYPE NoteType = SHORTINT;
  389.          TYPE ScaleType = ARRAY [1..8] OF NoteType;
  390.          CONST major = ScaleType(0,2,4,5,7,9,11,12);
  391.          CONST minor = ScaleType(0,2,3,5,7,8,11,12);
  392.          PROCEDURE PlayScale(mode:ScaleType; key:NoteType);
  393.          VAR
  394.            i:[1..8];
  395.            note:NoteType;
  396.            freq:LONGREAL;
  397.          BEGIN
  398.            FOR i:=1 TO 8 DO
  399.              note:=key+mode[i];
  400.              freq:=MiddleC*Exp(LONGREAL(note)*(Log(2.0)/12.0));
  401.              Sound(CARDINAL(freq));
  402.              Delay(200);
  403.            END;
  404.            NoSound;
  405.            Delay(500);
  406.          END PlayScale;
  407.  
  408.          BEGIN
  409.            PlayScale(major,0); (* ñ« ¼áª«α *)
  410.            PlayScale(minor,2); (* αÑ ¼¿¡«α *)
  411.          END prog3.
  412.  
  413.  
  414.          Åα«úαἼᠿ߻«½∞ºπÑΓ óßΓα«Ñ¡¡δ⌐ ñ¿¡á¼¿¬ óáΦÑú« ¬«¼»∞εΓÑαá ñ½∩ ¿ß»«½¡Ñ¡¿∩ »áα ¼πºδ¬á½∞-
  415.     ¡δσ úá¼¼.  Åα«µÑñπαá,  óδºδóáѼá∩ ¬á¬ PlayScale, «»αÑñѽѡᠬᬠ¿¼ÑεΘá∩ 2 »áαá¼ÑΓαá. ÅÑαóδ⌐
  416.     »áαá¼ÑΓα «»αÑñѽ∩ÑΓ ¿¡ΓÑαóá½δ úá¼¼, óΓ«α«⌐ «»αÑñѽ∩ÑΓ »Ñαóπε ¡«Γπ úá¼¼δ.
  417.          Ä»αÑñѽѡ¿∩ »α«µÑñπα »«σ«ª¿ »« Σ«α¼Ñ ¡á «»αÑñѽѡ¿∩ »α«úαá¼¼: «¡¿ ß«ñÑαªáΓ «íΩ∩ó½Ñ¡¿∩,
  418.     ºá  ¬«Γ«α묨  ß½ÑñπÑΓ  ß»¿ß«¬  «»ÑαáΓ«α«ó.  é  »α«úαἼѠ¿ß»«½∞ºπεΓß∩ ñóá ó맮óá PlayScale:
  419.     PlayScale(major,0) - ¿ß»«½¡∩ÑΓ úá¼¼π ñ« ¼áª«α, a PlayScale(minor,2) - úá¼¼π αÑ ¼¿¡«α.
  420.          Ä»ÑαáΓ«α ó¿ñá
  421.          variable:=expression
  422.          (»ÑαѼѡ¡á∩:=óδαáªÑ¡¿Ñ)
  423.     ¿ºóÑΘáÑΓ, τΓ« º¡áτÑ¡¿Ñ »ÑαѼѡ¡«⌐ πßΓá¡áó½¿óáÑΓß∩ αáó¡δ¼ º¡áτÑ¡¿ε óδαáªÑ¡¿∩.  é óδαáªÑ¡¿∩σ,
  424.     úñÑ óßΓαÑτáÑΓß∩ »ÑαѼѡ¡á∩, ¿ß»«½∞ºπÑΓß∩ ÑÑ ΓѬπΘÑÑ º¡áτÑ¡¿Ñ.
  425.          Æ¿»δ ñá¡¡δσ ¿ß»«½∞ºπεΓß∩ ñ½∩ π¬áºá¡¿∩,  ¬á¬¿Ñ º¡áτÑ¡¿∩ ¼«ªÑΓ »α¿¡¿¼áΓ∞  »ÑαѼѡ¡á∩.  é
  426.     ∩ºδ¬Ñ  Modula-2  «»αÑñÑ½Ñ¡δ  ßΓá¡ñáαΓ¡δÑ Γ¿»δ,  ΓᬿѠ¬á¬:  SHORTINT,  LONGREAL,  CARDINAL,
  427.     LONGCARD,  CHAR,  BOOLEAN.  Å«¼¿¼« φΓ«ú«, ßπΘÑßΓóπεΓ αẽ¿τ¡δÑ ß»«ß«íδ ß«ºñá¡¿∩ ¡«óδσ Γ¿»«ó
  428.     ñá¡¡δσ.  æ½ÑñπÑΓ  «Γ¼ÑΓ¿Γ∞,  τΓ«  ßπΘÑßΓóπÑΓ  ¼¡«ú«  ß»«ß«í«ó »αÑñßΓáó½Ñ¡¿∩ º¡áτÑ¡¿⌐ τ¿ßѽ.
  429.     ÅαÑñßΓáó½Ñ¡¿Ñ ñ«½ª¡« óδí¿αáΓ∞ß∩ Γᬿ¼ «íαẫ¼, τΓ«íδ º¡áτÑ¡¿Ñ ¬áªñ«ú« óδαáªÑ¡¿∩ »«»áñὫ íδ
  430.     ó ºáñá¡¡δÑ úαá¡¿µδ.
  431.          Modula-2 - φΓ« "ß¿½∞¡« Γ¿»¿º¿α«óá¡¡δ⌐" ∩ºδ¬.  ¥Γ« «º¡áτáÑΓ,  τΓ« Γ¿» ¬áªñ«ú« óδαáªÑ¡¿∩
  432.     ñ«½ªÑ¡ íδΓ∞ ¬«ααÑ¬Γ¡δ¼ ñ½∩ ¬«¡ΓѬßΓá, ó ¬«Γ«α«¼ «¡ óßΓαÑτáÑΓß∩. èᬠ»αá󿽫, Γ¿»δ «»Ñαá¡ñ«ó
  433.     í¿¡áα¡«ú« «»ÑαáΓ«αá («»ÑαáΓ«αá,  ¿¼ÑεΘÑú« ñóá «»Ñαá¡ñá) ñ«½ª¡δ ß«ó»áñáΓ∞.  éδαáªÑ¡¿Ñ  ¼«ªÑΓ
  434.     íδΓ∞ »αÑ«íαẫóá¡« ó ñαπú«⌐ Γ¿» ºá¬½ετÑ¡¿Ñ¼ Ñú« ó ¬απú½δѠ߬«í¬¿ () ¿ »«¼ÑΘÑ¡¿Ñ¼ ¿¼Ñ¡¿ ΓαÑ-
  435.     íπѼ«ú« Γ¿»á »ÑαÑñ ¡¿¼¿. é »α¿¼ÑαÑ »ÑαѼѡ¡á∩ note »αÑ«íαáºπÑΓß∩ ¿º SHORTINT ó LONGREAL.
  436.          ÅαÑñ½«ªÑ¡¿Ñ
  437.          TYPE ScaleType = ARRAY[1..8] OF NoteType
  438.     «íΩ∩ó½∩ÑΓ ¡«óδ⌐ Γ¿» ñá¡¡δσ, ¡áºδóáѼδ⌐ ScaleType, º¡áτÑ¡¿∩ ¬«Γ«α«ú« ß«ßΓ«∩Γ ¿º ó«ß∞¼¿ ¡Ñºá-
  439.     ó¿ß¿¼δ󠬫¼»«¡Ñ¡Γ,  »α«¡π¼Ñα«óá¡¡δσ 1,2,...,8. é »α«úαἼѠmode «íΩ∩ó½∩ÑΓß∩ ∩ó½∩εΘÑ⌐ß∩ Γ¿»á
  440.     ScaleType.  ä«ßΓπ» ¬ ¬«¼»«¡Ñ¡Γá¼ ¼«ª¡« »«½πτ¿Γ∞ »α¿ »«¼«Θ¿ ¬«¡ßΓαπ¬µ¿¿ mode[e], úñÑ Ñ - ¡Ñ-
  441.     ¬«Γ«α«Ñ óδαáªÑ¡¿Ñ.  Æ.«., »α¿ßóá¿óá¡¿Ñ note := key+mode[i] πßΓá¡áó½¿óáÑΓ º¡áτÑ¡¿Ñ note αáó-
  442.     ¡δ¼ ßπ¼¼Ñ º¡áτÑ¡¿⌐ »ÑαѼѡ¡«⌐ key ¿ i-⌐ ¬«¼»«¡Ñ¡Γδ »ÑαѼѡ¡«⌐ mode.
  443.          Å«¼¿¼« φΓ«ú« ó »α«úαἼѠ¿¼ÑεΓß∩ ¡Ñ߬«½∞¬« «»αÑñѽѡ¿⌐ ¬«¡ßΓá¡Γ.
  444.          CONST MiddleC = 131.0
  445.     ¿ºóÑΘáÑΓ, τΓ« óßεñπ, úñÑ óßΓαÑΓ¿Γß∩ ¿¼∩ MiddleC ß½ÑñπÑΓ »«ñßΓáó½∩Γ∞ º¡áτÑ¡¿Ñ 131.0.
  446.          CONST major = ScaleType(0,2,4,5,7,9,11,12)
  447.     ¿ºóÑΘáÑΓ, τΓ« óßεñπ,  úñÑ óßΓαÑΓ¿Γß∩ ¿¼∩ major,  ß½ÑñπÑΓ ¿ß»«½∞º«óáΓ∞ Γ¿» ScaleType ß »ÑαÑ-
  448.     τ¿ß½Ñ¡¡δ¼¿ º¡áτÑ¡¿∩¼¿ ¬«¼»«¡Ñ¡Γ.
  449.          æ½ÑñπεΘá∩ »α«úαá¼¼á ΓᬪѠ¿ß»«½∞ºπÑΓ ¼áßß¿ó, ¡« í«½ÑÑ ß½«ª¡δ¼ ß»«ß«í«¼.
  450.  
  451.                              Ç¡áúαá¼¼á
  452.                              ---------
  453.  
  454.          MODULE prog4;
  455.          (* ¥Γá »α«úαá¼¼á óδó«ñ¿Γ »ÑαÑßΓᡫ󬿠ó ßΓ᫬áσ ó á½Σá-
  456.             ó¿Γ¡«¼ »«α∩ñ¬Ñ. *)
  457.          IMPORT IO,Str;
  458.  
  459.          TYPE StringType = ARRAY [0..9] OF CHAR;
  460.          PROCEDURE NextPerm(n:CARDINAL;
  461.                             VAR s:StringType;
  462.                             VAR wrap:BOOLEAN);
  463.          (* äá¡¡á∩ »α«µÑñπαá ¼«ñ¿Σ¿µ¿απÑΓ s »πΓѼ »«ß½Ññ«óáΓѽ∞¡δσ »ÑαÑßΓᡫ󫬠»Ñαóδσ n ß¿¼ó«-
  464.     ½«ó ó s. Å«ß½Ññ«óáΓѽ∞¡«ßΓ∞ »ÑαѼÑΘÑ¡¿⌐, úÑ¡Ñα¿απѼá∩ »«ß½Ññ«óáΓѽ∞¡δ¼¿ ó맮óἿ, ß«ºñáÑΓß∩
  465.     ó "á½Σáó¿Γ¡«¼" »«α∩ñ¬Ñ.  àß½¿ s ∩ó½∩ÑΓß∩ »«ß½Ññ¡Ñ⌐ ßΓ᫬«⌐ ó »«ß½Ññ«óáΓѽ∞¡«ßΓ¿, Γ« ó«ºóαá-
  466.     ΘáÑΓß∩ »Ñαóá∩.  ï«ú¿τÑ߬á∩ »ÑαѼѡ¡á∩ αѺπ½∞ΓáΓá wrap ¿ß»«½∞ºπÑΓß∩ ñ½∩ ß¿ú¡á½¿ºáµ¿¿ «í φΓ«¼
  467.     ß«íδΓ¿¿. *)
  468.          VAR
  469.            i:CARDINAL; (* s[i-1] - ΓѬπΘ¿⌐ ß¿¼ó«½  -  ¬á¡ñ¿ñáΓ
  470.                           ¡á ¿º¼Ñ¡Ñ¡¿Ñ. *)
  471.            j:CARDINAL; (*  s[j]  -  ß¿¼ó«½,  ¼Ñ¡∩Ѽδ⌐  ¼ÑßΓἿ
  472.                            ß s[i-1]. *)
  473.            tmp:CHAR;
  474.          BEGIN
  475.            IF n = 0 THEN
  476.              wrap := TRUE;
  477.              RETURN;
  478.            END;
  479.            i := n-1;
  480.            LOOP
  481.              IF i = 0 THEN
  482.                wrap := TRUE;
  483.                EXIT;
  484.              END;
  485.              IF s[i-1] < s[i] THEN
  486.                j := n-1;
  487.                WHILE s[j] <= s[i-1] DO
  488.                  j := j-1;
  489.                END;
  490.                tmp := s[j]; s[j] := s[i-1]; s[i-1] := tmp;
  491.                        (* »ÑαÑßΓá¡«ó¬á *)
  492.                wrap := FALSE;
  493.                EXIT;
  494.              END;
  495.              i := i-1;
  496.            END;
  497.          (* s[i]..s[n-1] ¡áσ«ñ∩Γß∩ ó «íαáΓ¡«¼ »«α∩ñ¬Ñ,  ΓαÑíπÑΓß∩ »α«¿ºóÑßΓ¿ ¿σ »ÑαÑßΓá¡«ó¬π ºá
  498.             ¼¿¡¿¼á½∞¡«Ñ τ¿ß½« »ÑαѼÑΘÑ¡¿⌐. *)
  499.            j := n-1;
  500.            WHILE i<j DO
  501.              tmp := s[j]; s[j] := s[i]; s[i] := tmp;
  502.              i := i+1;
  503.              j := j-1;
  504.            END;
  505.          END NextPerm;
  506.  
  507.          VAR InputString:StringType;
  508.              wrap:BOOLEAN;
  509.              online:CARDINAL;     (* è«½¿τÑßΓó« ßΓ᫬ ó óδσ«ñ¡«⌐
  510.                                      ßΓ᫬Ñ. *)
  511.              len:CARDINAL;
  512.          BEGIN
  513.            IO.WrStr('éóÑñ¿ΓÑ ßΓ᫬π : ');
  514.            IO.RdStr(InputString);
  515.  
  516.            len := Str.Length((InputString);
  517.            REPEAT
  518.              NextPerm(len,InputString,wrap);
  519.            UNTIL wrap;
  520.  
  521.            online := 0;
  522.            REPEAT
  523.              IO.WrStr(InputString);
  524.              IO.WrStr('  ');
  525.              online := online+1;
  526.              IF online = 6 THEN
  527.                IO.WrLn;
  528.                online := 0;
  529.              END;
  530.              NextPerm(len,InputString,wrap);
  531.            UNTIL wrap;
  532.          END prog4.
  533.  
  534.          NextPerm ∩ó½∩ÑΓß∩ ñαπú¿¼ »α¿¼Ñα«¼ »α«µÑñπαδ.  æ»¿ß«¬ »áαá¼ÑΓα«ó, ß½ÑñπεΘ¿⌐ ºá «íΩ∩ó½Ñ-
  535.     ¡¿Ñ¼ ¿¼Ñ¡¿ »α«µÑñπαδ, ¡áºδóáÑΓß∩ ß»¿ß¬«¼ Σ«α¼á½∞¡δσ »áαá¼ÑΓα«ó. Åα¿ ó맮óÑ »α«µÑñπαδ ¡á Ñú«
  536.     ¼ÑßΓ« ñ«½ªÑ¡ íδΓ∞ »«ñßΓáó½Ñ¡ ß««ΓóÑΓßΓóπεΘ¿⌐ ß»¿ß«¬ Σá¬Γ¿τÑ߬¿σ »áαá¼ÑΓα«ó.
  537.          é ñá¡¡«¼ ß½πτáÑ «»αÑñѽѡδ 3 Σ«α¼á½∞¡δσ »áαá¼ÑΓαá:
  538.          n:CARDINAL;
  539.          VAR s:StringType;
  540.          VAR wrap:BOOLEAN.
  541.  
  542.          àß½¿ »ÑαÑñ Σ«α¼á½∞¡δ¼ »áαá¼ÑΓα«¼ ßΓ«¿Γ  ¬½ετÑó«Ñ  ß½«ó«
  543.     VAR, Γ«:
  544.          - «¡ «»αÑñѽѡ ¬á¬ »áαá¼ÑΓα-»ÑαѼѡ¡á∩;
  545.          - Ñß½¿ «¡ »«½πτáÑΓ º¡áτÑ¡¿Ñ ó¡πΓα¿ »α«µÑñπαδ, Γ« º¡áτÑ¡¿Ñ ß««ΓóÑΓßΓóπεΘÑ⌐ »ÑαѼѡ¡«⌐ ó
  546.     Σá¬Γ¿τÑ߬«¼  ß»¿ß¬Ñ  »áαá¼ÑΓα«ó ¼«ñ¿Σ¿µ¿απÑΓß∩;  ΓᬪѠ»áαá¼ÑΓαδ-»ÑαѼѡ¡δÑ ¼«úπΓ ¿ß»«½∞º«-
  547.     óáΓ∞ß∩ ñ½∩ ó«ºóαáΘÑ¡¿∩ αѺπ½∞ΓáΓ«ó;
  548.          - ó ¼ÑßΓÑ ó맮óá »α«µÑñπαδ ß««ΓóÑΓßΓóπεΘ¿⌐ »áαá¼ÑΓα ñ«½ªÑ¡ íδΓ∞ »ÑαѼѡ¡«⌐ á¡á½«ú¿τ¡«-
  549.     ú« Γ¿»á.
  550.          æ ñαπú«⌐ ßΓ«α«¡δ, Ñß½¿ Σ«α¼á½∞¡δ⌐ »áαá¼ÑΓα ¡Ñ »αÑñóáα∩ÑΓß∩ ¬½ετÑóδ¼ ß½«ó«¼ VAR, Γ«:
  551.          - «¡ «»¿ßδóáÑΓß∩ ¬á¬ »áαá¼ÑΓα-º¡áτÑ¡¿Ñ;
  552.          - ½εíδÑ  ¿º¼Ñ¡Ñ¡¿∩  Ñú« ¡Ñ ºáΓαáú¿óáεΓ º¡áτÑ¡¿⌐ ß««ΓóÑΓßΓóπεΘ¿σ Σ«α¼á½∞¡δσ »áαá¼ÑΓα«ó;
  553.     ΓᬿѠ»áαá¼ÑΓαδ-º¡áτÑ¡¿∩ ¡Ñ ¼«úπΓ íδΓ∞ ¿ß»«½∞º«óá¡δ ñ½∩ ó«ºóαáΓá αѺπ½∞ΓáΓ«ó;
  554.          - ó ¼ÑßΓÑ ó맮óá »α«µÑñπαδ ß««ΓóÑΓßΓóπεΘ¿⌐ Σá¬Γ¿τÑ߬¿⌐ »áαá¼ÑΓα ¼«ªÑΓ íδΓ∞ ½εíδ¼ óδαá-
  555.     ªÑ¡¿Ñ¼ ("¬«ααÑ¬Γ¡«ú«" Γ¿»á).
  556.          Åα«úαá¼¼á 4 ¿ß»«½∞ºπÑΓ αẽ¿τ¡δÑ ó¿ñδ µ¿¬½«ó.
  557.          Ä»ÑαáΓ«α ó Σ«α¼Ñ LOOP...END;  «íΩ∩ó½∩ÑΓ,  τΓ« «¬απªáѼδÑ Γᬫ⌐ ¬«¡ßΓαπ¬µ¿Ñ⌐  «»ÑαáΓ«αδ
  558.     ñ«½ª¡δ µ¿¬½¿τÑ߬¿ óδ»«½¡∩Γ∞ß∩,  »«¬á ¡Ñ óδ»«½¡¿Γß∩ «»ÑαáΓ«α EXIT. Modula-2 ¿¼ÑÑΓ ΓᬪѠ«»Ñ-
  559.     αáΓ«αδ WHILE ¿ REPEAT.  Ä¡¿ ¼«úπΓ íδΓ∞ óδαáªÑ¡δ τÑαѺ µ¿¬½ LOOP ß«ú½áß¡« ß½ÑñπεΘÑ⌐ Γáí½¿µÑ:
  560.  
  561.          WHILE óδαáªÑ¡¿Ñ DO        LOOP
  562.          ...                         IF NOT óδαáªÑ¡¿Ñ THEN
  563.          END;                           EXIT;
  564.                                      END;
  565.                                       ...
  566.                                    END;
  567.  
  568.          REPEAT                    LOOP
  569.           ...                        ...
  570.          UNTIL óδαáªÑ¡¿Ñ;            IF óδαáªÑ¡¿Ñ THEN
  571.                                         EXIT;
  572.                                      END;
  573.                                    END;
  574.  
  575.          æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« ñ½∩ µ¿¬½á Γ¿»á REPEAT ó½«ªÑ¡¡δÑ «»ÑαáΓ«αδ óßÑúñá óδ»«½¡∩εΓß∩ ¬á¬
  576.     ¼¿¡¿¼π¼ «ñ¡áªñδ, á ñ½∩ µ¿¬½á WHILE «¡¿ ¼«úπΓ ¡Ñ óδ»«½¡∩Γ∞ß∩ ¡¿ αáºπ.
  577.          ÄíΩ∩ߡѡ¿Ñ Γ«ú«,  ¬á¬ αáí«ΓáÑΓ »α«µÑñπαá NextPerm óÑß∞¼á ß½«ª¡«  ¿  óδσ«ñ¿Γ  ºá  αἬ¿
  578.     »αÑñ¼ÑΓá «íßπªñÑ¡¿∩ (¡á»«¼¡¿¼, τΓ« «íßπªñáεΓß∩ »«ñα«í¡«ßΓ¿ ∩ºδ¬á Modula-2, á ¡Ñ ß½«ª¡δÑ á½-
  579.     ú«α¿Γ¼δ).  éδ ¼«ªÑΓÑ »«»δΓáΓ∞ß∩ αẫíαáΓ∞ß∩ ó φΓ«¼ ó«»α«ßÑ ßἫßΓ«∩Γѽ∞¡«,  ¡« ¡Ñ αáßßΓαá¿-
  580.     óá⌐ΓÑß∞, Ñß½¿ ¡Ñ ß¼«ªÑΓÑ ßñѽáΓ∞ φΓ«ú«.
  581.          æ½ÑñπεΘá∩ πτÑí¡á∩ »α«úαá¼¼á ΓᬪѠ¿ß»«½∞ºπÑΓ  NextPerm.  Æá¬¿Ñ  ß¿Γπᵿ¿  ó«º¡¿¬áεΓ  ó
  582.     »α«úαá¼¼¿α«óá¡¿¿  óÑß∞¼á  τáßΓ«,  »«φΓ«¼π Modula-2 »«ºó«½∩ÑΓ óá¼ ß«ºñáóáΓ∞ ßó«¿ ß«íßΓóÑ¡¡δÑ
  583.     "í¿í½¿«ΓÑτ¡δÑ" ¼«ñπ½¿. ä½∩ Γ«ú«, τΓ«íδ ß«ºñáΓ∞ Γᬫ⌐ ¼«ñπ½∞, ¡áñ« ß«ºñáΓ∞ ñóá Σá⌐½á. ÅÑαóδ⌐
  584.     - φΓ« Σá⌐½ «»αÑñѽѡ¿⌐ (definition file), ß»Ñµ¿Σ¿µ¿απεΘ¿⌐, τΓ« ñѽáÑΓ ñá¡¡δ⌐ ¼«ñπ½∞, ¿ óΓ«-
  585.     α«⌐ - φΓ« Σá⌐½ αÑ὿ºáµ¿¿ (implementation file), «»¿ßδóáεΘ¿⌐, ¬á¬ óδ»«½¡∩εΓß∩ Σπ¡¬µ¿¿ ¼«ñπ-
  586.     ½∩. ì¿ªÑ »α¿ó«ñ∩Γß∩ ñÑ⌐ßΓó¿∩ ñ½∩ ß«ºñá¡¿∩ ¼«ñπ½∩ ñ½∩ »α«µÑñπαδ NextPerm.
  587.  
  588.  
  589.  
  590.  
  591.  
  592.          öá⌐½ «»¿ßá¡¿⌐ (¿¼∩ Σá⌐½á perms.def):
  593.          ------------------------------------
  594.  
  595.          DEFINITION MODULE perms;
  596.          PROCEDURE NextPerm(n:CARDINAL; VAR s:ARRAY OF BYTE;
  597.                             VAR wrap:BOOLEAN);
  598.          (* äá¡¡á∩ »α«µÑñπαá ¼«ñ¿Σ¿µ¿απÑΓ s »πΓѼ »«ß½Ññ«óáΓѽ∞¡δσ »ÑαÑßΓᡫ󫬠»Ñαóδσ n ß¿¼ó«-
  599.     ½«ó ó s. Å«ß½Ññ«óáΓѽ∞¡«ßΓ∞ »ÑαѼÑΘÑ¡¿⌐, úÑ¡Ñα¿απѼá∩ »«ß½Ññ«óáΓѽ∞¡δ¼¿ ó맮óἿ, ß«ºñáÑΓß∩
  600.     ó "á½Σáó¿Γ¡«¼" »«α∩ñ¬Ñ.  àß½¿ s ∩ó½∩ÑΓß∩ »«ß½Ññ¡Ñ⌐ ßΓ᫬«⌐ ó »«ß½Ññ«óáΓѽ∞¡«ßΓ¿, Γ« ó«ºóαá-
  601.     ΘáÑΓß∩ »Ñαóá∩.  ï«ú¿τÑ߬á∩ »ÑαѼѡ¡á∩ αѺπ½∞ΓáΓá wrap ¿ß»«½∞ºπÑΓß∩ ñ½∩ ß¿ú¡á½¿ºáµ¿¿ «í φΓ«¼
  602.     ß«íδΓ¿¿. *)
  603.          END perms.
  604.  
  605.          öá⌐½ αÑ὿ºáµ¿⌐ (¿¼∩ Σá⌐½á perms.mod):
  606.          --------------------------------------
  607.  
  608.          IMPLEMENTATION MODULE perms;
  609.  
  610.          PROCEDURE NextPerm(n:CARDINAL; VAR s:ARRAY OF BYTE;
  611.                              VAR wrap:BOOLEAN);
  612.          VAR
  613.            i:CARDINAL; (* s[i-1] - ΓѬπΘ¿⌐ ß¿¼ó«½  -  ¬á¡ñ¿ñáΓ
  614.                           ¡á ¿º¼Ñ¡Ñ¡¿Ñ. *)
  615.            j:CARDINAL; (*  s[j]  -  ß¿¼ó«½,  ¼Ñ¡∩Ѽδ⌐  ¼ÑßΓἿ
  616.                            ß s[i-1]. *)
  617.            tmp:BYTE;
  618.          BEGIN
  619.            IF n = 0 THEN
  620.              wrap := TRUE;
  621.              RETURN;
  622.            END;
  623.            i := n-1;
  624.            LOOP
  625.              IF i = 0 THEN
  626.                wrap := TRUE;
  627.                EXIT;
  628.              END;
  629.              IF s[i-1] < s[i] THEN
  630.                j := n-1;
  631.                WHILE s[j] <= s[i-1] DO
  632.                  j := j-1;
  633.                END;
  634.                tmp := s[j]; s[j] := s[i-1]; s[i-1] := tmp;
  635.                        (* »ÑαÑßΓá¡«ó¬á *)
  636.                wrap := FALSE;
  637.                EXIT;
  638.              END;
  639.              i := i-1;
  640.            END;
  641.          (* s[i]..s[n-1] ¡áσ«ñ∩Γß∩ ó «íαáΓ¡«¼ »«α∩ñ¬Ñ, ΓαÑíπÑΓß∩
  642.             »α«¿ºóÑßΓ¿ ¿σ »ÑαÑßΓá¡«ó¬π ºá ¼¿¡¿¼á½∞¡«Ñ τ¿ß½«
  643.             »ÑαѼÑΘÑ¡¿⌐. *)
  644.            j := n-1;
  645.            WHILE i<j DO
  646.              tmp := s[j]; s[j] := s[i]; s[i] := tmp;
  647.              i := i+1;
  648.              j := j-1;
  649.            END;
  650.          END NextPerm;
  651.  
  652.          END perms.
  653.  
  654.          X«Γ∩ ó  ñá¡¡«¼ »α¿¼ÑαÑ ¼«ñπ½∞ perms αÑ὿º«óδóáÑΓ Γ«½∞¬« «ñ¡π «»Ñαᵿε, »αÑñßΓáó½∩ÑΓß∩
  655.     í«½ÑÑ »«½Ñº¡δ¼ αÑ὿º«óδóáΓ∞ ó ¼«ñπ½∩σ µÑ½δÑ úαπ»»δ «»Ñαᵿ⌐.  (ÄΓ¼ÑΓ¿¼,  τΓ«  í¿í½¿«ΓѬáα∞
  656.     JPI Modula-2 ó¬½ετáÑΓ ó »«½¡πε »α«úαá¼¼π Γ«½∞¬« ΓÑ »α«µÑñπαδ ¿º ¼«ñπ½∩, ¬«Γ«αδÑ ¿ß»«½∞ºπεΓ-
  657.     ß∩ ó ¡Ñ⌐).
  658.          é ΓѬßΓÑ  »α«µÑñπαδ  ßñѽᡫ  ¡Ñí«½∞Φ«Ñ  ¿º¼Ñ¡Ñ¡¿Ñ:  VAR  s:StringType ºá¼Ñ¡Ñ¡« ¡á VAR
  659.     s:ARRAY OF BYTE.  ¥Γ« »«ºó«½∩ÑΓ π»α«ßΓ¿Γ∞ á¡á½¿º Γ¿»«ó ó ¬«¼»¿½∩Γ«αÑ.  Æá¬«⌐ Γ¿» »áαá¼ÑΓα«ó
  660.     ¡áºδóáÑΓß∩  »áαá¼ÑΓα-«Γ¬αδΓδ⌐ ¼áß߿󠿠∩ó½∩ÑΓß∩ óÑß∞¼á »«½Ñº¡δ¼,  »«ß¬«½∞¬π »«ºó«½∩ÑΓ »α«ú-
  661.     αá¼¼¿ßΓπ  »ÑαÑñáΓ∞  ó  »α«µÑñπαπ  ¼áßß¿óδ  αẽ¿τ¡δσ  αẼÑα«ó.   ¥½Ñ¼Ñ¡Γδ   s   ¡π¼ÑαπεΓß∩
  662.     0,1,...,HIGH(s), úñÑ HIGH - ßΓáαΦÑÑ º¡áτÑ¡¿Ñ. (êß»«½∞º«óá¡¿Ñ Γ¿»á BYTE, á ¡Ñ Γ¿»á CHAR »«º-
  663.     ó«½∩ÑΓ »ÑαÑß½áΓ∞ ¼áßß¿óδ Γ¿»á SHORTCARD ¡áαáó¡Ñ ß ¼áßß¿óἿ Γ¿»á CHAR).
  664.          ì¿ªÑ »α¿ó«ñ¿Γß∩  »α«úαá¼¼á,  ó ¬«Γ«α«⌐ ¼«ñπ½∞ perms ¿ß»«½∞ºπÑΓß∩ »α¿ αÑΦÑ¡¿¿ ú«½«ó«½«-
  665.     ¼«¬.
  666.  
  667.  
  668.  
  669.                             â«½«ó«½«¼¬á
  670.                             -----------
  671.  
  672.          MODULE prog5;
  673.  
  674.          (* ¥Γá  »α«úαá¼¼á ß«ºñáÑΓ ß»¿ß¬¿ 9 µ¿Σα«óδσ τ¿ßѽ,  ß«ñÑαªáΘ¿σ ¬áªñπε µ¿Σαπ «Γ 1 ñ« 9,
  675.     ∩ó½∩εΘ¿σß∩ αѺπ½∞ΓáΓ«¼ «íαáí«Γ¬¿ ΓαÑσ 3-σ µ¿Σα«óδσ τ¿ßѽ,  ΓᬪѠ߫ñÑαªáΘ¿σ ¬áªñπε µ¿Σαπ «Γ
  676.     1 ñ« 9. *)
  677.          IMPORT IO;
  678.          FROM perms IMPORT NextPerm;
  679.          PROCEDURE check(n:LONGCARD):BOOLEAN;
  680.  
  681.          (* è«¡Γα«½¿απÑΓ,  ∩ó½∩εΓß∩ ½¿ µ¿Σαδ τ¿ß½á n ¬«¼í¿¡áµ¿Ñ⌐
  682.     1..9. *)
  683.          VAR i:[1..9];
  684.              digit:[0..9];
  685.              seen:ARRAY [0..9] OF BOOLEAN;
  686.          BEGIN
  687.            seen[0] := TRUE;
  688.            FOR i := 1 TO 9 DO
  689.              seen[i] := FALSE;
  690.            END;
  691.            FOR i := 1 TO 9 DO
  692.              digit := CARDINAL(n MOD 10);
  693.          (* n MOD 10 - φΓ« «ßΓáΓ«¬ «Γ ñѽѡ¿∩ n ¡á 10. *)
  694.              IF seen[digit] THEN
  695.                RETURN FALSE;
  696.              ELSE
  697.                seen[digit] := TRUE;
  698.              END;
  699.              n := n DIV 10;
  700.          (* DIV - µÑ½«τ¿ß½Ñ¡¡«Ñ º¡áτÑ¡¿Ñ. *)
  701.            END;
  702.            RETURN TRUE;
  703.          END check;
  704.  
  705.          VAR d:ARRAY[0..8] OF SHORTCARD;
  706.              a,b,c:CARDINAL;
  707.              n:LONGCARD;
  708.              i:CARDINAL;
  709.              wrap:BOOLEAN;
  710.          BEGIN
  711.            FOR i := 0 TO 8 DO
  712.              d[i] := SHORTCARD(i) + 1;
  713.            END;
  714.  
  715.            REPEAT
  716.              a := CARDINAL(d[0])*100 + CARDINAL( d[1]*10 + d[2] );
  717.              b := CARDINAL(d[3])*100 + CARDINAL( d[4]*10 + d[5] );
  718.              c := CARDINAL(d[6])*100 + CARDINAL( d[7]*10 + d[8] );
  719.              n := LONGCARD(a) * LONGCARD(c);
  720.              IF check(n) THEN
  721.                IO.WrStr('A solution is ');
  722.                IO.WrCard(a, 1);
  723.                IO.WrStr(' x ');
  724.                IO.WrCard(b, 1);
  725.                IO.WrStr(' x ');
  726.                IO.WrCard(c, 1);
  727.                IO.WrStr(' = ');
  728.                IO.WrLngCard(n, 1);
  729.                IO.WrLn;
  730.              END;
  731.              NextPerm(9,d,wrap);
  732.            UNTIL wrap;
  733.          END prog5.
  734.  
  735.          Åα«µÑñπαá check ∩ó½∩ÑΓß∩ »α¿¼Ñα«¼ »α«µÑñπαδ Γ¿»á  "Σπ¡¬µ¿∩"  (τáßΓ«  ¿¼Ñ¡πѼ«⌐  »α«ßΓ«
  736.     "Σπ¡¬µ¿Ñ⌐").  öπ¡¬µ¿¿  óδºδóáεΓß∩  ¿º óδαáªÑ¡¿⌐ ¿ ó«ºóαáΘáѼδÑ ¿¼¿ º¡áτÑ¡¿∩ »«ñßΓáó½∩εΓß∩ ó
  737.     óδαáªÑ¡¿∩. Æ¿» αѺπ½∞ΓáΓá π¬áºδóáÑΓß∩ »«ß½Ñ ß»¿ß¬á Σ«α¼á½∞¡δσ »áαá¼ÑΓα«ó, ΓᬠτΓ«
  738.  
  739.          PROCEDURE check(n:LONGCARD):BOOLEAN;
  740.  
  741.     «íΩ∩ó½∩ÑΓ, τΓ« check - φΓ« Σπ¡¬µ¿∩,  ó«ºóαáΘáεΘá∩ αѺπ½∞ΓáΓ ½«ú¿τÑ߬«ú« Γ¿»á.  é«ºóαáΘáѼδ⌐
  742.     αѺπ½∞ΓáΓ ºáñáÑΓß∩ «»ÑαáΓ«α«¼ Σ«α¼δ
  743.                 RETURN óδαáªÑ¡¿Ñ.
  744.     ¥Γ«Γ «»ÑαáΓ«α  ¼«ªÑΓ  ßΓ«∩Γ∞ ó ½εí«¼ ¼ÑßΓÑ Σπ¡¬µ¿¿,  ¿ óδ»«½¡Ñ¡¿Ñ Ñú« »α¿ó«ñ¿Γ ¬ ºáóÑαΦÑ¡¿ε
  745.     αáí«Γδ Σπ¡¬µ¿¿, »α¿ φΓ«¼, º¡áτÑ¡¿Ñ óδαáªÑ¡¿∩ ßΓá¡«ó¿Γß∩ αѺπ½∞ΓáΓ«¼ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿.
  746.          ÄíΩ∩ó½Ñ¡¿Ñ VAR digit:[1..10] ¡πªñáÑΓß∩ ó ñÑΓá½∞¡δσ αáºΩ∩ߡѡ¿∩σ.  öá¬Γ¿τÑ߬¿, φΓ« ÑßΓ∞
  747.     ¬«α«Γ¬á∩ Σ«α¼á «íΩ∩ó½Ñ¡¿∩ VAR digit:CARDINAL[1..10],  ¿ ∩ó½∩ÑΓß∩ «íΩ∩ó½Ñ¡¿Ñ¼  »«ññ¿á»áº«¡á.
  748.     CARDINAL  - φΓ« íẫóδ⌐ Γ¿»,  »α¿ »«¼«Θ¿ ¬«Γ«α«ú« »α«óÑα∩ÑΓß∩,  ∩ó½∩ÑΓß∩ ½¿ óδαáªÑ¡¿Ñ "¬«α-
  749.     αÑ¬Γ¡δ¼" ñ½∩ ¬«¡ΓѬßΓá,  ó ¬«Γ«α«¼ «¡« ¿ß»«½∞ºπÑΓß∩. Æá¬«Ñ «»αÑñѽѡ¿Ñ ¼«ªÑΓ »«¬áºáΓ∞ß∩ ¡Ñ-
  750.     »«¡∩Γ¡δ¼,  ¡« «ñ¿¡ »α¿¼Ñα ¼«ªÑΓ αáºΩ∩ß¡¿Γ∞ Ñú«. ÅαÑñ»«½«ª¿¼, τΓ« ó »α«µÑñπαπ ó¡ÑßÑ¡« ¡Ñ¬«α-
  751.     αÑ¬Γ¡«Ñ ¿º¼Ñ¡Ñ¡¿Ñ ó¿ñá:
  752.  
  753.                digit := n MOD 10.
  754.  
  755.     Æ¿» »ÑαѼѡ¡«⌐ n ÑßΓ∞ LONGCARD,  »«φΓ«¼π n MOD 10 ΓᬪѠíπñÑΓ Γ¿»á LONGCARD. ì« íẫóδ⌐ Γ¿»
  756.     »ÑαѼѡ¡«⌐ digit ÑßΓ∞ CARDINAL, »«φΓ«¼π ¬«¼»¿½∩Γ«α ß««íΘ¿Γ, τΓ« »α¿ßóá¿óá¡¿Ñ ¡Ññ«»πßΓ¿¼« ¿º
  757.     -ºá ¡Ñß«ó»áñÑ¡¿∩ Γ¿»«ó.  Åαáó¿½∞¡δ¼ «»ÑαáΓ«α«¼ (¬á¬ ó »α«úαá¼¼Ñ) íπñÑΓ digit :=  CARDINAL(n
  758.     MOD 10).
  759.          JPI Modula-2 »«ññÑনóáÑΓ ¡áí«α í¿í½¿«ΓѬ.  ìÑ߬«½∞¬« ß½ÑñπεΘ¿σ »α¿¼Ñα«ó íπñÑΓ ¿ß»«½∞-
  760.     º«óáΓ∞ α∩ñ ¿º ¡¿σ, ñѼ«¡ßΓα¿απ∩ »α«τ¿Ñ «ß«íÑ¡¡«ßΓ¿ ∩ºδ¬á Modula-2.
  761.  
  762.                               âαáΣ¿¬á
  763.                               -------
  764.  
  765.          MODULE prog6;
  766.          (* ¥Γá »α«úαá¼¼á α¿ßπÑΓ «íΩѬΓδ ¡á φ¬αá¡Ñ. *)
  767.          FROM Lib IMPORT RANDOM, RANDOMIZE;
  768.          FROM Graph IMPORT  Circle,  Disc,  GraphMode,  TextMode,
  769.               Width, Depth;
  770.          IMPORT IO;
  771.  
  772.          TYPE
  773.            FunnyType = RECORD
  774.              q : INTEGER;  (* ç¡áτÑ¡¿Ñ. *)
  775.              d : INTEGER;  (* âαá¡¿µá ¿º¼Ñ¡Ñ¡¿⌐. *)
  776.              min : INTEGER;
  777.              max : INTEGER;
  778.            END;
  779.  
  780.          PROCEDURE init(VAR v:FunnyType);
  781.          BEGIN
  782.            v.q := v.min;
  783.            v.d := INTEGER(RANDOM(v.max-v.min));
  784.          END init;
  785.  
  786.          PROCEDURE bounce(VAR v:FunnyType);
  787.          (* êº¼Ñ¡Ñ¡¿Ñ Γᬿ¼ «íαẫ¼, τΓ« "»ÑαѬαδóáÑΓ" »α¿ óδσ«-
  788.     ñÑ ºá »αÑñѽδ. *)
  789.          BEGIN
  790.            WITH v DO
  791.              q := q + d;
  792.              IF q < min THEN
  793.                q := 2*min-q;
  794.                d := -d;
  795.              END;
  796.              IF q > max THEN
  797.                q := 2*max-q;
  798.                d := -d;
  799.              END;
  800.            END;
  801.          END bounce;
  802.  
  803.          VAR
  804.            x,y : FunnyType;
  805.            color,radius : CARDINAL;
  806.          BEGIN
  807.            RANDOMIZE;
  808.            x.max := Width-1; x.min :=0;
  809.            y.max := Depth-1; y.min :=0;
  810.            IO.WrStr ('ì᪼¿ΓÑ »α«íѽ ñ½∩ »α«ñ«½ªÑ¡¿∩,
  811.                       ½εíπε ñαπúπε ¬½áó¿Φπ ñ½∩ ºáóÑαΦÑ¡¿∩')
  812.            IO.WrLn;
  813.            WHILE NOT IO.KeyPressed() DO
  814.            END;
  815.            GraphMode;
  816.            WHILE IO.RdCharDirect() = ' ' DO
  817.              init(x);
  818.              init(y);
  819.              REPEAT
  820.                color := RANDOM(16);
  821.              UNTIL color MOD 5<> 0; (* çừ½¡¿Γ∞, ¿ß»«½∞ºπ∩ ñóá
  822.                                         µóÑΓá. *)
  823.              radius := 2 + RANDOM(5);
  824.              WHILE NOT IO.KeyPressed() DO
  825.                bounce(x);
  826.                bounce(y);
  827.                Disc(x.q, y.q, radius, color);
  828.                Circle(x.q, y.q, radius, color MOD 4);
  829.              END;
  830.              Disc(0,0,Width+Depth, 0); (* Äτ¿ßΓ¿Γ∞ φ¬αá¡. *)
  831.            END;
  832.            TextMode;
  833.          End prog6.
  834.  
  835.          î«ñπ½∞ Graph »αÑñ«ßΓáó½∩ÑΓ α∩ñ «ß¡«ó¡δσ »α«µÑñπα ñ½∩ ñ«ßΓπ»á ¬  φ¬αá¡π  ó  úαáΣ¿τÑ߬«¼
  836.     αѪ¿¼Ñ 200x320 Γ«τѬ. ÄΓ¼ÑΓ¿¼, τΓ« ó ñá¡¡«¼ »α¿¼ÑαÑ Width ¿ Depth - φΓ« ¬«¡ßΓá¡Γδ, ¿¼»«αΓ¿-
  837.     α«óá¡¡δÑ ¿º Graph.  Modula-2 »«ºó«½∩ÑΓ ¿¼»«αΓ¿α«óáΓ∞ »α«µÑñπαδ, ¬«¡ßΓá¡Γδ, »ÑαѼѡ¡δÑ ¿ Γ¿-
  838.     »δ.
  839.          Åα«úαἼᠫíΩ∩ó½∩ÑΓ Γ¿» çÇÅêæ£ (RECORD),  ß ¿¼Ñ¡Ñ¼ FunnyType.  çỿ߿ »«½Ñº¡δ ñ½∩ ßó∩-
  840.     ºá¡¡δσ »ÑαѼѡ¡δσ. ä«ßΓπ» ¬ ¬«¼»«¡Ñ¡Γá¼ »ÑαѼѡ¡«⌐ Γ¿»á çÇÅêæ£, ¡áºδóáÑ¼δ¼ "ÅÄïƒ", «ßπΘÑßΓ-
  841.     ó½∩ÑΓß∩ ½¿í« ¿ß»«½∞º«ó᡿Ѽ ß¿¼ó«½á '.' ¿ ¿¼Ñ¡Ñ¼ »«½∩, ¬á¬ ó »α«µÑñπαÑ init, ½¿í« ¿ß»«½∞º«-
  842.     ó᡿Ѽ WITH,  ¬á¬ ó »α«µÑñπαÑ bounce. X«Γ∩ «»ÑαáΓ«αδ WITH ¼«úπΓ «í½Ñúτ¿Γ∞ αáí«Γπ ß Γ¿»á¼¿ ó
  843.     »α«úαá¼¼Ñ,  ¡« «¡¿ ¼«úπΓ ßñѽáΓ∞ ΓѬßΓ Γαπñ¡δ¼ ñ½∩ τΓÑ¡¿∩,  »«φΓ«¼π ½πτΦÑ ó«ºñÑনóáΓ∞ß∩ «Γ
  844.     ¿σ ¿ß»«½∞º«óá¡¿∩.
  845.          Åα¿óÑñÑ¡¡á∩ »α«úαἼᠿ߻«½∞ºπÑΓ "¡¿º¬«πα«ó¡Ñóδ⌐" ¬½áó¿áΓπα¡δ⌐ óó«ñ  - IO.KeyPressed()
  846.     ß««íΘáÑΓ, íδ½á ½¿ ¡áªáΓá ¬½áó¿Φá, IO.RdCharDirect() τ¿ΓáÑΓ «ñ¿¡ ß¿¼ó«½ ß ¬½áó¿áΓπαδ íѺ óδ-
  847.     ó«ñá Ñú« ¡á φσ« ¿½¿ óδ»«½¡Ñ¡¿∩ ½εí«⌐ ñαπú«⌐ «íαáí«Γ¬¿. (Åα¿¼Ñτá¡¿Ñ. öπ¡¬µ¿¿, ¡Ñ ¿¼ÑεΘ¿Ñ »á-
  848.     αá¼ÑΓα«ó, ñ«½ª¡δ óδºδóáΓ∞ß∩ ß ¿ß»«½∞º«ó᡿Ѽ »πßΓ«ú« ß»¿ß¬á »áαá¼ÑΓα«ó).
  849.          öπ¡¬µ¿∩ RANDOM(n) ó«ºóαáΘáÑΓ "»ßÑóñ«-ß½πτá⌐¡«Ñ" τ¿ß½« ó ñ¿á»áº«¡Ñ 0..n-12.
  850.          RANDOMIZE ¿¡¿µ¿á½¿º¿απÑΓ  αẽ¿τ¡δÑ  »«ß½Ññ«óáΓѽ∞¡«ßΓ¿ τ¿ßѽ ñ½∩ úÑ¡Ñαᵿ¿ ¬áªñδ⌐ αáº
  851.     »α¿ ºá»π߬Ѡ»α«úαá¼¼δ (ó ºáó¿ß¿¼«ßΓ¿ «Γ óαѼѡ¿ ¿ ñáΓδ).
  852.  
  853.          Åα«úαá¼¼á ß«αΓ¿α«ó¬¿ ßΓ᫬ ΓѬßΓá ó »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩.
  854.  
  855.                             æ«αΓ¿α«ó¬á
  856.                             ----------
  857.  
  858.          MODULE prog7;
  859.          (* æ«αΓ¿α«ó¬á ßΓ᫬ ó Σá⌐½Ñ ó »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩, πñá-
  860.             ½∩∩ »«óΓ«α∩εΘ¿Ñß∩. *)
  861.          IMPORT IO, FIO, Lib, Storage, Str;
  862.  
  863.          TYPE
  864.            StringType = ARRAY [0..255] OF CHAR;
  865.            StringPointerType = POINTER TO StringType;
  866.          VAR
  867.            p : ARRAY [1..10000] OF StringPointerType;
  868.  
  869.          PROCEDURE Less(i,j:CARDINAL):BOOLEAN;
  870.          BEGIN
  871.            RETURN Str.Compare(p[i]^, p[j]^) < 0;
  872.          END Less;
  873.  
  874.          PROCEDURE Swap(i,j:CARDINAL);
  875.          VAR tmp:StringPointerType;
  876.          BEGIN
  877.            tmp := p[i]; p[i] := p[j]; p[j] := tmp;
  878.          END Swap;
  879.  
  880.          VAR s: StringType;
  881.              len:CARDINAL;
  882.              i,n:CARDINAL;
  883.              InFile,OutFile:FIO.File;
  884.              buffer:ARRAY [1..512+FIO.BufferOverhead] OF BYTE;
  885.          BEGIN
  886.            (* è«¡Γα«½∞ »áαá¼ÑΓα«ó. *)
  887.            IF Lib.ParamCount() <> 2 THEN
  888.              IO.WrStr('Try again :prog7 input-file output-file');
  889.              IO.WrLn;
  890.              HALT;
  891.            END;
  892.             (* ù¿ΓáΓ∞ ßΓ᫬π ó *)
  893.            Lib.ParamStr(s, 1); InFile := FIO.Open(s);
  894.            FIO.AssignBuffer(InFile, buffer);
  895.            n :=0;
  896.            LOOP
  897.              FIO.RdStr(InFile, s);
  898.              IF FIO.EOF THEN
  899.                EXIT;
  900.              END;
  901.              IF n = HIGH(p) THEN
  902.                IO.WrStr('Too many lines!');
  903.                IO.WrLn;
  904.                EXIT;
  905.              END;
  906.              INC(n);
  907.              len := Str.Length(s);
  908.              Storage.ALLOCATE(p[n], len + 1);
  909.              Lib.Move(ADR(s), ADR(p[n]^), len + 1;
  910.            END;
  911.  
  912.            FIO.Close(InFile);
  913.  
  914.            (* æ«αΓ¿α«óáΓ∞ Σá⌐½ ó »á¼∩Γ¿. *)
  915.            Lib.HSort(n, Less, Swap);
  916.  
  917.            (* éδñáΓ∞ Σá⌐½. *)
  918.            Lib.ParamStr(s, 2); OutFile := FIO.Create(s);
  919.            FIO.AssignBuffer(OutFile, buffer);
  920.            FOR i := 1 TO n DO
  921.              IF (i = 1) OR (Str.Compare(p[i]^, p[i-1]^) <> 0) THEN
  922.                FIO.WrStr(OutFile, p[i]^);
  923.                FIO.WrLn(outFile);
  924.              END;
  925.            END;
  926.            FIO.Close(OutFile);
  927.          END prog7.
  928.  
  929.          Lib.ParamCount() ó«ºóαáΘáÑΓ ¬«½¿τÑßΓó« »áαá¼ÑΓα«ó ó ¬«¼á¡ñ¡«⌐ ßΓα«¬Ñ »α¿ ó맮óÑ  »α«ú-
  930.     αá¼¼δ.
  931.          Lib.ParamStr(s,n) ¬«»¿απÑΓ n-⌐ »áαá¼ÑΓα ó s.  àß½¿ »α«úαἼᠺá»π߬áÑΓß∩ ¿º ßαÑñδ  JPI
  932.     Modula-2, Γ« ¬«¼á¡ñ¡á∩ ßΓα«¬á ¼«ªÑΓ íδΓ∞ πßΓá¡«ó½Ñ¡á »α¿ »«¼«Θ¿ Options-Command-Line.
  933.          ä½∩ »αÑñßΓáó½Ñ¡¿∩ Σá⌐½á »α«úαἼᠿ߻«½∞ºπÑΓ ¼áßß¿ó π¬áºáΓѽÑ⌐.  àß½¿ σ - φΓ« »ÑαѼѡ-
  934.     ¡á∩-π¬áºáΓѽ∞,  Γ« σ^ »αÑñßΓáó½∩ÑΓ «íΩѬΓ, ¡á ¬«Γ«αδ⌐ π¬áºδóáÑΓ σ. èáªñá∩ ßΓ᫬á Σá⌐½á ßó∩-
  935.     ºδóáÑΓß∩ ß í½«¬«¼ »á¼∩Γ¿ ΓαÑíπѼ«ú« αẼÑαá.  î«ñπ½∞ FIO (Σá⌐½«óδ⌐ óó«ñ/óδó«ñ) ¿ß»«½∞ºπÑΓß∩
  936.     ñ½∩ τΓÑ¡¿∩/ºá»¿ß¿ ñ¿ß¬«óδσ Σá⌐½«ó.  é맮ó »α«µÑñπαδ FIO.AssignBuffer ¼«ªÑΓ íδΓ∞ «»πΘÑ¡,  ¡«
  937.     »α«úαá¼¼á Γ«úñá íπñÑΓ αáí«ΓáΓ∞ º¡áτ¿Γѽ∞¡« ¼Ññ½Ñ¡¡ÑÑ.  ÉẼÑα íπΣÑαá óδí¿αáÑΓß∩ Γá¬,  τΓ«íδ
  938.     «»Γ¿¼¿º¿α«óáΓ∞ αáí«Γπ ß ñ¿ß¬«¼.  çá¼ÑΓ¿¼, τΓ« ¡Ñ«íσ«ñ¿¼« ºá¬αδóáΓ∞ «Γ¬αδΓδ⌐ Σá⌐½, ¿ß»«½∞ºπ∩
  939.     FIO.Close; ó »α«Γ¿ó¡«¼ ß½πτáÑ íπΣÑα ¡Ñ íπñÑΓ ºá»¿ßá¡ ó Σá⌐½.
  940.          Åα∩¼«Ñ ¬«»¿α«óá¡¿Ñ  ¡Ñ  ¼«ªÑΓ  íδΓ∞  ¿ß»«½∞º«óá¡« ñ½∩ ¬«»¿α«óá¡¿∩ ó óδñѽѡ¡πε »á¼∩Γ∞,
  941.     Γ.¬.  Γ«½∞¬« len+1 íá⌐Γ«ó í佫 óδñѽѡ«,  á p[n]^:=s íπñÑΓ ¬«»¿α«óáΓ∞ 256  íá⌐Γ«ó,  »«φΓ«¼π
  942.     ó¼ÑßΓ« ¡Ñú« ß½ÑñπÑΓ ¿ß»«½∞º«óáΓ∞ í¿í½¿«ΓÑτ¡πε »α«µÑñπαπ Lib.  Move. éßΓα«Ñ¡¡πε Σπ¡¬µ¿ε ADR,
  943.     ó«ºóαáΘáεΘπε áñαÑß »ÑαѼѡ¡«⌐, ß½ÑñπÑΓ »α¿¼Ñ¡∩Γ∞ «τÑ¡∞ á¬¬παáΓ¡«, »«ß¬«½∞¬π ÑÑ »áαá¼ÑΓαδ ¡Ñ
  944.     ¬«¡Γα«½¿απεΓß∩ ¡á Γ¿».
  945.          Åα«µÑñπαá Lib.HSort ¿¼ÑÑΓ ó ¬áτÑßΓóÑ »áαá¼ÑΓα«ó ¬«½¿τÑßΓó« ó ¼áßß¿óÑ,  ¬«Γ«αδ⌐  ñ«½ªÑ¡
  946.     íδΓ∞ «Γß«αΓ¿α«óá¡,  ¿ ñóá »áαá¼ÑΓαá Γ¿»á "Åα«µÑñπαá" (Procedure), ∩ó½∩εΘ¿σß∩ »«ñ»α«úαἼἿ
  947.     ñ½∩ ßαáó¡Ñ¡¿∩ ¿ »ÑαÑßΓᡫ󬿠φ½Ñ¼Ñ¡Γ«ó.
  948.          QSort - φΓ« á½∞ΓÑα¡áΓ¿ó¡á∩ »α«µÑñπαá,  ¬«Γ«αá∩ ΓᬪѠ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡á ¿ ¬«Γ«αá∩
  949.     »αÑñßΓáó½∩ÑΓ ñαπú«⌐ á½ú«α¿Γ¼ (Quicksort ó¼ÑßΓ« Heapsort),  ¬«Γ«αδ⌐ ∩ó½∩ÑΓß∩ í«½ÑÑ íδßΓαδ¼ ó
  950.     ßαÑñ¡Ñ¼,  ¡«  í«½ÑÑ  ¼Ññ½Ñ¡¡δ¼  ó  ¡á¿σπñΦѼ  ß½πτáÑ.  ì¿ªÑ »«ñα«í¡« «»¿ßδóáÑΓß∩ αÑ὿ºáµ¿∩
  951.     Lib.QSort, Γ.¬. «¡á ¿ß»«½∞ºπÑΓ αѬπαß¿ó¡πε »α«µÑñπαπ.
  952.  
  953.          öαáú¼Ñ¡Γδ Σá⌐½«ó Lib.def ¿ Lib.mod:
  954.          -----------------------------------
  955.  
  956.          DEFINITION MODULE LIb;
  957.  
  958.          ...
  959.  
  960.          TYPE
  961.            CompareProc = PROCEDURE(CARDINAL, CARDINAL):BOOLEAN;
  962.            SwapProc = PROCEDURE(CARDINAL, CARDINAL);
  963.  
  964.          PROCEDURE QSort(n:CARDINAL; Less:CompareProc;
  965.                          Swap:SwapProc);
  966.          ...
  967.  
  968.          END Lib.
  969.  
  970.  
  971.          IMPLEMENTATION MODULE Lib;
  972.  
  973.          ...
  974.  
  975.          PROCEDURE QSort(n:CARDINAL; Less:CompareProc;
  976.                          Swap:SwapProc);
  977.            PROCEDURE Sort(l,r:CARDINAL);
  978.            VAR i,j:CARDINAL;
  979.            BEGIN
  980.              WHILE r > l DO
  981.                i := l+1;
  982.                j := r;
  983.                WHILE i <= j DO
  984.                  WHILE (i <= j) AND NOT Less(l,i) DO INC(i) END;
  985.                  WHILE (i <= j) AND Less(l,j) DO DEC(j) END;
  986.                  IF i <= j THEN Swap(i,j); INC(i); DEC(j) END;
  987.                END;
  988.                IF j # l THEN Swap(j,l) END;
  989.                IF j+j > r+l THEN     (* ÉѬπαß¿ó¡δÑ ó맮óδ. *)
  990.                  Sort(j+1,r);
  991.                  r := j-1;
  992.                ELSE
  993.                  Sort(l,j-1);
  994.                  l := j+1;
  995.                END;
  996.              END;
  997.            END sort;
  998.          BEGIN
  999.            Sort(1,n);
  1000.          END QSort;
  1001.  
  1002.          ...
  1003.  
  1004.          END Lib.
  1005.  
  1006.          Åα«µÑñπαá Sort «íΩ∩ó½∩ÑΓß∩ ó »α«µÑñπαÑ QSort.  æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞,  τΓ« «¡á ¿¼ÑÑΓ ñ«ßΓπ»
  1007.     ¬á¬ ¬ ßó«¿¼ »áαá¼ÑΓαá¼ ¿ ½«¬á½∞¡δ¼ »ÑαѼѡ¡δ¼ «σóáΓδóáεΘÑ⌐ »α«µÑñπαδ.
  1008.          QuickSort -  á½ú«α¿Γ¼  Σπ¡¬µ¿«¡¿απÑΓ »« ¼ÑΓ«ñπ ñѽѡ¿∩ Σá⌐½á ¡á «ß¡«óÑ óδíαá¡¡«ú« φ½Ñ-
  1009.     ¼Ñ¡Γá (ó ñá¡¡«¼ ß½πτáÑ »Ñαó«ú«),  ¿ ºáΓѼ αѬπαß¿ó¡«ú« ó맮óá ßÑí∩  ßἫú«  ñ½∩  ß«αΓ¿α«ó¬¿
  1010.     ñóπσ »«½πτ¿óΦ¿σß∩ ¼áßß¿ó«ó. é맮ó ñ½∩ ß«αΓ¿α«ó¬¿ ßΓáαΦÑ⌐ »«½«ó¿¡δ ºá¼Ñ¡∩ÑΓß∩ ¡á µ¿¬½¿τÑ߬¿⌐
  1011.     ó«ºóαáΓ ó ¡áτὫ »α«µÑñπαδ (»α«¿ºó«ñ¿Γß∩ "«ßΓáΓ«τ¡«-αѬπαß¿ó¡á∩" «»Γ¿¼¿ºáµ¿∩),  τΓ« «íÑß»Ñ-
  1012.     τ¿óáÑΓ »«ΓαÑí¡«ßΓ∞ ó ¡Ñí«½∞Φ«¼ αẼÑαÑ ßΓѬá,  ¡Ñ«íσ«ñ¿¼«¼ ñ½∩ αѬπαß¿ó¡«⌐ á¬Γ¿óᵿ¿. Äñ¡«⌐
  1013.     ¿º »α«í½Ñ¼ ¿ß»«½∞º«óá¡¿∩ αѬπαß¿¿ ∩ó½∩ÑΓß∩ Γ«,  τΓ« αẼÑα ¡Ñ«íσ«ñ¿¼«ú« ßΓѬᠠíπñÑΓ  ¿º¼Ñ-
  1014.     ¡∩Γ∞ß∩ ó ºáó¿ß¿¼«ßΓ¿ «Γ αẼÑαá óσ«ñá (size of the input(?)).  ä¿αÑ¬Γ¿óá ¬«¼»¿½∩Γ«αá "¬«¡Γ-
  1015.     α«½∞ ßΓѬá" (* $S+ *) ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩ »α«óÑન »ÑαÑ»«½¡Ñ¡¿∩ ßΓѬá (τΓ« »α«¿ºó«ñ¿Γ,
  1016.     Ñß½¿ Ñú« ¡Ñ ¬«¡Γα«½¿α«óáΓ∞,  óÑß∞¼á ¡Ñ»αÑñ߬áºπѼδ⌐ φΣΣѬΓ),  σ«Γ∩,  ¬«¡Ñτ¡«, ¿ íπñÑΓ ¿¼ÑΓ∞
  1017.     ß½ÑñßΓó¿Ñ¼ ¡Ñ¬«Γ«α«Ñ πóѽ¿τÑ¡¿Ñ óαѼѡ¿ ¿ß»«½¡Ñ¡¿∩.
  1018.          é ºá¬½ετÑ¡¿Ñ  »α¿ó«ñ¿Γß∩  í«½ÑÑ ñ½¿¡¡δ⌐ »α¿¼Ñα,  ¿½½εßΓα¿απεΘ¿⌐ α∩ñ «ß«íÑ¡¡«ßΓÑ⌐ ∩ºδ¬á
  1019.     Modula-2,  ¬«Γ«αδÑ ÑΘÑ ¡Ñ π»«¼¿¡á½¿ß∞: »ÑαѼѡ¡δÑ Γ¿»δ, ºá»¿ß¿ ß óáα¿á¡ΓἿ ¿ «»ÑαáΓ«αδ óδ-
  1020.     í«αá CASE.
  1021.  
  1022.                             èá½∞¬π½∩Γ«α
  1023.                             -----------
  1024.  
  1025.          MODULE prog8;
  1026.          IMPORT IO,Str,Storage;
  1027.  
  1028.          TYPE
  1029.            TokenType = (number,  add,  sub,  mul,  div, LeftParen,
  1030.                       RightParen, end);
  1031.            SyntacticType = (main, exp, term, factor);
  1032.            TreeType = POINTER TO TreeRecordType;
  1033.            TreeRecordType = RECORD
  1034.              CASE kind:TokenType OF
  1035.              | number:
  1036.                NumberValue : LONGREAL;
  1037.              | add,sub,mul,div :
  1038.                left : TreeType;
  1039.                right : TreeType;
  1040.              END;
  1041.            END;
  1042.  
  1043.          VAR
  1044.            c:CHAR;
  1045.            token:TokenType;
  1046.            TokenNumberValue:LONGREAL;
  1047.  
  1048.          PROCEDURE error(s:ARRAY OF CHAR);
  1049.          BEGIN
  1050.            IO.WrStr(s);
  1051.            IO.WrLn;
  1052.            HALT;
  1053.          END error;
  1054.  
  1055.          PROCEDURE readtoken;
  1056.          VAR
  1057.            s:ARRAY[0...99] OF CHAR;
  1058.            i:[0..99];
  1059.            done:BOOLEAN;
  1060.            oldc:CHAR;
  1061.          BEGIN
  1062.            LOOP
  1063.              oldc := c;
  1064.              c := IO.RdChar();
  1065.              CASE oldc OF
  1066.              | ' ' :
  1067.              | '+' : token := add; EXIT;
  1068.              | '-' : token := sub; EXIT;
  1069.              | '*' : token := mul; EXIT;
  1070.              | '/' : token := div; EXIT;
  1071.              | '(' : token := LeftParen; EXIT;
  1072.              | ')' : token := RightParen; EXIT;
  1073.              | CHAR(10),CHAR(13),CHAR(26) :token := end; EXIT;
  1074.              | '0'..'9' : (* τ¿ΓáÑΓ ñÑ⌐ßΓó¿Γѽ∞¡«Ñ τ¿ß½« *)
  1075.                i := 1; s[0] := oldc;
  1076.                WHILE (c >= '0') AND (c <= '9') DO
  1077.                  s[i] := c;
  1078.                  INC(i);
  1079.                  c := IO.RdChar();
  1080.                END;
  1081.                IF c<>'.' THEN (* ñ«íáó½∩ÑΓ ñÑß∩Γ¿τ¡πε Γ«τ¬π, Ñß½¿
  1082.                                  ¡ÑΓ ¡¿τÑú« ¡á óσ«ñÑ *)
  1083.                  s[i] := '.';
  1084.                  INC(i);
  1085.                ELSE
  1086.                  REPEAT (* τ¿ΓáÑΓ ñα«í¡πε τáßΓ∞ *)
  1087.                    s[i] := c;
  1088.                    INC(i);
  1089.                    c := IO.RdChar();
  1090.                  UNTIL (c < '0') OR (c > '9');
  1091.                END;
  1092.                s[i] := CHAR(0);
  1093.                TokenNumberValue := Str.StrToReal(s, done);
  1094.                IF NOT done THEN
  1095.                  error('Bad number?');
  1096.                END;
  1097.                token := number;
  1098.                EXIT;
  1099.              ELSE
  1100.                error('Bad character');
  1101.              END;
  1102.            END;
  1103.          END readtoken;
  1104.  
  1105.          PROCEDURE read(what:SyntacticType):TreeType;
  1106.          VAR t,t1:TreeType;
  1107.          BEGIN
  1108.            CASE what OF
  1109.            | factor :
  1110.              IF token = LeftParen THEN
  1111.                readtoken;
  1112.                t := read(exp);
  1113.                IF token = RightParen THEN
  1114.                  readtoken;
  1115.                ELSE
  1116.                  error("Missing ')'");
  1117.                END;
  1118.              ELSIF token = number THEN
  1119.                Storage.ALLOCATE(t, SIZE(t^));
  1120.                t^.kind := number;
  1121.                t^.NumberValue := TokenNumberValue;
  1122.                readtoken;
  1123.              ELSE
  1124.                error('Missing number?');
  1125.              END;
  1126.            | term:
  1127.              t := read(factor);
  1128.              WHILE (token = mul) OR (token = div) DO
  1129.                t1 := t;
  1130.                Storage.ALLOCATE(t, SIZE(t^));
  1131.                t^.kind := token;
  1132.                readtoken;
  1133.                t^.left := t1;
  1134.                t^.right := read(factor);
  1135.              END;
  1136.            | exp:
  1137.              t := read(term);
  1138.              WHILE (token = add) OR (token = sub) DO
  1139.                t1 := t;
  1140.                Storage..ALLOCATE(t, SIZE(t^));
  1141.                t^.kind := token;
  1142.                readtoken;
  1143.                t^.left := t1;
  1144.                t^.right := read(term);
  1145.              END;
  1146.            | main :
  1147.              c := IO.RdChar();
  1148.              readtoken;
  1149.              t := read(exp);
  1150.              IF (token <> end) THEN
  1151.                error('Missing  operator?');
  1152.              END;
  1153.            END;
  1154.            RETURN t;:
  1155.          END read;
  1156.  
  1157.          PROCEDURE eval(t:TreeType):LONGREAL;
  1158.          BEGIN
  1159.            CASE t^.kind OF
  1160.            | number : RETURN t^.NumberValue;
  1161.            | add : RETURN eval(t^.left) + eval(t^.right);
  1162.            | sub : RETURN eval(t^.left) - eval(t^.right);
  1163.            | mul : RETURN eval(t^.left) * eval(t^.right);
  1164.            | div : RETURN eval(t^.left) / eval(t^.right);
  1165.            END;
  1166.          END eval;
  1167.  
  1168.          VAR
  1169.            t:TreeType;
  1170.            result:LONGREAL;
  1171.          BEGIN
  1172.            LOOP
  1173.              IO.WrStr('Enter expression : ');
  1174.              t := read(main);
  1175.              result := eval(t);
  1176.              IO.WrStr(' = ');
  1177.              IO.WrLngReal(result, 4, 0);
  1178.              IO.WrLn;
  1179.            END;
  1180.          END prog8.
  1181.  
  1182.          Åα«úαἼᠻαÑñßΓáó½∩ÑΓ ß«í«⌐ »α«ßΓ«⌐ ¿¡ΓÑαá¬Γ¿ó¡δ⌐ ¬á½∞¬π½∩Γ«α,  ºá»αáΦ¿óáεΘ¿⌐ óδαáªÑ-
  1183.     ¡¿Ñ, »αÑ«íαáºπεΘ¿⌐ Ñú« ó "ñÑαÑó«" ¿ ºáΓѼ óδτ¿ß½∩εΘ¿⌐ Ñú« ¿ »ÑτáΓáεΘ¿⌐ αѺπ½∞ΓáΓ. éδαáªÑ¡¿∩
  1184.     «íδτ¡« »αÑñßΓáó½∩εΓß∩ ó ó¿ñÑ ñÑαÑó∞Ñó, ¡á»α¿¼Ñα, óδαáªÑ¡¿Ñ (5-9)*(4+7) »αÑñßΓáó½∩ÑΓß∩ ó ó¿-
  1185.     ñÑ ñ¿áúαá¼¼δ ñÑαÑóá:
  1186.  
  1187.                                  *
  1188.                                /   \
  1189.                               -     +
  1190.                             /  \   /  \
  1191.                            5    9 4    7
  1192.  
  1193.     (»« α∩ñπ »α¿τ¿¡ ñ¿áúαá¼¼δ-"ñÑαÑó∞∩" «íδτ¡« ¿º«íαáªáεΓß∩ αáßΓπΘ¿¼¿ ó¡¿º, ß "¬«α¡Ñ¼" ó óÑαΦ¿-
  1194.     ¡Ñ).
  1195.          ÄíΩ∩ó½Ñ¡¿∩
  1196.  
  1197.          TokenType = (number,add,sub,mul,div,LeftParen,
  1198.                       RightParen,end);
  1199.          SyntacticType = (main,exp,term,factor);
  1200.  
  1201.          «íΩ∩ó½∩εΓ »ÑαÑτ¿ß½¿¼δÑ Γ¿»δ ñá¡¡δσ.  ç¡áτÑ¡¿∩¼¿ »ÑαÑτ¿ß½¿¼δσ Γ¿»«ó ∩ó½∩εΓß∩ »ÑαÑτ¿ß½¿-
  1202.     ¼δÑ ó ß»¿ß¬áσ óѽ¿τ¿¡δ.
  1203.  
  1204.          ÄíΩ∩ó½Ñ¡¿∩
  1205.  
  1206.          TreeType = POINTER TO TreeRecordType;
  1207.          TreeRecordType = RECORD
  1208.             CASE kind:TokenType OF
  1209.             | number:
  1210.                 NumberValue:LONGREAL;
  1211.             | add,sub,mul,div:
  1212.                 left:TreeType;
  1213.                 right:TreeType;
  1214.             END;
  1215.          END;
  1216.  
  1217.     «íΩ∩ó½∩εΓ "αѬπαß¿ó¡δ⌐" Γ¿» ñá¡¡δσ.  ¥Γ« «º¡áτáÑΓ,  τΓ« ñÑαÑó« ß«ºñáÑΓß∩ ó  ºáó¿ß¿¼«ßΓ¿  «Γ
  1218.     kind,  ¿ ß«ñÑαª¿Γ ½¿í« ñÑ⌐ßΓó¿Γѽ∞¡«Ñ τ¿ß½«, ½¿í« ½Ñó«Ñ ¿ »αáó«Ñ »«ññÑαÑó∞∩. è½ετÑó«Ñ ß½«ó«
  1219.     CASE «í«º¡áτáÑΓ óáα¿á¡Γ¡«Ñ »αÑñ½«ªÑ¡¿Ñ. è«¡Ñτ¡«, φΓ« ¼«ªÑΓ íδΓ∞ «í∞∩ó½Ñ¡« »«ßαÑñßΓó«¼
  1220.          TreeType = POINTER TO TreeType;
  1221.          TreeRecordType = RECORD
  1222.            king:TokenType;
  1223.            NumberValue:LONGREAL;
  1224.            left:TreeType;
  1225.            right:TreeType;
  1226.          END;
  1227.     ì« ΓᬫѠ«»αÑñѽѡ¿Ñ ú«αáºñ« σπªÑ »αÑñßΓáó½∩ÑΓ ß¼δß½ »αÑñ½«ªÑ¡¿∩  ¿,  ¬  Γ«¼π  ªÑ,  ΓαÑíπÑΓ
  1228.     í«½∞ΦÑ »á¼∩Γ¿.
  1229.          é »αÑñßΓáó½Ñ¡¡«⌐ »α«úαἼѠ¿¼ÑεΓß∩ ¡Ñ߬«½∞¬« «»ÑαáΓ«α«ó CASE,  ¿ß»«½∞ºπѼδσ ñ½∩ óδí«αá
  1230.     «ñ¡«⌐ ¿º úαπ»» «»ÑαáΓ«α«ó ñ½∩ óδ»«½¡Ñ¡¿∩ ó ºáó¿ß¿¼«ßΓ¿ «Γ óδαáªÑ¡¿∩, ß½ÑñπεΘÑú« ºá ¬½ετÑóδ¼
  1231.     ß½«ó«¼ CASE.
  1232.          îÑΓ¬¿ óáα¿á¡Γ«ó ñ«½ª¡δ íδΓ∞ ¬«¡ßΓá¡ΓἿ, ¡« ñ«»π߬áεΓß∩ ñ¿á»áº«¡δ, ¡á»α¿¼Ñα, '0'..'9'.
  1233.          Ä»ÑαáΓ«α CASE ó »α«µÑñπαÑ readtoken ¿¼ÑÑΓ ñ«»«½¡¿Γѽ∞¡πε τáßΓ∞ ELSE,  ¬«Γ«αá∩ óδ»«½¡∩-
  1234.     ÑΓß∩, Ñß½¿ ¡Ñ «í¡áαπª¿óáÑΓß∩ ß«ó»áñÑ¡¿∩ ¡¿ ß «ñ¡«⌐ ¿º ¼ÑΓ«¬ óδí«αá.
  1235.          ìá φΓ«¼ ¼δ ºáóÑαΦáѼ αáºñѽ «íπτÑ¡¿∩.  îδ ¡áñÑѼß∩, τΓ« »α¿óÑñÑ¡¡δÑ ó ¡Ñ¼ »α¿¼Ñαδ «¬á-
  1236.     ºá½¿ß∞ ¿¡ΓÑαÑß¡δ¼¿ ñ½∩ óáß.  è«¡Ñτ¡« ªÑ,  ¼δ ¡Ñ «ßóÑΓ¿½¿ ºñÑß∞ ¼¡«ú¿σ »π¡¬Γ«ó. äαπú¿Ñ ú½áóδ
  1237.     απ¬«ó«ñßΓóá ñáεΓ í«½ÑѠߪáΓπε,  ¡« »«½¡πε ¿¡Σ«α¼áµ¿ε,  ¬«Γ«απε óδ ¼«ªÑΓÑ  ¿ß»«½∞º«óáΓ∞  ¬á¬
  1238.     ß»αáó«τ¡πε.  èα«¼Ñ Γ«ú«,  óδ»πΘÑ¡« í«½∞Φ«Ñ ¬«½¿τÑßΓó« σ«α«Φ¿σ ¬¡¿ú »« Modula-2, ó Γ«¼ τ¿ß½Ñ
  1239.     ¬¡¿úá ì¿¬½áπßá é¿αΓá "Åα«úαá¼¼¿α«óá¡¿Ñ ¡á ∩ºδ¬Ñ Modula-2" (ΓαÑΓ∞Ñ ¿ºñá¡¿Ñ).
  1240.