{"id":5575,"date":"2023-11-20T23:05:17","date_gmt":"2023-11-20T22:05:17","guid":{"rendered":"https:\/\/msxitalia.org\/?p=5575"},"modified":"2023-12-02T08:58:39","modified_gmt":"2023-12-02T07:58:39","slug":"turbo-pascal-msx-lezione-4","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/turbo-pascal-msx-lezione-4\/","title":{"rendered":"Turbo Pascal MSX \u2013 Lesson 4"},"content":{"rendered":"<p><img decoding=\"async\" data-src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/11\/391546101_246108101769806_3942388225111598940_n-273x300.jpg\" class=\"alignnone wp-image-5212 aligncenter lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" width=\"134\" height=\"147\" \/><noscript><img decoding=\"async\" class=\"alignnone wp-image-5212 aligncenter\" src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/11\/391546101_246108101769806_3942388225111598940_n-273x300.jpg\" alt=\"\" width=\"134\" height=\"147\"><\/noscript><\/p>\n<h1 style=\"text-align: center\">MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 4)<\/h1>\n<h2>Lezione 4<\/h2>\n<h3>Set di istruzioni<\/h3>\n<p>Le parole riservate sono parte integrante di Turbo Pascal. Non possono essere ridefinite, n\u00e9 usate come identificatori o nomi di variabili. Il Turbo Pascal \u00e8 sostanzialmente il linguaggio Pascal standard rivisitato da Borland inc. Le parole riservate precedute dal simbolo * non sono parte del linguaggio Pascal standard e indicano le estensioni del linguaggio implementate da Borland per la gestione della memoria, per il meccanismo di Overlay, per la gestione delle stringhe e per l\u2019inserimento di istruzioni\u00a0 assembler direttamente nel codice<\/p>\n<p>*external\u00a0 \u00a0 \u00a0Nil\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0*shl\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 and\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 file\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 not\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0*shr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Array\u00a0 \u00a0 \u00a0forward\u00a0 \u00a0 \u00a0*overlay<br \/>\n*string\u00a0 \u00a0 \u00a0 \u00a0 \u00a0begin\u00a0 \u00a0 \u00a0 \u00a0 \u00a0for\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0of\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0then\u00a0 \u00a0 \u00a0 \u00a0 case\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0function\u00a0 \u00a0 or\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0type\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0const<br \/>\ngoto\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 packed\u00a0 \u00a0 \u00a0 to\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 div\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0*inline\u00a0 \u00a0 \u00a0 Procedure\u00a0 \u00a0 until\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 do\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0program<br \/>\nvar\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 downto\u00a0 \u00a0 \u00a0 in\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 record\u00a0 \u00a0 \u00a0 \u00a0while\u00a0 \u00a0 \u00a0 else\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0label\u00a0 \u00a0 \u00a0 \u00a0 repeat\u00a0 \u00a0 with\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 end<br \/>\nmod\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 set\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 *xor<\/p>\n<p>Oltre alle parole riservate, il Turbo Pascal fornisce un certo numero di identificatori, procedure, funzioni, costanti, tipi predefiniti e variabili. Di seguito l\u2019elenco completo di tutti gli elementi del linguaggio. La maggior parte di questi non sono difficili da comprendere, in ogni caso li vedremo tutti proseguendo nel corso. Alcuni di questi elementi sono relativi ai file come per esempio BlockRead o SeekEof, altri servono per la manipolazione delle stringhe come per esempio Lenght o Concat, altri ancora come GetMem o MemAvail per la getione della memoria. Inoltre come si vede, sono definiti qui i tipi standard come integer, byte o char e alcune costanti come Pi che vale 3,14\u2026<\/p>\n<p>Addr \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Delay\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Length\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Real<br \/>\nArcTan \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Delete\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Ln\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Release<br \/>\nAssign \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 EOF \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Lo\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Rename<br \/>\nAux\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0EOLN\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 LowVideo\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Reset<br \/>\nAuxInptr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Erase\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Lst\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Rewrite<br \/>\nAuxOutPtr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Execute\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 LstOutPtr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Round<br \/>\nBlockRead\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Exit\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Mark\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Seek<br \/>\nBlockWrite\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Exp\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0MaxInt\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Sin<br \/>\nBoolean \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 False\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Mem\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 SizeOf<br \/>\nBufLen \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FilePos\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 MemAvail\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0SeekEof<br \/>\nByte \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FileSize\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 MemW\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0SeekEoln<br \/>\nChain \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FillChar\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Move\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Sqr<br \/>\nChar \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Flush\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0New\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Sqrt<br \/>\nChr \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Frac\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0NormVideo\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Str<br \/>\nClose\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 GetMem\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Odd\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Succ<br \/>\nClrEOL\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 GotoXY\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Ord\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Swap<br \/>\nClrScr \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Halt\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Output\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Text<br \/>\nCon \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 HeapPtr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Pi\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Trm<br \/>\nConInPtr \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Hi\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Port\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0True<br \/>\nConOutPtr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 IOresult\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PortW\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Trunc<br \/>\nConcat \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Input\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Pos\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 UpCase<br \/>\nConstPtr \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InsLine\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Pred\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Usr<br \/>\nCopy \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Insert\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Ptr\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0UsrInptr<br \/>\nCos\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Int\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Random\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 UsrOutPtr<br \/>\nCrtExit\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Integer\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Randomize\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Val<br \/>\nCrtInit\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Kbd\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Read\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Write<br \/>\nDelLine\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 KeyPressed\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ReadLn\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 WriteLn<\/p>\n<p>Come si vede la dotazione di procedure e funzioni utili alla programmazione \u00e8 sufficientemente ampia, ma rimane sempre valido il fatto che \u00e8 possibile ampliare ulteriormente il linguaggio definendo le proprie routines che possono essere salvate in file esterni da utilizzare, poi, nei propri programmi. Andiamo dunque a vedere nel dettaglio la struttura di un programma Turbo Pascal e quando le incontreremo negli esempi, la sintassi delle istruzioni del linguaggio.<\/p>\n<p>Come abbiamo accennato nel secondo capitolo, il Turbo Pascal ha una struttura molto ordinata. Ogni programma \u00e8 suddiviso in sezioni precise e in ognuna di queste sezioni si utilizzano costrutti precisi. Vediamoli nel dettaglio:<\/p>\n<ol>\n<li>intestazione del programma. Ogni programma in Pascal inizia con l\u2019intestazione<\/li>\n<\/ol>\n<p><strong><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Program<\/em><\/strong><em> NomeDelProgramma(parametri);<\/em><br \/>\n<strong><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Program<\/em><\/strong><em> CalcoloProbabilit\u00e0(input,output);<\/em><br \/>\n<strong><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Program<\/em><\/strong><em> Sparatutto(score,lives);<\/em><\/p>\n<p>I parametri non sono obbligatori ma rispecchiano la sintassi del pascal standard.<\/p>\n<ol start=\"2\">\n<li>Dichiarazioni\n<ol>\n<li>Dichiarazione di etichette<strong><em> o Label<\/em><\/strong><\/li>\n<li>Dichiarazione di costanti o <strong><em>Const<\/em><\/strong><\/li>\n<li>Dichiarazione di tipi o <strong><em>Type<\/em><\/strong><\/li>\n<li>Dichiarazione di variabili o <strong><em>Var<\/em><\/strong><\/li>\n<li>Dichiarazione di procedure e funzioni o <strong><em>Procedure <\/em><\/strong>e<strong><em> Function<\/em><\/strong><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Vediamo ora nel dettaglio la sezione dichiarativa.<\/p>\n<p>Le etichette o <strong><em>label<\/em><\/strong> si utilizzano nei salti incondizionati ovvero con l\u2019istruzione GOTO (che in realt\u00e0 in un linguaggio strutturato ha poco senso).\u00a0 Dopo la parola chiave Label si indicano le etichette separate da una virgola e concluse da un punto e virgola, ovviamente anche nelle label, dovrebbe valere la regola di utilizzare nomi significativi a beneficio della leggibilit\u00e0 del codice.<\/p>\n<p><strong><em>Label<\/em><\/strong> Uscita, 10, Aexuoi, 1addf,etichetta;<\/p>\n<p>Nel programma, poi si inserisce l\u2019etichetta nel punto desiderato seguita dai due punti:<\/p>\n<p><strong><em>program<\/em><\/strong> usoetichette;<br \/>\n<strong><em>label<\/em><\/strong>\u00a0\u00a0\u00a0\u00a0 Uscita;<br \/>\n<strong><em>var<\/em><\/strong> x,y:integer;<br \/>\n<strong><em>begin<\/em><\/strong><br \/>\n<strong><em>for<\/em><\/strong> x:=1 to 10<br \/>\n<strong><em>begin<\/em><\/strong><br \/>\ny:=y+x;<br \/>\n<strong><em>if<\/em><\/strong> (y&lt;100) <strong><em>goto<\/em><\/strong> Uscita;<br \/>\n<strong><em>end<\/em><\/strong>;<br \/>\n<strong><em>end<\/em><\/strong>;<br \/>\nuscita: <strong><em>writeln<\/em><\/strong>(y);<br \/>\n<strong><em>end<\/em><\/strong>.<\/p>\n<p><em>L\u2019istruzione goto nel ciclo for fa uscire il programma dal ciclo secondo la condizione prima che questo arrivi alla fine. Per inciso, il turbo Pascal fornisce l\u2019istruzione Exit che fa la stessa cosa in maniera pi\u00f9 elegante.<\/em><\/p>\n<p><em>\u00a0<\/em><em>Le Costanti si definiscono utilizzando la parola chiave <\/em><strong>Const <\/strong>si utilizzano per definire valori costanti, ovvero che non cambiano mai nel corso del programma e il valore assegnato ne indica il tipo allo stesso modo in cui abbiamo visto nel capitolo 3 del corso. Potrebbero sembrare uguali alle variabili, ma in realt\u00e0 vi sono differenze significative. Per esempio, una variabile definita all\u2019interno di una procedura o di una funzione, non \u00e8 visibile (utilizzabile) al di fuori della funzione o procedura nella quale \u00e8 dichiarata, inoltre una costante non pu\u00f2 essere modificata per cui \u00e8 pi\u00f9 sicura di una variabile, ma vediamo qualche esempio:<\/p>\n<p><em><strong>const<\/strong><\/em><br \/>\ntasso = 3.56;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {questa \u00e8 una costante di tipo real}<br \/>\nunit\u00e0 = \u2018Metro\u2019;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0{questa \u00e8 di tipo stringa}<br \/>\nindirizzo =$F5;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {questa \u00e8 un integer espresso in esadecimale}<\/p>\n<p>l\u2019utilizzo in un programma dovrebbe essere chiaro:<br \/>\n<strong><em>\u00a0<\/em><\/strong><br \/>\n<strong><em>program<\/em><\/strong> usocostanti;<br \/>\n<strong><em>const<\/em><\/strong>\u00a0\u00a0\u00a0 coefficiente = 3.5;<br \/>\n<strong><em>var<\/em><\/strong><br \/>\nx:integer;<br \/>\ny:real;<br \/>\n<strong><em>begin<\/em><\/strong><br \/>\n<strong><em>for<\/em><\/strong> x:=1 to 10<br \/>\n<strong><em>begin<\/em><\/strong><br \/>\ny:=y+x*coefficiente;<br \/>\n<strong><em>writeln<\/em><\/strong>(y);<br \/>\n<strong><em>end<\/em><\/strong>;<br \/>\n<strong><em>end<\/em><\/strong>.<\/p>\n<p>Se nelle specifiche del software, dovrebbe cambiare il coefficiente, basta cambiare il valore della costante, senza cercarne ogni occorrenza all\u2019interno del programma. L\u2019ambiente Turbo Pascal, fornisce alcune costanti predefinite tra le quali<\/p>\n<p><strong><em>Pi\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/em><\/strong>{il cui valore \u00e8 3.1415926536E+00}<br \/>\n<strong><em>Maxint\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/em><\/strong>{il cui valore \u00e8 32767}<br \/>\n<strong><em>False\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/em><\/strong>{il cui valore \u00e8 il valore boolean per falso}<br \/>\n<strong><em>True\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/em><\/strong>{il cui valore \u00e8 il valore boolean per vero}<\/p>\n<p>Da notare che nella definizione che ne fa il compilatore\u00a0 False &lt; True.<\/p>\n<p>La definizione dei tipi o <strong><em>Type <\/em><\/strong>\u00e8 una caratteristica importante nella programmazione in Pascal, permette infatti di definire tipi complessi, partendo dai tipi primitivi (char, integer, real. Nella sezione Type si dichiarano variabili alle quali viene assegnato un tipo, inoltre diversi tipi di dato sono forniti dal compilatore oltre ai tipi standard. Vediamo alcuni esempi:<\/p>\n<p><strong><em>Type<\/em><\/strong><br \/>\nNumero = <strong><em>integer;<\/em><\/strong><br \/>\nnome = <strong><em>string[50];<\/em><\/strong><br \/>\nEnumDay = (lun, mar, mer, gio, ven, sab, dom);<br \/>\nSuccessivamente, nella sezione di dichiarazione delle variabili possiamo utilizzare i tipi definiti qui allo stesso modo in cui utilizziamo i tipi standard, in questo modo:<\/p>\n<p><strong><em>Var<\/em><\/strong><br \/>\nOrdinale:Numero;<br \/>\npersona:nome;<br \/>\nGiorniDellaSettimana:EnumDay;<br \/>\ne utilizzarli nel programma.<\/p>\n<p>Infine eccoci alla definizione dei sottoprogrammi, che abbiamo gi\u00e0 introdotto in precedenza, <strong><em>Procedure e Function<\/em><\/strong>. La definizione di una procedura o di una funzione segue esattamente lo stesso modello del programma, le uniche differenze sono le seguenti, al posto della parola <strong><em>program<\/em><\/strong> si utilizza la parola <strong><em>procedure <\/em><\/strong>o<strong><em> function <\/em><\/strong>e all\u2019interno della procedura troveranno posto le sezioni <strong><em>label, const, type, var, procedure e function. <\/em><\/strong>Questa, come gi\u00e0 detto \u00e8 una caratteristica molto importante perch\u00e9 permette di dividere il programma in parti pi\u00f9 piccole, ovvero di scomporre il problema in problemi pi\u00f9 piccoli e con l\u2019opportunit\u00e0 di poter passare e ottenere come risultati dei parametri. Ma analizziamo nel dettaglio le differenze tra una funzione e una procedura e vediamo da vicino la loro definizione e il loro utilizzo in un programma.<\/p>\n<p>Una procedura, come detto si definisce tramite la parola <strong><em>procedure<\/em><\/strong>. Per esempio:<\/p>\n<p><strong><em>procedure <\/em><\/strong>AggiornaPosizioneSprite(modello : byte, CoordX, CoordY:integer)<br \/>\n<strong><em>label\u2026<\/em><\/strong><br \/>\n<strong><em>const\u2026<\/em><\/strong><br \/>\n<strong><em>type\u2026<\/em><\/strong><br \/>\n<strong><em>var\u2026<\/em><\/strong><br \/>\n<strong><em>procedure\u2026<\/em><\/strong><br \/>\n<strong><em>function\u2026 <\/em><\/strong>{Si! Una procedura, cosi come una funzione pu\u00f2 definire al proprio interno altre procedure e funzioni<strong><em>}<\/em><\/strong><br \/>\n<strong><em>\u00a0<\/em><\/strong><br \/>\n<strong><em>begin<\/em><\/strong><br \/>\nistruzioni che variano;<br \/>\ni valori di X e Y;<br \/>\ndello sprite;<br \/>\nnumero modello;<br \/>\n<strong><em>end;<\/em><\/strong><\/p>\n<p>Nel programma principale poi si utilizzer\u00e0 la procedura, come se fosse una normale istruzione del programma:<\/p>\n<p><strong><em>program<\/em><\/strong> game;<br \/>\n<strong><em>label\u2026<\/em><\/strong><br \/>\n<strong><em>const<\/em><\/strong><br \/>\nnemico=10;<br \/>\ngiocatore = 1;<br \/>\npalla=3;<br \/>\n<strong><em>type\u2026<\/em><\/strong><br \/>\n<strong><em>var <\/em><\/strong><br \/>\nsprite:byte<br \/>\nX,Y : integer<br \/>\n\u2026<br \/>\n\u2026<br \/>\n<strong>Begin<\/strong><br \/>\n\u2026<br \/>\n\u2026<br \/>\n{calcola in qualche modo i valori di posizione dello sprite}<br \/>\nX:=espressione;<br \/>\nY:=espressione;<br \/>\n{e li aggiorna}<br \/>\nSprite:=nemico; {qui si utilizza il valore di una costante}<br \/>\nAggiornaPosizioneSprite(sprite,X,Y);<br \/>\n{calcola in qualche modo i valori di posizione dello sprite}<br \/>\nX:=espressione;<br \/>\nY:=espressione;<br \/>\n{e li aggiorna}<br \/>\nSprite:=palla;<br \/>\nAggiornaPosizioneSprite(sprite,X,Y);<br \/>\n\u2026<br \/>\n\u2026<br \/>\nResto del programma;<br \/>\n<strong>end.<\/strong><\/p>\n<p>Si capisce immediatamente come suddividere il programma in parti pi\u00f9 piccole renda pi\u00f9 efficace la programmazione la procedura pu\u00f2 essere chiamata in ogni punto del programma con i parametri relativi all\u2019azione che dobbiamo compiere. Ovviamente essendo una procedura, cosi come una funzione, un programma a se stante che compie una sola zione semplice, \u00e8 compito del programmatore validare i dati in ingresso al fine di evitare errori durante l\u2019 esecuzione del programma. Questo \u00e8 importante soprattutto per le funzioni. Le funzioni si dichiarano come le procedure, con la differenza che restituiscono un valore nel nome ad esempio una funzione che converte gradi celsius in gradi kelvin avrebbe la seguente struttura:<br \/>\n<strong><em>function<\/em><\/strong> Celsius2Kelvin(gradi:real):<strong><em>real<\/em><\/strong><br \/>\n{anche qui si possono dichiarare costanti, tipi, variabili, procedure, funzioni}<br \/>\n<strong><em>Const<\/em><\/strong><br \/>\nCoeff = 273.15;<br \/>\n<strong><em>begin<\/em><\/strong><br \/>\nCelsius2Kelvin:=gradi+coeff;<br \/>\n<strong><em>end<\/em><\/strong>;<br \/>\nla differenza tra una procedura e una funzione, dunque \u00e8 che la procedura prende in input dei parametri e compie un\u2019azione, mentre la funzione restituisce sempre un valore e deve essere parte di un\u2019espressione, per esempio<\/p>\n<p>temperatura := Celsius2Kelvin(15);<br \/>\nk:=5+(Celsius2Kelvin * 15)-(2*4+4) <em><strong>mod<\/strong><\/em> 15;<br \/>\nscrivere<br \/>\nCelsius2Kelvin(15)<br \/>\nsenza che il valore venga utilizzato in un\u2019espressione o in una istruzione di assegnamento, provocher\u00e0 un errore.<br \/>\nDunque una procedura \u00e8 una porzione di programma che compie un\u2019azione, mentre una funzione \u00e8 una porzione di programma che restituisce un valore di un determinato tipo.<\/p>\n<p>Dalla prossima lezione in avanti, cominceremo ad approfondire il linguaggio. Le fondamenta le abbiamo gettate, ora andremo un po\u2019 pi\u00f9 spediti, con qualche esempio un po\u2019 pi\u00f9 complesso cosi da introdurre gli argomenti nuovi, direttamente programmando.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 4) Lezione 4 Set di istruzioni Le parole riservate sono parte integrante di Turbo Pascal. Non possono essere ridefinite, n\u00e9 usate come identificatori o nomi di variabili. Il Turbo Pascal \u00e8 sostanzialmente il linguaggio Pascal standard rivisitato da Borland inc. Le parole riservate precedute dal [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[3,5],"tags":[],"dipi_cpt_category":[],"class_list":["post-5575","post","type-post","status-publish","format-standard","hentry","category-programmazione","category-turbo-pascal"],"_links":{"self":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/comments?post=5575"}],"version-history":[{"count":5,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5575\/revisions"}],"predecessor-version":[{"id":5580,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5575\/revisions\/5580"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=5575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=5575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=5575"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=5575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}