home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-02-23 | 53.3 KB | 1,240 lines |
-
- â ï Ç é Ç 2
- ============
-
- ééàäàìêà é æêæÆàîô ÅÉÄâÉÇîîêÉÄéÇìêƒ JPI Modula-2
- ================================================
-
- Modula-2 - φΓ« ß«óαѼѡ¡δ⌐ ∩ºδ¬ »α«úαá¼¼¿α«óá¡¿∩ «íΘÑú« ¡áº¡áτÑ¡¿∩. Ä¡ íδ½ ß«ºñᡠ쿬-
- ½áπß«¼ é¿αΓ«¼ ¿ ∩ó½∩ÑΓß∩ »α∩¼δ¼ ¡áß½Ññ¡¿¬«¼ ∩ºδ¬á Pascal, ¬«Γ«αδ⌐ Γá¬ªÑ íδ½ αáºαáí«Γá¡ é¿α-
- Γ«¼. éδ ¼«ªÑΓÑ ñπ¼áΓ∞ « ∩ºδ¬Ñ Modula-2, τΓ« «¡ "½πτΦÑ", τѼ Pascal. é¿αΓ ß«ºñáóá½ ∩ºδ¬, ¬«-
- Γ«αδ⌐ ¼«ª¡« í佫 íδ ¿ß»«½∞º«óáΓ∞ ñ½∩ »α«úαá¼¼¿α«óá¡¿∩ Σπ¡¬µ¿⌐ «τÑ¡∞ ¡¿º¬«ú« πα«ó¡∩ (ñ«ßΓπ»
- ¬ ñ¿ß¬á¼, óó«ñ/óδó«ñ τÑαѺ »«αΓδ ¿ Γ.».), ¡áα∩ñπ ß óδß«¬«πα«ó¡Ñóδ¼ »α«úαá¼¼¿α«ó᡿Ѽ, Γá-
- ¬¿¼, ¬á¬ íáºδ ñá¡¡δσ, ¬«¼»¿½∩Γ«αδ, »α«µÑßß«αδ ß½«ó ¿ αáßτÑΓ¡δÑ ß¿ßΓѼδ. (æ¿ßΓÑ¼á »α«úαá¼¼¿-
- α«óá¡¿∩ JPI Modula-2 ó ¡áßΓ«∩ΘÑÑ óαѼ∩ ¡á»¿ßá¡á ¡á ∩ºδ¬Ñ Modula-2 Σ¿α¼δ JPI).
- äá¡¡á∩ ú½áóá ß«ñÑαª¿Γ ¬αáΓ¬«Ñ «»¿ßá¡¿Ñ ¡Ñ¬«Γ«αδσ «ß¡«ó¡δσ «ß«íÑ¡¡«ßΓÑ⌐ JPI Modula-2. é
- ß½ÑñπεΘ¿σ αáºñѽáσ óδ ß¼«ªÑΓÑ ¡á⌐Γ¿ í«½ÑÑ »«½¡«Ñ «»¿ßá¡¿Ñ ¿¡ΓÑαÑßπεΘ¿σ óáß óÑΘÑ⌐.
-
- î«ñπ½¿
- ------
- Åα«úαá¼¼á ¡á Modulá-2 «íδτ¡« ß«ñÑαª¿Γ ¡áí«α ¼«ñπ½Ñ⌐. èáªñδ⌐ ¼«ñπ½∞ »αÑñßΓáó½∩ÑΓ ß«í«⌐
- ¡áí«α ß««ΓóÑΓßΓóπεΘ¿σ »α«µÑñπα ¿ ñá¡¡δσ, »αÑñßΓáó½∩εΘ¿σ ¿º«½¿α«óá¡¡πε ßѬµ¿ε óßÑ⌐ »α«úαá¼-
- ¼δ. î«ñπ½∞ ß«ßΓ«¿Γ ¿º ñóπσ τáßΓÑ⌐: ¼«ñπ½∩ «»¿ßá¡¿⌐ (definition module), «»¿ßδóáεΘÑú«, τΓ«
- ñá¡¡δ⌐ ¼«ñπ½∞ ¼«ªÑΓ ñѽáΓ∞, ¿ ¼«ñπ½∩ αÑ὿ºáµ¿⌐ (implementation module), ¬«Γ«αδ⌐ «»¿ßδóáÑΓ
- ß»«ß«í «ßπΘÑßΓó½Ñ¡¿∩ ñá¡¡δσ Σπ¡¬µ¿⌐.
- î«ñπ½∞ «»¿ßá¡¿⌐ ß«ñÑαª¿Γ ß»¿ß«¬ óßÑσ »α«µÑñπα ¿ ñá¡¡δσ, ¬ ¬«Γ«αδ¼ óδ ¿¼ÑÑΓÑ ñ«ßΓπ».
- éßÑ »α«µÑñπαδ ¿ ñá¡¡δÑ, ¡Ñ ó¬½ετÑ¡¡δÑ ó ¼«ñπ½∞ «»¿ßá¡¿⌐, «ßΓáεΓß∩ ½«¬á½∞¡δ¼¿ ó ¼«ñπ½Ñ αÑá-
- ½¿ºáµ¿⌐ ¿, ß½Ññ«óáΓѽ∞¡«, ¡Ñ "ó¿ñ¿¼δ" ¿º «ßΓá½∞¡δσ τáßΓÑ⌐ »α«úαá¼¼δ. î«ñπ½∞, ¿ß»«½∞ºπεΘ¿⌐
- ñαπú«⌐ ¼«ñπ½∞, ¡áºδóáÑΓß∩ "¬½¿Ñ¡Γ". î«ñπ½∞, »αÑñ«ßΓáó½∩εΘ¿⌐ Σπ¡¬µ¿¿ ñαπú«¼π ¼«ñπ½ε, ¡áºδóá-
- ÑΓß∩ "ßÑαóÑα". î«ñπ½∞ ¼«ªÑΓ «ñ¡«óαѼѡ¡« íδΓ∞ ¿ ¬½¿Ñ¡Γ«¼, ¿ ßÑαóÑα«¼.
- Æ«τ¡« ΓᬠªÑ, ¬á¬ »α«µÑñπαá ∩ó½∩ÑΓß∩ áíßΓαᬵ¿Ñ⌐ ñ½∩ ߬αδΓ¿∩ ñÑΓá½Ñ⌐, Γᬠ¿ ¼«ñπ½∞ ¼«-
- ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩ ߬αδΓ¿∩ ñÑΓá½Ñ⌐ µÑ½«ú« α∩ñá ßó∩ºá¡¡δσ ß ¡¿¼ »α«µÑñπα ¿ ½εíδσ «íΘ¿σ
- ßΓαπ¬Γπα ñá¡¡δσ.
-
- Éáºñѽ∞¡á∩ ¬«¼»¿½∩µ¿∩
- ---------------------
-
- î«ñ㫨 ¼«úπΓ Γαá¡ß½¿α«óáΓ∞ß∩ ¡Ñºáó¿ß¿¼« ¿ ß«σαá¡∩Γ∞ß∩ ó ó¿ñÑ «íΩÑ¬Γ¡«ú« ¬«ñá, ¬«Γ«αδ⌐
- »«ºñ¡ÑÑ ¼«ªÑΓ ßΓáΓ∞ τáßΓ∞ε »«½¡«⌐ »α«úαá¼¼δ. æ¿ßΓѼá JPI Modula-2 »«ßΓáó½∩ÑΓß∩ ß αáºó¿Γδ¼
- ¡áí«α«¼ ¼«ñπ½Ñ⌐ ñ½∩ óó«ñá/óδó«ñá, π»αáó½Ñ¡¿∩ «¬¡á¼¿, π»αáó½Ñ¡¿∩ »α«µÑßßἿ, «íαáí«Γ¬«⌐
- ßΓ᫬ ¿ Γ.ñ.
-
- ÇóΓ«¼áΓ¿τÑ߬¿Ñ í¿í½¿«ΓѬ¿
- -------------------------
-
- Modula-2 ¿¼ÑÑΓ óßΓα«Ñ¡¡δÑ ßαÑñßΓóá π»αáó½Ñ¡¿∩ áóΓ«¼áΓ¿τÑ߬¿¼¿ í¿í½¿«ΓѬἿ. 諼»¿½∩Γ«α
- ó σ«ñÑ ¬«¼»¿½∩µ¿¿ ¼«ñπ½∩ úÑ¡Ñα¿απÑΓ í¿í½¿«ΓÑτ¡δ⌐ Σá⌐½. Æá¬«⌐ »«ñσ«ñ ñѽáÑΓ ó«º¼«ª¡δ¼ ó¬½ε-
- τÑ¡¿Ñ ß¿ßΓѼ«⌐ Γ«½∞¬« ΓÑσ »α«µÑñπα ¿ ßΓαπ¬Γπα ñá¡¡δσ, ¬«Γ«αδÑ ñÑ⌐ßΓó¿Γѽ∞¡« ¿ß»«½∞ºπεΓß∩ ó
- ¬«¡Ñτ¡«⌐ »α«úαá¼¼Ñ.
-
- ÇóΓ«¼áΓ¿τÑ߬¿⌐ »«¿ß¬ ó í¿í½¿«ΓѬáσ
- ----------------------------------
-
- ū߬«½∞¬π ¬áªñδ⌐ ¼«ñπ½∞ ß«ñÑαª¿Γ ß»Ñµ¿Σ¿¬áµ¿¿ αÑßπαß«ó, ¿ß»«½∞ºπѼδσ ¿¼ ¿º ñαπú¿σ ¼«-
- ñπ½Ñ⌐, Γ« »α«úαá¼¼á-¬«¼»«¡«óΘ¿¬ (linker) ΓαÑíπÑΓ Γ«½∞¬« π¬áºá¡¿∩ ¿¼Ñ¡¿ ú½áó¡«⌐ main »α«ú-
- αá¼¼δ. àß½¿ αẽ¿τ¡δÑ í¿í½¿«ΓÑτ¡δÑ ¼«ñ㫨 ¿¼ÑεΓ «ñ¿¡á¬«ó«Ñ ¡áº¡áτÑ¡¿Ñ, Γ« ß¿ßΓÑ¼á »«ºó«½∩ÑΓ
- óá¼ π¬áºáΓ∞ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞, ó ¬«Γ«α«⌐ í¿í½¿«ΓѬ¿ íπñπΓ »α«ß¼áΓα¿óáΓ∞ß∩.
-
- Ä»αÑñѽѡ¿Ñ (π¬áºá¡¿Ñ) ¼«ñπ½Ñ⌐, ¬«Γ«αδÑ óßÑúñá íπñπΓ
- ------------------------------------------------------
- »ÑαѬ«¼»¿½¿α«óáΓ∞ß∩
- -------------------
-
- ū߬«½∞¬π ¬«¼»¿½∩Γ«α JPI Modula-2 óÑß∞¼á óδß«¬«ß¬«α«ßΓ¡«⌐ (í«½ÑÑ 20000 ßΓ᫬ ó ¼¿¡π-
- Γπ), Γ« óßÑ ó¿ñ¿¼δÑ ¼«ñ㫨 «»αÑñѽѡ¿⌐, ¿ß»«½∞ºπѼδÑ ó »α«úαá¼¼Ñ, óßÑúñá »ÑαѬ«¼»¿½¿απεΓß∩.
- Æá¬«⌐ »«ñσ«ñ ¿¼ÑÑΓ ß½ÑñπεΘ¿Ñ »αÑ¿¼πΘÑßΓóá:
- - »«ºó«½∩ÑΓ »ÑαѬ«¼»¿½∩µ¿ε ¼«ñπ½Ñ⌐ αÑ὿ºáµ¿¿ ó ½εí«¼ »«α∩ñ¬Ñ;
- - »«ºó«½∩ÑΓ ¿ºíѪáΓ∞ »α«í½Ñ¼, ßó∩ºá¡¡δσ ß π»αáó½Ñ¡¿Ñ¼ óÑαß¿∩¼¿, ßó∩ºá¡¡δσ ß ¼«ñπ½∩¼¿
- «»αÑñѽѡ¿⌐. éδ ¼«ú½¿ ßΓὬ¿óáΓ∞ß∩ ß Γᬿ¼¿ »α«í½Ñ¼á¼¿, Ñß½¿ αá¡ÑÑ ¿ß»«½∞º«ó὿ ñαπú¿Ñ ¬«¼-
- »¿½∩Γ«αδ Modula-2;
- - π¼Ñ¡∞ΦáÑΓ τ¿ß½« ¡Ñ«íσ«ñ¿¼δσ Σá⌐½«ó ºá ßτÑΓ Γ«ú«, τΓ« ßΓá¡«ó∩Γß∩ ¡Ñ ¡πª¡δ "ß¿¼ó«½∞-
- ¡δÑ" Σá⌐½δ (symbol files) ñ½∩ ¼«ñπ½Ñ⌐ «»αÑñѽѡ¿⌐.
-
- 髺¼«ª¡«ßΓ∞ áóΓ«¼áΓ¿τÑ߬«ú« MAKE
- --------------------------------
-
- é í«½∞Φ¿σ »α«úαá¼¼áσ ºáó¿ß¿¼«ßΓ¿ ¼Ñªñπ ¼«ñπ½∩¼¿ ¼«úπΓ ßΓáΓ∞ óÑß∞¼á ºá»πΓá¡¡δ¼¿; JPI
- Modula-2 «íÑß»Ñτ¿óáÑΓ ó«º¼«ª¡«ßΓ∞ áóΓ«¼áΓ¿τÑ߬«ú« MAKE (»«ßΓα«Ñ¡¿∩ »α«úαá¼¼), τΓ« »«ºó«½∩ÑΓ
- »α«ó«ñ¿Γ∞ óδß«¬«ß¬«α«ßΓ¡«⌐ á¡á½¿º óßÑσ ºáó¿ß¿¼«ßΓÑ⌐ ¼Ñªñπ ¼«ñπ½∩¼¿ ¿ »α«óÑα¬π óαѼѡ¿ ß«º-
- ñá¡¿∩ ¼«ñπ½Ñ⌐. Å«ß½Ñ φΓ«ú« ß¿ßΓÑ¼á »ÑαѬ«¼»¿½¿απÑΓ Γ«½∞¬« ¼«ñπ½¿, ¿ßσ«ñ¡δÑ ΓѬßΓδ ¬«Γ«αδσ
- »αÑΓÑα»Ñ½¿ ¿º¼Ñ¡Ñ¡¿∩ »«ß½Ñ »«ß½Ññ¡Ñ⌐ ¬«¼»¿½∩µ¿¿.
-
-
- ÉáßΦ¿αÑ¡¡δÑ ßΓαπ¬Γπαδ ñá¡¡δσ
- ----------------------------
-
- Å«ññÑনóáεΓß∩ »«½¡«ßΓ∞ε óßÑ ßΓαπ¬Γπαδ ñá¡¡δσ, ß ¬«Γ«α묨 óδ ¼«ú½¿ »«º¡á¬«¼¿Γ∞ß∩, ¿ß-
- »«½∞ºπ∩ ∩ºδ¬¿ æ ¿½¿ Pascal. é τ¿ß½« ¿σ óσ«ñ∩Γ: º¡á¬«óδÑ ¿ íѺº¡á¬«óδÑ µÑ½δÑ αẽ¿τ¡δσ αáº-
- ¼Ñα«ó, τ¿ß½á ß »½áóáεΘÑ⌐ Γ«τ¬«⌐, ¼¡«ú«αẼÑα¡δÑ ¼áßß¿óδ, ºá»¿ß¿ ß óáα¿á¡ΓἿ, 64-èíá⌐Γ¡δÑ
- ¼¡«ªÑßΓóá, ¬«α«Γ¬¿Ñ ¿ ñ½¿¡¡δÑ π¬áºáΓѽ¿, »ÑαѼѡ¡δÑ »α«µÑñπα ¿ »α«τ¿Ñ.
-
- Å«½¡«Ñ π»αáó½Ñ¡¿Ñ ßÑú¼Ñ¡ΓἿ
- ----------------------------
-
- JPI Modula-2 αáß»«½áúáÑΓ π¡¿¬á½∞¡«⌐ «ß«íÑ¡¡«ßΓ∞ε, »«ºó«½∩εΘÑ⌐ óá¼ ¿ß»«½∞º«óáΓ∞ ßÑú¼Ñ¡-
- Γ¿α«óá¡¡πε »á¼∩Γ∞ »α«µÑßß«α«ó 80x86. éáΦ¿ »α«úαá¼¼á ¿ ñá¡¡δÑ ¼«úπΓ ñ«ßΓ¿úáΓ∞ αẼÑαá ó 1
- îíá⌐Γ ¿ ó Γ« ªÑ óαѼ∩ ¿ß»«½∞º«óáΓ∞ "¬«α«Γ¬¿Ñ ó맮óδ" ñ½∩ óδíαá¡¡δσ »α«µÑñπα ¬á¬ ó¡πΓα¿, Γá¬
- ¿ ºá »αÑñѽἿ ¼«ñπ½Ñ⌐. éδ ¼«ªÑΓÑ Γá¬ªÑ ¿ß»«½∞º«óáΓ∞ "¬«α«Γ¬¿Ñ π¬áºáΓѽ¿" ñ½∩ »«óδΦÑ¡¿∩
- ߬«α«ßΓ¿ óδ»«½¡Ñ¡¿∩. é «Γ½¿τ¿Ñ «Γ α∩ñá ñαπú¿σ ∩ºδ¬«ó, »«ºó«½∩εΘ¿σ ¿ß»«½∞º«óáΓ∞ ¬«α«Γ¬¿Ñ
- π¬áºáΓѽ¿ Γ«½∞¬« ó óδíαá¡¡δσ ßÑú¼Ñ¡Γáσ, JPI Modula-2 »«ºó«½∩ÑΓ «ñ¡«óαѼѡ¡« ¿ß»«½∞º«óáΓ∞
- ¬«α«Γ¬¿Ñ π¬áºáΓѽ¿ ó ½εíδσ óδíαá¡¡δσ óἿ ßÑú¼Ñ¡Γáσ. éδ ¼«ªÑΓÑ ñáªÑ µ¿¬½¿τÑ߬¿ »ÑαѼÑΘáΓ∞
- ßÑú¼Ñ¡Γδ ó σ«ñÑ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ, τΓ«íδ ñ«í¿Γ∞ß∩ «»Γ¿¼á½∞¡«ú« ¿ß»«½∞º«óá¡¿∩ ñ«ßΓπ»¡«⌐
- »á¼∩Γ¿ (ß¼. âïÇéô 6 ñ½∩ »«½πτÑ¡¿∩ ñ«»«½¡¿Γѽ∞¡«⌐ ¿¡Σ«α¼áµ¿¿).
-
- è«¡Γα«½∞ Γ¿»«ó
- --------------
-
- ä½∩ Γ«ú«, τΓ«íδ «íÑß»Ñτ¿Γ∞ »«óδΦÑ¡¡πε ¡áñѪ¡«ßΓ∞ ó »α«úαá¼¼¿α«óá¡¿¿, Modula-2 ¿¼ÑÑΓ
- ñáªÑ í«½ÑÑ ßΓα«ú¿⌐ ¬«¡Γα«½∞ Γ¿»«ó, τѼ ÑÑ »αÑñΦÑßΓóÑ¡¡¿¬ Pascal. é Γ« ªÑ óαѼ∩, Modula-2
- ñáÑΓ ó«º¼«ª¡«ßΓ∞ «í«⌐Γ¿ »α¿ ¡Ñ«íσ«ñ¿¼«ßΓ¿ ¬«¡Γα«½∞ Γ¿»«ó. ¥Γ« ñáÑΓ ó«º¼«ª¡«ßΓ∞ αÑ὿º«óáΓ∞
- ½εíδÑ "σ¿Γα«ßΓ¿", ¬«Γ«αδÑ óδ ºáσ«Γ¿ΓÑ, τΓ«íδ ñ«ßΓ¿ú¡πΓ∞ ßó«¿σ µÑ½Ñ⌐ ¡á¿½πτΦ¿¼ »πΓѼ.
-
- Åα«µÑñπαδ
- ---------
-
- Æ¿» "Åα«µÑñπαδ" »«ºó«½∩ÑΓ »α«¿ºó«ñ¿Γ∞ ñ¿¡á¼¿τÑ߬«Ñ ¡áº¡áτÑ¡¿Ñ »α«µÑñπα »ÑαѼѡ¡δ¼.
- Modula-2 αáß»«½áúáÑΓ ó«º¼«ª¡«ßΓ∩¼¿ αáßΦ¿αÑ¡¡«⌐ «íαáí«Γ¬¿ »áαá¼ÑΓα«ó »α«µÑñπα. éδ ¼«ªÑΓÑ »Ñ-
- αÑñáΓ∞ ¼áßß¿ó ½εí«ú« αẼÑαá ó «ñ¡π ¿ Γπ ªÑ »α«µÑñπαπ ½¿í« ñáªÑ »ÑαÑñáΓ∞ »α«µÑñπαπ ó ¬á-
- τÑßΓóÑ »áαá¼ÑΓαá. JPI Modula-2 Γá¬ªÑ αáß»«½áúáÑΓ ßαÑñßΓóἿ, »«ºó«½∩εΘ¿¼¿ »α«ßΓ« αÑ὿º«óδ-
- óáΓ∞ »α«µÑñπαδ «íαáí«Γ¬¿ »αÑαδóá¡¿⌐.
-
-
- ÉáßΦ¿αÑ¡¡δÑ «»ÑαáΓ«αδ π»αáó½Ñ¡¿∩
- --------------------------------
-
- Modula-2 ß«ñÑαª¿Γ óßÑ «»ÑαáΓ«αδ π»αáó½Ñ¡¿∩, αÑ὿º«óá¡¡δÑ ó Pascal. éñ«íáó«¬ Modula-2
- ß«ñÑনΓ, »«¼¿¼« »α«τ¿σ óÑΘÑ⌐, ¬«¡ßΓαπ¬µ¿ε Γ¿»á LOOP...END, óδ⌐Γ¿ ¿º ¬«Γ«α«⌐ óδ ¼«ªÑΓÑ, ¿ß-
- »«½∞ºπ∩ Γᬠ¼¡«ú« Γ«τѬ óδσ«ñá, ¬á¬ óá¼ íπñÑΓ ¡Ñ«íσ«ñ¿¼« (ß¼. âïÇéô 6 ñ½∩ »«½πτÑ¡¿∩ »«½¡«ú«
- ¼¡«ªÑßΓóá «»ÑαáΓ«α«ó π»αáó½Ñ¡¿∩). ū߬«½∞¬π óδτ¿ß½Ñ¡¿Ñ ½«ú¿τÑ߬¿σ πß½«ó¿⌐ ºáóÑαΦáÑΓß∩, ¬á¬
- Γ«½∞¬« º¡áτÑ¡¿Ñ πß½«ó¿∩ ßΓá¡«ó¿Γß∩ «»αÑñѽѡ«, Γ« ¿ß»«½∞º«óá¡¿Ñ «»ÑαáΓ«α«ó π»αáó½Ñ¡¿∩ ó
- Modula-2 ßΓá¡«ó¿Γß∩ í«½ÑÑ »α«ßΓδ¼ ¿ í«½ÑÑ φΣΣÑ¬Γ¿ó¡δ¼, τѼ ó ∩ºδ¬áσ, ¡Ñ «íÑß»Ñτ¿óáεΘ¿σ φΓ«⌐
- 󫺼«ª¡«ßΓ¿.
-
-
-
- î¡«ú«ºáñáτ¡«ßΓ∞
- ---------------
-
- Modula-2 ¿¼ÑÑΓ óßΓα«Ñ¡¡πε »«ññÑαª¬π ¼¡«ú«ºáñáτ¡«ßΓ¿. ü¿í½¿«ΓѬá JPI Modula-2 ó¬½ετáÑΓ
- »α«úαá¼¼π-»½á¡¿α«óΘ¿¬, ¿ß»«½∞ºπεΘπε óαѼѡ¡«Ñ ¬óá¡Γ«óá¡¿Ñ, ¿ «í½ÑúτáεΘπε αÑ὿ºáµ¿ε »áαá½-
- ½Ñ½∞¡δσ »α«µÑßß«ó ó ß¿ßΓѼÑ.
-
- ô»αáó½Ñ¡¿Ñ »α«úαá¼¼«⌐
- ---------------------
-
- éδ ¿¼ÑÑΓÑ ó«º¼«ª¡«ßΓ∞ »«½¡«ßΓ∞ε π»αáó½∩Γ∞ óßѼ¿ á߻ѬΓἿ ßó«Ñ⌐ »α«úαá¼¼δ. ¥Γ« «ßπ-
- ΘÑßΓó½∩ÑΓß∩ ¡Ñí«½∞Φ¿¼ ¬«½¿τÑßΓó«¼ "óßΓα«Ñ¡¡δσ" »α«µÑñπα, á Γá¬ªÑ «ΓßπΓßΓó¿Ñ¼ ߬αδΓδσ »αÑ«í-
- αẫóá¡¿⌐ Γ¿»«ó, τΓ« ¡Ñ »«ºó«½∩ÑΓ óá¼ ºá»πΓáΓ∞ß∩.
- JPI Modula-2 »«ññÑনóáÑΓ Γ«½∞¬« »«½¡δ⌐ ¿ßσ«ñ¡δ⌐ ΓѬßΓ
- ó í¿í½¿«ΓÑ¬Ñ ¿ ß¿ßΓÑ¼Ñ óαѼѡ¿ ¿ß»«½¡Ñ¡¿∩.
-
- æαÑñá αáºαáí«Γ¬¿ »α«úαá¼¼
- -------------------------
-
- æ¿ßΓѼá JPI Modula-2 - φΓ« ß¿ßΓѼá αáºαáí«Γ¬¿ »α«úαá¼¼, ¬«Γ«απε óδ ¼«ªÑΓÑ ¡áßΓα«¿Γ∞
- »«ñ ßó«¿ ß«íßΓóÑ¡¡δÑ ΓαÑí«óá¡¿∩.
-
- ÄΓ½áñ¬á
- -------
-
- é ß¿½π Γ«ú«, τΓ« Modula-2 - φΓ« ß¿½∞¡« Γ¿»¿º¿α«óá¡¡δ⌐ ∩ºδ¬, ¼¡«ªÑßΓó« »«ΓÑ¡µ¿á½∞¡δσ
- «Φ¿í«¬ «í¡áαπª¿óáÑΓß∩ ¡á φΓá»Ñ ¬«¼»¿½∩µ¿¿. éßÑ "ßΓá¡ñáαΓ¡δÑ" «Φ¿í¬¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩
- (»αÑóδΦÑ¡¿Ñ αẼÑαá ¼áßß¿óá, ¿ß»«½∞º«óá¡¿Ñ »πßΓ«ú« (NIL) π¬áºáΓѽ∩ ¿ Γ.ñ.) ¼«úπΓ íδΓ∞ »αÑα-
- óá¡δ ß¿ßΓѼ«⌐. Åα¿ ºá»π᪥ »α«úαá¼¼δ ¿º ßαÑñδ, ß¿ßΓѼá πßΓá¡«ó¿Γ ¬παß«α ó »«º¿µ¿¿ óáΦÑú«
- ¿ßσ«ñ¡«ú« ΓѬßΓá, ß««ΓóÑΓßΓóπεΘÑ⌐ »«½«ªÑ¡¿ε «Φ¿í¬¿. ¥Γ« »α«¿ßσ«ñ¿Γ »αá¬Γ¿τÑ߬¿ ¼ú¡«óÑ¡¡«,
- íѺ αѬ«¼»¿½∩µ¿¿ óáΦÑ⌐ »α«úαá¼¼δ.
-
- * * *
-
- äá¡¡á∩ ú½áóá ß«ñÑαª¿Γ Γ«½∞¬« ταѺóδτá⌐¡« ߪáΓ«Ñ «»¿ßá¡¿Ñ ∩ºδ¬á Modula-2; âïÇéÇ 4 ß«-
- ñÑαª¿Γ «»¿ßá¡¿Ñ α∩ñá 󫺼«ª¡«ßΓÑ⌐ »πΓѼ »α¿óÑñÑ¡¿∩ ¡Ñ߬«½∞¬¿σ ¿¡ΓÑαÑß¡δσ »α¿¼Ñα«ó, á Ñß½¿
- óδ ¡πªñáÑΓÑß∞ ó í«½ÑÑ »«½¡«⌐ ¿ Γ«τ¡«⌐ ¿¡Σ«α¼áµ¿¿, âïÇé¢ 6 ¿ 7 «»¿ßδóáεΓ ∩ºδ¬ Modula-2 ó ñÑ-
- Γá½∩σ.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- â ï Ç é Ç 3
- ============
-
- ìÇùÇïÄ
- ======
-
- æ«ñÑন¼«Ñ ñ¿ßΓα¿íπΓ¿ó¡δσ ñ¿ß¬«ó
- --------------------------------
-
- éδ »«½πτ¿½¿ Γα¿ ñ¿ß¬ÑΓδ. Äñ¡á ¿º ¡¿σ »«¼ÑτÑ¡á JPI Modula-2 System, ñαπúá∩ - JPI Modula
- -2 Library Objects («íΩÑ¬Γ¡δÑ ¬«ñδ í¿í½¿«ΓѬ) ¿ ΓαÑΓ∞∩ - JPI Modula-2 Library Source (¿ß-
- σ«ñ¡δÑ ΓѬßΓδ í¿í½¿«ΓѬ).
- ä¿ß¬, »«¼ÑτÑ¡¡δ⌐ System, ß«ñÑαª¿Γ ß½ÑñπεΘ¿Ñ Σá⌐½δ:
- M2.EXE â½áó¡á∩ »α«úαá¼¼á;
- M2.OVL ÄóÑα½Ñ⌐¡δ⌐ Σá⌐½ ú½áó¡«⌐ »α«úαá¼¼δ;
- M2.ERR æ««íΘÑ¡¿∩ ¬«¼»¿½∩Γ«αá «í «Φ¿í¬áσ;
- M2.MNU ÅÑαѬ«¡Σ¿úπα¿α«óá¡¡«Ñ «»¿ßá¡¿Ñ ¼Ñ¡ε;
- M2.HLP ÆÑ¬ßΓ αѪ¿¼á "Å«¼«Θ∞";
- î2.XXX êß»«½∞ºπÑΓß∩ ó ß¿ßΓÑ¼Ñ íѺ ªÑßΓ¬«ú« ñ¿ß¬á
- (ß¼. »«ºñ¡ÑÑ).
- Æ«½∞¬« Γα¿ »Ñαóδσ Σá⌐½á ∩ó½∩εΓß∩ ¡Ñ«íσ«ñ¿¼δ¼¿ »α¿ ºá»π᪥ JPI Modula-2.
- ä¿ß¬, »«¼ÑτÑ¡¡δ⌐ Library Objects, ß«ñÑনΓ:
- *.DEF î«ñ㫨 «»αÑñѽѡ¿⌐;
- *.OBJ ÄíΩÑ¬Γ¡δÑ ¬«ñδ í¿í½¿«ΓÑτ¡δσ ¼«ñπ½Ñ⌐;
- DEMO.MOD è«α«Γ¬á∩ ñѼ«¡ßΓαᵿ«¡¡á∩ »α«úαá¼¼á;
- PROG*.MOD Åα¿¼Ñαδ;
- PROG*.DEF Åα¿¼Ñαδ.
- ä½∩ ¿ß»«½∞º«óá¡¿∩ JPI Modula-2 í¿í½¿«ΓѬ¿ ¡Ñ«íσ«ñ¿¼δ Γ«½∞¬« Σá⌐½δ *.DEF ¿ *.OBJ.
- ä¿ß¬, »«¼ÑτÑ¡¡δ⌐ Library Source ß«ñÑαª¿Γ ¿ßσ«ñ¡δ⌐ ΓѬßΓ í¿í½¿«ΓѬ¿.
- ¥Γ«Γ ñ¿ß¬ ¡Ñ ¡πªÑ¡ ñ½∩ ºá»π߬á ß¿ßΓѼδ!
-
- æ¿ßΓÑ¼á ¡á ªÑßΓ¬«¼ ñ¿ß¬Ñ
- ------------------------
-
- æ¿ßΓÑ¼á ¡á ªÑßΓ¬«¼ ñ¿ß¬Ñ ßΓáαΓπÑΓß∩ τÑΓδα∞¼∩ »α«ßΓ묨 ΦáúἿ:
- 1. 櫺ñá⌐ΓÑ ¬áΓὫú ¡á ßó«Ñ¼ ªÑßΓ¬«¼ ñ¿ß¬Ñ, ¡á»α¿¼Ñα, C:\JPIM2;
- 2. 欫»¿απ⌐ΓÑ ß«ñÑন¼«Ñ ñ¿ß¬«ó "SYSTEM" ¿ "LIBRARY OBJECTS" ó ß«ºñá¡¡δ⌐ ¬áΓὫú;
- 3. é«⌐ñ¿ΓÑ ó ß«ºñá¡¡δ⌐ ¬áΓὫú ¿ ºá»πßΓ¿ΓÑ ß¿ßΓѼπ, óóÑñ∩ î2 ó «ΓóÑΓ ¡á »«ñ߬Ậπ äÄæ;
- 4. ì᪼¿ΓÑ <äÄÅ+R> (Alt+R) ¿ «ΓóÑΓ∞ΓÑ DEMO, ¬«úñá JPI
- Modula-2 ºá»α«ß¿Γ ¿¼∩ ú½áó¡«ú« (îain) Σá⌐½á. ì᪼¿ΓÑ <ééÄä> (Enter) ¿ »α«¡áí½εñá⌐ΓÑ ¬«¼»¿-
- ½∩µ¿ε, ßó∩ºδóá¡¿Ñ ¿ óδ»«½¡Ñ¡¿Ñ ñѼ«¡ßΓαᵿ«¡¡«⌐ »α«úαá¼¼δ.
-
-
-
-
- æ¿ßΓÑ¼á ¡á ñóπσ Σ½«»»¿-ñ¿ß¬áσ
- -----------------------------
-
- ö½«»»¿-ñ¿ß¬«óá∩ ß¿ßΓѼá πßΓá¡áó½¿óáÑΓß∩ ¿ ºá»π߬áÑΓß∩ »∩Γ∞ε »α«ßΓ묨 ΦáúἿ:
- 1. 櫺ñáεΓß∩ ¬«»¿¿ ñ¿ß¬«ó, »«¼ÑτÑ¡¡δσ "SYSTEM" ¿ "LIBRARY OBJECTS".
- 2. è«»¿∩ ñ¿ß¬á "SYSTEM" »«¼ÑΘáÑΓß∩ ¡á ñ¿ß¬«ó«ñ Ç:, á ¬«»¿∩ ñ¿ß¬á "LIBRARY OBJECTS" -
- ¡á ñ¿ß¬«ó«ñ é:.
- 3. ÅÑαÑ¿¼Ñ¡«óδóáÑΓß∩ Σá⌐½ Ç:î2.XXX ó A:M2.RED.
- 4. é«⌐ñ¿ΓÑ ¡á ñ¿ß¬ Ç: ¿ ßΓáαΓπ⌐ΓÑ ß¿ßΓѼπ óó«ñ«¼ î2 ó «ΓóÑΓ ¡á »«ñ߬Ậπ äÄæ.
- 5. ì᪼¿ΓÑ <äÄÅ+R> (Alt+R) ¿ «ΓóÑΓ∞ΓÑ DEMO ¡á ºá»α«ß JPI Modula -2 ¿¼Ñ¡¿ ú½áó¡«ú«
- (Main) Σá⌐½á. ì᪼¿ΓÑ <ééÄä> (Enter) ¿ »α«ß½Ññ¿ΓÑ ¬«¼»¿½∩µ¿ε, ßó∩ºδóá¡¿Ñ ¿ óδ»«½¡Ñ¡¿Ñ ñÑ-
- ¼«¡ßΓαᵿ«¡¡«⌐ »α«úαá¼¼δ.
- æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞ ó᪡«ßΓ∞ ¬«ααÑ¬Γ¡«ú« óδ»«½¡Ñ¡¿∩ Φáúá 3, ó »α«Γ¿ó¡«¼ ß½πτáÑ ß¿ßΓÑ¼á ¡Ñ
- íπñÑΓ º¡áΓ∞, úñÑ ¡áσ«ñ¿Γß∩ í¿í½¿«ΓѬá.
-
- ÅÉÄäÄïåàìêà
- ===========
-
- àß½¿ óδ ΓÑα»Ñ½¿óδ
- -----------------
-
- àß½¿ óδ «í½áñáÑΓÑ ñ«ßΓáΓ«τ¡δ¼ ΓÑα»Ñ¡¿Ñ¼, Γ« »«º¡á¬«¼∞ΓÑß∞ ß âïÇéÄë 4, ß«ñÑαªáΘÑ⌐ »α¿-
- ¼Ñαδ. ÅÑαÑñ ñá½∞¡Ñ⌐Φ¿¼ ¿ß»«½∞º«ó᡿Ѽ ßαÑñδ ¡ÑíÑß»«½Ñº¡« íπñÑΓ »α«ß¼«ΓαÑΓ∞ âïÇéô 5.
-
- àß½¿ óδ ¡Ñ ½εí¿ΓÑ τ¿ΓáΓ∞ απ¬«ó«ñßΓóá
- ------------------------------------
-
- é Γᬫ¼ ß½πτáÑ ¼δ ñπ¼áѼ, τΓ« óδ ¡á⌐ñÑΓÑ »«½Ñº¡«⌐ ñ½∩ ßÑí∩ ¬½áó¿Φπ <F1>.
- ì᪼¿ΓÑ <F1> ¿ ßἫßΓ«∩Γѽ∞¡« αáºíÑα¿ΓÑß∞, ¬á¬ ¬«¼»¿½¿α«óáΓ∞ ¿ óδ»«½¡∩Γ∞ »α«úαá¼-
- ¼δ-»α¿¼Ñαδ, ¡áºóá¡¡δÑ PROG*.MOD.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- â ï Ç é Ç 4
- ============
-
- é¢üÄÉÄùìÄà êçôùàìêà Modula-2
- ============================
-
- ¥Γá ú½áóá ß«ñÑαª¿Γ α∩ñ »α«úαá¼¼ óδí«α«τ¡«ú« «íπτÑ¡¿∩, ¬«Γ«αδÑ ∩ó½∩εΓß∩ ¡ÑΣ«α¼á½∞¡δ¼
- óóÑñÑ¡¿Ñ¼ ó ∩ºδ¬ Modula-2. Å«½¡«Ñ »«¡¿¼á¡¿Ñ Γ«ú«, ¬á¬ αáí«ΓáεΓ »α«úαá¼¼δ, ¡Ñ ∩ó½∩ÑΓß∩ ¡Ñ«í-
- σ«ñ¿¼δ¼; ¬áªñδ⌐ »α¿¼Ñα ∩ó½∩ÑΓß∩ ¿½½εßΓαᵿÑ⌐ «Γñѽ∞¡δσ áß»Ñ¬Γ«ó ∩ºδ¬á, á ¡Ñ ¬«¡ßΓαπ¿α«óá¡¿∩
- ß½«ª¡δσ á½ú«α¿Γ¼«ó. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, ¼δ »«»δΓ὿ß∞ ßñѽáΓ∞ »α¿¼Ñαδ ¿¡ΓÑαÑß¡δ¼¿. æ½ÑñπÑΓ ΓᬪÑ
- «Γ¼ÑΓ¿Γ∞, τΓ« πα«óÑ¡∞ º¡á¡¿∩ « »α«úαá¼¼¿α«óá¡¿¿, ¬á¬ ¡á¼ ¬áªÑΓß∩, αѺ¬« ó«ºαáßΓáÑΓ «Γ »α¿-
- ¼Ñαá ¬ »α¿¼Ñαπ.
- ì¿ªÑ »αÑñßΓáó½Ñ¡á »Ñαóá∩ »α«úαá¼¼á.
-
- Hello
- -----
-
- MODULE prog1;
- (* ¥Γá »α«úαá¼¼á »¿ΦÑΓ "hello" ¡á φ¬αá¡Ñ. *)
- FROM IO IMPORT WrStr;
- BEGIN
- WrStr('hello');
- END prog1.
-
- X«Γ∩ φΓ« óÑß∞¼á »α«ßΓá∩ »α«úαá¼¼á, «¡á ß«ñÑαª¿Γ α∩ñ ¿¡ΓÑαÑß¡δσ ¼«¼Ñ¡Γ«ó, ¬«Γ«αδÑ ß½Ñ-
- ñπÑΓ »«¡∩Γ∞, »αѪñÑ τѼ ñó¿úáΓ∞ß∩ ñá½ÑÑ.
- üπ¬óδ óÑασ¡Ñú« ¿ ¡¿ª¡Ñú« αÑú¿ßΓα«ó ¡Ñ φ¬ó¿óá½Ñ¡Γ¡δ. 潫óá, ¿¼ÑεΘ¿Ñ ß»Ñµ¿á½∞¡«Ñ º¡áτÑ-
- ¡¿Ñ ó ¬«¼»¿½∩Γ«αÑ, óßÑúñá ºá»¿ßδóáεΓß∩ ó óÑασ¡Ñ¼ αÑú¿ßΓαÑ (»α«»¿ß¡δÑ íπ¬óδ).
- MODULE prog1 ß««íΘáÑΓ, τΓ« »α«úαá¼¼á ¡áºδóáÑΓß∩ prog1. öá⌐½, ó ¬«Γ«α«¼ ΓѬßΓ »α«úαá¼¼δ
- ºá»«¼¿¡áÑΓß∩, ñ«½ªÑ¡ ¿¼ÑΓ∞ ¿¼∩ prog1.mod, τΓ«íδ ß«ó»áñáΓ∞ ß ¿¼Ñ¡Ñ¼ ¼«ñπ½∩.
- 諼¼Ñ¡Γáα¿¿ ¡áτ¿¡áεΓß∩ ß (* ¿ ºá¬á¡τ¿óáεΓß∩ *). Ä¡¿ ¡Ñ ó½¿∩εΓ ¡á ß«ñÑন¼«Ñ »α«úαá¼¼δ,
- á ß«ñÑαªáΓ »«ñ߬Ậ¿, »αÑñ¡áº¡áτÑ¡¡δÑ τѽ«óѬπ-τ¿ΓáΓѽε. (Äñ¡á¬« ¬«¼¼Ñ¡Γáα¿¿, ¡áτ¿¡áεΘ¿Ñß∩
- ß« º¡á¬á (*$, ¿¡ΓÑα»αÑΓ¿απεΓß∩ ¬á¬ ¿¡ßΓαπ¬µ¿¿ ¬«¼»¿½∩Γ«απ).
- FROM IO IMPORT WrStr «αúá¡¿ºπÑΓ ñ«ßΓπ» ¬ »α«µÑñπαÑ WrStr ó í¿í½¿«ΓÑτ¡«¼ ¼«ñπ½Ñ IO, τΓ«
- ñѽáÑΓ φΓπ »α«µÑñπαπ ñ«ßΓπ»¡«⌐ ñ½∩ ¿ß»«½∞º«óá¡¿∩ ó «ßΓá½∞¡«⌐ τáßΓ¿ »α«úαá¼¼δ. IO - φΓ«
- ßΓá¡ñáαΓ¡δ⌐ í¿í½¿«ΓÑτ¡δ⌐ ¼«ñπ½∞, »«ßΓáó½∩Ѽδ⌐ ó¼ÑßΓÑ ß ß¿ßΓѼ«⌐ JPI Modula-2.
- BEGIN »«¼ÑτáÑΓ ¡áτὫ óδ»«½¡∩Ѽδσ «»ÑαáΓ«α«ó. Ä»ÑαáΓ«αδ ∩ó½∩εΓß∩ τáßΓ∩¼¿ »α«úαá¼¼δ,
- ¬«Γ«αδÑ óδ»«½¡∩εΓ ñÑ⌐ßΓó¿∩ »α¿ ºá»π᪥ »α«úαá¼¼δ.
- Ä»ÑαáΓ«α WrStr('hello') óδó«ñ¿Γ ßΓ᫬π 'hello' ¡á πßΓα«⌐ßΓó« óδó«ñá. é Modula-2 ¡ÑΓ
- óßΓα«Ñ¡¡«ú« «»ÑαáΓ«αá 'print', ó¼ÑßΓ« φΓ«ú« óó«ñ/óδó«ñ «αúá¡¿ºπÑΓß∩ ó맮óἿ í¿í½¿«ΓÑτ¡δσ
- »α«µÑñπα.
- END prog1. »«¼ÑτáÑΓ ¬«¡Ñµ »α«úαá¼¼δ («íΩ∩ó½Ñ¡¿Ñ »«½¡«ú« ºáóÑαΦÑ¡¿∩).
- è«¡Ñτ¡« ªÑ, φΓá »Ñαóá∩ »α«úαá¼¼á ¡Ñ ∩ó½∩ÑΓß∩ »«½Ñº¡«⌐.
- æ φΓ«⌐ Γ«τ¬¿ ºαÑ¡¿∩ ñαπú¿Ñ »α¿¼Ñαδ í«½ÑÑ »«½Ñº¡δ.
-
- Å¿Σáú«α«ó߬¿Ñ óδτ¿ß½Ñ¡¿∩
- ------------------------
-
- MODULE prog2;
- (* ¥Γá »α«úαá¼¼á óδó«ñ¿Γ Å¿Σáú«α«óδ Γα«⌐¬¿. *)
- FROM IO IMPORT WrStr, WrLngCard, WrLn;
- VAR a,b,c:LONGCARD;
- BEGIN
- FOR c := 1 TO 100 DO
- FOR b := 1 TO c DO
- FOR a := 1 TO b DO
- IF a*a + b*b = c*c THEN
- WrLngCard(a,1);
- WrStr(', ');
- WrLngCard(b,1);
- WrStr(', ');
- WrLngCard(c,1);
- WrLn;
- END;
- END;
- END;
- END;
- END prog2.
-
- Åα«úαá¼¼á ¡áσ«ñ¿Γ »«½«ª¿Γѽ∞¡δÑ τ¿ß½á á, ó, ß, πñ«ó½ÑΓó«α∩εΘ¿Ñ Σ«α¼π½Ñ á*á + ó*ó =
- ß*ß. ìá»α¿¼Ñα, 3*3 + 4*4 = 9+16 = 25 = 5*5, ΓᬠτΓ« αÑΦÑ¡¿Ñ¼ ∩ó½∩ÑΓß∩: á=3, ó=4, ß=5. àß½¿
- ßΓ«α«¡δ ΓαÑπú«½∞¡¿¬á ¿¼ÑεΓ Γá¬¿Ñ º¡áτÑ¡¿∩, Γ« ΓαÑπú«½∞¡¿¬ ∩ó½∩ÑΓß∩ »α∩¼«πú«½∞¡δ¼. æ«ú½áß¡«
- ½ÑúÑ¡ñÑ (󫺼«ª¡«, ¿ ¡ÑóÑα¡«⌐), ñαÑó¡¿Ñ Ñú¿»Γ∩¡Ñ ¿ß»«½∞º«ó὿ φëà Σá¬Γ »α¿ ßΓα«¿Γѽ∞ßΓóÑ
- »¿αἿñ.
- îÑΓ«ñ, ¿ß»«½∞ºπѼδ⌐ »α«úαá¼¼«⌐, - φΓ« »«ñσ«ñ "úαπí«⌐ ß¿½δ" - íÑαπΓß∩ τ¿ß½á á, ó ¿ ß ¿
- »α«óÑα∩ÑΓß∩, πñ«ó½ÑΓó«α∩ÑΓß∩ ½¿ ºáñá¡¡«Ñ πß½«ó¿Ñ. á, ó ¿ ß ñ«½ª¡δ íδΓ∞ »αÑñßΓáó½Ñ¡δ »ÑαÑ-
- ¼Ñ¡¡δ¼¿: φΓ« «íΩѬΓδ, »α¿¡¿¼áεΘ¿Ñ αẽ¿τ¡δÑ º¡áτÑ¡¿∩ ó σ«ñÑ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ. èáªñá∩
- »ÑαѼѡ¡á∩ ñ«½ª¡á íδΓ∞ «íΩ∩ó½Ñ¡á, »αѪñÑ τѼ «¡á íπñÑΓ ¿ß»«½∞º«óáΓ∞ß∩.
- ÅαÑñ½«ªÑ¡¿Ñ
- VAR a,b,c:LONGCARD
- «íΩ∩ó½∩ÑΓ »ÑαѼѡ¡δÑ á, ó, ß, ¿ ¿ºóÑΘáÑΓ, τΓ« «¡¿ ¼«úπΓ »α¿¡¿¼áΓ∞ ½εíδÑ τ¿ß½«óδÑ º¡áτÑ¡¿∩:
- 0,1,2,3...
- Ä»ÑαáΓ«α FOR c := 1 TO 100 DO ... END óδºδóáÑΓ »«óΓ«α∩εΘÑÑß∩ (µ¿¬½¿τÑ߬«Ñ) óδ»«½¡Ñ¡¿Ñ
- «»ÑαáΓ«α«ó, ºá¬½ετÑ¡¡δσ ¼Ñªñπ DO ¿ END ß »ÑαѼѡ¡«⌐ ß, »α¿¡¿¼áεΘÑ⌐ »«ß½Ññ«óáΓѽ∞¡« º¡áτÑ¡¿∩
- 1,2,...,100.
- Åα«τ¿Ñ «»ÑαáΓ«αδ FOR »«ñ«í¡δ »Ñαó«¼π ¿, »«ß¬«½∞¬π «¡¿ "󽫪ѡδ", Γ« »ÑαѼѡ¡δÑ »«½πτá-
- εΓ óßÑ󫺼«ª¡δÑ ß«τÑΓá¡¿∩
- ( a<=b<=c ).
- ùΓ«íδ ßñѽáΓ∞ í«½ÑÑ ½Ñú¬¿¼ »«¡¿¼á¡¿Ñ, ¬á¬«⌐ END ß««ΓóÑΓßΓóπÑΓ ¬á¬«¼π FOR, ¼δ ¿ß»«½∞ºπѼ
- ß«ú½áΦÑ¡¿Ñ, τΓ« END ºá»¿ßδóáÑΓß∩ »α∩¼« »«ñ ß««ΓóÑΓßΓóπεΘ¿¼ FOR, ¿ «»ÑαáΓ«αδ ¼Ñªñπ ¡¿¼¿
- ßñó¿úáεΓß∩. Æá¬«Ñ ß«ú½áΦÑ¡¿Ñ »α¿¼Ñ¡¿¼« ¿ ¬ ñαπú¿¼ «»ÑαáΓ«αá¼, ΓαÑíπεΘ¿¼ END.
- Ä»ÑαáΓ«α IF a*a+b*b=c*c THEN ...END «íΩ∩ó½∩ÑΓ, τΓ« «»ÑαáΓ«αδ ¼Ñªñπ THEN ¿ END óδ»«½¡∩-
- εΓß∩ Γ«½∞¬« ó Γ«¼ ß½πτáÑ, Ñß½¿ ΓѬπΘ¿Ñ º¡áτÑ¡¿∩ á, ó, ß πñ«ó½ÑΓó«α∩εΓ αáóÑ¡ßΓóπ. Æá¬¿¼ «í-
- αẫ¼, ¡á óδó«ñ¡«Ñ πßΓα«⌐ßΓó« »«»áñáεΓ Γ«½∞¬« ¿¡ΓÑαÑßπεΘ¿Ñ ¡áß Γα«⌐¬¿.
- é »«α∩ñ¬Ñ π»α᪡ѡ¿∩ óδ ¼«ªÑΓÑ »«»δΓáΓ∞ß∩ ¡á⌐Γ¿ αÑΦÑ¡¿∩ ñ½∩ παáó¡Ñ¡¿∩ á*á*á + ó*ó*ó +
- ß*ß*ß = d*d*d.
-
- îπºδ¬á
- ------
-
- MODULE prog3;
- (* ¥Γá »α«úαá¼¼á ¿ß»«½¡∩ÑΓ ¼πºδ¬á½∞¡δÑ α∩ñδ (úá¼¼δ). *)
- FROM Lib IMPORT Sound, NoSound, Delay;
- FROM MATHLIB IMPORT Exp, Log;
-
- CONST MiddleC = 131.0;
- TYPE NoteType = SHORTINT;
- TYPE ScaleType = ARRAY [1..8] OF NoteType;
- CONST major = ScaleType(0,2,4,5,7,9,11,12);
- CONST minor = ScaleType(0,2,3,5,7,8,11,12);
- PROCEDURE PlayScale(mode:ScaleType; key:NoteType);
- VAR
- i:[1..8];
- note:NoteType;
- freq:LONGREAL;
- BEGIN
- FOR i:=1 TO 8 DO
- note:=key+mode[i];
- freq:=MiddleC*Exp(LONGREAL(note)*(Log(2.0)/12.0));
- Sound(CARDINAL(freq));
- Delay(200);
- END;
- NoSound;
- Delay(500);
- END PlayScale;
-
- BEGIN
- PlayScale(major,0); (* ñ« ¼áª«α *)
- PlayScale(minor,2); (* αÑ ¼¿¡«α *)
- END prog3.
-
-
- Åα«úαá¼¼á ¿ß»«½∞ºπÑΓ óßΓα«Ñ¡¡δ⌐ ñ¿¡á¼¿¬ óáΦÑú« ¬«¼»∞εΓÑαá ñ½∩ ¿ß»«½¡Ñ¡¿∩ »áα ¼πºδ¬á½∞-
- ¡δσ úá¼¼. Åα«µÑñπαá, óδºδóáѼá∩ ¬á¬ PlayScale, «»αÑñÑ½Ñ¡á ¬á¬ ¿¼ÑεΘá∩ 2 »áαá¼ÑΓαá. ÅÑαóδ⌐
- »áαá¼ÑΓα «»αÑñѽ∩ÑΓ ¿¡ΓÑαóá½δ úá¼¼, óΓ«α«⌐ «»αÑñѽ∩ÑΓ »Ñαóπε ¡«Γπ úá¼¼δ.
- Ä»αÑñѽѡ¿∩ »α«µÑñπα »«σ«ª¿ »« Σ«α¼Ñ ¡á «»αÑñѽѡ¿∩ »α«úαá¼¼: «¡¿ ß«ñÑαªáΓ «íΩ∩ó½Ñ¡¿∩,
- ºá ¬«Γ«α묨 ß½ÑñπÑΓ ß»¿ß«¬ «»ÑαáΓ«α«ó. é »α«úαá¼¼Ñ ¿ß»«½∞ºπεΓß∩ ñóá ó맮óá PlayScale:
- PlayScale(major,0) - ¿ß»«½¡∩ÑΓ úá¼¼π ñ« ¼áª«α, a PlayScale(minor,2) - úá¼¼π αÑ ¼¿¡«α.
- Ä»ÑαáΓ«α ó¿ñá
- variable:=expression
- (»ÑαѼѡ¡á∩:=óδαáªÑ¡¿Ñ)
- ¿ºóÑΘáÑΓ, τΓ« º¡áτÑ¡¿Ñ »ÑαѼѡ¡«⌐ πßΓá¡áó½¿óáÑΓß∩ αáó¡δ¼ º¡áτÑ¡¿ε óδαáªÑ¡¿∩. é óδαáªÑ¡¿∩σ,
- úñÑ óßΓαÑτáÑΓß∩ »ÑαѼѡ¡á∩, ¿ß»«½∞ºπÑΓß∩ ÑÑ ΓѬπΘÑÑ º¡áτÑ¡¿Ñ.
- Æ¿»δ ñá¡¡δσ ¿ß»«½∞ºπεΓß∩ ñ½∩ π¬áºá¡¿∩, ¬á¬¿Ñ º¡áτÑ¡¿∩ ¼«ªÑΓ »α¿¡¿¼áΓ∞ »ÑαѼѡ¡á∩. é
- ∩ºδ¬Ñ Modula-2 «»αÑñѽѡδ ßΓá¡ñáαΓ¡δÑ Γ¿»δ, Γá¬¿Ñ ¬á¬: SHORTINT, LONGREAL, CARDINAL,
- LONGCARD, CHAR, BOOLEAN. Å«¼¿¼« φΓ«ú«, ßπΘÑßΓóπεΓ αẽ¿τ¡δÑ ß»«ß«íδ ß«ºñá¡¿∩ ¡«óδσ Γ¿»«ó
- ñá¡¡δσ. æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« ßπΘÑßΓóπÑΓ ¼¡«ú« ß»«ß«í«ó »αÑñßΓáó½Ñ¡¿∩ º¡áτÑ¡¿⌐ τ¿ßѽ.
- ÅαÑñßΓáó½Ñ¡¿Ñ ñ«½ª¡« óδí¿αáΓ∞ß∩ Γᬿ¼ «íαẫ¼, τΓ«íδ º¡áτÑ¡¿Ñ ¬áªñ«ú« óδαáªÑ¡¿∩ »«»áñὫ íδ
- ó ºáñá¡¡δÑ úαá¡¿µδ.
- Modula-2 - φΓ« "ß¿½∞¡« Γ¿»¿º¿α«óá¡¡δ⌐" ∩ºδ¬. ¥Γ« «º¡áτáÑΓ, τΓ« Γ¿» ¬áªñ«ú« óδαáªÑ¡¿∩
- ñ«½ªÑ¡ íδΓ∞ ¬«ααÑ¬Γ¡δ¼ ñ½∩ ¬«¡ΓѬßΓá, ó ¬«Γ«α«¼ «¡ óßΓαÑτáÑΓß∩. èᬠ»αá󿽫, Γ¿»δ «»Ñαá¡ñ«ó
- í¿¡áα¡«ú« «»ÑαáΓ«αá («»ÑαáΓ«αá, ¿¼ÑεΘÑú« ñóá «»Ñαá¡ñá) ñ«½ª¡δ ß«ó»áñáΓ∞. éδαáªÑ¡¿Ñ ¼«ªÑΓ
- íδΓ∞ »αÑ«íαẫóá¡« ó ñαπú«⌐ Γ¿» ºá¬½ετÑ¡¿Ñ¼ Ñú« ó ¬απú½δÑ ß¬«í¬¿ () ¿ »«¼ÑΘÑ¡¿Ñ¼ ¿¼Ñ¡¿ ΓαÑ-
- íπѼ«ú« Γ¿»á »ÑαÑñ ¡¿¼¿. é »α¿¼ÑαÑ »ÑαѼѡ¡á∩ note »αÑ«íαáºπÑΓß∩ ¿º SHORTINT ó LONGREAL.
- ÅαÑñ½«ªÑ¡¿Ñ
- TYPE ScaleType = ARRAY[1..8] OF NoteType
- «íΩ∩ó½∩ÑΓ ¡«óδ⌐ Γ¿» ñá¡¡δσ, ¡áºδóáѼδ⌐ ScaleType, º¡áτÑ¡¿∩ ¬«Γ«α«ú« ß«ßΓ«∩Γ ¿º ó«ß∞¼¿ ¡Ñºá-
- ó¿ß¿¼δσ ¬«¼»«¡Ñ¡Γ, »α«¡π¼Ñα«óá¡¡δσ 1,2,...,8. é »α«úαá¼¼Ñ mode «íΩ∩ó½∩ÑΓß∩ ∩ó½∩εΘÑ⌐ß∩ Γ¿»á
- ScaleType. ä«ßΓπ» ¬ ¬«¼»«¡Ñ¡Γá¼ ¼«ª¡« »«½πτ¿Γ∞ »α¿ »«¼«Θ¿ ¬«¡ßΓαπ¬µ¿¿ mode[e], úñÑ Ñ - ¡Ñ-
- ¬«Γ«α«Ñ óδαáªÑ¡¿Ñ. Æ.«., »α¿ßóá¿óá¡¿Ñ note := key+mode[i] πßΓá¡áó½¿óáÑΓ º¡áτÑ¡¿Ñ note αáó-
- ¡δ¼ ßπ¼¼Ñ º¡áτÑ¡¿⌐ »ÑαѼѡ¡«⌐ key ¿ i-⌐ ¬«¼»«¡Ñ¡Γδ »ÑαѼѡ¡«⌐ mode.
- Å«¼¿¼« φΓ«ú« ó »α«úαá¼¼Ñ ¿¼ÑεΓß∩ ¡Ñ߬«½∞¬« «»αÑñѽѡ¿⌐ ¬«¡ßΓá¡Γ.
- CONST MiddleC = 131.0
- ¿ºóÑΘáÑΓ, τΓ« óßεñπ, úñÑ óßΓαÑΓ¿Γß∩ ¿¼∩ MiddleC ß½ÑñπÑΓ »«ñßΓáó½∩Γ∞ º¡áτÑ¡¿Ñ 131.0.
- CONST major = ScaleType(0,2,4,5,7,9,11,12)
- ¿ºóÑΘáÑΓ, τΓ« óßεñπ, úñÑ óßΓαÑΓ¿Γß∩ ¿¼∩ major, ß½ÑñπÑΓ ¿ß»«½∞º«óáΓ∞ Γ¿» ScaleType ß »ÑαÑ-
- τ¿ß½Ñ¡¡δ¼¿ º¡áτÑ¡¿∩¼¿ ¬«¼»«¡Ñ¡Γ.
- æ½ÑñπεΘá∩ »α«úαá¼¼á Γá¬ªÑ ¿ß»«½∞ºπÑΓ ¼áßß¿ó, ¡« í«½ÑÑ ß½«ª¡δ¼ ß»«ß«í«¼.
-
- Ç¡áúαá¼¼á
- ---------
-
- MODULE prog4;
- (* ¥Γá »α«úαá¼¼á óδó«ñ¿Γ »ÑαÑßΓá¡«ó¬¿ ó ßΓ᫬áσ ó á½Σá-
- ó¿Γ¡«¼ »«α∩ñ¬Ñ. *)
- IMPORT IO,Str;
-
- TYPE StringType = ARRAY [0..9] OF CHAR;
- PROCEDURE NextPerm(n:CARDINAL;
- VAR s:StringType;
- VAR wrap:BOOLEAN);
- (* äá¡¡á∩ »α«µÑñπαá ¼«ñ¿Σ¿µ¿απÑΓ s »πΓѼ »«ß½Ññ«óáΓѽ∞¡δσ »ÑαÑßΓá¡«ó«¬ »Ñαóδσ n ß¿¼ó«-
- ½«ó ó s. ū߽Ññ«óáΓѽ∞¡«ßΓ∞ »ÑαѼÑΘÑ¡¿⌐, úÑ¡Ñα¿απѼá∩ »«ß½Ññ«óáΓѽ∞¡δ¼¿ ó맮óἿ, ß«ºñáÑΓß∩
- ó "á½Σáó¿Γ¡«¼" »«α∩ñ¬Ñ. àß½¿ s ∩ó½∩ÑΓß∩ »«ß½Ññ¡Ñ⌐ ßΓ᫬«⌐ ó »«ß½Ññ«óáΓѽ∞¡«ßΓ¿, Γ« ó«ºóαá-
- ΘáÑΓß∩ »Ñαóá∩. ï«ú¿τÑ߬á∩ »ÑαѼѡ¡á∩ αѺπ½∞ΓáΓá wrap ¿ß»«½∞ºπÑΓß∩ ñ½∩ ß¿ú¡á½¿ºáµ¿¿ «í φΓ«¼
- ß«íδΓ¿¿. *)
- VAR
- i:CARDINAL; (* s[i-1] - ΓѬπΘ¿⌐ ß¿¼ó«½ - ¬á¡ñ¿ñáΓ
- ¡á ¿º¼Ñ¡Ñ¡¿Ñ. *)
- j:CARDINAL; (* s[j] - ß¿¼ó«½, ¼Ñ¡∩Ѽδ⌐ ¼ÑßΓἿ
- ß s[i-1]. *)
- tmp:CHAR;
- BEGIN
- IF n = 0 THEN
- wrap := TRUE;
- RETURN;
- END;
- i := n-1;
- LOOP
- IF i = 0 THEN
- wrap := TRUE;
- EXIT;
- END;
- IF s[i-1] < s[i] THEN
- j := n-1;
- WHILE s[j] <= s[i-1] DO
- j := j-1;
- END;
- tmp := s[j]; s[j] := s[i-1]; s[i-1] := tmp;
- (* »ÑαÑßΓá¡«ó¬á *)
- wrap := FALSE;
- EXIT;
- END;
- i := i-1;
- END;
- (* s[i]..s[n-1] ¡áσ«ñ∩Γß∩ ó «íαáΓ¡«¼ »«α∩ñ¬Ñ, ΓαÑíπÑΓß∩ »α«¿ºóÑßΓ¿ ¿σ »ÑαÑßΓá¡«ó¬π ºá
- ¼¿¡¿¼á½∞¡«Ñ τ¿ß½« »ÑαѼÑΘÑ¡¿⌐. *)
- j := n-1;
- WHILE i<j DO
- tmp := s[j]; s[j] := s[i]; s[i] := tmp;
- i := i+1;
- j := j-1;
- END;
- END NextPerm;
-
- VAR InputString:StringType;
- wrap:BOOLEAN;
- online:CARDINAL; (* 諽¿τÑßΓó« ßΓ᫬ ó óδσ«ñ¡«⌐
- ßΓ᫬Ñ. *)
- len:CARDINAL;
- BEGIN
- IO.WrStr('éóÑñ¿ΓÑ ßΓ᫬π : ');
- IO.RdStr(InputString);
-
- len := Str.Length((InputString);
- REPEAT
- NextPerm(len,InputString,wrap);
- UNTIL wrap;
-
- online := 0;
- REPEAT
- IO.WrStr(InputString);
- IO.WrStr(' ');
- online := online+1;
- IF online = 6 THEN
- IO.WrLn;
- online := 0;
- END;
- NextPerm(len,InputString,wrap);
- UNTIL wrap;
- END prog4.
-
- NextPerm ∩ó½∩ÑΓß∩ ñαπú¿¼ »α¿¼Ñα«¼ »α«µÑñπαδ. 滿߫¬ »áαá¼ÑΓα«ó, ß½ÑñπεΘ¿⌐ ºá «íΩ∩ó½Ñ-
- ¡¿Ñ¼ ¿¼Ñ¡¿ »α«µÑñπαδ, ¡áºδóáÑΓß∩ ß»¿ß¬«¼ Σ«α¼á½∞¡δσ »áαá¼ÑΓα«ó. Åα¿ ó맮óÑ »α«µÑñπαδ ¡á Ñú«
- ¼ÑßΓ« ñ«½ªÑ¡ íδΓ∞ »«ñßΓáó½Ñ¡ ß««ΓóÑΓßΓóπεΘ¿⌐ ß»¿ß«¬ Σá¬Γ¿τÑ߬¿σ »áαá¼ÑΓα«ó.
- é ñá¡¡«¼ ß½πτáÑ «»αÑñѽѡδ 3 Σ«α¼á½∞¡δσ »áαá¼ÑΓαá:
- n:CARDINAL;
- VAR s:StringType;
- VAR wrap:BOOLEAN.
-
- àß½¿ »ÑαÑñ Σ«α¼á½∞¡δ¼ »áαá¼ÑΓα«¼ ßΓ«¿Γ ¬½ετÑó«Ñ ß½«ó«
- VAR, Γ«:
- - «¡ «»αÑñѽѡ ¬á¬ »áαá¼ÑΓα-»ÑαѼѡ¡á∩;
- - Ñß½¿ «¡ »«½πτáÑΓ º¡áτÑ¡¿Ñ ó¡πΓα¿ »α«µÑñπαδ, Γ« º¡áτÑ¡¿Ñ ß««ΓóÑΓßΓóπεΘÑ⌐ »ÑαѼѡ¡«⌐ ó
- Σá¬Γ¿τÑ߬«¼ ß»¿ß¬Ñ »áαá¼ÑΓα«ó ¼«ñ¿Σ¿µ¿απÑΓß∩; Γá¬ªÑ »áαá¼ÑΓαδ-»ÑαѼѡ¡δÑ ¼«úπΓ ¿ß»«½∞º«-
- óáΓ∞ß∩ ñ½∩ ó«ºóαáΘÑ¡¿∩ αѺπ½∞ΓáΓ«ó;
- - ó ¼ÑßΓÑ ó맮óá »α«µÑñπαδ ß««ΓóÑΓßΓóπεΘ¿⌐ »áαá¼ÑΓα ñ«½ªÑ¡ íδΓ∞ »ÑαѼѡ¡«⌐ á¡á½«ú¿τ¡«-
- ú« Γ¿»á.
- æ ñαπú«⌐ ßΓ«α«¡δ, Ñß½¿ Σ«α¼á½∞¡δ⌐ »áαá¼ÑΓα ¡Ñ »αÑñóáα∩ÑΓß∩ ¬½ετÑóδ¼ ß½«ó«¼ VAR, Γ«:
- - «¡ «»¿ßδóáÑΓß∩ ¬á¬ »áαá¼ÑΓα-º¡áτÑ¡¿Ñ;
- - ½εíδÑ ¿º¼Ñ¡Ñ¡¿∩ Ñú« ¡Ñ ºáΓαáú¿óáεΓ º¡áτÑ¡¿⌐ ß««ΓóÑΓßΓóπεΘ¿σ Σ«α¼á½∞¡δσ »áαá¼ÑΓα«ó;
- Γá¬¿Ñ »áαá¼ÑΓαδ-º¡áτÑ¡¿∩ ¡Ñ ¼«úπΓ íδΓ∞ ¿ß»«½∞º«óá¡δ ñ½∩ ó«ºóαáΓá αѺπ½∞ΓáΓ«ó;
- - ó ¼ÑßΓÑ ó맮óá »α«µÑñπαδ ß««ΓóÑΓßΓóπεΘ¿⌐ Σá¬Γ¿τÑ߬¿⌐ »áαá¼ÑΓα ¼«ªÑΓ íδΓ∞ ½εíδ¼ óδαá-
- ªÑ¡¿Ñ¼ ("¬«ααÑ¬Γ¡«ú«" Γ¿»á).
- Åα«úαá¼¼á 4 ¿ß»«½∞ºπÑΓ αẽ¿τ¡δÑ ó¿ñδ µ¿¬½«ó.
- Ä»ÑαáΓ«α ó Σ«α¼Ñ LOOP...END; «íΩ∩ó½∩ÑΓ, τΓ« «¬απªáѼδÑ Γᬫ⌐ ¬«¡ßΓαπ¬µ¿Ñ⌐ «»ÑαáΓ«αδ
- ñ«½ª¡δ µ¿¬½¿τÑ߬¿ óδ»«½¡∩Γ∞ß∩, »«¬á ¡Ñ óδ»«½¡¿Γß∩ «»ÑαáΓ«α EXIT. Modula-2 ¿¼ÑÑΓ Γá¬ªÑ «»Ñ-
- αáΓ«αδ WHILE ¿ REPEAT. Ä¡¿ ¼«úπΓ íδΓ∞ óδαáªÑ¡δ τÑαѺ µ¿¬½ LOOP ß«ú½áß¡« ß½ÑñπεΘÑ⌐ Γáí½¿µÑ:
-
- WHILE óδαáªÑ¡¿Ñ DO LOOP
- ... IF NOT óδαáªÑ¡¿Ñ THEN
- END; EXIT;
- END;
- ...
- END;
-
- REPEAT LOOP
- ... ...
- UNTIL óδαáªÑ¡¿Ñ; IF óδαáªÑ¡¿Ñ THEN
- EXIT;
- END;
- END;
-
- æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« ñ½∩ µ¿¬½á Γ¿»á REPEAT 󽫪ѡ¡δÑ «»ÑαáΓ«αδ óßÑúñá óδ»«½¡∩εΓß∩ ¬á¬
- ¼¿¡¿¼π¼ «ñ¡áªñδ, á ñ½∩ µ¿¬½á WHILE «¡¿ ¼«úπΓ ¡Ñ óδ»«½¡∩Γ∞ß∩ ¡¿ αáºπ.
- ÄíΩ∩ߡѡ¿Ñ Γ«ú«, ¬á¬ αáí«ΓáÑΓ »α«µÑñπαá NextPerm óÑß∞¼á ß½«ª¡« ¿ óδσ«ñ¿Γ ºá αἬ¿
- »αÑñ¼ÑΓá «íßπªñÑ¡¿∩ (¡á»«¼¡¿¼, τΓ« «íßπªñáεΓß∩ »«ñα«í¡«ßΓ¿ ∩ºδ¬á Modula-2, á ¡Ñ ß½«ª¡δÑ á½-
- ú«α¿Γ¼δ). éδ ¼«ªÑΓÑ »«»δΓáΓ∞ß∩ αẫíαáΓ∞ß∩ ó φΓ«¼ ó«»α«ßÑ ßἫßΓ«∩Γѽ∞¡«, ¡« ¡Ñ αáßßΓαá¿-
- óá⌐ΓÑß∞, Ñß½¿ ¡Ñ ß¼«ªÑΓÑ ßñѽáΓ∞ φΓ«ú«.
- æ½ÑñπεΘá∩ πτÑí¡á∩ »α«úαá¼¼á Γá¬ªÑ ¿ß»«½∞ºπÑΓ NextPerm. Æá¬¿Ñ ß¿Γπᵿ¿ 󫺡¿¬áεΓ ó
- »α«úαá¼¼¿α«óá¡¿¿ óÑß∞¼á τáßΓ«, »«φΓ«¼π Modula-2 »«ºó«½∩ÑΓ óá¼ ß«ºñáóáΓ∞ ßó«¿ ß«íßΓóÑ¡¡δÑ
- "í¿í½¿«ΓÑτ¡δÑ" ¼«ñπ½¿. ä½∩ Γ«ú«, τΓ«íδ ß«ºñáΓ∞ Γᬫ⌐ ¼«ñπ½∞, ¡áñ« ß«ºñáΓ∞ ñóá Σá⌐½á. ÅÑαóδ⌐
- - φΓ« Σá⌐½ «»αÑñѽѡ¿⌐ (definition file), ߻ѵ¿Σ¿µ¿απεΘ¿⌐, τΓ« ñѽáÑΓ ñá¡¡δ⌐ ¼«ñπ½∞, ¿ óΓ«-
- α«⌐ - φΓ« Σá⌐½ αÑ὿ºáµ¿¿ (implementation file), «»¿ßδóáεΘ¿⌐, ¬á¬ óδ»«½¡∩εΓß∩ Σπ¡¬µ¿¿ ¼«ñπ-
- ½∩. ì¿ªÑ »α¿ó«ñ∩Γß∩ ñÑ⌐ßΓó¿∩ ñ½∩ ß«ºñá¡¿∩ ¼«ñπ½∩ ñ½∩ »α«µÑñπαδ NextPerm.
-
-
-
-
-
- öá⌐½ «»¿ßá¡¿⌐ (¿¼∩ Σá⌐½á perms.def):
- ------------------------------------
-
- DEFINITION MODULE perms;
- PROCEDURE NextPerm(n:CARDINAL; VAR s:ARRAY OF BYTE;
- VAR wrap:BOOLEAN);
- (* äá¡¡á∩ »α«µÑñπαá ¼«ñ¿Σ¿µ¿απÑΓ s »πΓѼ »«ß½Ññ«óáΓѽ∞¡δσ »ÑαÑßΓá¡«ó«¬ »Ñαóδσ n ß¿¼ó«-
- ½«ó ó s. ū߽Ññ«óáΓѽ∞¡«ßΓ∞ »ÑαѼÑΘÑ¡¿⌐, úÑ¡Ñα¿απѼá∩ »«ß½Ññ«óáΓѽ∞¡δ¼¿ ó맮óἿ, ß«ºñáÑΓß∩
- ó "á½Σáó¿Γ¡«¼" »«α∩ñ¬Ñ. àß½¿ s ∩ó½∩ÑΓß∩ »«ß½Ññ¡Ñ⌐ ßΓ᫬«⌐ ó »«ß½Ññ«óáΓѽ∞¡«ßΓ¿, Γ« ó«ºóαá-
- ΘáÑΓß∩ »Ñαóá∩. ï«ú¿τÑ߬á∩ »ÑαѼѡ¡á∩ αѺπ½∞ΓáΓá wrap ¿ß»«½∞ºπÑΓß∩ ñ½∩ ß¿ú¡á½¿ºáµ¿¿ «í φΓ«¼
- ß«íδΓ¿¿. *)
- END perms.
-
- öá⌐½ αÑ὿ºáµ¿⌐ (¿¼∩ Σá⌐½á perms.mod):
- --------------------------------------
-
- IMPLEMENTATION MODULE perms;
-
- PROCEDURE NextPerm(n:CARDINAL; VAR s:ARRAY OF BYTE;
- VAR wrap:BOOLEAN);
- VAR
- i:CARDINAL; (* s[i-1] - ΓѬπΘ¿⌐ ß¿¼ó«½ - ¬á¡ñ¿ñáΓ
- ¡á ¿º¼Ñ¡Ñ¡¿Ñ. *)
- j:CARDINAL; (* s[j] - ß¿¼ó«½, ¼Ñ¡∩Ѽδ⌐ ¼ÑßΓἿ
- ß s[i-1]. *)
- tmp:BYTE;
- BEGIN
- IF n = 0 THEN
- wrap := TRUE;
- RETURN;
- END;
- i := n-1;
- LOOP
- IF i = 0 THEN
- wrap := TRUE;
- EXIT;
- END;
- IF s[i-1] < s[i] THEN
- j := n-1;
- WHILE s[j] <= s[i-1] DO
- j := j-1;
- END;
- tmp := s[j]; s[j] := s[i-1]; s[i-1] := tmp;
- (* »ÑαÑßΓá¡«ó¬á *)
- wrap := FALSE;
- EXIT;
- END;
- i := i-1;
- END;
- (* s[i]..s[n-1] ¡áσ«ñ∩Γß∩ ó «íαáΓ¡«¼ »«α∩ñ¬Ñ, ΓαÑíπÑΓß∩
- »α«¿ºóÑßΓ¿ ¿σ »ÑαÑßΓá¡«ó¬π ºá ¼¿¡¿¼á½∞¡«Ñ τ¿ß½«
- »ÑαѼÑΘÑ¡¿⌐. *)
- j := n-1;
- WHILE i<j DO
- tmp := s[j]; s[j] := s[i]; s[i] := tmp;
- i := i+1;
- j := j-1;
- END;
- END NextPerm;
-
- END perms.
-
- X«Γ∩ ó ñá¡¡«¼ »α¿¼ÑαÑ ¼«ñπ½∞ perms αÑ὿º«óδóáÑΓ Γ«½∞¬« «ñ¡π «»Ñαᵿε, »αÑñßΓáó½∩ÑΓß∩
- í«½ÑÑ »«½Ñº¡δ¼ αÑ὿º«óδóáΓ∞ ó ¼«ñπ½∩σ µÑ½δÑ úαπ»»δ «»Ñαᵿ⌐. (ÄΓ¼ÑΓ¿¼, τΓ« í¿í½¿«ΓѬáα∞
- JPI Modula-2 ó¬½ετáÑΓ ó »«½¡πε »α«úαá¼¼π Γ«½∞¬« ΓÑ »α«µÑñπαδ ¿º ¼«ñπ½∩, ¬«Γ«αδÑ ¿ß»«½∞ºπεΓ-
- ß∩ ó ¡Ñ⌐).
- é ΓѬßΓÑ »α«µÑñπαδ ßñѽᡫ ¡Ñí«½∞Φ«Ñ ¿º¼Ñ¡Ñ¡¿Ñ: VAR s:StringType ºá¼Ñ¡Ñ¡« ¡á VAR
- s:ARRAY OF BYTE. ¥Γ« »«ºó«½∩ÑΓ π»α«ßΓ¿Γ∞ á¡á½¿º Γ¿»«ó ó ¬«¼»¿½∩Γ«αÑ. Æá¬«⌐ Γ¿» »áαá¼ÑΓα«ó
- ¡áºδóáÑΓß∩ »áαá¼ÑΓα-«Γ¬αδΓδ⌐ ¼áßß¿ó ¿ ∩ó½∩ÑΓß∩ óÑß∞¼á »«½Ñº¡δ¼, »«ß¬«½∞¬π »«ºó«½∩ÑΓ »α«ú-
- αá¼¼¿ßΓπ »ÑαÑñáΓ∞ ó »α«µÑñπαπ ¼áßß¿óδ αẽ¿τ¡δσ αẼÑα«ó. ¥½Ñ¼Ñ¡Γδ s ¡π¼ÑαπεΓß∩
- 0,1,...,HIGH(s), úñÑ HIGH - ßΓáαΦÑÑ º¡áτÑ¡¿Ñ. (êß»«½∞º«óá¡¿Ñ Γ¿»á BYTE, á ¡Ñ Γ¿»á CHAR »«º-
- ó«½∩ÑΓ »ÑαÑß½áΓ∞ ¼áßß¿óδ Γ¿»á SHORTCARD ¡áαáó¡Ñ ß ¼áßß¿óἿ Γ¿»á CHAR).
- ì¿ªÑ »α¿ó«ñ¿Γß∩ »α«úαá¼¼á, ó ¬«Γ«α«⌐ ¼«ñπ½∞ perms ¿ß»«½∞ºπÑΓß∩ »α¿ αÑΦÑ¡¿¿ ú«½«ó«½«-
- ¼«¬.
-
-
-
- ⫽«ó«½«¼¬á
- -----------
-
- MODULE prog5;
-
- (* ¥Γá »α«úαá¼¼á ß«ºñáÑΓ ß»¿ß¬¿ 9 µ¿Σα«óδσ τ¿ßѽ, ß«ñÑαªáΘ¿σ ¬áªñπε µ¿Σαπ «Γ 1 ñ« 9,
- ∩ó½∩εΘ¿σß∩ αѺπ½∞ΓáΓ«¼ «íαáí«Γ¬¿ ΓαÑσ 3-σ µ¿Σα«óδσ τ¿ßѽ, Γá¬ªÑ ß«ñÑαªáΘ¿σ ¬áªñπε µ¿Σαπ «Γ
- 1 ñ« 9. *)
- IMPORT IO;
- FROM perms IMPORT NextPerm;
- PROCEDURE check(n:LONGCARD):BOOLEAN;
-
- (* è«¡Γα«½¿απÑΓ, ∩ó½∩εΓß∩ ½¿ µ¿Σαδ τ¿ß½á n ¬«¼í¿¡áµ¿Ñ⌐
- 1..9. *)
- VAR i:[1..9];
- digit:[0..9];
- seen:ARRAY [0..9] OF BOOLEAN;
- BEGIN
- seen[0] := TRUE;
- FOR i := 1 TO 9 DO
- seen[i] := FALSE;
- END;
- FOR i := 1 TO 9 DO
- digit := CARDINAL(n MOD 10);
- (* n MOD 10 - φΓ« «ßΓáΓ«¬ «Γ ñѽѡ¿∩ n ¡á 10. *)
- IF seen[digit] THEN
- RETURN FALSE;
- ELSE
- seen[digit] := TRUE;
- END;
- n := n DIV 10;
- (* DIV - µÑ½«τ¿ß½Ñ¡¡«Ñ º¡áτÑ¡¿Ñ. *)
- END;
- RETURN TRUE;
- END check;
-
- VAR d:ARRAY[0..8] OF SHORTCARD;
- a,b,c:CARDINAL;
- n:LONGCARD;
- i:CARDINAL;
- wrap:BOOLEAN;
- BEGIN
- FOR i := 0 TO 8 DO
- d[i] := SHORTCARD(i) + 1;
- END;
-
- REPEAT
- a := CARDINAL(d[0])*100 + CARDINAL( d[1]*10 + d[2] );
- b := CARDINAL(d[3])*100 + CARDINAL( d[4]*10 + d[5] );
- c := CARDINAL(d[6])*100 + CARDINAL( d[7]*10 + d[8] );
- n := LONGCARD(a) * LONGCARD(c);
- IF check(n) THEN
- IO.WrStr('A solution is ');
- IO.WrCard(a, 1);
- IO.WrStr(' x ');
- IO.WrCard(b, 1);
- IO.WrStr(' x ');
- IO.WrCard(c, 1);
- IO.WrStr(' = ');
- IO.WrLngCard(n, 1);
- IO.WrLn;
- END;
- NextPerm(9,d,wrap);
- UNTIL wrap;
- END prog5.
-
- Åα«µÑñπαá check ∩ó½∩ÑΓß∩ »α¿¼Ñα«¼ »α«µÑñπαδ Γ¿»á "Σπ¡¬µ¿∩" (τáßΓ« ¿¼Ñ¡πѼ«⌐ »α«ßΓ«
- "Σπ¡¬µ¿Ñ⌐"). öπ¡¬µ¿¿ óδºδóáεΓß∩ ¿º óδαáªÑ¡¿⌐ ¿ ó«ºóαáΘáѼδÑ ¿¼¿ º¡áτÑ¡¿∩ »«ñßΓáó½∩εΓß∩ ó
- óδαáªÑ¡¿∩. Æ¿» αѺπ½∞ΓáΓá π¬áºδóáÑΓß∩ »«ß½Ñ ß»¿ß¬á Σ«α¼á½∞¡δσ »áαá¼ÑΓα«ó, ΓᬠτΓ«
-
- PROCEDURE check(n:LONGCARD):BOOLEAN;
-
- «íΩ∩ó½∩ÑΓ, τΓ« check - φΓ« Σπ¡¬µ¿∩, ó«ºóαáΘáεΘá∩ αѺπ½∞ΓáΓ ½«ú¿τÑ߬«ú« Γ¿»á. 髺óαáΘáѼδ⌐
- αѺπ½∞ΓáΓ ºáñáÑΓß∩ «»ÑαáΓ«α«¼ Σ«α¼δ
- RETURN óδαáªÑ¡¿Ñ.
- ¥Γ«Γ «»ÑαáΓ«α ¼«ªÑΓ ßΓ«∩Γ∞ ó ½εí«¼ ¼ÑßΓÑ Σπ¡¬µ¿¿, ¿ óδ»«½¡Ñ¡¿Ñ Ñú« »α¿ó«ñ¿Γ ¬ ºáóÑαΦÑ¡¿ε
- αáí«Γδ Σπ¡¬µ¿¿, »α¿ φΓ«¼, º¡áτÑ¡¿Ñ óδαáªÑ¡¿∩ ßΓá¡«ó¿Γß∩ αѺπ½∞ΓáΓ«¼ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿.
- ÄíΩ∩ó½Ñ¡¿Ñ VAR digit:[1..10] ¡πªñáÑΓß∩ ó ñÑΓá½∞¡δσ αáºΩ∩ߡѡ¿∩σ. öá¬Γ¿τÑ߬¿, φΓ« ÑßΓ∞
- ¬«α«Γ¬á∩ Σ«α¼á «íΩ∩ó½Ñ¡¿∩ VAR digit:CARDINAL[1..10], ¿ ∩ó½∩ÑΓß∩ «íΩ∩ó½Ñ¡¿Ñ¼ »«ññ¿á»áº«¡á.
- CARDINAL - φΓ« íẫóδ⌐ Γ¿», »α¿ »«¼«Θ¿ ¬«Γ«α«ú« »α«óÑα∩ÑΓß∩, ∩ó½∩ÑΓß∩ ½¿ óδαáªÑ¡¿Ñ "¬«α-
- αÑ¬Γ¡δ¼" ñ½∩ ¬«¡ΓѬßΓá, ó ¬«Γ«α«¼ «¡« ¿ß»«½∞ºπÑΓß∩. Æá¬«Ñ «»αÑñѽѡ¿Ñ ¼«ªÑΓ »«¬áºáΓ∞ß∩ ¡Ñ-
- »«¡∩Γ¡δ¼, ¡« «ñ¿¡ »α¿¼Ñα ¼«ªÑΓ αáºΩ∩ß¡¿Γ∞ Ñú«. ÅαÑñ»«½«ª¿¼, τΓ« ó »α«µÑñπαπ ó¡ÑßÑ¡« ¡Ñ¬«α-
- αÑ¬Γ¡«Ñ ¿º¼Ñ¡Ñ¡¿Ñ ó¿ñá:
-
- digit := n MOD 10.
-
- Æ¿» »ÑαѼѡ¡«⌐ n ÑßΓ∞ LONGCARD, »«φΓ«¼π n MOD 10 Γá¬ªÑ íπñÑΓ Γ¿»á LONGCARD. ì« íẫóδ⌐ Γ¿»
- »ÑαѼѡ¡«⌐ digit ÑßΓ∞ CARDINAL, »«φΓ«¼π ¬«¼»¿½∩Γ«α ß««íΘ¿Γ, τΓ« »α¿ßóá¿óá¡¿Ñ ¡Ññ«»πßΓ¿¼« ¿º
- -ºá ¡Ñß«ó»áñÑ¡¿∩ Γ¿»«ó. Åαáó¿½∞¡δ¼ «»ÑαáΓ«α«¼ (¬á¬ ó »α«úαá¼¼Ñ) íπñÑΓ digit := CARDINAL(n
- MOD 10).
- JPI Modula-2 »«ññÑনóáÑΓ ¡áí«α í¿í½¿«ΓѬ. ìÑ߬«½∞¬« ß½ÑñπεΘ¿σ »α¿¼Ñα«ó íπñÑΓ ¿ß»«½∞-
- º«óáΓ∞ α∩ñ ¿º ¡¿σ, ñѼ«¡ßΓα¿απ∩ »α«τ¿Ñ «ß«íÑ¡¡«ßΓ¿ ∩ºδ¬á Modula-2.
-
- âαáΣ¿¬á
- -------
-
- MODULE prog6;
- (* ¥Γá »α«úαá¼¼á α¿ßπÑΓ «íΩѬΓδ ¡á φ¬αá¡Ñ. *)
- FROM Lib IMPORT RANDOM, RANDOMIZE;
- FROM Graph IMPORT Circle, Disc, GraphMode, TextMode,
- Width, Depth;
- IMPORT IO;
-
- TYPE
- FunnyType = RECORD
- q : INTEGER; (* ç¡áτÑ¡¿Ñ. *)
- d : INTEGER; (* âαá¡¿µá ¿º¼Ñ¡Ñ¡¿⌐. *)
- min : INTEGER;
- max : INTEGER;
- END;
-
- PROCEDURE init(VAR v:FunnyType);
- BEGIN
- v.q := v.min;
- v.d := INTEGER(RANDOM(v.max-v.min));
- END init;
-
- PROCEDURE bounce(VAR v:FunnyType);
- (* 꺼ѡѡ¿Ñ Γᬿ¼ «íαẫ¼, τΓ« "»ÑαѬαδóáÑΓ" »α¿ óδσ«-
- ñÑ ºá »αÑñѽδ. *)
- BEGIN
- WITH v DO
- q := q + d;
- IF q < min THEN
- q := 2*min-q;
- d := -d;
- END;
- IF q > max THEN
- q := 2*max-q;
- d := -d;
- END;
- END;
- END bounce;
-
- VAR
- x,y : FunnyType;
- color,radius : CARDINAL;
- BEGIN
- RANDOMIZE;
- x.max := Width-1; x.min :=0;
- y.max := Depth-1; y.min :=0;
- IO.WrStr ('ì᪼¿ΓÑ »α«íѽ ñ½∩ »α«ñ«½ªÑ¡¿∩,
- ½εíπε ñαπúπε ¬½áó¿Φπ ñ½∩ ºáóÑαΦÑ¡¿∩')
- IO.WrLn;
- WHILE NOT IO.KeyPressed() DO
- END;
- GraphMode;
- WHILE IO.RdCharDirect() = ' ' DO
- init(x);
- init(y);
- REPEAT
- color := RANDOM(16);
- UNTIL color MOD 5<> 0; (* çừ½¡¿Γ∞, ¿ß»«½∞ºπ∩ ñóá
- µóÑΓá. *)
- radius := 2 + RANDOM(5);
- WHILE NOT IO.KeyPressed() DO
- bounce(x);
- bounce(y);
- Disc(x.q, y.q, radius, color);
- Circle(x.q, y.q, radius, color MOD 4);
- END;
- Disc(0,0,Width+Depth, 0); (* Äτ¿ßΓ¿Γ∞ φ¬αá¡. *)
- END;
- TextMode;
- End prog6.
-
- î«ñπ½∞ Graph »αÑñ«ßΓáó½∩ÑΓ α∩ñ «ß¡«ó¡δσ »α«µÑñπα ñ½∩ ñ«ßΓπ»á ¬ φ¬αá¡π ó úαáΣ¿τÑ߬«¼
- αѪ¿¼Ñ 200x320 Γ«τѬ. ÄΓ¼ÑΓ¿¼, τΓ« ó ñá¡¡«¼ »α¿¼ÑαÑ Width ¿ Depth - φΓ« ¬«¡ßΓá¡Γδ, ¿¼»«αΓ¿-
- α«óá¡¡δÑ ¿º Graph. Modula-2 »«ºó«½∩ÑΓ ¿¼»«αΓ¿α«óáΓ∞ »α«µÑñπαδ, ¬«¡ßΓá¡Γδ, »ÑαѼѡ¡δÑ ¿ Γ¿-
- »δ.
- Åα«úαá¼¼á «íΩ∩ó½∩ÑΓ Γ¿» çÇÅêæ£ (RECORD), ß ¿¼Ñ¡Ñ¼ FunnyType. çỿ߿ »«½Ñº¡δ ñ½∩ ßó∩-
- ºá¡¡δσ »ÑαѼѡ¡δσ. ä«ßΓπ» ¬ ¬«¼»«¡Ñ¡Γá¼ »ÑαѼѡ¡«⌐ Γ¿»á çÇÅêæ£, ¡áºδóáÑ¼δ¼ "ÅÄïƒ", «ßπΘÑßΓ-
- ó½∩ÑΓß∩ ½¿í« ¿ß»«½∞º«ó᡿Ѽ ß¿¼ó«½á '.' ¿ ¿¼Ñ¡Ñ¼ »«½∩, ¬á¬ ó »α«µÑñπαÑ init, ½¿í« ¿ß»«½∞º«-
- ó᡿Ѽ WITH, ¬á¬ ó »α«µÑñπαÑ bounce. X«Γ∩ «»ÑαáΓ«αδ WITH ¼«úπΓ «í½Ñúτ¿Γ∞ αáí«Γπ ß Γ¿»á¼¿ ó
- »α«úαá¼¼Ñ, ¡« «¡¿ ¼«úπΓ ßñѽáΓ∞ ΓѬßΓ Γαπñ¡δ¼ ñ½∩ τΓÑ¡¿∩, »«φΓ«¼π ½πτΦÑ ó«ºñÑনóáΓ∞ß∩ «Γ
- ¿σ ¿ß»«½∞º«óá¡¿∩.
- Åα¿óÑñÑ¡¡á∩ »α«úαá¼¼á ¿ß»«½∞ºπÑΓ "¡¿º¬«πα«ó¡Ñóδ⌐" ¬½áó¿áΓπα¡δ⌐ óó«ñ - IO.KeyPressed()
- ß««íΘáÑΓ, íδ½á ½¿ ¡áªáΓá ¬½áó¿Φá, IO.RdCharDirect() τ¿ΓáÑΓ «ñ¿¡ ß¿¼ó«½ ß ¬½áó¿áΓπαδ íѺ óδ-
- ó«ñá Ñú« ¡á φσ« ¿½¿ óδ»«½¡Ñ¡¿∩ ½εí«⌐ ñαπú«⌐ «íαáí«Γ¬¿. (Åα¿¼Ñτá¡¿Ñ. öπ¡¬µ¿¿, ¡Ñ ¿¼ÑεΘ¿Ñ »á-
- αá¼ÑΓα«ó, ñ«½ª¡δ óδºδóáΓ∞ß∩ ß ¿ß»«½∞º«ó᡿Ѽ »πßΓ«ú« ß»¿ß¬á »áαá¼ÑΓα«ó).
- öπ¡¬µ¿∩ RANDOM(n) ó«ºóαáΘáÑΓ "»ßÑóñ«-ß½πτá⌐¡«Ñ" τ¿ß½« ó ñ¿á»áº«¡Ñ 0..n-12.
- RANDOMIZE ¿¡¿µ¿á½¿º¿απÑΓ αẽ¿τ¡δÑ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿ τ¿ßѽ ñ½∩ úÑ¡Ñαᵿ¿ ¬áªñδ⌐ αáº
- »α¿ ºá»π᪥ »α«úαá¼¼δ (ó ºáó¿ß¿¼«ßΓ¿ «Γ óαѼѡ¿ ¿ ñáΓδ).
-
- Åα«úαá¼¼á ß«αΓ¿α«ó¬¿ ßΓ᫬ ΓѬßΓá ó »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩.
-
- æ«αΓ¿α«ó¬á
- ----------
-
- MODULE prog7;
- (* æ«αΓ¿α«ó¬á ßΓ᫬ ó Σá⌐½Ñ ó »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩, πñá-
- ½∩∩ »«óΓ«α∩εΘ¿Ñß∩. *)
- IMPORT IO, FIO, Lib, Storage, Str;
-
- TYPE
- StringType = ARRAY [0..255] OF CHAR;
- StringPointerType = POINTER TO StringType;
- VAR
- p : ARRAY [1..10000] OF StringPointerType;
-
- PROCEDURE Less(i,j:CARDINAL):BOOLEAN;
- BEGIN
- RETURN Str.Compare(p[i]^, p[j]^) < 0;
- END Less;
-
- PROCEDURE Swap(i,j:CARDINAL);
- VAR tmp:StringPointerType;
- BEGIN
- tmp := p[i]; p[i] := p[j]; p[j] := tmp;
- END Swap;
-
- VAR s: StringType;
- len:CARDINAL;
- i,n:CARDINAL;
- InFile,OutFile:FIO.File;
- buffer:ARRAY [1..512+FIO.BufferOverhead] OF BYTE;
- BEGIN
- (* è«¡Γα«½∞ »áαá¼ÑΓα«ó. *)
- IF Lib.ParamCount() <> 2 THEN
- IO.WrStr('Try again :prog7 input-file output-file');
- IO.WrLn;
- HALT;
- END;
- (* ù¿ΓáΓ∞ ßΓ᫬π ó *)
- Lib.ParamStr(s, 1); InFile := FIO.Open(s);
- FIO.AssignBuffer(InFile, buffer);
- n :=0;
- LOOP
- FIO.RdStr(InFile, s);
- IF FIO.EOF THEN
- EXIT;
- END;
- IF n = HIGH(p) THEN
- IO.WrStr('Too many lines!');
- IO.WrLn;
- EXIT;
- END;
- INC(n);
- len := Str.Length(s);
- Storage.ALLOCATE(p[n], len + 1);
- Lib.Move(ADR(s), ADR(p[n]^), len + 1;
- END;
-
- FIO.Close(InFile);
-
- (* æ«αΓ¿α«óáΓ∞ Σá⌐½ ó »á¼∩Γ¿. *)
- Lib.HSort(n, Less, Swap);
-
- (* éδñáΓ∞ Σá⌐½. *)
- Lib.ParamStr(s, 2); OutFile := FIO.Create(s);
- FIO.AssignBuffer(OutFile, buffer);
- FOR i := 1 TO n DO
- IF (i = 1) OR (Str.Compare(p[i]^, p[i-1]^) <> 0) THEN
- FIO.WrStr(OutFile, p[i]^);
- FIO.WrLn(outFile);
- END;
- END;
- FIO.Close(OutFile);
- END prog7.
-
- Lib.ParamCount() ó«ºóαáΘáÑΓ ¬«½¿τÑßΓó« »áαá¼ÑΓα«ó ó ¬«¼á¡ñ¡«⌐ ßΓα«¬Ñ »α¿ ó맮óÑ »α«ú-
- αá¼¼δ.
- Lib.ParamStr(s,n) ¬«»¿απÑΓ n-⌐ »áαá¼ÑΓα ó s. àß½¿ »α«úαá¼¼á ºá»π߬áÑΓß∩ ¿º ßαÑñδ JPI
- Modula-2, Γ« ¬«¼á¡ñ¡á∩ ßΓα«¬á ¼«ªÑΓ íδΓ∞ πßΓá¡«ó½Ñ¡á »α¿ »«¼«Θ¿ Options-Command-Line.
- ä½∩ »αÑñßΓáó½Ñ¡¿∩ Σá⌐½á »α«úαá¼¼á ¿ß»«½∞ºπÑΓ ¼áßß¿ó π¬áºáΓѽÑ⌐. àß½¿ σ - φΓ« »ÑαѼѡ-
- ¡á∩-π¬áºáΓѽ∞, Γ« σ^ »αÑñßΓáó½∩ÑΓ «íΩѬΓ, ¡á ¬«Γ«αδ⌐ π¬áºδóáÑΓ σ. èáªñá∩ ßΓ᫬á Σá⌐½á ßó∩-
- ºδóáÑΓß∩ ß í½«¬«¼ »á¼∩Γ¿ ΓαÑíπѼ«ú« αẼÑαá. î«ñπ½∞ FIO (Σá⌐½«óδ⌐ óó«ñ/óδó«ñ) ¿ß»«½∞ºπÑΓß∩
- ñ½∩ τΓÑ¡¿∩/ºá»¿ß¿ ñ¿ß¬«óδσ Σá⌐½«ó. é맮ó »α«µÑñπαδ FIO.AssignBuffer ¼«ªÑΓ íδΓ∞ «»πΘÑ¡, ¡«
- »α«úαá¼¼á Γ«úñá íπñÑΓ αáí«ΓáΓ∞ º¡áτ¿Γѽ∞¡« ¼Ññ½Ñ¡¡ÑÑ. ÉẼÑα íπΣÑαá óδí¿αáÑΓß∩ Γá¬, τΓ«íδ
- «»Γ¿¼¿º¿α«óáΓ∞ αáí«Γπ ß ñ¿ß¬«¼. çá¼ÑΓ¿¼, τΓ« ¡Ñ«íσ«ñ¿¼« ºá¬αδóáΓ∞ «Γ¬αδΓδ⌐ Σá⌐½, ¿ß»«½∞ºπ∩
- FIO.Close; ó »α«Γ¿ó¡«¼ ß½πτáÑ íπΣÑα ¡Ñ íπñÑΓ ºá»¿ßá¡ ó Σá⌐½.
- Åα∩¼«Ñ ¬«»¿α«óá¡¿Ñ ¡Ñ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡« ñ½∩ ¬«»¿α«óá¡¿∩ ó óδñѽѡ¡πε »á¼∩Γ∞,
- Γ.¬. Γ«½∞¬« len+1 íá⌐Γ«ó í佫 óδñѽѡ«, á p[n]^:=s íπñÑΓ ¬«»¿α«óáΓ∞ 256 íá⌐Γ«ó, »«φΓ«¼π
- ó¼ÑßΓ« ¡Ñú« ß½ÑñπÑΓ ¿ß»«½∞º«óáΓ∞ í¿í½¿«ΓÑτ¡πε »α«µÑñπαπ Lib. Move. éßΓα«Ñ¡¡πε Σπ¡¬µ¿ε ADR,
- ó«ºóαáΘáεΘπε áñαÑß »ÑαѼѡ¡«⌐, ß½ÑñπÑΓ »α¿¼Ñ¡∩Γ∞ «τÑ¡∞ ᬬπαáΓ¡«, »«ß¬«½∞¬π ÑÑ »áαá¼ÑΓαδ ¡Ñ
- ¬«¡Γα«½¿απεΓß∩ ¡á Γ¿».
- Åα«µÑñπαá Lib.HSort ¿¼ÑÑΓ ó ¬áτÑßΓóÑ »áαá¼ÑΓα«ó ¬«½¿τÑßΓó« ó ¼áßß¿óÑ, ¬«Γ«αδ⌐ ñ«½ªÑ¡
- íδΓ∞ «Γß«αΓ¿α«óá¡, ¿ ñóá »áαá¼ÑΓαá Γ¿»á "Åα«µÑñπαá" (Procedure), ∩ó½∩εΘ¿σß∩ »«ñ»α«úαἼἿ
- ñ½∩ ßαáó¡Ñ¡¿∩ ¿ »ÑαÑßΓá¡«ó¬¿ φ½Ñ¼Ñ¡Γ«ó.
- QSort - φΓ« á½∞ΓÑα¡áΓ¿ó¡á∩ »α«µÑñπαá, ¬«Γ«αá∩ Γá¬ªÑ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡á ¿ ¬«Γ«αá∩
- »αÑñßΓáó½∩ÑΓ ñαπú«⌐ á½ú«α¿Γ¼ (Quicksort ó¼ÑßΓ« Heapsort), ¬«Γ«αδ⌐ ∩ó½∩ÑΓß∩ í«½ÑÑ íδßΓαδ¼ ó
- ßαÑñ¡Ñ¼, ¡« í«½ÑÑ ¼Ññ½Ñ¡¡δ¼ ó ¡á¿σπñΦѼ ß½πτáÑ. ì¿ªÑ »«ñα«í¡« «»¿ßδóáÑΓß∩ αÑ὿ºáµ¿∩
- Lib.QSort, Γ.¬. «¡á ¿ß»«½∞ºπÑΓ αѬπαß¿ó¡πε »α«µÑñπαπ.
-
- öαáú¼Ñ¡Γδ Σá⌐½«ó Lib.def ¿ Lib.mod:
- -----------------------------------
-
- DEFINITION MODULE LIb;
-
- ...
-
- TYPE
- CompareProc = PROCEDURE(CARDINAL, CARDINAL):BOOLEAN;
- SwapProc = PROCEDURE(CARDINAL, CARDINAL);
-
- PROCEDURE QSort(n:CARDINAL; Less:CompareProc;
- Swap:SwapProc);
- ...
-
- END Lib.
-
-
- IMPLEMENTATION MODULE Lib;
-
- ...
-
- PROCEDURE QSort(n:CARDINAL; Less:CompareProc;
- Swap:SwapProc);
- PROCEDURE Sort(l,r:CARDINAL);
- VAR i,j:CARDINAL;
- BEGIN
- WHILE r > l DO
- i := l+1;
- j := r;
- WHILE i <= j DO
- WHILE (i <= j) AND NOT Less(l,i) DO INC(i) END;
- WHILE (i <= j) AND Less(l,j) DO DEC(j) END;
- IF i <= j THEN Swap(i,j); INC(i); DEC(j) END;
- END;
- IF j # l THEN Swap(j,l) END;
- IF j+j > r+l THEN (* ÉѬπαß¿ó¡δÑ ó맮óδ. *)
- Sort(j+1,r);
- r := j-1;
- ELSE
- Sort(l,j-1);
- l := j+1;
- END;
- END;
- END sort;
- BEGIN
- Sort(1,n);
- END QSort;
-
- ...
-
- END Lib.
-
- Åα«µÑñπαá Sort «íΩ∩ó½∩ÑΓß∩ ó »α«µÑñπαÑ QSort. æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« «¡á ¿¼ÑÑΓ ñ«ßΓπ»
- ¬á¬ ¬ ßó«¿¼ »áαá¼ÑΓαá¼ ¿ ½«¬á½∞¡δ¼ »ÑαѼѡ¡δ¼ «σóáΓδóáεΘÑ⌐ »α«µÑñπαδ.
- QuickSort - á½ú«α¿Γ¼ Σπ¡¬µ¿«¡¿απÑΓ »« ¼ÑΓ«ñπ ñѽѡ¿∩ Σá⌐½á ¡á «ß¡«óÑ óδíαá¡¡«ú« φ½Ñ-
- ¼Ñ¡Γá (ó ñá¡¡«¼ ß½πτáÑ »Ñαó«ú«), ¿ ºáΓѼ αѬπαß¿ó¡«ú« ó맮óá ßÑí∩ ßἫú« ñ½∩ ß«αΓ¿α«ó¬¿
- ñóπσ »«½πτ¿óΦ¿σß∩ ¼áßß¿ó«ó. é맮ó ñ½∩ ß«αΓ¿α«ó¬¿ ßΓáαΦÑ⌐ »«½«ó¿¡δ ºá¼Ñ¡∩ÑΓß∩ ¡á µ¿¬½¿τÑ߬¿⌐
- ó«ºóαáΓ ó ¡áτὫ »α«µÑñπαδ (»α«¿ºó«ñ¿Γß∩ "«ßΓáΓ«τ¡«-αѬπαß¿ó¡á∩" «»Γ¿¼¿ºáµ¿∩), τΓ« «íÑß»Ñ-
- τ¿óáÑΓ »«ΓαÑí¡«ßΓ∞ ó ¡Ñí«½∞Φ«¼ αẼÑαÑ ßΓѬá, ¡Ñ«íσ«ñ¿¼«¼ ñ½∩ αѬπαß¿ó¡«⌐ á¬Γ¿óᵿ¿. Äñ¡«⌐
- ¿º »α«í½Ñ¼ ¿ß»«½∞º«óá¡¿∩ αѬπαß¿¿ ∩ó½∩ÑΓß∩ Γ«, τΓ« αẼÑα ¡Ñ«íσ«ñ¿¼«ú« ßΓѬá íπñÑΓ ¿º¼Ñ-
- ¡∩Γ∞ß∩ ó ºáó¿ß¿¼«ßΓ¿ «Γ αẼÑαá óσ«ñá (size of the input(?)). ä¿αÑ¬Γ¿óá ¬«¼»¿½∩Γ«αá "¬«¡Γ-
- α«½∞ ßΓѬá" (* $S+ *) ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩ »α«óÑન »ÑαÑ»«½¡Ñ¡¿∩ ßΓѬá (τΓ« »α«¿ºó«ñ¿Γ,
- Ñß½¿ Ñú« ¡Ñ ¬«¡Γα«½¿α«óáΓ∞, óÑß∞¼á ¡Ñ»αÑñ߬áºπѼδ⌐ φΣΣѬΓ), σ«Γ∩, ¬«¡Ñτ¡«, ¿ íπñÑΓ ¿¼ÑΓ∞
- ß½ÑñßΓó¿Ñ¼ ¡Ñ¬«Γ«α«Ñ πóѽ¿τÑ¡¿Ñ óαѼѡ¿ ¿ß»«½¡Ñ¡¿∩.
- é ºá¬½ετÑ¡¿Ñ »α¿ó«ñ¿Γß∩ í«½ÑÑ ñ½¿¡¡δ⌐ »α¿¼Ñα, ¿½½εßΓα¿απεΘ¿⌐ α∩ñ «ß«íÑ¡¡«ßΓÑ⌐ ∩ºδ¬á
- Modula-2, ¬«Γ«αδÑ ÑΘÑ ¡Ñ π»«¼¿¡á½¿ß∞: »ÑαѼѡ¡δÑ Γ¿»δ, ºá»¿ß¿ ß óáα¿á¡ΓἿ ¿ «»ÑαáΓ«αδ óδ-
- í«αá CASE.
-
- èá½∞¬π½∩Γ«α
- -----------
-
- MODULE prog8;
- IMPORT IO,Str,Storage;
-
- TYPE
- TokenType = (number, add, sub, mul, div, LeftParen,
- RightParen, end);
- SyntacticType = (main, exp, term, factor);
- TreeType = POINTER TO TreeRecordType;
- TreeRecordType = RECORD
- CASE kind:TokenType OF
- | number:
- NumberValue : LONGREAL;
- | add,sub,mul,div :
- left : TreeType;
- right : TreeType;
- END;
- END;
-
- VAR
- c:CHAR;
- token:TokenType;
- TokenNumberValue:LONGREAL;
-
- PROCEDURE error(s:ARRAY OF CHAR);
- BEGIN
- IO.WrStr(s);
- IO.WrLn;
- HALT;
- END error;
-
- PROCEDURE readtoken;
- VAR
- s:ARRAY[0...99] OF CHAR;
- i:[0..99];
- done:BOOLEAN;
- oldc:CHAR;
- BEGIN
- LOOP
- oldc := c;
- c := IO.RdChar();
- CASE oldc OF
- | ' ' :
- | '+' : token := add; EXIT;
- | '-' : token := sub; EXIT;
- | '*' : token := mul; EXIT;
- | '/' : token := div; EXIT;
- | '(' : token := LeftParen; EXIT;
- | ')' : token := RightParen; EXIT;
- | CHAR(10),CHAR(13),CHAR(26) :token := end; EXIT;
- | '0'..'9' : (* τ¿ΓáÑΓ ñÑ⌐ßΓó¿Γѽ∞¡«Ñ τ¿ß½« *)
- i := 1; s[0] := oldc;
- WHILE (c >= '0') AND (c <= '9') DO
- s[i] := c;
- INC(i);
- c := IO.RdChar();
- END;
- IF c<>'.' THEN (* ñ«íáó½∩ÑΓ ñÑß∩Γ¿τ¡πε Γ«τ¬π, Ñß½¿
- ¡ÑΓ ¡¿τÑú« ¡á óσ«ñÑ *)
- s[i] := '.';
- INC(i);
- ELSE
- REPEAT (* τ¿ΓáÑΓ ñα«í¡πε τáßΓ∞ *)
- s[i] := c;
- INC(i);
- c := IO.RdChar();
- UNTIL (c < '0') OR (c > '9');
- END;
- s[i] := CHAR(0);
- TokenNumberValue := Str.StrToReal(s, done);
- IF NOT done THEN
- error('Bad number?');
- END;
- token := number;
- EXIT;
- ELSE
- error('Bad character');
- END;
- END;
- END readtoken;
-
- PROCEDURE read(what:SyntacticType):TreeType;
- VAR t,t1:TreeType;
- BEGIN
- CASE what OF
- | factor :
- IF token = LeftParen THEN
- readtoken;
- t := read(exp);
- IF token = RightParen THEN
- readtoken;
- ELSE
- error("Missing ')'");
- END;
- ELSIF token = number THEN
- Storage.ALLOCATE(t, SIZE(t^));
- t^.kind := number;
- t^.NumberValue := TokenNumberValue;
- readtoken;
- ELSE
- error('Missing number?');
- END;
- | term:
- t := read(factor);
- WHILE (token = mul) OR (token = div) DO
- t1 := t;
- Storage.ALLOCATE(t, SIZE(t^));
- t^.kind := token;
- readtoken;
- t^.left := t1;
- t^.right := read(factor);
- END;
- | exp:
- t := read(term);
- WHILE (token = add) OR (token = sub) DO
- t1 := t;
- Storage..ALLOCATE(t, SIZE(t^));
- t^.kind := token;
- readtoken;
- t^.left := t1;
- t^.right := read(term);
- END;
- | main :
- c := IO.RdChar();
- readtoken;
- t := read(exp);
- IF (token <> end) THEN
- error('Missing operator?');
- END;
- END;
- RETURN t;:
- END read;
-
- PROCEDURE eval(t:TreeType):LONGREAL;
- BEGIN
- CASE t^.kind OF
- | number : RETURN t^.NumberValue;
- | add : RETURN eval(t^.left) + eval(t^.right);
- | sub : RETURN eval(t^.left) - eval(t^.right);
- | mul : RETURN eval(t^.left) * eval(t^.right);
- | div : RETURN eval(t^.left) / eval(t^.right);
- END;
- END eval;
-
- VAR
- t:TreeType;
- result:LONGREAL;
- BEGIN
- LOOP
- IO.WrStr('Enter expression : ');
- t := read(main);
- result := eval(t);
- IO.WrStr(' = ');
- IO.WrLngReal(result, 4, 0);
- IO.WrLn;
- END;
- END prog8.
-
- Åα«úαá¼¼á »αÑñßΓáó½∩ÑΓ ß«í«⌐ »α«ßΓ«⌐ ¿¡ΓÑαá¬Γ¿ó¡δ⌐ ¬á½∞¬π½∩Γ«α, ºá»αáΦ¿óáεΘ¿⌐ óδαáªÑ-
- ¡¿Ñ, »αÑ«íαáºπεΘ¿⌐ Ñú« ó "ñÑαÑó«" ¿ ºáΓѼ óδτ¿ß½∩εΘ¿⌐ Ñú« ¿ »ÑτáΓáεΘ¿⌐ αѺπ½∞ΓáΓ. éδαáªÑ¡¿∩
- «íδτ¡« »αÑñßΓáó½∩εΓß∩ ó ó¿ñÑ ñÑαÑó∞Ñó, ¡á»α¿¼Ñα, óδαáªÑ¡¿Ñ (5-9)*(4+7) »αÑñßΓáó½∩ÑΓß∩ ó ó¿-
- ñÑ ñ¿áúαá¼¼δ ñÑαÑóá:
-
- *
- / \
- - +
- / \ / \
- 5 9 4 7
-
- (»« α∩ñπ »α¿τ¿¡ ñ¿áúαá¼¼δ-"ñÑαÑó∞∩" «íδτ¡« ¿º«íαáªáεΓß∩ αáßΓπΘ¿¼¿ 󡿺, ß "¬«α¡Ñ¼" ó óÑαΦ¿-
- ¡Ñ).
- ÄíΩ∩ó½Ñ¡¿∩
-
- TokenType = (number,add,sub,mul,div,LeftParen,
- RightParen,end);
- SyntacticType = (main,exp,term,factor);
-
- «íΩ∩ó½∩εΓ »ÑαÑτ¿ß½¿¼δÑ Γ¿»δ ñá¡¡δσ. ç¡áτÑ¡¿∩¼¿ »ÑαÑτ¿ß½¿¼δσ Γ¿»«ó ∩ó½∩εΓß∩ »ÑαÑτ¿ß½¿-
- ¼δÑ ó ß»¿ß¬áσ óѽ¿τ¿¡δ.
-
- ÄíΩ∩ó½Ñ¡¿∩
-
- TreeType = POINTER TO TreeRecordType;
- TreeRecordType = RECORD
- CASE kind:TokenType OF
- | number:
- NumberValue:LONGREAL;
- | add,sub,mul,div:
- left:TreeType;
- right:TreeType;
- END;
- END;
-
- «íΩ∩ó½∩εΓ "αѬπαß¿ó¡δ⌐" Γ¿» ñá¡¡δσ. ¥Γ« «º¡áτáÑΓ, τΓ« ñÑαÑó« ß«ºñáÑΓß∩ ó ºáó¿ß¿¼«ßΓ¿ «Γ
- kind, ¿ ß«ñÑαª¿Γ ½¿í« ñÑ⌐ßΓó¿Γѽ∞¡«Ñ τ¿ß½«, ½¿í« ½Ñó«Ñ ¿ »αáó«Ñ »«ññÑαÑó∞∩. è½ετÑó«Ñ ß½«ó«
- CASE «í«º¡áτáÑΓ óáα¿á¡Γ¡«Ñ »αÑñ½«ªÑ¡¿Ñ. è«¡Ñτ¡«, φΓ« ¼«ªÑΓ íδΓ∞ «í∞∩ó½Ñ¡« »«ßαÑñßΓó«¼
- TreeType = POINTER TO TreeType;
- TreeRecordType = RECORD
- king:TokenType;
- NumberValue:LONGREAL;
- left:TreeType;
- right:TreeType;
- END;
- ì« Γá¬«Ñ «»αÑñѽѡ¿Ñ ú«αáºñ« σπªÑ »αÑñßΓáó½∩ÑΓ ß¼δß½ »αÑñ½«ªÑ¡¿∩ ¿, ¬ Γ«¼π ªÑ, ΓαÑíπÑΓ
- í«½∞ΦÑ »á¼∩Γ¿.
- é »αÑñßΓáó½Ñ¡¡«⌐ »α«úαá¼¼Ñ ¿¼ÑεΓß∩ ¡Ñ߬«½∞¬« «»ÑαáΓ«α«ó CASE, ¿ß»«½∞ºπѼδσ ñ½∩ óδí«αá
- «ñ¡«⌐ ¿º úαπ»» «»ÑαáΓ«α«ó ñ½∩ óδ»«½¡Ñ¡¿∩ ó ºáó¿ß¿¼«ßΓ¿ «Γ óδαáªÑ¡¿∩, ß½ÑñπεΘÑú« ºá ¬½ετÑóδ¼
- ß½«ó«¼ CASE.
- îÑΓ¬¿ óáα¿á¡Γ«ó ñ«½ª¡δ íδΓ∞ ¬«¡ßΓá¡ΓἿ, ¡« ñ«»π߬áεΓß∩ ñ¿á»áº«¡δ, ¡á»α¿¼Ñα, '0'..'9'.
- Ä»ÑαáΓ«α CASE ó »α«µÑñπαÑ readtoken ¿¼ÑÑΓ ñ«»«½¡¿Γѽ∞¡πε τáßΓ∞ ELSE, ¬«Γ«αá∩ óδ»«½¡∩-
- ÑΓß∩, Ñß½¿ ¡Ñ «í¡áαπª¿óáÑΓß∩ ß«ó»áñÑ¡¿∩ ¡¿ ß «ñ¡«⌐ ¿º ¼ÑΓ«¬ óδí«αá.
- ìá φΓ«¼ ¼δ ºáóÑαΦáѼ αáºñѽ «íπτÑ¡¿∩. îδ ¡áñÑѼß∩, τΓ« »α¿óÑñÑ¡¡δÑ ó ¡Ñ¼ »α¿¼Ñαδ «¬á-
- ºá½¿ß∞ ¿¡ΓÑαÑß¡δ¼¿ ñ½∩ óáß. è«¡Ñτ¡« ªÑ, ¼δ ¡Ñ «ßóÑΓ¿½¿ ºñÑß∞ ¼¡«ú¿σ »π¡¬Γ«ó. äαπú¿Ñ ú½áóδ
- απ¬«ó«ñßΓóá ñáεΓ í«½ÑÑ ßªáΓπε, ¡« »«½¡πε ¿¡Σ«α¼áµ¿ε, ¬«Γ«απε óδ ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ ¬á¬
- ß»αáó«τ¡πε. èα«¼Ñ Γ«ú«, óδ»πΘÑ¡« í«½∞Φ«Ñ ¬«½¿τÑßΓó« σ«α«Φ¿σ ¬¡¿ú »« Modula-2, ó Γ«¼ τ¿ß½Ñ
- ¬¡¿úá 쿬½áπßá é¿αΓá "Åα«úαá¼¼¿α«óá¡¿Ñ ¡á ∩ºδ¬Ñ Modula-2" (ΓαÑΓ∞Ñ ¿ºñá¡¿Ñ).
-